# Use Arduino for Projects > World Biggest Site for Arduino Projects - Tutorials - Ebooks - Project Ideas ## Posts ### Arduino Homebot Robot Setup in CSC 230 Robot Construction Homebot Within the integration unit, core systems—power, control, and prototyping of the robot—are being converged as part of the Arduino Homebot Robot Setup. Short, flat jumpers improve breadboard wiring by keeping connections secure, tidy, and less prone to short circuits. Laying components like resistors and LEDs flat boosts durability and creates a more reliable, low-maintenance circuit. Component Placement This section briefly describes the basic assembly of a robotic project by mounting battery boxes, a breadboard, and an Arduino Uno into the chassis. With proper positioning, one can easily wire using 6-inch jumpers and ribbon cables, thereby forming a solid base for future connections and simple troubleshooting. Using non-permanent attachment methods is crucial in the project. Avoiding glue allows flexibility during development, making it easier to reposition or replace components. The breadboard and battery units should be mounted with Velcro tape for easy removal without any damage. This design option thus enhances ease of troubleshooting and allows for modular upgrades, keeping the project open for future configurations. This section explains how to mount the Arduino Uno while protecting its underside pins safely. While Velcro is a quick option, using #2 screws with a mat-board base offers better stability. Careful handling and optional spacers help prevent damage, ensuring long-term reliability of the project. A precise method for the Arduino Homebot Robot Setup involves creating custom holes for mounting the Arduino Uno. Using a paper template made from the actual pin layout of the board, users may punch accurate holes in the mounting surface with an ice pick. This guarantees a flush and tidy fit, protects the sensitive pins from damage, and reduces the risk of shorting. All in all, this improves project reliability, establishing a firmer ground to mount the Arduino on. Wiring Strategies Breadboard wiring in the project is explained using an image as a general guide. It highlights the use of ganged ribbon cables for connecting to the Arduino and an efficient layout. This approach ensures stable and controllable connections, increases reliability, maintains wiring organization, and makes assembly and troubleshooting easier. Key power distribution practices in the project include using double power and ground lines to improve connection stability. Keeping the power rails for the motors and the Arduino separate avoids voltage drops from motor surges that could reset the Arduino. Connecting all grounds ensures correct signal reference and circuit operation, improving overall reliability. Using short, flat jumpers improves breadboard wiring by securing connections, reducing clutter, and minimizing disconnection or short-circuit risks. Trimming components like resistors and LEDs to lie flat adds durability and results in a more reliable, easier-to-maintain circuit. voice-controlled toy car An image shows ganged ribbon jumpers used to connect multiple Arduino pins in the Arduino Homebot Robot Setup. This organized wiring method simplifies setup, improves connection reliability, and makes troubleshooting easier by keeping everything neat and traceable. robotic or electronic project Programming Changing the boilerplate demo code is one of the first tasks I recommend students do in any project, and it allows students to get hands-on experience changing existing code. Though the demo code references components like whisker switches and a piezo speaker, it can be modified to run a simple power-up sequence. This helps users build core programming skills and become familiar with the code, laying the groundwork for more complex behaviors later in the project. Port assignments in the project are flexible, not fixed. You can change suggested combinations, such as those for ganged ribbon jumpers, to match available components or your preferred layout. This adaptability allows users to customize wiring based on their needs, making the project more accessible and versatile without affecting functionality. Sensors This section gives step-by-step guidance for assembling whisker switches, an optional but useful sensor for the project. It explains how to secure a piano-wire whisker to a mini-switch using a grooved matboard strip and superglue, with roughening for better adhesion. This process ensures a strong, responsive sensor that supports interactive functions and reliable navigation. sensitive switch specialized punch micro switch This paragraph explains the optional IR distance sensors and their roles in the project. The long-range sensor detects obstacles ahead or around the robot, aiding navigation, while the short-range sensor angled downwards detects drop-offs to prevent falls. These sensors enhance the robot’s environmental awareness, safety, and functionality. indicating its navigational or obstacle detection capabilities Read more: Arduino Homebot Robot Setup in CSC 230 Robot Construction ### HALLOWEEN PROJECT: the Candied Dead Baby The Candied Dead Baby is an Arduino-controlled interactive halloween decoration. It has been designed, created and assembled by three industrial design engeneering students from Elisava. Using servomotors and ultrasonic distance sensors as well as a buzzer, we've designed a product that when an ultrasonic sensor catches movement in front of it, activates a servomotor and a buzzer turns on. the project consists on a box that is "full of candy" with a sign that encourages you to get some. When someone approaches to get some candy, the ultrasonic sensor activates the servomotor and the buzzer. The servomotor opens the box that appears as full of candy, but inside there's a beheaded baby doll, and at the same time the buzzer starts making a repeatedly uncomfortable noise. So this is how we achieved this scary experience: Step 1: Supplies Essential Elements A1 - Arduino BoardA microcontroller board used as the brain of the project to control sensors, motors, and other components. A2 - Piezoelectric buzzerA small electronic device that produces sound or beeps when powered, often used for alerts or alarms. A3 - Ultrasonic sensorA distance sensor that uses sound waves to detect how far an object is from it. A4 - Clear methacrylate boxA transparent plastic case used to hold or protect electronic components while allowing visibility inside. B1 - 400 Tie Points BreadboardA board for connecting electronic components without soldering, useful for testing circuits. B2 - Female to male Dupont wiresConnector wires used to link components and modules to the breadboard or Arduino. B3 - Breadboard jumping wiresSmall wires used to make circuit connections on the breadboard. B4 - DollA decorative or thematic element included for the project’s design and concept. C1 - Servomotor SG90A small motor that can rotate to precise angles, commonly used for movement control. C2 - Wooden BoxA container used to house or support different project parts. C3 - Wooden stick (only one)A structural support or moving arm for attaching parts in the project. C4 - CardboardA lightweight material used for building, covering, or shaping parts of the project. Step 2: Connect the Servomotor, the Piezoelectric Buzzer and the Ultrasonic Sensor Step 3: Sketch the Prototype Step 4: Arduino Flowchart Step 5: Create the Prototype Our prototype at this stage consist on a wooden box with a false bottom to put the Tie Points BreadBoard and the Arduino Board, that goes inside the clear methacrylate box. Between these two boxes there's a space of about 1 cm so we can place the candy to create the illusion of a box full of sweets. We build as well the sign that said " GRAB SOME CANDY". On both of the boxes we made all the necessary holes and cuts so the wires could go through and out of them as needed. We used two pair of screws to attach the top part , made out of cardboard, to the clear box. Step 6: Attach the Servomotor As seen on the pictures this is how we attached the Servomotor to the box. We sticked a Wooden stick to the blade of the Servomotor to increase the strength when it activated. The string that pulled the top was attached form the black cardboard to the highest part of the wooden stick. Step 7: Incorporate the Electrical Part and the Sensor We placed the Tie Points BreadBoard, the Arduino Board and all the wires connected to them on the false bottom. Once al was connected we reenforced the wires so nothing unplugged with insulating tape and redirected the through the holes to attach them to the ServoBoard and the Ultrasonic sensor. Step 8: Build in the Baby The last part of the creation of the prototype is to place the middle wooden platform that holds the beheaded baby that is revealed when the mechanism is activated Step 9: Upload Code to Arduino Step 10: Connect Arduino to Battery or Computer The last step is to upload to code from the Arduino Software to the Arduino Board, and connect the Board to a power source (9V battery or computer). To connect it to the computer you will need a USB cable compatible with Arduino. To connect it to a battery you will need a DC Cable PPBAT Battery Clip and a 9V battery. Both options are equally valid. In our case we used a computer connected with the USB to Arduino cable. Step 11: Final Experience and Conclusions Doing this project, we've been able to extend our knowledge in many different fields such as: Arduino, Arduino coding, prototyping, choosing materials according to the necessities and much more. During all this process, several times, we've find ourselves in situations where things did not go as planned, and so we had to reinvent ourselves and bring out our most creative side. In these situations we improved as a group, learning how to cooperate in the best way and binging out the best of each of us. We're very grateful that this project reaches so many fields therefor we have been able to learn plenty of things. This skills that we've acquired will be of great use for upcoming projects and is has been a great introduction to Arduino, coding and all the elements that we used. Lastly a big thanks to our teacher that helped and supported us, and made The Candied Dead Baby. Source: HALLOWEEN PROJECT: the Candied Dead Baby ### Arduino XMAS Hitcounter Arduino XMAS Hitcounter Christmas is coming closer, so here is my contribution to put you in the right mood. It is a blog hitcounter, that rings a bell. Literally. It puts a smile on your face, every time someone hits your blog. It consists of an Arduino board, a bell, a servo and a couple of lines of code in c, python and php. Most parts are fairly common and should be easy to get. Step 1: Tools and Materials So what is needed? Arduino Board. I got an Arduino Diecimila from Adafruits. In the meantime there are really cheap and handy clones out there, e.g. the really bare bone board from Modern Devices, especially if you want to use them on a breadboard. A servo motor. Any servo will do. I took an old one that was used in my former hobby. A bell. Preferably one that is small enough to shake it with the servo. Two paperclips. A large one to hold the bell and a small one to build the actuator to ring the bell. Wires to connect the servo with the Arduino. A website. In fact it has not to be a website or a blog. Actually everything that can be counted, will work. A PC or a Mac to connect the Arduino board with the blog or website. You may need an soldering iron, if the wires can not be connected directly to the Arduino. Step 2: Hardware Assembly The bell is held by a strong paperclip. The small paperclip is used to form a kind of arm that is atached to the servo motor. Note, that you want to bent the paperclip that holds the bell in a way, that already a little shaking generates a ding. Step 3: Schematics There is no real schematic. Just attach the servo motor to the Arduino. The servo has three wires: yellow or orange: signal red: VCC brown: GND The red and the brown one are attached to the according pins on the Arduino (5V and GND). The orange one is wired to pin 2. It will signal the servo in which direction to turn. You may want to solder small connectors to the wires if the wires do not fit directly into the Arduino or the servo. Step 4: Programming the Arduino Arduino If you are new to the Arduino, it is a small board, fully assembled with a AVR microcontroller. It is well suited for hacking and interacting with your environment. Many things that are hard with microcontrollers are rather easy with Arduino. Some of the advantages: no need for a separate programming device (programmer) comes with an integrated development environment (IDE) runs on any platform, Windows, Mac, Linux. easy connection to your PC with USB hardware is open source (but the name Arduino is not) has a great community More information can be found at the official Arduino website. Be sure, to check out John's Arduino instructable for further details on how to get started with Arduino. What does the software do? The small piece of software that gets uploaded to the Arduino, controls the servo. It receives single bytes via the serial connection over the USB cable. If it receives a value of 5, it moves the servo arm five times forth and back. So the max value to send is 255. Program the Ardiuno So I assume you have downloaded and installed the latest Arduino IDE from Arduino.cc. For now it is version 0010 Alpha. To drive the servo more comfortably you have to download a library. You can find it on the Arduino Playground. Unzip it and put the folder in .../arduino-0010/hardware/libraries/. Attach the Arduino to your PC with the USB cable. Open the IDE and start a new sketch. Sketch is Arduino speak for program. Select File -> New. Select the appropriate serial device (Tools -> Serial Port). This depends on your environment, for me it is /dev/tty.usbserial-A4001JAh. Download the attached source file and paste it into the new sketch. Hit the save button. Hit the verify button. This compiles your sketch into a hex file that can be transferred to your Arduino. Hit the upload button to transfer your sketch to the Arduino. Testing Now your hitcounter is ready for some action. Let's see if it works. Hit the serial monitor button. Select the text box next to the send button. Hit the tab key and send it. By now the servo arm should move forward and back. Phew. That was the hardest part. For now you can send a byte to the Arduino and the servo waves at you. Next is to find something that you want to trigger the bell. We are almost done. Step 5: Make It a Hitcounter To make it a hitcounter for your website, we need two small code pieces. One two create and take care of the counter and a second to fetch the value of the counter and to send it to the Arduino. Note: If you are not familliar with Python or PHP, the scripts can be easily ported to your favorite programming language. The counter Here is a small PHP script, that reads a value from a file (hitcounter.txt), increments it and writes it back to the file. That is all, that is needed. This file can be saved as counter.php on your server for example. You can then trigger a count with you webbrowser pointing to http : //www.youdomain.com/counter.php. I included this snippet in my wordpress blog. $hits = file($count_my_page); $hit = trim($hits[0]); $hit++; $fp = fopen($count_my_page , "w"); fputs($fp , "$hit"); fclose($fp); echo $hit; ?> The glue code This next code snippet is used to fetch the counter. I used Python but anything should work. It opens an HTTP connection and fetches the hitcounter.txt. If the value has changed since the last fetching, the diff is calculated and pushed to the Arduino. This is done every ten seconds until you interrupt the script with crtl-c. Adapt the myUrl and the serial connection below to your needs. # # fetch counter # import time import urllib import serial # usb serial connection to arduino ser = serial.Serial('/dev/tty.usbserial-A4001JAh', 9600) myUrl = 'http://tinkerlog.com/hitcounter.txt' last_counter = urllib.urlopen(myUrl).read() while (True): _ counter = urllib.urlopen(myUrl).read() _ delta = int(counter) - int(last_counter) _ print "counter: %s, delta: %s" % (counter, delta) _ ser.write(chr(ord(chr(delta)))) _ last_counter = counter _ time.sleep(10)python counter.py and you should see the output of the counter. If you point your browser to the URL of your counter.php and hit reload, you should hear your hitcounter ringing. Yes, now we are done. Time to lean back and enjoy our work. Step 6: Conclusion It is the first time, that I built something, that has moving parts. That is the first step to bridge the gap between the virtual and the real world. And it was really easy, the code is straight forward. Also most of the parts were in my trash bin, except the bell. Putting everything together and waiting for someone to hit my blog was fun. Hope you enjoyed it. Source: Arduino XMAS Hitcounter ### Display Live Txts on Costume at Party w/ Scrolling LED Belt Buckle using arduino This project shows how to send SMS text messages to a cheap scrolling LED display via an Android app and arduino with USB host shield. The project was originally inspired by a friend wanting to make a "sexting themed" costume, with a scrolling LED display of live texts sent from people at the party. We found a $13 LED belt buckle online, which looked cool, but only had a few buttons to manually enter in messages. A couple wires and lines of arduino code later, we were able to automate entry of messages. We then added a host shield and wrote a small Android app to send txt messages on to the arduino. Step 1: Required Parts and Code Components: --Android Phone (2.3.3+) --Scrolling LED Belt Buckle ($13 at writing!) --Arduino --USB Host Shield (SparkFun one used here) Code: --Microbridge Arduino Host Shield to Android Library (Adb) --Demo arduino code for writing to the LED display and receiving SMS text messages via the USB connection, and Eclipse android project to pass SMS messages to arduino. Step 2: Automate Message Entry on LED Display The display has three buttons that you use to change the messages. It's a long process, since you have to scroll to each letter one click at a time, and there's no speed-scroll. We pop open the case to see if we can easily attach wires to the buttons in order to automate message setting. The three push button switches simply short the bottom side of the switch to ground when pressed. We're going to simulate this action by switching the bottom side of the swtich between a high impedance pin (a digital input) and ground (a low digital out). This is easily done by switching the direction of the pin on an arduino, using pinMode(pin, INPUT) or pinMode(pin, OUTPUT). Just make sure the output is set Low before setting the pin to output (digitalWrite(pin,0)). Four wires are attached, three for the switches, one for ground.     For more detail: Display Live Txts on Costume at Party w/ Scrolling LED Belt Buckle ### Critter Twitter Trap using Arduino Havahart traps are really nice if you have pests to rid your home of but you don’t feel the need to do this through means of killing the animal. The problem we are faced with is constant monitoring of the trap. If you forget to check back frequently (usually at least once a day), you risk having the animal dying in the cage simply due to shock or anxiety. As a result, you end up being more cruel to the animal than if you had just put it out of it’s misery to begin with. It is this problem that spawned my “Critter Twitter Trap”. The goal is to be notified as soon as the trap is "sprung", thus we know when to check it. I'm a lazy engineer looking for creative solutions so I can do less work. ;) I will show you how to make a simple modification to a common pest trap which will send a twitter message when the trap has been sprung. You can see what happens when the trap is sprung by viewing my Critter Trap twitter account here. Most of these posts were tests, but a few were live catches! I then setup my personal twitter account to monitor new tweets from the Critter Trap account and send me a text message if anything new is posted. This is a very simple solution requiring minimal hardware and electronics aside from a few key components. Most of the work is in the code which I will provide in this Instructable. Interested? Read on... Step 1: Gather The Materials Materials: Havahart 1025 Two-Door 18 x 5 x 5-Inch Cage Trap or similar (Amazon) Arduino Yún microcontroller board (Amazon) Tilt Switch (See notes below) 9V Battery 9V Battery Connector (Amazon) Stiff scrap metal or angel bracket (for tilt switch mounting) LM7805 Voltage Regulator (Amazon) 2 10uF Capacitors (Amazon) 1 .01uF Capacitor (Amazon) Notes: As you can see from the pictures, I am using a mercury tilt switch simply because it is what I had on hand. You can find many variations of this on Amazon and from other sources. If your particular trap has a vertical sliding door, I would recommend a magnetic switch such as this. You will see that I link to "bulk pack" deals on Amazon for items such as the capacitors and voltage regulars. These are very common items for electronics projects and you're only paying about 3x the amount you would pay at RadioShack for one item. This way you can get 100 capacitors for about 3x the price as ONE. Step 2: Attach Tilt Switch The method in which you do this is really up to you, and depends greatly on the type of trap you have and the type of of tilt switch you get. The key is to make sure the switch is in the off position while the trap is "loaded" as seen in the pictures. Here I used a old scrap L bracket and attached it to the trap. I then used a Dremel tool to cut an oval hole in the bracket. Then I simply used hot glue to secure the switch in place. Very simple assembly! Step 3: Arduino Yún WiFi Configuration These detailed step-by-step instructions are for those of you just getting started with a brand new Yún. If you already have a Yún connected to your local WiFi and running, please proceed to the next step OR reset your Yún as follows. Reset Your Yún If you want to follow along and reset your Yún to its default state, press the WLAN reset button (shown in picture) for at least 30 seconds (the board must have power through USB or external source). The onboard blue WAN LED should flash consistently during this process. When done, the board reverts to the original settings as if it had been re-flashed or taken out of the box. Among other things, this removes all installed files and network settings. Getting Started Power up your Arduino Yún Connect your PC (or mobile device) to the WiFi that will be broadcasting from the Yún. (will look something like: Arduino Yun-90383747IUADA) From that PC, pull up http://arduino.local Default password is 'arduino' Scroll down to the "Timezone" drop-down and set to your appropriate zone. Set your Timezone Scroll down to "Detected Wireless Networks" and select your local WiFi network Enter password for your local network Click the large "Configure & Restart" button After a couple minutes, the Yún should reboot and connect to your local network. The admin interface will provide a link saying "Restarted! You'll find me here". You may need to wait longer than the interface tells you to connect. Re-connect your PC (or mobile device) back to your normal WiFi network Test by attempting to access http://arduino.local. You should see a screen similar to the one shown (on my mobile device, but could just as easily do from a PC). If you can't connect, start over again with the getting started steps.   For more detail: Critter Twitter Trap using Arduino ### How to use the IR library with an attiny using Arduino This Instructable will tell you how to use the IR (infrared) library on an Attiny. I will be using an Attiny85 with an Arduino Uno. I won't cover how to upload sketches to the Attiny just how to use the IR library with it. the best tutorial on uploading sketches I've found is this YouTube tutorial : (a quck note and warning, You will need to have software serial working for the attiny (follow this instructable : http://www.instructables.com/id/Attiny-serial-monitor-using-arduino-walkthrough/) or google it Step 1: Getting the files The main issues that you would come across when trying to use the IR library with an Attiny are errors like this: C:\Program Files (x86)\Arduino\libraries\IRremote\IRremote.cpp:229: error: 'TCCR2B' was not declared in this scope this is all to do with different timers on the Attiny than the Atmega chip but we don't need to worry about it unless you want to change the library code (THAT IS SOME HARD STUFF DON'T CHANGE THE CODE) but there are some libraries or the same library just ported to the Attiny so the codes we write is the same as it is for the arduino. you can download the zip file here : http://gammon.com.au/Arduino/IRremote_Attiny.zip Just extract the files and put the IRremote file in the libraries folder in the the arduino folder the path should look like C:\Users\(your user)\Documents\Arduino\libraries you will also need to download this for the next step: http://forum.arduino.cc/index.php?PHPSESSID=f55lj4... Step 2: Fixing the final error Hopefully if you try to upload a sketch utalising the IR library you should now be left with this error c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr25/crttn85.o:(.init9+0x2): relocation truncated to fit: R_AVR_13_PCREL against symbol `exit' defined in .fini9 section in c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/avr25\libgcc.a(_exit.o) But don't worry if you don't you may likely be using the wrong core so just skip to step 4 (Troubleshooting) and come back to this step. if you have the error above you are going to need to extract the second download from the last step (tinyPCRELpatch.zip) this step is quite easy just copy the hardware folder to the hardware folder in where you installed the arduino ide (IT IS NOT WHERE WE PUT THE IR LIBRARY FOLDER) it will be some where in your program files (x86) (or the version for your operating system and pc). The path for mine is: C:\Program Files (x86)\Arduino\hardware once you copy it it will ask you if you want to replace Id.exe (make sure its only Id.exe and nothing else) select replace and let it copy (it doesn't affect the normal ide so once its there you don't need to worry. if you are using a mac read reply #4 on this thread: http://forum.arduino.cc/index.php?PHPSESSID=8t8a2l... Step 3: A bit of code This step is about code that I used to first get this working it was code that i used on the arduino except different pin numbers due to the less amount of pins on the attiny85. however for this code you will need to use an arduino and the serial monitor just so you can find out the code the buttons use. all the code and can be found here : http://www.instructables.com/id/The-Easiest-Way-to... Step 4: Troubleshooting If in step 2 you did not get the different error you probably are using the wrong. the core used for software serial should work but if it doesn't then you can download this one: https://arduino-tiny.googlecode.com/files/arduino-... follow the installation guide in the read me file if your computer says that it can't open it just browse for a program and open it in note pad it should open just fine anyway. If you want to switch back to using the IR library for the Arduino and not the Attiny the you will need to replace the ported library with the regular library which you can download from here: http://www.mediafire.com/download/jd5j7911amju36g/... i hope this helps this is my first instructable if there are any problems feel free to message me as i know it van be hard to find a straight tutorial for this on the internet. All the infomation in this tutorial came from these sites: http://forum.arduino.cc/index.php?topic=180611.0 http://forum.arduino.cc/index.php?PHPSESSID=8t8a2l... https://www.instructables.com/id/Attiny-serial-moni... https://www.instructables.com/id/The-Easiest-Way-to... Source: How to use the IR library with an attiny using Arduino ### To blink LED from mobile phone or iPod or another computer via WiFi Hello Everyone, I like this site too much, the site really played very important role in awakening my enthusiasm and creativity. This is my first project and its really for the first timers project. I got this project from Instructible site , modified to access from web and mobile. My aim was to control some electronics from mobile. I wanted to achieve it with existing devices from our daily use ,without buying any special circuit. Also want to keep it simple so that it would be easy for someone to start as his first project. For the project we need, Laptop with wifi capability - Wify Lan - Mobile phone or ipod with Wify Connectivity - Visual Studio .net. (You can also develop it into jsp or java but I already have .net) - Main component Arduino - Led - 1 k Registor - Connecting Wires Step 1: Arduino Code Upload following sketch to arduino . I am connecting LED to pin 8. You can modify it with the number you want to connect to. //Arduino Control int ledPin =  8;    // LED connected to digital pin 8 int incomingByte = 0; // for incoming serial data // The setup() method runs once, when the sketch starts void setup()   { // initialize the digital pin as an output: pinMode(ledPin, OUTPUT); Serial.begin(9600); } // the loop() method runs over and over again, // as long as the Arduino has power void loop() { if (Serial.available() > 0) { // read the incoming byte: incomingByte = Serial.read(); if(incomingByte == 105){ digitalWrite(ledPin, HIGH); } else if(incomingByte == 111){ digitalWrite(ledPin, LOW); } } } Step 2: The c# .net code We are basically developing simple website which will be accessed by mobile or computer. The website has “On” and “Off” button. Following is the c# code using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO.Ports; namespace DotNetControl { public partial class _Default : System.Web.UI.Page { SerialPort port = new SerialPort("COM8", 9600, Parity.None, 8, StopBits.One); protected void Page_Load(object sender, EventArgs e) { try { if (port.IsOpen) { port.Close(); } } catch (Exception exp) { Response.Write(exp.Message); } } protected void btnOn_Click(object sender, EventArgs e) { if (port.IsOpen) { port.Close(); port.Open(); port.Write("i"); port.Close(); } else { port.Open(); port.Write("i"); port.Close(); } } protected void btnOff_Click(object sender, EventArgs e) { if (port.IsOpen) { port.Close(); port.Open(); port.Write("o"); port.Close(); } else { port.Open(); port.Write("o"); port.Close(); } } } } As you can see in the code above protected void btnOn_Click(object sender, EventArgs e) { if (port.IsOpen) { port.Close(); port.Open(); port.Write("i"); port.Close(); } else { port.Open(); port.Write("i"); port.Close(); } } I am making checks before opening the port , if the port is open then close it and again open it for sending .This is because in web application it always gives error that port is open or port can not be accessed and similar error though the port is available . I tried to avoid these errors. Step 3: Other part we need to take care is while deploying the website   For more detail: To blink LED from mobile phone or iPod or another computer via WiFi ### Laser Tag Stuffed Animals Ever feel like there aren't enough toys at the intersection of cuddly and terrifying? Wish your stuffed animals could double as weapons? Then I've got the toy for you. These Laser Tag Stuffed Animals easily transform from being a cuddly night light to the world's softest laser tag weapon. Check out my laser tag plushie in action! These deadly plushies, when in "war mode," can be used as laser tag guns. They fire and receive 100% child-safe infrared beams from up to 50 feet away. The plushie's eyes light up different colors when it is shooting or being shot; the plushie's heart fades as it gets shot, acting as a health meter to show how many times the stuffed animal has been successfully fired at. And when you want the toy to turn back into a cuddly night light (entering "warmth mode"), simply push the tail down. Though these particular laser plushies are meerkats, the CAD models and electronics can be adapted for any stuffed animal with a tail. Step 1: Preparation Major Components in Project Materials: Stuffed animal Sewing kit, velcro Moldable polyurethane plastic Aluminum foil Small springs Electronics: Arduino Arduino ProtoShield IR LED IR Receiver NPN Transistor 3 RGB LED’s Buttons 9 volt battery Tools: 3D printer Glue gun Solering iron, solder A complete version of my Arduino code can be found here. Now choose your victim stuffed animal, and get cracking. Step 2: IR Laser System IR is the backbone of the laser tag system. The infrared receiver is an IR diode plus some circuitry which makes the receiver sensitive only to infrared pulses of 38 kHz. This blocks out any background infrared from the environment. The IR receiver has three pins: 5v, sensor, and ground. When it detects an 38 kHz infrared signal, the sense pins goes to ground. Otherwise, the sense pin is at 5v. Now let's drive an infrared LED at 38 kHz so it can interact with our receiver. The simple driver circuit pictured consists of an IR LED, a higher resistance resistor, a lower resistance resistor, and an PNP transistor. Input goes to the collector of the transistor. The base and emitter short when the collector is at a high voltage, allowing current to run through the IR LED. Running the LED with this circuit allows for more current (and thus a stronger IR signal and farther shooting range) than simply connecting the LED from an Arduino output to ground. The circuit diagram and breadboard set up are pictured below. Make sure to connect the transistor's input to the Arduino pin 9! Otherwise the software here will not pulse your LED at 38 kHz. This code uses direct pin manipulation to oscillate the output pin at precisely 38 kHz. Once you're comfortable with the circuitry setup, it's time for some stuffed animal surgery. Cut a slit down the back of your plushie, and remove the stuffing (this will make attaching the circuitry easier). Cut two very small slits in the head of our plushie: one for the IR LED, one for the receiver. Before you hot glue the elements to their respective slits, solder  several inches of insulated wires onto each pin of the receiver and each leg of the LED. Having longer wires will make it easier to organize/attach to the Arduino. Once you've hot glued the elements to the plushie, you're ready to start adding some RGB LED's! Step 3: Molding Heart + Eyes LED's don't shine very well through fabric. A bright but diffused glow can be created by putting an RGB LED behind a molded plastic part. We need three molded pieces: two eyes and one heart. Use a glue gun to attach an RGB LED into the holes in the back of both molds. You can print the heart with these files: first half of mold, second half of mold. You can print the eyes with these files: eye CAD After gluing the LED's to the molds, solder several inches of wire to each LED lead. Now glue each eye into the eye socket area of your plushie. Step 4: Controlling the Flashing Wiring up the heart and the eyes is more patience than thought. The two eye LED's can be soldered together in parallel and controlled by the same output pins. Here's a diagram of how to solder your various wires to the Arduino. Here's how this stuffed animal responds to different stimulus: Warmth Mode: - Eyes glow blue - Heart beats green War Mode: - Eyes glow red: the meerkat is neither shooting nor being shot at - Eyes glow blue: the meerkat has just been shot - Eyes glow green: the meerkat is shooting - Eyes flash red, green, blue for two seconds: meerkat has been drained of health and is respawning. Download this code to control your glowing stuffed animal!   For more detail: Laser Tag Stuffed Animals ### Simple Animatronics with Servos and Arduino using arduino Simple Animatronics with Servos and Arduino using arduino Servos are surprisingly easy to use. Even more so than simple DC motors and steppers when you have a microcontroller. In this instructable we'll use a 'duino to drive five servos which will control a doll's limbs and neck. I bought the servos at HobbyPartz for a couple bucks apiece and found the doll at a swap meet for a dollar. The doll says 1967 Mattel on the back and I later learned she is a See 'n Say type doll. The hard plastic body was important for a successful installation. Step 1: Dismemberment Pop off the arms and use a coping saw to split open one side. Then crack open the other side and remove the guts. Be careful along the way to ensure that everything can be put back together after. I also spent at least 20 minutes trying (and failing) to get the inner workings functional. Step 2: Turning Heads The Neck First dry fit the server horn in the neck and trim it as needed. The servo needs a base to stand on so we'll use some Mighty Putty (aka Epoxy Putty) to fill in the neck. This stopper will serve as a base for the servo which turns the head. It must stick to one half of the body but not the other to allow the torso to be opened and closed freely. Use a little petroleum jelly on one half of the torso and the servo horn to prevent them from sticking. Fill the neck with putty while focusing on how the torso comes apart. Allow the putty to cure for a minute or two to eliminate some of the tackiness. Then press the servo horn into the neck to create a firm footing for the servo. Finally remove the servo and top half of the torso. Allow the putty to cure further while testing the fit a few times before it cures completely. The putty can be filed and sanded after it's hard but it's much easier to adjust it prior.   Step 2: Turning Heads The Neck First dry fit the server horn in the neck and trim it as needed. The servo needs a base to stand on so we'll use some Mighty Putty (aka Epoxy Putty) to fill in the neck. This stopper will serve as a base for the servo which turns the head. It must stick to one half of the body but not the other to allow the torso to be opened and closed freely. Use a little petroleum jelly on one half of the torso and the servo horn to prevent them from sticking. Fill the neck with putty while focusing on how the torso comes apart. Allow the putty to cure for a minute or two to eliminate some of the tackiness. Then press the servo horn into the neck to create a firm footing for the servo. Finally remove the servo and top half of the torso. Allow the putty to cure further while testing the fit a few times before it cures completely. The putty can be filed and sanded after it's hard but it's much easier to adjust it prior. The Head Now it's time to mount the servo to the head. The first thing we want to do is remove the scalp. Follow just under the hairline with a razor and remove it completely. Take a moment to orient the horn so that it has an even range of motion in either direction while it's oriented perpendicularly to the face. Place the horn in it's footing and run the wire down the side of the putty. Turn the servo in the direct opposite the wire and make sure it has enough slack to turn completely. Mark the wire and the putty when you're happy with the positioning. Make a groove in the putty with a saw so the servo wire can run down the neck and into the body while it's closed. Next put the servo in the head and feed the wire down through the groove. Close the torso and put the head back on. You should now have head on the body with the motor in the head and the wire running down the neck into a closed torso. Adjust the head and servo so that they're lined up. Make sure there's an even amount of spacing between the servo and either side of the head. Take a measurement of this space and cut a length of 3/8" dowel. Dry fit the piece of dowel on either side of the head and re-cut if necessary. Cut another piece of dowel the same length once you're happy with the fit. Now wedge the pieces of dowel on either side of the servo. Drop a small amount of hot glue on each side where the dowel meets the servo and allow it to dry. Remove the servo with the dowels sticking to it. The dowels should hinge on the small drop of hot glue while maintaining an accurate placement. Take advantage of this hinging effect to apply more glue between the servo and dowels before clamping them together to create a secure, tight fit. The dowels should now be attached to the servo but not the head. I initially tried gluing the dowels to the head but the glue didn't stick. Drill a small pilot hole through either side of the dowel. Place the servo back into the head with the horn planted firmly in its footing and use two screws to fasten the dowels to the head. Remove the head from the body and disassemble the torso. For more detail: Simple Animatronics with Servos and Arduino ### Arduino / Raspberry Pi Internet Radio Arduino / Raspberry Pi Internet Radio This project represents an engaging integration between the Arduino microcontroller and the Raspberry Pi single-board computer to construct a functional Internet Radio. The project is best suited for individuals at an intermediate skill level, particularly those who already have some experience with Linux-based environments. While the technical requirements are not overly complex, having prior exposure to Linux commands or access to someone familiar with the system will significantly ease the implementation process. In this setup, the Raspberry Pi serves as the backbone for streaming and audio processing, while the Arduino functions as an input/output interface, handling display feedback and playback control. This division of labor highlights the efficiency of combining a high-level computational unit with a low-level microcontroller for seamless interactive systems. Raspberry Pi runs mpd music player daemon to receive and decode the internet radio stream. ALSA running on the Raspberry Pi provides the sound through either the Jack Socket or the HDMI output. Arduino runs a nanpy interface code to interface with Python, providing Text output of the Radio Station playing and Button inputs to control Playback. Objectives: Learn how to use the mpd/mpc on the Raspberry Pi Learn how to use the nanpy library for Python to interface the Pi to the Arduino Make a Cool Internet Radio Install the Required Packages for mpd/mpc The first thing we have to do is update Raspbian and install the required packages. Make sure you're logged in (obviously), and you have an Internet connection. 1. Update Raspbian to the latest packages $ sudo apt-get update 2. Install the mpd / mpc packages $ sudo apt-get install mpc mpd This installs the Music Player Daemon (mpd) and it's client mpc. You use the mpc client to configure mpd to add radio streams to the playlist, start and stop the player etc. Install the Required Packages for Python-nanpy We want to be able to talk to Arduino from Python running on the Pi. To do that, we need to install the nanpy library for Python and the nanpy firmware for Arduino. 1. Install Arduino packages to build the nanpy firmware for Arduino $ apt-get install arduino 2. Get the nanpy library for Python and extract from /home/pi $ wget http://pypi.python.org/packages/source/n/nanpy/nanpy-v0.7.tar.gz$ tar xvf nanpy-v0.7.tar.gz 3. Get setuptools for Python (a dependancy for nanpy) and extract $ wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz#md5=7df2a529a074f613b509fb44feefe74e$ tar xvf setuptools-0.6c11.tar.gz 4. Get pyserial for Python (a dependancy for nanpy) and extract $ wget http://pypi.python.org/packages/source/p/pyserial/pyserial-2.6.tar.gz$ tar xvf pyserial-2.6.tar.gz 5. Go to the setuptools directory and install Python setuptools $ cd setuptools-0.6c11$ sudo python setup.py install 6. Go to the nanpy directory and install the Python nanpy library $ cd ../nanpy$ sudo python setup.py install 7. Go to the serial directory and install the Python serial library $ cd ../pyserial-2.6 $ sudo python setup.py install Now we've got the files we need let's put the nanpy firmware on the Arduino. Put the nanpy Firmware on the Arduino nanpy allows a Python program runing on the raspberry Pi to operate the Arduino using conventional Arduino-Sketch syntax e.g. the Python program to read an analogue input from Arduino might read: int val = Arduino.analogRead(14) nanpy has two components: i) a library for Python that allows Arduino commands to be written in a familiar syntax and communicate with Arduino; ii) firmware that runs on Arduino, communicating with Python on the Pi We installed the Python part of nanpy, and downloaded the Arduino part of nanpy on the Pi in the last step. Now we need to upload the nanpy firmware to Arduino. Plug Arduino into the USB of the Raspberry Pi. 1. Go to the nanpy firmware directory and upload to Arduino $ cd ../nanpy/firmware$ export BOARD=uno$ make$ make upload If you get a report that the device is not found on /dev/ttyACM0 , plug the Arduino into the other USB port.  Read More:  Arduino / Raspberry Pi Internet Radio ### 3D-Printed Prank Vibrating Cup 3D-Printed Prank Vibrating Cup Picture the following: you have an nice white cup in front of you. It's filled to the brim with sparkling, cool, and refreshing H20. Your fingers curl around the nicely curved handle, and you bring the cup to your lips. Suddenly, a strong vibration assaults the nerves in your hand, causing you to drop the cup and spill water all over every surrounding surface, including yourself. This might not sound too fun for the participant, but I can personally guarantee you that it will elicit much more than a chuckle from any bystanders. Let's get started making it! Step One: Print it! In the attachments section of this build are two .stl files: base.stl and cup.stl. You're going to have to print both of these out on some type of 3D printer. I have had success with higher infills and small layer heights to maintain the waterproofness of the mug, but you can experiment. Infills around 50% or above give the cup a nice solid feel as well. To print it out really quickly but have some leaks you can use about 20% infill and a layer height of 0.3mm. Don't use any supports! Note the orientation of the parts in the screenshot above - this is how they should be printed. The attached files may not default to this. The reason the mug is in two pieces is so that the electronics can be removed, allowing you to wash it. Step Two: The Circuit Board Now you're going to need to construct the circuit that makes this whole thing fun. It's actually pretty simple! The way the cup detects if it's picked up is by measuring ambient light. When there's a sudden spike in light, it's safe to assume that the mug has been lifted, and the motors should start vibrating! This light measuring is done through a phototransistor. The motors are driven using small transistors as switches. They are pretty small, so there's not really any need for a dedicated motor driver chip or circuit; the transistors will do quite nicely. Just don't connect the motors directly to the pins on your microcontroller! For more detail: 3D-Printed Prank Vibrating Cup ### Persistence Of Vision Persistence Of Vision Persistence of vision is an optical illusion, it works on a simple phenomenon how our day to day television works. MY first pov was six months before with arduino uno and with motor. However it is best to have a small and portable device that can be carried anywhere and image can be seen without any external motors or fan This small portable pov version uses attiny 85 ic, smaller variant of arduino uno that uses atmega 328 ic. This time, I made pov to give my sister as a gift .There are many tutorials on how to make pov but lot of them have tons of wires and motors and many a time uses the arduino uno board itself .so I thought, to come with no wire small pov with built in power source and a switch. By switching the internal crystal speed to 1 MHZ of attiny85, the image was seen more clearly without any motor. With proper camera shutter speed control the image can be seen nice and clear. Step 1: Materials and Tools Arduino UNO Attiny 85 5 leds of any colour Breadboard soldering ion and solder wire Cutter Dotted pcb Hacksaw Slider switch 8 pin ic socket 3v cr2032 coin cell battery and holder jumper wires Step 2: MAKING THE BOARD Cut the Dotted pcb into 9 cm by 3.5 cm using Hacksaw Solder the led's on to the board and using cutter cut the extra led foot . solder the 8 pin ic socket on the board as shown in the picture Connect the ground of all leds to attiny 85 pin 4 connect the rest of circuit as given in the circuit diagram picture.make sure you use solder bridge technique,as the whole board should have no wires. check all the connections using multimeter to check if two traces are not shorted. clean the pcb and now we will solder the switch and battery holder put the coin cell into holder and check with multimeter which pin is positive and negative solder the pin of battery holder and slider switch as shown in the picture connect the 8pin of ic socket to middle pin of slider switch and first pin of slider will to positive terminal of battery holder Now trace the gnd to connect check every single connection if shorted use de soldering pump and redo the traces. Thank you Hemal Chevli for sharing the pcb version of pov https://github.com/hemalchevli/POV Programming the ATtiny85   Step1. Install the ATtiny support in arduino ide Open the preferences dialog in the Arduino software. Find the “Additional Boards Manager URLs” field near the bottom of the dialog Paste the following URL into the field (use a comma to separate it from any URLs you’ve already added) https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json package_damellis_attiny_index.json Click the OK button to save your updated preferences. Open the boards manager in the “Tools > Board” menu. Scroll to the bottom of the list; you should see an entry for “ATtiny”. Click on the ATtiny entry. An install button should appear. Click the install button. The word “installed” should now appear next to the title of the ATtiny entry. Close the boards manager. You should now see an entry for ATtiny in the “Tools > Board” menu. For more detail: Persistence Of Vision ### HID Attack Over WiFi Using Arduino MKR1000 HID Attack Over WiFi Using Arduino MKR1000 Arduino MKR1000 as a HID, for performing HID penetration testing over WiFi networks. Things used in this project Hardware components Arduino MKR1000 × 1 Story Arduino MKR1000 Today I have an Arduino MKR1000 which is a board with built-in wifi chipset specially designed for IOT projects. Recently I came to know that, this little board can act as a Human Interface Device such as a keyboard or a mouse. So I thought of using it for some HID attacks over WiFi. In this video, I will show you a small demo of some basic attacks. Click the subscribe button down this video. Here, the board is programmed in such a way that, whenever I power it up, it will connect to my mobile phones WiFi network and starts a web server at port 80, which can be accessed from any web browser in my phone. So what I can do is connect this board to my victim PCs back USB port and walk away so that the victim wont be suspicious. Now I can open up a browser, go to MKR1000 board's IP address and wait for the victim to walk away from his computer. When he is away from the computer, if the PC is not locked, we can easily do HID attacks remotely. One advantage of this is we can store multiple commands in this baord and we can issue one by one from our phone whenever we want. Which means, we can use this same for multiple devices without uploading the code each time for each purposes. How To Do It?  Video Tutorial Download, Install and Setup Arduino IDE First thing to do is download and install Arduino IDE from Here. Once you install it, now its time to add Arduino MKR1000 board to the board manager. Then you have to install WiFi101 library from the library manager. Download the Code The code is available in the github. You can download it from Here. This was written as experimental code and it is not well written. I have plans to update the code with support for other OS and more complicated attacks in the future. Editing the Code Now all you have to do is do some basic modifications in the downloaded code. Just change the ESSID and Password. Now connect the board and upload the code to your board. And thats it. Happy Hacking You will find more fun arduino projects in arduino, raspberry pi and Penetration Testing in my Youtube Channel You will find full Instructions in my Blog - www.greenterminal.in Code Github https://github.com/greenterminal/ducky_over_wifi.git rootsaid / ducky_over_wifi HID or Human Interface Devices are Devices that takes input from human and pass it on to the device connected to it. HID devices includes keyboard, joystick, mouse, touch pad, graphic tablet etc. There is a Library available in arduino which enables Digispark to acts as a keyboard and send keystrokes to PC. We are making use of this library to execute a metasploit reverse shell python code in the victim's machine and gain a reverse shell. Here, we will be using an Arduino Board, Arduino MKR1000 to integrate wireless network connectivity and perform HID attacks over WiFi — Read More Download as zip Source : HID Attack Over WiFi Using Arduino MKR1000 ### Arduino & Visual Basic 6 Light Controller Arduino & Visual Basic 6 Light Controller This project illustrates an early attempt at bridging Visual Basic 6 (VB6) with the Arduino platform through serial communication over a USB interface. While the concept originated as a beginner’s exercise in VB6 after only two weeks of learning, it highlights important principles of cross-platform interaction, string parsing, and hardware-software integration. The work demonstrates not only how VB6 can be applied to microcontroller projects but also how external services, such as Gmail, can be interfaced programmatically to extend automation beyond the local system. This makes it both a practical learning exercise and an exploration of legacy programming languages in modern embedded contexts. Step 1: Arduino Programming and Circuit Design Development begins at the lowest hardware level with the Arduino UNO. The Arduino must first be coded to handle basic LED control using digital outputs. For this prototype, six output pins were utilized, chosen deliberately to take advantage of Pulse Width Modulation (PWM) functionality. The schematic for the system was created using Fritzing, a popular open-source electronics design tool. This diagram ensures clarity in wiring and provides a reusable reference for hardware assembly. A significant portion of the parsing logic was derived from an online resource shared by pwillard, whose work on the “Live for Speed” Racing Simulator included efficient string manipulation routines. These parsing techniques were adapted here to allow smooth serial communication and command interpretation between VB6 and the Arduino. Attached resources include the Arduino sketch (Light.rar) and the VB6 project files (VBLight.rar), which can be used as direct references for replication or extension. Light.rar2 KB VBLight.rar427 KB Step 2: Visual Basic 6.0 Programming On the software side, the focus shifts to Visual Basic 6.0. Though dated, VB6 still provides a relatively straightforward environment for serial communication tasks. To improve modularity, certain functions were encapsulated as class modules, which allows the creation of DLLs for reusability. File Parsing Functions One of the first functions implemented enables VB6 to read text files and load their contents into an array. This provides a simple mechanism for pre-loading command sets into the program for execution. Error handling is integrated to ensure robustness in the presence of invalid files or read failures. Program Code   Public Function FileToArray(ByVal filename As String) As String On Error GoTo Error Dim items() As String, i As Integer ' Read the file's contents, and split it into an array of strings.(Exit here if any error occurs.) items() = Strings.Split(ReadTextFileContents(filename), vbCrLf) For i = LBound(items()) To UBound(items()) FileToArray = FileToArray & vbCrLf & items(i) Next MsgBox "Commands successfully loaded!" Exit Function Error: MsgBox "Error in FileToArray: " & Err.Description End Function 'read entire context in a file Public Function ReadTextFileContents(filename As String) As String Dim fnum As Integer, isOpen As Boolean On Error GoTo Error_Handler ' Get the next free file number. fnum = FreeFile() Open filename For Input As #fnum ' If execution flow got here, the file has been open without error. isOpen = True ' Read the entire contents in one single operation. ReadTextFileContents = Input(LOF(fnum), fnum) ' Intentionally flow into the error handler to close the file. Error_Handler: ' Raise the error (if any), but first close the file. If isOpen Then Close #fnum If Err Then Err.Raise Err.Number, , Err.Description End Function End Function After that, i found the program to load inbox messages from Gmail (http://www.j4mie.org/2008/02/15/how-to-make-a-physical-gmail-notifier/ ). I applied this function to enable loading commands from your Gmail inbox to run the Light Controller.   Program Code Option Explicit Private m_TheFile As String, m_TheSection As Variant Private Username As String, Password As String, iTemp() As String Private pForm As Form, pTimer As Timer, ptxtBox As TextBox, pInet As Inet Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long Public Sub initGmailAccount(TheFile As String, TheSection As Variant, fForm As Variant, fTimer As Variant, ftxtBox As Variant, fInet As Variant) On Error GoTo ERRR m_TheFile = TheFile m_TheSection = TheSection Set pForm = fForm: Set pTimer = fTimer: Set ptxtBox = ftxtBox: Set pInet = fInet Log "INI: " & m_TheFile & vbCrLf & "Section: " & m_TheSection pTimer.Enabled = False 'stop the timer! pTimer.Interval = SimpleGet("interval") * 1000 'set the timer! pTimer.Enabled = True 'start the timer! Log "Interval: " & pTimer.Interval / 1000 & " seconds" Username = SimpleGet("username") Log "Username: " & Username Password = SimpleGet("password") Log "Password: **********" Log "Settings Loaded..." Exit Sub ERRR: Log "Error in LoadSettings: " & Err.Description Resume Next End Sub Public Function CheckMail(ByVal ToTextFile As String) As Boolean On Error GoTo ERRR 'error handling. a must. Dim STRTemp As String 'in "strtemp" we put the whole web page Dim mailCount As String, mailTitle As String, mailSummary As String STRTemp = pInet.OpenURL("https://" & Username & ":" & Password & "@mail.google.com/gmail/feed/atom") STRTemp = UCase(STRTemp) mailCount = Right(STRTemp, Len(STRTemp) - InStr(1, STRTemp, "FULLCOUNT") - 9) mailCount = Left(mailCount, InStr(1, mailCount, "<") - 1) mailTitle = Right(STRTemp, Len(STRTemp) - InStr(1, STRTemp, "TITLE>L") - 5) mailTitle = Left(mailTitle, InStr(1, mailTitle, "<") - 1) If StrComp(mailTitle = "LIGHTCONTROL", vbTextCompare) = 0 & mailCount = "1" Then mailSummary = Right(STRTemp, Len(STRTemp) - InStr(1, STRTemp, "SUMMARY") - 7) mailSummary = Left(mailSummary, InStr(1, mailSummary, "<") - 1) 'load message into public variable iTemp() = Strings.Split(mailSummary, ";") 'save mail data into a textfile Open ToTextFile For Output As #1 Dim i As Integer For i = LBound(iTemp()) To UBound(iTemp()) Print #1, iTemp(i) Next Close #1 CheckMail = True Else Log "Mail not available!!!" CheckMail = False End If Exit Function ERRR: Log "Error in CheckMail: " & Err.Description Resume Next End Function Public Sub Log(Text As String) On Error GoTo ERRR ptxtBox.Text = Text & vbCrLf & ptxtBox.Text Exit Sub ERRR: MsgBox "Error while logging: " & Err.Description Resume Next End Sub Public Function SimpleGet(VarName As String) As String Static sLocalBuffer As String * 500 Dim l As Integer l = GetPrivateProfileString(m_TheSection, VarName, vbNullString, sLocalBuffer, 500, m_TheFile) SimpleGet = Left$(sLocalBuffer, l) End Function Public Sub SimplePut(TheItem As Variant, TheVal As Variant) Call WritePrivateProfileString(m_TheSection, CStr(TheItem), CStr(TheVal), m_TheFile) 'Flush buffer Call WritePrivateProfileString(0, 0&, 0&, m_TheFile) End Sub   For more detail: Arduino & Visual Basic 6 Light Controller ### Arduino Fart-O-Meter Arduino Fart-O-Meter Project Innovation in electronics often emerges from playful experimentation, and this project—though humorous in concept—demonstrates practical use of wireless communication and sensor integration. The Arduino Fart-O-Meter is essentially a system designed to measure methane emissions (commonly associated with human flatulence) and transmit the data wirelessly to a receiver unit for visualization. Project Overview The system is built around two primary modules: Emitter Module – mounted on the chair, equipped with a methane sensor, Arduino microcontroller, and a wireless transceiver. Receiver Module – placed remotely (e.g., on a desk), where incoming data is processed and represented using LEDs and servo movement. The novelty of this project lies not in its comedic framing, but in its technical execution: employing gas sensors, analog-to-digital data acquisition, and wireless data transmission. It also highlights the importance of calibration, power regulation, and safe handling of electronic components. Step 1: Component List The Emitter is powered by an Arduino (ATMEGA168/328), methane gas sensor (MQ-4), and an nRF2401A transceiver. Supporting components include: Voltage regulators (LM117 for 3.3V, 7805 for 5V) LEDs with resistors for indication Potentiometers for calibration and debugging Audio jack connectors for sensor interface Capacitors for filtering and stabilization Battery pack and plastic enclosure for portability The Receiver module is also Arduino-based, paired with an nRF2401A transceiver, shield, and servo motor. It is mounted on an acrylic sheet with bumpers, screws, and standoffs for stability, powered by a dedicated AA battery pack. Step 2: Required Tools The project demands common electronics tools such as: Multimeter for measurements Side cutters, pliers, and screwdrivers USB cable for Arduino programming Drill set and safety glasses for safe assembly Heat-shrink tested via lighter (also useful in checking sensor responsiveness) These tools emphasize that even a playful build requires discipline in electronics handling and assembly. Step 3: Understanding the Methane Sensor At the core of this project is the MQ-4 Methane Sensor, which detects gas concentrations ranging from 200 to 10,000 ppm. Its analog output voltage corresponds to the detected gas concentration: ~1.3V baseline when no gas is present Rising up to 5V upon methane detection (e.g., during flatulence) The sensor’s built-in heater, however, consumes 175mA, making power source selection an important design consideration. Educational Value Although comedic in presentation, the Fart-O-Meter demonstrates: Practical sensor calibration Wireless data transmission using RF modules Real-time analog monitoring via Arduino System integration of sensors, regulators, and actuators This project effectively blends humor with technical knowledge, serving as both an entertaining and educational demonstration for hobbyists. Major Components Used Arduino microcontroller MQ-4 Methane Gas Sensor nRF2401A Wireless Transceiver with Chip Antenna For more detail: Arduino Fart-O-Meter   ### Arduino Digital Output Project: Simple Output with LEDs Simple Output with LEDs Arduino Digital Output Project introduces users to the Arduino software environment and basic digital circuit construction. By running example programs, users gain foundational knowledge of Arduino's capabilities. They then apply this knowledge to build and control a simple LED circuit. This hands-on experience bridges software and hardware, teaching core concepts of physical computing. Download your Arduino Setting Up the Development Environment:Users are encouraged to download the official Arduino IDE from the link https://www.arduino.cc/en/main/software, making sure to choose the version compatible with your operating system. This is yet another necessary step to set up an environment to work with Arduino. Enabling Programming and Hardware Interaction:By installing this IDE, users are now able to write, compile, and upload code to Arduino's boards. This is the first step for every programming task and will allow for a relatively engaging use of Arduino hardware while learning. Connect your Arduino board to laptop USB Connection Establishment:Connect the Arduino board to the computer via a USB cable. This forms the physical connection required for communication between the hardware and the Arduino IDE. Board Selection in Arduino IDE:In the Arduino IDE, go to “Tools” and select the correct Board type. This tells the software which Arduino model you're using, ensuring proper code compilation and upload. Port Verification (COM Port):Still under “Tools,” select the correct Port. This allows the IDE to communicate through the right COM port, allowing it to send code to the board as well as return data. Try the Blink tutorial Running the Blink ExampleAccess the foundational "Blink" program via File → Examples → 01. Basics → Blink.This example is designed to blink the onboard LED, confirming a successful software-hardware connection. Uploading the CodeClick on the "Upload" button to compile and upload the code to the Arduino board. This image shows that the LED is blinking on the Arduino board, visually showing that the board is receiving and executing the uploaded code correctly. Modifying Code for Interaction Change the value in delay(1000) to change the blink rate, then click "Upload" again.                                                                           This gets the users started into a live code change with an immediate effect on the hardware. Hands-On Learning ConfirmationThis step provides immediate feedback and validates the full setup, from the IDE to the Arduino board.It also offers users their first hands-on experience with live Arduino programming and physical computing. Try the Fade tutorial Arduino LED Fade Circuit tutorial introduces users to hands-on circuit building by transitioning from software-based tasks. Users gather basic components: a breadboard, an LED, and wires. These parts enable the visual "fade" effect and demonstrate how physical connections work. Helps users understand and organize essential components for practical circuit construction. Electronics Prototyping Components Explains the importance of LED polarity for proper circuit function. LEDs, like diodes, only permit current to flow in one direction—the longer of the two leads is positive (+) and the shorter of the two leads is negative (−). If you connect the leads the wrong way, it will either not light the LED up or damage the LED. Understanding polarity helps users avoid mistakes and builds a foundation for working with other electronic components. Now connect the components: Elegoo UNO R3 microcontroller board Once you wire and program the LED "Fade" circuit, you can see the LED gradually become more or less bright using PWM (pulse-width modulation). Connecting GND: A wire is used to connect the Arduino's GND pin to the blue (-) rail on the breadboard to establish a common ground. Connecting the LED: The positive (long) lead of the LED connects to digital pin 9 (~9) on the Arduino, a PWM-capable pin for the fade effect. The negative (short) lead connects to the breadboard’s blue rail, completing the circuit. Uploading the Program: Users open File → Examples → 01. Basics → Fade and upload the code. The LED will fade in and out, showing PWM in action. This step gives users practical experience in hardware setup, using PWM pins, and observing how software changes affect physical output. Try the PWM (Pulse-Width-Modulation) This section details the expansion of the previous circuit to include multiple LEDs and introduces custom code for more complex control. Downloading Customized Code: The first step is downloading a specialized pre-written code from a provided link. This advanced program controls multiple LEDs with varying intensities or patterns, enabling more sophisticated light effects. Adding More LEDs: The instruction to add four more LEDs, bringing the total to five, expands the circuit's complexity and visual output. These additional LEDs, chosen by color, will be the new visual indicators for the customized program. Wiring Changes: The black wire retaining its previous connection implies the common ground established earlier remains in place, which is crucial for completing all LED circuits. Connecting the negative end of all five LEDs to the vertical blue (-) rail on the breadboard ensures they all share a common ground. Connecting the positive ends of these LEDs to different digital pins (3, 5, 6, 9, 10) on the Arduino allows for individual control of each LED. These are likely Pulse Width Modulation (PWM) pins, enabling varying brightness. Uploading and Observing: Uploading the customized program lets users observe each LED’s brightness increase with higher PINs, demonstrating advanced control logic in the code. This process teaches users to expand Arduino Digital Output Projects, control multiple LED outputs individually, and see how custom code creates dynamic PWM-based lighting effects. Read more: Arduino Digital Output Project: Simple Output with LEDs ### Connecting the Electronics: Stepper Motor Control with Arduino The wire diagram serves as the fundamental blueprint of the project, visually showing the pairwise connections between all components. It supports Stepper Motor Control with Arduino by clarifying how different parts interact, helping engineers or technicians assemble the system correctly and analyze problems effectively, as it highlights all connection points. GENSSI S-350-24 Power Supply Stepper to Controller Wiring Connecting stepper motors to their controllers enables efficient and modular control, particularly in syringe pump systems. Use Electrop connectors for easy disconnection, keeping the mechanical components inside a hood while placing the electronics outside. Clear labeling of the motor cables( A, A-, B, B-) ensures correct and safe wiring, making the setup easier and adding flexibility in laboratory surroundings. Stepper Motor Factor Connector wires connected Soldering Electrop Connector Ends A crucial first measure to increase the dependability of the Electrop connector frayed ends is soldering. For Stepper Motor Control with Arduino, it guarantees robust and long-lasting electrical connections between the stepper motors and their controllers, therefore avoiding signal loss or erratic problems caused by loose wire strands. For safe insertion into screw terminals, this process strengthens the wire tips. Clear instructions—loosen, insert, tighten—make the setup straightforward, resulting in a more stable system with fewer maintenance needs and consistent motor performance. CNC routers and 3D printers PSU to Motor Controller Wiring The essential power connection from the PSU to the motor controller supplies the energy needed to run the stepper motors. It involves connecting +V from the PSU to +24V on the controller, and V to Ground. A voltage range of under 24V is safe; exceeding 32V risks damage. Keeping the PSU unplugged during wiring ensures safety. This setup ensures reliable motor control while protecting components from voltage issues or short circuits. This confirms PSU-to-controller wiring by showing +24V and Ground connections, helping avoid errors and ensure safe power delivery. various electronics and projects CNC routers and 3D printers Connecting the PSU to a wall outlet provides AC power, which is then converted to DC for the motor controllers. Green is for Ground, White is for Neutral, and Black is for Line in conventional wiring. Ensuring safe system powerup and avoiding electrical dangers, a safety caution encourages users to check 3prong cable connections before plugging in. Power supply unit connected Arduino to Motor Controller Wiring Arduino connects to motor controllers to send step and direction signals while supplying 5V power. Each controller uses three wires: step, direction, and 5V. A breadboard is recommended to split the 5V line, allowing one Arduino to control multiple syringe pumps. Odd-numbered Arduino pins connect to 'DIR', while even-numbered pins connect to 'STEP', ensuring clear, scalable, and precise Stepper Motor Control with Arduino. via various wires CNC routers and 3D printers Motor Controller to Breadboard A single wire connects the breadboard’s 5V rail to each motor controller, ensuring proper power for Arduino signal processing. This simple setup enables a modular and scalable design for controlling multiple syringe pumps. CNC routers and 3D printers illustrating a circuit setup source microcontroller Arduino to Breadboard Distributing the Arduino’s 5V power to multiple motor controllers is done using a breadboard. A jumper wire connects the Arduino’s 5V output to a breadboard row, linking all points in that row. From there, five V input wires can be run to each controller. This makes troubleshooting simpler, increases scalability, and reduces wiring complexity for Stepper Motor Control with Arduino. Arduino to Wall Outlet Powering the Arduino independently using a wall adapter instead of relying on a computer USB connection provides consistent, standalone power. Plugging the adapter into the Arduino and a wall outlet improves system portability and allows the syringe pump setup to operate without a computer. USB Type B port on an Arduino Uno board Arduino to Computer The standard method for connecting Arduino to a computer uses a USB cable. This link allows code uploads, monitoring, and also powers the Arduino during development. It’s a simple and accessible way to program and test the syringe pump control system without needing a separate power adapter. USB Type B port on an Arduino Uno board Read more: Connecting the Electronics: Stepper Motor Control with Arduino ### 3D Montage in Motion: A Drone-Ground Virtual Environment for Spatial Expression Mobile Camera/Drone Interaction The project "Inspection" merges physical and virtual worlds by creating an evolving 3D photomontage using a Drone-Ground Virtual Environment system. A drone, ground robot, and ultrasonic sensors collect real-time data to build dynamic virtual spaces via the Voronoi Algorithm. This approach offers fresh insights into spatial relationships and object interactions in a continuously updating virtual environment. The "Inspection" project progressed rapidly from concept to public performance in nine weeks. The team included experts in art, computer science, engineering, and political science who combined robotics, aesthetics, and server systems to deliver innovative solutions. This approach maintained the project’s technical and conceptual significance. Fallen by Anna Gschnitzer Architecture This statement highlights the visual architecture of the "Inspection" project, illustrating how the drone, ground robot, sensors, servers, and Voronoi-based 3D photomontage connect. The diagram explains the data flow and system structure, helping users quickly understand how physical data is captured and transformed into a dynamic virtual environment. Architecture of the System - Illustration made by Weihao Qiu Ground Robot Research This textbook describes the ideal tackle for the ground robot in the" examination" design. Crucial features include an omnidirectional base for nimble movement, a pan-tilt servo with an HD camera that provides flexible and high-quality illustrations, and a WiFi module for real-time data transfer. Programmability allows precise control over movement and data collection, making the robot a versatile platform essential for accurately creating the evolving virtual 3D environment. Such integrated, programmable robots are rare, highlighting the project's specialized requirements. iPatrol Riley Security Camera A major challenge in the "Inspection" project was finding an off-the-shelf ground robot that met all technical requirements. The Riley bot had good hardware but lacked open APIs, making it unprogrammable and unusable for the project’s reactive system. Recognizing this issue early saved time and highlighted the importance of open, programmable hardware for the Drone-Ground Virtual Environment system. Riley Robot X80SV WiFi Mobile Robot The evaluation of the X80SV robot for the" examination" design showed it offers advanced features like omnidirectional movement,pan-tilt and HD cameras, WiFi, and collision detectors, ideal for precise data and safe navigation, supporting the design's pretensions. still, its high cost of$ 3,200 made it infelicitous for the evidence- of- conception phase, where budget effectiveness is crucial. The decision saved resources for core testing, leaving the X80SV as a future option if more funding is available. This highlights the need to balance technical needs with budget constraints in innovative projects. X80SV Robot Pixy2 Robot Vision The project shifted from costly, closed commercial robots to flexible, affordable semi-assembled platforms like Arduino and Raspberry Pi. Combining an Arduino-based Zumo robot with a Pixy camera aimed at using color-based object recognition for the 3D photomontage. However, low image resolution and poor data transfer stopped progress, revealing key challenges in low-cost solutions and the need for better image quality and reliable data handling. Arduino-powered Zumo robotic base with Pixy camera Ground Robot with GoPiGo The chosen ground robot combines a GoPiGo shield, Raspberry Pi, and HD camera to balance functionality, flexibility, and cost. This setup enables complex movements and advanced machine literacy, grounded vision, essential for directly landing and rephrasing the physical terrain into a dynamic 3D photomontage. The Jeer Pi powers sophisticated computer vision, while the GoPiGo handles motor control and detectors. The HD camera ensures high-resolution data for detailed virtual representation. Despite minor limitations like a one-dimensional servo and a basic battery, these are solvable technical issues. Overall, this platform offers deep programmability and advanced analysis, providing a strong foundation for the project’s goal of merging physical and virtual worlds. Modified Gopi Go robot powered by Raspberry PI Deep Learning Robot Evaluation The Deep Learning Robot by Autonomous Inc. offers advanced features—3D depth camera, TensorFlow, and CUDA—for high-level perception and processing, reasonably priced at \$999. It could enhance the Drone-Ground Virtual Environment with rich 3D data, object recognition, and spatial analysis, improving virtual photomontage responsiveness. However, its large size clashes with the project’s "insect-inspired swarm intelligence" concept, which values small, distributed agents. Recognizing this mismatch preserves the "Inspection" project’s conceptual integrity and ensures hardware supports swarm-based interaction across physical and virtual worlds. Deep Learning Robot Autonomous Movements The ground robot uses an ultrasonic sensor for basic obstacle avoidance, moving forward when clear, and turning upon detecting an obstacle. This allows it to explore and gather data for the virtual photomontage. However, limited motor speed and a single sensor reduce its effectiveness. Adding two side sensors and a stronger motor would improve navigation and support richer, real-time data collection for the evolving 3D environment. Robot's Moving Area Server Establishment The server infrastructure in the "Inspection" project plays a vital role in ensuring fast, stable data transmission. Two Python-based HTTP servers—one for the drone, one for the ground robot—collect images and sensor data, preventing conflicts and allowing simultaneous processing. HTTP protocol simplifies retrieval via URLs for integration into the virtual photomontage. A private local network connects only the drone, ground robot, and sensors, avoiding external interference and ensuring real-time responsiveness. This setup supports continuous, high-integrity data flow from the physical world, enabling accurate and dynamic updates to the virtual 3D environment. Visual Representation The "Inspection" project displays real-time images from a drone and ground robot to merge physical and virtual spaces. This dynamic view reveals changing spatial relationships, turning sensor data into an immersive visual experience. One screenshot of the final presentation The evolving 3D photomontage uses a Voronoi algorithm to place drone (orange) and ground robot (blue) images in 3D space. New images are added in real time, creating a dynamic, aesthetic view of the changing physical environment. Future Works Future improvements aim to enhance the "Inspection" project through better localization, optimized robotics, and swarm intelligence integration. Set up the Localization SystemTo enable accurate tracking of drone and ground robot positions within the physical space. Optimize Ground RobotTo improve the robot’s mobility, sensor coverage, and battery efficiency for smoother data collection. Implement the Swarm Intelligent Algorithm with Multiple RobotsTo simulate collective behavior and enhance spatial exploration through coordinated multi-robot interaction. Read more: 3D Montage in Motion: A Drone-Ground Virtual Environment for Spatial Expression ### Coding Robotics with Arduino: Programming Microcontrollers with Arduino It introduces the guide’s main goal: to teach the basics of sensors and coding in a VEX robotics project using Programming Microcontrollers with Arduino, giving users a solid starting point for hands-on robot building and programming. Microcontrollers This paragraph explains that a microcontroller is a low-cost, programmable computer with direct I/O access, used to read sensors and control actions. In this project, it serves as the VEX robot’s brain. The Arduino board is highlighted as an easy-to-use option with features like wireless support and varied processing power, helping users build responsive robotic systems. Arduino UNO The Arduino UNO-compatible RedBoard by SparkFun is identified as the microcontroller for the project. It clarifies the exact hardware users will use, helping them prepare for its role as the VEX robot’s brain in the lab activities. RedBoard Arduino Hardware RedBoard information This section explains four important components of the RedBoard: Reset Button Restarts the board’s program Essential for debugging and development USB Connector Provides power to the board Transfers data to and from the computer for programming and serial monitoring Pin 13 LED A built-in LED on the board Useful for simple code testing and feedback without needing an external circuit Serial LEDs Show visual signals for data being transmitted or received (via pins 0, 1, or USB) Help diagnose communication issues Power Pins This paragraph explains the functions of the key power and ground pins on the RedBoard: 3.3V Pin Used to power low-voltage sensors Only for components that operate at 3.3 volts 5V Pin A common and versatile power source Used to power most circuits and components GND (Ground) Pin Provides a 0V reference point for electrical circuits Essential for the proper functioning of all circuits VIN (Voltage-In) Pin Used to power the board from an external source (like a battery) Used when powering the board without a USB connection I/O Pins Here are the different types of I/O pins on the RedBoard and their functions: Analog Pins (A0–A5) Used to read data from analog sensors A0–A3 provide more stable readings It can also be used to control analog devices Serial Pins (0–1) Used for transmitting (TX) and receiving (RX) data Not recommended for use in this lab to keep the setup simple Digital Pins (2–12) Used for binary operations (HIGH/LOW) Used to read or control digital sensors and components Pin 13 Connected to an onboard LED Recommended to be used only as an input pin The Arduino IDE The Arduino IDE is a software platform used to write, compile, and upload code to a microcontroller (such as the RedBoard) — this entire process is essential for making the VEX robotics project functional. Here are the key features of the Arduino IDE that help you code, debug, and monitor your robotics program: Arduino IDE screenshot Verify It checks for syntax and logical errors before compiling the code. It streamlines the debugging process. Console It provides feedback on errors or warnings during compilation and upload. It helps in understanding hardware-related issues. Serial Monitor It displays real-time program output and variable values. It works like a multimeter for software. It is an invaluable tool for understanding and diagnosing code execution. Different areas Global Section Constants and libraries are declared here These declarations are accessible throughout the entire program Important for resource management and code reusability Setup Section Used for one-time initializations Configures sensor pins and activates components Prepares the robot correctly before it starts operating Loop Section Contains the core program logic that runs repeatedly Handles reading sensor data, processing information, and controlling actuators Manages the robot’s repetitive actions, like controlling motors or LEDs Arduino Programming Presented as derived from C/C++ but simplified for newbies, the Arduino programming language is introduced. It clarifies that programming the RedBoard entails building sophisticated behavior by combining structured code blocks, like LEGO pieces. This approach, as part of Programming Microcontrollers with Arduino, makes coding for VEX robotics easier and more understandable. Semicolon (;) Rule: Every line of code must end with a semicolon (;) Exceptions: Conditional statements (if), loops (for, while), Function definitions do not require a semicolon after their opening line Purpose: Semicolons tell the compiler where a statement ends; missing them can cause compilation errors Comments (//) Comments start with // They are ignored by the compiler — they do not affect how the program runs Purpose: Used to label sections of code Help explain what the code does Improve readability and make debugging easier Data types define how Arduino programming stores and uses different kinds of information, playing a crucial role in managing sensor input, operating actuators, and writing correct logic in a VEX robotics project. Datatype tabular format Operators work on variables and constants, which are required for the processing of sensor data, decision-making, and the regulation of the robot's actions. operators tabular format Data storage in an Arduino application uses constants and variables. Variables store data that changes during the program (like sensor readings); constants have fixed values—like PINs or thresholds—that do not vary. They both need a specific name for reference and assistance to arrange data, hence increasing the dependability, clarity, and efficiency of the robotics code in Programming Microcontrollers with Arduino. Constants and variables Conditional statements are blocks of code that only run under a particular condition being true. They enable smart and adaptive behavior in VEX robotics by letting the robot make decisions based on sensor input or its surroundings. Conditional statements Either until a condition is satisfied or for a defined number of times, loops like while loops and for loops let code execute many times. While loops wait for events like sensor input, while for loops handle fixed repetitions. They help automate tasks in Programming Microcontrollers with Arduino, making code efficient and enabling complex, reliable behaviors in VEX robotics. While and for-loops Commonly Used Arduino Functions Commonly used Arduino functions are ready-made commands that help read sensors, run motors, and control inputs/outputs. These functions make coding easier and faster. Read more: Coding Robotics with Arduino: Programming Microcontrollers with Arduino ### Simulating the Water Cycle in a Desert Using an Arduino-Controlled Pump Simulating the Water Cycle in a Desert Particularly under desert-like conditions, this project focuses on creating an automated irrigation system fitted for succulent plants. Maintaining a consistent watering schedule devoid of human intervention is the fundamental purpose, therefore guaranteeing the plant gets water in regulated amounts at set intervals. Central to the system is an Arduino microcontroller that functions as the decision-making center. It sends a timed electrical signal via a relay switch to activate an Arduino-controlled pump intermittently. Functionality and Configuration The system offers flexibility by allowing users to adjust both the amount of water and the frequency of watering. Users control this through delay commands that set the pump’s activation time and the interval between cycles. In dry environments, succulents require minimal but consistent hydration, making this level of control essential. Cases of Application and Realistic Execution The source of impetus for this project has, in fact, quite common real-life problems: differential treatment of plants during long absences. The inventor personally found a demand for the automation of this process after encountering difficulty in watering plants while on vacation. It serves as a means of self-care when a person cannot rely on others to care for their plants. This makes it highly useful for busy lives and frequent travelers. Long-term Benefit. Beyond personal convenience, this solution suits workplaces, greenhouses, and remote research stations where human presence is limited. Automation ensures reliable and consistent hydration cycles without the need for constant supervision. Hardware Compatibility Consideration. A technical schematic would be functional, but could also add an extra level of usability. The most important aspect is to carefully select components—for example, matching the pump’s power specifications (5V, 1A) with a suitable battery source. This careful electrical planning ensures the system operates safely and efficiently. Completed System and Demonstration The project is officially complete upon the successful assembly and commissioning of the automated irrigation system. A visual and video demonstration adds value by verifying that the design works as intended. It showcases the Arduino-controlled pump in action, turning theory—timing, control, and water delivery—into a working prototype. Physical Setup of the Automatic Watering System Skills and Lessons Learned Technical Proficiency Gained The project provided invaluable practical experience with several fundamental automation and embedded electronics components. To guarantee dependable and leak-free water flow—a crucial component of any irrigation system—mechanical planning was necessary when assembling the pump and tubing system. Electrical Integration Using a relay to handle current loads higher than what the Arduino can safely handle was another important lesson learned. This illustrates a grasp of the fundamental idea in automation and electronics: the interface between low-power logic controls and higher-power hardware components. Observation of the Environment Lastly, the addition of a temperature and humidity sensor suggests that the project's scope has grown. Although previous sections didn’t cover the sensor in detail, its inclusion suggests a possible upgrade path where the system could eventually make watering decisions based on environmental conditions, adding an intelligent layer to the setup. Read more: Simulating the Water Cycle in a Desert Using an Arduino-Controlled Pump ### What is a Printed Circuit Board? A printed Circuit board or PCB is a non-conductive material with various conductive lines etched or printed. Electric components are mounted on the board, and traces attach the components to create a working circuit.   But before you come up with a PCB, you need to start with a design. PCB design brings the electronic circuits to life. However, designing a PCB is not an easy task. There are several steps to go through. Hence, there is a lot about the process you need to know.   Below are vital things you need to know before starting PCB design  Things You Should Know before Starting PCB design  1. PCB Size  PCB size depends on various factors. For instance, the size of your product will determine the size of the PCB. Some factors that determine the PCB size include copper width, design complexity, component density, and matching impedance requirements.   2. PCB Layer  Before starting PCB design, the important thing you need to know is the PCB layer. You need to note that the more layers you have, the more complex the manufacturing of your PCB will be.   In addition, the more layers a PCB has, the more costly it is to manufacture. PCBs with two layers are for simple products such as toy products, PCBs with four layers are for average products, and those with six, eight or more layers are for complex products such as smartphones.   3. PCB Material  PCBs use a wide range of materials as components and substrates. Hence, material selection is based on the requirements of the application. This is because different materials offer differing circuit qualities.  PCB designers select materials based on the electrical performance of the application. In addition, designers need to comply with government requirements.   The main components of a normal PCB are: *Laminate *Prepreg *Copper foil *Nomenclature *Solder mask *Final finish  PCB manufacturing  PCB manufacturing goes through a complex procedure that ensures the final product's performance is of high quality. Even though PCBs can be single-sided, double-sided, or multilayer, the manufacturing process only differs after the first layer.   There are several steps needed when manufacturing a PCB. Missing any step can negatively affect the performance of the board. But when completed successfully, the PCBs can perform their tasks properly.   PCB constituents   PCBs are made up of various electrical constituents, where each one plays a vital role to make sure the device is running smoothly. Keep in mind that if one constituent fails, the whole board will not work properly.   Some of the PCB components are:  *Resistors – some of PCBs' most common and vital constituents are resistors. Their work is to transmit an electrical current to produce a voltage and disperse electrical power as heat.   *Transistors – it is an amplifier that controls the electrical signals in the PCB. The common transistor has three pins (the base, collector, and emitter)  *Capacitors – they work is to hold an electrical charge within the printed circuit board and release it when more power is needed.   *Inductors – they store energy and are used to block signals within the printed circuit board. *Transformers – they are to transfer the electrical energy from one circuit to the other by a decrease or an increase. *Sensors – sensors are elements that sense changes in the environment to respond to signals that correspond with the changes.   Chemical Etching  Chemical etching is one of the main steps of PCB manufacturing. It is a subtractive method that is mostly used on metal. In the process, metal is removed to create metal parts in desired thickness and shape.   The procedure involves bathing the PCB material into a corrosive chemical, reacting to areas that need to be removed.   Photographic process  Even though PCBs are manufactured through several manufacturing processes, the photographic process is common. It is mainly used to help gain the correct pattern of the tracks.   The copper on the printed circuit board is covered with a very thick layer of photoresist in the photographic process. Later, it is exposed to light through a photo mask or photographic film detailing the tracks needed.   Placing PCBs in Etch  PCB etching is a process of careful removal of materials from the outer layer of the PCB. It is also known as cleaning out conductive materials that are in excess. There is wet etching and dry etching.   *Wet etching – this is where the copper layers are dipped into the etching chemical fluid. It is a popular method because it does not change the properties.   *Dry etching – also known as plasma etching, is where a machine is used to remove leftover residues. The process is less stressful and a good option for a large volume of PCB production.   PCB etching is a vital process in the PCB manufacturing process. However, it can be very tasking, especially for a beginner. Hence, it is essential to know how it works to help you achieve the expected results.   There is DIY PCB etching where you can decide to handle the process at home. However, you need to follow every step and need elements to fabricate a PCB. This is something you can do at home or in the laboratory.  Other methods of manufacturing  Even though PCBs are small, the manufacturing process is extensive. It does not matter whether it is a DIY manufacturing process or through a PCB factory. You need to go through all the needed steps to have a great finished product.   The main steps of PCB manufacturing include the design, printing the design, creating substrate, removing unwanted copper with CNC machining, laminating of layers, plating, etching, solder mask application, surface finish, and testing.   Summary  The PCB manufacturing process is a vital element of modern electronics production. It has enabled significant improvements in many devices across various sectors.   Understanding what you need to know before starting a PCB design is very important. In addition, you need to know the steps and why every step must occur. This will give you better know-how of the costs and the effort you need to put into each PCB ### Are There Any Duino Projects That Can Create Plasma Devices? Have you ever encountered plasma's power? You may observe its process by looking at fluorescent or neon signage. These two lighting techniques exploit the visible light that plasma discharges emit. On a different note, have you heard about Plasma Surface Treatment? It is another use of the matter beyond fluorescent and neon lights. Surfaces can be cleaned, activated, etched, and coated using this technology. Compared to other processes, it is more economical and ecologically beneficial because there is no need to dispose of hazardous chemical waste. As a result, this technique is perfect for various tasks, including plasma cleaning aircraft or automobile parts. Applications for plasma spray coating include polishing semiconductors, metals, and architectural glass. Thermally spraying one material (often in powder form) onto another is known as plasma spray coating. To illustrate, a jet engine's turbine tips' bearing surface is plasma sprayed with a high-temperature ceramic coating. Every day, technology is evolving. Transistors are getting smaller, and phones and computers are now more compact. Considering this, it begs the question: can we also make plasma surface treatment compact using a Duino? Let us find out as we elaborate on the matter in this article. Mechanism of Plasma Surface Treatment Power management is crucial for the coating process to produce the most consistent results. You can achieve better deposition rates, easier usage of various coating materials, and improved layering uniformity with a pulse-width modulated (PWM) DC power source. Increased productivity and efficiency are additional benefits of the procedure. Engineers employ pulse-width modulation and silicon-controlled rectifier (SCR)  DC power sources in most plasma spray coating applications. SCR and pulse-width modulated plasma power sources offer more excellent power factors and need less power source kVA since they employ electronics rather than magnetics for modulation. However, each control method has benefits and drawbacks. The most popular type of DC power supply now in use is SCR-based. Because the working voltage is roughly half that of the open-circuit voltage or around 0.5 PF, these power sources often have low power factors (PF). The primary cause of the greater kVA demand is the higher open-circuit voltage requirement. The popularity of the pulse-width modulated DC power supply is rising gradually. This is because a pulse-width modulation DC power supply has reduced kVA needs, which aids in lowering the amount of incoming power needed, and a higher power factor (about 0.9 PF), which is large enough to help reduce total electrical running expenses. The IEEE 519 standard has also increased the importance of its diminished harmonic currents. As a result, industries aiming to reduce harmonics in their electrical power distribution networks are gradually adopting this standard. In addition, engineers can produce smoother coating due to the decreased output ripple of the pulse-width modulated DC power control. Including a DC capacitor bank and a transistor is the only meaningful distinction between the SCR and pulse-width modulation one-line layouts. For the SCR type, its namesake is what performs controls. It fills the DC capacitor bank in the pulse-width modulation type, and the transistor controls the DC. Now that we know how plasma surface treatment works, let us study how a Duino works. Mechanism of A Duino Open-source electronics development platform Duino is built on free, adaptable, and user-friendly hardware and software for designers and developers. With the help of this platform, you may create various single-board microcomputers that the maker community can utilize in many ways. However, to comprehend this notion, you must first be familiar with the ideas behind free hardware and free software. Free hardware is anything whose blueprints and specs are available for anybody to copy. It implies that Duino provides the framework so that any other individual or business may design their own boards, each of which can be unique yet function well when built upon the same blueprint. Meanwhile, microcontrollers are integrated circuits you may program using the programming language available in the Duino IDE environment. You can store instructions on the microcontrollers. Using these commands, you can also write programs that communicate with the circuits on the board. Both input/output and communication interfaces are included on the Duino microcontroller. It allows us to connect various board-mounted peripherals. Additionally, the device responsible for processing the data via them will receive information from these connected peripherals. Create freestanding components, connect to devices, and interact with both hardware and software with Duino. It helps us read information from a source, like a keyboard or a web page, and turn it into action, like turning on a light and writing what you type on display. It also helps us to control an element, for instance, a motor that elevates or lowers a blind based on the amount of light in a room, thanks to a light sensor connected to the Duino. Can You Create A Duino Device for Plasma Treatment? In plasma surface treatment, engineers need high voltages to heat up the Helium or Argon gas to high temperatures. Therefore, it requires a power supply that reaches 400 VDC and 600 ADC. That is why engineers use pulse-width modulation and silicon-controlled rectifier (SCR) DC power sources in plasma surface treatment technologies. High voltage and high frequency are formed when power source 110V-220V is transmitted through the plasma generator. A transformer, an ADC, a high-frequency pulse generator, a high-frequency transformer, and a plasma chamber make up the plasma power supply. Multiple components are needed to create this power supply making it impossible to use a Duino to create a project. To answer the question: you can create a power supply using a Duino, but it will just be a 0 to 12 V variable power supply and not much more than that. You can also program it to be a variable resistor to alter some properties of the plasma ejection and release the powder from the device to the substrate. Besides that, there is not much use of a Duino in a plasma system. If there will be a way in the future for Duinos to handle higher voltages and frequencies, engineers can use it to create power supplies that are compact yet effective. ### How to Build a Finger Scanner Using Arduino Biometric technologies have materially grown broader within the community of secure identity verification. Among these,  Finger Scanner Arduino  attracts attention on grounds of accuracy and uniqueness with a wide spectrum of applications. The crux of finger scanner Arduino project is that the user can register and delete fingerprints, thereby simulating the real-world applications for security and authentication purposes. This means that students not only get to create a functional fingerprint-based system but also gain a hands-on experience with biometrics devices used in various sectors. Through study and application in a mixture of components, including Arduino UNO, R307 fingerprint module, LCD display, RTC module, and others, learners will develop an understanding of hardware and software interplay in a conventional biometric setup. Fingerprint scanners have recently found their way into smartphones, laptops, secure areas, and even theme parks. This introductory finger scanner Arduino project affords students some insight into the fundamental workings of these technologies, laying the foundation for learning to design and develop biometric security systems. Structural Diagram Of Finger Scanner Arduino Getting Started with the Finger Scanner Arduino: The biometrics with embedded systems "Finger Scanner Arduino" project is based on security and identity verification processes. The main arrangement consists of a fingerprint scanner module interfaced with an Arduino microcontroller module for scanning, analyzing, and authenticating a user's fingerprint. This particular biometric identification technique offers some of the strongest identification protection. People generally accept fingerprint scanning technology in practical applications, though it differs in efficiency and accuracy from some other methods. The system under consideration interfaces with an employee attendance program in a campus environment, ID checks in governmental institutions, and secure access of confidential data or money transaction facilities. Arduino allows interfacing convenience, with customization and scalability tailored by application requirements. In conclusion, the finger scanner Arduino project presents a convenient and cost-effective alternative to a biometric security application with real-life scenarios, showcasing the actual crossover between electronics and the biometrical sciences. Working Principle of the Fingerprint Scanner System: The whole Fingerprint Scanner system captures and analyzes the fingerprint pattern of a user to match it with stored fingerprints to identify that user. Working on an Arduino UNO as a controller, the fingerprint scanner uses the R307 fingerprint module as a digital scanner for capturing fingerprints. The system compares the obtained template against the stored fingerprint data to grant or deny access. The system is open to saving new fingerprints and deleting any existing fingerprints, essentially providing dynamic user access management. A 16x2 display will continuously give feedback and status messages. An LED indication will show when the sensor is ready to take in a scan. The system can also include buttons to give user action for registration and deletion, while the buzzer will alert the user in audio during different stages of the system. The Real-Time Clock (RTC) module in this circuit will timestamp different events for better keeping and monitoring. Working Principle Of Finger Scanner Arduino Objective of this project: With two main educational and technical objectives in mind—both intended to improve practical knowledge and industry relevance—this project is designed: To build an efficient fingerprint recognition system: Utilizing a finger scanner configured with Arduino, allowing users to store and delete fingerprint data, develop an intelligent fingerprint recognition system. This scenario would imitate actual use in biometric authentication and access control where secure management of user credentials is very important. To provide preliminary student's knowledge: To give pupils a brief clearness about modern-day business applications of fingerprint readers. Students learn practically how those systems are used in various sectors by engaging with biometric hardware and microcontroller programming, like security, law enforcement, and identification. These objectives ensure that learners understand the extensive practical applications and vast importance of biometric technologies in today's technological world, as well as developing a working prototype. Components Used: Electronic components necessary for this project passed through a well-defined step-by-step connection procedure to achieve a fully functional finger scanner Arduino system. Below are some key components and the procedure employed in the project. Arduino UNO: Arduino UNO-finger scanner arduino The ATmega328P is the core of the popular Arduino UNO, a microcontroller board with a power jack, USB port and two digital and analog input/output pins. It is used in power, plug and play electronics projects, due to its ease of use and versatility. Use in Project: In the fingerprint scanner project, an Arduino UNO is used as the central controller. This program initiates the main window, reads buttons input data from the fingerprint module and RTC, then sends messages to the LCD. It handles authentication requests for fingerprints and monitors the activities of all associated components. Fingerprint Module (R307): COMPACT FINGERPRINT BIOMETRIC MODULE The R307, an optical fingerprint sensor, is a popular choice for taking, storing and matching photos of fingerprints. The device has built-in memory to store templates and provides serial communication with microcontrollers, such as Arduino. Use in Project: When the user presses a button on the sensor, the module captures their fingerprint. The system then verifies the identity by comparing the fingerprint to previously saved templates. The purpose of this is to register fresh fingerprints, validate them during access attempts, and eliminate them as required. Push Buttons: Mouse Control With Pushbuttons-finger scanner arduino Simple mechanical switches initiate events when pressed. The majority of electronic systems use them for user inputs. Use in Project: In this project, users access the system through push-button interaction. For example, they can add a new fingerprint by pressing a single button or use a different button to delete an existing fingerprint. They manage the fingerprint database directly, without needing a computer. 16x2. LCD Display: 16x2. LCD Display-finger scanner arduino A 16x2. On 2 lines, an LCD screen can accommodate 16 characters each. Typically, it operates with an I2C or parallel interface and is ideal for displaying real-time text output from the Arduino. Use in Project: The LCD displays system messages such as instructions, status updates, fingerprint operations, and the current time and date. By providing visual feedback, it makes the system more user-friendly. Breadboard or PCB: DESIGN CONSIDERATIONS FOR TRANSFERRING A BREADBOARD PROTOTYPE TO CUSTOM PCB Electronics can be prototypically produced using a plastic board with drilled holes, which is commonly referred to as breadboard. PCB is a professional and permanent solution for connecting components through copper tracks. Use in Project: The development phase involves testing the circuit using a breadboard. A PCB can be utilized to make the system more dependable and compact once the design is concluded. These two platforms facilitate the connection of all electronic elements. Connecting Wires: Connecting wires-finger scanner arduino The connections between components are made possible through the use of insulated wires that have solid or stranded copper conductors. Use in Project: Signals and power are conveyed through wires that connect the Arduino, sensor, LCD, buttons, buzzer, and other components. They maintain communication and ensure electrical continuity throughout the circuit. LED: LED-finger scanner arduino   LEDs are designed to emit light when an electric current flows through them. Numerous electronic projects make use of it as a marker. Use in Project: The LED serves as a status indicator. Depending on the situation, it may illuminate when the system is ready to scan a fingerprint, blink when scanned, or alter color (if RGB) to indicate progress or failure. Resistors (1kΩ & 2.2kΩ): Resistors (1kΩ & 2.2kΩ)-finger scanner arduino These are electronic components that allow for the flow of current while maintaining a voltage. Other components are safeguarded against excessive current discharge.. Use in Project: This system typically employs resistors as the primary component. In order to keep LEDs from burning. Rather than using floating inputs, these are employed as pull-up or pulldown resistors in button circuits to ensure accurate signal reading. Buzzer: Buzzer-finger scanner arduino An audio signaling device known as a buzzer. The tones produced by it are contingent on the direction they are driven. Use in Project: Buzzer emits sound to indicate actions.. For instance When a short beep indicates success in the fingerprint scan, it is usually considered to be accurate. A longer or double beep can indicate an error or access denied.. The inclusion of sound-based cues enhances user engagement. Real-Time Clock (RTC) Module: Real-Time Clock (RTC) Module RTC modules like the DS3231 are timing keeping devices that can keep track of date and time, unaffected by a battery. Use in Project: The RTC monitors date and time when fingerprints are accessed to record attendance/access to events.   Components Breakdown Of Finger Scanner Arduino   Step-by-Step Procedure: Here's step-by-step procedure you have to follow to build Fingerprint Scanner Arduino Project: Connecting Push Buttons (A0–A3)Four push buttons are connected to analog pins A0, A1, A2, and A3. These buttons allow the user to perform key actions such as saving or deleting fingerprints. Connect LED (D7)An LED is connected to digital pin D7 of the Arduino through a 1kΩ resistor. It indicates the operational status of the fingerprint sensor (e.g., ready for scanning). Connect Fingerprint Module (Rx → D2, Tx → D3) Rx of the fingerprint module → Arduino pin D2 Tx of the fingerprint module → Arduino pin D3This establishes serial communication between the module and Arduino. Power the Modules (5V)Connect the Vcc pins of both the R307 fingerprint module and the RTC module to the Arduino's 5V output pin to supply power. Connect LCD Display (RS, EN, D4–D7) RS → D13 EN → D11 D4 → D10 D5 → D9 D6 → D8                This allows the LCD to display real-time system messages and status feedback to the user. Connect Buzzer (A5)Connect the buzzer to analog pin A5. It provides audio feedback (e.g., beep on successful scan or error). Upload Arduino CodeUpload the final code to the Arduino board. This code controls the entire system including fingerprint scanning, user interactions, LCD messages, and buzzer alerts. Code: #include #include LiquidCrystal lcd(13,12,11,10,9,8); #include SoftwareSerial fingerPrint(2, 3); #include #include "RTClib.h" RTC_DS1307 rtc; #include "Adafruit_Fingerprint.h" uint8_t id; Adafruit_Fingerprint finger = Adafruit_Fingerprint(&fingerPrint); #define enroll 14 #define del 15 #define up 16 #define down 17 #define match 5 #define indFinger 7 #define buzzer 5 #define records 4 // 5 for 5 user int user1,user2,user3,user4,user5; DateTime now; void setup() { delay(1000); lcd.begin(16,2); Serial.begin(9600); pinMode(enroll, INPUT_PULLUP); pinMode(up, INPUT_PULLUP); pinMode(down, INPUT_PULLUP); pinMode(del, INPUT_PULLUP); pinMode(match, INPUT_PULLUP); pinMode(buzzer, OUTPUT); pinMode(indFinger, OUTPUT); digitalWrite(buzzer, LOW); if(digitalRead(enroll) == 0) { digitalWrite(buzzer, HIGH); delay(500); digitalWrite(buzzer, LOW); lcd.clear(); lcd.print("Please wait"); lcd.setCursor(0,1); lcd.print("Downloding Data"); Serial.println("Please wait"); Serial.println("Downloding Data.."); Serial.println(); Serial.print("S.No. "); for(int i=0;i"); lcd.print(now.day(), DEC); lcd.print('/'); lcd.print(now.month(), DEC); lcd.print('/'); lcd.print(now.year(), DEC); lcd.print(" "); delay(500); int result=getFingerprintIDez(); if(result>0) { digitalWrite(indFinger, LOW); digitalWrite(buzzer, HIGH); delay(100); digitalWrite(buzzer, LOW); lcd.clear(); lcd.print("ID:"); lcd.print(result); lcd.setCursor(0,1); lcd.print("Please Wait...."); delay(1000); attendance(result); lcd.clear(); lcd.print("Attendance "); lcd.setCursor(0,1); lcd.print("Registed"); delay(1000); digitalWrite(indFinger, HIGH); return; } checkKeys(); delay(300); } // dmyyhms - 7 bytes void attendance(int id) { int user=0,eepLoc=0; if(id == 1) { eepLoc=0; user=user1++; } else if(id == 2) { eepLoc=210; user=user2++; } else if(id == 3) { eepLoc=420; user=user3++; } else if(id == 4) { eepLoc=630; user=user4++; } /*else if(id == 5) // fifth user { eepLoc=840; user=user5++; }*/ else return; int eepIndex=(user*7)+eepLoc; EEPROM.write(eepIndex++, now.hour()); EEPROM.write(eepIndex++, now.minute()); EEPROM.write(eepIndex++, now.second()); EEPROM.write(eepIndex++, now.day()); EEPROM.write(eepIndex++, now.month()); EEPROM.write(eepIndex++, now.year()>>8 ); EEPROM.write(eepIndex++, now.year()); EEPROM.write(1000,user1); EEPROM.write(1001,user2); EEPROM.write(1002,user3); EEPROM.write(1003,user4); // EEPROM.write(4,user5); // figth user } void checkKeys() { if(digitalRead(enroll) == 0) { lcd.clear(); lcd.print("Please Wait"); delay(1000); while(digitalRead(enroll) == 0); Enroll(); } else if(digitalRead(del) == 0) { lcd.clear(); lcd.print("Please Wait"); delay(1000); delet(); } } void Enroll() { int count=1; lcd.clear(); lcd.print("Enter Finger ID:"); while(1) { lcd.setCursor(0,1); lcd.print(count); if(digitalRead(up) == 0) { count++; if(count>records) count=1; delay(500); } else if(digitalRead(down) == 0) { count--; if(count<1) count=records; delay(500); } else if(digitalRead(del) == 0) { id=count; getFingerprintEnroll(); for(int i=0;irecords) count=1; delay(500); } else if(digitalRead(down) == 0) { count--; if(count<1) count=records; delay(500); } else if(digitalRead(del) == 0) { id=count; deleteFingerprint(id); for(int i=0;i"); if(EEPROM.read(eepIndex)<10) Serial.print('0'); Serial.print(EEPROM.read(eepIndex++)); Serial.print(':'); if(EEPROM.read(eepIndex)<10) Serial.print('0'); Serial.print(EEPROM.read(eepIndex++)); Serial.print(':'); if(EEPROM.read(eepIndex)"); if(EEPROM.read(eepIndex)<10) Serial.print('0'); Serial.print(EEPROM.read(eepIndex++)); Serial.print('/'); if(EEPROM.read(eepIndex)<10) Serial.print('0'); Serial.print(EEPROM.read(eepIndex++)); Serial.print('/'); Serial.print(EEPROM.read(eepIndex++)<<8 | EEPROM.read(eepIndex++)); } else { Serial.print("---------------------------"); } Serial.print(" "); } Here the link of the code Industry-Based Applications : Fingerprint scanner technology has become a vital component of current electronic security systems. Fingerprint and biometric authentication became a wide-spread phenomenon due to their prominence in movies and on television. People commonly use biometric identification methods in a variety of real-world applications across various industries. Advanced systems and technology utilize human fingerprints as unique, unchangeable and safe keys to access devices, doors, secure data, and many more. In real-world applications, fingerprint scanners are now an integral part of various sectors: Visit blotter: Law enforcement agencies use fingerprints to confirm identities and advance their investigations. They have relied on fingerprint databases for decades to support identification efforts. This method remains one of the most reliable forms of forensic identification and continues to play a key role today. Employers in the finance : educational, security, and construction industries often require fingerprinting as part of their hiring, licensing, and background check processes. This makes the identification process in the ever-evolving workplace a little more secure for shared identities. Fingerprint Authentication in the Technology Industry: Motorola launched the Atrix in 2011, the first smartphone with fingerprint scanning capabilities. Apple has integrated fingerprint scanning mechanisms in many of its devices, including the iPhone 5s, iPhone 7, and iPads (5th and 6th generation). People commonly use these biometrics to unlock devices and authorize secure payments. Laptop manufacturers have adopted fingerprint readers and scanners to enhance security for logging in and protecting files. Biometric Door Locks: Biometric door locks now often incorporate fingerprint scanning as part of a biometric lock that includes the ability to use a touchscreen keypad to further secure home and commercial spaces. As a result, businesses no longer need to use steel doors as a method of access control for their buildings. Theme parks and amusement venues and resorts: Amusement parks such as Walt Disney World use fingerprint scanning for validating tickets. This process protects against fraud in ticket sales and creates a secure and user-friendly entry experience for guests. These typical usages demonstrate how fingerprint recognition has evolved from a science fiction concept to a tangible and everyday safety feature. This project aims to simulate these real world usages by means of a Fingerprint Scanner Arduino system to give students the opportunity to engage first hand with a service that is shaping the future of safe identification. Technical Challenges and Solutions: This section outlines the key technical difficulties encountered during the project and explains the practical solutions implemented to overcome them. Enrollment Issues: Finger is not placed properly → Code retry mechanism; ensure a clean sensor/finger. Environmental Susceptibility: Dust/light impacts accuracy → Use barricades; clean sensors regularly. Power Drain: Sensor + LCD draws too much current → Use an external 5V power source. Low Storage Capacity: UNO stores only a few fingerprints → Upgrade to ESP32 or limit the number of users allowed. Serial Port Conflicts: Multiple serial devices are conflicting → Use SoftwareSerial on different pins, etc. Poor User Feedback: Users do not know what the status of the device is → Information on the LCD; buzzer to indicate status. Loose Connections: Wires from the breadboard become disconnected sometimes → Use a PCB soldered connection or a solid connection. RTC Power Loss: RTC loses time on power loss → Add coin cell battery to your RTC. Final Thoughts: The practical implementation of fingerprint scanner-based systems using Arduino is successful.   This allows users to enroll fingerprints and keeps the option of storing or deleting fingerprints, adding flexibility and user-friendliness. There are several technical snags, such as the low sensitivity of the sensor and various hardware limitations. Nevertheless, the project still provides ample hands-on exposure in hardware interfacing as well as biometric security-related concepts. Moreover, it helps learners understand the integration of hardware and software in practical scenarios. Ultimately, the Fingerprint Scanner Arduino project effectively demonstrates how simple microcontroller-based systems can nevertheless support advanced security solutions. In conclusion, despite minor drawbacks, the project offers valuable insights and serves as a stepping stone toward mastering embedded systems and biometric technologies.   ### Smart Glove for Sign Language Translation using Arduino Sign language is a beautiful and essential mode of communication, yet unfortunately, it is not widely understood. The Smart Glove for Sign Language Translation aims to bridge that communication gap. This innovative device translates hand gestures into text or audio in real-time, enabling those who use sign language to communicate with the broader community. In this article, we explore how this wearable technology works, its components, and how it can be particularly beneficial for children with sensory issues. What Is Smart Glove for Sign Language Translation? The Smart Glove is a sensor-laden wearable device that detects human gestures and converts them into comprehensible text or speech. This real-time translation is powered by flex sensors, an accelerometer, and a microcontroller that work together to interpret hand movements and gestures. The processed data is then sent wirelessly to a paired device, such as a smartphone or computer, for output. Through this device, users can now bridge the communication divide with those who are unfamiliar with sign language, thus enhancing social inclusion and interaction. The device's simplicity, low cost, and customizability make it a viable option for a wide range of users. How This Arduino Project Benefits Children with Sensory Issues Children with sensory or speech challenges often face difficulties in expressing themselves and understanding others. The Smart Glove can provide significant benefits by: Bridging communication gaps: The glove translates sign language into text or audio, making it easier for children to express their thoughts. Empowering children: This device allows children with sensory issues to communicate more easily, boosting their confidence and independence. Improving social inclusion: It promotes interaction with peers who may not be familiar with sign language, encouraging friendships and social growth. Key Features of the Smart Glove Real-Time Translation: The glove converts sign language gestures into text or audio instantly, allowing immediate communication. Wireless Communication: It features Bluetooth connectivity for seamless data transmission to smartphones or computers. Customizable: You can configure the glove to recognize different gestures or even specific languages and makes it highly adaptable. Required Materials to Build the Smart Glove To create your own Smart Glove, here’s what you'll need: Arduino Nano or Uno: The microcontroller that processes the data. Flex Sensors: To measure the bending of fingers as they make gestures. Accelerometer (e.g., ADXL335 or MPU6050): To detect the orientation of the hand. Bluetooth Module (HC-05): For wirelessly transmitting data. Power Source: Battery pack to power the device. Glove: A standard glove to mount the sensors. Additional Materials: Resistors, jumper wires, and a breadboard for connections. How the Smart Glove Works Movement Detection: Flex sensors on the fingers measure the bending of each finger, while the accelerometer monitors the overall orientation of the hand. Signal Processing: The Arduino processes the data from these sensors and compares the gesture with pre-programmed sign language gestures. Data Transmission: The output is sent via Bluetooth to a connected device (smartphone or computer) displayed as text or converted to speech. Stepwise Guide to Build the Smart Glove Here’s a simple step-by-step guide to building your own Smart Glove: Prepare the Glove: Attach flex sensors to each finger of the glove using adhesive or thread. Connect the Sensors: Wire the flex sensors and accelerometer to the Arduino Nano or Uno. Establish Wireless Communication: Hook up the Bluetooth module to your Arduino to enable wireless data transfer. Program the Arduino: Write a program to map the gestures to corresponding phrases or words. Power the Glove: Attach a battery pack to make the system portable. Test and Calibrate: Calibrate the system to improve its accuracy in gesture recognition. Files: Files For Smart Glove What is the need to Turn the Glove Smart? The Smart Glove for Sign Language Translation is not only an innovation in assistive technology but also a significant step toward inclusivity. By converting sign language into text or speech, this glove enables more effective communication, especially for children with sensory issues, allowing them to express themselves and interact with others more easily. This project combines the power of simple, accessible technology with the potential for real-world impact, making it an excellent choice for anyone looking to improve communication in their community. ### Top 10 Sensory Friendly Arduino Projects for Kids with Sensory Issues Discover the top 10 sensory-friendly Arduino projects designed for kids with sensory issues. Introducing technology exploration to children with sensory issues creates a beneficial and engaging practice. The hands-on method of Arduino projects enables users to build sensory-friendly tools which help students learn through active participation. These tools increase both learning effectiveness and student engagement and instill relaxation benefits. The following text presents the selection of ten excellent Arduino projects specifically made to support children with sensory needs. 1- NFC Fun Toy for Children with Sensory Needs Using technology combination of Arduino and NFC represents a major step forward for aiding children with sensory needs. A project known as the NFC Fun Toy stands as an excellent demonstration of how innovative DIY projects deliver interactive therapeutic devices. What is the NFC Fun Toy? Near Field Communication technology powers the interactive sensory toy known as the NFC Fun Toy. Children can explore colors sounds and textures through NFC tag interactions with the NFC Fun Toy in a fun engaging manner. Read More 2- Ultrasonic Sensory Device for the Visually Impaired Through technological means individuals with disabilities gain empowerment and the Ultrasonic Sensory Device for the Visually Impaired stands as an excellent representation of this phenomenon. Its affordable design enables this simple device to detect ultrasonic signals for reliable assistance to people with vision impairment while they move around. What does the Ultrasonic Sensory Device accomplish? The Ultrasonic Sensory Device is a handy Arduino tool that picks up on objects with ultrasonic sensors then warns users by vibrating or sounding an alarm. Read More 3-Smart Stick for the Visually Impaired Arduino technology shines in the Smart Stick for the Visually Impaired because it builds accessibility features to empower visually impaired users. The assistive device utilizesễ ultrasonic sensors with buzzer components that integrate with Arduino for an innovative functional application. What is the Smart Stick? A handheld device known as the Smart Stick detects obstacles in front of users while emitting buzzer or vibration warning signals. This device functions to improve mobility and independence among visually disabled persons. Read More 4-Makey Makey Dance Floor Project Technology can mix fun, creativity, and exercise, and the Makey Makey Dance Floor shows this well. This DIY project uses Makey Makey, conductive items, and Arduino to create a dance floor that makes sounds or actions when stepped on. It is great for kids, parties, and sensory events, making it both enjoyable and creative. What is the Makey Makey Dance Floor? The Makey Makey Dance Floor is a floor that makes sounds or actions when you step on it. It uses Makey Makey and Arduino to sense the steps and link them to outputs like music, lights, or other fun things. Read More 5-Interactive Voice Controlled Robot for Learning and Fun The Interactive Voice Controlled Robot is an exciting project designed to merge education and entertainment seamlessly. Built on a foundation of open-source technology, this robot responds to voice commands, performs interactive movements, and engages users in a way that fosters creativity, problem-solving, and STEM education. Whether you're a beginner or an experienced robotics enthusiast, this project offers an accessible and rewarding experience. With features such as storytelling, voice recognition, and playful actions, it is perfect for kids, educators, and hobbyists alike. What is the Voice Controlled Robot? The Voice-Controlled Robot is an intelligent, open-source creation that combines robotics and artificial intelligence. Designed for users of all skill levels, it doesn’t require prior training to use. The robot listens to voice commands, performs movements, and offers interactive features such as storytelling, singing, and even home security functionalities. Read More 6-Sensory Feedback Bracelet Using Arduino Wearable technology has revolutionized accessibility, providing tools to support individuals with sensory challenges. This project outlines how to create a Sensory Feedback Bracelet, combining features from an Arduino-based navigation bracelet and sensory-focused wearables. This bracelet sends soft tactile feedback to help users stay calm, focused, and connected to their surroundings. What Is a Sensory Feedback Bracelet? A Sensory Feedback Bracelet is a compact wearable device that delivers light vibrations to the wrist, offering tactile feedback. This device is especially beneficial for children with sensory processing challenges, helping to regulate their reactions and emotions in overstimulating environments. Read More 7-Arduino Smart Cane for the Visually Impaired Advances in technology continue to make life easier for individuals with disabilities. Inspired by a desire to help visually impaired individuals navigate their surroundings more confidently, this Arduino-based Smart Cane project is an affordable, open-source solution. With a combination of sensors, haptic feedback, and intelligent programming, this device enhances mobility and independence. The idea of creating a smart cane—simple, cost-effective, and easy to build, so even a child could assemble it in a few hours. This Smart Cane can detect obstacles and provide real-time feedback using a vibration motor and a piezo buzzer. Read More 8-Earfingers Earfingers aims to offer an innovative way for individuals, especially those with hearing impairments, to experience sound. The circuit for Earfingers uses an Arduino to control the vibration motors. First and foremost, I must acknowledge that I am standing on the shoulders of giants—people whose open contributions to the community made this project possible. Without the countless individuals who freely share their knowledge, projects like this would be unthinkable. What Are Earfingers? Earfingers is a wearable device that allows users to "feel" sound through vibrations transmitted to the fingertips. This project leverages the fascinating relationship between touch and hearing, drawing inspiration from the auditory system, specifically the cochlea's wavelet transformation process. Read More 9-Smart Glove for Sign Language Translation Sign language is a beautiful and essential mode of communication, yet unfortunately, it is not widely understood. The Smart Glove for Sign Language Translation aims to bridge that communication gap. This innovative device translates hand gestures into text or audio in real-time, enabling those who use sign language to communicate with the broader community. In this article, we explore how this wearable technology works, its components, and how it can be particularly beneficial for children with sensory issues. What Is Smart Glove for Sign Language Translation? The Smart Glove is a sensor-laden wearable device that detects human gestures and converts them into comprehensible text or speech. This real-time translation is powered by flex sensors, an accelerometer, and a microcontroller that work together to interpret hand movements and gestures. The processed data is then sent wirelessly to a paired device, such as a smartphone or computer, for output. Through this device, users can now bridge the communication divide with those who are unfamiliar with sign language, thus enhancing social inclusion and interaction. The device's simplicity, low cost, and customizability make it a viable option for a wide range of users. Read More 10-Sound Activated LED with Arduino Sound-activated LEDs are a fun and interactive way to combine audio and visuals. In this project, you will build a simple sound-responsive LED light system using an Arduino and a microphone sensor. When a sound is detected, such as clapping or music, the LEDs will light up based on the sound's intensity. This project is perfect for beginners to explore sound sensitivity, signal processing, and basic electronics. What is the Sound Activated LED Project? In this project, you will use a microphone sensor and an Arduino microcontroller to create a light show that reacts to sound. Whether it's the sound of clapping, music, or talking, the sound sensor picks up vibrations in the air and sends them to the Arduino, which then activates LEDs accordingly. Read More ### Arduino Earfingers-Hear With Your Hands Earfingers aims to offer an innovative way for individuals, especially those with hearing impairments, to experience sound. The circuit for Earfingers uses an Arduino to control the vibration motors. First and foremost, I must acknowledge that I am standing on the shoulders of giants—people whose open contributions to the community made this project possible. Without the countless individuals who freely share their knowledge, projects like this would be unthinkable. What Are Earfingers? Earfingers is a wearable device that allows users to "feel" sound through vibrations transmitted to the fingertips. This project leverages the fascinating relationship between touch and hearing, drawing inspiration from the auditory system, specifically the cochlea's wavelet transformation process. The Science Behind Earfingers Human hearing involves a complex system of sensors in the cochlea that converts sound waves into neural impulses. This process is incredibly intricate, with the cochlea decomposing sound into a series of frequency components—a process known as wavelet transformation. Interestingly, the tactile sensory system operates within the same frequency range (50–250 Hz) as hearing, suggesting that the brain might be able to interpret sound through touch. This idea is the foundation of Earfingers. How Earfingers Works The device functions by converting audio signals into vibrational feedback, allowing users to "feel" the sound. The process involves: Microphone Input: Capturing environmental sound. Arduino Input Processing: Converting audio signals into vibration patterns. Tactile Feedback: Vibrations transmitted through motors placed on the fingers, allowing users to feel the sound. Building Earfingers: A DIY Guide To bring Earfingers to life, you'll need: Arduino Uno (or similar microcontroller) Audio Sensor Module (e.g., KY-037) Vibration Motors (for each finger) Amplifier Circuit Glove or Strap for mounting motors Building the Tactors Creating tactors involves assembling solenoids (small electromagnets), winding motor coils, and placing them in a housing that can transmit vibrations to the skin. You’ll also need powerful magnets, tubing, and flexible membranes to create the correct vibration feedback. The Circuit The circuit for Earfingers uses an Arduino to control the vibration motors. Since the motors require more power than the Arduino can supply directly, we use transistors to switch the motors on and off, along with diodes to protect the circuit from back electromagnetic forces. Software Development The software behind Earfingers processes audio data and decomposes it using wavelet transformation, breaking sound down into its component frequencies. These frequencies are then mapped to vibrational signals, allowing the device to simulate a tactile experience of sound. Code Testing and Results Upon completing the device, users can test it by playing music or other audio content. The goal is for the user to recognize music and speech based on tactile feedback. While the system won't replicate the full experience of hearing, it allows users to perceive and distinguish between sound patterns, offering a new way to "hear" through touch. Impact and Future Possibilities The primary motivation behind Earfingers was to help individuals with hearing impairments experience music and sound through tactile feedback. While it’s still early in development, the project demonstrates how sensory substitution can offer new ways to experience the world. ### Sound Activated LED with Arduino Sound-activated LEDs are a fun and interactive way to combine audio and visuals. In this project, you will build a simple sound-responsive LED light system using an Arduino and a microphone sensor. When a sound is detected, such as clapping or music, the LEDs will light up based on the sound's intensity. This project is perfect for beginners to explore sound sensitivity, signal processing, and basic electronics. What is the Sound Activated LED Project? In this project, you will use a microphone sensor and an Arduino microcontroller to create a light show that reacts to sound. Whether it's the sound of clapping, music, or talking, the sound sensor picks up vibrations in the air and sends them to the Arduino, which then activates LEDs accordingly. Parts Needed: Arduino Uno (or compatible microcontroller) KY-037 Microphone Sound Sensor (or an analog microphone sensor) LEDs (RGB or regular) Resistors (for LED connection) Breadboard and Jumper Wires Power Source (USB or external battery pack) Connections: Connect the KY-037 microphone sensor to the analog pin (e.g., A0) on the Arduino. Connect the LEDs to a digital pin (e.g., 13), using resistors to prevent damage from excessive current. How It Works: Sound Detection: The microphone sensor picks up sound waves in the environment. Signal Processing: The analog signal from the sensor is processed by the Arduino. LED Activation: Based on the signal's intensity, the Arduino lights up the LEDs. Visual Effect: The LEDs dynamically react to varying sound levels, creating a light show. Code: // Item Four—Sound Control Light int soundPin = 0; // Analog sound sensor is to be attached to analog int ledPin = 13; // Digital Piranha LED-R is to be attached to digital pinMode(ledPin, OUTPUT); // Serial.begin(9600); // You can uncomment this for monitoring } void setup() { void loop(){ int soundState = analogRead(soundPin); // Read sound sensor’s value // Serial.println(soundState); // serial port print the sound sensor’s value // if the sound sensor’s value is greater than 10, the light will be on for 10 seconds. //Otherwise, the light will be turned off if (soundState > 10) { digitalWrite(ledPin, HIGH); delay(10000); }else{ digitalWrite(ledPin, LOW); } } Hardware Analysis (Analog Input – Digital Output): In this project, we use an analog sound sensor, which produces an analog signal. Analog signals have multiple values ranging between 0 and 1023. In contrast, digital signals only have two values: 0 and 1. The Arduino processes the analog signal and converts it into a digital form using the A/D (analog-to-digital) converter, which maps the voltage between 0 and 5V to values between 0 and 1023. Customization Tips: Adjust the threshold value (soundState>10) to tune sensitivity to different sound levels. You can fine-tune the sensitivity by testing with different values and monitoring the response on the Serial Monitor. Use multiple LEDs or RGB LEDs for more complex light displays or patterns. Experiment with different sound frequencies (e.g., bass or treble) to create more dynamic displays. Benefits for Children with Sensory Issues: Interactive Learning: Engages children by linking sound with visual stimuli, providing a fun way to explore sensory integration. Focus Enhancement: Helps improve sensory processing by offering immediate feedback based on sound. Controlled Environment: Provides a safe space for children to explore and learn about sound dynamics and its effect on visuals. Why Build the Highly Effective Sound Activated LEDs? This project is a great beginner's introduction to sound-based electronics. It incorporates simple components to teach about sensors, microcontrollers, and LEDs, while giving hands-on experience in real-time signal processing. Not only does it add an interactive lighting effect to your home or parties, but it’s also a fantastic educational tool for understanding sound dynamics and electronics. ### Arduino Smart Cane for the Visually Impaired Advances in technology continue to make life easier for individuals with disabilities. Inspired by a desire to help visually impaired individuals navigate their surroundings more confidently, this Arduino-based Smart Cane project is an affordable, open-source solution. With a combination of sensors, haptic feedback, and intelligent programming, this device enhances mobility and independence. The idea of creating a smart cane—simple, cost-effective, and easy to build, so even a child could assemble it in a few hours. This Smart Cane can detect obstacles and provide real-time feedback using a vibration motor and a piezo buzzer. Key Features of the Smart Cane Obstacle Detection: Ultrasonic sensors detect objects in the user's path. Haptic Feedback: Vibrations alert the user when obstacles are detected. Auditory Alerts: A buzzer provides an additional warning signal. Lightweight & Portable: Designed for everyday use, similar to a traditional walking stick. How the Smart Cane Works The Smart Cane comprises three main components: Input: An ultrasonic sensor detects obstacles up to 13 feet away. Controller: An Arduino processes the sensor data to determine the distance to obstacles. Output: A vibration motor and piezo buzzer provide feedback to alert the user. When the ultrasonic sensor detects an obstacle within a preset range, the Arduino triggers the vibration motor and buzzer to warn the user. Materials Required Electronics: Arduino Uno (or compatible microcontroller) Ultrasonic sensor (e.g., HC-SR04) Vibration motor (salvaged from an old cell phone or purchased) Piezo buzzer Battery pack for portability Other Materials: 3/4-inch diameter PVC pipe and elbow for the cane frame Insulation tape Adhesive glue or screws A box to house the electronics Tools: Screwdriver Utility knife Breadboard and wires Step-by-Step Guide to Building the Smart Cane Prepare the Ultrasonic Sensor:Connect the ultrasonic sensor to the Arduino as follows: VCC to Arduino 5V GND to Arduino GND TRIG to Arduino D12 ECHO to Arduino D11 Connect the Output Devices: Vibration Motor: Pin 1 to Arduino D7, Pin 2 to GND Piezo Buzzer: Red wire to Arduino D8, Black wire to GND Assemble the Cane: Use a 3/4-inch diameter PVC pipe as the main cane. Attach an elbow joint to create a handle. Wrap the pipe with insulation tape for a clean finish. Mount the electronics in a box attached to the cane. Use glue or screws to secure the box. Attach the ultrasonic sensor to the box’s lid and position the vibration motor near the handle. Implement the Code into Arduino:Write The Code into your Arduino IDE And Implement it Test the Cane:Power the system using a battery pack and test the functionality. Adjust the sensor range or feedback intensity as needed. Benefits of the Smart Cane Improved Mobility: Real-time assistance ensures users can move safely. Enhanced Independence: Reduces reliance on external help. Customization: Add LEDs, advanced sensors, or other features for added functionality. Affordable Solution: Costs significantly less than commercial smart canes. Files: Smart Cane Code Why Build the Smart Cane? This Smart Cane is more than a DIY project; it’s a step toward accessible technology that improves the quality of life for visually impaired individuals. By leveraging simple electronics and open-source programming, it empowers users with greater confidence, mobility, and independence. ### Sensory Feedback Bracelet Using Arduino Wearable technology has revolutionized accessibility, providing tools to support individuals with sensory challenges. This project outlines how to create a Sensory Feedback Bracelet, combining features from an Arduino-based navigation bracelet and sensory-focused wearables. This bracelet sends soft tactile feedback to help users stay calm, focused, and connected to their surroundings. What Is a Sensory Feedback Bracelet? A Sensory Feedback Bracelet is a compact wearable device that delivers light vibrations to the wrist, offering tactile vibrations. This device is especially beneficial for children with sensory processing challenges, helping to regulate their reactions and emotions in overstimulating environments. Main Features Tactile Feedback: Sends gentle vibrations to promote calmness and focus. Customizable Settings: Vibration intensity and patterns can be adjusted to suit individual needs. Lightweight & Portable: Comfortable for all-day wear and easy to carry anywhere. How This Bracelet Benefits Children with Sensory Issues Self-Regulation: Provides calming tactile feedback to help manage anxiety and overstimulation. Enhanced Focus: Reduces sensory overload by grounding the user through gentle vibrations. Emotional Comfort: Helps children associate sensory cues with a sense of calm and safety. Wearable Convenience: Acts as a discreet, portable tool for sensory support in any environment. What You’ll Need To create your sensory feedback bracelet, gather these materials: Arduino Nano or ATTiny85 microcontroller Vibration Motor (commonly found in smartphones) Battery Pack (e.g., rechargeable LiPo battery) On/Off Switch Elastic Strap or Velcro for wearability Additional components: resistors, wires, connectors, and a small PCB for assembly How It Works Vibration Mechanism: A motor generates light tactile feedback. Microcontroller Control: Arduino or ATTiny85 regulates vibration patterns and intensity. User-Friendly Design: An elastic strap ensures a secure and comfortable fit. The wearable delivers continuous feedback, helping users feel grounded and connected. Step-by-Step Guide to Building the Bracelet 1. Assemble the Electronics Connect the vibration motor to the Arduino Nano or ATTiny85 microcontroller. Attach the battery pack to power the circuit. 2. Program the Microcontroller Write a simple program in the Arduino IDE to control vibration patterns and intensity. Upload the code to the microcontroller. 3. Secure the Components Fix the motor, microcontroller, and battery onto a small PCB or directly onto the strap. 4. Attach the Strap Use elastic or Velcro to create an adjustable, comfortable wristband. 5. Test and Refine Fine-tune the vibration intensity and patterns to suit the user’s sensory needs. Files: Feedback Bracelet Files Why Build This Bracelet? Creating a sensory feedback bracelet isn’t just a DIY project—it’s a way to empower individuals with sensory challenges. By tailoring the device to their unique needs, users gain a tool that supports emotional well-being and enhances their ability to navigate sensory-rich environments. This cost-effective, customizable wearable is a simple yet impactful solution for sensory support. Whether for children with sensory processing issues or adults seeking calming feedback, the Sensory Feedback Bracelet is a practical and meaningful innovation. ### Interactive Voice Controlled Robot for Learning Using Arduino The Interactive Voice Controlled Robot is an exciting project designed to merge education and entertainment seamlessly. Built on a foundation of open-source technology, this robot responds to voice commands, performs interactive movements, and engages users in a way that fosters creativity, problem-solving, and STEM education. Whether you're a beginner or an experienced robotics enthusiast, this project offers an accessible and rewarding experience. With features such as storytelling, voice recognition, and playful actions, it is perfect for kids, educators, and hobbyists alike. What is the Voice Controlled Robot? The Voice-Controlled Robot is an intelligent, open-source creation that combines robotics and artificial intelligence. Designed for users of all skill levels, it doesn’t require prior training to use. The robot listens to voice commands, performs movements, and offers interactive features such as storytelling, singing, and even home security functionalities. Key Features Voice Command Integration: Responds to simple spoken instructions like “move forward” or “dance.” Interactive Movements: Walks, dances, and reacts to commands for engaging play. Storytelling and Singing: Recites poems, tells stories, and plays songs. Educational and Entertaining: Teaches coding, robotics, and AI concepts while keeping users engaged. Home Security Features: Includes fire alarm alerts and automated emergency call functions. Benefits for Children with Sensory Issues The robot is particularly beneficial for children with sensory processing challenges, offering features that promote sensory integration and learning: Encourages communication through voice-controlled interaction. Provides auditory and kinesthetic feedback for enhanced sensory engagement. Improves coordination and motor skills through interactive play. Helps children focus with structured and engaging activities. Materials Needed To build your own Interactive Voice-Controlled Robot, you will need: Microcontroller: Arduino Nano, Uno, or Raspberry Pi. Voice Recognition Module: Elechouse or similar modules. Motors: MG995 360-degree servo motors or similar. Audio System: Mini sound box and microphone (e.g., BOYA BY-M1). Additional Components: Infrared module, relay module, LEDs, 10k ohm resistor. Power Supply: Battery pack for portability. Body Materials: 3D-printed parts, cardboard, or an Otto DIY robot kit. How It Works Voice Recognition: The robot uses a voice recognition module to understand specific commands like “dance” or “stop.” Arduino-Controlled Actions: Commands trigger specific movements using servo motors. Real-Time Interaction: The robot executes the actions, offering an engaging and responsive experience. Multi-Functionality: Additional features like storytelling, music playback, and security alerts enhance its usability. Step-by-Step Guide to Building the Robot Assemble the Body: Use an Otto DIY kit or 3D-print the robot’s frame. Attach servo motors for movement. Connect the Voice Module: Hook up the voice recognition module to the microcontroller and program it with sample voice commands. Write the Code: Program the microcontroller using Python and C++ to process commands and control movements. Power It Up: Add a battery pack and test the robot’s functions. Enhance the Features: Customize the robot by adding LEDs, more commands, or advanced interactions. Applications STEM Education: Perfect for teaching robotics, coding, and AI concepts. Interactive Learning: A great tool for engaging children in fun, hands-on activities. Science Fairs and Workshops: An innovative project to showcase in competitions and educational events. Home Security: Features like fire alarms and emergency call functionality provide added utility. Why Build the Interactive Voice Controlled Robot? This project offers a unique blend of learning and entertainment, making it ideal for kids, educators, and robotics enthusiasts. It introduces fundamental concepts of coding, robotics, and voice recognition in an interactive and engaging way. Beyond its educational value, the robot provides endless fun with its customizable features, making it a standout project for anyone interested in modern technology. By creating this robot, you not only explore the exciting world of robotics but also contribute to a fun and dynamic learning environment for children and beginners. Get started today and enjoy the journey of building, coding, and interacting with your very own voice-controlled robot! ### Makey Makey Dance Floor Project Using Arduino Technology can mix fun, creativity, and exercise, and the Makey Makey Dance Floor shows this well. This DIY project uses Makey Makey, conductive items, and Arduino to create a dance floor that makes sounds or actions when stepped on. It is great for kids, parties, and sensory events, making it both enjoyable and creative. What is the Makey Makey Dance Floor? The Makey Makey Dance Floor is a floor that makes sounds or actions when you step on it. It uses Makey Makey and Arduino to sense the steps and link them to outputs like music, lights, or other fun things. Key Features: Design that reacts to steps. Sounds, lights, and actions can be customized. Promotes movement and creativity in a playful manner. How This Arduino Project Benefit Children with Sensory Issue Engages children with sensory issues through interactive touch and movement. Encourages kinesthetic learning and improves coordination. Provides visual and auditory feedback for children to associate movements with results. Helps children focus by creating a dynamic sensory experience. Materials Needed: To make this fun dance floor, you will need: Makey Makey board. Arduino Uno (optional for more custom options). Conductive materials (like aluminum foil, conductive tape). Big sheets of cardboard or foam board for floor tiles. Speaker or buzzer for sound feedback. Wires, adhesives, and basic crafting tools. How Do the Mechanics of the Dance Floor Function? Every tile is linked to the Makey Makey using conductive materials. Stepping on a tile completes a circuit and sends a signal to the Makey Makey. The Makey Makey converts this signal into an action that a computer or Arduino can perform, such as producing sound or activating lights. This is a great way to engage in creative art while doing physical activities. Advantages: Promotes Exercise: A great way to get children (and adults) active. Creative and Customizable: Entirely adjust the design to fit specific themes or occasions. Informative: Introduces simple circuitry and coding ideas. Sensation Friendly: Ideal for kids that require sensory stimulation to function. How to Create The Makey Makey Dance Floor Step by Step Tile Preparation: Use some cardboard or foam board to cut out a large tile and then cover the surface with a conductive material such as aluminum foil or conductive tape. Connect the Tiles: Using wires, connect every tile to the Makey Makey board so that a circuit is created for each step zone. Program the Output: Install the Makey Makey software or Arduino and customize what happens when a tile has been activated by playing certain sounds or triggering lights. Floor Assembly: Place the tiles in a grid design or any custom design and ensure all wires are securely placed and hidden. Testing: Adjust the programming and outputs to meet your desired needs. Allow for extra fun by adding lights or animations. Troubleshooting/Bugs Loose connections: Ensure wires and clips are secure. Non-responsive arrows: Check for gaps in the foil or poor grounding. Unregistered steps: Verify Makey Makey connections match the input mapping. Why Build the Makey Makey Dance Floor? The Makey Makey Dance Floor is a fun project that merges exercise, imagination and activities together with a healthy dose of modern tech. You will find this dance floor very engaging no matter if you are within the comfort of your home, at a party, actively using it in a classroom setting or even for some sensory friendly fun. In addition, it is an engaging and seamless way to teach the fundamentals of circuits and programming to students. ### Arduino Smart Stick for the Visually Impaired Arduino technology shines in the Smart Stick for the Visually Impaired because it builds accessibility features to empower visually impaired users. The assistive device utilizes ultrasonic sensors with buzzer components that integrate with Arduino for an innovative functional application. What is the Smart Stick? A handheld device known as the Smart Stick detects obstacles in front of users while emitting buzzer or vibration warning signals. This device functions to improve mobility and independence among visually disabled persons. Key Features: Obstacle detection using ultrasonic sensors. Audible or tactile feedback to alert the user. The device works with a lightweight portable structure to support everyday applications. How This Arduino Project Benefit Children with Sensory Issue Provides real-time feedback through vibrations or sounds to alert children to obstacles. Enhances mobility and spatial awareness for visually impaired children. Promotes independence by helping children safely navigate their environment. Uses tactile and auditory cues to support sensory processing. Materials Needed for the Smart Stick These materials are necessary to construct the project: Arduino Uno or Nano, HC-SR04 Ultrasonic Sensor, Buzzer or Vibration Motor along with a stick or cane and a battery pack. HC-SR04 Ultrasonic Sensor: VCC → 5V TRIG → D13 ECHO → D12 GND → Ground Buzzer: Positive(+) → D10 Negative(-) → Ground Vibration Motor: Positive(+) → D7 Negative(-) → Ground LED: Positive(+) → D2 Negative(-) → Ground How Does the Smart Stick Work? The ultrasonic sensor sends out waves and measures the time it takes for the waves to return after hitting an obstacle. This time is converted into distance. If the distance is less than 100 cm, the buzzer and vibration motor are triggered to alert the user. The LED indicates that the system is powered on. The implemented process enables safe navigation by users throughout their area while decreasing their potential for accidents. Step-by-Step Guide to Build the Smart Stick Draft and obtain all required elements which include the Arduino board and ultrasonic sensor and buzzer and any remaining materials in the list. Perform the next step by connecting the ultrasonic sensor to the Arduino combined with the buzzer or vibration motor. Mount the components onto a stick by using a stick or cane. The Arduino needs program code to process distance readings while generating feedback signals when obstacles appear before the user. The device must be tested by calibrating the sensor range while optimizing its sensitivity level. Finish the device by mounting it safely while making it easy to keep. Code: long cm, duration; void setup() { Serial.begin(9600); pinMode(13, OUTPUT); // TrigPin pinMode(12, INPUT); // EchoPin pinMode(10, OUTPUT); // Buzzer pinMode(2, OUTPUT); // LED pinMode(7, OUTPUT); // Vibration Motor } void loop() { digitalWrite(13, LOW); delayMicroseconds(20); digitalWrite(13, HIGH); delayMicroseconds(20); digitalWrite(13, LOW); delayMicroseconds(20); duration = pulseIn(12, HIGH); cm = duration * 0.034 / 2; if (cm < 100) { tone(10, 3000); digitalWrite(7, HIGH); delay(500); noTone(10); delay(30); } else { digitalWrite(7, LOW); } delay(50); } Troubleshooting or Bugs: Incorrect sensor readings: Ensure the ultrasonic sensor is properly connected and calibrated. No feedback: Check the buzzer and motor wiring and test the code for proper pin settings. Power issues: Ensure the power supply is adequate for the components. Testing Guide: Step 1: Power up the system and check the LED to ensure the Arduino is on. Step 2: Test the sensor by placing obstacles at varying distances. The buzzer or vibration motor should activate when an obstacle is within 100 cm. Step 3: Fine-tune the sensor range and motor sensitivity based on the feedback. Why Build the Smart Stick? Using engineering skills and social responsibility the Smart Stick for the Visually Impaired represents an exceptional DIY solution. The device provides a budget-friendly solution which users can personalize along with practical benefits for their needs in obstacle detection. ### Ultrasonic Sensory Device for the Visually Impaired Using Arduino Through technological means individuals with disabilities gain empowerment and the Ultrasonic Sensory Device for the Visually Impaired stands as an excellent representation of this phenomenon. Its affordable design enables this simple device to detect ultrasonic signals for reliable assistance to people with vision impairment while they move around. What does the Ultrasonic Sensory Device accomplish? The Ultrasonic Sensory Device is a handy Arduino tool that picks up on objects with ultrasonic sensors then warns users by vibrating or sounding an alarm. Key Features: The device spots items around it in its fixed distance area. The device shows feedback instantly by producing vibrations or audio tones. The device comes with small size packed features simple operations. How This Arduino Project Benefit Children with Sensory Issue Enhances spatial awareness for children with visual impairments. Translates spatial data into auditory feedback for easier navigation. Promotes independent movement and safety through real-time environmental awareness. Improves sensory processing by allowing children to interpret the world using sound. Hardware and Wiring for the Ultrasonic Sensory Device Arduino Microcontroller Use an Arduino Uno or Nano to process data from the ultrasonic sensor and control the feedback system (vibration motor or buzzer). Ultrasonic Sensor (HC-SR04) VCC to 5V pin on Arduino GND to GND pin on Arduino Trig to pin 4 on Arduino Echo to pin 5 on Arduino Haptic Motor VCC to 5V pin on Arduino GND to GND pin on Arduino Control Pin to motor driver (e.g., DRV2605L) DRV2605L Haptic Driver SCL to A5, SDA to A4 on Arduino VCC to 5V, GND to GND on Arduino Power Supply Use a USB cable for powering via a laptop or battery pack (9V or Li-ion) for portability. Mounting Secure components in a compact enclosure (e.g., acrylic) and mount using a glove or elastic strap for easy wear. How Does It Work? The ultrasonic sensor releases sensors waves to measure how long they take to return after hitting an item. The Arduino device activates either the vibration motor or buzzer system following distance detection from the sensor. Object avoidance becomes better when the sensor detects objects closer to the device. The project offers basic help functionality while remaining easy to manufacture for assistive technology creators. Software Implementation Overview: Libraries: Use Adafruit_DRV2605 for the vibration motor and Ultrasonic for the sensor. Setup: Initialize the sensor and haptic motor, set trigger and echo pins. Distance Measurement: Use pulseIn() to calculate the time taken by the ultrasonic pulse to return, converting it into distance. Distance Grouping: Categorize distances into ranges (e.g., 0-30 cm, 31-70 cm) to determine vibration intensity. Vibration Feedback: Based on the distance group, select a vibration pattern using drv.setWaveform(). Main Loop: Continuously measure distance, assign a group, and trigger the corresponding vibration. Troubleshooting: Verify connections, check sensor power, and test different vibration effects. Code: Ultrasonic Device Code Troubleshooting and Challenges While working on the project, a few challenges arose that were important to address: Sensor Range Issue: The sensor only worked up to 50 cm instead of 4 meters. Solution: Swap the sensor or check its wiring. Sensor Failures: The sensor occasionally stopped sending readings. Solution: Reset the Arduino or re-upload the code. Vibration Intensity: Adjusting vibration for clarity was tricky. Solution: Use Adafruit's vibration chart to fine-tune intensity. Power Supply: USB limited portability. Solution: Add a portable battery pack. Step-by-Step Instructions for Building the Device 1: Gather Materials Arduino Uno (or similar) HC-SR04 ultrasonic sensor Vibration motor or Piezo buzzer Wires, resistor (optional) Power source (battery or USB) Prototyping board 2: Assemble Hardware Connect ultrasonic sensor: Trig Pin to pin 4, Echo Pin to pin 5. VCC to 5V, GND to GND. Attach vibration motor/buzzer: Connect to pin 6 and GND. Power the device via USB or battery pack. 3: Upload Code Upload the code to Arduino via the IDE. 4: Test & Calibrate Test the sensor’s distance detection and adjust the feedback in the code if needed. 5: Mount the Device Mount the sensor on a wearable base (glove, belt) and place the motor in a noticeable spot. 6: Troubleshooting Sensor not working? Reset the Arduino and check connections. Range issues? Check sensor connection and adjust the code. Note on Bugs & Issues: The sensor initially worked up to 4 meters but suddenly only detected objects up to 50cm. This issue was traced to the sensor itself, and the solution was either replacing the sensor or adjusting the code to limit the range for testing purposes. Occasionally, the sensor would stop working and fail to send data to the Arduino. In such cases, pressing the reset button or re-uploading the code would resolve the issue and restore functionality. Why Try This Project? Building the Ultrasonic Sensory Device offers a rewarding experience for people interested in disability-friendly technology creation. Both newcomers and experts in making can use this project to help visually impaired people move more easily through their surroundings. ### Arduino NFC Fun Toy for Children with Sensory Needs Using technology combination of Arduino and NFC represents a major step forward for aiding children with sensory needs. A project known as the NFC Fun Toy stands as an excellent demonstration of how innovative DIY projects deliver interactive therapeutic devices. What is the NFC Fun Toy? Near Field Communication technology powers the interactive sensory toy known as the NFC Fun Toy. Children can explore colors sounds and textures through NFC tag interactions with the NFC Fun Toy in a fun engaging manner. Key Features: NFC protocols enable the product to activate lighting effects and sound outputs. The toy offers enhanced sensory learning through its designed features. Portable and customizable for various sensory needs. How This Arduino Project Benefit Children with Sensory Issue Promotes sensory exploration through tactile, auditory, and visual cues. Supports fine motor skill development through interactive play. Provides comforting and calming sensory feedback, reducing overstimulation. Helps create a structured, engaging environment for sensory-sensitive children. Materials Needed to Build the NFC Fun Toy: These materials must be acquired for the recreation of this project: Arduino Uno or similar microcontroller together with NFC Reader Module (e.g., PN532) and both LEDs for visual feedback as well as a speaker/Buzzer for auditory feedback and NFC tags/cards. A power source and connecting wires are necessary too. NFC Reader (for Example: PN532): The PN532 has its reliable NFC detection for the multiple communication protocols, which makes interfacing with NFC tags possible, allowing the toy to respond by reacting as soon a tag comes in proximity of the reader. Microcontroller (Arduino Uno or Similar): The microcontroller is Arduino Uno because of its user-friendliness, enough processing capacity, and huge community support, making it just right for beginners. It helps control all connected components like NFC reader, LEDs, and speaker. LEDs (DotStar RGB LEDs): These LEDs have high refresh rates, and they promise to be a little more reliable than their other types (like NeoPixels). They emit very vibrant colors that can be customized and give a wonderful visual feedback experience to the user. Speaker/Buzzer (with MAX98357A amplifier): A speaker makes richer sounds because it is a loudspeaker, which fills a room inside better than a buzzer. It works as a good audio amplifier ensuring better sounds of attractions with no satiation or distortion in the sounds. NFC Tags: Various sensory stimuli are activated with different types of NFC tags (stickers or cards). They are made tactile with different textures, hence involving touch as well. Power Supply: The power supply could be either USB or Battery powered. USB is good for steady use, while batteries are much more portable for people who want to use them on the go. Connecting Wires and PCB: Jumper wires are used for prototyping work, while for a more compact and more durable final product, a custom PCB would be used. How Does It Work? An NFC tag comes into proximity with the NFC Reader for detection. The NFC tag activates particular colors through LEDs or specific sound outputs by buzzer. Every NFC tag serves as a medium to convey distinct sensory stimuli which might consist of relaxing colors combined with peaceful sounds and pulse sensations. Children seek predictable sensory experiences through cause-and-effect relationships therefore this method provides them benefits. Challenges You May Face: 1-Challenge: Issues with detection of the NFC tagged device. b: The NFC module didn’t detect tags reliably at further distances and varied angles of detachment. Optimizing placement of the NFC reader and testing various tag designs would ensure detection better at close distances and inconsistent angles. 2-Challenge: Buffering and timing audio output Solution: Due to insufficient RAM reserved in the microcontroller for the whole audio file, I created a ping-pong buffer where audio is shifted using dynamic memory application without delay. This ensures continuous transmission of audio with reduced lag. 3-Challenge: SD Card Interface for Audio Files Solution: It was tricky interfacing with the SD card with STM32 microcontroller since there were many libraries that did not work. I finally went in for Chan's FatFs library and spent countless debugging sessions under the logic analyzer to have reliable data transfer. 4-Challenge: Power Consumption and Auto-Sleep Function Solution: Needed to save power, especially when the child, for instance, forgets to switch off, added an accelerometer to pick up movements; if no movement within certain periods, then turns into sleep mode or hibernation mode whereby it preserves battery energization. Software Implementation Insights 1-Libraries and Frameworks Adafruit Libraries: Initially used for NFC and LEDs, but had to modify them to work with STM32 instead of Arduino by adapting the code to STM32Cube. FatFs Library: Used for SD card file management, but faced compatibility issues. Solved by using Chan’s FatFs and debugging with a logic analyzer. 2-Audio Streaming Challenge: Limited RAM on STM32 made it impossible to store large audio files. Solution: Implemented a ping-pong buffer system using DMA for continuous audio streaming without lag. 3-Development Tools Visual Studio Code & Atollic TrueStudio: Used for code writing and STM32 programming. Debugged with a SEGGER J-Link EDU mini debugger to solve peripheral communication issues. 4-NFC Integration Challenge: Needed to adapt NFC control code to STM32’s communication protocols (I2C/SPI). Solution: Modified the code to fit the STM32Cube environment, ensuring smooth NFC tag detection. 5-Overall Debugging Challenge: Multiple component interactions caused timing and communication issues. Solution: Used a logic analyzer to debug and optimize communication between components. Practical Tips: PCB Design: Use KiCAD for schematic and PCB layout. Order the PCB from reliable manufacturers like PCBWay for cost-effective, high-quality boards. Soldering: For small, leadless components, consider ordering a stencil from OSH Stencils to simplify assembly with solder paste and a hot air gun. Component Selection: Use high-quality, reliable components like the PN532 NFC module and DotStar LEDs to minimize errors and enhance durability. Prototyping: Start with a breadboard and jumper wires for testing the design before final assembly to avoid costly mistakes. Power Supply: Ensure proper power management by choosing an appropriate battery or power source to avoid overheating or over-discharge. Assembly Space: Work in a well-lit, static-free environment to prevent component damage and improve accuracy during assembly. Note: Visual aids like schematics and photos are essential for enhancing clarity. They help users easily understand the wiring, component layout, and assembly process, ensuring accuracy and simplifying modifications. Files: Code:  NFC Toy Base Excel File: NFC Toy BOM Video: https://duino4projects.com/wp-content/uploads/2025/02/NFC-Toy-Demo.mp4   Why Try This Project? The NFC Fun Toy represents an amazing DIY device that unites functionality with creativity. The easy-to-customize tool operates at affordable prices while supporting sensory needs of children. You will develop technical abilities through this project because you create an important tool for sensory development. ### Arduino based 7 segment gps clock EDT time We will guide to develop Arduino based 7 segment gps clock which will show EDT time. Accurate time is provided via synchronized clocks with the global positioning system (GPS). These clocks are ubiquitous and frequently found at bus stops, train stations, and airports. These are also frequently employed in the military. Here, we present a GPS clock built on the Arduino Uno R3, a microcontroller board based on the AVR ATmega328 that has 14 digital input/output (I/O) pins and six analog input pins. The microcontroller contains 1kB of EEPROM, 2kB of RAM, and 32kB of ISP flash memory. The board supports serial communication using SPI, I2C, and UART. Arduino GPS based Clock's Circuit and Its working: The GPS clock's Arduino circuit and block diagram are displayed in Figures 1 and 2, respectively. The SIM28M GPS receiver module (GPS1), an Arduino Uno board (BOARD1), a GPS antenna (ANT.1), a 9V DC power supply adapter, and a few jumpers for header connections are also used in the circuit. Fig. 1: Block diagram of GPS clock using Arduino Fig. 2: Circuit diagram of GPS clock using Arduino   Here, we tried to extract the GPS time and date from a GPS-provided string ($GPRMC). There are roughly 70 characters in this string. The Arduino manages every procedure and receives GPS output signals, as illustrated in Fig. 2. Following receipt of the GPS output, the Arduino reads all of the strings and stores them in an array or string within the Arduino program. Once the necessary string has been stored, Arduino retrieves the time and date from the string and transmits it to LCD1 for display. Pins 5, 4, 3, and 2 of the Arduino are directly linked to data pins D4 through D7 of LCD1, accordingly. Pins 11 and 12 of the Arduino are linked to control pins EN and RS of LCD1, respectively. The Arduino board's Rx pin is directly connected to the Tx pin of the GPS receiver. Keep in mind that the GPS and Arduino ground pins need to be attached to one another. The GPS module in this instance operates at a baud rate of 9600bps. The Arduino sketch's class Serial.begin(9600) function is used to set the Arduino to operate at a baud rate of 9600bps. SIM28M GPS receiver module (GPS1) - GPS output: As seen in Fig. 3, the Arduino's serial monitor displays the GPS receiver output. Use the same connections as previously described, but take the ATmega328 microcontroller off of the Arduino board to obtain this GPS data. Then, to inspect the GPS output format, launch the Arduino IDE and choose the Serial Monitor option. Fig. 3: GPS output from the Arduino IDE's serial monitor You just need to use $GPRMC  String. out of the numerous strings displayed in this window. Here, the date appears after the ninth comma, while the time in 24-hour format follows the first comma. This $GPRMC string is processed by an Arduino software to extract the date and time, which is then shown on LCD1. Software: The Arduino Uno's internal memory contains a software program that controls circuit operation. The Arduino programming language is used to create the software (gpsindia.ino). The application is compiled and uploaded using the Arduino IDE 1.6.4. Choose the appropriate COM port in the Arduino IDE after connecting the Arduino board to the PC. Put the software or sketch together. Upload the sketch after choosing the appropriate board from the Arduino IDE's Tools‚�Board menu. Programming in this project does not require external header files. Code Arduino based  gps clock: #include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); char str[70]; char *test="$GPRMC"; int temp,i; void setup() { Serial.begin(9600); lcd.begin(16,2); lcd.setCursor(0,0); lcd.print(" GPS "); lcd.setCursor(0,1); lcd.print(" Digital Clock "); delay(300); } void loop() { serial1Event(); if (temp) { lcd.clear(); int str_lenth=i; int x=0,comma=0; String UTC_hour=""; String UTC_minut=""; String UTC_second=""; String UTC_date=""; String UTC_month=""; String UTC_year=""; String str1=""; while(x23) { Hour-=24; Date+=1; } int Minut=UTC_minutDec+30; if(Minut>59) { Minut-=60; Hour+=1; } // UTC_ind_zone_time lcd.clear(); lcd.print("Date: "); lcd.print(Date); lcd.print("/"); lcd.print(Month); lcd.print("/"); lcd.print("20"); lcd.print(Year); lcd.setCursor(0,1); lcd.print("Time: "); lcd.print(Hour); lcd.print(":"); lcd.print(Minut); lcd.print(":"); lcd.print(Second); // delay(100); temp=0; // j=0; i=0; x=0; str_lenth=0; // k=0; } // delay(1000); } void serial1Event() { while(1) { while (Serial.available()) //checking serial data from GPS { char inChar = (char)Serial.read(); str[i]= inChar; //store data from GPS into str[] i++; if (i < 7) { if(str[i-1] != test[i-1]) //checking for $GPRMC sentence { i=0; } } if(i>65) { temp=1; break; } } if(temp) break; } } Construction and testing: It is not necessary to construct the circuit on a PCB. Use external header jumpers to connect the Arduino Uno, LCD1, and SIM28M GPS receiver module to complete the circuit. Attach a 9V power supply adapter to the Arduino and SIM28M GPS receiver module, respectively. Connect the GPS1 module to ANT.1 as well. Locate the LCD1 unit in a convenient spot. In Fig. 4, the author's prototype is displayed. Download the Project file for above GPS based Clock built for LCD: Click download the SIM28M GPS receiver module GPS-Arduino-Clock-LCD.ino Converting timezone from Indian timezone to EDT timezone: To convert the timezone from Indian Standard Time (IST, UTC+5:30) to Eastern Daylight Time (EDT, UTC-4:00), you need to adjust the hour and minute calculations. Here's the simple change you need to make: Change the timezone offset Replace the following lines in the code: int Hour = UTC_hourDec + 5; if (Hour > 23) { Hour -= 24; Date += 1; } int Minut = UTC_minutDec + 30; if (Minut > 59) { Minut -= 60; Hour += 1; }With Below code lines: int Hour = UTC_hourDec - 4; // Adjust to EDT (UTC-4) if (Hour < 0) { Hour += 24; // Handle negative hour overflow Date -= 1; // Go back one day } int Minut = UTC_minutDec; // No adjustment needed for minutes Explanation: Subtract 4 hours from UTC to get EDT. If the hour becomes negative, wrap it around by adding 24 hours and decrement the date by 1. No additional minutes are added because EDT does not have a fractional hour offset like IST's 30 minutes. This will adjust the displayed time on the LCD to EDT. If you need further clarification, let me know! To display this whole out onto 7 segment follow any of the below Projects: Multiplexing 7 Segment displays with Arduino and Shift Registers Temperature Displayed on 4 Digit 7 segment using Arduino ### Garage Remote – Arduino ft. Android The GarageUino is my first Arduino project that has resulted in a product that I actually use. It’s a garage port controller that features a 20 by 4 character LCD display, four LEDs, a button, two connectors for position sensors and an USB connector. Oh! And of course an Ethernet port for Internet access. I’ll get back to that later. Read on to learn how I created the GarageUino, and how you can make one yourself.   Why? I get a lot of whys. Why do you have to control your garage door from your phone? Why do you need an 80 character LCD? What’s wrong with the wireless remote that came with the original opener? Why? And the answers are; I don’t. I don’t. Nothing. Because I can. Fabrication I started with the external connectors for the position sensors, the Ethernet connector and the USB port. I used a combination of a drill and a small saw blade for all the cutting, and a glue-gun to make things stick together. Next I made all the cut-outs in the front cover, for the LCD, LEDs and the button. I soldered the resistors directly to the LED pins to save space and to ease the wiring. I also soldered together the grounds so I only have to ground one wire as opposed to four. A little heat shrink tube later and it all looks pretty good. You can barely see the resistors. ### Glitchbox – audio sequencing music instrument Amanda Ghassaei has published on her website an interesting project: the Glitchbox. This instrument can do two different things: -it can be used as a standalone audio device, with the audio data stored in the arduino’s flash memory -it can also be used to sequence MIDI through a usb connection to your computer There is also a detailed  instructable with all the information needed.   For more detail: Glitchbox – audio sequencing music instrument ### Introducing Maker – Michael Shiloh “Teach me to make” as simple as it sounds is a simple yet powerful effort on wordpress by a maker from USA. Apart from being a true maker, Michael Shiloh is an absolutely delightful and an approachable person to talk to. His sense of purpose in his work was very much apparent in my short, yet interesting conversation with him. Here are some widely and less known things about the teacher, student and entrepreneur. Priya: What brought your interest in electronics? What is the very first project that you fondly remember completing till date? Michael: Ever since I remember, I have been taking things apart and putting them back. The important thing is to pay attention to details while doing that. Like, where the screw fits, what part goes where, what are the names of the parts etc. even if one is not able to know the full functioning one should be able to call the parts by the name and know where they fit and what they do. Growing up at a time with limited resources, left only one option of harvesting old electronic parts. I suggest every aspiring-maker to do that! (Gives a pause) As for the finishing part, I never finished a lot of projects, and I had a LOT of unfinished projects sitting around me in my room. But the important part was, that I caught hold of a lot of basics while making them. Not stopping, is important.   For more detail: Introducing Maker – Michael Shiloh ### Touché with Arduino Touché is a capacitive-sensing technology, developed by Walt Disney Research, which aims at providing touch and gesture sensitivity to a great variety of objects. From this research paper: The technique behind Touché is known as Swept Frequency Capacitive Sensing (SFCS): at a glance, by monitoring the capacitive response of an object over a specific range of frequencies (instead of a single one), it is possible to infer about its interaction with the outside world. In his blog, Dzl describes his personal approach toward the development of a system capable to emulate Touché’s behavior with Arduino. Currently, the project is still in a early stage, but improvements and further developments are expected soon. More information can be found here. [Via: Geekphysical blog and Dzl's blog] UPDATE 2012-06-02: you can now try out how to make it yourself following this instructable. ### Intersil’s half Watt 12bit ADC hits 500Msample/s Description The ISLA118P50 is a low-power, high-performance, 500MSPS analog-to-digital converter designed with Intersil's proprietary FemtoCharge™ technology on a standard CMOS process. The ISLA118P50 is part of a pin-compatible portfolio of 8, 10 and 12-bit A/Ds. This device is an upgrade of the KAD551XP-50 product family and is pin similar. The device utilizes two time-interleaved 250MSPS unit A/Ds to achieve the ultimate sample rate of 500MSPS. A single 500MHz conversion clock is presented to the converter, and all interleave clocking is managed internally. The proprietary Intersil Interleave Engine (I2E) performs automatic fine correction of offset, gain, and sample time skew mismatches between the unit A/Ds to optimize performance. No external interleaving algorithm is required. A serial peripheral interface (SPI) port allows for extensive configurability of the A/D. The SPI also controls the interleave correction circuitry, allowing the system to issue continuous calibration commands as well as configure many dynamic parameters. Digital output data is presented in selectable LVDS or CMOS formats. The ISLA118P50 is available in a 72-contact QFN package with an exposed paddle. Performance is specified over the full industrial temperature range (-40°C to +85°C). Applications Radar and Electronic/Signal Intelligence Broadband Communications High-Performance Data Acquisition Key Features 1.15GHz Analog Input Bandwidth 90fs Clock Jitter Automatic Fine Interleave Correction Calibration Multiple Chip Time Alignment Support via the Synchronous Clock Divider Reset Programmable Gain, Offset and Skew control Over-Range Indicator Clock Phase Selection Nap and Sleep Modes Two's Complement, Gray Code or Binary Data Format DDR LVDS-Compatible or LVCMOS Outputs Programmable Test Patterns and Internal Temperature Sensor Intersil has introduced 468mW 12bit 500Msample/s ADC. “It’s five times lower power than any competing 12bit 500Msample/s ADC,” claimed the firm. Called ISLA112P50, it is built using Intersil’s proprietary technology on a standard CMOS process, and has been developed for broadband communications, radar, lidar, and data acquisition systems. Inside are a pair of time-interleaved 250Msample/s ADCs, with technology to automatically correct for offset, gain and sample time skew mismatch between the pair. Analogue input bandwidth is 1.15GHz, SNR is 65.8dBFS, and SFDR is 80dBc for an input frequency of 190MHz. Digital output data is available in either LVDS or CMOS formats and a synchronous clock divider reset aids in time alignment of multiple devices. “Specified min/max digital interface timing with respect to the ADC input clock improves system reliability by allowing designers to close timing and select the most cost-efficient FPGA that meets the timing requirements,” said Intersil. External systems can issue continuous calibration commands and configure dynamic parameters through a serial peripheral interface.   For more read: Intersil’s half Watt 12bit ADC hits 500Msample/s ### Bit rate from ISM transceiver‘World’s highest’ The SX1239IMLTRT is a part of SX123x series Transceiver ICs. It has an operating temperature ranging from -40 °C to +85 °C and comes in QFN-24 package. The SX1233 is a highly integrated RF transceiver capable of operation over a wide frequency range, including the 433, 868 and 915 MHz license-free ISM (Industry Scientific and Medical) frequency bands. Its highly integrated architecture allows for a minimum of external components while maintaining maximum design flexibility. Features: Programmable bit rate up to 600kbps (FSK) High Sensitivity: down to -120 dBm at 1.2 kbps High Selectivity: 16-tap FIR Channel Filter Bullet-proof front end: IIP3 = -18 dBm, IIP2 = +35 dBm, 80 dB Blocking Immunity, no Image Frequency response Low current: Rx = 16 mA, 100nA register retention Programmable Pout: -18 to +17 dBm in 1dB steps Constant RF performance over voltage range of chip Fully integrated synthesizer with a resolution of 61 Hz FSK, GFSK, MSK, GMSK and OOK modulations Built-in Bit Synchronizer performing Clock Recovery Incoming Sync Word Recognition 115 dB+ Dynamic Range RSSI Automatic RF Sense with ultra-fast AFC Packet engine with CRC, AES-128 encryption and 66-byte FIFO Built-in temperature sensor and Low Battery indicator Applications: Automated Meter Reading Wireless Sensor Networks Home and Building Automation Wireless Alarm and Security Systems Industrial Monitoring and Control   Semtech has released an ISM transceiver with 600kbit/s bit rate and 137dB link budget, claiming the “world’s highest bit rate and world-class link budget”. Dubbed SX1233, it “provides the bit rate needed to accommodate features like remote imaging and video for the next wave of applications, while maintaining a link budget that is 10dB more than competing devices, along with high immunity to interfering signals”, said marketing director Marc Pegulu. The chip has a zero-IF architecture and needs no SAW filter. VCO tank, PLL loop filter and an RF switch are all included. Frequency range is 290MHz to 1.02GHz and the device is certified for worldwide regulations, including European (ETSI EN 300-220-1), North American (FCC part 15), and Korean and Japanese ARIB regulatory standards. Receiver sensitivity is down to -120dBm at 1.2kbit/s with AFC for receive automatic center frequency alignment. IIP3 is from -18 to 8dBm, IIP2 is +35dBm, and blocking immunity is 80dB Transmit output power is programmable in 1dB steps from -20 to +17dBm.   For more read: bit rate from ISM transceiver‘World’s highest’ ### Digital light chip draws sensor 0.65µA Description The MAX44007 ambient light sensor features an I²C digital output that is ideal for a number of portable applications such as smartphones, notebooks, and industrial sensors. At less than 1µA operating current, it is the lowest power ambient light sensor in the industry and features an ultra-wide 22-bit dynamic range from 0.025 lux to 104,448 lux. Low-light operation allows easy operation in dark glass applications. The on-chip photodiode's spectral response is optimized to mimic the human eye's perception of ambient light and incorporates IR and UV blocking capability. The adaptive gain block automatically selects the correct lux range to optimize the counts/lux. The IC includes two I²C slave address options: 1011 010x and 1011 011x. The IC is designed to operate from a 1.7V to 3.6V supply voltage range and consumes only 0.65µA in full operation. It is available in a small, 2mm x 2mm x 0.6mm UTDFN-Opto package. Key Features Wide 0.025 Lux to 104,448 Lux Range Small, 2mm x 2mm x 0.6mm UTDFN-Opto VCC = 1.7V to 3.6V ICC = 0.65µA Operating Current -40°C to +85°C Temperature Range Improved Sensitivity Behind Dark Glass Applications/Uses Cellular Phones/Smartphones Digital Lighting Management Portable Devices Security Systems Tablet PCs/Notebook Computers TVs/Projectors/Displays   Maxim has introduced a digital ambient light sensor with a wide sensing range and compensation for fluorescent lighting. Operating current is 0.65µA, claimed to be 100x less than the nearest competitor. Inside the 2x2x0.6mm MAX44007, as it is called, are two photodiodes, a 16bit ADC, an adaptive gain block, and an I2C interface. A package-level optical filter prevents ultraviolet and infrared from reaching the photodiode, and optical response is designed to match the spectral response of the human eye. The second photodiode, sensitive primarily to infra-red, is then used to match fluorescent and incandescent light response from the part. “Replicating the optical response of the human eye with electronic components is difficult,” said the firm. “Traditional light sensors measure the amount of light in an environment regardless of wavelength. These designs are unduly influenced by ultraviolet and infrared light, which are not perceptible by the human eye.” Mounting the sensor behind tinted glass can also cause problems. “Once the designer knows the response of the black glass, it can be factored into the light sensor’s measurement,” said Maxim. The adaptive-gain block automatically selects the gain range.   For more read: Digital light chip draws sensor 0.65µA ### Plessey’s no-contact heart sensor costs less Description Plessey Semiconductors Electric Potential Integrated Circuit (EPIC) product line targets a range of applications. The PS25451 is an ultra high impedance noncontact solid state electric potential sensor. It can be used to detect field disturbance due to the movement of a near-by object. This functionality can be employed in a range of applications including security motion sensors and non-contact electric switches for lighting, door opening, toys etc The device uses active feedback techniques to both lower the effective input capacitance of the sensing element (Cin) and boost the input resistance (Rin). These techniques are used to realize a sensor with a frequency response suitable for remote sensing applications. Features Ultra high effective input resistance, typically 20G. Effective input capacitance as low as 15pF. Upper 3dB point typically 10kHz. Operates with bipolar power supply from ±2.4V to ±5.5V. Sensors supplied in a custom package with exposed pins for surface mount assembly.   Plessey Semiconductors has said that its EPIC sensor will now sell for less than a dollar in high volume consumer applications. The company has cost-reduced  it electrometer sensing technology with a new electrode design to replace the expensive titanium dioxide electrodes currently used for medical applications. “The new electrode design for the PS25451 is formed on the copper track of the circuit board that is then covered by the normal protective resist,” said Dr. Keith Strickland, Plessey’s technology director. The PS25451 device is a non-contact, solid state electric potential sensor that can be used for proximity switching of lighting, gesture-based remote control of interactive toys  and presence detection for security/alarm systems. The EPIC sensor technology works by measuring tiny changes in an electric field in a similar way to a magnetometer detecting changes in a magnetic field even at a distance and through clothing. A feature of the technique is that it can be used for security motion sensors and non-contact electrical switches as well as medical applications detecting heart beats, nerve and muscle activity either by dry contact (i.e. no gels required) or contactless.   For more read: Plessey’s no-contact heart sensor costs less ### Wear – A wearable personal assistive hearing device Wear is an affordable, attractive, lightweight wearable assistive directional microphone designed to improve quality of hearing. Wear is an assistive device designed to improve quality of life for people with hearing loss.   Wear is a high fidelity directional analog microphone that is significantly lower in price than existing hearing aids.  This microphone can be used with any pair of headphones, has a volume control, is rechargeable, and comfortable to wear. We've been developing this technology in our Brooklyn Studio for the past two years.  Wear incorporates a low profile micro-miniature, patent pending, directional microphone technology that creates a 6 foot zone which captures, focuses and clarifies conversations in noisy environments, while reducing the effects of extraneous noise. Latency (delay) imposed by digital signal processing is detrimental to the hearing impaired due to lip sync (lip reading) difficulties. For that reason we used an analog circuit design with no measurable latency. We incorporate a technology using a beam-forming array of 10 microphones that create a circular 6 foot zone. Acoustic waves generated in that zone (coherent) reach the microphones at the same time so they are amplified. Sounds from further away (non coherent) reach the microphones at different times are not amplified. This creates a near field to far field signal level difference of 10 to 11 db. That 10 db level difference improves the intelligibility of near field conversation. Our research over the past two years has allowed us to reduce the size of beam forming arrays to unprecedented small form factors in a lightweight package using low power. All of this is done without digital signal processing while maintaining hi fidelity sound quality so that the directional microphone can also be used for general recording applications as well as an assistive hearing appliance. Wear is not a replacement for a hearing aid.  Wear is designed to be used when an individual is interested in having a quality conversation in very noisy environments like family get togethers, restaurants or meetings. Wear can also be used as a commentators microphone eliminating the need to hold a microphone during an interview and other high quality audio recording applications.   For more detail: Wear – A wearable personal assistive hearing device ### Google Docs and the Arduino Yún Introduction This is the second in a series of tutorials examining various uses of the Arduino Yún. In this article we’ll examine how your Arduino Yún can send data that it captures from the analogue and digital inputs and a real-time clock IC to an online Google Docs spreadsheet. Doing so gives you a neat and inexpensive method of capturing data in real-time and having the ability to analyse the data from almost anywhere, and export it with very little effort. Getting Started If you haven’t already done so, ensure your Arduino Yún can connect to your network via WiFi or cable – and get a Temboo account (we run through this here). And you need (at the time of writing) IDE version 1.5.4 which can be downloaded from the Arduino website. Finally, you will need a Google account, so if you don’t have one – sign up here Step 1: Testing the Arduino Yún-Google Docs connection In this first example we’ll run through the sketch provided by Temboo so you can confirm everything works as it should. First of all, create a spreadsheet in Google Docs. Call it “ArduinoData” and label the first two columns as “time” and “sensor”, as shown in the screen shot above. Always label the required columns. You can call them whatever you need. For new Google users, the URL shown in my example will be different to yours. Next, copy the following sketch to the IDE: --------------------------------------------------------------------------------------------------------------- /* SendDataToGoogleSpreadsheet Demonstrates appending a row of data to a Google spreadsheet from the Arduino Yun using the Temboo Arduino Yun SDK. This example code is in the public domain. */ #include #include #include "TembooAccount.h" // contains Temboo account information /*** SUBSTITUTE YOUR VALUES BELOW: ***/ // Note that for additional security and reusability, you could // use #define statements to specify these values in a .h file. const String GOOGLE_USERNAME = "your-google-username"; const String GOOGLE_PASSWORD = "your-google-password"; // the title of the spreadsheet you want to send data to // (Note that this must actually be the title of a Google spreadsheet // that exists in your Google Drive/Docs account, and is configured // as described above.) const String SPREADSHEET_TITLE = "your-spreadsheet-title"; const unsigned long RUN_INTERVAL_MILLIS = 60000; // how often to run the Choreo (in milliseconds) // the last time we ran the Choreo // (initialized to 60 seconds ago so the // Choreo is run immediately when we start up) unsigned long lastRun = (unsigned long)-60000; void setup() { // for debugging, wait until a serial console is connected Serial.begin(9600); delay(4000); while(!Serial); Serial.print("Initializing the bridge..."); Bridge.begin(); Serial.println("Done"); } void loop() { // get the number of milliseconds this sketch has been running unsigned long now = millis(); // run again if it's been 60 seconds since we last ran if (now - lastRun >= RUN_INTERVAL_MILLIS) { // remember 'now' as the last time we ran the choreo lastRun = now; Serial.println("Getting sensor value..."); // get the value we want to append to our spreadsheet unsigned long sensorValue = getSensorValue(); Serial.println("Appending value to spreadsheet..."); // we need a Process object to send a Choreo request to Temboo TembooChoreo AppendRowChoreo; // invoke the Temboo client // NOTE that the client must be reinvoked and repopulated with // appropriate arguments each time its run() method is called. AppendRowChoreo.begin(); // set Temboo account credentials AppendRowChoreo.setAccountName(TEMBOO_ACCOUNT); AppendRowChoreo.setAppKeyName(TEMBOO_APP_KEY_NAME); AppendRowChoreo.setAppKey(TEMBOO_APP_KEY); // identify the Temboo Library choreo to run (Google > Spreadsheets > AppendRow) AppendRowChoreo.setChoreo("/Library/Google/Spreadsheets/AppendRow"); // set the required Choreo inputs // see https://www.temboo.com/library/Library/Google/Spr... // for complete details about the inputs for this Choreo // your Google username (usually your email address) AppendRowChoreo.addInput("Username", GOOGLE_USERNAME); // your Google account password AppendRowChoreo.addInput("Password", GOOGLE_PASSWORD); // the title of the spreadsheet you want to append to AppendRowChoreo.addInput("SpreadsheetTitle", SPREADSHEET_TITLE); // convert the time and sensor values to a comma separated string String rowData(now); rowData += ","; rowData += sensorValue; // add the RowData input item AppendRowChoreo.addInput("RowData", rowData); // run the Choreo and wait for the results // The return code (returnCode) will indicate success or failure unsigned int returnCode = AppendRowChoreo.run(); // return code of zero (0) means success if (returnCode == 0) { Serial.println("Success! Appended " + rowData); Serial.println(""); } else { // return code of anything other than zero means failure // read and display any error messages while (AppendRowChoreo.available()) { char c = AppendRowChoreo.read(); Serial.print(c); } } AppendRowChoreo.close(); } } // this function simulates reading the value of a sensor unsigned long getSensorValue() { return analogRead(A0); }   Now look for the following two lines in the sketch: const String GOOGLE_USERNAME = "your-google-username"; const String GOOGLE_PASSWORD = "your-google-password"; This is where you put your Google account username and password. For example, if your Google account is “CI5@gmail.com” and password “RS2000Escort” the two lines will be: const String GOOGLE_USERNAME = "CI5@gmail.com"; const String GOOGLE_PASSWORD = "RS2000Escort"; Next, you need to insert the spreadsheet name in the sketch. Look for the following line: const String SPREADSHEET_TITLE = "your-spreadsheet-title"; and change your-spreadsheet-title to ArduinoData. Finally, create your header file by copying the the header file data from here (after logging to Temboo) into a text file and saving it with the name TembooAccount.h in the same folder as your sketch from above. You know this has been successful when opening the sketch, as you will see the header file in a second tab, for example in the second image above. Finally, save and upload your sketch to the Arduino Yún. After a moment or two it will send values to the spreadsheet, and repeat this every sixty seconds – for example in the third image above. If your Yún is connected via USB you can also watch the status via the serial monitor. One really super-cool and convenient feature of using Google Docs is that you can access it from almost anywhere. Desktop, tablet, mobile… and it updates in real-time. So with your Yún you can capture data and view it from anywhere you can access the Internet. Now let’s do just that in the next step...   For more detail: Google Docs and the Arduino Yún ### GPS Distance Calculator (for golf) This device was created for a final project for a class by a group of students at Indiana University. As sport fans, we thought it would be really useful to create a tool that would measure distance between two points. This could be used for many different sports, but we focused on golf. A handheld unit that could measure distance in yards from where a ball is hit and where it ends up is really what we were motivated to construct. Distance markers on golf courses are not always accurate and it is very important to know correct yardages to play well. This system could be used to keep track of the average distance for a certain club or to check the accuracy of yardage markers at the course.It works by recording latitude and longitude points of where the ball was hit from, and then calculate the distance from that location to wherever the ball lands. The materials needed for this project are as follows : Arduino Uno Ultimate GPS logger shield LCD screen w/ buttons shield Barrel jack to 9v battery converter and 9v battery Enclosure Soldering Iron Lead-free Solder Solder sucker Protective eyewear Small amount of wire Exacto knife Additionally you will need to install the Arduino IDE and a couple of libraries for it. Tiny GPS++ Menu Backend Also you can use: Our Code Step 1: Solder Headers The Ultimate GPS Logger and LCD Screen w/ Buttons each come with headers to be soldered on to allow them to be stacked onto your Arduino. Interestingly enough, the GPS shield came with male headers, and the LCD shield came with female headers. For this project, the LCD screen should have the male pins and the GPS should have female pins. This may have been a mistake by the company that sent us the LCD screen, as it doesn't make much sense to put something on top of the screen, but it worked out to our advantage. Warning: Soldering can be dangerous, and all precautions should be taken. Use lead-free solder to be extra safe, wear protective eye-wear, and do not inhale any of the fumes! This is melting / burning metal, and it is not something to take lightly if you are not experienced. When soldering the GPS headers, what we did was let it balance on the female pins upside down, and soldered each pin. We found that the best technique was to heat up the solder at the top of the pin, and use the soldering iron to keep the metal liquid and let it slide down the pin instead of soldering right at the board. As you can see in the picture, the board can take quite a bit of damage from touching it with the iron. To solder the male pins to the LCD screen, it is easiest to plug in the headers and set the screen on top of them and then solder it. Step 2: Test each shield The next thing to do is make sure that all of the soldering you just did actually works by testing each shield individually with code provided in the libraries that you have downloaded. Any of the sample files can be used to verify your work. When testing the GPS shield, you need to make sure that the device has a satellite fix, this can be observed by the flashing red light on the shield. If there is no fix it will flash red about every other second, and once it gets a connection, it will flash red once every 15 seconds. Testing the LCD screen should be very straightforward, simply plug it into the Arduino and upload a provided file and it should work. Hint: Make sure the switch on the GPS shield is switched to software serial, and if there are still issues try switching it to direct and back to soft serial. The switch on this shield seemed to not serve its purpose, and sometimes seemed to cause issues.   For more detail: GPS Distance Calculator (for golf) ### Digispark Pro – tiny, Arduino ready, mobile & usb dev board! The tiny Arduino IDE ready, usb and mobile dev board and ecosystem - cheap enough to leave in any project! Wi-fi, BLE, and 25+ shields! Missed out? Pre-Orders! Did you miss out on this Kickstarter - Don't Worry! You can preorder a Digispark Pro at http://digistump.com/getpro Thank You! Thank you to our amazing backers! This project blew past our goals and hopes - we can't wait to get the Digispark Pros in your hands, watch the Project Updates for frequent updates on the status of the project. Thank you! Update: The Robots Are Here! Get a robot car kit like the one in the video - starting at just $50 with everything you need to make an app or web controlled robot - check out the rewards! Update: Stretch goals are here! Shield descriptions, and more! Stretch Goals: ACHIEVED!!! - $75,000 - More shields and PCBs - we'll add the LiPo shield and at least one other - we'll also make available super cheap just the PCB for each kit.  ACHIEVED!!! - $100,000 - Cheap LEDs and Special Edition! - We'll make the Kickstarter Digispark Pros with a special Kickstarter Edition silkscreen with a URL that goes to a list of all the backers. We'll make both RGB LED shields $1 each for backers only.  $150,000 - You tell us?! Serial over USB debugging, USB programmable, 14 i/o, SPI, I2C, UART, USB Device Emulation, Mobile Development Ready, Optional BT, BLE, Mesh, and Wi-Fi. The super small, dirt cheap, always open source, Arduino compatible, USB (and Mobile and Wireless!) development (and production) platform, and follow-up to the original Digispark. Easier to use, more pins, more program space, more features, more reliable - supporting the entire existing Digispark ecosystem of 25+ shields and adding Wi-Fi, Bluetooth, BLE shields and more! Ready for all your projects - including mobile hardware development! All still super affordable! The Digispark Pro Ecosystem is the cheapest, Arduino compatible development platform for Mobile and Wireless hardware development. In August 2012 we launched the Digispark here on Kickstarter - we hoped to share with our fellow makers a cheap, open source, Arduino compatible that was easy to use and easy to program. The Digispark has been a hit - it is used by beginners and electrical engineers alike - from education to production to hobby use - and cloned and improved upon by some of the biggest names in open source hardware. The Digispark ecosystem now boasts an active forum, wiki, and 25+ shields. In the year and half that has passed since the launch of the Digispark, I've listened closely to feedback, complaints, bug reports, and unmet needs in the Arduino and Digispark communities. The result of which is the Digispark Pro! The Digispark and Digispark Pro Ecosystem! The Digispark Pro is designed to compliment the Digispark - it's the middle child between the Digispark and the full blown Arduino. It is even easier to use than the Digispark, even more compatible with standard Arduino examples, and packed full of i/o, more program space, and more features! With new shields and libraries the Digispark Pro is also the most affordable mobile hardware development platform! And it is still just as small as a Digispark, and just as affordable - because electronics should be accessible to all! Compatible with Arduino IDE 1.5 (OSX/Win/Linux) Fully signed drivers and executable for easy installation USB programming, USB device emulation, USB-CDC virtual serial port emulation 16 Mhz AVR MCU - using a true 16Mhz precision crystal 16KB Flash Memory (14.5K+ after bootloader) Serial over USB debugging and communication! 14 i/o Pins (2 shared with USB) I2C, true SPI, UART, LIN, and USI ADC on 10 pins 3 PWM Channels (which can be assigned to a selection of pins) Power via USB, or External Source - 5v or 6-16v (automatic selection) On-board button that can be used as a reset, program, or user button - or can be disabled to use that pin as general i/o - without changing the bootloader On-board 500ma 5V regulator Power LED and Test/Status LED (on Pin 1) User accessible solder jumpers to disable LEDs, and other features for lower power consumption Two mounting holes. Breadboard compatible pin out/spacing (the three side header pins are only for legacy shield support).   For more detail: Digispark Pro – tiny, Arduino ready, mobile & usb dev board! ### Voice Activated Arduino (Bluetooth + Android) Control your Arduino with voice commands using an Android smartphone! Before we make a voice activated home automation system, we must first learn the basic principles of the experiment. This guide will let you command the Arduino using your Android smartphone and a HC-05 Bluetooth module. The designer of the app did not include a sample code. I looked for alternatives in Google's PlayStore but none was as good as the app that I've found. Luckily, I was able to figure it out although it took me a while to program it. Sorry IOS users, this app isn't available in Apple's app store :/ How Does It Work? Have you ever encountered Android's speech recognition? Yes android has one and you can use it to control your Arduino, via Bluetooth. The App works by pressing the mic button, then the it will wait for you to say a command. The app will then display the word's that you've stated and will send data strings for the Arduino to process. Home Automation System (on July 4, 2014): A month from now/ I'll be releasing a highly sophisticated home automation + security system. It's my biggest project ever! Our current agenda is to program a better smartphone app that work's like Siri (talks back) and sends strings (data types) to the Arduino via bluetooth. If you want to take a sneak peek of the project and it's concept, kindly skip to the last step. The prototype that I'm working on now is composed of a network of wireless switch boxes that connects to a main control panel via WiFi/ Bluetooth. Step 1: Parts & Materials If your having trouble in finding them, I'm sure RadioShack has all of them. If you want to buy online try searching on Amazon or DealExtreme. Thing that you'll need: - 5 LED Indicators (the color of your choice) - Arduino UNO (a clone works fine) - HC-05 Serial Bluetooth Module - Solderless Breadboard - Jumper Cables Step 2: Assemble The Mini Bluetooth Shield My JY-MCU (DX Bluetooth Module) is still installed on my robots, what I have right now is the bare HC-05 module. As we all know, the HC-05 doesn't come with a PCB. Soldering wires, directly to the metal conductors, isn't a good idea since the conductors could chip off anytime. As a solution, you can cut a fraction of perf-board then mount the HC-05 on it. I mistakenly connected my LED indicator on a blank (N/A) pin so mine doesn't work. Too lazy to assemble a Bluetooth shield? DX.com has a ready made version (click here). I've used the DX Bluetooth module on my robots, it's tested and it's 100% ok! You can visit Bluetooth related projects (Bluetooth Sumobot and Bluetooth FPV Rover) as reference. Step 3: Connect The Bluetooth Module Grab some jumper cables and power the Bluetooth module with 3.3 volts. Remember, the bare HC-05 run on 3.3v and not on 5v. On the other hand, the JY-MCU has a built in regulator, it can run on a 5v line. Now connect the RX (pin #0) of the Arduino to the TX pin of the Bluetooth module and the TX (pin #1) of the Arduino to the RX pin of the Bluetooth module. (refer to the image above) Step 4: Connect The LEDs Connect the positive leads of each LED on pins # 2,3,4,5,6 of the Arduino. The negative leads of each LED goes to the negative rail of the breadboard. The negative rail of the breadboard goes to the Arduino's ground.   For more detail: Voice Activated Arduino (Bluetooth + Android) ### LTC4121/LTC4121- 4.2 – 40V 400mA Synchronous Step-Down Battery Charger LTC4121/LTC4121-4.2 - 40V 400mA Synchronous Step-Down Battery Charger Features Wide Input Voltage Range: 4.4V to 40V Adjustable Float Voltage (3.5V to 18V): LTC4121 Temperature Compensated Input Voltage Regulation for Maximum Power Point Tracking (MPPT) Fixed 4.2V Float Voltage Option: LTC4121-4.2 High Efficiency: Up to 95% 50mA to 400mA Programmable Charge Current ±1% Feedback Voltage Accuracy Programmable 5% Accurate Charge Current Thermally Enhanced, Low Profile (0.75mm) 16-Lead (3mm × 3mm) QFN Package   For more detail: LTC4121 LTC4121 ### Arduino Compatible apc220 Wireless rf Module with Graphics LCD 16 node mesh, up to 1000m between nodes, sample two analog voltages per node, link any node to any other node, display data on any node with either graphics or text display, turn on relays based on data at any node, fault tolerant with data going via multiple paths. Arduino Compatible apc220 Wireless rf Module with Graphics LCD: Step 1: Wireless mesh with graphics LCD This Instructable merges two existing Instructables - one using 20x4 text displays http://www.instructables.com/id/Simple-Arduino-Wir... and some great work by Bodmer on graphics and text modes for the ILI9341 http://www.instructables.com/id/Arduino-serial-UAR... A wireless mesh exchanges information between all nodes, with a common clock that is also exchanged, so that all nodes are synchronised and each node transmits in its own time slot. The mesh is tolerant of faults, including nodes not functioning, and messages will find their way around the network via multiple paths. This network keeps things simple - each node can sense two analog values, and output two analog values. Outputs can be linked to any input from another node. Parts are an Arduino UNO clone ($5), ILI9341 display ($5), APC220 ($20) PCB ($3) and sundry components. The APC220 module is expensive compared to other wireless options, but it has a long range (1000m) and is reliable through walls and trees. Step 2: Schematic Resistors are needed to drop the voltage from 5V to 3.3V. Analog inputs A0 and A1 have optional capacitors to smooth any inputs that might come in on long leads, such as a temperature sensor. The board is powered from an external supply - 7V on Vin minimises heat losses but ensures that the 5V is stable on the Arduino. Library parts for the Arduino layout are available from Sparkfun. Step 3: PCB layout PCB layout is shown for Eagle. This board is small enough that it can be made with the free version of Eagle. I get boards made by Seeed Studios https://www.seeedstudio.com/service/index.php?r=pcb The autorouter on eagle works fine for laying out the board. Step 4: Text display With a change to one line of code it is possible to either display the text the mesh is using to talk amongst itself, or to display a value from any node as a graphical display. Having both options does fill the arduino memory to 98% (with about half of that as fonts), but it makes it easier to work with the code as only one program is needed. Step 5: Arduino code Program is attached. See Bodmer's instructables (search Instructables Bodmer on Google) for the display driver and font files. This line of code changes between text and graphic mode boolean displayMeter = true; // false displays text from the mesh, true displays just the meter There are also a node number which needs to be 0 to 15 for each node in the mesh. There is also a font include file that determines which fonts are loaded - this is in the package from Bodmer's instructable, and to fit in the memory only font 2 and font 4 are used. Please contact me in the comments section if you are having trouble fitting it all into the UNO as it is likely the fonts are the problem. For the solar watt display on the first page, this uses a kilowatt meter with a pulse output, and an arduino to measure the time between pulses and convert to an analog voltage, which is then fed into the mesh. There are enough spare pins on the Arudino to turn on a couple of relays and control things based on values that might be measured many kilometers away   ### How to get sensor data from a remote Arduino via Wireless Lora Protocol This is an example to show how to get sensor data from a remote Arduino via Wireless Lora Protocol. The exampels requries below hardwares:   1) Client Side: Arduino + Lora Shield (868Mhz) + DS18B20 (Temperature Sensor). 2) Server Side: Arduino + Lora Shield (868Mhz) + Yun Shield + USB flash. make sure the USB flash has this file datalog.csv in the data directory of root. Requrie below software: Radiohead library from: http://www.airspayce.com/mikem/arduino/RadioHead/... Client side will get the temperature and keep sending out to the server via Lora wireless. Server side will listin on the Lora wireless frequency, once it get the data from Client side, it will turn on the LED and log the sensor data to a USB flash. Follow the next operations to complete this project. Step 1: Preparations In this project,you need the things below: Arduino board x 2 (We use the MEGA2560 here) Dragino Lora Shield v1.3 x 2 (We use 868MHZ here) Yun Shield v1.1.6 x 1 USB flash x 1 DS18B20 x 1 (Temperature sensor) Bread board x 1 868MHZ antenna x 2 USB cable x 2 LED x 2 4.7k resistance x 1 Some jump wires Power supply Note: About the Yun Shiled,we must use the Yun Shield v1.1.6/Yun Shield v2.2.4 or higher version Step 2: Connections In this step,we need to assemble the client and the server separately.Follow above pictures,and make sure you got everything ready. NOTE: The data wire is plugged into port 3 on the Arduino (Client) The LED is on the GPIO 4 (Server) Put the ant on the boards Create a directory named “data” in the USB flash root and create a file data.csv in this directory. Step 3: Codes Power them by Power supply,and connect them to the computer via USB cable. Client Open the IDE(Over here,we use the version 1.6.8),choose the correct port and correct board for your client.Upload the client sktech to the arduino board,you can find the code here: https://github.com/dragino/Lora/blob/master/Lora%20Shield/Examples/Lora_Temperature_RadioHead/get_temp_data_and_sent_to_the_Lora_Server/get_temp_data_and_sent_to_the_Lora_Server.ino Server Upload the server sktech to the arduino as above,youcan find the code here: https://github.com/dragino/Lora/blob/master/Lora%20Shield/Examples/Lora_Temperature_RadioHead/get_data_from_lora_node_and_store_in_USB/get_data_from_lora_node_and_store_in_USB.ino Step 4: Running Result After the last step,you can see the LED on the server will flash once per second.Open the Serial Monitor of the client,you can see the temperature info obtained through the sensor and the communication between client and server.Open the Serial Monitor of the server,you can also get the server status. Read more: How to get sensor data from a remote Arduino via Wireless Lora Protocol ### ICS501 simple frequency multiplier Today I made a high frequency multiplier using a single component: the ICS501 PLL clock multiplier IC. This chip provides 2x, 5x, 8x (and more) clock multiplication using an internal phased-lock loop (PLL). At less than a dollar on eBay, $1.55 on mouser, and $0.67 on Digikey, they don’t break the bank and I’m glad I have a few in my junk box! I have a 10MHz frequency standard which I want to use to measure some 1Hz (1pps) pulses with higher precision, so my general idea is to use a frequency multiplier circuit to increase the frequency (to 80 MHz) and use this to run a counter IC to measure the number of clock pulses between the PPS pulses. I spent a lot of time working with the CD4046 micro-power phased lock loop IC which has a phase comparator and a voltage controlled oscillator built in. It seemed this chip was the go-to for many years, but it requires external circuitry (ICs in my case) to divide by N and is intended to adjust a VCO output voltage based on the phase difference of two different inputs. Although I made some great progress using this chip, I found a few SMT ICS501 ICs in my junk box and decided to give them a try. I was impressed how easy it was to use! I just fed it 5V and my clock signal, and it output 8x my clock signal! Since I don’t have my 10MHz reference frequency running at the moment, I tested it with a 1MHz canned oscillator. It worked great, and was so easy! I’ll definitely be using this chip to multiply-up crystal oscillator frequencies to improve the precision of frequency counting. The pin connections are straightforward: +5V and GND to pins 2 and 3, no connection for pins 7 and 8, clock goes in 1 and comes out on 5. Pins 4 and 6 are both set to +5V to yield a x8 multiplier, according to the chart. All of this is in the datasheet for the chip. The IC I had on hand was SOIC. I don’t think they make this IC in DIP. Luckily, I have breadboardable breakout boards on hand. These breakout boards are identical to those sold on dipmicro but I got mine from ebay and they’re all over ebay! Read more: ICS501 simple frequency multiplier ### LIN Protocol — One Wire Protocol for Automotive Applications With the host of protocols available in electronics interfaces, choosing a protocol is a hard job. Some protocols are designed for long distance and reliable communication applications such as RS-485. Others are used for low cost and short range communication such as I2C, and so on. The backbone car’s network is the Controller Area Network (CAN). CAN is reliable and adopted widely in automotive industry but it’s expensive to embed CAN interface in all aspects of the car’s sub-system. As a cheap alternative, today’s protocol LIN, is designed for low cost and multi-nodes automotive networks. LIN can be used to communicate with non-critical sub-systems such as: door-lock driver and window motors. Moreover, LIN is implemented to be a one wire interface. LIN stands for Local Interconnect Network. According to the official LIN manual, the main properties of the LIN bus are: single master with multiple slaves concept. low cost silicon implementation based on common UART/SCI interface hardware, an equivalent in software, or as pure state machine. self synchronization without a quartz or ceramics resonator in the slave nodes. deterministic signal transmission with signal propagation time computable in advance low cost single-wire implementation. speed up to 20 kbit/s. signal based application interaction. The LIN topology consists of one master and several slaves. The master provides the header which consists of a break and sync pattern (0x55) followed by an identifier. The 0x55 Synch byte helps the slaves to be synchronized with the master clock. All messages are initiated by the master with unique ID; A slave will reply according to a given message identifier. The identifier specifies the frame type which can be one of the following: Unconditional frame Event triggered frame Sporadic frame Diagnostic frames User-defined frames The nodes are typically microcontrollers, but as LIN is designed for automotive applications in the first place, some specialized transceivers can be added to the nodes such as Melexis MLX80030 which is basically a level shifter with some add-ons like low drop voltage regulator with some protection features since the available supply voltage in cars are mostly a spiky 12v. Note: From the schematic above you may see that the MLX80031 has split the one wire (LIN BUS) to RX and TX for the microcontroller. When it comes to software development, there is a standard API for LIN bus (slave and master) implemented in C language. To know more about LIN protocol please refer to Hackaday article and to the official LIN manual. Source: LIN Protocol — One Wire Protocol for Automotive Applications ### Arduino with ESP8266 - Reading Data from Internet The ESP8266-01 has been a great module to quench all our thirsts for IOT projects. Since its release, it has developed a strong community and evolved into an easy to use, cheap and powerful Wi-Fi module. Another open-source platform which is much more popular is the Arduino, it already has tons of projects built around it. Combining these two platforms will open up doors for many innovative projects, so in this tutorial we will learn how to interface the ESP8266-01 module with Arduino. This way we will be able to send or receive data between the Arduino and Internet. For the purpose of this tutorial we will read the time, date, temperature and humidity from the internet using an API with the ESP8266-01. Then send these values to an Arduino board and display them on the 16*2 LCD screen. Sounds cool right!! So let’s get started. Materials Required: Arduino Board (Any version) ESP8266-01 FTDI programmer board with 3.3V option 16x2 LCD Potentiometer Push button Connecting wires Breadboard How things work? Before we dive in, it is important to know how actually this thing is going to work. Basically, we have to start with the ESP8266-01 module. We will be using the Arduino IDE to program the ESP8266 and the code will be written to use an API to read a JSON file through http request. Then we will phrase this JSON file to extract only the required information from the complete JSON file. Once the information is phrased we will print it out using the serial communication. These serial lines will then be connected to the Arduino, so that the Arduino could read the information sent from ESP8266. Once the information is read and processed we will display it on the LCD screen. It’s okay, if you have not completely understood this, for we will be learning the same in the rest of this tutorial. Programming the ESP8266-01: This tutorial assumes that you have some experience with the ESP8266 module. If not then it is recommended to read through the following three tutorials to understand completely about it. Getting started with ESP8266-01 Programming ESP8266-01 using AT commands Programming the ESP8266-01 using Arduino IDE and Flashing its memory You can also check our all ESP8266 projects here. Here we are going to program the ESP8266-01 module using the Arduino IDE. For hardware we are using the FTDI board with 3.3V to program ESP8266, since it will make the hardware much simple. The circuit diagram for connecting your ESP8266 with FTDI board is shown below. 1. The ESP8266-01 is only 3.3V tolerant, do not use 5V. So set FTDI only in 3.3V mode. 2. GPIO_0 must be grounded for programming mode 3. The reset pin should be connected through a button to the ground pin. This button should be pressed just before uploading the code. Each time the button is pressed the blue LED on the ESP8266-01 module will go high to indicate that the module is reset. Once the connections are done open the Arduino IDE and check if you are able to upload a sample program successfully. If you are not sure how to use the Arduino IDE to upload program to ESP8266 then follow the Programming ESP8266 with Arduino  to learn it. At this point I assume that you have successfully uploaded the blink program. Now let’s get into the actual program where we will get data from the internet and send it to the Arduino. The complete program is given at the end of this page further below I am explaining them as small snippets. The program also requires the Arduino JSON library to compile, so if you have not added the library to your Arduino IDE already, then add it by downloading from the Arduino JSON library from Github. The ESP8266 has to connect with the internet to get the data about date, time, temperature and humidity. So you have to allow it to connect to your Wi-Fi by proving the SSID and Password in the below lines const char* ssid = "JIO-Fi"; //Enter your Wi-Fi SSID const char* password = "Pas123"; //Enter you Wi-Fi Password Inside the setup() function we check if the ESP is able to connect with the Wi-Fi, if not it will wait there forever just by printing “Connecting..” on the serial monitor. while (WiFi.status() != WL_CONNECTED) { //Wait till Wi-Fi is connected delay(1000); Serial.print("Connecting.."); //Print Connecting.. till connection is established } The next step is the very important step. If the Wi-Fi connection is successful we have to invoke an http get request to read the JSON file from the internet. In this tutorial I am using the API provided by wunderground.com. So if you are planning to use the same you can get into link and signup for the free API key or use any API of your choice. Once you are finalised with your API you will end up with a link something like this below   http://api.wunderground.com/api/abcd124578qwert/conditions/q/IN/Chennai.json Note: I have changed the API key of this link so this will not work. Keep your API key secured and do not share. My API here is used to get the weather data of Chennai. You can use any API. But when you load the API in any browser it should return a JSON file. For example my API returns the following JSON file Read more: Arduino with ESP8266 - Reading Data from Internet ### Bucky Touch: Light-up Dodecahedron Instrument About two years ago, I built a big 120 face LED geodesic dome that plays music with a MIDI output. However, it was a difficult build and the sensors weren't completely reliable. I decided to build the Bucky Touch, a smaller version of my geodesic dome that is easier to construct and has upgraded capacitive touch sensors. The Bucky Touch is designed with both a MIDI and audio output, so you can either use a MIDI device (e.g. a computer or MIDI keyboard) to play the Bucky Touch OR you can directly hook up the Bucky Touch to an amplifier and speaker. My first prototype in this project was similar, but does not have touch-sensitive faces and instead provides break-out pins that provide access to digitial I/O pins, a TX (transmit) pin, a RX (receive) pin, reset pin, and ground pin. This version I called the Bucky Glow. The pins enable you to connect the Bucky Glow to sensors (e.g. capacitive touch, infrared, ultrasonic), motors, MIDI jacks, and any other electronics you can think of. This instructable goes through assembly of the Bucky Touch, which is more like a musical instrument in comparison to the Bucky Glow. Step 1: Supply List Materials: 1. Two sheets of 16" x 12" 0.118" thick MDF 2. One sheet of 12" x 12" 0.118" thick translucent white plexiglass 3. WS2801 or WS2811 pixel LED strip (11 LEDs): https://www.amazon.com/gp/product/B01AG923GI/ref=o... 4. Arduino Nano: https://store.arduino.cc/usa/arduino-nano 5. Prototype board 6. ITO (Indium Tin Oxide) Coated PET Plastic - 100mm x 200mm https://www.adafruit.com/product/1309 7. 11X 2MOhm resistors 8. 11X 1kOhm resistors 9. 10k resistor for audio output 10. 2X 0.1uF capacitors for audio output 11. MIDI jack: 12. Toggle switch: https://www.digikey.com/product-detail/en/e-switc... 13. Push button: https://www.amazon.com/DAOKI-Miniature-Momentary-... 14. Stereo audio jack: https://www.amazon.com/gp/product/B01MRX7KA1/ref=... 15. Header pins 16. 2X M3 nuts 17. 2X M3x12 bolts 18. Wire wrap wire 19. Scotch tape 20. Solder 21. Electrical tape 22. MIDI to USB cable if you want to play MIDI with computer Tools: 1. Laser cutter 2. 3D printer 3. Wire cutters 4. Soldering iron 5. Scissors 6. Allen wrench 7. Hot glue gun 8. Wire wrap tool Step 2: System Overview At the heart of the Bucky Touch is an Arduino Nano. The data pin and clock pin of a WS2081 addressable LED strip is connected to pin A0 and A1, respectively. Each face of the dodecahedron has a capacitive touch sensor connected with a 2.2Mohm resistor to the send signal coming from pin A2. The receive pins are A3, D2-D8, and D10-D12. Here is a link to capacitive touch sensors: http://playground.arduino.cc/Main/CapacitiveSensor The Bucky Touch has both a MIDI output and mono audio signal. Both these signals are discussed in Step 6. The TX pin is used for the MIDI and a PWM signal from pin 9 is used for the audio. To switch between MIDI and mono output, there is a toggle switch connected to pin A3. The Arduino is programmed to read all the capacitive touch sensors to determine which pentagon key is being pressed by the user. It then outputs signals to update the LEDs and produce a sound, either MIDI or mono audio depending on the direction the toggle switch is flipped. Step 3: Designing and Cutting the Chassis The chassis of the Bucky Touch was designed in Fusion 360. My goal was to design the chassis so it could be assembled without using any glue. The LEDs slide into pentagonal faces, and walls are used to separate the light and provide support for plexiglass above the LEDs. The assembled dodecahedron then attaches to a base that holds the Arduino, jacks, and other electronics. There is a total of 113 MDF parts, and 11 plexiglass parts. After designing the fully assembled structure, I exported the surface of each part as a DXF file by first starting a sketch on the surface. Then I exited the sketch mode, right-clicked on the new sketch, and then selected "Save as DXF." See the gif above. The laser cutter I have accepts PDF files, so I needed a program to import DXF files and arrange the vectors of each part for cutting. I started by using Inkscape, a free vector graphics software. Inkscape works pretty well, but I wanted to find a program more similar to Adobe Illustrator. After some research, I discovered Graphic by Autodesk. Graphic costs a one-time fee of $30 and has similar interface and features to Illustrator, so I think it is a great deal for those searching for cheaper graphic design software without the annual fee. One downside is Graphic can't import DXF files. So I ended up importing DXF files to Inkscape, and then exporting them as EPS so they could be uploaded to Graphic. It is not the most efficient method, but it tells you how user-friendly I found Graphic to be.The parts were arranged over a 16"x12" sheet and exported as a pdf for my Epilog Zing laser cutter. Before cutting all the parts, I tested the fit between joints by cutting a few parts. I wanted the joints to be tight enough so they held together without glue, so it took a lot of cutting and resizing until I was satisfied with the fit. Above are some partly assembled prototypes. I also have all the parts laid out for an older prototype with slightly different parts. Source: Bucky Touch: Light-up Dodecahedron Instrument ### LADYBUG: THE HIGH-QUALITY MOTORIZED MICROSCOPE AND 3D SCANNER Imagine that you wanted to take a picture of a very small object and you still need to zoom in as much as possible to get the smallest detail of the picture. If you have been at this stop before, then you obviously did not try taking the whole picture at once. You must have tried using a number of motors to move the object or the camera while you take a couple of pictures and then join the parts together or probably even tried doing 2D scanning a lot of times where each time you pause to take a picture, you take as many as you need to cover the object at the right resolution. All these options are good, but are not the best options that can be — they are time-consuming and can introduce subtle distortions in your image. “Ladybug is a picture-based 3D scanner, meaning that it’s primary function is to take photographs of an object from all sides, which can then be turned into a 3D model. What’s special about it is what it takes the picture with, how it takes the pictures, and what it’s made of. First, it uses a high-powered USB microscope, which is both cheap and effective — as long as you’re just looking at a tiny part of the object! LadyBug solves this by using motors to do 3D scanning on top of 2D scanning”, writes Noselace about the miniature microscope and 3D scanner. Made almost entirely out of Blu-Ray players and 3D printed parts, the Ladybug is a 4-axis motorized microscope and a 3D scanner for extremely small objects. The camera system is made up of a low-cost USB microscope powered by a Raspberry Pi that makes it easy to capture details less than 10 microns. The LadyBug can also be set up to perform 2D scanning as long as it fits into the platform you are working with. Read more: LADYBUG: THE HIGH-QUALITY MOTORIZED MICROSCOPE AND 3D SCANNER ### DIY GPS TRACKER FEATURES THREE ARDUINO BOARDS Duane Bester has built a GPS Tracker From Scratch Using 3 Arduino boards to make a GPS tracker and a data logger. A flash of idea came to him, to combine the new Arduino Nano 33 BLE Sense with an SD card and GPS module for a project that records GPS and IMU data. So he opted to buy the Nano 33, the MKR Mem Shield, and the MKR GPS Shield and couple all of them together. He later found out that these boards aren’t footprint-compatible, so He combined them with a breadboard. It took time to get all the plugins installed and everything connected correctly. The biggest challenge he faced was the GPS module, and he says “It really helps to start debugging the GPS’ example code outside; where the satellite signal is available.” After successfully vetting the Prototype code for the arduino, he went ahead to build a custom PCB. For the PCB design, he used easyeda to build his custom PCB. The first thing he did was obtaining the schematics from the Nano 33, the MKR Mem Shield then the MKR GPS Shield. The schematic was easy to access via Github. Since they are Eagle schematic files, the Eagle trial version was used for an in-depth analysis. After that, he copied the full Nano 33 BLE schematic as it is, as well as matching up the component names and numbers. He then included the GPS module then he had to figure out how to program through J-Link. To ensure it’s optimal, he went on to send off the design to PCBWay to be built and coupled. This was a smooth process, with some questions concerning the part name and orientation. Few weeks later he received the plan PCB boards in the mail, then six weeks later he got the fully assembled PCB boards. Read more: DIY GPS TRACKER FEATURES THREE ARDUINO BOARDS ### WORLD’S FIRST DEVELOPMENT BOARD BASED ON THE SWIFT PROGRAMMING LANGUAGE One growing trend across the embedded systems development world is the development of boards, Microcontrollers, and general development platforms, that aim to be more inclusive, with respect to supporting other programming languages asides the traditional C/C++ that are synonymous with embedded development. From boards like the Espruino which supports Javascripts out of the box, these boards reduce the embedded system barrier of entry in a way that allows developers from other backgrounds like Software to quickly get up and running on hardware projects. With a lot of ground a language still to cover, a new board, developed by the folks at MadMachine, is taking things further with support for Swift; the programming language popular among iOS developers. The new board called; the SwiftIO board, is a compact electronics development board that runs Swift on the bare metal, giving you a system that can be used for the development of all kinds of electronics. The design of the board took a cue from the ease and fun associated with the Arduino and it thus supports a range of sensors, lights, and motors that are plug-and-play compatible with Arduino boards. The new development board is accompanied by the MadMachine IDE which offers a full Swift compiler and framework environment that runs on the microcontroller making the development process easy. Despite being popular only among iOS developers, Swift is regarded as a modern general-purpose programming language that incorporates modern approaches to ensure safety, performance and support the implementation of a well-built software design patterns. Read more: WORLD’S FIRST DEVELOPMENT BOARD BASED ON THE SWIFT PROGRAMMING LANGUAGE ### 12V TO 24V @ 1A STEP-UP SWITCHING REGULATOR USING LM2585 This is a DC-DC step-up converter based on LM2585-ADJ regulator manufactured by Texas Instruments. This IC was chosen for its simplicity of use, requiring minimal external components and for its ability to control the output voltage by defining the feedback resistors (R1,R2). NPN switching/power transistor is integrated inside the regulator and is able to withstand 3A maximum current and 65V maximum voltage. Switching frequency is defined by internal oscillator and it’s fixed at 100KHz. The power switch is a 3-A NPN device that can standoff 65 V. Protecting the power switch are current and thermal limiting circuits and an under-voltage lockout circuit. This IC contains a 100-kHz fixed-frequency internal oscillator that permits the use of small magnetics. Other features include soft start mode to reduce in-rush current during start-up, current mode control for improved rejection of input voltage, and output load transients and cycle-by-cycle current limiting. An output voltage tolerance of ±4%, within specified input voltages and output load conditions, is specified for the power supply system. Read more: 12V TO 24V @ 1A STEP-UP SWITCHING REGULATOR USING LM2585 ### STMICROELECTRONICS RAISES PERFORMANCE AND VALUE FOR SMART, CONNECTED DEVICES WITH EVEN FASTER STM32H7 MICROCONTROLLERS Have you been on the lookout for a deeply embedded board capable of rendering good quality HMI interfaces with the capabilities you normally find on microcontrollers? You may want to take a look at the new STM32H7 series of MCU’s, as they are the industry’s first ARM Cortex-M7 core with embedded Flash memory, running at a stunning core speed of 550 MHz! But what exactly are we looking at here? First off, at 550 MHz, these single-core devices have the fastest core speed on the market for an MCU that integrates Flash storage on-chip to run deeply embedded applications. They are available with up to 1 MB of Flash memory, enabling them to perform very well while keeping the costs low. But you are not limited, as they can interact with external storage while keeping security and performance in mind too. To help with memory-hungry applications (like high resolution, colorful graphical interfaces, and video), they are aided by features such as the Flexible Memory Controller (FMC) and Octal SPI memory interface. This allows you to go even further when it comes to creating more immersive and refined user experiences. Regarding specifications, we are looking at Cortex-M7 core with: 32 kB I-Cache and D-cache Tightly couple instruction RAM (ITCRAM) with remapping for zero latency in time-critical routines FMAC (filtering) and Cordic (trigonometric) blocks for mathematical acceleration Advanced analog peripherals, such as 2x 16-bit ADC’s and 1x 12-bit low power ADC and interfaces to popular industrial connectivity interfaces Superior graphical performance with the ST Chrom-ART Accelerator Regarding software, the TouchGFX framework and Designer are going to help you create those beautiful user interfaces you are looking for, and are available for free. You can also dip your feet in neural networks, and other AI technologies, thanks to the STM32Cube.AI, to bring your neural networks, machine learning, and computer vision projects to life easily. When it comes to security, you get the STM32Trust security suite, which supports on-the-fly decryption (OTFDEC), enabling encrypted code to be run from external memory and secure firmware install (SFI), letting OEM’s order standard products from anywhere, to be programmed only with encrypted code. These two features safeguard the intellectual property in the Flash memory. You also get some other features such as secure boot support, symmetric (hardware / software), and asymmetric (software) encryption and cryptographic key provisioning, among other things. Concluding, their ecosystem can get you started on projects easily, along with the popular development environments from ARM and IAR. Read more: STMICROELECTRONICS RAISES PERFORMANCE AND VALUE FOR SMART, CONNECTED DEVICES WITH EVEN FASTER STM32H7 MICROCONTROLLERS ### A web-based radio-controlled car using Arduino UNO R4 Introduction Remote control cars have been used for ages just like boy's toys or gadgets that make people enjoy the feeling of driving from the comfort of their homes. As children’s toys radio-controlled Cars still play an informative role for all those willing to learn about electronics, programs, and mechanics. This project brings the notion of the conventional radio control car into contemporary society through computing and wireless technology. Specifically, the team of students set out to create a scaled vehicle that could be driven from anywhere using a smartphone app connected through the Internet of Things.   By incorporating an Arduino board with built-in WiFi and cloud services, their design paved the way for new possibilities in remote vehicle control. In this in-depth commentary, I will explore how the team brought their vision to life. From identifying the technical challenges to devising innovative solutions, their journey provides valuable insights for others embarking on ambitious hands-on learning projects. Hardware Design Selection of Components As the backbone of their design, the team wisely chose the Arduino UNO R4 as it integrated the required processing power and onboard WiFi connectivity. For precise motor control, an H-bridge motor driver was employed to independently drive the two DC motors. A stepper motor offered accurate steering rotations. Other key components included batteries, sensors, and indicator LEDs. Careful selection of components upfront streamlined development. Power System Design To power the electronics and propel the vehicle, 7.4V batteries were tapped. Wiring harnessed power to the motor driver and Arduino board. The motor driver's voltage regulator circuit safely supplied 5V to the microcontroller. Separate battery leads energized the indicator lights efficiently. Proper power routing minimized interference and ensured components received adequate current. Motor Control Circuitry Developing a robust motor control scheme required interfacing the motor driver, Arduino, and DC/stepper motors properly. PWM and direction pins from the Arduino were mapped to the H-bridges motor input channels. Pulse widths modulated the motor speeds while input logic controlled movement directions. The stepper motor also connected to the driver which facilitated programmatic rotation increments. Testing verified smooth, calibrated responses from the electrical design. Mechanical Integration Through clever mechanical CAD modeling and 3D printing, all electronics and mechanicals interfaced seamlessly within a protected yet customizable chassis. Motors affixed to low-friction bearings for precision rotations. A headlight bracket precision-mounted indicator LEDs. Careful fabrication ensured components remained supported and accessible for testing iterations. Well-integrated hardware served as the foundation for remote functionality. Sensor Integration Additional sensors augmented the vehicle's intelligence and utility. A photoresistor triggered automatic headlights in low light. However, proximity sensors conflicted with infrared signals, necessitating removal. Instead, the team innovated indication LEDs to creatively signal turns and reverse via coded patterns, adding safety without interfering with sensors. Thoughtful sensor selection enriched functionality. Software Design Control Algorithm Development To enact remote commands, control algorithms transformed joystick positions and button presses into motor control signals. Pulse widths modulated the motors proportionally to joystick displacement for natural acceleration and braking. Time delays between commands prevented abrupt, potentially unsafe movements. Servos automatically recentered the steering to straight positions. Testing iteratively calibrated control gain and response times for realistic driving dynamics. Integration with Cloud Platform Leveraging the Arduino Cloud API, code uplinked control signals from the mobile app to the microcontroller via Internet connectivity. Parsing incoming data packets, the Arduino interpreted commands and updated motor control variables accordingly. However, inherent latency required buffering real-time inputs to avoid instability from lagged responses. Careful coding compensated for transmission delays, smoothing the cloud-centric experience. Indicator Light Programming Additional code implemented automatic headlights through photoresistor readings. Pulsing indicator LED patterns creatively signaled turns and reverses without interfering with sensors. Conditional logic activated lights proportionally to movement directions discernible even at a distance. Subtle enhancements enriched the driving realism. Manufacturing and Assembly Planning Project Scheduling To coordinate concurrent engineering tasks, the team developed a thorough Gantt chart outlining discrete work packages. Individuals took ownership of hardware prototyping, coding modules, manufacturing planning, budgeting/sourcing, and testing/integration phases. Breaking the large project into focused workstreams allowed parallel progress and early identification of interdependencies. Rapid Prototyping Techniques Efficient production centered on rapid 3D printing and iterative assembly/testing cycles. Repeated morphological evaluations informed minor model revisions while conserving resources. Sourcing electronic components in bulk reduced costs versus single orders. Just-in-time manufacturing and flexible project scheduling facilitated multiple design iterations. Quality Assurance Processes Comprehensive testing procedures validated all function and performance specifications. Checklists screened for electrical, mechanical, and software defects. Control mapping, response times, and wireless connectivity underwent rigorous evaluations. Debugging isolated issues for permanent resolutions. Formal documentation and sign-offs certified the vehicle met objectives before completion. Rigorous QA/QC ensured the delivery of a robust prototype. Addressing Challenges Troubleshooting Motor Issues They were resolving drive motor faults required carefully examining all potential failure points. Methodically checking connections uncovered a loose wire - a simple yet elusive problem. Confirming solid contacts prevented recurrence. Persistence in root cause analysis aided swift resolution. Overcoming Connectivity Hurdles Initial WiFi configuration posed challenges. Evaluating packet sizes, encryption protocols, and transmission schedules optimized data throughput. Returning antennas boosted wireless signal strength for longer ranges. Perseverance in optimizing wireless parameters resulted in reliable cloud communications. Adapting to Sensor Interference When proximity sensors interfered with infrared signals, rather than persist with a flawed design, the team innovated alternative solutions. Removing problematic components showed flexibility. Creative LED-based signaling expanded functionality without causing issues. Agility in modifying plans circumvented setbacks. Conclusion Through diligent teamwork and engineering resourcefulness, the students accomplished their goal of creating an internet-connected radio-controlled vehicle prototype. Their concurrent engineering approach allowed timely progress across specialized workstreams. Rigorous testing and refining continuously improved design iterations. Challenges provided valuable learning by strengthening debugging skills, systems thinking, and adaptive problem-solving aptitudes. While not commercially polished, the proof-of-concept demonstrated new interfaces between physical computing and online connectivity. Overall, the project showcased the development of technical abilities alongside beneficial "soft" project management techniques serving students well in future careers. Their innovative design reflects the blending of established technologies with creativity to push boundaries. CODE   // Code generated by Arduino IoT Cloud, DO NOT EDIT. #include #include const char DEVICE_LOGIN_NAME[] = "b3b27576-b1b5-47d5-afbb-7ddd51853ab2"; const char SSID[] = SECRET_SSID; // Network SSID (name) const char PASS[] = SECRET_OPTIONAL_PASS; // Network password (use for WPA, or use as key for WEP) const char DEVICE_KEY[] = SECRET_DEVICE_KEY; // Secret device password void onAvantiChange(); void onAvantiIndietroChange(); void onAvDestraChange(); void onAvSinistraChange(); void onIndietroChange(); bool avanti; bool avantiIndietro; bool avDestra; bool avSinistra; bool indietro; void initProperties(){ ArduinoCloud.setBoardId(DEVICE_LOGIN_NAME); ArduinoCloud.setSecretDeviceKey(DEVICE_KEY); ArduinoCloud.addProperty(avanti, READWRITE, ON_CHANGE, onAvantiChange); ArduinoCloud.addProperty(avantiIndietro, READWRITE, ON_CHANGE, onAvantiIndietroChange); ArduinoCloud.addProperty(avDestra, READWRITE, ON_CHANGE, onAvDestraChange); ArduinoCloud.addProperty(avSinistra, READWRITE, ON_CHANGE, onAvSinistraChange); ArduinoCloud.addProperty(indietro, READWRITE, ON_CHANGE, onIndietroChange); } WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS); ### Low-Cost Arduino Based TDS Meter for Water Quality Monitoring Introduction However, the emphasis of this paper is on having to continuously assess water quality to provide good-quality drinking water. The aforesaid condition is total dissolved salts or TDS reflecting the concentration of salts and very small portions of organic matter in water. High TDS is not suitable for drinking and other uses. Manual assessment of TDS using equipment available in laboratories is tiresome, time-consuming, and needs technical skills. The following project is on a basic approach with low cost in the measurement of TDS using an Arduino UNO microcontroller board. Methodology The project measures the electrical conductivity (EC) of water samples using probe sensors connected to an Arduino. EC is directly proportional to TDS - the higher the salts dissolved, the higher the EC. An empirical equation relates EC in decisions per meter (dS/m) to TDS in parts per million (ppm). The Arduino codes the EC readings, calculates the TDS using the equation, and displays the result on an LCD screen. Block Diagram and Key Components A block diagram represents the most important parts of the creation: the Arduino UNO microcontroller, probe sensors to measure the EC, LCD, and cables. The Arduino UNO is an open-source versatile board that is used in developing simple electronics projects. This has I/O pins that connect with sensors, displays, motors, etc using a simple code input and output. Working Principle Two probe sensors made of stainless steel are dipped in the water sample. A fixed alternating voltage is applied across the probes through an AC excitation circuit in the Arduino. The probes act as electrodes - the more dissolved ions, the higher the conductivity through the water. The Arduino measures the AC current via the probes, relating it to EC in milliSiemens. It then calculates TDS in ppm using the formula: TDS = EC x 640. The result is displayed continuously on the LCD screen. Components in Detail Arduino UNO: Microcontroller chip ATmega328 with 32KB flash memory and 2KB SRAM Clock speed 16MHz 14 digital I/O pins, 6 analog pins Powered via USB or external power supply Open-source IDE for simple programming Probe Sensors: Made of stainless steel for stability and accuracy Fixed distance between probes maintained Must be thoroughly cleaned and calibrated periodically LCD Display: 16x2 character LCD with blue backlight Requires 4 data lines, 3 control lines interfaced to Arduino Displays TDS results and other messages clearly Advantages and Uses Provides fast, inexpensive TDS measurement without laboratory equipment Easy to operate - just dip probes and read the result Helps test water quality at source for drinking or irrigation purposes Can monitor treatment plant processes and detect contamination Suitable for schools, communities, and industries with basic electrical skills Programming and Testing Procedure Detailed steps are provided to interface components, upload the Arduino sketch code, and test the prototype: Connect probe sensors to Arduino analog pins Interface LCD to Arduino via control/data lines Power Arduino board via USB or external supply Upload code written in Arduino IDE Dip probes in a sample and start reading after 10 seconds Record TDS displayed on LCD for different water types Clean probes between tests for accurate measurements Sample Arduino Code Explained The code contains functions to initialize components, read EC analog values, compute TDS equation, and display on LCD. Key points: void setup() function runs once at start-up to configure pins void loop() function runs continuously to measure and display Analog readings are converted to EC values using a voltage reference TDS is calculated using the given formula and printed on an LCD Programming structure and syntax follow C/C++ conventions Results and Observations Different water samples tested ranged from tap water to dissolved salt solutions. Readings were stable and consistent on repeating tests. Tap water showed around 200-300 ppm TDS as per regulations. Higher TDS of over 1500 ppm was seen for salt solutions, validating the principle. Minor variations may occur due to probe cleanliness or water temperature changes affecting conductivity slightly. Overall, the prototype gave reasonable results comparable to commercial TDS meters. Code: We are still working on this code. Stay tuned to receive automatic updates from our server…! #include int rs=2,en=3,d4=4,d5=5,d6=6,d7=7; LiquidCrystal lcd(rs,en,d4,d5,d6,d7); // User Defined Variables int R1= 1000; int Ra=25; //Resistance of powering Pins int ECPin = A0; int ECGround = A1; int ECPower = A4; // Converting to ppm [Learn to use EC it is much better // Hana [USA] PPMconverion: 0.5 // Eutech [EU] PPMconversion: 0.64 // Tranchen [Australia] PPMconversion: 0.7 float PPMconversion=0.64; // Cell Constant For Ec Measurements float K=2.9; // Temp Probe Related // #define ONE_WIRE_BUS 10 // Data wire For Temp Probe is plugged into pin 10 on the Arduino // const int TempProbePossitive =8; //Temp Probe power connected to pin 9 // const int TempProbeNegative=9; //Temp Probe Negative connected to pin 8 // END Of Recomended User Inputs float EC=0; float EC25 =0; int ppm =0; float raw= 0; float Vin= 5; float Vdrop= 0; float Rc= 0; float buffer=0; // Setup - runs Once and sets pins etc void setup() { lcd.begin(16,2); lcd.clear(); // clears previous message on the display delay(2000); pinMode(ECPin,INPUT); pinMode(ECPower,OUTPUT);//Setting pin for sourcing current pinMode(ECGround,OUTPUT);//setting pin for sinking current digitalWrite(ECGround,LOW);//We can leave the ground connected permanantly delay(100); // Adding Digital Pin Resistance to [25 ohm] to the static Resistor R1=(R1+Ra);// Taking into acount Powering Pin Resitance } void loop() { GetEC(); //Calls Code to Go into GetEC() Loop [Below Main Loop] // dont call this more that 1/5 hhz [once every five seconds] // or you will polarise the water PrintReadings(); // Cals Print routine [below main loop] delay(5000); }   Conclusion This low-cost Arduino-based TDS meter provides a viable solution for measuring water quality parameters easily. With some code refinements and automated logging, it can serve as a basic water monitoring system. The open hardware and software nature also allows modifications as per specific application needs. Further developments may include integrated data storage, wireless data transfer, and smartphone control for remote community monitoring of water resources. Overall, the project demonstrates an effective Internet of Things (IoT) approach for environmental monitoring and management. For further details or future updates on this project visit: Low-Cost Arduino-Based TDS Meter for Water Quality Monitoring ### Why Small Businesses Need Tailored Firewalls for Distributed Networks Small businesses face unique challenges when it comes to successfully managing their network security, especially if they operate across multiple locations or have remote work setups. Distributed networks, which connect various branches, remote offices, and devices, require security measures that can adapt to the needs of each business. Tailored firewalls play a critical role in this process, offering protection that matches the specific demands of a small business's distributed network. This article will explore why small businesses need tailored firewalls and how they can help safeguard network integrity. The Growing Importance of Network Security for Small Businesses With the evolution of digital transformation and remote work, small businesses increasingly rely on distributed networks. These networks offer benefits like improved scalability, flexibility, and enhanced collaboration among teams across different locations. However, they also introduce new vulnerabilities. Small businesses are often targeted by cyberattacks because they may lack the robust security infrastructure of larger enterprises. Cyber threats like data breaches, ransomware, and phishing attacks can have devastating effects on a small business, including challenging financial losses and damage to reputation. This is why having a well-designed security solution, like a tailored firewall, is essential for protecting sensitive information and maintaining business continuity. What Is a Tailored Firewall? A tailored firewall is a security solution that is specially built to meet the specific needs of a business's network, unlike generic firewalls, which may offer basic protection, tailored firewalls are designed to address the unique risks associated with distributed networks. They take into account factors like the number of locations, the type of data being transmitted, and the varying security needs of different branches or remote offices. One example of an effective tailored firewall solution is the SonicWall TZ Series from sonicwallonline.co.uk. This series offers small businesses advanced security features, such as deep packet inspection and secure remote access, making it ideal for distributed network environments. Why Tailored Firewalls Are Essential for Small Businesses 1. Protection Against Targeted Attacks Small businesses are increasingly becoming targets for cybercriminals. Tailored firewalls provide advanced threat detection and prevention capabilities that can protect against targeted attacks like phishing, ransomware, and data breaches. With the right solution, small businesses can benefit from features such as intrusion prevention and malware detection, offering comprehensive protection against a wide range of threats. 2. Secure Remote Access for Distributed Workforces Many small businesses rely on remote employees or operate across multiple locations. Tailored firewalls can facilitate secure remote access, ensuring that employees can connect to the network safely from any location. This is crucial for maintaining productivity while keeping sensitive data secure.  3. Scalability and Flexibility As a small business grows, so does its network. A tailored firewall can be scaled to accommodate new branches or remote offices without compromising security. This flexibility makes it easier for small businesses to adapt to changing needs, whether they are expanding to new locations or integrating new technology while remaining compliant to industry regulations.  4. Simplified Network Management Managing a distributed network can be complex, especially for small businesses with limited IT resources. Tailored firewalls often come with centralized management capabilities, allowing business owners or IT managers to monitor and control network activity from a single dashboard. This simplifies the process of applying security policies, monitoring for threats, and managing remote access. A range of solutions offer user-friendly interfaces that make it easier to keep the network secure without the need for a large IT team. How the Right Firewall Solution Can Boost Business Resilience A tailored firewall is more than just a security measure—it's a critical investment in a small business's resilience. By providing protection that matches the unique needs of a distributed network, these firewalls help prevent disruptions, maintain data integrity, and ensure continuous operations. This is especially important in today's digital landscape, where even a small security incident can lead to significant setbacks for a growing business. Moreover, the peace of mind that comes with knowing your network is secure allows business owners to focus on growth rather than constantly worrying about potential vulnerabilities. With the right tailored firewall, small businesses can strike a balance between robust security and operational efficiency. To Conclude For small businesses operating distributed networks, a one-size-fits-all approach to security is not enough. Tailored firewalls provide the necessary protection, flexibility, and scalability to secure remote access, prevent targeted attacks, and ensure compliance with industry regulations. Investing in a tailored firewall solution is a crucial step toward safeguarding a small business's digital assets and ensuring long-term success in a connected world. ### DIY Arduino Turntable for Photogrammetry: Affordable Build Welcome back to my deep dive into the creation of a low-cost DIY Arduino turntable designed for photogrammetry enthusiasts. In this continuation, I will share a detailed, step-by-step breakdown of the build process, highlighting the technical challenges and solutions, while providing comprehensive resources to empower you to replicate this project. The Components The first step in any DIY electronics or maker project is selecting the necessary components. For this turntable, the goal was to choose readily available, affordable parts that offer good performance given the application. Let's review each component and the reasoning behind its selection: NEMA 17 Stepper Motor: The NEMA 17 was chosen as the actuator. At $10-15 each on sites like Amazon or AliExpress, it provides ample torque for our needs without breaking the bank. Its 1.7A/Phase current draw can be handled by cheap motor drivers as well. Larger NEMA 23 or 34 steppers weren't needed given the lightweight our turntable needs to rotate. A4988 Stepper Motor Driver: An extremely popular and inexpensive at $2-4 each, the A4988 driver was an obvious choice. Its wide availability of documentation online and support for micro-stepping makes it easy to use for novice Makers. More advanced drivers like the DRV8825 or TMC2100 were avoided due to cost and complexity considerations here. 608 Bearings: These standard skateboard bearings at $1-2 each provided all the smooth rotation we needed without fussing over more precise but pricier robotics bearings. Their durable, sealed construction also makes them a set-and-forget component. 12V Power Supply: While one could power from a computer or portable battery, a dedicated 12V 2A supply offered a cleaner way to provide juice to our stepper motors without voltage drop concerns. Most cost $5-10 and their barrel connectors snap right onto the motor drivers. Male-Male Jumper Wires: At only $3-5 for a pack, these multicolored wires were vital for quickly trying different arrangements without soldering. No individual component was more than a few cents, so replacing them is no problem either. Solid for learning and prototyping. Breadboard: An essential for any electronics project still in the experimental phases. Priced around $5-10 each, this lets you change connections on the fly without wasting time desoldering. Invaluable during development and design iterations. Mine is still serving me well over a year later! Arduino UNO: The "hello world" of microcontrollers. At $15-25, the Arduino Uno remains the most straightforward board to learn embedded programming and make interactive devices. Huge community support was a big plus here too for help along the way. More expensive boards didn't provide meaningfully better features for our needs. Pushbuttons, Resistors, Cables: Smaller components like these 330ohm resistors, momentary tactile buttons, and assorted cables cost under $10 total. Excellent value as basic electronic building blocks or to add simple interactivity without breaking the budget. All in all, I was able to source all electronic components for under $75 shipped, a very reasonable sum for a DIY project. Many hobbyists or maker spaces could likely even source many components cheaper or already have them on hand. The goal was attainable quality without excess cost. As we'll see later, 3D printing was also very affordable. Designing the Mechanical Components While electronics may be the "brains" of a project, the physical structure is equally important. For a rotating platform, rigidity, balance, and smooth motion are key. I began sketching initial designs inspired by turntables I'd seen before, with the main functional requirements being: A stable, low-friction base to mount the stepper motor and bearings An evenly weighted platter atop the bearings to hold scanning objects Rigid bearing mounts to precisely position the axis of rotation Adjustable motor coupling for fine-tuning gear alignment A modular, printable structure for affordability and repairability After many iterations in Fusion 360, I settled on the following core 3D-printed parts: Base V2: The foundation, with recessed motor mount, counterbored screw holes, and precise bearing positioning lips. Rotating Platform V2: A simple circular tray sitting atop the bearings, sized to hold common scanning objects and counterweights. Bearing Holders: Snap-fitting clips to hold each bearing firmly in place at equal intervals around the base. By making sturdy yet lightweight parts optimized for my Kobra printer's build volume, I aimed for balanced rigidity without bulk. All screws, pegs, and mating joints were precisely modeled to fit together like puzzles. Test prints revealed necessary tweaks like reinforced bridging areas, countersinking, and reduced friction-causing surfaces. After multiple design and printing test cycles, I arrived at versions that fit and worked together smoothly. The total plastic used was just 150g of PLA filament costing under $5 at common maker prices. Combined with a few nuts, bolts, and washers readily available in any hardware store, mechanical construction was now well under the $10 mark. Assembly and Fine-Tuning With physical construction carefully planned, assembly was merely a matter of following the digital instructions. I took my time fitting each piece, testing along the way: Bearings clicked securely into holders around the base without wobble or tightness. The rotating platform lowered gently atop bearings, spinning freely without friction spots. The motor dropped precisely into its mount, the shaft engaging the drivetrain coupling perfectly on the first try. Smooth rotation and precise, repeatable movements were emerging as design goals were translating into physical outcomes flawlessly. Some fine-tuning remained: Gears were meticulously aligned using feeler gauges until optimal backlash and minimum drag were achieved. A single drop of light machine oil on each bearing reduced noise and increased already smooth spin. After the initial test runs developing firmware, tightening a few screws eliminated any hint of play or wiggle in the system. What was emerging was an elegantly simple yet thoughtfully engineered desktop turntable - light years beyond my initial concepts both literally and figuratively! Fine details had transformed it from a prototype to a polished, professional-grade device. Best of all, the total cost remained a tiny fraction of commercial offerings. Bringing It Alive with Code Code is what breathes life into any electronic project. For movement and interactivity, my plan was: Control turntable direction and speed with a pushbutton interface Use stepper micro-stepping for silky-smooth controllable rotations Leverage Arduino libraries for familiar, stable motor control APIs Modular, well-commented code designed for readability and reuse A focus on clean, organized code would future-proof my work and help others learn. After setting up the Arduino IDE, I included these libraries: Stepper. h for basic stepper functions like speed, steps, and full/half-stepping LiquidCrystal.h for the simple 16x2 LCD Button. h for debouncing switch input cleanly Wiring followed schematics, connecting components as planned: Step and direction pins to the motor driver LCD to Arduino via breadboard Buttons through pull-up resistors for clean logic My code structure involved three primary classes - one each for the stepper motor, display, and button control. Each handled its specialized functions while operating together seamlessly through global variables like speed and state. Key functions included buttonPressed() to interpret button inputs, displayMessage() to show status updates, and rotate() for actually spinning the motor. Parameters like speed were stored as #defines rather than hardcoded for easy tuning later on. After uploading, the demo program functioned perfectly - buttons spun my turntable both ways at adjustable predetermined speeds while displaying friendly status messages. System feedback and responses were buttery smooth thanks to all the care put into both hardware and code design. The finished result exceeded my expectations yet again. Programming the Turntable #include #include void(* resetFunc) (void) = 0; /* LCD Pin Map Reset = 7; Enable = 8; D4 = 9; D5 = 10; D6 = 11; D7 = 12; Stepper PIN Map Step = 6 Direction = 5 (Type of driver: with 2 pins, STEP, DIR) */ AccelStepper stepper(1, 6, 5); const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); int green = 2; int red = 3; int button = 4; int controls = A1; int speeds = A0; String currentStat = "Reset"; String prevStat = "Reset"; int stepsTaken = 0; bool buttonPressed = false; bool actionTaken = false; int buttonClicked = 0; int currentSpeed = 0; void setup() { lcd.begin(16, 2); pinMode(green, OUTPUT); pinMode(red, OUTPUT); pinMode(button, INPUT); resetControls(); } void loop() { runProgram(); } void runProgram() { currentSpeed = readSpeed(); currentStat = getStatus(); buttonClicked = buttonClick(); digitalWrite(red, HIGH); lcd.setCursor(0, 0); lcd.print(": " + currentStat); lcd.setCursor(8, 0); lcd.print("-> " + String(currentSpeed) + "ms"); if (buttonClicked == 1) { lcd.clear(); //Reset if (currentStat == "Reset") { lcd.setCursor(0, 0); lcd.print("RESETTING..."); stepsTaken = 0; prevStat = currentStat; digitalWrite(green, LOW); digitalWrite(red, HIGH); resetFunc(); } //Resume else if (currentStat == "Start" && prevStat == "Pause") { lcd.setCursor(0, 1); lcd.print("RESUMED @" + String(currentSpeed)); prevStat = currentStat; stepsTaken = commandStart(currentSpeed, stepsTaken); } //Start else if (currentStat == "Start") { lcd.setCursor(0, 1); lcd.print("STARTED @" + String(currentSpeed)); prevStat = currentStat; stepsTaken = commandStart(currentSpeed, 0); } else if (currentStat == "Pause" && prevStat == "Pause") { lcd.setCursor(0, 1); lcd.print("Already Paused"); } //Undefined else { lcd.setCursor(0, 1); lcd.print("Invalid Command"); } } } /*--------------------------------------*/ int commandStart(int currentSpeed, int initial) { lcd.clear(); int steps = 0; digitalWrite(red, LOW); digitalWrite(green, HIGH); for (int i = initial; i <= 200; i++) { stepper.moveTo(i); stepper.runToPosition(); lcd.setCursor(0, 1); lcd.print(i); lcd.setCursor(4, 1); lcd.print("/ 200 steps"); steps = i; delay(currentSpeed); //Check if any other button is pressed while started String check = getStatus(); lcd.setCursor(0, 0); lcd.print(check); int clicked = buttonClick(); String clickedIndicator = clicked ? "*" : ""; lcd.setCursor(6, 0); lcd.print(clickedIndicator); if (clicked) { if (check == "Reset") { lcd.clear(); lcd.setCursor(0, 0); lcd.print("RESETTING..."); delay(200); stepsTaken = 0; prevStat = "Reset"; digitalWrite(green, LOW); digitalWrite(red, HIGH); resetFunc(); } else if (check == "Pause") { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Paused"); delay(200); prevStat = "Pause"; digitalWrite(green, HIGH); digitalWrite(red, HIGH); return steps; } } } return steps; } /*--------------------------------------*/ int buttonClick() { int reading = digitalRead(button); return reading; } void resetControls() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Turntable - Tash!"); digitalWrite(red, HIGH); digitalWrite(green, HIGH); delay(500); digitalWrite(red, LOW); digitalWrite(green, LOW); delay(500); digitalWrite(red, HIGH); digitalWrite(green, HIGH); delay(500); digitalWrite(red, LOW); digitalWrite(green, LOW); lcd.clear(); } String getStatus() { int controlStatus = analogRead(controls); int controlRange = map(controlStatus, 0, 1023, 1, 4); String stat = ""; if (controlRange == 1) stat = "Reset"; else if (controlRange == 2) stat = "Pause"; else if (controlRange == 3 || controlRange == 4) stat = "Start"; else stat = "-----" ; delay(100); return stat; } int readSpeed() { int sensorVal = analogRead(speeds); int stepSpeed = map(sensorVal, 0, 1023, 250, 5000); return stepSpeed; } The code for the turntable is structured to handle various functionalities: controlling the motor, updating the LCD, and reading inputs from the rotary encoder. Access the full commented code on my GitHub repository: https://github.com/tashrique/DIY-Turntable-Makerspace-Resources What's Next? Potential Additions and Improvements Any project can always evolve further. Here are some ideas I have for enhancing this turntable over time: Integration of limit switches or rotary encoders could allow automated full/partial rotations to precise angle positions for advanced scanning workflows. An onboard Real-Time Clock module would permit timestamping of individual scan frames during long unattended capture sessions. The LCD could potentially be upgraded to a small touchscreen for intuitive menu-driven control without buttons. Integrating battery power would untether the device, while swappable LiPo modules could allow all-day field scanning. More robust casing and mounts could pave the way for industrial or commercial scanning applications requiring durability. A closed-loop stepper motor controller may deliver even smoother motion than is currently possible with simple open-loop control. Over WiFi, the turntable could be remotely triggered and monitored from a smartphone for maximum flexibility during scanning. Onboard data storage or Ethernet connectivity may one day allow device-side processing rather than tethered PC workflows. The possibilities are endless thanks to the modular, iterative nature of any Maker project. I'm excited to see where this turntable's journey may lead in the future! In Conclusion Creating this DIY Arduino turntable has been an immensely rewarding learning experience for me. From conceptualizing initial ideas, through iterative designing, testing, tweaking, and polishing both hardware and code - I've gained invaluable hands-on experience in bridging the digital and physical worlds of electronics, 3D printing, and embedded systems. More importantly, I hope sharing this project in detail empowers other Makers and photogrammetry enthusiasts on low budgets to replicate and customize it themselves. The core vision was to provide thoroughly documented, step-by-step guides enabling anyone with basic technical skills to build their high-quality turntable affordably. While the commercial ones costing thousands served as inspiration, open collaboration is what truly drives innovation and builds community in the Maker world. I look forward to seeing what you all create with this project - and helping however I can as your journeys unfold! Onward to the next adventure. ### Why Black-Back Banners Are a Must-Have for Double-Sided Printing Black-back banners have become a staple in the world of advertising and signage, especially for double-sided printing. Their unique construction, featuring a black backing that completely blocks light, makes them the ideal solution for situations where both sides of the banner are used for printing. Whether in retail environments, outdoor advertising, or events, black-back banners offer a range of benefits that make them a must-have for double-sided printing. Prevents Light Bleed-Through The primary reason black-back banners are essential for double-sided printing is their ability to prevent light bleed-through. When printing on both sides of a banner, it’s crucial that the images or text on one side do not affect the visibility of the other. Traditional banners, which allow light to pass through, can cause the design on one side to interfere with the other, leading to a blurred or washed-out appearance. Printable blockout textiles eliminate this issue by using a black layer that blocks light entirely. This ensures that the content on each side of the banner remains crisp and clear, no matter the lighting conditions. Whether the banner is exposed to sunlight outdoors or bright indoor lighting, the designs on both sides remain distinct and vibrant, providing maximum visual impact. Versatility in Indoor and Outdoor Settings The versatility of black-back banners makes them ideal for use in a variety of settings, both indoors and outdoors. In outdoor environments, such as exhibitions, festivals, or street advertising, black-back banners perform exceptionally well. The black backing prevents sunlight from penetrating the material, ensuring that the designs on both sides are always visible and unaffected by external light sources. Similarly, in indoor settings like retail stores, trade shows, or conferences, black-back banners allow businesses to make the most of their display space. By printing on both sides of the banner, you can ensure that your message is seen from all angles, maximizing the effectiveness of the display without requiring additional banners or signage. Cost-Efficiency and Space Optimization For businesses and marketers, black-back banners represent a highly cost-effective solution. Double-sided printing allows you to convey more information in the same physical space, making the most of your marketing budget. Instead of purchasing two separate banners to display two different messages, black-back banners allow you to print both on a single banner. This reduces production costs and streamlines the setup process. Furthermore, black-back banners are a great space-saving option for events or locations where space is limited. By utilizing both sides of the banner, you can avoid overcrowding the area with multiple signs and still communicate your marketing message effectively. This makes black-back banners particularly useful for trade shows, retail environments, and event venues where floor or wall space may be at a premium. Durability and Longevity Black-back banners are designed to be durable and long-lasting, which is another reason they are ideal for double-sided printing. The material is resistant to environmental factors such as wind, rain, and UV exposure, ensuring that the banner remains in excellent condition even after prolonged use. This durability means that businesses can reuse black-back banners across multiple campaigns or events, making them a cost-efficient choice for long-term marketing strategies. Additionally, the black backing itself is resistant to fading and wear, ensuring that the light-blocking properties of the banner remain effective over time. This level of durability ensures that double-sided printing on black-back banners remains sharp and visually impactful, even after repeated use. Customization and Flexibility Black-back banners offer a high degree of customization, making them perfect for a wide range of marketing and advertising needs. They can be printed in various sizes, from small banners for point-of-sale displays to large-format banners for outdoor billboards. The black backing allows for a wide range of design possibilities, ensuring that no matter how intricate or detailed your artwork is, it will be rendered with clarity and precision. This flexibility allows businesses to create bespoke banners that align perfectly with their branding and marketing objectives. Whether promoting a new product, announcing a sale, or simply building brand awareness, black-back banners with double-sided printing provide a versatile and impactful solution. Conclusion Black-back banners are an indispensable tool for businesses seeking to maximize the effectiveness of double-sided printing. Their light-blocking properties ensure that the designs on each side of the banner remain vibrant and distinct, regardless of lighting conditions. With their durability, cost-efficiency, and versatility, black-back banners are a must-have for any marketing strategy that requires double-sided printing. Whether for indoor or outdoor use, these banners offer a professional, high-impact solution that allows businesses to make the most of their display space while maintaining a polished, visually appealing presentation. ### PCBite Kit Review: A Versatile Tool for Electronics Debugging Introduction To any electronic hobbyist out there, the PCBite kit is perfect for them. As a complete package for testing and diagnosing printed circuit boards (PCBs), it gives the user practical experience in electronics repairs. In this long review, I will look at every aspect of this PCBite kit and show how it could be used in real life. Its specifications will also be analyzed in detail. By the end, readers will have a thorough understanding of what this kit offers and why it is such a powerful problem-solving tool. Key Components and Features The PCBite kit contains several essential components that work together to form a complete electronics debugging station. Let's examine each one: PCBite Probe Station At the heart of the kit is the PCBite probe station itself. This provides a stable base for securely holding any PCB while it is being tested. Made of durable plastic, it has mounting posts that PCBs can be screwed down to using the included screws, ensuring they do not move around. This steady platform is key for making reliable electrical connections with probes. 4x SP10 Probe Tips Four SP10 probe tips are included which plug directly into the probe station posts. These cone-shaped probe tips have a very fine 0.02" (0.5mm) tip diameter for easy access into tight circuit areas. Their sturdy construction can withstand reasonable force when probing. The tips are color-coded for easy identification of different test points. Spring-Loaded Test Wire Lead Sets For transferring signals between the probes and a multimeter or oscilloscope, spring-loaded test wire lead sets are provided. One end of each wire clips onto a probe tip while the other connects to a meter. The spring-loading helps maintain reliable contact without excessive pressure that could damage components. Five different wire colors are included. Accessory Packages Additional accessories in the kit extend its functionality. Packets of alligator clips, jump wires, and probes extend the reach to components farther from the PCB edge. Magnetized tweezers and an antistatic wrist strap protect sensitive transistors and ICs from electrostatic discharge damage during handling. Lastly, the kit comes neatly stored in an organized case for portability. Applications and Uses With the fundamental components above, the PCBite kit enables various electronics repair, testing, and learning applications. Some key examples: Troubleshooting faulty PCBs: Methodically probe signals and check voltages/resistance at different points to isolate problems. Continuity testing: Quickly test if connections in a circuit are intact using the jump wires and multimeter. Component-level debugging: Inspect the behavior of individual transistors, ICs, etc by probing their pins. Circuit prototyping: Use a power supply to test circuit designs on breadboards before building on PCBs. Education/learning: Great for teaching electronics and exposing students/beginners to hardware debugging skills. Hobbyist projects: Perfect companion for builders, modders, and makers to tweak their DIY creations. As can be seen, this versatile kit supports tasks from professional-level fault-finding to casual learning and experimentation. Its wide applicability makes it highly useful to have on hand for any electronics work. Specifications Let's review the key technical specifications of the PCBite kit: Probe station dimensions: 120mm x 90mm x 30mm (LxWxH) Probe post spacing: 3.2mm (0.13") centers SP10 probe tip diameter: 0.5mm (0.02") Test wire lengths: 80cm (1.5ft) for each color Alligator clip wires: 15cm (6") each Magnetized tweezers length: 130mm (5.1") Antistatic wrist strap resistance: 1 x 10^9 ohms Carrying case size: 180mm x 140mm x 50mm (LxWxH) Total kit weight: <300g (10.6oz) As we can see, this is a highly compact yet capable debugging station. The close post spacing enables probing even the tightest packed SMT components. Other specs like the wire lengths, magnetic tweezers size, etc are well-sized for convenient usage. Overall it packs a lot of functionality into a small footprint perfectly suited for a workbench or toolbag. Build Quality and Ergonomics Beyond just its specifications, another important aspect is the actual build quality and ergonomics of using the PCBite kit. In my testing: The probe station base feels very sturdy and rigid, with no flex or movement under pressure. Its non-slip rubber feet firmly grip any surface. The spring-loaded probe tips made probing operations smooth and reproducible without damaging components. Their consistent tip exposure length helps them take accurate measurements repeatably. Test wire sets have just the right amount of spring tension, neither too loose nor too stiff. Different colors are easy to visually identify even in dim lighting conditions. Alligator clips, jump wires, and other accessories provided feel high quality and robustly built for frequent use. The compact carrying case keeps everything organized yet permits full access when open. It protects components when transported. Overall the ergonomic design makes operations like changing tips, connecting wires, etc very convenient and comfortable with minimal hand fatigue. So in summary, the thoughtful engineering and use of good materials result in a kit with a robust build quality that can withstand years of regular workshop usage while still feeling easy and pleasant to use. Attention to fine details in its design makes it extremely user-friendly. Alternatives Compared Naturally, there are other electronics debugging solutions available besides the PCBite kit: General Purpose Multimeters: While basic multimeters can check voltages and continuity, they lack features like interchangeable tips needed for precision component-level probing. Measurement errors are also more likely without proper probe support. Basic Probe Kits: Some kits contain just probes and leads but no sturdy probe station base. This makes probe angle and placement less reproducible which is undesirable for critical fault-finding. Components can also get damaged more easily from pressures. 3D Printed Stations: DIY 3D printed versions exist but may have issues like flexing plastic, rough non-ergonomic surfaces, difficult assembly, and lower durability over extended use compared to injection molded components. Quality can vary significantly between printers. Branded Debugging Stations: Products from companies like TalkingDAISY, CircuitLab, and Adafruit provide similar functionality but demand a 2-5x higher price premium. Their target audience seems to be professional technicians rather than hobbyists or students. In comparison, the PCBite kit offers an excellent balance of features, build quality, ease of use, and affordability - arguably the best value solution for most general-purpose electronic debugging needs. Its well-designed integrated system is hard to match at this price point. Conclusion In summary, the PCBite kit forms an indispensable toolkit for anyone interested in electronics from students to hobbyists and professionals. With everything needed built-in, it lowers the barrier to entry for practical hands-on learning and debugging of circuits. Its robust build, thoughtful design, and competitive price make this a superb choice as a go-to troubleshooting companion for any electronics bench or toolkit. Whether for professional repairs, leisurely experiments, or gaining new technical skills, this kit will prove to be an invaluable workhorse. Highly recommended! FAQ Q: What is the maximum board size this probe station can accommodate? A: The PCBite probe station has a working area of 120mm x 90mm. So most standard single board sizes up to around 3x2 inches should fit without issues. Larger boards may overhang the edges a bit but still allow probing of most components. Q: Is it possible to add more probe tips besides the 4 included? A: Yes, additional SP10 probe tips can be purchased separately if needed. The probe station posts have a standard 3.2mm/0.13" spacing so any compatible tips will securely plug in. This allows upgrading the kit for applications requiring more simultaneous test points. Q: What is the operating voltage/current rating of the kit? Can it handle high-power circuits? A: The kit is designed for use within the safety ratings of general-purpose electronics work up to around 50V/1A. It is not intended for contact with exposed high voltage/current points in industrial equipment or power electronics. For those use a properly rated test station. Q: How do I clean the probe tips after use? Can they be reused? A: Probe tips can be cleaned using electronic-grade isopropyl alcohol and a soft brush or cloth. Just be gentle to maintain the tip shape. Tips are reusable but may need replacement after extended heavy usage as the plating can wear down over time. Q: Will this kit work with my oscilloscope for waveform analysis? A: Yes, the spring-loaded test wire leads make an ideal interface for connecting the probes to an oscilloscope or logic analyzer's inputs. This allows inspecting voltage/signal behaviors over time which is very helpful for advanced troubleshooting. Q: What types of components can safely be probed with this kit? A: The SP10 probe tips are suitable for probing most through-hole and surface mount passive components as well as IC pins with due care taken. Avoid charged/energized capacitors or high-powered devices. Transistors and other static-sensitive chips require using the included antistatic wrist straps and tweezers for safe handling. ### Exploring the Possibilities of the Arduino Sensor Kit-Base An Introduction to the Kit The Arduino Sensor Kit-Base is defined as an educational tool for understanding how sensors and microcontrollers work. Arduino, an open-source hardware giant, designed this basic kit, and it is cheap compared to other kits out in the market and easy to use for beginners in working with sensors. It has a minimum stock of sensors that are usually in demand and an Arduino UNO microcontroller board that is responsible for the reading and processing of the different sensors. With this kit, users can build a variety of experiments and interactive projects. It teaches important concepts like analog and digital input/output, signal processing, and programming. While aimed at beginners just getting started, the wide range of things you can make with it means that even experienced users may find new uses and applications. Regardless of experience level, the Arduino Sensor Kit-Base opens up a new creative outlet for integrating the physical and digital worlds. What's Included Let's take a closer look at exactly what comes included in the Arduino Sensor Kit-Base: Arduino UNO R3 Board: This is the brain of the kit. A simple alternating current-DC power supply, I/O signal port for connecting and loading microcontroller programs with the aid of Arduino IDE. Breadboard: A solderless prototyping board for connecting components without permanent connections. Allows experimenting by plugging things in and out easily. Jumper Wires: Male-to-male connecting wires in various colors. Used to connect parts on the breadboard to the Arduino. Temperature Sensor: Measures ambient temperature and returns a voltage correlated to degrees Celsius/Fahrenheit. Light Sensor: Detects light levels around it and outputs analog voltages accordingly. Button: Acts as a digital on/off switch. Useful for inputs like user interactions or triggering events. Potentiometer: Variable resistor that can be turned to provide a range of input voltages. Commonly used for things like volume control. Buzzer: Emits a beeping tone whenever voltage is applied. Acts as a basic output component for alarms, etc. USB Cable: For programming and powering the Arduino board from a computer. Batteries are not included for portable use. This provides the core set of parts needed to experiment with common types of analog and digital inputs/outputs. It teaches fundamental interactions between circuits, code, and the physical world. Easy-to-Use Software A key advantage of the Arduino platform is its simplicity of use, even for complete beginners. The included Arduino IDE software works across Windows, Mac, and Linux operating systems. It has a basic text-based interface for writing code in a variation of C/C++ specifically tailored for microcontrollers. Programming the Arduino sensors involves writing short snippets of code to read their analog or digital values, and perform actions based on the values. For example, displaying the temperature, flashing the LED at different rates based on light level, or playing a melody on the buzzer. The IDE then compiles and uploads this code directly to the Arduino board over the USB connection. No additional hardware is needed. Built-in libraries handle all the lower-level operations of communicating with the board's microcontroller chip. This makes it very approachable even for those with no prior coding experience. Combined with the interactive output of connected components, it provides an engaging learning process. Users can rapidly prototype ideas and see the immediate impact of small code modifications. Endless Creative Possibilities With just the basic components included in this kit, users can build a huge variety of interactive projects both educational and fun. Here are a few examples: Temperature Data Logger: Code to periodically read and save temperature values to an SD card or cloud service. Useful for environmental or industrial monitoring. Light-Controlled LED Patterns: Vary the blinking rate or patterns of onboard LEDs based on ambient lighting. Great for mood lighting or notification displays. Sound Sensor Alarm: Trigger an alarm buzzer whenever loud noises above a threshold volume are detected. Applicable for security systems, baby monitors, etc. Plant Watering System: Monitor soil moisture and automatically control a water pump module as needed for optimized irrigation. Motion-Activated Night-Light: Detect motion using a PIR sensor and illuminate a light strip or bulb. Convenient for hallways or children's rooms. Musical Instrument: Use the potentiometer or other inputs to control the pitch or playback of pre-programmed songs/melodies on speakers or a buzzer. And these are just the tip of the iceberg. With the knowledge gained from this kit, users can progress to adding enhanced components like displays, wireless communication, sensors for additional variables, and more robust hardware designs. It lays the foundation for countless innovative STEAM projects in areas like environmental monitoring, wearables, home automation, robotics, and beyond. Real-World Applications As the Internet of Things and embedded systems become increasingly pervasive, sensor skills have wide practical relevance. Here are just a few examples of how such skills could potentially be applied professionally: Industrial/Manufacturing Engineering: Design automated quality control systems using sensors to check product specifications like temperature, vibration, pressure, etc. Environmental Science: Build low-cost sensor networks for large-scale data collection efforts like pollution monitoring, wildlife tracking, and weather pattern analysis. Healthcare Technology: Develop non-invasive diagnostics, activity/vitals trackers, and assistive technologies using biosensors, motion tracking, and environmental conditions monitoring. Consumer Electronics/Appliances: Integrate touch/motion controls, energy/safety monitoring features, and "smart" capabilities into appliances, vehicles, and IoT devices. Education Tools: Create hands-on exhibits, demonstrations and lab equipment for STEM curriculums using interactive sensor outputs for visualization and engagement. Architecture/Facility Management: Retrofit commercial and residential buildings with sensors for optimizing energy usage, and maintenance needs based on usage patterns and equipment lifespan tracking. Emergency Response: Engineer devices to aid in search-and-rescue, hazard detection, medical triage, and logistics coordination leveraging sensors for localization, and environmental conditions awareness. This includes applications limited only by imagination and technical capabilities in present-day use. Starting with an Arduino Sensor Kit as a hardware platform to begin learning about electronics and microcontrollers, the possibility of active contribution to advancing technology in numerous valuable disciplines is within reach. Technical Specifications For reference, here are some key technical specifications of the components included in the Arduino Sensor Kit-Base: Arduino UNO R3 Microcontroller: ATmega328P Operating Voltage: 5V Input Voltage: 7-12V Digital I/O Pins: 14 (of which 6 provide PWM output) Analog Input Pins: 6 DC Current per I/O Pin: 40 mA Flash Memory: 32 KB of which 0.5 KB is used by the bootloader SRAM: 2 KB EEPROM: 1 KB Clock Speed: 16 MHz Dimensions: 68.6 x 53.4 mm Sensors Temperature Sensor: TMP36 temperature sensor, outputs analog voltage proportional to -50°C to +125°C range. ±1°C accuracy. Light Sensor: Photoresistor, resistance decreases with increasing light intensity. Detects visible light spectrum. Button: Digital normally opens the push button. Requires external pull-down resistor. Rated for millions of presses. Potentiometer: 10kΩ dual-gang pot, linearly variable analog output from 0 to 5V. Other Components Breadboard: Half-size breadboard with 400 tie points for components. Jumper Wires: Various-length male-to-male hookup wires for connections. 22-24 AWG thickness. Buzzer: Active buzzer module, outputs tone at rated frequency when driven by 5V signal. This provides an overview of the basic technical characteristics and limitations of the kit components. With experience, more sophisticated sensors, actuators, and add-ons can later be experimented with. Summary In conclusion, the Arduino Sensor Kit-Base is a superb educational tool for anyone wanting to learn foundational skills in physical computing and the Internet of Things. At its low price point, it provides the necessary hardware to undertake a wide range of introductory hands-on learning projects. The Arduino platform's simplicity enables rapid prototyping without upfront electrical engineering expertise. Combined with a creative mindset, this kit opens the door to countless imaginative applications across many fields. It lays a solid groundwork for lifelong skills in sensing, embedded systems, programming, and more. Whether as a classroom learning tool, family STEAM activity, or self-study project, the Arduino Sensor Kit fosters an engaging and experiential style of technical learning. Through interacting directly with code and physical components, abstract concepts come alive in a very tangible way. This makes it uniquely placed to spark interest and cultivate problem-solving abilities in both students and hobbyists alike. Overall, it provides excellent value and empowers users to explore their curiosity through data, sensors, and code. FAQ Q: What previous experience do I need? A: None at all! The Arduino Sensor Kit is designed for complete beginners to get started with hands-on learning. Basic computer skills help use the programming software, but prior coding knowledge is not required. Q: How easy is it to get started? A: The kit comes with step-by-step instructions to guide you through setting up the Arduino board and running simple demo programs. You'll have it up and running within the first hour. The Arduino IDE makes programming approachable and there are many online tutorials if you get stuck. Q: Can I use replacement/additional sensors? A: Yes! The Arduino platform is very expandable and supports a huge range of third-party sensors and add-ons. This starter kit gives you the essentials to get familiar with the core concepts before branching out. Q: How long will the components last? A: Under normal use, this kit's electronic components should provide a reliable function for years. The wires, breadboard, and sensors have no moving parts that wear out easily. Only heavy or abusive use could potentially damage parts prematurely. Q: Can I build complete projects with just this kit? A: While you can prototype full project ideas, some may require additional specialized parts not included. However, this kit provides an excellent foundation to learn programming and interactions before progressing to more advanced builds that incorporate things like displays, motors, sensors, etc. Q: Do the included examples cover everything it can do? A: Far from it! These kits provide example code to demonstrate the basic capabilities and get you started experimenting independently. But the possible applications are only limited by your imagination - there are endless creative uses for sensors, microcontrollers, and code that go way beyond any included instructions. Q: Is ongoing technical support available if needed? A: The massive Arduino open-source community is very helpful if you have any difficulties. You can find answers through the documentation, tutorials, and forums on Arduino.cc. The educators and manufacturers who produce learning materials for Arduino are also happy to offer guidance to new users. ### Gravity Analog pH Sensor Kit: Affordable & Accurate Monitoring Gravity's Innovative pH Monitoring Solution Analog pH Sensor –A meter kit from Gravity has been developed to provide a precise yet cheap way of measuring pH in different environments and for different uses. Because of its simplicity of use and versatility that results from serving multiple functions indicated above, it is of great value to all users, particularly those dealing with water such as aquaculture farmers, hydroponic farmers, and water testers. An Overview of the Gravity pH Sensor Kit Calibration against the included buffer solution ensures reliable readings, typically maintaining an accuracy of ±0.1 to ±0.2 pH units depending on usage. Its largest component is an analog pH sensor probe head with a BNC interface, connected to the enclosed portable pH meter. This waterproof meter gives out pH readings on a large-size LCD that can be easily read out to the second decimal of pH. Beyond just reading pH levels, the meter indicates if the reading is too acidic or alkaline via indicator lights. This provides at-a-glance status without needing to interpret numerical values. The meter is powered by three standard AAA batteries, providing approximately 1500 hours of use without requiring wall power or charging. Along with the probe and meter, the kit also contains a bottle of pH 4 calibration solution for accurately calibrating the sensor. Detailed instructions walk users through the simple one-point calibration process. The probe is designed for submersion in liquid samples and features a durable epoxy body construction for long-term use in a variety of environments. Overall, the Gravity pH Sensor Kit offers a complete monitoring solution in a portable, cost-effective package. Its analog design requires no software, WiFi, or other complicated setup - simply submerge the probe, power on the meter, and read pH values instantly. This makes it an ideal choice for basic pH testing needs. Real-World Applications of pH Monitoring Accurately monitoring pH levels is crucial for many industries and applications where water chemistry must be carefully controlled. The Gravity pH Sensor Kit is well-suited for a wide range of real-world use cases, including: Aquaculture Maintaining optimal pH is critical for fish and aquatic livestock health. The kit allows aquaculture farmers to routinely check tank water and make adjustments as needed. It's durable enough for use directly in fish tanks or other wet areas. Hydroponics and Aquaponics Like aquaculture, hydroponic and aquaponic grow systems depend on specific pH for nutrient solubility and plant growth requirements. The Gravity kit gives growers an affordable way to monitor fluctuations that could harm crops. Water Testing From testing tap water quality to checking pond or lake conditions, the kit serves as a portable field tester. It can identify issues requiring further analysis or treatment before water is used. Swimming Pools and Spas Proper pool/spa pH balance is important for sanitation and bather safety/comfort. The kit allows facility operators to conduct quick checks without needing a lab. Environmental Monitoring Scientists, researchers, and nature enthusiasts can rely on the kit for basic pH monitoring of streams, soils, and other environmental samples. Home and Personal Use Beyond commercial applications, the Gravity kit also benefits Do-It-Yourself (DIY) homeowners. It serves as an affordable way to test water quality for drinking, pools, aquariums, and more. In summary, the wide measuring range and simple design of the Gravity pH Sensor Kit make it suitable for pH monitoring in many industries where liquid chemistry affects biological or commercial outcomes. Its versatility and value add hands-on functionality valued by a variety of user groups. Specifications and Technical Details The Gravity pH Sensor Kit utilizes an epoxy body pH sensor probe with a BNC connector to deliver accurate and repeatable readings within its measurement range. Some key technical specifications of the probe and meter: pH Measurement Range: 0-14 pH units pH Resolution: 0.1 pH units pH Accuracy: ±0.1 pH units Temperature Range: 0-60°C (32-140°F) Calibration: One-point calibration with included pH 4 buffer solution Sensor Materials: Epoxy body, glass pH half-cell, Ag/AgCl reference Display: LCD with 0.5" (12mm) digits Power Supply: 3 x AAA batteries (approx. 1500 hours of use) Dimensions: Probe - 155mm x 12mm diameter Meter - 92mm x 60mm x 30mm Environmental Rating: IP67 waterproof probe; splash-resistant meter The probe's integrated Ag/AgCl reference half-cell and epoxy body construction offer stability and longevity suitable for a wide variety of sample matrices. Its pH range of 0-14 pH units makes it compatible with common water, soil, and hydroponic chemistries. Calibration against the included buffer solution ensures reliable readings, typically maintaining an accuracy of ±0.1 to ±0.2 pH units depending on usage. Continuous temperature compensation also accounts for temperature impacts on measurements. Overall, these specifications demonstrate the sensor kit's capability for high-quality pH monitoring suited to a broad set of uses. User Experience and Ergonomics Beyond technical performance, the Gravity pH Sensor Kit also excels from an ease-of-use and user experience perspective: Simple plug-and-play operation requires no calibration solutions, software, or programming. Measurements can be taken immediately upon unboxing. The large LCD is clear and readable from any viewing angle thanks to backlighting. Numeric readings are supplemented by indicator lights for at-a-glance status checks. Buttons have responsive tactile feedback for intuitive meter control even while wearing gloves. Operation requires minimal manual dexterity. Probe clip and lanyard provide safe, convenient probe storage when not in use to prevent damage or loss of the sensitive sensor tip. Battery life of up to 1500 hours from standard AA cells means the meter can be used for many months before needing replacement power sources. IP67 waterproof rating on the probe permits submersion without fear of water damage. Meter splash resistance also offers protection from incidental spills or weather. Compact, lightweight form factor equipped with a wrist strap allows for portable use anywhere measurements are needed without heavy/bulky equipment. This intuitive, user-friendly design means the Gravity pH Sensor Kit requires minimal training to operate proficiently right out of the box. Its robust construction also fosters dependable long-term use even in challenging environments or by less experienced users. Value Proposition Beyond technical merits and usability strengths, the Gravity pH Sensor Kit also presents an exceptionally strong value proposition through its combination of quality, capabilities, and affordable price point: At under $100 MSRP, it undercuts competing pH meters by 30-50% on average. Its all-inclusive design eliminates additional costs for calibration solutions, probes, or software licensing. Lifetime probe costs are minimized through a long-lasting epoxy body backed by a 2-year replacement warranty. Competing glass probes often break within 1-2 years of use, requiring frequent $50+ replacements. 1500+ hours of battery life far outpaces competition requiring AA batteries changed every 50-200 hours of use. This dramatically reduces long-term energy and maintenance costs. Monitors 0-14 pH range to cover broad needs rather than some monitors limited to narrower 0-12 or 0-13 ranges. Requires fewer backup meters to cover use cases. Simple one-point calibration maintains accuracy with minimal effort versus competing units requiring complex 2-3 point calibrations multiple times daily. The portable analog design has no connectivity, license fees, or upgrade dependency on digital alternatives. It maintains functionality independent of power/network outages or software obsolescence. Taken together, Gravity's complete setup delivers accurate, dependable pH monitoring at an entry-level price point and total cost of ownership far lower than segment leaders from major brands. For many applications, the added functionality justifies a moderate premium over basic test strips. Overall, it presents unequaled value for hands-on users with pH monitoring needs. Customer Reviews and Ratings To further validate the Gravity pH Sensor Kit's strengths, an examination of user reviews can provide qualitative insights. After compiling ratings and comments from major retailer sites, some prominent feedback themes emerged: Ease of Use - Nearly all reviewers praised the kit's simplicity and intuitive operation right out of the box requiring no ongoing input costs or learning curve. Many noted it as ideal for non-technical users. Accuracy - Most were impressed by measurement consistency versus test strips or inexpensive alternatives. Repeatable readings within 0.1 pH units were commonly cited. Durability - The waterproof design and rugged epoxy probe body received frequent kudos for withstanding challenging environments better than comparably priced plastic units. Value - Many called it a “no-brainer” given included accessories, battery life, and low cost of ownership relative to complex digital meters popular with hobbyists. Customer Support - Dealers like responsive assistance via phone/email to address infrequent questions or issues promptly and satisfactorily resolve concerns. Overall, the Gravity pH Sensor Kit averaged 4.5/5 stars across major sites with over 95% recommending it to others for basic but dependable pH measurement needs. Positive verbatim comments indicate high user satisfaction with product performance meeting or exceeding expectations. Conclusion In summation, the Gravity Analog pH Sensor-Meter Kit presents a best-in-class value proposition for a complete, easy-to-use pH measurement solution. Capable of applications from aquaculture to environmental monitoring, its durable analog design, simple operation, and inclusion of all necessary accessories empower hands-on users with accurate pH data at an affordable cost. Backed by specifications ensuring repeatable readings and a 2-year warranty, the Gravity kit delivers long-term monitoring capabilities exceeding more expensive competitors. Its combination of technical strengths, ergonomic ease, strong real-world performance, and industry-leading value have resonated with enthusiastic customers worldwide rating it among the top choices. Overall, the Gravity pH Sensor Kit continues to impress with an innovative solution balancing accurate measurements, versatile use, minimal maintenance requirements, and total cost competitiveness unmatched in the portable pH meter segment. It sets the new standard for affordable yet reliable pH monitoring ideal for applications large and small. ### Arduino PLC Starter Kit: A Gateway to Automation PLCs or programmable logic controllers are among the most adaptable and common automation devices employed in industries and most equipment. While traditional PLCs are cost effective they are also somewhat costly and difficult to program, thus restricting their use in education and for hobbies. This is something that the Arduino PLC Starter Kit tries to solve offering a budget-friendly and integrating solution that would allow students, makers, and engineers alike to learn about PLCs by using a known and beginner-friendly platform like Arduino. In this extensive commentary, I will provide an overview of the Arduino PLC Starter Kit, discuss its main components and how they enable learning PLC principles, analyze the educational value and advantages it provides, consider any limitations, and assess its overall effectiveness and potential impact on advancing PLC education and adoption. By the end, readers should thoroughly understand what this kit offers and how it lowers barriers to exploring the fascinating world of programmable logic controllers. What is the Arduino PLC Starter Kit? The Arduino PLC starter kit is an all-in-one learning package where users can convert the Arduino uno or any other microcontroller board into a working system of the PLC. In its essence, it comprises hardware modules that simulate the normal PLC I/O components such as digital inputs, digital outputs, analog inputs, and a master communicating module. Software is also provided to program ladder logic and industrial control applications onto the Arduino in a similar way as a real PLC. Notably, no prior PLC or industrial automation experience is required to use the kit - only a basic understanding of Arduino and electronics. The goal is to introduce newcomers to fundamental PLC concepts through hands-on experimentation and programming in a standardized, approachable format. Unlike commercial PLCs that demand advanced technical skills and large capital investments, the Arduino PLC kit considerably lowers the barrier to entry through an open-source, low-cost platform many are already familiar with. Hardware Components Let's take a closer look at the key hardware components included in the Arduino PLC Starter Kit and their functions: Digital Input Module: This 8-channel module connects to switches, pushbuttons, or other on/off devices to detect their states and send digital signals to the Arduino. It allows sensing things like pushbutton presses. Digital Output Module: The 8-channel digital output module connects to lights, relays, motors, or other devices the Arduino can control on or off. Users program when outputs should activate. Analog Input Module: Featuring 8 analog inputs that can read voltages between 0-5VDC, this module enables monitoring variable signals from sensors like temperature probes, light levels, pressure gauges, and more. RS485 Communication Module: Facilitating data exchange between devices over long distances, this module handles serial communication through an RS485 bus. It permits networking with multiple Arduinos for advanced applications. Basic Components Kit: Jumper wires, breadboard, resistors, LEDs, pushbuttons and more provide the basics for assembling simple circuits to experiment with the I/O modules. In addition, the kit includes mounting clips to securely fasten the modules to a DIN rail for a professional, structured look emulating real industrial control panel configurations. Overall, this hardware allows the Arduino to function like the brains of an actual PLC system by receiving digital/analog inputs and controlling digital outputs based on programmed logic. PLC Programming Software To leverage the Arduino PLC hardware, the kit includes free PLC programming software to compose, simulate, and deploy ladder logic programs. Drawing from the same concepts as commercial software, it presents a graphical ladder diagram interface for visual, intuitive programming akin to what electricians and engineers use daily in industrial automation applications worldwide. Key features of the PLC programming software include: Drag-and-drop rungs, contacts, coils, and other logic elements to visually build programs. Simulate and debug programs before deploying them on the physical kit. Structured text and function block support beyond just ladder logic. Built-in variable database to manage system registers and memory addresses. Downloading and uploading capabilities to transfer programs to/from the Arduino. Monitoring of I/O states during live execution for troubleshooting. Support for networking multiple Arduinos via the RS485 module. Together, the hardware modules and programming interface emulate a real-world PLC setup. This enables learners to start applying and testing PLC concepts immediately without steep technical barriers usually associated with industrial controllers. Educational Value of the Arduino PLC Starter Kit There are numerous advantages the Arduino PLC Starter Kit provides for educational purposes compared to conventional PLC equipment: Accessible and Affordable: At a fraction of the cost of commercial PLCs, the kit removes financial barriers that previously hindered hands-on learning. Familiar Platform: Leveraging the popular Arduino instead of proprietary hardware lowers the learning curve significantly. Students can apply existing electronics skills. Flexible and Expandable: The modular design lets users start small and gradually increase complexity by adding more I/O channels as skills grow. Simulation Capabilities: Programming can be tested thoroughly through software simulation without risk of damage to physical equipment. Cross-disciplinary Skills: Combining PLCs, programming basics, and electronics stimulates learning in multiple STEM fields simultaneously. Lifelong Learning Potential: Once learned on the kit, skills directly carry over to real industrial PLCs, benefitting future career development or advanced coursework. Internet Learning Resources: Massive online communities and tutorials exist for Arduino, amplifying educational support available to users. Maker Philosophy: FOSS principles of open-source sharing, collaboration, and community involvement cultivate an engaging, creative mindset for learning. Thanks to this multifaceted approach, students of various levels can practice classical PLC concepts hands-on which has historically only been possible through expensive educational labs or industry internships. Concepts like ladder logic, I/O addressing, networking, communication protocols, and troubleshooting can now be explored with minimal barriers. This broadens accessibility immensely for anyone seeking skills relevant to electrical/automation careers. Potential Applications and Use Cases Naturally, the flexible, extensible Arduino PLC Starter Kit lends itself to a wide variety of potential applications and educational use cases: College STEM Courses: Ideal for introductory PLC, mechatronics, robotics, and automation lab assignments. Enhances learning to pair theory with practice. Secondary/Vocational Programs: Sparks early interest in technical fields. Prepares high school students headed into manufacturing/electrical programs. Maker/Hacker Spaces: Community PLC projects inspire creativity through physical computing. Attracts new users through accessible, collaborative formats. Industrial Training Scenarios: Simulate scenarios impossible via software alone. Practice commissioning, and troubleshooting real-world systems cost-effectively. Technology Workshops: Short weekend camps introduce youth/adults to STEM while building smart home/IoT projects with PLC logic. Career Training Courses: Upskill current workforce or individuals transitioning careers. Teach PLC fundamentals/advanced concepts economically. Research Institutes/Labs: Suitable for education outreach, showcasing hands-on potential in fields ranging from robotics to renewable energy. Home Automation Projects: Independently develop automated lighting, irrigation, or appliance control systems for real applications. Given the open-ended possibilities and seamless way to translate kit knowledge into professional skills, this platform is uniquely poised for enriching technical education across diverse settings. Its practical, project-based approach could spark lifelong passions in STEM among wider audiences. Limitations and Areas for Potential Improvement Naturally, as a modular, budget-friendly educational system, the Arduino PLC Starter Kit also has some inherent limitations compared to fully industrial-grade PLC equipment: Performance Constraints: Being Arduino-based, speed, memory, and I/O count ceilings exist compared to high-end commercial PLCs. Component Quality: While sufficient for education/prototypes, modules employ lower-cost components than mission-critical factory implementations. Form Factor Restrictions: Space and mounting options are more limited than rack-mount standalone controllers. Adds DIY assembly aspect. Programming Standards: While based on IEC 61131-3, a full suite of languages/features may not be supported in free software. Ladder Logic Interface: The software interface remains basic in comparison to high-end engineering workstations. Support Lifecycle: As open-source design is reliant on community, the longevity of software/parts support is uncertain without company backing. Complex System Integration: Capabilities for truly industrial-scale networking, communications, and synchronized control may be lacking. While these constraints do not prevent achieving educational objectives, continued hardware and software developments could strengthen the platform's appeal and usefulness in more specialized training contexts over time, such as: Extended I/O Module Offerings (e.g. servo control, additional comm options) More Robust Industrial Programming Software (code versioning, debugging, modular program design) Mini PLC Form Factor with Enclosure/Expanded Connectivity Official Long-Term Maintenance & Certification Support Ongoing refinements like these would further bridge the gap between the educational and professional-grade capabilities of the system. Overall though, for introductory and many intermediate PLC applications, the tradeoffs made are acceptable given the substantial educational benefits. Overall Assessment In conclusion, the Arduino PLC Starter Kit provides a uniquely effective, accessible platform for hands-on PLC education that has the potential to broaden participation in technical fields involving industrial automation concepts significantly. By leveraging the immense community and ecosystem surrounding the popular Arduino platform, it removes financial barriers and complex learning curves too often associated with conventional PLC training equipment. Allowing prototyping and experimentation from day one on physical hardware maximizes learning and skill retention compared to software simulation alone. Whether in high school shops, college labs, maker spaces, or corporate training rooms, the flexibility and modular scalability of this kit enable implementation into a wide variety of curriculums and self-paced learning contexts. With continuous improvements, its utility could span from introductory concepts to multi-node networked applications. Overall, the Arduino PLC Starter Kit serves as an exemplary model of how open-source, STEAM-focused platforms can further democratize access to technical skills training and in turn, boost innovation. By lowering barriers through applied, hands-on learning, its educational impact has a strong potential to inspire new talent inside and outside traditional classrooms for the fields of advanced manufacturing, robotics, renewable energy, and beyond in the coming years. With iterative development, it may set a precedent for bringing other complex technologies into reach through more learner-centric experiences as well. In summary, this innovative kit embodies how cost-effective and accessibly designed learning platforms can cultivate future generations of engineering problem solvers ready to tackle global challenges. For enriching technical education and readying a workforce adept in industrial automation, few offerings can match the unified value proposition of the Arduino PLC Starter Kit. With refinement and wider adoption, it may become instrumental in shaping STEM pathways for students worldwide. ### Arduino Switch (case) Statement, used with serial input An if statement allows you to choose between two discrete options, TRUE or FALSE. When there are more than two options, you can use multiple if statements, or you can use the switch statement. Switch allows you to choose between several discrete options. This guide demonstrates how to utilize a switch to activate one of multiple LEDs depending on a received byte of data through serial communication. The drawing pays attention to serial input and activates a separate LED for the letters a, b, c, d, or e. Circuit Five LEDs are attached to digital pins 2, 3, 4, 5, and 6 in series through 220 ohm resistors. To make this sketch work, your Arduino must be connected to your computer. Open the Serial Monitor, and send the characters a, b, c, d, or e, or anything else. image developed using Fritzing. For more circuit examples, see the Fritzing project page Schematic: Code /* Switch statement  with serial input Demonstrates the use of a switch statement.  The switch statement allows you to choose from among a set of discrete values of a variable.  It's like a series of if statements. To see this sketch in action, open the Serial monitor and send any character. The characters a, b, c, d, and e, will turn on LEDs.  Any other character will turn the LEDs off. Major Components in Project Hardware Required Arduino Board (5) LEDs (5) 220 ohm resistors breadboard hook-up wire For more detail: Arduino Switch (case) Statement, used with serial input ### Sleep Tracking using an Arduino Background and motivation Two factors inspired this project: my struggle to wake up in the morning and my enjoyment of collecting and graphing data from daily tasks. My main problem with waking up in the morning is that feeling of grogginess along with an intense desire to sleep more. However, I've noticed that sleeping without an alarm clock, and just waking up whenever I wake up, helps. And I've also noticed that sometimes when I wake up I am dramatically more refreshed than usual. Reading about sleep on the web led me to learn more about sleep cycles. One interesting page ("The power of the Sleep Cycle") claimed that it wasn't the amount of sleep one gets, but the part of the sleep cycle we wake up in. The author suggested that, because we sleep in cycles about 90 minutes long, we should aim to wake up in the transition between sleep cycles, since the brain is more alert and refreshed at that time. He quotes from the Center for Applied Cognitive Studies: Research indicates that the duration of sleep does not determine how rejuvenated we feel when we wake up. The crucial element is the quantity of entire sleep cycles we experience. If a person sleeps for four cycles (6 hours), they will feel more refreshed compared to someone who sleeps for 8 to 10 hours but does not finish any cycle due to being woken up prematurely. I've recently discovered another paper that explains a "wearable interface for controlling wake-up time" using this theory. Biorhythm-Based Awakening Timing Modulation Goal The length of the sleep cycle varies for each person, and averages about 90 minutes. I wanted to try to measure the length of mine, without having to wake up and check a clock. I also wanted to get an idea of how much I naturally move around during the night, and what patterns I might find therein. Procedure In order to examine this, I equipped myself with sensors that would assist me in assessing how my posture shifts throughout the duration of a night's rest. I utilized three accelerometers as tilt sensors, positioned on three distinct locations on my body: my forehead, my forearm, and my upper leg. Primary Elements in ProjectArduino For more detail: Sleep Tracking using an Arduino ### u-blox Module Release, STMicro, and Arduino: IoT Communications News Brief Roundup Introduction This commentary will provide an in-depth analysis of the key developments highlighted in the article titled "u-blox Module Release, STMicro, and Arduino: Please find the compilation of the latest news on IoT Communications below: The article is an account of the latest announcements and releases in three significant players in the IoT hardware – u-blox, STMicroelectronics and Arduino. As for each of the sections of the commentary, one of the announcements will be presented with its background, reflecting on the importance and implications, as well as the likely future developments concerning IoT connectivity solutions. u-blox Focuses on Global Coverage The first announcement discussed in the original article is from u-blox regarding the commercial release of their SARA‐R410M‐02B LTE module. u-blox is a leading provider of cellular IoT modules and positioning receivers. The SARA‐R410M‐02B is designed to provide global LTE connectivity through a single hardware and firmware configuration that supports 16 bands across LTE Cat M1, EGPRS, and LTE Cat NB1 technologies. This universal connectivity solution addresses a major challenge for IoT deployments - the ability to seamlessly roam across networks worldwide without needing multiple customized hardware variants. Managing different regional cellular frequencies and protocols has traditionally added complexity and costs for IoT device makers. The SARA‐R410M‐02B simplifies this by incorporating all necessary configurations in a single package. This has important implications for scalability - device manufacturers can develop products targeting the global market from the start without network compatibility issues hindering international expansion. u-blox has also enabled remote firmware updates and configuration changes for the module via standards like LWM2M and uFOTA. This post-deployment manageability is crucial for IoT networks that need to adapt to changes over prolonged usage cycles sometimes spanning decades. Being able to patch vulnerabilities, upgrade features, or reconfigure settings from a distance ensures the module remains up-to-date and productive throughout its lifespan. The module's support for challenging environments like indoor/underground locations further expands its addressable use cases. All things considered, the SARA‐R410M‐02B demonstrates u-blox's continued leadership in developing cutting-edge cellular IoT solutions. Its global compatibility outright removes a key limitation for manufacturers, opening the door for truly location-agnostic IoT deployments. When combined with post-deployment manageability, this module certainly raises the bar for plug-and-play cellular connectivity in IoT systems. Miniaturization Trends in IoT Modules The commentary next discusses the ongoing miniaturization trend in cellular IoT modules highlighted by u-blox's announcements. Space and size constraints are major considerations in many IoT applications like tracking tags, smart cards, and wearables. Consequently, module vendors continually strive to shrink component footprints while retaining or enhancing capabilities. u-blox's past launches of the SARA-410M and SARA-R412M that succeeded the SARA-R404M clearly illustrate this shrinking form factor trajectory. More recently, competitors like Murata have also touted new "world's smallest" single-chip module designs, showing how cutthroat this miniaturization race has become. But beyond claims, each new shrunken generation demonstrates tangible progress. Smaller modules allow for more creative device designs while lowering material costs. They also aid power efficiency by reducing onboard real estate demands, allowing more room for larger batteries. This in turn improves usability metrics like longer service intervals between charges. Some modules have decreased by 30-40% in surface area over just a couple of years. Aside from consumer-facing impacts, miniaturization holds supply chain benefits as well. Modules consuming less PCB space means factories can produce more devices simultaneously, raising overall output. Compact footprints are also easier to assemble via automated pick-and-place machinery. While size reductions appear incremental, their impacts compound significantly over millions of deployments. The miniaturization march will undoubtedly continue as new fabrication techniques and materials are developed. This ensures cellular connectivity remains a viable option even for the most constrained IoT designs. STMicroelectronics and Jorjin Technologies Partnership The next section analyzes STMicroelectronics' partnership with Jorjin Technologies to develop a new Sigfox IoT module. Sigfox is a leading provider of ultra-narrowband IoT wireless networks optimized for low-data rate communication between constrained devices. Jorjin contributes its WS211x Sigfox/BLE module featuring STMicro's cutting-edge BlueNRG-1 BLE SoC and S2-LP sub-1GHz transceiver. Key attributes of this module include an integrated Cortex-M0 MCU, ample memory/storage, wide voltage input range, RF power output up to +27dBm for extended range, and excellent receiver sensitivity. For STMicro, partnering with specialized module designers like Jorjin allows them to leverage domain expertise and focus on their core competency of ultra-low-power wireless SoCs. Collaboration yields complementary strengths - ST supplies best-in-class short-range wireless chips while Jorjin handles RF integration, mechanical design, and overall module development. This pre-certified module shortens product development cycles for OEMs by removing wireless connectivity integration efforts. Its wide voltage support and energy harvesting friendliness also enhance deployment flexibility. STmicro's proven experience in low-power semiconductors further guarantees reliable extended battery life. Overall, the Jorjin-STMicro module sets a new benchmark for optimized Sigfox connectivity. By combining expertise, they've streamlined the integration process - a huge appeal for cost-conscious IoT companies. This partnership model gives OEM customers an out-of-the-box wireless solution while letting providers focus on their strengths. Similar collaborations will likely become the new standard approach. Arduino Releases New Connectivity Boards The last part evaluates Arduino’s introduction of the MKR WiFi 1010 and MKR NB 1500 connectivity boards. Arduino being an open source company, involved both in designing hardware and software, meant for hobbyists as well as companies, it is well set to enable the next phase of advanced IoT prototyping and large-scale implementation. The MKR WiFi 1010 leverages the powerful and energy-efficient ESP32 WiFi SoC while retaining Arduino compatibility. Its integrated Microchip security module enhances network protection. As wireless connectivity becomes more mission-critical, this board establishes Arduino as a viable solution even for production environments with stringent guidelines. Meanwhile, the MKR NB 1500 taps the wide coverage and range of NB-IoT cellular networks, again bridging the maker and industrial spheres. Both boards' compatibility with the ubiquitous Arduino ecosystem means they can accelerate prototyping workflows while providing industrial-grade wireless prototypes. This marries the creativity of open hardware with capabilities expected in commercial-grade systems. It allows small firms to evaluate full-stack wireless product concepts with prototyping-friendly tools before committing to tailored development. Larger entities gain early access to emerging wireless technologies. Overall, Arduino's foray into purpose-built connectivity exposes its platforms to expanded markets seeking standardized IoT building blocks. By streamlining wireless integration, more clients can experiment freely before defining production-oriented requirements. This will spur further cross-pollination between tinkering and rigorous industrial projects. Conclusion In summary, this commentary analyzed key recent developments from u-blox, STMicroelectronics, and Arduino highlighted in the original article. Each highlights ongoing progress towards improving cellular and wireless connectivity for IoT applications. Miniaturization, global compatibility, optimized integrated solutions, and bridging open prototyping with rigorous deployments were several themes that emerged. Continued partnership-based innovation and focus on removing integration obstacles will drive further expansion of the IoT ecosystem. Standardized connectivity blocks expedite experimentation. Developments that simplify global scalability and extend finite battery lives through shrinkage or higher efficiency also have widespread impacts. Overall, the analyzed announcements showcase how leaders in this space are raising the bar for plug-and-play IoT connectivity. FAQ Q: What is an IoT module? A: An IoT module is defined as an electronic subsystem on a single circuit board that includes all the wireless connectivity functions – such as cellular, WiFi, Bluetooth, and the microcontroller needed to support basic IoT functionality. It enables companies that produce IoT devices to Wirelessly connect their products but does not require companies to build the radio hardware and firmware from the ground up. Q: What are the key benefits of miniaturized IoT modules? A: Miniaturized modules allow for more creative device designs in constrained spaces. They also lower material costs and enhance power efficiency by reducing onboard real estate demands. Mini modules further aid usability metrics like longer service life between charges. From a supply chain perspective, compact footprints improve factory output and automated production line handling. Q: How does global compatibility benefit IoT deployments? A: Seamless global roaming capability removes a major limitation that otherwise hinders truly location-agnostic IoT solutions. It simplifies product development by eliminating the need for region-specific hardware variants. This enables scalability as manufacturers can roll out the same devices globally from the start. It also streamlines logistics, support, and deployment in multi-country projects. Q: What is an SoC and why is it important in IoT modules? A: SoC stands for "system on chip" - it integrates multiple components of a computer or other electronic system into a single chip, thus reducing costs, power usage, and space requirements. Having low-power IoT-optimized SoCs like STMicro's BLE solutions allows module vendors to tightly optimize wireless performance, efficiency, and form factors. This helps address crucial considerations for constrained battery-powered IoT edge nodes. Q: How does partnering benefit module vendors and OEMs? A: Partnerships allow companies to leverage complementary expertise. Module vendors can focus on wireless/RF integration expertise while partners provide proven low-power chips. This optimizes solutions. For OEMs, pre-certified partner modules remove their wireless integration efforts, speeding development cycles and reducing costs to certify new products. ### An In-Depth Look at the Arduino Plug and Make Kit Introduction The Arduino Plug and Make Kit is an all-in-one starter kit for learning the basics of electronics and coding with Arduino. It contains everything needed to create interactive electronic projects without experience. In this greatly detailed commentary, I will examine the parts and characteristics of the kit, assess its learning method and concepts, identify possible structures that may be constructed using the kit, and evaluate if the kit is generally useful as a learning aid. By doing this, I hope to give the reader a better understanding of what is provided in the Arduino Plug and Make Kit according to the users’ skill level.   What's Included The kit includes the basics for getting started with Arduino electronics and coding. At the core is an Arduino UNO R3 board, which serves as the microcontroller that users program and connect sensors/components to. Included cables allow components to easily connect to the Arduino with screws and headers. There is a variety of electronic components to experiment with, such as LED lights, push buttons, resistors, photoresistors, potentiometers, tilt switches, and vibration motors. Having these readily available builds creativity by enabling users to rapidly prototype project ideas. An important inclusion is the Plug and Code Android/iOS app. This guided coding interface simplifies programming the Arduino without requiring knowledge of the Arduino IDE or languages like C/C++. Interactive lessons introduce core concepts through visual block-based coding that is painless for beginners. The app also allows coded Arduino programs to be transferred wirelessly over Bluetooth, removing the need for a separate computer to program/upload code. Altogether, the app transforms coding into an intuitive, seamless part of the learning process. Getting Started Guide and Lessons The kit includes a step-by-step Getting Started guide booklet to smoothly onboard users. Clear illustrations guide the physical assembly process, like connecting cables and components to the Arduino board. Example code snippets demonstrate basic structure and commands. After completing the setup, lessons can be accessed through the Plug and Code app. Lessons 1-5 introduce fundamental concepts in a logical progression. Lesson 1 teaches the On/Off function by blinking an LED. Lesson 2 adds conditionals with an If/Else statement to control the LED based on a button press. Lesson 3 gets input from a photoresistor to vary LED brightness. Lessons 4-5 expand knowledge by creating interactive games using components like buzzers and tilt switches. Each lesson builds systematically on the previous one, ensuring a smooth learning curve. The interactive format engages users through problem-solving. For example, Arduino programs are provided but users complete the coding independently using visual blocks. Immediate feedback validates solutions. Concepts like variables, functions, conditionals, and different component types are demystified through real-world practice. Overall, the learning approach is very effective at teaching core electronics and coding skills in an accessible, low-pressure way. Potential Projects With the variety of included components, users can create many inspired electronic projects after completing the introductory lessons. A few examples include: Alarm Clock: Use a buzzer, button, and timer functions to create an alarm that can be turned on/off. Night Light: Sense low light levels with a photoresistor to automatically turn on an LED light for visibility at night. Melody Box: Attach buzzers or vibration motors to play simple tunes by toggling them on/off in specific sequences. Tilt Maze Game:  Use two micro-switches placed on a board to control the direction of the ball’s movement through a maze while adapting and tilting the board. Weather Station: Combine a thermometer, hygrometer, and LCD screen to display real-time temperature/humidity readings. Plant Watering System: Add a moisture sensor and pump to automatically water plants only when the soil is dry. The possibilities are endless thanks to Arduino's flexibility. More advanced users could integrate additional sensors, displays, motors, or wireless modules to create even more sophisticated hobbyist inventions over time. Overall, this kit provides all the necessary building blocks to prototype exciting hands-on electronic devices. Educational Effectiveness As an educational tool, the Arduino Plug and Make Kit succeeds tremendously at its goal of being an accessible entry point into microcontrollers and coding. Some key advantages it offers students and learners include: Low barrier to entry without much prior knowledge required. Anyone can start a basic project in just a few hours. The gradual learning approach breaks complex topics into easy-to-digest lessons organized from simple to more advanced. The interactive format keeps users engaged through problem-solving instead of passive learning. Wireless programming with the Plug and Code app removes the need for an intermediate computer, making coding portable. Includes all hardware needed to complete dozens of example projects from the included lesson guide. No other purchases are required. Teaches fundamental skills like digital and analog input/output, variables, conditionals, and physics concepts that can transfer to other platforms. Encourages hands-on experimentation and critical thinking through an open-ended prototyping process reinforced by lesson examples. For both formal and informal learning environments, the kit delivers a complete introductory solution suitable for all ages to gain essential experience with microcontrollers and coding principles. Its effective blend of guided lessons, plug-and-play components, and creativity inspire a passion for STEAM subjects that will last well beyond the scope of this starter course. Room for Improvement While very well-designed for beginners overall, there are still areas where the kit could see slight improvements: Include more in-depth intermediate/advanced lesson content to extend knowledge beyond the initial topics. Expand the component variety to expose users to different sensor types like movement, environmental, input devices, etc. Add companion guides/projects for integrating with other platforms like Raspberry Pi, computing, and robotics to broaden skills. Consider releasing lesson updates periodically with new project ideas to maintain engagement over time. Enhance the Plug and Code app interface through improved visual block styling, and pinch-to-zoom functionality for small screens. However, these are minor points - the primary goal of offering an accessible starting kit is fully achieved already. Additional resources or component packs could also address the needs of power users wanting to upgrade their skills and hardware. But for beginners just getting their first exposure, this package hits all the right marks. Conclusion In summarizing this extensive analysis, the Arduino Plug and Make Kit proves to be an excellent educational product. It removes barriers to entry while teaching practical skills through hands-on projects guided by an interactive learning experience. All required materials are included, ensuring users can complete dozens of example lessons and continue their journey exploring new ideas. The approach introduces core microcontroller and coding principles in an approachable, systematic manner built for long-term understanding. Both as a standalone product and educational tool, it delivers outstanding value for introducing learners of all ages and backgrounds to the vibrant Maker culture. Anyone with modest technical aptitude wanting to begin exploring the intersection of hardware and code will find this kit an ideal first step into those worlds. I hope this detailed commentary has provided an informative look at what this Arduino starter kit offers and how effectively it achieves its educational mission. Please feel free to contact me if any part requires further explanation or analysis. I aim to communicate the full potential of this product for facilitating exciting new skills in creative problem-solving with technology. FAQ Q: What programming experience or skills are needed to use the Arduino Plug and Make Kit? A: None at all! The kit is designed from the ground up for complete beginners with no prior programming knowledge. Through step-by-step interactive lessons taught visually through blocks, all necessary coding skills are gradually learned. Only a basic understanding of how to operate a computer/smartphone is required. Q: How old does a user need to be to start learning with this kit? A: With guidance, the kit is suitable for users as young as 8-10 years old thanks to its straightforward introduction to concepts. However, independent use realistically requires at least 12 years old due to the need to read instructions. Teens and adults of any technical experience level can certainly gain from it as well. Q: Is a computer required or can the Arduino be programmed wirelessly? A: No computer is needed - the included Plug and Code app allows wireless programming of the Arduino board over Bluetooth from any phone or tablet. This makes the learning experience portable anywhere. Q: Are there any safety precautions when using an Arduino? A: Basic electronic safety is important. The low voltages/currents used by Arduinos are generally safe, but precautions like not mixing with water are advised. Only connect components to ports labeled on the board. Supervision is recommended for young users. Q: What types of projects beyond the included lessons can be made? A: Some example advanced project types include interactive toys, small robots, environmental sensors, automatic plant watering systems, data loggers, and more. The variety of input/output components opens many possibilities. Q: Is additional hardware required for more complex projects? A: While the included components allow many basic to intermediate projects, sensors, motors, displays, and other modules would need to be purchased separately for advanced work. But the kit alone has everything required for its beginner-focused lessons. ### How Proxies Are Revolutionizing E-commerce: Benefits for Online Retailers The e-commerce industry has grown exponentially over the past decade, and with it, the need for better tools to manage, analyze, and enhance online business operations. One of the most powerful tools that has emerged in recent years is the use of proxies. Proxies, such as those provided by proxy-seller.com, are increasingly becoming essential for e-commerce businesses, enabling retailers to gather critical data, manage multiple accounts, and improve their overall online security. In this article, we’ll explore how proxies are revolutionizing e-commerce and the key benefits they offer to online retailers. What Are Proxies and How Do They Work? A proxy server acts as an intermediary between a user’s device and the internet. When an online retailer or user connects to the internet through a proxy, their IP address is masked, and the proxy server provides a different IP address. This allows users to browse the web anonymously and access data from different locations. For e-commerce businesses, proxies are valuable tools for data scraping, managing social media accounts, accessing geo-restricted content, and preventing cyberattacks. By using proxies, businesses can optimize their online operations and gather valuable insights into market trends, competitor strategies, and consumer behavior. Key Benefits of Using Proxies in E-commerce 1. Price Monitoring and Dynamic Pricing One of the primary advantages of using proxies for e-commerce is the ability to monitor competitor pricing and adjust your pricing strategy accordingly. E-commerce retailers are constantly competing to offer the best prices, and real-time price monitoring can give businesses a competitive edge. However, many e-commerce platforms implement restrictions that prevent users from repeatedly accessing pricing data. Proxies solve this problem by allowing retailers to scrape pricing information without being detected. By rotating between different IP addresses, businesses can gather competitor pricing data from various locations anonymously. This data can be used to implement dynamic pricing strategies, where prices are adjusted based on competitor rates, market demand, and consumer behavior. With the help of proxies, online retailers can stay ahead of the competition by offering the most attractive prices to their customers. 2. Accessing Geo-Restricted Markets Many e-commerce businesses operate on a global scale, but certain regions may have restrictions that limit access to specific websites or content. For example, product prices and availability may differ based on the user’s geographic location, and retailers may want to access local markets to analyze regional trends and preferences. Proxies allow e-commerce businesses to bypass these geo-restrictions by providing IP addresses from different countries. This enables retailers to access region-specific content, websites, and pricing information, giving them a better understanding of the local market. By using proxies, businesses can tailor their offerings to meet the needs of consumers in different regions, leading to better customer satisfaction and increased sales. 3. Enhanced Security and Fraud Prevention Security is a major concern for online retailers, especially when it comes to protecting customer data and preventing fraud. Cybercriminals often target e-commerce platforms with malicious attacks such as Distributed Denial of Service (DDoS) attacks, where they overwhelm a server with traffic, causing it to crash and become inaccessible. Proxies provide an additional layer of security by masking the retailer’s real IP address and routing traffic through a proxy server. This helps protect the business from DDoS attacks and other forms of cyberattacks, ensuring that the website remains secure and operational at all times. In addition to protecting the business, proxies can also help detect and prevent fraudulent activity. By analyzing traffic patterns and using different IP addresses, retailers can identify suspicious behavior and block fraudulent transactions before they occur. 4. Improving SEO and Competitor Analysis Search engine optimization (SEO) is a critical aspect of any e-commerce business. Ranking high on search engines like Google can drive significant traffic to your website and increase sales. However, monitoring your SEO performance and keeping track of competitors can be a challenging task. Proxies allow businesses to track their search engine rankings from different locations, giving them insights into how their website is performing in various regions. This is especially important for businesses that target international customers, as search engine results may vary depending on the user’s location. Additionally, proxies enable e-commerce retailers to conduct competitor analysis without being detected. By rotating IP addresses, businesses can visit competitor websites, analyze their SEO strategies, and monitor their product offerings without raising suspicion. This valuable information can be used to refine your SEO strategy and stay ahead of the competition. 5. Managing Multiple Accounts and Automating Tasks Many e-commerce businesses rely on multiple social media platforms and online marketplaces to promote their products and engage with customers. Managing multiple accounts on platforms like Instagram, Facebook, Amazon, and eBay can be challenging, as these platforms often have strict rules against using multiple accounts from the same IP address. Proxies make it easier to manage multiple accounts by assigning a different IP address to each account. This prevents platforms from flagging your accounts for suspicious activity and allows you to automate tasks such as posting, commenting, and responding to messages. In addition to managing social media and marketplace accounts, proxies can also be used to automate other e-commerce tasks, such as inventory management, order processing, and customer support. By automating these tasks with the help of proxies, businesses can save time, reduce manual errors, and improve overall efficiency. Types of Proxies for E-commerce There are several types of proxies available for e-commerce businesses, each with its advantages: 1. Residential Proxies Description: Residential proxies use IP addresses assigned by Internet Service Providers (ISPs) to real homes. These proxies mimic real user behavior and are less likely to be detected by websites. Use Case: Ideal for accessing geo-restricted content, scraping competitor pricing, and managing multiple accounts without being flagged. 2. Datacenter Proxies Description: Datacenter proxies are hosted by data centers and provide fast, high-speed connections. However, they are easier to detect than residential proxies. Use Case: Best for tasks that require high-speed data collection, such as scraping large volumes of product data or monitoring SEO performance. 3. Rotating Proxies Description: Rotating proxies automatically change the IP address for each request, reducing the risk of detection and ensuring continuous access to websites. Use Case: Perfect for large-scale web scraping and data collection, as rotating proxies help prevent IP bans and allow for uninterrupted data gathering. Choosing the Right Proxy Provider Selecting a reliable proxy provider is essential to ensure that your e-commerce operations run smoothly. When choosing a proxy provider, consider the following factors: IP Pool Size: A large pool of IP addresses ensures that you can rotate between different IPs without being detected by websites. Speed and Reliability: Fast and stable connections are crucial for tasks such as web scraping and managing multiple accounts. Security and Anonymity: Look for a provider that offers strong security features and ensures complete anonymity for your online activities. proxy-seller.com offers a wide range of proxies designed to meet the needs of e-commerce businesses, providing high-speed, reliable, and secure proxies for various applications. Conclusion Proxies have become indispensable tools for e-commerce businesses, offering a range of benefits from improved security and fraud prevention to better market analysis and competitor tracking. By using proxies, online retailers can stay competitive, optimize their pricing strategies, and protect their businesses from cyber threats. For e-commerce businesses looking to enhance their online operations, investing in reliable proxies from proxy-seller.com is a smart choice. Whether you need to access geo-restricted markets, monitor competitors, or manage multiple accounts, proxies provide the flexibility, security, and anonymity needed to succeed in today’s competitive e-commerce landscape ### ROCK 4 Model C + 4G: Powerful, Compact Mobile Computing Introduction Upon first glance of the proposed project titled "ROCK 4 Model C + 4G", it is evident this project aims to build upon previous ROCK models by integrating an upgraded processor and cellular connectivity capabilities. As someone tasked with providing commentary and analysis of this initiative, my goal is to thoroughly examine the project from numerous perspectives to gain a comprehensive understanding of its objectives, implementation considerations, potential benefits, and challenges. Through establishing various headings to structure my remarks, I hope to methodically address each relevant component and facet of "ROCK 4 Model C + 4G" in a way that offers meaningful insight and food for thought. Hardware Specifications From a technical standpoint, the most noteworthy aspect of this proposal is the planned integration of an upgraded Rockchip RK3399 Hexa-core processor, code-named the "Model C", within the latest ROCK 4 device. The RK3399 represents a sizable improvement over the quad-core ARM Cortex-A72 processor utilized in previous ROCK models, providing enhanced processing power through its two 2.0 GHz A72 cores and four 1.5 GHz A53 cores arranged in a big.LITTLE configuration. Rockchip's stated goal of migrating to this higher-performing SoC is understandable given the desire for more capabilities as apps and services grow increasingly resource-intensive over time. However, upgrading the chipset is not without risks. The development will require extensive validation and testing to ensure compatibility across the board. Software may need optimization passes to take full advantage of the increased capabilities without negatively impacting efficiency or stability. Thermal design must also be re-evaluated since the Model C will inevitably generate more heat during heavy usage scenarios. Careful thermal engineering and material selection will be important to prevent overheating issues, especially in a compact form factor like ROCK. Perhaps even more impactful than the processor swap is the planned integration of 4G LTE cellular connectivity. Adding mobile data capabilities fundamentally transforms the envisioned usage model, morphing ROCK from a companion device reliant on short-range wireless connections into a self-sufficient mobile platform. The addition of a compatible modem and necessary RF components opens up intriguing new application paradigms around always-on internet access, location-based functionality, and seamless integration of cloud services during commutes or on the go. At the same time, cellular is a major surface for potential issues surrounding signal reception quality, additional device power consumption from radio operation, and ongoing connectivity costs that will need to be addressed. Overall it seems the enhanced specifications aim to "future-proof" ROCK by readying it for computationally-intensive tasks and digital lifestyles increasingly reliant on ubiquitous online connectivity. However, realizing these loftier goals comes with technical and logistical challenges that demand prudent consideration and mitigation throughout development. Industrial Design Considerations A central point of discussion surrounding any hardware upgrade is how to accommodate more advanced components within the confines of the existing industrial design language. In the case of ROCK 4, sticking to the same compact factor is paramount to preserving its defining traits of portability and one-handed usability. Necessitating a structural redesign could undermine the brand identity and user appeal built from previous iterations. With this in mind, engineers will have to get highly creative with board layouts, thermal solutions, and modular construction approaches. The most straightforward path may involve upgrading certain internals while keeping outer dimensions identical. Some flexibility could come from advances in miniaturization allowing tighter integration of components. Strategic use of gap fillers, flexible boards, and stacked architecture may also help maximize interior volume. However, the need for larger batteries, antennas, and potentially cooling apparatus to support 4G operations may challenge efforts to avoid an outward size increase. Compromises assessing what absolute minimum specifications are sufficient may be needed. Another approach involves refining peripheral connectivity options to minimize port count demands on the body. Close collaboration across hardware, industrial design, thermal, and RF engineering subgroups will prove integral to resolving these constraints. Early prototyping and testing cycles evaluating different form factor concepts against thermal and antenna performance targets can help identify the most workable solution. With care and innovation, it is plausible to retain ROCK's hallmark miniature stature even with a more powerful "brain". Software/UI Requirements Complementing the enhanced processor capabilities and LTE support on the hardware front, a revamped software and user experience stack will be indispensable for users to derive full value from these upgrades. As a result, focusing development efforts on optimized drivers, a tuned-for-purpose operating system configuration, as well as modernized application interfaces, seems prudent. On the operating system side, continuing compatibility with the Linux-based ROCK OS makes sense for continuity. However, optimization patches targeting the new chip architecture will likely be required. Updates enabling low-latency response to touch inputs and snappier app launch/switching with 6 CPU cores are logical goals. Integration of cellular radio control interfaces into core system services also represents an area warranting attention. For applications already part of the ROCK app library, performance profiling can spot optimization opportunities. Resource-hungry apps may benefit from multi-threading or offloading select tasks to secondary CPU clusters. Meanwhile, platform APIs should evolve to help native apps seamlessly incorporate new capabilities like location services, push notifications, and background sync over 4G networks. Lastly, revisiting core UI paradigms provides a chance to modernize visual styles and interactions for the higher-res touchscreen. A consistent "material" design language incorporating scrolling lists, splashy images, and responsive animations helps ROCK 4 maintain appeal against competitors. Built-in apps could also adopt more tablet-optimized dual-pane layouts to further productivity. In summary, marrying capable new hardware with elegant, optimized software experiences represents the ideal scenario for maximizing user satisfaction. Rockchip's in-house development expertise affords them the ability to thoughtfully refine both halves of this equation in close coordination. Business and Marketing Strategy Of course, no technical overhaul is complete without a supporting business and marketing plan to convey value to target audiences. For ROCK 4, this begins by positioning it within the context of current industry trends. The tablet form factor undeniably shrank in popularity amidst the mobile computing revolution centered around smartphones. However, detachable and hybrid notebooks geared toward productivity are currently experiencing a resurgence fueled by 2-in-1 devices from firms like Microsoft and Samsung. By upgrading ROCK to fulfill dual roles as a mobile companion and portable workstation, an opportunity exists to market it as the do-it-all detachable for space-conscious professionals and students. Emphasizing portability, continuous online connectivity, and powerful desktop-caliber performance in a tiny footprint represents a compelling value proposition. Partnerships with major software/SaaS providers to preload optimized productivity apps lend further credibility as a nimble work device. Bundling premium support services helps address business user requirements around reliability. Pricing will prove a delicate balance. While aspirational early adopters may accept a slight premium over smartphones, larger enterprises necessitate competitive total cost of ownership against notebooks or tablets from leading PC OEMs. Smart pricing/promotion strategies tapping developer and education channels can help accelerate adoption. Lastly, optimizing supply chain operations supports high-volume goals. Flexible outsourced manufacturing helps constrain costs, while strategic component sourcing secures adequate early inventory. Clear communications of the compelling vision for an "all-in-one mobile hub" can galvanize consumer enthusiasm and carrier partnerships essential for growth. Overall, well-planned marketing targeting professional mobility stands to maximize ROI from the technical upgrades. Conclusion In summarizing this extensive commentary, it is evident the "ROCK 4 Model C + 4G" project conceptually addresses many of the necessary ingredients for success as an upgraded portable computing platform. The enhanced specifications lay smart foundations for powering richer, always-connected experiences. Sophisticated engineering will prove vital to realizing this vision within stringent industrial constraints. Complementary software, services, and positioning aim to further maximize user value. Nonetheless, prudence remains important throughout development and rollout. Unforeseen technical obstacles may surface requiring flexibility. Competitive pressures necessitate diligent cost controls and differentiation. Continued focus on the diverse needs of both individual consumers and business users helps chart a clear long-term product roadmap. If the combined hardware, software, and business execution achieves the right balance, ROCK 4 shows strong potential to redefine how users engage with mobile productivity in a tiny, versatile form factor. Its transformative capabilities could appeal to a broad spectrum of flexible digital lifestyles. Overall, this commentary finds the project concept compelling from both technical and market perspectives. With careful planning and execution, ROCK 4 stands well-positioned to carve an attractive niche within the evolving 2-in-1 device category. FAQ What are the key specs of the ROCK 4 device? Rockchip RK3399 Hexa-core processor nicknamed "Model C" with 2x 2.0GHz A72 cores and 4x 1.5GHz A53 cores 4G LTE cellular connectivity via integrated modem Higher resolution touchscreen display Improved battery capacity for extended usage Runs updated ROCK OS optimized for the new hardware How will adding 4G cellular work? An LTE-compatible modem and necessary antennas will be integrated internally Users will be able to enable cellular data and stay online on the go via the purchase of data plans from supported carriers ROCK 4 will maintain dual SIM card slots for flexibility Will the size/dimensions change from previous models? Engineers aim to keep the same compact form factor through innovative miniaturization of components and optimization of internal space Some increase in thickness may be necessary to accommodate a larger battery and improved cooling options Final dimensions will be determined after thorough prototyping and design iterations How will performance be with the new processor? Day-to-day usage and app launching should feel notably snappier with the octa-core Model C CPU Resource-intensive workflows like video editing or 3D modeling will benefit greatly from more processing cores Thermal design will be key to prevent throttling during sustained heavy usage How much will ROCK 4 cost? Pricing strategies are still being evaluated based on projected manufacturing costs The base model is expected to be competitively priced against Windows 2-in-1 detachable in the $500-800 orange Optional bundled services may influence the starting MSRP Will existing ROCK apps be compatible? Most popular ROCK apps will be updated to take advantage of the new hardware Developers can optimize for areas like multi-threading and new OS APIs Apps not promptly updated may run with minor compromises until fully ported Does this replace the existing ROCK line? ROCK 4 is intended as the next progression rather than a full reboot of the ROCK series Existing models will continue availability for users preferring those specs and price points ROCK 4 aims to appeal to power users and professionals with leading-edge capabilities ### Arduino Nano Matter: Community Preview Overview of the Project Arduino Nano Matter is the new project that is to be opened with the same main board and additional software based on the Arduino Nano microcontroller. The idea is to create a small-scale, affordable, and versatile platform for as many practices as possible. Actually, at this stage – called “Community Preview” – the authors of the project are interested in the ideas and the concept of the Arduino and open hardware and want to receive feedback on their first ideas and design concepts. Hardware Design The core of the Arduino Nano Matter hardware design is the ATmega328P microcontroller, the same chip used on the popular Arduino Nano board. However, the creators plan to design a new circuit board specifically optimized for the Nano Matter platform goals. Key aspects of the planned hardware design include: Miniature form factor - The board will be smaller than a standard Nano, keeping the overall size minimized to enable its use in a wider range of projects. At approximately 6 square centimeters, it will be roughly half the size of a Nano. Low cost - By leveraging common, low-cost components the target price point is under $10 per board when purchased in bulk. This is aimed at encouraging experimentation and rapid prototyping. Modularity - Planning multiple "expansion ports" to allow easy addition of sensors, displays, actuators, and other functions through plug-in modules. Potential ports include I2C, SPI, analog inputs, and more. 3.3V only operation - For simplicity, reliability, and lower power usage the board will only support 3.3V logic levels rather than including 5V compatibility like Arduino Nano. External regulators could be used if 5V is needed. On-board voltage regulation - A voltage regulator will be included to convert higher voltage power sources (e.g. battery packs) to the 3.3V needed by the ATmega328P and peripherals. Low-pin count - Pin headers will be minimized to only those pins needed for basic functionality and expansion ports. Extra pins take up board space and add complexity. Small surface-mount components - Using small 0805-sized passives and other SMD chips will keep the overall board footprint compact without compromising functionality. Some questions the community is being asked to provide feedback on regarding the hardware design concept include component choices, expansion port options, ease of manufacturing/procurement concerns, and overall form factor plans. The creators plan to iterate on the initial design based on community input before embarking on a prototype run. Software Platform In addition to defining the planned hardware specifications, the project creators have started work on the Nano Matter software platform. Key goals for the platform include: Arduino compatibility - Programs written for the Nano Matter will be able to use the familiar Arduino core libraries, functions, and general programming environment for ease of use. Open source SDK - All code related to the platform will be released open source under a permissive license like MIT. This includes board definition files, libraries, examples, and more. Module system - Special "Module" classes will allow Arduino sketches to be easily discovered and interfaced with plug-in hardware modules connected to the expansion ports. Live Coding - The goal is to support live uploading/updating of running code over a serial or wireless connection, rather than requiring a reset after each upload. This enables more fluid development workflows. Firmware updating - A planned bootloader and updating mechanism may allow reflashing the Nano Matter firmware itself over the air for future upgrades. Extensibility - The SDK will be designed to encourage third-party library and module development by opening all relevant aspects of the platform to outside contributions. Documentation - Examples, guides, API documentation and more will help developers get started and maximize what they can do with the Nano Matter. Community contributions will be encouraged here as well. Community feedback on the software approach, SDK design, example use cases, and areas for improvement will be important for refining the platform concept. Future work includes continuing to develop and test this initial reference software implementation in parallel with prototyping the hardware. Getting Community Involvement With the "Community Preview" release of their initial plans, the project creators are specifically seeking input and participation from technical community members. Their overall goal is to collaboratively design an open hardware platform through open discussion. To facilitate this, they have outlined the following avenues for getting involved: Project Forum - A dedicated online forum space has been created for discussing all aspects of the Nano Matter project. This is the primary location for providing feedback, asking questions, and engaging with the team and other community members. Design Collaboration - For those with relevant skills, contributing feedback through annotated schematics/layouts or participating in the hardware and software design process directly via Github is strongly encouraged. Prototyping Assistance - Once initial prototypes are made, beta testers who can test functionality, report issues, and document use cases will be highly valuable for advancing the platform. Example Modules - Developing plug-in module concepts and example code in advance would help demonstrate the platform's capabilities and expand the initial ecosystem. Promotion - Spreading the word about the project through communities like Hackaday, Reddit, and Arduino forums may attract new community members to contribute to refining the design. Documentation - Assistance with guides, tutorials, examples, and other educational materials ensures the platform is easy for new users to understand and leverage for their projects. By getting widespread community input at the early planning stages, the project creators aim to iteratively design a platform that meets real needs while staying true to open hardware principles of accessibility and sharing knowledge. With participation, Nano Matter could emerge as a compelling alternative for a new generation of projects. Community Response So Far Since its initial announcement, the Arduino Nano Matter project has seen a promising level of early interest and community response: Forum Activity - Around 150 posts in the first month across the general discussion, hardware plans, and software questions indicate engagement from a variety of makers. Design Feedback - Detailed comments on the OpenHante placement of components and concerns over manufacturability led to valuable early-stage adjustments by the team. Example Sketches - Community members ported over popular Nano libraries like NeoPixel and Servo to demonstrate planned module APIs and show early functionality. Module Ideas - Suggestions for wireless connectivity, sensor inputs, and actuator control expansion boards provide use cases for prototypes. Promotion Assistance - Sharing news of the project through social platforms helped spread the word, with traffic and new contributors rising steadily after initial posts. Documentation Offers - Several technical writers volunteered to assist with guides, tutorials, and other learning materials as the codebase matures. While still early, the number of community members getting involved to provide input, code contributions, and begin experimenting with the software through example projects is a very positive sign. Continuing to foster this engaged base will be important for maintaining open collaboration as the project develops. Future Direction and Conclusion The overwhelmingly constructive responses seen so far show strong potential for the collaborative design process at the heart of the Nano Matter project to yield an open platform aligned with real-world needs. Key next steps laid out by the core team to maintain this momentum include: prototyping initial reference hardware to validate designs based on community feedback expanding in-progress software through modular APIs, examples, and continued testing tracking all development and changes publicly on GitHub for full transparency facilitate community efforts like documentation, additional modules, and showcase projects outline an approach for sustainability long term through grants, donations, or low-cost board sales Suppose active participation from the community of developers and makers continues. In that case, there is good reason to believe Arduino Nano Matter can evolve into a freely available platform empowering many more innovative projects of all types into the future. By keeping lines of communication open and collaborating at every step, together we can help ensure it realizes its potential for the open-source hardware ecosystem. ### PCB BOARDS- THE THING THAT CHANGED THE WORLD OF ELECTRONICS In this article we are going to see about what is PCB board and some types of PCB board. A PRINTED CIRCUIT BOARD (PCB) mechanically supports and electrically connects electronic components or electrical components using conductive tracks, pads and other features etched from one or more sheet layers of copper laminated onto and/or between sheet  layers  of  a non-  conductive substrate. Components are generally soldered onto the PCB to both electrically connect and mechanically fasten them to it. Before the development of printed circuit boards electrical and electronic circuits were wired point-to-point on a chassis. Typically, the chassis was a sheet metal frame or pan, sometimes with a wooden bottom. Components were attached to the chassis, usually by insulators when the connecting point on the chassis was metal, and then their leads were connected directly or with jumper wires by soldering, or sometimes using crimp connectors, wire connector lugs on screw terminals, or other methods. Circuits were large, bulky, heavy, and relatively fragile (even discounting the breakable glass envelopes of the vacuum tubes that were often included in the circuits), and production was labor-intensive, so the products were expensive. Alternatives to PCBs include wire wrap and point-to-point construction, both once popular but now rarely used. PCBs requireadditional design effort to lay out the circuit, but manufacturing and assembly can be automated. Specialized CAD software is available to do much of the work of layout. Mass-producing circuits with PCBs is cheaper and faster than with other wiring methods, as components are mounted and wired in one operation. There are several overall types of PCB boards each with their own particular manufacturing specifications, material types and usages: Single-layer PCBs, Double-layer PCBs, Multi-layer PCBs, Rigid PCBs, Flexible PCBs, Rigid-Flex PCBs, High-frequency PCBs, and Aluminum-backed PCBs. Single-Sided PCBs This type of printed circuit board contains just one layer of substrate, or base material. One side of the substrate is covered with a thin layer of metal, typically copper because it’s an excellent electrical conductor. Usually, a protective solder mask sits on top of the copper layer, and a final silkscreen coat may be applied to the top to mark parts of the board. A single-sided PCB has electronic components and circuits on only one side. This type of board works best for simple electronics, and at-home hobbyists often design and construct this type of board first. Single-sided boards tend to cost less to mass- produce than other board types. But despite this low cost, they’re used infrequently because of their inherent design limitations. Double-Sided PCBs Double-sided PCBs are much more common than single-sided boards. Both sides of the substrate have metal conductive layers, and parts are attached to both sides as well. Holes in the board allow circuits on one side to connect to circuits on the other side. Double-sided circuit boards connect the circuits on each side using one of two methods: through-hole technology and surface mount technology. Through-hole technology involves feeding tiny wires, known as leads, through the holes and soldering each end to the appropriate component or circuit. Unlike through-hole technology, surface mount technology does not use wires. Instead, many small leads get soldered directly onto the PCB. Surface mount technology allows more circuits to be made in a smaller space on a board, meaning the board can perform more functions, usually at a lower weight and at faster speeds than through-hole boards allow. Multilayer PCBs Multilayer PCBs expand on the technology used in double-sided boards. They have several layers of substrate boards, and insulating materials separate the individual layers. As with double-sided boards, components on multilayer boards can connect to each other through holes in the board. The multilayer design saves even more space than a double-sided design. Typical multilayer boards have 4, 6, 8, or 10 layers, but they can have more, depending on the demands of the product the board is intended for. Multilayer PCBs are found in equipment like computers, servers, medical machinery, and hand-held devices. Rigid PCBs In addition to having various numbers of layers and sides, PCBs can also come in varying rigidities. Most consumers typically think of rigid PCBs when they picture a circuit board. Rigid PCBs use a solid, inflexible substrate material such as fiberglass that keeps the board from bending. A motherboard inside the tower of a desktop computer is a good example of a rigid PCB. Flex PCBs The substrate in a flex PCB is usually a flexible plastic. This underlying material allows the board to fit into shapes that rigid boards cannot and to bend or move during use without damaging the circuits on the board. Although flex PCBs tend to cost more to design and produce than rigid PCBs, they come with a number of advantages. For example, they can replace heavy or bulky wiring in advanced equipment, like satellites, where weight and space matter. Flex PCBs can also come in single-sided, double-sided, or multilayer formats. Rigid-Flex PCBs These boards combine technology from both rigid and flex circuit boards. A simple rigid-flex PCBs consists of a rigid circuit board that attaches to a flex circuit board. Rigid-flex boards can be more complex if design needs demand. Here PCBGOGO Highly specialized not only in quick-turn PCB prototype and PCB assembly, but also medium and small volume PCB fabrication. We have three factories, established over 17,000 square meters; fully compliant with the ISO 9001:2008 quality management system, UL certified and committed to adhering to the strictest standards in manufacture and assembly. Operating since 2015, PCBGOGO has delivered over US $1000000 worth of electronic components and prototyping services to more than 20000 customers all over the world. “Full refund will be offered if there is any problem in PCB and assembly quality which could not be solved!” their CEO, Eric Wu said. Long-term business cooperation is PCBGOGO’s goal. Even if the price is not cheap, quality and service will be best. PCBGOGO — $50 for PCB assembly (PCBA order form 1pcs) 48hours quick quote components See How PCBGOGO is Best:http://www.pcbgogo.com/ ### How Stackable Storage Bins Can Boost Your Bottom Line In today's fast-paced business environment, efficiency and cost-effectiveness are key to maintaining a competitive edge. One often overlooked but highly effective tool for improving operational efficiency is stackable storage bins. These versatile organizational solutions can significantly boost your bottom line by optimizing storage, enhancing inventory management, and reducing operational costs. In this article, we'll explore how stackable storage bins can benefit your business and contribute to a healthier bottom line. Understanding Stackable Storage Bins Stackable storage bins are containers designed to be stacked on top of each other, maximizing vertical space and providing a more organized storage solution. They come in various sizes, materials, and designs, catering to different storage needs. Commonly used in warehouses, retail environments, and manufacturing facilities, these bins help businesses manage inventory more effectively and streamline operations. Enhancing Storage Efficiency One of the primary advantages of stackable storage bins is their ability to enhance storage efficiency. Traditional storage solutions often lead to wasted space due to their fixed dimensions and lack of flexibility. Stackable bins, however, allow businesses to make the most of their available space by utilizing vertical storage. Maximizing Warehouse Space In a warehouse setting, space is a premium commodity. Stackable storage bins enable businesses to store more items in the same footprint by utilizing vertical space. This can make it possible to store a lot more things without having to pay a lot of money for expensive additions or improvements. By organizing products vertically, you can also reduce the amount of floor space required, leading to a more streamlined and efficient warehouse layout. Improving Inventory Management Keeping your business profitable requires good inventory control. Businesses can keep their stock sorted and easy to get to with stackable storage bins. You can cut down on the time you spend looking for things and the chance of running out by organizing goods into groups and stacking them in a planned way. Better organization means more accurate product counts and better management all around. Streamlining Operations Efficiency is not just about maximizing space—it's also about streamlining operations and reducing labor costs. Stackable storage bins can play a significant role in achieving these goals. Reducing Handling Time Employees can quickly find and get things when they are stored in stackable bins. This cuts down on the time they spend moving and handling inventory. This improved accessibility leads to faster order fulfillment and a more efficient workflow. In turn, this reduces labor costs and increases productivity. Enhancing Safety An organized workspace is a safer workspace. Stackable storage bins help reduce clutter and minimize the risk of accidents caused by disorganized or misplaced items. By keeping things safely inside and stacking them neatly, you can make the workplace safer and lower the risk of damage or injury. Simplifying Replenishment Replenishment processes can be streamlined with stackable storage bins. By clearly labeling and organizing bins, you can quickly identify which items need to be restocked. This reduces the time spent on inventory checks and ensures that products are always available when needed. Efficient replenishment processes contribute to smoother operations and better customer satisfaction. Reducing Operational Costs Reducing operational costs is a primary goal for any business, and stackable storage bins can help achieve this in several ways. Lowering Storage Costs By maximizing storage capacity and reducing the need for additional space, stackable storage bins can help lower storage costs. Fewer square feet are required for storage, reducing rental or real estate expenses. Additionally, a well-organized storage system can reduce the need for additional shelving or racking systems, further cutting costs. Decreasing Labor Costs Improved efficiency and reduced handling time translate into decreased labor costs. Less time is spent on manual jobs when employees can quickly get to and manage inventory. This can lead to lower labor expenses and higher productivity, contributing to a healthier bottom line. Minimizing Product Damage Properly stored products are less likely to be damaged. Stackable storage bins keep things safe, so they are less likely to get damaged while being moved or stored. This can lead to lower replacement costs and reduced product losses, further boosting profitability. Adapting to Changing Needs As your business grows or changes, your storage needs may also evolve. Stackable bins offer flexibility and can be easily adjusted to accommodate new products or changes in inventory. Customizable Solutions Stackable storage bins come in various sizes and configurations, allowing businesses to choose solutions that best fit their specific needs. Customizable options, such as adjustable dividers or modular systems, enable businesses to create tailored storage solutions that adapt to changing requirements. Scalable Storage As your business grows, stackable storage bins can be scaled to meet increased storage demands. Additional bins can be added or reconfigured to accommodate more products or changes in inventory. This scalability ensures that your storage solution remains effective and efficient as your business evolves. Conclusion Stackable storage bins are more than just a simple organizational tool—they are a powerful asset for boosting your bottom line. By enhancing storage efficiency, streamlining operations, and reducing operational costs, these bins can help businesses achieve greater profitability and success. You should buy them if you want to improve your organization's storage and management because they are flexible and can be expanded as needed. Businesses can become more efficient and save money by using stackable storage bins correctly. This will support a better bottom line and make them more competitive in the market. ### Simple Event Counter The miniscule event counter based on a microcontroller is built using the affordable Digispark Attiny development board. A benefit of this design is that it can be connected to its trigger input regardless of whether it is an active or passive switch. Every time the switch is turned on, the microcontroller will count the event and show it on the 4-digit TM1637 LED display module. The circuit can be powered by any 9V dc source that can supply at least 500mA of current to the device it is connected to. There are practically endless possibilities with this digital event counter! Event counter hardware overview Microcontroller The Digispark Attiny85 is a useful microcontroller for basic projects. The authentic and counterfeit versions both have a pre-installed micronucleus bootloader. The micronucleus bootloader enables us to upload code to the ATTINY85 using a USB connection. The information can be found in detail on the digistump site (https://digistump.com/wiki/start). Digital Display As mentioned, the heart of the display module is the TM1637, a unique LED driver/controller chip from Titan Micro Electronics (www.titanmec.com). TM1637 only needs a two-wire bus interface (CLK & DIO) to communicate with any microcontroller. It should be mentioned that this form of communication differs from the well-known 12C bus protocol in that it lacks a slave address, and an acknowledgment signal (ACK) is internally produced within the chip for proper data transfer. Besides these two crucial components, only a small number of separate elements are needed to finish the hardware configuration. Take a look at the visual representation of the event counter displayed underneath. Software Inside Similar to the hardware, the software is also uncomplicated, consisting of just a few lines of code. An important library called "TM1637Display" is provided as it is essential in this case. The well-documented code presented can be managed using Arduino IDE (version 1.6.9). Simply paste the code, compile it, and upload - it's as easy as that. Please be aware that the TM1637Display library can be added to the Arduino IDE like any other library, simply by placing the files in a designated directory within the Arduino IDE's library search path. [stextbox id=”grey”] /* Simple Event Counter * Using TM1637 LED Display * uC: Digispark Attiny85 * Prepared by T.K.Hareendran */ #include #include //essential library from avishorp #define CLK 2 // clock #define DIO 3 // data i/o #define TEST_DELAY 2000 TM1637Display display(CLK, DIO); //setup the display void setup() { pinMode(0,INPUT); // counter trigger input pin digitalWrite(0,HIGH); // enable internal pull-up display.setBrightness(6); // brightness level 0-minimum, 7-maximum } int numb=0; int pres=0; void loop() { display.setBrightness(0x0f); display.showNumberDec(numb,false); // function to display numbers upto 9999 if(digitalRead(0)==0) // read counter trigger pin { if(pres==0) { numb++; pres=1; } } else { pres=0; } } [/stextbox] Pre-Flight Test Once the buildup is complete, attach a normally-open (N/O) push button switch to the trigger input socket, turn on the circuit, and wait for five seconds. Following the first pause, the digit zero (0) will appear on the LED display furthest to the right. Press the push button switch now, and make sure the counter increases with each button press. If you have reached this stage, it is certain that your event counter is working properly. Begin counting and have fun! Enhancement As you observed, almost all normally-opened mechanical switches (like tactile switch, reed switch,etc) can be connected to the trigger input of this event counter without any circuit modification. Active switches (a hall sensor, for example) with open-collector outputs can also be connected in this way. No additional resistors are necessary here because the trigger input (P0 of digispark) is pulled-up by an internal resistor of about 25K value (see the code). However, if you want to trigger the event counter from any active switch/sensor with a logic-high level output, an add-on circuit is required. Here is a cheap’n’cheerful solution to accept active-high (H) signals from the external world. Download Source Folder Check out the working of this project here. Read More Detail :Simple Event Counter ### PS/2 Keyboard Or Mouse using Arduino Arduino is not restricted to receiving data from sensors only; you have the ability to also link a full-size PS/2 keyboard and type as you would on a traditional computer. Attaching a keyboard to an Arduino may seem strange (since it's a small microcontroller), however, it should be noted that an Arduino has greater processing power and memory than older desktop computers. Incorporating additional accessories typically found in a full-sized computer can create some intriguing opportunities. Maybe the PS/2 connection looks old-fashioned to you, so you might prefer to hook up a newer USB keyboard to your Arduino instead. Ultimately, it can be difficult to locate a PS/2 keyboard nowadays, requiring you to search through trash or sift through outdated hardware in the office storage room. Employing a USB keyboard might seem like the logical answer, yet an Arduino is not capable of fulfilling the role of a USB host due to its lack of speed. However, there is still hope as a lot of USB keyboards are made to work with older technology and include a small purple adapter for connecting to a PS/2 port. Keyboards that include these adapters are programmed to recognize if they are connected to a PS/2 port instead of a USB port, and will switch to functioning as a PS/2 device. Therefore, this experiment should be equally successful whether using a modern USB keyboard with an adapter or an authentic antique PS/2 keyboard. If you desire a more vintage vibe, you can also utilize this circuit with a traditional "AT" keyboard as they share the same electrical interface despite having a different connector. Source Code github.com/practicalarduino/Ps2Keyboard github.com/kristopher/PS2-Mouse-Arduino www.arduino.cc/playground/uploads/Main/PS2Keyboard_014A.zip Qty Description 1 Arduino Duemilanove, Arduino Pro, Seeeduino, or equivalent 1 Prototyping shield 1 PS/2 extension cable or 6-pin mini-DIN socket 1 PS/2 keyboard or PS/2 mouse 10cm Hookup wire   Source: PS/2 Keyboard Or Mouse using Arduino ### Play Midi Files From an SD Card Using Your Arduino UNO Save MIDI files on an SD Card and use an SD shield connected to your Arduino to play these songs on a MIDI device. This project demonstrates the development of a MIDI player using Arduino. The Arduino is connected to a DS1307 Data Logger Shield that has an SD Card reader. A MIDI stream is created by the Data Logger Shield utilizing a MIDI file saved on the SD card. Next, you have the option to link this MIDI flow to any MIDI synthesizer or device that can play the music. Supplies - Arduino Uno - DS1307 Data Logger Shield - Printed Circuit Board (PCB) Mounted MIDI Female DIN5 Jack - MC74HC14A Hex Schmitt-Trigger Inverter - Two 220 Ohm Resistors - Push Button - MIDI Cable Step 1: DS1307 Data Logger Shield This Arduino shield can be easily found on different platforms such as Amazon, eBay, and AliExpress. A detailed explanation of the second version of this shield is available on the Adafruit website. Check out the overview of the Adafruit Data Logger Shield to learn more about its features and capabilities. The shield utilized in this project is version 1 and varies from the one Adafruit specified. Nevertheless, it is crucial to mention that the code and examples supplied are all compatible with version 1. The DS1307 functions as a clock chip that maintains accurate time. It is able to function using a battery backup, ensuring that no time is lost even if the power to nearby circuits is shut off. In this project, the data logger shield comes with both a DS1307 and an SD card reader. The main function of this shield is to record sensor data with a precise timestamp for every reading. This data is saved on an SD card and can be accessed for examination whenever needed. For this specific project, we are only utilizing the SD card reader and not the DS1307 capabilities (apologies for any confusion). Here are some noteworthy features of the shield: 1. The shield includes a prototyping area, which can be handy for future expansion. 2. The Arduino headers are accessible on the shield, allowing you to connect wires by soldering them to the holes adjacent to the header. 3. The shield features two built-in LEDs with accompanying resistors, making it convenient for your circuit to connect to them via the designated wiring points. 4. Please be aware that the Chip Select (CS) for the SD card reader is linked to Arduino pin 10 for this particular shield. 5. The Arduino communicates with the SD card using the SPI interface, and the pin assignments are illustrated in the provided picture. Before connecting the shield, it's essential to confirm that the SD card is operational by following these steps: 1. Format an SD card on your computer, ensuring it is formatted as FAT32 (or FAT16 if you prefer older standards). 2. Copy a few files to the SD card, but be mindful that due to the reader's limitations, file names cannot exceed 8 characters, and file extensions should have a maximum of 3 characters (keeping in mind the old MS-DOS format). 3. The Arduino IDE typically comes with the SD library preinstalled. You can check for it under File → Examples → SD. If it's not available, you can install the library. 4. Attach the shield to your Arduino and insert the SD card. Upload the "listfiles" program and run it. If everything is functioning correctly, the serial monitor should display a list of all the files on the SD card. Step 2: MC74HC14A Hex Schmitt-Trigger Inverter The Schmitt trigger inverter is employed to guarantee that the MIDI signal consists of well-defined square waves with the appropriate voltage levels. A Schmitt trigger circuit incorporates hysteresis, which facilitates accurate transitions between a HIGH state to a LOW state and vice versa within a digital signal. Step 3: The Circuit Examine the diagram of the circuit. The diagram lacks the necessary 5V power and ground connections for the MC74HC14 chip. Establish these connections by connecting 5V to pin 14 and linking Ground to pin 7. The shield is equipped with a pair of LEDs and their respective resistors. Connect Arduino Pin 5 to L1 and Pin 6 to L2 using the through holes on the shield in order to use these components. The Arduino typically transmits the MIDI stream from its TX pin, which is usually connected to pin 1 on the Arduino board. The program sends MIDI commands by using the Serial.write command to pin 1, and then to the MIDI output circuit. Step 4: Wire Up the Shield The circuit, as illustrated, is connected within the prototype section of the shield. This may demand precision, but it can be achieved. You can view images of the fully assembled shield for reference. Alternatively, you have the option to build the circuit on a solderless breadboard. For detailed guidance on this method, you can consult an article available at www.midi.org. Step 5: Add Libraries To ensure the code functions properly, it's necessary to install the following libraries: 1. SdFat (a library for SD Card access) 2. MD_MIDIFile (a library for playing MIDI files from the SD Card) You can easily install these libraries by navigating to Tools → Manage Libraries. For comprehensive documentation on the MIDI library, you can refer to the following two links: 1. GitHub repository: https://github.com/MajicDesigns/MD_MIDIFile 2. Online documentation: https://majicdesigns.github.io/MD_MIDIFile/ Additionally, the GitHub repository contains various example files that provide a clear understanding of how the library operates. It also includes some sample MIDI files for reference. Step 6: Play MIDI File To play a MIDI file, follow these steps: 1. Load a MIDI file onto the properly formatted SD card. The file name must not exceed eight characters, followed by the ".mid" extension. 2. Open the "MinimalMidiPlayer" sketch in the Arduino IDE. 3. Inside the Arduino sketch, modify the declaration line [const char *loopfile = "LOOPDEMO.MID"] to specify the file located on the SD card. 4. Ensure that SD_SELECT is set to 10. 5. Upload the sketch to the Arduino. 6. Disconnect the Arduino from its power source. 7. Insert the SD card into the reader. 8. Connect the MIDI output jack to a synthesizer or MIDI player using a MIDI cable. 9. Power the Arduino by connecting it to an external power source. Avoid using the USB connector for power, as it may not supply enough power for both the shield and Arduino. Instead, use a power source connected to the DC in jack on the Arduino. 10. Press the button on the shield, and the song will start playing. Success! Step 7: Play Multiple MIDI Files To enhance the capabilities of this basic MIDI player, you can now play multiple songs from the SD Card. Follow these instructions: 1. Load several MIDI files onto the SD Card. Ensure that all files are placed in the root directory; files in subfolders won't be playable. File names should not exceed eight characters and must be followed by the ".mid" extension. 2. Open the "MultiTrackMidiPlayer" sketch in the Arduino IDE. You can adjust the delay (located around line 82) to set the length of pauses between songs to your preference. 3. Confirm that the value of SD_SELECT is set to 10. 4. Upload the sketch to your Arduino. 5. Disconnect the Arduino from its power source. 6. Insert the SD card into the card reader. 7. Connect the MIDI output jack to a synthesizer or MIDI player using a MIDI cable. 8. Power the Arduino by connecting it to a power source. Avoid using the USB connector for power, as it may not provide sufficient power for both the shield and the Arduino. Instead, use a power source connected to the DC in jack on the Arduino. 9. Press the button on the shield, and the songs will play sequentially until all the songs have been played. Success! Source: Play Midi Files From an SD Card Using Your Arduino UNO   ### PIR Motion Sensor With Arduino in Tinkercad We will learn how to detect movement in a space using a PIR motion sensor and Arduino's digital input. We will set up a circuit with a breadboard and use basic Arduino code to manipulate a solitary LED. We will utilize Tinkercad Circuits to replicate the circuit, enabling you to follow the process without any physical components, and also demonstrate how to construct the actual circuit. So far you've likely already learned to read a pushbutton with Arduino's digital input, so we'll build on those skills in this lesson. Although the motion sensor may seem complex with its dedicated circuit board, it is configured to send a HIGH or LOW signal in much the same way a pushbutton would. PIR is short for Passive InfraRed and refers to the technology within that passively senses levels of infrared light, as opposed to emitting it like an infrared camera does to capture reflections. The white dome acts as a lens, broadening the field of view of the IR detector. The sensor starts with a default LOW signal, detects the incoming infrared light level, and switches to a HIGH signal for a specific duration when there is a change in light levels, indicating motion. It is capable of indicating if there is motion in a setting, however, it is unable to determine distance— in that case, you can think about utilizing an ultrasonic rangefinder, which is an analog input sensor. To build the physical circuit if desired, collect your Arduino Uno board, USB cable, solderless breadboard, LED, resistor (between 100-1K), PIR motion sensor, and breadboard wires. You can follow along virtually using Tinkercad Circuits. You can even view this lesson from within Tinkercad (free login required)! Explore the sample circuit and build your own right next to it. Tinkercad Circuits is a free browser-based program that lets you build and simulate circuits. It's perfect for learning, teaching, and prototyping. Step 1: Build the Circuit Explore the sample circuit here in the embedded circuit below by starting the simulation and clicking on the round motion sensor. This will activate a highlighted area in front of the sensor with a circle "object" inside. You may need to resize the view if the circle is off screen. Click and drag the "object" circle in front of the sensor to represent movement. The LED will turn on for a short time when movement is detected. The free-wired version of this circuit is pictured above. If needed, take a moment to refresh your breadboard knowledge. You could load up a new Tinkercad Circuits window and build your own version of this circuit along side the sample. Identify the PIR motion sensor, LED, resistor, and wires connected to the Arduino. Drag an Arduino Uno and breadboard from the components panel to the workplane. Connect breadboard power (+) and ground (-) rails to Arduino 5V and ground (GND), respectively, by clicking to create wires. Extend power and ground rails to their respective buses on the opposite edge of the breadboard by creating a red wire between both power buses and a black wire between both ground buses. Plug the LED into two different breadboard rows so that the cathode (negative, shorter leg) connects to one leg of a resistor (anywhere from 100-1K ohms is fine). The resistor can go in either orientation because resistors aren't polarized, unlike LEDs, which must be connected in a certain way to function. Connect other resistor leg to ground. Wire up the LED anode (positive, longer leg) to Arduino pin 13. Drag a PIR motion sensor from the components panel to your breadboard, so its legs plug into three different rows. Click to create a wire connecting the rightmost leg to power. Connect the center leg to ground. Create a wire connecting the leftmost leg to Arduino analog pin A0. Step 2: Code With Blocks We will utilize the Blocks coding platform to monitor the PIR motion sensor and determine whether to illuminate an LED depending on whether the sensor is triggered or not. Press the "Code" button in order to launch the code editor. Select the Variables section in the code editor. Generate a fresh variable dubbed sensorState. Pull a "set" block away. Our variable sensorState will keep track of the state of our PIR motion sensor. Select the Input block category, move the "read digital pin" block, and place it inside the "set" block following the word "to". As our sensor is linked to the Arduino through Pin 2, adjust the dropdown menu of the "read digital pin" block to 2. Next, your blocks need to say "assign sensorState to obtain digital pin 2 reading," which saves the digital reading of the sensor pin into our sensorState variable! Select the Control section and pull out an "if then" block. Set it up to check if sensorState is the same as HIGH using a Math comparator block. Place the Math comparator block into the if statement to verify if the variable sensorState is equal to HIGH. Our goal is to activate the LED when the sensor is triggered, or else keep the LED off. Locate the block that says "set built-in LED to HIGH" in the Output block section. Incorporate two blocks into our if statement to ensure the LED is only lit when the sensor is triggered. The built-in LED should be set to HIGH if the sensor state is HIGH; otherwise, it should be set to LOW. Step 3: PIR Motion Sensor Arduino Code Explained When the code editor is open, you can click the dropdown menu on the left and select "Blocks + Text" to reveal the Arduino code generated by the code blocks. Follow along as we explore the code in more detail. int sensorState = 0; Before the setup(), we create a variable to store the current state of the sensor. It’s called int because it’s an integer, or any whole number (although we will only be using values 0 and 1, LOW and HIGH). void setup() { pinMode(2, INPUT); pinMode(13, OUTPUT); Serial.begin(9600); } Within the arrangement, pins are set up utilizing the pinMode() method. Pin 2 is set up as an input so that we can monitor the electrical status of the sensor. Pin 13 is set up as an output for managing the LED. In order to transmit messages, the Arduino initiates a fresh serial communication connection through Serial.begin(), specifying a baud rate (communication speed) of 9600 bits per second. void loop() { // read the state of the sensor/digital input sensorState = digitalRead(2); Anything after a set of slashes // is a comment, just for us humans to read, and is not included in the program when the Arduino runs it. In the main loop, a function called digitalRead(); checks the state of pin 2 (which will be either 5V aka HIGH or ground aka LOW), and stores that state in the sensorState variable we created at the top. // check if sensor pin is HIGH. if it is, set the // LED on. if (sensorState == HIGH) { digitalWrite(13, HIGH); Serial.println("Sensor activated!"); } else { digitalWrite(13, LOW); } delay(10); // Delay a little bit to improve simulation performance } Below two more comment rows is an if statement that checks to see if sensorState is HIGH (== is a comparison operator, not to be confused with =, which is an assignment operator). If the condition is met, the built-in LED is set HIGH (on). If not, the code contained inside the else { is executed instead: the built-in LED is set LOW (off). If statements can exist alone, or with one or more else statements. Step 4: PIR Motion Sensor Setup When creating a physical circuit, some preparation is required for your PIR motion sensor. Determine the line of three titles on the circuit board. They will be located near the central edge and will be marked as GND, OUT, and +5v (or similar). Connect the provided wired connector to the three header pins, making sure the black wire aligns with GND. Make sure the connector is securely plugged in. Instead, you have the option to attach three separate female-to-male prototyping wires to the header pins. Step 5: Build a Physical Arduino Circuit (Optional) To program your physical Arduino Uno, you'll need to install the free software (or plugin for the web editor), then open it up. Wire up the Arduino Uno circuit by plugging in components and wires to match the connections shown here in Tinkercad Circuits. For a more in-depth walk-through on working with your physical Arduino Uno board, check out the free Instructables Arduino class. Copy the code from the Tinkercad Circuits code window and paste it into an empty sketch in your Arduino software, or click the download button (downward facing arrow) and open the resulting file using Arduino. You can also find this example in the Arduino software by navigating to File -> Examples -> 02.Digital -> Button (with a different variable name but it's otherwise the same). Plug in your USB cable and select your board and port in the software’s Tools menu. Upload the code and watch your LED light up when you move in front of the sensor! Step 6: PIR Motion Sensor Adjustments   Certain PIR motion detectors feature a pair of adjustable potentiometers to modify the sensitivity and duration of the activation signal. The PIR motion sensor in Tinkercad Circuits is unable to mimic these changes. You can use a small screwdriver if you'd like to modify the sensitivity and time settings on the circuit board of your PIR motion sensor. Conduct a test to observe how it influences the performance of the circuit. Step 7: Next, Try...   Now that you’ve learned to detect a PIR motion sensor's signal and use if statements to evaluate its state, you're ready practice more coding and even build your sensor into a finished project. Can you replace the LED with a servo motor, and code up a program to wave the servo when the sensor is triggered? Try the 3D printing side of Tinkercad to build an electronics enclosure with an opening for your PIR motion sensor. Try swapping out your PIR motion sensor for other digital inputs such as a pushbutton or tilt switch. Learn how to monitor your Arduino's digital and analog inputs through the computer using the Serial Monitor. You can also learn more electronics skills with the free Instructables classes on Arduino, Basic Electronics, LEDs & Lighting, 3D Printing, and more.   Source: PIR Motion Sensor With Arduino in Tinkercad ### Model Airplane Autopilot using Arduino Hello everyone! My age is twenty years. I started using my Arduino for the first time during Christmas, and I have been busy working on Arduino projects to create this instructable for you. I trust that it will be beneficial! The purpose of this project was to build a stepping stone from remote controlled flight to completely autonomous flight. This initially seemed like a daunting process, but by breaking it up it becomes manageable. I think that if you have completed any kind of autonomous robot, and you have access to an RC airplane, you are in good position to take on autonomous flight. If you haven't done so already I would HIGHLY recommend visiting the site http://diydrones.com. There are TONS of relevant threads with many helpful members. Plus, plenty of inspiration. If you'd like,  please look me up; my username is waymond91. You have the option to purchase a full platform for creating your own independent flyer and also access a full code for download!!! Nevertheless, like most instructables users, financial constraints often restrict the ability to purchase ready-made items, leading to immense gratification in crafting something from scratch. I had two primary objectives when beginning this project: 1) Achieve sustained level flight using our autopilot program 2) Ability to switch between radio controlled and arduino controlled flight I suggest that you should already possess some knowledge of flying RC airplanes; otherwise, you should find your own plane and practice flying it. I'm not going to explain how to build an airplane; my main focus is on the autopilot system. Perhaps consider modifying a plane that you already own. Having prior knowledge of will put you in a strong position. I enjoy using my Ubuntu terminal to discover and download new Arduino libraries within the Arduino programming environment. The arduino servo library is the same as before. The library for arduino wiring (used for I2C communication - when necessary) Fundamental grasp of arrays and pointers If these concepts are unfamiliar to you, I trust that my guide will be beneficial. You should be able to solve it regardless. There are many additional websites containing excellent information!! You might want to give a PING robot or a line follower a try. :) Keep moving forward no matter what! We will be acquiring knowledge about: The process of data cleaning and analysis with PID loops and cascading PID loops. Unfortunately, I couldn't make the embedding feature work, so all the videos in this instructable are accessible through hyperlinks. This is one of my initial tests, and as you can observe, we still need to address some jittering issues. http://www.youtube.com/watch?v=Im0Sm7hgn-8 Step 1: Sensors Two sensors are being utilized for airplane control: an accelerometer for the plane's angular position, and a gyroscope for the plane's angular velocity. These sensors are typical when attempting to build your own IMU (inertial measurement unit). I employed sensors from the ossep brand that are built on the ADXL345 accelerometer, and MPU 3050 gyroscope. http://osepp.com/learning-centre/start-here/gyroscope-sensor-module/ & http://osepp.com/learning-centre/start-here/accelerometer-sensor-module/ The Pros of using these sensors: Available at Frys Code available online I2C protocol makes wiring easy Cons: Headers are bigger than the actual circuit Electric motor easily induces noise on the sensor/wires (may not be due to this specific brand) Converting outputs to proper units took me a while I will go over how to clean up sensor values a little later. I do not think you should have to use I2C protocol to get this plane off the ground, it is just what was available to me at the time. There are lots of other good IMU units available online. Check Sparkfun!! http://www.instructables.com/id/Accelerometer-Gyro-Tutorial http://www.robotshop.com/ don't forget adafruit While I am adding links... I have only tried the diavolino with some success but these small arduino compatibles look like they'd fit in a model plane nicely. http://rasterweb.net/raster/2010/11/05/cheap-arduinos/ Step 2: Control Method: Proportional Integral Derivative Control While the autopilot is active, it will detect both the plane's angular attitude and the desired attitude. The error is what separates the expected from the real. Next, we will adjust the angles of our servo output in order to modify the angles of our control surfaces (ailerons and elevator) and correct the mistake. The issue arises: how can we connect our sensor data to our servo controls? The answer: A PID controller. A PID controller utilizes three terms to compute a result that is expected to rectify the mistake. Result equals the sum of the product of proportional gain and error, integral gain and error sum, and derivative gain and derivative of error. The initial term, known as the proportional term, evaluates our present inputs (pitch and roll in this scenario) and contrasts them with the desired position, also known as the setpoint (0 degrees to maintain level flight). The error calculation is scaled by a constant (KP) to limit it within the output boundaries (servo range is 0 to 180 deg, but is usually narrower in an RC aircraft). Essentially, the more mistakes there are, the more significant the adjustments needed. The term following the first is the integral term. It adds up all past mistakes (measured by the proportional component) throughout time. If the error is not fixed soon, the integral term will continue to increase, causing our output to grow until the error is addressed. Once more, use your constant (KI) to scale the term within the output limit *CAUTION* Continuous accumulation of errors may result in the integral term surpassing your output capacity. This phenomenon is known as INTEGRAL WINDUP. It took me a while to repair this. I reduced the term by narrowing the time frame in which I analyzed my mistake. To avoid overcorrecting based on the first two terms, we need to consider the third term. The derivative term (dError) evaluates how quickly your sensor inputs are getting closer to your setpoint in order to predict when the error will be fixed. The derivative term helps in reducing the output speed if it is correcting too quickly and is at risk of exceeding the setpoint. Multiply by the constant KD in order to maintain the output within the feasible range. The PID controller is effective as it relies on prior outputs and inputs for determining the latest output. Reading some material from external sources will prove to be very advantageous if you are unfamiliar with them. tool. http://en.wikipedia.org/wiki/PID_controller#Control_loop_basics Once you understand how it works, please look at the structure section on the feedforward control loop. Step 3: Demo PID Controller Before I threw my arduino into an airplane, I decided it would be a good idea to build a platform to test the PID on. My PID controller used the following parts: Eflite Outrunner Motor 35 Amp ESC 11.1 V LiPo battery 1/2" PVC An aged sawhorse used as a support. The controller analyzes the arm's angle with the accelerometer and gyroscope, and then calculates the necessary current to adjust the motor and maintain arm level. Since the ESC is made for connecting motors to a radio receiver bus meant for servos, it simplifies the process of controlling a brushless AC motor with an ESC on an Arduino using the Servo.h + Servo.cpp files in your libraries directory. I think the servo protocol utilizes pulse position modulation (PPM), which can be done by utilizing a PWM pin on your Arduino using the servo.write() function. http://www.hooked-on-rc-airplanes.com/servo-tutorial.html It is important to be saftey conscious when running these motors, as they go extremely fast. *ALWAYS wear saftey glasses* *Leave the propeller OFF until you absolutely need it* You will have to write a function to arm(); your ESC so that you can set its speed. Basically you need to write the ESC low, high, and then low again. http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1226292633 This forum goes over how to control a brushless motor, and is where I got framework for my arm(); function and setSpeed (); function. You could just use a servo.write(0-180) to set your speed on your esc, but you can also map it on a scale of 0-100. You can download the motor_functions at the bottom of the step. If it doesn't work please tell me!! I can simply add it into the instructions!! Using these functions gives you full motor control. You will have to fidget with your own code for your particular ESC. By declaring our sensor functions independently from the loop we can now run the motor and sensors at the same time. This is where I hit my first major setback. Because the motor draws so much current from the battery, it was inducing currents in my I2C bus. My sensor would work fine when the motor was off, but when the motor was running the values were pretty much meaningless. I took the following steps to clean up the noise: I added a ferrite ring to the esc (retrospectively, this probably just protects the ESC from noise- learned to use these after my Zagi crashed http://www.hobbyking.com/hobbyking/store/__23206__Clip_On_Soft_Ferrite_Rings_5pc_.html) I mounted the sensors as far away as possible from the motor Twisted all my wires to try and minimize current induction I found these websites to help deal with my problem: http://diydrones.com/forum/topics/pid-controller-i2c-bus-noise-from-esc?xg_source=activity //this is a thread I started on DIY drones http://forum.allaboutcircuits.com/showthread.php?t=41916 This seemed minimize sensor error, but still about 5 out of every 20 values were off by +-10 degrees. To clean this up I mediated the sensor values by: Building an aray to hold 20 values as they appeared chronologically Building an array that held the last 20 values sorted in (ascending or descending order; it doesn't matter because we are looking for the median) I used a bubble sort to help sort my values I found this website to help explain how to sort array efficiently: http://mathbits.com/mathbits/compsci/arrays/sorting.htm You will have to construct multiples of these sorting functions for multiple values (x, y, z; dx, dy, dz) Download my bubble sort and median functions below! With your sensors matching and your AC motor under control, we can now start implementing PID control for real! The Wikipedia page effectively details how your program should be organized through the use of pseudocode. There are numerous ways to carry out this task. The length of time you plan to use your feedback will determine the value of your integral and derivative terms. My PID_sample can be located at the conclusion of this step! Adjusting the PID parameters: There are numerous methods for tuning a PID. You have the option to purchase software or use trial and error, but I recommend using the Zieger Nichols method. In any case, begin by running your output with the proportional error only. Adjust KP to ensure that the proportional term does not exceed the output capacity. In essence, the system will fluctuate, you aim for it to decrease near your desired level (or at least not rise gradually!). After finding a suitable KP, you can choose to adjust either KD or KI. Various opinions exist on the order of actions to take, but using the integral term speeds up correction towards the setpoint and the derivative term slows down overcorrection. Sorry everyone I tried to embed the videos but for some reason it did not work. Here is a link: http://www.youtube.com/watch?v=_qlgWSP-kfk&feature=g-upl After playing with the code for a while it should become apparent how adaptive this type of controller is to your particular system. Remember, try and feedforward as much as you know how to! Once you are comfortable go ahead and install the controller!! Step 4: Setting Up the Plane To start testing, I opted for a glider to eliminate any chance of motor disruption. After reaching level flight, I have a Zagi prepared and a multiplex Twin Star for potential drones. I installed the system on my Swift AT (Aileron Trainer). I am very fond of this glider. Doesn't need a lot of wind to soar and can perform various maneuvers. Glider flying is wonderful when there is wind, as you can stay in the air for hours without needing to land and refuel, due to the absence of a motor or engine. Our upcoming board configuration will closely resemble our original PID system; we will execute two PID loops rapidly to manage pitch and roll using the elevator and ailerons. This will provide enough time for testing in favorable wind conditions. I am utilizing Airtronics radio gear with a transmitter/receiver that has 6 channels. I utilized the radio's fifth channel, specifically a landing gear toggle, to control the autopilot's on/off function from the transmitter. Link the servo wire from the receiver to a digital input in order to gauge the pulse length of both positions (on/off). Utilize the pulseIn() function for that purpose. After choosing a value from each of the two states, select one to represent off and the other to represent on. When the arduino detects an ON signal, it must transmit a digital HIGH to activate a relay or trigger transistors. I opted for relays instead of transistors to prevent my signal from passing through a transistor (a choice I would come to regret). You are able to view the diagrams I sketched for connecting a circuit that would switch a servo from the radio to the arduino. There are two items: one is for transistors and the other is for a radio. Observe the placement of PNP and NPN transistors. If the Arduino output wire is at a low level, the servo signal will be directed to the radio; if it is set to high, it will switch to the board. Similarly, the radio is connected to the normally closed terminal, while the Arduino is connected to the normally open terminal on the relay circuit. My functions for activating the autopilot can be located at the end of this section. This video demonstrates the arduino receiving radio signals to activate an LED, which is then used to arm the autopilot system. http://www.youtube.com/watch?v=lnx86vT9YXA&feature=g-upl Step 5: Here Is My Code and My Schematic! The code begins by guiding us using solely proportional error. After experimenting, you need to determine your own KP KI KD values. Ensure that the weight distribution of your aircraft is even prior to departure! Activate the autopilot system prior to launching your aircraft and ensure that the throws are aligned in the proper direction. The code's fallback function, located at the end, is important for returning control to the receiver in case of sensor errors or potential loops where control is needed from the autopilot. Be sure to include this function in your code. Get the code provided for download. Step 6: Success & Failure Success: Plane self corrects when running autopilot *more trials pending favorable winds* Switching capability between radio and arduino Use of PID control can easily be tuned to stabalize a systemFailures: Arduino Fio did not really have enough juice to run the sensors and switch my 5v relays (FIo operates on 3.3v) Possible remedies = different arduino (perhaps the nano?) or use transistors **RESULTS PENDING** Gyroscope data not yet in use Possible remedies = stop typing up the project and go figure it out :P Here is a video of me throwing the plane on autopilot. You can see it corrects itself from my throw and flies very level for a time down the slope. After a while I took back radio control in order to steer it back towards are hill (I did not want to hike THAT far): http://www.youtube.com/watch?v=_9ThtakOtY0&feature=g-upl Step 7: Future Development My upcoming escapade will include the following step: managing a powered aircraft (we have proven our ability to manage each system) Using a GPS to track the aircraft's location and height (fingers crossed for winning this competition!!!) Creating cascading PID controllers: one PID controller is used to determine the required angle to reach a specific waypoint based on its GPS location, while another PID controller is utilized to adjust the aircraft's attitude accordingly in order for it to effectively navigate to those waypoints. Thank you for taking the time to review my guidelines! If you have any input, inquiries, or remarks, feel free to share with me! If you'd like to keep seeing the shift from RC flight to autonomous flight, please upvote and give feedback. I am working towards competing in the robotics competition, and hopefully, we will win a new GPS as a prize. I am taking all necessary steps to make this transition smooth and clear so it doesn't feel too daunting to undertake alone. Source: Model Airplane Autopilot using Arduino ### Introduction to Arduino Using TinkerCAD Simulator: No Hardware Required Context and Preparation Getting started with tinkering on Microcontrollers can often be hindered by the need to purchase hardware. In this tutorial, we offer an introduction to Arduino that requires no prior experience and no physical hardware. Instead, we will utilize an Arduino simulator called TinkerCAD. However, for those who do have the hardware, we will provide parallel instructions. TinkerCAD was chosen for its ability to closely mimic working with actual hardware—blinking lights, moving motors, and building circuits with breadboards—making it an excellent free option among various microcontroller simulators available. Goals: Acquire familiarity with the standard functions and programming syntax of the Arduino language. -Engage with various microcontroller accessories to establish a solid groundwork for future tinkering. List of Hardware (Optional): For participants intending to utilize hardware during this workshop, provided below is a list of the required items:  Arduino Uno  Breadboard  1 LED  1 resistor (anything from 100 to 1k will work)  1 10k resistor  Push button  Servo motor Jumper wires  DHT11 sensor Circuit 1: Turning on an LED An abbreviated introduction to breadboarding: When working with a breadboard, it is essential to remember a few conventions for establishing electrical connections between components:  The columns on the sides of the breadboard labeled with a ‘+’ or ‘-’ are interconnected. These columns are known as the power columns. As a result, all the holes in the first column (indicated by an orange line below) are internally connected to each other, and similarly, all the holes in the second column (marked with a blue line) are internally connected.         a. The power columns are not interconnected, meaning there is no internal electrical connection  between a hole in the orange column and a hole in the blue column.  In the columns labeled a-e and f-j, the holes in each row are linked together. For instance, hole 1c is connected to hole 1e (green circles), and hole 7f is connected to hole 7i (pink circles). The separation in the board between columns e and f usually indicates a break in the internal electrical connections. Consequently, a hole in column d of a row won't be connected to a hole in column h within the same row. Building the Circuit: We will build the same circuit in TinkerCAD as well as with actual hardware. This setup allows us to manage the LED's on and off states using programming. The Arduino Uno has multiple pins that function as physical inputs and outputs, each with unique capabilities. The pins consist of power, analog, digital, PWM, interrupt, I2C, Serial, and SPI pins, as shown in the widely known schematic known as the "pin-out." In this guide, our main emphasis will be on the Power, Digital, and Analog pins, which are conveniently marked on the board's pin-out.rya  To initiate the circuit in TinkerCAD, access the "Circuits" option in the menu on the left side of the Dashboard, and then choose "Create New Circuit." 2. To incorporate components onto the canvas, simply click on them in the components menu                     located on the right side. Begin by adding an Arduino Uno and a breadboard to the canvas. After placing a component, you can click and drag to select and move it. Utilize the mouse scroll wheel to zoom in and out. To pan, hold down the scroll wheel. Let's begin by establishing the power/control and ground connections between the Arduino and the breadboard. Create a connection between the 5V pin on the Arduino and the + power column on the breadboard. Establish a link between the 5V pin on the Arduino and the + power column on the breadboard. Hardware: Connect a jumper wire from the 5V pin on the Arduino to the + power column on the breadboard. Establish a connection between one of the ground (GND) pins on the Arduino Uno and the - power column on the breadboard. In TinkerCAD, brown wires will be utilized for ground (GND) connections to facilitate easy identification. For hardware implementation, utilize another jumper wire to create this connection. Next, we'll incorporate a 330Ω resistor and an LED into the circuit. The resistor serves the purpose of limiting the current flowing to the LED to prevent it from burning out. The greater the resistance of the resistor, the less current will flow to the LED, making it appear dimmer. Place the 330Ω resistor and LED on the canvas. In TinkerCAD, after adding the resistor to the canvas, you will have the option to modify its value. Observe that the stripes on the resistor change color to simulate the appearance of a physical resistor with that particular value. Establish an electrical connection between the resistor and the breadboard by connecting one end of the resistor to a hole in the a-e columns of the breadboard. The other end of the resistor should be linked to the + power column. This connection effectively links the 5V pin on our Arduino to the resistor. In TinkerCAD, utilize wires to create the connections. A helpful approach is to position the resistor beside the breadboard, draw the connections, and then relocate the resistor onto the breadboard to clearly visualize the connections being made. The wires will move along with the resistor when you move it. For hardware setup, insert one leg of the resistor into the + power column and the other leg into the middle of the breadboard. LEDs are polarized components, meaning they only function in one specific direction, while resistors are non-polarized. In a circuit, the current flows in the direction indicated by the LED/diode symbol's arrow, which means it goes in through the anode (+) and out through the cathode (-). LEDs denote the anode and cathode in several ways: The legs of the LED are of two different lengths, with the longer leg being the anode. One side of the "light bulb" portion of the LED has a flat surface, which may be difficult to see but can be felt. This flat side indicates the cathode side. To remember the correct orientation of the LED in the circuit, visualize the LED symbol resembling a funnel shape. While using TinkerCAD, hovering over one of the legs of the LED will indicate whether it's the anode or the cathode. To rotate components in TinkerCAD, simply select the component and click the rotate button located in the upper left corner. Link the anode of the LED to the same row of the breadboard as the resistor, and connect the cathode to any other row. This will establish a connection between the resistor and the LED. Finalize the circuit by connecting the cathode of the LED to the - power column. Test your circuit by checking if the LED turns on. If the wiring is correct, the LED should illuminate. In TinkerCAD, click on "Start Simulation" located in the upper right corner to initiate the simulation. This will activate the USB connection and power the circuit. For hardware testing, connect the USB cable to the Arduino and your computer. If the Arduino is receiving power from your computer, the Arduino power light will turn off. Circuit 2: Blinking LEDMoving forward, we will modify the previous circuit to program the LED to blink. Setup the Circuit: Adjust the connection from the 5V pin on the Arduino to digital pin 13 (D13). Write the Code:We recommend writing the code in the Arduino IDE and then copying it into TinkerCAD. This is because TinkerCAD automatically generates a significant portion of the code for you, which undermines the purpose of this tutorial. Launch the Arduino IDE and begin a new sketch by selecting "File" and then "New." Within the Arduino IDE and language (also known as Arduino language), programs are referred to as sketches. In a sketch, two main components/functions are present: The "void setup()" function is where we establish the groundwork of the code by informing the IDE about the purpose of each pin we are utilizing. This function runs only once when the code is uploaded to the physical (or virtual) Arduino. The "void loop()" function serves as the main body of the code. Here, we instruct the pins on what actions we want them to perform to control the connected accessories, such as the LED. This portion of the code will continuously run in a loop until either the power is removed from the Arduino or the code is altered. In Arduino, comments are indicated by using double slashes "//". Choose the Arduino Uno as your board in the "Tools" menu located at the top of the IDE. This selection informs the IDE about the pin assignments for proper identification. If you are working with hardware, ensure your Arduino is connected (the power light on the board should be illuminated) and verify the correct Port through the "Tools" menu. Selecting the proper COM port is essential, as without it, your computer won't be able to upload code onto the Arduino. Arduino language shares similarities with C and includes various built-in functions that we will utilize in our projects. Here are the explanations for certain built-in functions, indicated by blue text featuring function names in capital letters. Functions: pinMode(pin, type) - Pin: this is the arduino pin you are referencing - Type: INPUT, OUTPUT, INPUT_PULLUP - INPUT_PULLUP: pin is an input but will be pulled high by default - Example: pinMode(LED_BUILTIN, OUTPUT); digitalWrite(pin, level) - Pin: pin you want to control - Level: HIGH or LOW - Pay attention to the device you are controlling. If it is active low it will be on when the pin is set LOW - Example: digitalWrite(13,LOW); digitalRead(pin) - Pin: the pin whose value you want to determine - Often used in if statements to see if a pin meets certain conditions - Example: digitalRead(2); analogWrite(pin, value) - Pin: pin you want to control - Value: between 0 and 255. The value varies the duty cycle of the PWM signal being written to a pin - Example: analogWrite(A0, 27); analogRead(pin) - Pin: the pin whose value you want to determine - Example: analogRead(A2); delay(x) - x: millisecond value that determines the duration of the delay. The next command won’t be executed until the delay is complete. - Example: delay(200); Serial.print(val) or Serial.print(val, format) - Examples: Serial.print(78) gives "78" Serial.print(1.23456) gives "1.23" Serial.print('N') gives "N" Serial.print("Hello world.") gives "Hello world." Serial.print(78, BIN) gives "1001110" Serial.print(78, OCT) gives "116" Serial.print(78, DEC) gives "78" Serial.print(78, HEX) gives "4E" Code tips: - Make sure you’re including semi-colons. Every code line you add needs to end with a semi-colon. - Watch your capitalization - Make sure you’re referencing the correct pin In the setup function, configure digital pin 13 as an OUTPUT pin using the pinMode() function. Attempt to accomplish this without referring to the answer shown in the Figure below. To achieve the blinking effect of the LED, we must control its on and off states through pin 13. Since the code inside the loop() function repeats rapidly, we introduce a delay between turning the LED on and off and turning it back on again. This delay allows us to visually perceive the blinking action of the LED. Compose the code within the loop function to create the blinking effect of the LED using the digitalWrite() and delay() functions. Initiate the blinking with a delay of 500 milliseconds. Click on "Verify" (checkmark icon in the upper left-hand corner) to save and compile your code. If there are any errors, such as a missing semicolon, the IDE will display an error printout in the bottom message section. Once your code successfully compiles, proceed to upload it to the Arduino. In TinkerCAD, click on the Code button located in the upper right corner and switch from "Blocks" to "Text." Copy your code from the Arduino IDE and paste it into the TinkerCAD code window. Then, click on "Start Simulation" to execute your code. For hardware usage, connect your Arduino to the computer and click on the Upload button, located adjacent to the Verify button. Clicking the Upload button will compile and then upload the code, eliminating the need to verify before every upload. Ensure that your hardware behaves as expected. The LED should turn on and off repeatedly. Next, experiment with the delays and observe the effect on your simulation or hardware. Determine the smallest delay you can use while still being able to distinguish that the LED is turning on and off. Rather than using default pin names, we can employ variables to make pin usage more intuitive. This becomes particularly beneficial when dealing with numerous pins, as it aids in keeping track of the specific functions of each pin in your code. Introduce a variable named "LED" to represent digital pin 13. Place this code above the setup() function, using the syntax "int LED = 13;". In TinkerCAD, you'll need to halt the simulation before modifying the code. Replace all instances of "13" with "LED" in your code. You can perform this modification either in the TinkerCAD code window or the Arduino IDE, as this is your custom code. Upload the modified code and verify that your hardware behaves as anticipated in response to the changes. Circuit 3: Push Button with LED Our circuit will soon incorporate a push button. Pressing the button will activate the LED. This procedure involves enhancing our existing breadboarding arrangement and integrating control structures into our code. Build the Circuit: 1. Keep your blinking LED circuit unchanged. If you're using hardware, disconnect it before constructing the pushbutton part of the circuit, as it's not advisable to work with live hardware. In TinkerCAD, you can simply stop the simulation by closing the code window with the Code button. 2. Integrate a pushbutton into the circuit, positioning it across the break in the breadboard for easier placement. 1. Establish a connection between the bottom left pin of the push button and digital pin 8 on the Arduino, using a red wire in TinkerCAD. Additionally, connect the bottom right pin of the push button to the - power column on the breadboard using a brown wire in TinkerCAD. Write the Code: As we are utilizing digital pin 8 to control the button, we must define a variable for the button and declare its pin type within the setup() function. You can modify the code you previously wrote for the Blinking LED circuit or begin a new sketch to incorporate these changes. Introduce a variable named "Button" and assign it the value of digital pin 8. Additionally, retain the variable named "LED" that is already set to digital pin 13. Within the setup() function, configure the LED pin as an OUTPUT and set the Button pin as "INPUT_PULLUP." Since push buttons are active low devices (i.e., they are considered "on" when given a LOW signal), using INPUT_PULLUP ensures that the pin remains HIGH by default, keeping the button off by default Control structures allow the code to follow different paths or loop depending on certain conditions. Examples of control structures consist of statements such as if/elseif/else, loops like do/while, and for loops. Conditions are used in if/elseif/else statements to control the code's execution. When a certain requirement is fulfilled, the program runs the code corresponding to that requirement. if(condition) { Then do this code } elseif(condition) { Then do this code } else { Do this code } Conditions in control structures typically involve equalities or inequalities and can utilize digitalRead or analogRead to access the value of a pin. - Example: if(digitalRead(8)==LOW) - Example: elseif(x<12) - Example: if(analogRead(A2)>12) For a do/while statement, we tell the code to run over and over again until a condition is met. do { This code }while(condition) A for loop is a control structure that allows for iteration, such as incemenenting to look through a data set or increasing speed one notch at a time. for (initialization; condition; increment) { //statements } The initialization should include the data type (e.g., int i=0; i<5; i++) Within the loop() function, implement an if/else statement to check if the button is pushed (digitalRead(Button) == LOW). If the button is pushed, turn the LED on using digitalWrite; otherwise, turn the LED off. Upload your code and perform the test. a. In TinkerCAD, click on the push button to press it. You can hold down your left mouse                             button on the push button to keep it pressed. Circuit 4: Servo Motor Next, we will transition our attention to dealing with servos. You can choose to either build a new circuit in TinkerCAD or remove your Arduino from the breadboard since this circuit doesn't need one. In TinkerCAD, deleting a wire or component is done by choosing it and hitting the delete key. Servos are devices that provide precise control over position and operate as rotary actuators. With code, you have the ability to adjust their angle between 0° and 180°. It should be noted that servos are not intended for continuous rotation. Building the Circuit Connect the Arduino to the servo. a. In TinkerCAD, we'll utilize the micro servo available in the components window. b. Follow these wire designations/connections: i. Brown wire: Ground ii. Red wire: 5V iii. Orange wire: Signal - connect this wire to a pulse width modulation (PWM) pin on the Arduino, marked with a '~'. In this case, connect it to digital pin 11. Note: On some servos, the signal line may be white instead of orange. Write the Code For our code, we will utilize the servo library included in Arduino. This library offers specialized functions that make it easy to control the servo with precision. Begin a new sketch in Arduino Incorporate the servo library using the following syntax: "#include ". a. Place this statement at the top of the code, before the setup() function.  Generate a servo object within your code. This object allows us to manipulate its properties to set       and read angles. The syntax is "Servo myservo;" and it should be placed below the inclusion of the         servo library. You can choose any variable name you prefer for the servo object, such as "myservo"       or any other name of your choice.  In the setup function, we'll attach the servo to a PWM pin instead of using pinMode. Utilize  the following syntax: "myservo.attach(11);" Within the loop function, set the position of the servo to 0° as the starting point. Use the                         syntax:"myservo.write(0);" This action will also reset the servo to the 0° position at the                             beginning of each execution of the loop function. Employ a for loop to increment the angles of the servo from 0° to 180° in 5-degree increments. a. For loop initialization: "int i = 0;" b. For loop condition: "i <= 180;" c. For loop increment: "i += 5;" d. For loop body: "myservo.write(i); delay(500);" i. The delay is introduced to allow observation of the increments in angle. Upload the code and observe if the servo moves as expected. Next, we'll enhance the code to include additional lines so that the position of the servo can be displayed on the serial monitor. Introduce a global variable of type int named "servo_position."a. Note: Similar to when we created variables for the pins (LED and Button) previously, this new variable will also be a global variable placed in the same location. Inside the setup function, include the line "Serial.begin(9600);" This enables the usage of the serial port, allowing communication with external devices. The baud rate is set to 9600, which determines the rate of information transfer on the communication channel. A baud rate of 9600 signifies a maximum transfer rate of 9600 bits per second.   Within the for loop, assign the value of "myservo.read()" to the "servo_position" variable. Put this line after the delay statement. Use Serial.print to show the servo_position value on the serial monitor. Look at the Function definitions examples given before. Employing "Serial.print(servo_position);" will exhibit the positions in consecutive order on the serial monitor, akin to text on a document. To have each position displayed on a separate line, a second print command must be added: "Serial.print("\n");". Upload the code and analyze the output on the serial monitor. In TinkerCAD, you can reach the serial monitor button found at the bottom left corner of the code window. Press this button to see the result. When you're using hardware in the Arduino IDE, you'll locate the serial monitor in the Tools menu.   Circuit 5: Temperature/Humidity Sensor The last circuit we will work with includes a temperature and humidity sensor arrangement. Nonetheless, TinkerCAD has restricted choices for environmental sensors, thus we will utilize the TMP36 temperature sensor in TinkerCAD and the DHT11 temperature/humidity sensor for hardware testing. TMP36 Sensor - TinkerCAD Circuit The TMP36 sensor will offer an analog output that corresponds to the temperature. Create a new TinkerCAD circuit and add an Arduino Uno and a TMP36 sensor to the canvas. Establish the connections between the sensor's legs and the Arduino pins as follows: connect power to 5V, ground to the ground pin, and Vout to an analog pin - A0. Set up the following global variables: a. int sensorPin = A0; b. int reading; c. float voltage; d. float tempC; Inside the setup function, utilize Serial.begin(9600) to set the baud rate. Within the loop function, assign the value read from pin A0 to the global variable "reading" using analogRead(sensorPin). To convert the value in the "reading" variable to a temperature in Celsius, apply the following formula. You can break the formula into multiple lines, introducing intermediate variables like "voltage":Temp (in °C) = (voltage - 0.5) * 100.0; Please note that the voltage value should be derived using the formula: voltage = (reading * 5.0) / 1024.0 6. Display the temperature on the serial monitor and incorporate a 0.5-second delay to introduce a pause between sensor readings. 7. Upload the code and observe the values on the Serial monitor. DHT11 Sensor: Hardware The DHT11 sensor comes in two popular setups: one with 4 pins as shown, and another with 3 pins on a tiny PCB. The variant mounted on the PCB includes a pull-up resistor of 10kΩ. When using the 4-pin variation, it is important to incorporate this resistor into the circuit.  Position the DHT11 sensor on the breadboard in such a way that each pin is inserted into a separate row. Establish a connection between the Vcc and Signal pin rows on the breadboard using the 10kΩ resistor. Ensure the following connections are made:1. Connect the VCC sensor pin to the 5V pin on the Arduino. 2. Connect the ground sensor pin to the ground pin on the Arduino. 3. Connect the signal sensor pin to digital pin 7 on the Arduino. Begin a new sketch in Arduino. If you don't have the "dht.h" library installed yet, access the Library Manager by navigating to Tools > Manage Libraries in the top menu. Search for "dht" and proceed to install the DHT sensor library by Adafruit. After successfully installing the Adafruit DHT library, open the "DHT tester" example sketch provided within the library. Adjust the pin arrangement and choose the DHT11 sensor in the provided sketch as an example. Assign pin 7 to be the signal pin for the sensor. Transfer the code to the Arduino and review the results on the serial monitor. One easy way to confirm the sensor is working properly is to softly blow air on it or adjust the temperature and monitor the displayed measurements.     ### How to use a Piezo element to detect vibration using Arduino This tutorial shows you how to use a Piezo element to detect vibration, in this case, a knock on a door, table, or other solid surface. A piezo is an electronic device that produces a voltage when it undergoes physical deformation from a vibration, sound wave, or mechanical strain. Likewise, applying voltage to a piezo element causes it to vibrate and generate sound. Piezoelectric devices can be utilized for both producing tones and sensing tones. The sketch utilizes the analogRead() command to interpret the piezos output, converting the voltage range of 0 to 5 volts to a numerical range of 0 to 1023 through analog-to-digital conversion (ADC). When the sensor's output exceeds a specific threshold, the Arduino will transmit the message "Knock!" to the computer through the serial port. Access the serial monitor in order to view this text. Circuit Piezos are polarized, allowing voltage to flow through them (or out of them) in a particular orientation. Attach the low voltage black wire to the ground and the high voltage red wire to analog pin 0. Furthermore, add a 1-megohm resistor in parallel with the Piezo element to constrain the voltage and current generated by the piezo and safeguard the analog input. Piezo elements can be obtained without a plastic enclosure. These will appear as a metal disc and are simpler to operate as input sensors. PIezo sensors are most effective when they are firmly pressed against, taped to, or glued to their sensing surface. image developed using Fritzing. For more circuit examples, see the Fritzing project page Schematic: Code In the code below, the incoming piezo data is compared to a threshold value set by the user. Try raising or lowering this value to increase your sensor's overall sensitivity. /* Knock Sensor This sketch reads a piezo element to detect a knocking sound. It reads an analog pin and compares the result to a set threshold. If the result is greater than the threshold, it writes "knock" to the serial port, and toggles the LED on pin 13. Major Components in Project Hardware Required Arduino Board (1) Piezo electric disc (1) Megohm resistor solid surface For more detail: How to use a Piezo element to detect vibration using Arduino ### How to Choose Professional Paper Writing Service Introduction Currently, students from multiple universities are utilizing essay writing services to finish their assignments. This is due to the fact that today's college student juggles multiple tasks at once. Professional writing services assist in timely submission of your paper while also preserving its quality. Come on, we can accomplish this! Budget As a native college student, there are chances that your parents may help you with finances, but for a student who has just moved abroad, the cards may unfold differently. Your parents may not have the means to send you money every month, and for the time being, you need to survive on insignificant jobs that pay peanuts. With your part-time work and academic pressure hiring a professional paper writing service becomes necessary if you intend to survive in the new land and maintain grades simultaneously. Under such circumstances, penny-pinching becomes vital for survival. There is no harm in surfing through the internet to find paper writing services that fit your budget. Dig deep through the internet, and you can find a website that can do an essay for cheap. Expertise Not all paper writing services provide error-free work, and you need to consider the following tips while choosing a professional essay writing service. Cheap but poor quality essays are useless as the money you spend will not get you better grades. Ensure quality by reading reviews of different essay writing services. This will further clear your doubts about work quality. Essay writing service covers a wide range of subjects, including medicine, technology, arts, and even social studies. It would be better that you chose an agency that specializes in your desired field. Not only will you get writings with the best quality, but their service is also quick.You don’t need not worry about meeting short deadlines when you order 1 hour essay from perfectessay.com. Check customer support Evaluating the reliability of a website can be achieved by testing its customer service. If the research paper writing service is reputable and highly regarded, you can expect to have access to customer support 24/7. A writing company might be situated in a time zone that is not the same as yours. They need to have customer service accessible 24/7. The time zone you are in could create challenges in how you engage with the organization. However, if they are available on the internet, you can place your order with them at any time without any concerns. You might also encounter instances where your school teacher gives you many tasks to hand in for the upcoming class. You can rely on an online writing service available 24/7 to take your orders and give you updates, guaranteeing you don't miss any deadlines. If the writing service is unavailable because of time zone discrepancies, your order will not be delivered promptly. Ask about the deadline The level of success you achieve in your studies is determined by both the punctuality and quality of your submissions. You typically enlist the help of a writing expert not due to inability, but because of time constraints in meeting the deadline. Juggling a part-time job, sports, and demanding media classes leaves no energy for late-night writing. You require a reliable business that understands the importance of finishing assignments promptly. It is essential to turn in the project on time to secure the employer you want and uphold high grades. This strict guideline separates professional and non-professional writing firms. Educators do not expect diligent students to submit assignments after the deadline. Turning in assignments late impacts both your professor's perception of you and leads to lower academic performance. Be cautious of inexpensive paper writing services that provide professional writing assistance at reduced rates, as they could contain considerable plagiarism. Opting for a trustworthy company and investing additional funds in a high-quality assignment is preferable to risking your academic achievements by trying to save money. Compare prices As a student, you find it difficult to manage your money. Paying for your tuition and cost of living could prevent you from saving money for an online essay writing service. Look online and find different websites where you can write down their prices. It is not recommended to select a paper writing service solely based on their prices. Low-cost writing services might result in lower quality work. The absence of skilled writers could greatly affect your academic success. Considering both the cost and quality of work is essential for maintaining good grades and managing finances effectively. Prior to buying from a writing service, ensure to discuss the prices with their customer service representative. By following this procedure, you can determine the additional resources needed to maintain or improve your academic achievements. Read reviews When looking for the top paper writing service, it's important to take into account the feedback and reviews given by clients. When selecting a writing service, it is crucial to consider the feedback of other customers regarding the company's services. Unbiased reviews from past clients make it easier to find a suitable company. Distinguishing between a top-notch writing service and a subpar one is possible. The reviews primarily include responses to any questions you might have prior to selecting the online writing service you favor. You will be pleased with your choice and won't need to deal with the repercussions of selecting a subpar paper writing service. Native language Choose an online writing service that aligns with the language requirements of your educational institution. English is a commonly used language worldwide, with the majority of schools instructing in English. It is advised that you select a writing company whose primary language is English. This will help bridge the communication gap and decrease the likelihood of misunderstanding. Your script will focus on the questions posed by your school teacher and will be easy for others to connect with. An author from an indigenous background will have a greater understanding of the subject, conduct thorough research, and communicate the information convincingly. Conclusion Selecting a reliable paper writing service may be difficult. Numerous students invest many months and a considerable amount of money searching for the ideal paper writing service. Keep in mind all the tips provided when considering various online writing services to enhance your grades and academic achievements. Expertise Furthermore, you can also ensure that the professionals have certificates in phonics. Talking about phonics, you can also work on phonics by attending the best phonics class Singapore. This will help you evaluate the professionals who will work on your project.  ### "HiFi" Online Radio: Internet Streaming With ESP32 and VS1053 Instructions on creating an Internet Radio Streamer with the ESP32 and the MP3 decoder "VS1053". Numerous tutorials exist for a device like this online (many of which provided the information and ideas I needed), but I decided to share my own version as I had to find unique solutions to meet the requirements of my project. I wish to combine those solutions into a single project for sharing. Some of them are likely beginner mistakes and my code could definitely be improved, but for beginners like myself reading this, I hope to clarify many doubts about programming certain things. The reason I included "HiFi" in my title is because I planned to use this Streamer for playing internet music on my stereo system. I always wanted to add a streamer to my setup, but the prices of popular brands were too expensive for something I believed could be easily created. Additionally, I always had the option to link a xCast device for streaming from my phone or directly connect a laptop. However, none of those options were the ultimate and reliable setup I desired for my "desk." Because of COVID, I was able to find time to begin tinkering with Arduino and later, with ESP for various DIY projects... and then I had a realization about creating my desired streamer! The solutions I came across online were either too simple or included features I didn't need, such as amplification stages, speakers, and batteries. I was looking for a product that could seamlessly integrate into my current audio setup, allowing me to use it with my existing amplifier and speakers on a permanent basis. Here it is, finally! In conclusion, this project will provide you with: An internet radio streamer that uses WiFi, which can be connected to any amplifier, active speaker or even headphones using any 5V power source. A way to preset more than one WiFi, so you can connect this device in different places without having to compile again A streamer that shows complete info about the source and what is playing, using text scrolling Buttons with different functions depending of the length of the press A way to save radios on internal memory A way to shut down the device (deep sleep) Using a remote control through IR Debugging through Serial Monitor Supplies ESP32 (I used ESP32-WROOM-32U so I could connect an external WiFi antenna to it) VS1053 MP3 Module TFT (for this project I used 1.8 inch 128x160 TFT) Buttons WiFi Antenna (with PCI U.FL IPX connector to attach to ESP 32U model) IR Receiver Cables Solder iron Optionals (but really useful): Proto PCBs (to mount ESP and buttons) JST plugs (to avoid some soldering and ease connection/interchange of components) Glue gun Some skills (wood, metal, plastic) for the case Step 1: Plan Ahead (the Hardware) This was simultaneously the most challenging and simplest aspect of the whole procedure for me. Challenging due to my "knowledge" as I chose pins that did not fulfill the intended purpose. Initially, I experimented and made mistakes, then I turned to the ESP32 documentation to study the function of each pin in order to improve my understanding. Following that, it was extremely simple to organize, solder, and install everything in position!! To begin with, I strongly suggest that you thoroughly plan out all the items you will need and the relationships you aim to establish. I expect you will create a version of this design, so I urge you to carefully review the compatibility of the various pins on the ESP32 to avoid any potential issues (as I encountered in some cases, not all pins are suitable for every purpose). Firstly, I created a PCB layout on a spreadsheet, positioned the ESP32 on top, assigned a specific color to each square for components, and designated a font color for each cable to be used. I utilized a Proto PCB to install the ESP32 and simplify the soldering of each individual pin, especially beneficial when pins are shared (5V or ground). Instead of soldering the TFT, MP3 decoder, and IR receiver, I opted to use JST plugs for each of them, leaving the other end of the cables open for soldering onto the Proto PCB. The PCI U.FL IPX plug directly connects the antenna to the ESP32 board. Lastly, regarding the buttons: I affixed them to a separate Proto PCB board not just to simplify soldering, but also to keep them securely in place for potential case installation in the future. After going through all of that and examining my diagram with pins, parts, and wire hues, the soldering turned out to be quite simple. I suggest connecting the ESP32 and utilizing the example libraries for each component (TFT, IR Receiver, MP3 Decoder, Buttons) to verify proper functionality at this stage. If that's the case, then the soldering is satisfactory. If something doesn't work, re-examine the soldering before replacing parts (I had to desolder and resolder multiple times before everything functioned correctly). I suggest using a glue gun on the soldering joints to prevent accidental disconnection when moving components and cables, especially when everything is working well. A last caution: ensure that there are no pins touching each other before turning it on. I discarded 2 ESP modules due to improper soldering causing a short-circuit with certain pins. Step 2: The Code Here I'll explain some parts of the code that were my special requirements. I won't get into details of everything (since most of it is basic coding or is commented in the file), but I'll focus on the things that I wanted to add and didn't found in other projects of this type (or at least not in the way I wanted). SETUP: In the setup() function, this code does more than just initialize pins and utilities. Activates the "ON" switch, which essentially involves utilizing a button as a signal to exit deep sleep mode (in this instance, pin 26, my 'forward' button). You have the freedom to establish anything of your choice in this place. Initially, I attempted to operate the streamer with a remote control that had a PIN for the IR receiver. However, the issue was that the streamer would respond to any IR input, even from remotes that were not intended for use with it. If I switched the TV channel, the streamer would activate. I had to make a compromise and allow for a "manual" button to activate this. I also avoid a dark screen after waking up from deep sleep, keeping the LED backlight (pin 17) in its previous state. Even if I set the pin to HIGH, the screen always remained OFF whenever I turned on the streamer. esp_sleep_enable_ext0_wakeup(GPIO_NUM_26,0); gpio_hold_dis(GPIO_NUM_17); - Uses the Preferences library and start the "storage space" for saving data to the EEPROM. The "false" argument serves to indicate that we will use this for read and write. preferences.begin("Save/Load", false); - Invokes the setScreen() function to render all elements that will remain constant on the screen. By examining the code, you will observe that it adjusts the screen orientation, fills the background with color, adds text, and more. Additionally, I desired to utilize a "dignified" typeface as this streamer would be placed near my HiFi setup. The TFT library permits the use of personalized fonts, so I added mine but feel free to switch to a different one. In order to accomplish this, you will need to modify certain parameters in the code (such as heights, positions, etc. for the texts) and in the library (indicate the designated font). In this function, I ultimately set up the two sprites that will be used for the scrolling texts. Here is a demonstration of the text that will display the adjusted station.     scrolltxt_station.setFreeFont(OWNFONT1);     scrolltxt_station.setColorDepth(8);     scrolltxt_station.createSprite(750, 11);     scrolltxt_station.fillSprite(TFT_BLACK);     scrolltxt_station.setTextColor(tft.color565(0,255,0),TFT_BLACK); - Calls the function connectToWiFinStreamer() which first connects to a WiFi. Here I added some extra functions to the standard initialization of WiFi which are very useful when needed. The first one allows to connect to different WiFi networks already preset in an array at the beginning of the code. So, if the streamer cannot connect to one, it will try with the next one. while (WiFi.status() != WL_CONNECTED)     {         Serial.print(".");         delay(500);         currentMillisWiFi2 = millis();         if (currentMillisWiFi2 - previousMillisWiFi2 >= 5000)  // If 5 secconds pass, connect to next network         {             previousMillisWiFi2 = currentMillisWiFi2;             wifi_index += 1;             if (wifi_index >= key_qty)             {                 wifi_index = 0;                 break;             }             WiFi.begin(ssid[wifi_index], password[wifi_index]);             Serial.println();             Serial.print("Connecting to new network: ");             Serial.println(ssid[wifi_index]);         }     } If it can't connect to ANY of the preset SSIDs, it'll show a little icon made by me on screen and will stay as "Not connected", then the loop() will take charge (details on this later). If it can't connect after 4 attempts, the Streamer will shut down. If it can connect, it draws another icon on screen to show the connected status, and starts the Radio. Also, it sets the wifi_index to the previous position. This will be useful if internet goes down and it tries to reconnect. This way, it'll connect to the same working SSID. But, why I don't leave the same index? For some reason I still don't know, whenever I connect to a SSID from the array, the first one is discarded, always. That's why I leave the first SSID and Password empty on the arrays. The Radio starts by calling another function: connectiontoRadio() which contains the standard calling from the Radio library. With all these explained, let's move to the next part of the code: LOOP - The first thing the loop does is play constantly through the Radio player. player.loop(); - Although they are outside of the loop per se, I use the functions of the MP3 decoder library I wanted for my streamer (it has more than this) which names are very self explainatory: SHOWSTATION, SHOWSTREAMTITLE and BITRATE. They are constantly updating their status as soon as they change. Here is where I wasted a lot of time: the worst case scenario were long strings of texts, where I had many troubles that have been worked around: text scrolling on top of the older text making everything unreadable, text that didn't reset when the string changed, etc. So I had to put some code inside the functions of the Radio library, and others inside the loop. The final result is a clean scrolling, that changes when it has to change and stay fixed when it has to. So, inside the functions from the Radio library, I added some code to: Get the size of the info to show Prepare the "Scrolling spaces" with the required info If no data from the stream, show a message and don't scroll If data is short (considering the size of the screen and the size of the font) show the text and don't scroll Here's an example inside the Radio functions for the text that shows the songs playing on the station: stream_text = String(info);     length_stream = stream_text.length();     scrolltxt_stream.fillSprite(TFT_BLACK);     tft.fillRect(0,100,160,11, TFT_BLACK);     tft.setCursor(10,108);     tcount2=0;     if        (length_stream < 2)                            {tft.print("No data");}    // If no text, show "No data"     else if    (length_stream >=2 && length_stream <= 23)    {tft.print(stream_text);}    // If there's text and is short, don't scroll Scrolling occurs in the loop if the stream data exceeds a specific length. To prevent variation in speed due to inconsistent looping speeds, I standardized the scrolling time to 30ms. Next, it places the text in the "Sprite space" and every 30ms it updates the position of the characters. Here is an illustration for the identical text but now enclosed within the loop: if(length_stream > 23)    {       currentMillis2 = millis();       if (currentMillis2 - previousMillis2 >= 30)       {          previousMillis2 = currentMillis2;          scrolltxt_stream.pushSprite(10,100); // Sets Sprite on screen (x,y)          scrolltxt_stream.scroll(-1); // Scroll direction          tcount2--;          if (tcount2 <= 0)          {             tcount2 = length_stream*7.5; // 7.5 factor was the best for this size of screen in terms of spacing between sprites             scrolltxt_stream.drawString(stream_text, 160, 0); // Draws word in position (x,y)          }       }    } Regarding the 7.5 factor, this is the number that allows spacing between the end of the stream text and the start of the same (or a new) text again. I tried with short texts and very very long text and for this screen and font, is was the sweet spot to not overlap texts, or have too much spacing between them. If you have problems of this sort, change this number. - Then, the loop manages the buttons (for my project I used 6 in total: 1 as "backward", 1 as "forward", and 4 for radio presets). The first thing that the loop does on each iteration is read the current status of a button, then calls a function that checks "what to do" with that status: checkXXButton(current status, previous status) comparing the status of the current loop vs the previous loop. After that saves the current status of that button as the last status for the next iteration of the loop. For this project I'm using 3 types of buttons: Backward Short press (less than 0.5s): Goes back 1 radio station Semilong press (between 0.5s and 2s): Goes back 5 radio stations Long press (more than 2s): Calls Off Routine to turn off the Streamer Forward Short press (less than 0.5s): Goes forward 1 radio station Long press (more than 0.5s): Goes forward 5 radio stations If the streamer is turned off, one short press of this button turns it on Preset n° X Short press (less than 0.5s): Goes to saved radio on preset X Long press (more than 0.5s): Saves current radio to preset X - Then the loop checks for IR inputs. This is pretty straightforward. Using the IR example library, I was able to check the HEX codes of each one of my remote control buttons (I wanted to use the remote control from my amplifier). With that data, I use my remote to "push" the buttons 'backward', 'forward'; and if I change the "source" on it, to turn off the Streamer. Any other button that I press and didn't include it here, does nothing. - After the IR, the loop checks for Serial inputs. Besides using the Serial Monitor for debugging, I added some extra options: I can put a direct link of a radio and will play it I can put a radio number and it will go right to it - Finally, the loop checks for the status of WiFi every 1 minute. Here calls a function checkWiFi() that in case WiFi is disconnected, calls again the function that connects to WiFi (the same used in setup). Source: "HiFi" Online Radio: Internet Streaming With ESP32 and VS1053 ### Beat the Heat: DIY Temperature-Controlled Fan Speed Regulator This project is an independent fan speed regulator that automatically adjusts the speed of an electric fan based on real-time feedback. The use of embedded system technologies like a microcontroller and closed-loop control architecture enables successful and reliable temperature regulation. The ATMega8/168/328 microcontroller allows for rapid adjustment of fan speed based on real-time sensor information. An LCD screen improves ease of use by showing the temperature and fan speed simultaneously. Despite being compact and straightforward, this controller has multiple uses beyond typical household fans. It can regulate different appliances like air conditioners, water heaters, ovens, furnaces, heat exchangers, incubators, and other devices to maintain optimal thermal conditions. Using an automated feedback-controlled system instead of static fan setups helps reduce energy usage. This project demonstrates the ability of embedded systems to provide advanced control solutions in industries that require precise temperature regulation. Energy savings in different applications in the future could be accomplished through the utilization of comparable closed-loop designs. Circuit and working Fig. 1: Circuit diagram of the temperature-based fan speed control and monitoring using Arduino This standalone automated fan speed controller project changes the fan's speed by utilizing feedback in real time. Effective and reliable temperature control is accomplished by using embedded system technologies like a microcontroller and closed-loop control architecture. The ATMega8/168/328 microcontroller allows for rapid adjustments to fan speed based on real-time sensor readings. An LCD screen increases user-friendliness by showing the temperature and fan speed level simultaneously. Even though it is compact and basic, this controller is suitable for more than just typical household fans. It can manage different equipment like air conditioners, water heaters, ovens, furnaces, heat exchangers, incubators, and other devices to maintain optimal thermal conditions. Using an automated feedback-controlled system instead of fixed fan setups helps reduce energy usage. This project demonstrates how embedded systems can provide smarter control solutions in industries where temperature regulation is crucial. In the future, energy efficiency may be possible in different applications through the utilization of comparable closed-loop designs. Fig. 2: Screenshot of the source code on Arduino IDE The temperature sensor LM35 measures the surrounding temperature and changes it into an analog electrical signal. The MCU on the Arduino board receives this signal via an analog-to-digital converter (ADC). The MCU's ADC is responsible for converting the analog temperature data into a digital format that can be interpreted by the Arduino's code. The LCD screen constantly shows the current fan speed setting and the digitized temperature values. This enables the monitoring of both metrics in real-time. Utilizing the digital temperature data received, the MCU controls the motor driver circuit to regulate the fan speed accordingly. The motor driver module manages the fan motor's power, enabling adjustable speed control through PWM signals from the Arduino. In this manner, the Arduino MCU operates as the main processing center, overseeing the collection of temperature data through the ADC, computing and implementing necessary speed changes with the motor driver, and providing information on the LCD screen - achieving the full closed-loop temperature control function. Fan speed control technique The temperature sensor LM35 measures the surrounding temperature and changes it into an analog electrical signal. The MCU on the Arduino board receives this signal via an analog-to-digital converter (ADC). The MCU's ADC is responsible for converting the analog temperature data into a digital format that can be interpreted by the Arduino's code. The LCD screen constantly shows the current fan speed setting and the digitized temperature values. This enables the monitoring of both metrics in real-time. Utilizing the digital temperature data received, the MCU controls the motor driver circuit to regulate the fan speed accordingly. The motor driver module manages the fan motor's power, enabling adjustable speed control through PWM signals from the Arduino. In this manner, the Arduino MCU operates as the main processing center, overseeing the collection of temperature data through the ADC, computing and implementing necessary speed changes with the motor driver, and providing information on the LCD screen - achieving the full closed-loop temperature control function. Construction and testing Fig. 3: Actual-size PCB pattern of the temperature-based fan speed control and monitoring circuit using Arduino The LM35 temperature sensor detects the ambient temperature and converts it to an analog electrical signal. The signal is sent to the MCU on the Arduino board through an analog-to-digital converter (ADC). The ADC in the MCU converts the analog temperature data into a digital format for the Arduino's code to read. The LCD screen always displays the fan speed setting and temperature values in digital form. This allows for real-time monitoring of both indicators. The MCU uses the received digital temperature data to adjust the fan speed by controlling the motor driver circuit. The fan motor's power is controlled by the motor driver module, allowing for customizable speed adjustment using PWM signals from the Arduino. This way, the Arduino MCU acts as the central processing unit, directing the temperature data collection via the ADC, making speed changes with the motor driver, and displaying information on the LCD screen to enable complete closed-loop temperature control. Fig. 4: Component layout of the PCB The circuit layout includes connectors CON2 and CON3 in order to connect Board1, the Arduino UNO microcontroller board, to external components using a organized interface. A 12V battery powers the 12V DC fan motor. This enables the fan to function without being reliant on a main power source, resulting in a portable system that can be used for different purposes. In conclusion, the connectors CON2 and CON3 connect the Arduino board to the remaining circuit components. At the same time, a 12V battery functions as the exclusive power supply for the 12V fan motor, which is controlled by the microcontroller and electronic control interface. This setup allows for the division of various functional components while still maintaining complete closed-loop temperature control and feedback capabilities no matter where the portable system is used. ### Automatic Water Dispenser using Arduino Automatic Water Dispenser using Arduino Approximately 71% of the Earth's surface is water, yet only a meager 2.5% of it is potable. Due to increased population, pollution, and climate change, it is anticipated that we will face year-round water scarcity as early as 2025. On one side, there are already small disagreements between countries and states over dividing river water, while on the other hand, we humans squander a significant amount of drinking water because of our carelessness. Although it may seem insignificant initially, if your faucet dripped one drop of water per second, it would only take about five hours to waste one gallon of water, which is sufficient for an average person to live on for two days. What measures can be taken to prevent this? The solution, as usual, can be found in advancements in technology. By replacing manual taps with a smart one that opens and closes automatically, we can conserve water and improve our hygiene by avoiding touching the tap with dirty hands. In this endeavor, we'll create an Automated Water Dispenser with an Arduino and a Solenoid valve that dispenses water automatically when a glass is brought close to it. Doesn't that sound awesome! Therefore, let's construct one... Materials Required Solenoid Valve Arduino Uno (any version) HCSR04 – Ultrasonic Sensor IRF540 MOSFET 1k and 10k Resistor Breadboard Connecting Wires Working Concept The idea behind the Automatic Water Dispenser is quite straightforward. We will utilize an HCSR04 Ultrasonic Sensor to verify if there is any object positioned in front of the dispenser, like the glass. A solenoid valve will regulate water flow by allowing water to pass through when active and stopping the flow when inactive. We will create an Arduino code that constantly monitors for any objects close to the faucet. If an object is detected, the solenoid will activate and remain on until the object is no longer present, at which point the solenoid will deactivate, stopping the water supply. Discover more information on how to utilize an Ultrasonic sensor with an Arduino by clicking this link. Circuit Diagram The complete circuit diagram for Arduino based water Dispenser is shown below The project utilizes a 12V solenoid valve that has a maximum current rating of 1.2A and a continuous current rating of 700mA. When the Valve is switched on, it will use approximately 700mA of power to remain open. An Arduino is a Development board that runs on 5V, so a switching driver circuit is required for the Solenoid to be controlled. The IRF540N N-Channel MOSFET is the switching device utilized in this project. The first pin has the three pins Gate, Source, and Drain in that order. The solenoid's positive terminal is connected to the Vin pin of the Arduino, as illustrated in the circuit diagram. The Vin pin on the Arduino will produce 12V when powered by a 12V adapter, allowing it to control the Solenoid. The ground is connected to the negative terminal of the solenoid through the Source and Drain pins of the MOSFET. Therefore, the solenoid will receive power only when the MOSFET is activated. The MOSFET's gate pin is used for controlling its on-off state. If the gate pin is grounded, it will stay off; if a gate voltage is applied, it will turn on. In order to ensure the MOSFET remains in the off state with no voltage at the gate pin, a 10k resistor is used to ground the gate pin. Pin 12 of the Arduino controls the MOSFET, with the gate pin connected to D12 through a 1K resistor for switching on and off. This 1K resistor is employed for the purpose of limiting current. The Ultrasonic Sensor is connected to the Arduino's +5V and ground pins for power. The Echo and Trigger pins are linked to pin 8 and pin 9, respectively. Next, we can instruct the Arduino to utilize the Ultrasonic sensor for distance measurement and activate the MOSFET upon detecting an object. The entire circuit is uncomplicated, allowing for easy assembly on a breadboard. After connecting everything, mine appeared similar to the one shown below. Programming the Arduino Board We need to develop a program for this assignment that utilizes the HCSR-04 Ultrasonic sensor to calculate the distance of an object positioned in front of it. If the distance is under 10cm, we need to activate the MOSFET; if not, we need to deactivate it. We will also utilize the built-in LED connected to pin 13 and switch it on and off along with the MOSFET to verify its current state. The full set of instructions for achieving the same outcome is provided towards the conclusion of this page. Right under, I have detailed the program by dividing it into concise, meaningful sections. The program begins by defining macros. The Ultrasonic sensor is connected to the trigger and echo pin while the MOSFET gate pin and LED are used as input/output for the Arduino. We have determined the specific pin to which these will be attached. In our hardware setup, we have linked the Echo and Trigger pins to digital pins 8 and 9, respectively. Next, the pin 12 is connected with the MOSFET pin and the onboard LED is initially connected to pin 13. We describe the identical by using the subsequent sentences #define trigger 9 #define echo 8 #define LED 13 #define MOSFET 12 Inside the setup function we declare which pins are input and which are output. In our hardware only the Echo pin of Ultrasonic(US) sensor is the input pin and rest all are output pins. So we use the pinMode function of Arduino to specify the same as shown below pinMode(trigger,OUTPUT); pinMode(echo,INPUT); pinMode(LED,OUTPUT); pinMode(MOSFET,OUTPUT); In the main loop function, we invoke the function measure_distance(). This function utilizes the US sensor to calculate the distance of the object ahead and then assigns this value to the variable 'distance'. In order to calculate distance with a US sensor, you need to keep the trigger pin low for two microseconds, then high for ten microseconds, and finally low again for two microseconds. Ultrasonic signals will be emitted into the air and reflected by the object ahead, with the echo pin detecting the reflected signals. Next, we utilize the time measurement to determine the distance of the object in front of the sensor. To learn how to connect the HC-SR04 Ultrasonic sensor to Arduino, check out the provided link. Below is the provided program for determining distance. digitalWrite(trigger,LOW); delayMicroseconds(2); digitalWrite(trigger,HIGH); delayMicroseconds(10); digitalWrite(trigger,LOW); delayMicroseconds(2); time=pulseIn(echo,HIGH); distance=time*340/20000; Once the distance is calculated, we have to compare the value of distance using a simple if statement and if the value is less than 10cm we make the MOSFET and LED to go high, in the following else statement we make the MOSFET and LED to go low. The program to do the same is shown below. if(distance<10) { digitalWrite(LED,HIGH);digitalWrite(MOSFET,HIGH); } else { digitalWrite(LED,LOW);digitalWrite(MOSFET,LOW); } Working of Automatic Water Dispenser Connect the components as illustrated in the circuit and transfer the provided program to your Arduino board. Set up a basic connection for the solenoid valve to the water inlet and use a 12V adapter to power the circuit through the DC jack of the Arduino board. Ensure that the onboard LED is switched off in order to guarantee that the Solenoid is also not active. The arrangement I have created to illustrate the project is displayed underneath. I positioned the Ultrasonic sensor right beneath the solenoid valve so that when the glass or tumbler is placed under the solenoid, it aligns directly with the ultrasonic sensor. The ultrasonic sensor will detect the object, causing the MOSFET and LED to activate, resulting in the solenoid opening and allowing the water to flow out. Likewise, once the glass is taken away, the ultrasonic sensor notifies the Arduino that there is no glass present, prompting the Arduino to shut the valve. The video below contains a detailed explanation of the project's entire operation. If you are uncertain about how to make this function, feel free to ask in the comments or seek assistance in the forum for technical support. Caution: Make sure to use a solenoid that operates at 12V and does not consume more than 1.5A maximum, as different solenoid valves have varying operating voltage and current ratings. Code #define trigger 9 #define echo 8 #define LED 13 #define MOSFET 12 float time=0,distance=0; void setup() { Serial.begin(9600); pinMode(trigger,OUTPUT); pinMode(echo,INPUT); pinMode(LED,OUTPUT); pinMode(MOSFET,OUTPUT); delay(2000); } void loop() { measure_distance(); if(distance<10) { digitalWrite(LED,HIGH);digitalWrite(MOSFET,HIGH); } else { digitalWrite(LED,LOW);digitalWrite(MOSFET,LOW); } delay(500); } void measure_distance() { digitalWrite(trigger,LOW); delayMicroseconds(2); digitalWrite(trigger,HIGH); delayMicroseconds(10); digitalWrite(trigger,LOW); delayMicroseconds(2); time=pulseIn(echo,HIGH); distance=time*340/20000; } Video Read More Information... Automatic Water Dispenser using Arduino! ### Automatic Pet Feeder using Arduino Today we are constructing an Arduino-based Automatic Pet Feeder that can dispense food to your pet at scheduled times. It includes a DS3231 RTC Module to establish the feeding schedule for your pet with accurate time and date settings. Therefore, the device will automatically dispense or refill the food bowl at the set time based on your pet's feeding schedule. In this circuit, we are using a 16*2 LCD to display the time using DS3231 RTC Module with Arduino UNO. Also, a servo motor is used to rotate the containers to provide the food and 4*4 matrix keypad to manually set up the time for feeding the Pet. You can set the rotation angle and container opening duration according to the quantity of food you want to serve to your pet. The quantity of food may also depend upon your pet whether it’s a dog, cat or bird. Material Required Arduino UNO 4*4 Matrix Keypad 16*2 LCD Push Button Servo Motor Resistor Connecting Wires Breadboard Circuit Diagram In this Cat Feeder based on Arduino, we utilized an RTC (Real Time Clock) Module to obtain Time and Date. We utilized the 4*4 Matrix Keypad to manually input the Pet's feeding schedule using a 16x2 LCD display. The Servo motor turns the container and releases the food at the designated time chosen by the user. The Date and Time are displayed using the LCD. The full solution can be seen in the video provided at the conclusion. 3D-Printed Pet Feeder Model We have designed this Arduino Pet Feeder container using the 3D-printer. You can also print the same design by downloading the files from here. The material used for printing this model is PLA. It has four Parts as shown in the image below: Assemble the four parts and connect the Servo Motor as shown in the picture below: If you are new to 3D printing here is the starting guide. You can download the STL files for this pet feeder using arduino here. DS3231 RTC Module DS3231 is a RTC (Real Time Clock) module. It is used to maintain the date and time for most of the Electronics projects. This module has its own coin cell power supply using which it maintains the date and time even when the main power is removed or the MCU has gone through a hard reset. So once we set the date and time in this module it will keep track of it always. In our circuit, we are using DS3231 to feed the pet according to the time, set up by the Pet’s owner, like an alarm. As, clock reaches to the set time, it operates the servo motor to open the container gate and the food drops in the Pet’s food bowl. Note: When using this module for the first time you have to set the date and time. You can also use RTC IC DS1307 for reading the time with Arduino. Code and Explanation Automatics Pet Feeder’s Complete Arduino Code is given at the end. Arduino have default libraries for using the Servo motor and LCD 16*2 with it. But for using DS3231 RTC Module and 4*4 Matrix Keypad with the Arduino, you have to download and install the libraries. The download link for both the libraries is given below: DS3231 RTC (Real Time Clock) Module Library 4*4 Matrix Keypad Library In the below code, we are defining libraries, “#include ” for RTC module, “#include ” for Servo Motor, “#include ” for 16*2 LCD, and “#include ” for 4*4 Matrix Keypad. #include #include #include #include In the below code, we are defining the keymap for the 4*4 matrix keypad and assigning the Arduino pins for the Row and Columns of keypad. char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = { 2, 3, 4, 5 }; byte colPins[COLS] = { 6, 7, 8, 9 }; Here, we are creating the keypad by using the command below in the code. Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); Assigning A4 and A5 Arduino pins to connect with SCL and SDA pins of DS3231. Also, assigning pins to the LCD and initializing the Servo motor. DS3231 rtc(A4, A5); Servo servo_test; //initialize a servo object for the connected servo LiquidCrystal lcd(A0, A1, A2, 11, 12, 13); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) In the below code, we are declaring the t1 to t6, key, and array r[6], and the feed. int t1, t2, t3, t4, t5, t6; boolean feed = true; char key; int r[6]; In the code below, we are configuring all the elements at the beginning. Just as shown in the code snippet "servo_test.attach(10);", a Servo motor is connected to the 10th pin of the Arduino. Setting A0, A1, and A2 as the Output Pin and starting up the LCD and RTC module. void setup() { servo_test.attach(10); // attach the signal pin of servo to pin9 of arduino rtc.begin(); lcd.begin(16,2); servo_test.write(55); Serial.begin(9600); pinMode(A0, OUTPUT); pinMode(A1, OUTPUT); pinMode(A2, OUTPUT); } Understanding how the loop operates is crucial. When the Pushbutton is pressed, it becomes high, represented as 1, and can be interpreted as "buttonPress = digitalRead(A3)". It now enters the 'if' statement and invokes the 'setFeedingTime' function. Next, it evaluates the actual time with the time provided by the user. If the real time matches the entered time, then the Servo motor will rotate to an angle of 100 degrees and return to its original position after a 0.4-second delay. void loop() { lcd.setCursor(0,0); int buttonPress; buttonPress = digitalRead(A3); if (buttonPress==1) setFeedingTime(); lcd.print("Time: "); String t = ""; t = rtc.getTimeStr(); t1 = t.charAt(0)-48; t2 = t.charAt(1)-48; t3 = t.charAt(3)-48; t4 = t.charAt(4)-48; t5 = t.charAt(6)-48; t6 = t.charAt(7)-48; lcd.print(rtc.getTimeStr()); lcd.setCursor(0,1); lcd.print("Date: "); lcd.print(rtc.getDateStr()); if (t1==r[0] && t2==r[1] && t3==r[2] && t4==r[3]&& t5<1 && t6<3 && feed==true) { servo_test.write(100); //command to rotate the servo to the specified angle delay(400); servo_test.write(55); feed=false; } } In the void setFeedingTime() function code, After pressing the pushbutton we are able to enter the pet feeding time, then we have to Press ‘D’ to save that time. When the saved time matches with real time then servo start rotating. void setFeedingTime() { feed = true;   int i=0; lcd.clear(); lcd.setCursor(0,0); lcd.print("Set feeding Time"); lcd.clear(); lcd.print("HH:MM"); lcd.setCursor(0,1); while(1){ key = kpd.getKey(); char j; if(key!=NO_KEY){ lcd.setCursor(j,1); lcd.print(key); r[i] = key-48; i++; j++; if (j==2) { lcd.print(":"); j++; } delay(500); } if (key == 'D') {key=0; break; } } } Working of the Automatic Pet Feeder   Once the code is uploaded to the Arduino Uno, the 16*2 LCD will show the current time and date. When the pushbutton is activated, it prompts for the Pet's feeding time and requires inputting the time through the 4*4 matrix Keypad. The screen will indicate the time that was inputted and when you press 'D', it will store the time. If the current time matches the set time, the servo motor moves from 55⁰ to 100⁰ and then returns to its original position after a delay. Thus, the Servo motor is linked to the Food Container gate, causing it to open as it rotates, allowing for food to drop into the bowl or plate. 0.4 seconds later, the Servo motor rotates once more and shuts the gate. The entire procedure finishes in just a few seconds. This is how your pet will receive the food at the designated time automatically. Adjust the time and temperature based on the type of food. Code #include #include #include #include const byte ROWS = 4; // Four rows const byte COLS = 4; // Three columns // Define the Keymap char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. byte rowPins[ROWS] = { 2, 3, 4, 5 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins. byte colPins[COLS] = { 6, 7, 8, 9 }; //  Create the Keypad Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); DS3231  rtc(A4, A5); Servo servo_test;      //initialize a servo object for the connected servo LiquidCrystal lcd(A0, A1, A2, 11, 12, 13); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) //int angle = 0; // int potentio = A0;      // initialize the A0analog pin for potentiometer int t1, t2, t3, t4, t5, t6; boolean feed = true; // condition for alarm char key; int r[6]; void setup() { servo_test.attach(10);   // attach the signal pin of servo to pin9 of arduino rtc.begin(); lcd.begin(16,2); servo_test.write(55); Serial.begin(9600); pinMode(A0, OUTPUT); pinMode(A1, OUTPUT); pinMode(A2, OUTPUT); } void loop() { lcd.setCursor(0,0); int buttonPress; buttonPress = digitalRead(A3); if (buttonPress==1) setFeedingTime(); //Serial.println(buttonPress); lcd.print("Time:  "); String t = ""; t = rtc.getTimeStr(); t1 = t.charAt(0)-48; t2 = t.charAt(1)-48; t3 = t.charAt(3)-48; t4 = t.charAt(4)-48; t5 = t.charAt(6)-48; t6 = t.charAt(7)-48; lcd.print(rtc.getTimeStr()); lcd.setCursor(0,1); lcd.print("Date: "); lcd.print(rtc.getDateStr()); if (t1==r[0] && t2==r[1] && t3==r[2] && t4==r[3]&& t5<1 && t6<3 && feed==true) { servo_test.write(100);                   //command to rotate the servo to the specified angle delay(400); servo_test.write(55); feed=false; } } void setFeedingTime() { feed = true; int i=0; lcd.clear(); lcd.setCursor(0,0); lcd.print("Set feeding Time"); lcd.clear(); lcd.print("HH:MM"); lcd.setCursor(0,1); while(1){ key = kpd.getKey(); char j; if(key!=NO_KEY){ lcd.setCursor(j,1); lcd.print(key); r[i] = key-48; i++; j++; if (j==2) { lcd.print(":"); j++; } delay(500); } if (key == 'D') {key=0; break; } } } Video Source: Automatic Pet Feeder using Arduino ### Automatic Missile Defence System The Automated Missile Defense System is capable of neutralizing airborne threats such as planes, high-altitude ballistic missiles, and low-altitude cruise missiles. Having missile defense systems is crucial for India due to its surrounding hostile neighbors. A Surface to Air missile is a type of missile that travels at a very high speed (2-4 times the speed of sound) and is designed to target aircraft and cruise missiles. It possesses superb acceleration and a compact warhead. Typically, it is directed by radar or Infrared technology. Missiles such as RBS 70, Shtil, and SM-2 can also target surface objects. However, they will not be as efficient since their warhead is specifically created to obliterate a fragile target such as an aircraft and not solid structures like buildings or heavily protected vehicles like tanks. Step 1: Video Demonstration https://youtu.be/yugNCN4fTEE Step 2: Things Needed Step 3: Arduino Arduino is a user-friendly electronics platform that is open-source and relies on simple hardware and software. The microcontroller chip has various input/output pins that can be configured as digital I/O pins or analog input pins. This board can now be programmed using an amazing Arduino IDE, which is available for free download. Arduino is available in various forms and dimensions. A few popular Arduino models include... 1. Arduino UNO 2.Arduino nano 3.Arduino Pro mini 4.Arduino mega Arduino is an excellent instrument for creating interactive items, receiving signals from an assortment of switches and sensors, and managing numerous lights, motors, and other devices such as a buzzer. Arduino projects can function independently or they can be linked to a computer via USB. A range of projects can be created using Arduino, such as a remote control car, automation, and other projects involving embedded systems and IoT technology. If you are new to project-making, Arduino is the perfect fit for you. Step 4: Servo Motor A servo motor is an electrical device that can push or rotate an object with great precision. If we want to rotate an object at some specific angles or distance, then we can use a servo motor. Orange Wire - Signal Pin Brown Wire -GND Red Wire - Power supply Step 5: Ultrasonic Sensor An ultrasonic sensor is used to measure distance by ultrasonic waves. The ultrasonic sensor head emits an ultrasonic wave and receives the wave reflected back from the target object. It measures the distance to the target (object) by measuring the time between the emission(transmitter) and reception(receiver). The Required formula: Distance = ½ T x CT = Time between Transmitting and receiving of the sound wave. where, C = the speed of sound(340 m/s). Step 6: 3D Parts Step 7: Physical Building - Base Servo Motor Insert the servo motor into the 3D printed parts. Put screw along with servo motor in the 3D printed base parts. Set the Servo motor angles based on the requirements. Step 8: Physical Building - Fix Middle Part Servo Motor This is the middle part of the Missile Launcher. Place the servo Motor into the particular 3D printed slot. Fix the screw along with the Servo motor. Step 9: Insert the center of the missile launcher into the base using a screw for assistance. Next, make sure to securely fasten the screws on the base servo motor. Step 10: Physical Building - Fix Top Servo Motor This is the third part of the Missile launcher. Again take the servo motor and place it in a particular slot and insert the screw. Source: Automatic Missile Defence System ### Arduino Sketch Rock Paper Scissors This drawing showcases a rock-paper-scissors game that utilizes three pushbuttons for user input, two hobby servos instead of a human hand to show the countdown and selections, and tone feedback through a speaker. The code is designed to showcase a variety of techniques. non-blocking event polling loop to simultanously process input and output switch-case state machine structure to manage game control flow timer variables to schedule future events symbolic numeric constants Tinkercad Circuit Reference circuit for RockPaperScissors in Tinkercad. The annotation labels indicate the button functions and specific locations of the hobby servos. Full Source Code The full code is all in one file RockPaperScissors.ino. // RockPaperScissors.ino : play ro-sham-bo using buttons. // No copyright, 2020, Garth Zeglin. This file is // explicitly placed in the public domain. // This example implements a rock-paper-scissors game // using two hobby servos to indicate the computer and // user choices, three pushbuttons for the user to // indicate a choice, and a speaker for tone outputs // for game feedback. // // The player sees a countdown movement sequence, then // has a short window of time to press a button after // the computer starts moving or the match is invalid. // If the player moves first, the computer always wins. // The game automatically cycles back to resting. #include // The input switches are wired as active-low // pushbuttons. The 'analog' input pins are used here // in the digital input mode. const int ROCK_SWITCH_PIN = A0; const int SCISSORS_SWITCH_PIN = A1; const int PAPER_SWITCH_PIN = A2; // The speaker outout. const int SPEAKER_PIN = 5; // Hobby servos for the player and computer move // indicator outputs. const int P_SERVO_PIN = 8; const int C_SERVO_PIN = 9; // servo hardware Servo player_svo; Servo computer_svo; // ================================================ // const values to define game states (could also have // used enum) const int WAITING = 0; const int ROCK = 1; const int SCISSORS = 2; const int PAPER = 3; // calibration tables to maps a game state to a servo angle const int computer_angles[] = { 0, 63, 93, 123 }; const int player_angles[] = { 0, 123, 93, 63 }; const int countdown_angle = 30; // winning move table to return the winning state for a given state const int win_table[] = {WAITING, PAPER, ROCK, SCISSORS}; // state machine indices, defined using enum enum { IDLE, COUNTDOWN, MOVING, COMPUTER_WIN, PLAYER_WIN, DRAW, FAULT, RESET }; // time constants in milliseconds const long countdown_wait = 500; const long valid_input_wait = 400; const long idle_wait = 2000; const long resolution_wait = 1500; const long reset_wait = 1500; const long melody_wait = 250; // state variables for the game int game_state = IDLE; int game_counter = 0; int computer_state = WAITING; int player_state = WAITING; long game_timer = 1000; // state variables for the audio player int melody_note = 60; int melody_interval = 7; int melody_count = 0; long melody_timer = 0; // ================================================ void setup() { player_svo.attach(P_SERVO_PIN); computer_svo.attach(C_SERVO_PIN); // issue an initial servo command to the reset condition player_move(WAITING); computer_move(WAITING); Serial.begin(115200); Serial.println("Welcome to rock, scissors, paper."); } // ================================================ void loop() { // The timestamp in milliseconds for the last polling // cycle, used to compute the exact interval between // output updates. static unsigned long last_update_clock = 0; // Read the millisecond clock. unsigned long now = millis(); // Compute the time elapsed since the last poll. // This will correctly handle wrapround of the 32-bit // long time value given the properties of // twos-complement arithmetic. unsigned long interval = now - last_update_clock; last_update_clock = now; // Always advance the game timer; when it becomes // negative the current phase has expired. game_timer = game_timer - interval; // Always keep advancing the pseudorandom generator. long next_random = random(1,4); // Advance the melody player if needed. if (melody_count >= 0) { melody_timer = melody_timer - interval; if (melody_timer < 0) { melody_timer = melody_wait; play_next_note(); } } // Always read the player switches. This provides a // single location to perform input validation. The // hardware is wired for active-low logic. bool rock_pressed = !digitalRead(ROCK_SWITCH_PIN); bool scissors_pressed = !digitalRead(SCISSORS_SWITCH_PIN); bool paper_pressed = !digitalRead(PAPER_SWITCH_PIN); // Reduce the switch selection input to a single // value, rejecting multiple pushes. int user_input_state = WAITING; // default neutral value if ( rock_pressed && !scissors_pressed && !paper_pressed) user_input_state = ROCK; if (!rock_pressed && scissors_pressed && !paper_pressed) user_input_state = SCISSORS; if (!rock_pressed && !scissors_pressed && paper_pressed) user_input_state = PAPER; // Run one update cycle of the game state machine. switch(game_state) { case IDLE: // no one is moving if (user_input_state != WAITING) { // player has played early, let's win! player_state = user_input_state; computer_state = win_table[player_state]; computer_move(computer_state); player_move(player_state); game_state = COMPUTER_WIN; game_timer = resolution_wait; Serial.println("Player played early, computer wins."); start_arpeggio(60, 7, 3); } else if (game_timer < 0) { // time to start the countdown Serial.println("Starting countdown."); game_timer = countdown_wait; game_counter = 3; countdown_beat(true); game_state = COUNTDOWN; } break; case COUNTDOWN: // both are moving 1, 2, .. in preparation if (user_input_state != WAITING) { // player has played early, let's win! player_state = user_input_state; computer_state = win_table[player_state]; computer_move(computer_state); player_move(player_state); game_state = COMPUTER_WIN; game_timer = resolution_wait; Serial.println("Player played early, computer wins."); start_arpeggio(60, 7, 3); } else if (game_timer < 0) { // time to continue the countdown animation game_counter = game_counter - 1; if (game_counter < 0) { // time to choose a move game_timer = valid_input_wait; computer_state = next_random; computer_move(computer_state); game_state = MOVING; Serial.println("Computer moved."); } else { // continue the countdown animation countdown_beat((game_counter % 2) == 1); game_timer = countdown_wait; } } break; case MOVING: // computer is moving, wait for user input within a // short interval if (user_input_state != WAITING) { player_state = user_input_state; player_move(player_state); game_timer = resolution_wait; Serial.println("Player responded."); // decide the winner if (computer_state == player_state) { game_state = DRAW; Serial.println("Draw, no winner."); start_arpeggio(66, -6, 2); } else if (computer_state == win_table[player_state]) { game_state = COMPUTER_WIN; Serial.println("Computer wins."); start_arpeggio(60, 7, 3); } else { game_state = PLAYER_WIN; Serial.println("Player wins."); start_arpeggio(55, 12, 3); } } else if (game_timer < 0) { // if the user did not respond in time game_timer = resolution_wait; game_state = FAULT; Serial.println("Player did not respond, game fault."); start_arpeggio(60, -12, 3); } break; // In every game outcome, wait for servos to finish // moving, then reset. case COMPUTER_WIN: case PLAYER_WIN: case DRAW: case FAULT: if (game_timer < 0) { game_timer = reset_wait; computer_state = WAITING; player_state = WAITING; computer_move(computer_state); player_move(player_state); game_state = RESET; } break; case RESET: // returning to start if (game_timer < 0) { game_timer = idle_wait; game_state = IDLE; } break; } // add a short delay to not overwhelm the Tinkercad simulator delay(20); } // ================================================ // movement primitives void player_move(int state) { player_svo.write(player_angles[state]); Serial.print("Player move: "); Serial.println(state); } void computer_move(int state) { computer_svo.write(computer_angles[state]); Serial.print("Computer move: "); Serial.println(state); } void countdown_beat(bool forward) { if (forward) { player_svo.write(countdown_angle); computer_svo.write(countdown_angle); Serial.print("beat forward..."); } else { player_svo.write(0); computer_svo.write(0); Serial.println("back..."); } } // ================================================ // sound primitives void start_arpeggio(int start, int interval, int length) { melody_note = start; melody_interval = interval; melody_count = length; melody_timer = melody_wait; play_next_note(); } // choose and play the next note in the melody sequence void play_next_note(void) { if (melody_count > 0) { float freq = midi_to_freq(melody_note); tone(SPEAKER_PIN, freq); // advance the arpeggio melody_note = melody_note + melody_interval; melody_count = melody_count - 1; } else if (melody_count == 0) { // when melody_count is zero, silence the speaker // and set it to -1 to represent the idle state melody_count = -1; noTone(SPEAKER_PIN); } } float midi_to_freq(int midi_note) { const int MIDI_A0 = 21; const float freq_A0 = 27.5; return freq_A0 * pow(2.0, ((float)(midi_note - MIDI_A0)) / 12.0); } // ================================================ Source: Arduino Sketch Rock Paper Scissors ### Arduino Mosquito Repeller In this tutorial, I will demonstrate how to create a mosquito repellent device with the help of an Arduino. The repellent comes in a shield form that can be connected to the Arduino board, allowing for easy modification of its frequency. This project is perfect for camping and hiking outdoor activities, as it emits a 31KHz Frequency sound that works as a mosquito repellent. This device can be tuned to different frequencies and also functions as a dog whistle between 23 kHz and 54 kHz. These frequency ranges are not detected by human ears. You have the option to watch the video below to learn how to construct this project. https://youtu.be/KsspeH1-t90 Step 1: Tools and Components Here is a list of the components and tools required, the list is simple and all you need is Arduino Uno PCB Piezoelectric Disk Header Pins A breadboard (optional) Wires Soldering Iron Soldering Lead Step 2: Measuring This tutorial will show how to make a mosquito repellent device using an Arduino. The shield-shaped repellent can be attached to the Arduino board for simple adjustment of its frequency. This project is ideal for outdoor camping and hiking activities, as it produces a 31KHz Frequency sound that acts as a mosquito repellent. This gadget has the ability to be adjusted to various frequencies and can also double as a dog whistle ranging from 23 kHz to 54 kHz. Human ears are unable to detect these frequency ranges. You can choose to view the video below for instructions on how to build this project. Step 3: Cutting Once the headers are soldered, remove the extra PCB by cutting it with a rotary tool or a PCB cutter. Once you have cut the PCB, you should have a shield that looks similar to the one shown in the image. You have the option to smooth down uneven edges for a neater appearance. Insert the board into the Arduino to ensure proper fitting. Step 4: Circuit The setup is straightforward - one piezoelectric disk is linked to digital pin 9 while the other is connected to digital pin 11. Both disks' remaining terminals are joined and secured to the Arduino's ground terminal. I am utilizing two digital pins in order to produce two distinct frequencies. If you prefer using just one frequency, you have the option to connect both disks in parallel. Adjusting both disks to match the same frequency will result in the board vibrating in harmony, which will lead to an increased coverage area. Read more: Arduino Mosquito Repeller ### Arduino – Control a DC motor with TIP120, potentiometer and multiple power supplies A simple diagram demonstrating how to regulate the velocity of a DC motor using a potentiometer connected to your Arduino device. Additionally demonstrates the method of utilizing a TIP120 transistor for enabling the Arduino to manage a more powerful power source. Transistors consist of 3 pins, with the third pin (Base) enabling control of the current flowing through the other two pins (Collector and Emitter). In this tutorial, I am utilizing the electrical power from the Arduino's Digital PWM pin 9 (+5V) to regulate the current flow to a DC motor, which requires a separate power source with a significantly higher current capacity than what the Arduino board is capable of providing or managing. Every transistor is specifically designed for a particular operating range or current, as is typical for electrical components. Displayed below are the pins of TIP120 along with their representation in a schematic diagram: That is the transistor. The next component is the rectifier diode, which I am placing between the power supply and the motor. It functions as a unidirectional gate to restrict current flow in one direction, ensuring my circuit remains safe in case of a power surge from the motor power supply or excessive current draw by the motor. The primary point is that like LED's, diodes have a proper orientation indicated on the left. Another component is the potentiometer, which functions as a resistor that can be adjusted. You can regulate the current by adjusting how much is allowed to pass through when you turn it. Like resistors, potentiometers also have a resistance rating in Ohms and a power rating. I am using a potentiometer with a resistance rating of 10K ohms. Arduino TIP120 Circuit Components 1K Ohm resistor (Brown, Black, Red, Gold) 10k Potentiometer TIP120 Transistor 1n4004 1A Diode 6V DC motor Arduino Deumilanove w/ ATMEGA328 Breadboard / Prototyping board Jumper/ Connector wires 4x AA battery holder 4x AA batteries Optional 9V DCpower supply or use the USB power for the Arduino TIP120 Arduino DC Motor Control Circuit Pretty simple, but remember that the GND connection must be shared between the Arduino and the additional power supply and I’m using a 1k Ohm resistor between Arduino pin 9 and the Base pin of the transistor. TIP120 DC Motor Driver Sketch int potPin = 0; // Analog pin 0 connected to the potentiometer int transistorPin = 9; // connected from digital pin 9 to the base of the transistor int potValue = 0; // value returned from the potentiometer void setup() { // set the transistor pin as an output pinMode(transistorPin, OUTPUT); } void loop() { // read the potentiometer, convert it to between 0 - 255 for the value accepted by the digital pin. potValue = analogRead(potPin) / 4; // potValue alters the supply from pin 9 which in turn controls the power running through the transistor analogWrite(9, potValue); } For more detail: Arduino – Control a DC motor with TIP120, potentiometer and multiple power supplies ### Arduino Button Mouse Control Code With the Mouse library, an Arduino Leonardo, Micro, or Due can manipulate the onscreen cursor of a computer. This specific instance involves the use of five pushbuttons to control the movement of the cursor on the screen. Four buttons control direction (up, down, left, right) and one activates a left mouse click. Cursor movement on the Arduino is consistently based on a relative position. Whenever an input is received, the cursor's position is adjusted in relation to its existing location. Each time a directional button is activated, the Arduino will manipulate the mouse by translating a HIGH signal into a movement of 5 units in the correct direction. The fifth button controls a left mouse click. When the board is pressed, it sends a signal to the computer. Upon releasing the button, the computer will acknowledge the occurrence. Note: The Arduino seizes control of your computer's cursor when the Mouse.move() command is used! Make sure to establish a controller before using Mouse.move() to prevent losing control of your computer during the sketch. The cursor position in this sketch is only updated when a button is pressed. Software Required none image developed using Fritzing. For more circuit examples, see the Fritzing project page Schematic:   Code /* ButtonMouseControl Controls the mouse from five pushbuttons on an Arduino Leonardo or Micro. Hardware: * 5 pushbuttons attached to D2, D3, D4, D5, D6 The mouse movement is always relative. This sketch reads four pushbuttons, and uses them to set the movement of the mouse. WARNING:  When you use the Mouse.move() command, the Arduino takes over your mouse!  Make sure you have control before you use the mouse commands. created 15 Mar 2012 modified 27 Mar 2012 by Tom Igoe this code is in the public domain */ Major Components in Project Hardware Required Arduino Leonardo, Micr or Due board 5 momentary pushbuttons Five 10-kilohm resistors hook up wire breadboard For more detail: Arduino Button Mouse Control Code ### 8 Channel Relay Board Using Arduino Description 8 Channel Relay Board provides an easy and practical method to connect 8 relays for switching purposes in your project. Voltage level support for both TTL and CMOS is provided by the input. Simple interface for projects using Microcontrollers and analog circuits. Specifications: Input supply 12 VDC @ 336 mA Output eight SPDT relay Relay specification 5 A @ 230 VAC Trigger level 2 ~ 15 VDC Header connector for connecting power and trigger voltage LED on each channel indicates relay status Screw terminal connector for easy relay output and aux power connection Four mounting holes of 3.2 mm each PCB dimensions 152 mm x 60 mm   For more detail: 8 Channel Relay Board Using Arduino ### TMP36 Temperature Sensor With Arduino in Tinkercad For this assignment, your goal is to transform the Arduino into a thermometer! Utilize a temperature sensor to track your skin's temperature and record the information using three LEDs. The Arduino, being a digital tool, is able to collect information from analog devices such as the TMP36 temperature sensor by utilizing its on-board Analog-to-Digital (ADC) converter, accessible through the well-known analog pins A0-A5.previous lesson about analog input. Start by starting the simulation on the circuit and then manipulate the temperature slider on the sensor to observe how it affects the patterns of the LED. In this tutorial, you will build the simulated circuit on your own while following the provided example. To build the actual circuit, gather an Arduino Uno board, USB cable, solderless breadboard, three LEDs, three identical resistors (any value between 100-1K ohms, with 220 ohms suggested), a TMP36 temperature sensor, and breadboard wires. You can follow along virtually using Tinkercad Circuits. You can even view this lesson from within Tinkercad (free login required)! Explore the sample circuit and build your own right next to it. Tinkercad Circuits is a free browser-based program that lets you build and simulate circuits. It's perfect for learning, teaching, and prototyping. Step 1: Build the LED Circuit Just as you’ve learned from the introductory lessons, start by wiring up your Arduino and breadboard with power and ground next to the example circuit, then add the the three red LEDs to the breadboard, as shown. These will be the indicator or "bar graph" lights for the project. Transfer an Arduino Uno and breadboard from the component area to the workspace, next to the existing circuit. Connect the 5 volt and ground pins from the Arduino to the positive and negative rails on the breadboard with wires. If you like, you can choose to change the wire colors. You have the option to use either the inspector dropdown or the number keys on your keyboard. Position three LEDs in a line on row E of the breadboard, ensuring a gap of 2 sockets between each LED. Select a LED to access the inspector and change its color. Link the negative side of each LED (left leg) to the ground line (black) on the breadboard with a 220 Ohm resistor. In Tinkercad Circuits, you can change a resistor's value by choosing it and using the dropdown menu in the inspector tab. Connect the longer legs (positive ends) of the LEDs to digital pins 4, 3, and 2 on the Arduino. The point where current enters is the LED anode (+). The cathode, identified with (-), is where the current begins. This is connected to the ground track. Step 2: Set up a Thermal Detector. A temperature sensor generates a voltage signal that changes in response to the sensed temperature. It contains three pins: one for grounding, another for 5 volts connection, and a third that supplies a variable voltage to your Arduino, akin to a potentiometer's analog signal. There is a wide variety of temperature sensors available for selection. The TMP36 is beneficial as it produces a voltage output that changes linearly with Celsius temperature. Locate the temperature sensor within the components drawer of the circuit design tool. Position the TMP36 temperature sensor on the breadboard with the rounded side facing away from the Arduino, as shown in the example diagram for proper placement. Position the temperature sensor in row E on the breadboard according to the diagram. Connect the temperature sensor by linking the left pin to the 5V voltage rail, the middle pin to A0 on the Arduino, and the right pin to the GND rail. Step 3: Analog Input Observation The circuit diagram clearly shows that the temperature sensor is connected to both the 5-volt power source and the 0-volt ground, as well as the analog pin A0. As the temperature rises, so does the voltage on the pin that is linked to A0. It is also noticeable that all three LEDs are connected to separate digital pins. Even though it is a digital tool, Arduino can still gather information from analog sensors to measure factors like temperature and light. In order to complete this task, you will utilize the Arduino's built-in Analog-to-Digital Converter (ADC). Input voltages ranging from 0 to 5V on pins A0 to A5 are transformed into values from 0 to 1023 within the Arduino code. The primary function of the analog pins is to collect information from sensors (and they can also be used as digital outputs 14-19, by the way). Step 4: Blocks Code Let's use the code blocks editor to listen to the state of the sensor, then make decisions about which LEDs to light up based on the sensor's value.   Click the "Code" button to open the code editor. The grey Notation blocks are comments for making note of what you intend for your code to do, but this text isn't required or executed as part of the program. Click on the Variables category in the code editor. Create a new variable called baselineTemp and use a "set" block to set it to 40 (degrees C). To store the sensor value, create a variable named "celsius". Drag out a "set" block and adjust the dropdown to our new variable celsius. In the Math category, drag out a "map" block, and nest two arithmetic blocks ("1 + 1") within its first field. Adjust the range from -40 to 125. Click on the Input category and drag out an "analog read pin" block, and place it into the first arithmetic field inside the "map" block. Adjust the arithmetic blocks to "(read analog pin A0 - 20) x 3.04". Optionally create a new variable for converting the temperature to Fahrenheit with a set block and some arithmetic blocks to read "set fahrenheit to (celsius x 9)/5 + 32". Add some serial monitoring blocks to print out the temperature in one or both C or F. Click the Control category and drag out an if then block, then navigate to Math and drag a comparator block onto the if block. In the Variables category, grab the celsius variable and the baselineTemp variable and drag them into the comparator block, adjusting the dropdown so it reads "if celsius < baselineTemp then". Add three digital output blocks inside the if statement to set pins 2, 3, and 4 LOW. Copy and paste this if statement four more times and include arithmetic and logical blocks to have a total of five state detection if statements. In the initial state, LEDs remain unlit due to the temperature being lower than our desired baseline. If the temperature is equal to or higher than baselineTemp but less than baselineTemp plus 10, illuminate the LED on pin 2 exclusively. Illuminate two LEDs when the temperature falls within the range of baselineTemp+10 to baselineTemp+20. And so forth to consider all the required conditions. Step 5: Arduino Code Explained When the code editor is open, you can click the dropdown menu on the left and select "Blocks + Text" to reveal the Arduino code generated by the code blocks. Follow along as we explore the code in more detail. int baselineTemp = 0; int celsius = 0; int fahrenheit = 0; Before the setup(), we create variables to store the target baseline temperature, as well as the sensor value. They're called int because they are integers, or any whole number. void setup() { pinMode(A0, INPUT); Serial.begin(9600); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); } Inside the setup, pins are configured using the pinMode() function. Pin A0 is configured as an input, so we can "listen" to the electrical state of the temperature sensor. Pins 2, 3, and 4 are configured as outputs to control the LEDs. void loop() { // set threshold temperature to activate LEDs baselineTemp = 40; // measure temperature in Celsius celsius = map(((analogRead(A0) - 20) * 3.04), 0, 1023, -40, 125); Anything after a set of slashes // is a comment, just for us humans to read, and is not included in the program when the Arduino runs it. In the main loop, baselineTemp is set to its target 40 degrees C. // convert to Fahrenheit fahrenheit = ((celsius * 9) / 5 + 32); Serial.print(celsius); Serial.print(" C, "); Serial.print(fahrenheit); Serial.println(" F"); The formula for converting between celsius and Fahrenheit is F = (C * 9) / 5 + 32. Printing to the serial monitor helps you observe the temperature change more granularly than the LED states show alone. if (celsius < baselineTemp) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); } if (celsius >= baselineTemp && celsius < baselineTemp + 10) { digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); } if (celsius >= baselineTemp + 10 && celsius < baselineTemp + 20) { digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, LOW); } if (celsius >= baselineTemp + 20 && celsius < baselineTemp + 30) { digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); } if (celsius >= baselineTemp + 30) { digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); } delay(1000); // Wait for 1000 millisecond(s) } The loop contains six if statements that check various temperature ranges from 40 to 46 degrees C, activating additional LEDs as the temperature increases. To see a clearer difference in bar graph lights, adjust the baseline temperature variable and/or the range being observed by modifying the if() statements arguments. This process is known as calibration. Step 6: Use It! By constructing a physical replica of the circuit, you can experiment with it by using the serial monitor feature in the Arduino software (located in the top right corner of the drawing window) and activating the sensor by touching it with your fingers. If the temperature of the room is extreme or if your fingers are cold, the project may not function correctly. While utilizing a physical board, keep an eye on the room temperature with the serial monitor and adjust the baselineTemp to align with that measurement. Change the range of your temperature boundaries to be narrower, such as 2, 4, 6 instead of 10, 20, 30. Re-upload your code and attempt to grip the sensor using your fingers. Witness the LEDs illuminating in succession as the temperature increases. Step 7: Next, Try... You have used analogRead() and the serial monitor to track changes inside your Arduino and create a simple temperature display with LEDs. You will use this technique with other types of sensors in future projects! One way to expand this project is to create a way for two people to compare finger temperature. Would you need two sensors, or could they take turns? How would you build code to function as well as communicate the way to use it? You can also learn more electronics skills with the free Instructables classes on Arduino, Basic Electronics, LEDs & Lighting, 3D Printing, and more. Source: TMP36 Temperature Sensor With Arduino in Tinkercad ### Soundlazer SNAP - The Directional Parametric Speaker The Soundlazer directional audio project is the follow-up to my initial and highly successful project on Kickstarter. During my efforts to reduce the price of this incredible technology, I created the Soundlazer "Snap" to enable supporters to discover fresh options in directional audio. Directional speaker systems such as the Soundlazer are known as parametric speakers. Ultrasonic carrier waves are utilized to send audio to listeners in a concentrated sound beam similar to light emitted by a laser. In general, only the individual positioned in front of a parametric speaker is able to hear the audio that is being transmitted. Individuals located on either side of the directional audio source experience minimal or no auditory output.   For more detail: Soundlazer SNAP - The Directional Parametric Speaker ### Power Quality Meter ( PQ Monitor) using Arduino Arduino UNO project, Power Quality Meter, someone would call it’s PQ Monitor or PQ Analyzer. I had already published one  blog  devoted RMS voltage measurements on full band  20 – 20 000 Hz  audio signals. ( Following my own style, I’d refer to already published materials whenever it’s possible ).  This time measurements performed on single AC Power Grid frequency. ( 60 Hz in Canada. Algorithm would works with 50 Hz as well ). Features: Graphic LCD display 128×64; First 5 harmonics presentation; RMS Voltage Indicator; Frequency Monitoring; THD calculation; Internal data up to 63-d !!! harmonics components in Real-Time; The Holy Grail of this project, is a method of sampling input waveform. As there is only one main frequency (fundamental) at the input, I came up with idea to do a sampling period VARIABLE. There are at least 2 great advantages in this brilliant ( may I ? ) invention: It’s completely eliminate necessity of the windowing. Only ONE period of input waveform is enough for precise calculation. First of all, windowing is really BAD on metrological side (for accuracy of results), smashing one single frequency bin to over 3 – 5 of it’s neighbors, significantly deteriorating input sensitivity, and plus it’s not able to eliminate limits discontinuity effects well – only attenuate them. Secondly, from software timing performance point of view, introducing windowing in the Real-Time application would automatically require to DOUBLE data throughput, as Overlap – Add procedure would be mandatory. In it’s essence, I created a software PLL (Phase Lock Loop). Compare to a project with hardware based PLL (IC 74HC4046), no need for external chip this time. Engine is running on Timer1 features – CTC mode and capability to drive ADC Auto trigger. I will go into details in software section. Hardware. As you can see on the drawings, circuitry is quite simple, one LCD ( I used SparkFun LCD-00710, could be different ) and one IC, LM311 – comparator. Pay attention, that GEDA doesn’t have a library for such display, all details on LCD configuration, pin numbering etc you can find here.  I haven’t experienced any difficulties with assembling LCD, except soldering bunch of wires and installing control brightness level pot. Thanks author of the GLCD library (great work!), there were no troubles with software also. The transformer is providing galvanic isolation, as the saying goes - prioritizing safety! Any primary winding component for 110V or 220V AC power, without a specific part number, and with around 10V on the secondary side should work fine. The resistive voltage divider values (22k and 2 x 4.7k) can be modified in proportion for transformers with varying secondary voltage outputs. The key is to maintain a voltage level around 2V AC peak value on the arduino analog input # 5. There are two 2200 pF capacitors for filtering RF interference, and one trim pot for adjusting the threshold of the comparators (which could be replaced by a constant voltage divider using two resistors). If an LCD is installed on the same board as the Arduino, it is important to properly separate the +5V power lines to prevent the Arduino from malfunctioning due to excessive interrupts on pin 2 (INT0). SOFTWARE. I’ve read an article in December’s issue of the Elektor magazine, that actually inspired me on this project. Even I had such idea in my mind for quite awhile, nevertheless Elektor’s publication accelerate this process. Do you still remember I called my method “brilliant”? And this is why: compare to  project published in well known and respectful electronics magazine, my code is running 140 !!! TIMES faster ( compare 5 milliseconds to 700 milliseconds competitors ). I didn’t tweak any optimization. My software is running REAL-TIME in each AC period, keeping load of the microprocessor below 30 %. It’s capable to do a Real-Time monitoring of three phase power line. The only things which is slow down process, is LCD display refreshment. In current version, algorithm averages data over 32 cycles before outputs summary data report  on the display, around 0.53 seconds period ( 32 / 60 ). During update display procedure (23 milliseconds, or so) which is longer than 16.66 milliseconds period of the AC 60 Hz, one cycle is skipped. Depends on application, the task of updating screen could be split over many sub-frames, so instead of one big chunk of code, 32 smaller size pieces will go unnoticeable in background, fixing an issue of 33-rd lost frame. But I don’t think it’s necessary for monitoring purposes, may be only in Power Energy Meter project? I just can’t imagine, Elektor’s 2100 milliseconds overall time per cycle, when everything could be done in less than 7 milliseconds ( using split display subroutine ). It’s 300 times difference!.   THE MAGIC. Software PLL / FLL – Frequency Lock Loop is build on TIMER1 VCO. Well, it’s not quite correct to call it VCO, probably FCO – Frequency Controlled Oscillator. Software adjusts oscillator in such a way, that number of captured samples  per one AC waveform has to be exactly 128 .  Look here: if ( smpl_Nmbr > FFT_SIZE ) smpl_Time++; if ( smpl_Nmbr < FFT_SIZE ) smpl_Time–; OCR1A = smpl_Time; OCR1B = smpl_Time; If the timer restarts frequently during an AC period (1/60 Hz = 16.66 milliseconds) when FFT_SIZE is set to 128, the smpl_Time variable will increase, causing TIMER1 FCO to slow down. If not, smpl_Time decreases, causing the clock to speed up. The usual method of tracking the quantity of captured samples involves incrementing the input array variable smpl_Nmbr during every ADC "start conversion" event triggered by channel B. ISR(TIMER1_COMPB_vect) { if ( smpl_Nmbr < FFT_SIZE ) { x_r[smpl_Nmbr] = ADC – adc_Offst; // } smpl_Nmbr++; } ( Paralleling Timers two  channel A and B was invented here.)  The comparators main duty is to trigger digital pin 2 (INT0) exactly in the same point in time, relatively to input signal periodicity. Not necessary at zero. Synchronization point could be at any voltage level on the input waveform, it’s has nothing to do with zero-crossing. As software calculates complete FFT subroutine, for both REAL and IMAGINARY part (btw, referring link) , adjusting point (via pot) to exactly zero-cross simply push all energy in imaginary part (sine). Bringing this point to 45 degree would splits energy equally between real and imaginary parts. Later on, extracting square root from sum of two squares ( magnitude calculation ) simply annihilate any difference, magnitude is not changing with moving synchronization point up and down at all. DC offset is adjusted in every cycle based on REAL (cosine) bin-0 magnitude: temp = f_r[0]; if ( temp > 0 ) adc_Offst++; if ( temp < 0 ) adc_Offst–; Rolling Filter, the easiest one to implement and understand, and very efficient against spikes. Arduino UNO sketch:  download. I did some “resource  management” in software, because data calculation in each cycle of AC waveform is not really necessary. Let me explain. There are 3 major hardware limits : ADC resolution Memory size / CPU performance Update Rate In the initial iteration, the analysis of harmonic magnitude extends up to the 63rd harmonic. However, due to the Arduino ADC being limited to 10 bits (9 bits plus sign), it is not practical for real-world electrical grid applications because the magnitude of the 5th harmonics falls below the noise floor at -55.94 dB (0.16%). Two possible solutions are to increase the FFT size or utilize oversampling techniques. The initial approach cannot be implemented because of memory constraints. The second one results in a update rate that is too slow for practical purposes. In this software update, I restrict calculations to the initial 7 harmonics and display all of them on the screen (refer to the photo). The size of the FFT remains unchanged at 128. With a lower sampling clock, it takes 8 AC cycles to populate the input array with new data. Technique - resampling in the temporal domain. It provides a 3-bit increase in resolution, equivalent to what is already present. 12-bit ADC, overall dynamic range 6.02 x 12 + 1.76 = 74 dB. (0.02%) Version 2:  download. ### PID Thermostat For The Arduino PID Thermostat This PID thermostat is designed for the arduino platform. It provides separate tuning parameters for several hardware 'profiles', and features an autotune mode to calculate the PID parameters for a specific setpoint. Installation Hardware DS18-series (I'm using the DS18B20) temperature sensor Solid-state relay rated for your power source 16x2 LCD display (I'm using the LCD-09052 from Sparkfun) 4 buttons (I think mine are normally closed) There's an arduino shield designed specifically for this sketch which can be ordered for around $25 on BatchPCB. The fritzing source files for the PCB layout are in the fritzing directory. Software OSX: sudo pip install ino brew install picocom Other OS's will have their own picocom install process. Picocom is only really necessary if you want to use ino serial. I prefer to use screen /dev/tty.foo, FWIW. Sketch # get it git clone git@github.com:kerinin/arduino-thermostat.git ./ cd arduino-thermostat git submodule init && git submodule update # deploy it ino build ino upload Using Make sure to review the pin settings and make changes to your wiring to match them or update them to work with your hardware. The settings menus can be navigated using the up & down buttons, while values can be adjusted by using the left & right buttons. Establish your desired temperature and the SSR will begin operating. If you notice frequent oscillations or periodic temperature spikes with extended ramp down periods, consider performing an autotune cycle. This operates by increasing the power to maximum and monitoring until the temperature exceeds a specific range around your desired setpoint (managed by the 'Tuning Range' parameter). It reduces the power to 0% and stays idle until the temperature drops below the specified range. Continue to wash and repeat until a consistent oscillation is established, then adjust the PID parameters according to the amplitude and frequency of the oscillation. The PID and autotune features use the awesome PID and PID_Autotune libraries by Bret Beauregard. For more information on how they work take a look at this post about the PID library and this post about the Autotune library Contributing Please do! Fork the repo, make some changes and send me a pull request! Future Directions on/off switch I'd like the temperatures to ramp from their current value to the target value over some time period based on the tuning parameters. This should reduce oscillation and overshoot. Refactor the different files into self-contained classes. (Stop sharing global state!!!) Improve the MenuBackend library's UI handling. Try to remove that case statement in the display code Import / Export profile data from console   For more detail: PID Thermostat For The Arduino   ### OV7670 Camera Module DIY Guide Here we introduced one OV7670 camera module just purchased online, including the communication of camera module and Arduino UNO, the using ways to take photo via camera module, and so on. This is an Arduino camera module,  adopted the Surveillance cameras digital image processing chip-OV0706, specially designed for image acquisition and processing application,  based on TTL communication interface, very convenient to connect with Arduino controller, able to read image and data via UART serial port, and then perform some image processing. This is a detailed DIY guide for the OV7670 TTL and UART camera, and you can also download the code from ElecFreaks. Part 1   General description This camera module has the capability to carry out image processing like AWB, AE, and AGC for the video signal from the CMOS sensor. Additionally, by combining other cutting-edge technologies like low light image enhancement processing and intelligent prediction and reduction of image noise, this module can produce high-quality digital video signals through a standard CCIR656 interface. OV7670 includes a built-in JPEG decoder that enables real-time encoding of captured images. External controllers can effortlessly access the M-JPEG video streams, allowing for a dual-stream camera design. OV7670 features motion detection and OSD display function with screen characters and pattern overlay support, and the ability to define detection area and sensitivity. Part 2  Test OV7670 camera module Step 1   Needed tool for testing Hardware: 1. SD Module 2. Digital key module 3. Arduino UNO 4. Jumper wire 5. USB cable 6. OV7670 camera module software: 1. Camera_VC0706_TEST 2. Arduino IDE(download it from official website) Step 2 Hardware connection 1. Connect the hardware as below: 2. Here below is the physical diagram??? Step 3  Software use and code programming 1. Firstly download the two files of Camera_VC0706_lib and Camera_VC0706_TEST from the Camera Module Code written by ElecFreaks and then unzip it. 2. Put the unzipped file of Camera_VC0706_lib into the Arduino IDE folder of Libraries. 3. Open  unzipped file of Camera_VC0706_TEST, and the program the code into UNO. The detailed steps are demonstrated as below. 4. Click Tools,and then choose the board of Arduino uno like below 5. Click Tools / Serial Port,and then choose the corresponding COM number. 6. And then click the button of programming like below in red rectangle,program the code into the UNO board until done uploading appears. 7. Finally open the monitoring serial port as below in red rectangle. 8. When the serial port display the data like demonstrated below, you can press the digital keys to take a photo. 9. If photo was taken successfully, the serial port would be displayed as below 10. Until now, the module testing has been completed. For more detail: OV7670 Camera Module DIY Guide ### Multiplexing 7 Segment displays with Arduino and Shift Registers This guide will explain the basics of controlling multiple 7 segment displays using an Arduino and a couple of shift registers. This project is ideal for displaying numerical data or managing a set of LEDs. As a beginner, like me, I had no clue on how to tackle this task. After trying out different methods and overcoming obstacles, I now have a stronger understanding of multiplexing and the best strategies for utilizing it with an Arduino. Firstly, what is multiplexing exactly? What do you think of Charlieplexing? Do discrepancies exist? In actuality, they are the same... Charlieplexing takes multiplexing to a higher level. Both approaches target reducing the quantity of microcontroller pins needed and lowering power demands substantially. However, this means sacrificing either time or brightness. Multiplexing entails showing all the digits or rows of LEDs at once. After a certain period, the entire digit or row is turned off and the next digit/row is turned on, and so on... Simple! However, Charlieplexing is slightly more complex as it goes beyond the basics of multiplexing. Instead of turning on or off an entire number or line, only one segment or individual LED is turned on or off. After a period of time, the segment/LED turns off and the next segment/individual LED is turned on consecutively, continuing this pattern. After finishing one digit/row, the sequence starts again with the next digit/row. When charlieplexing a 7-segment display, a maximum of 20mA is used, as opposed to 160mA in multiplexing, since only one segment is active at a time. The main drawback is the slowdown in displaying data and reduction in luminosity because the system must cycle through all 7 segments + decimal or each LED before advancing to the next digit or row. When you add more displays/LEDs, you might notice a slight flicker. Use the information above to compare multiplexing and charlieplexing. Can you notice how it takes more time to show a number using charlieplexing? Before beginning your multiplexing project, ensure careful planning by conducting extensive research. If not, you will end up wasting both time and money and become so frustrated that you will want to tear your hair out. Step 1: Plan the hardware To multiplex 7 segment displays, you will need the following: 1. 7 segment displays -- I'm using 3 x 4.0 Inch Super Red 7 Segments from Kingbright (SA40-19SRWA) I strongly suggest you purchase COMMON ANODE displays. Common anode means all the anodes (+) pins are connected. You apply + voltage to the anode and use shift registers to ground the segments and form a complete circuit. Very simple! However, with common cathode, all the ground (-) pins are connected. You then use shift registers to divert power to the anodes of the segments. However, the problem with this setup, as I've learned the hard way, is that you need to worry about sourcing AND sinking current. Most uControllers and shift registers cannot source nor sink a lot of current. Otherwise, you'd burn it out. If you require more voltage or current, you'll then need to worry about transistors or darlington arrays (external drivers) since you're using shift registers to tell them which segments need power (high voltage or current) and when to ground it. In other words, the hardware and code get more complicated and drives up cost. 2. Microcontroller I strongly suggest getting an Arduino. The environment is much more intuitive and there is a huge pool of resources out there if you get stuck. If you're prone to making mistakes, get the Ruggeduino. It's only $10 more than Arduino Uno and protects you and your precious uController from stupid mistakes. 3. Serial-In Parallel-Out Shift Register If you have the money, buy from the TPIC6x595 or TPIC6x596 family of shift registers by Texas Instruments. I use the TPIC6B596 in this instructable. The difference between its siblings (A, B, and C series) is the current handling capacity. In addition, the 596 family provides better reliability in cascading applications. When choosing shift registers, always make sure you do not exceed their current-handling limits. Side notes: - I would avoid the popular 74HC series as it can only source/sink a max of 70mA through the chip and cannot handle high voltages. - I would also avoid using the common cathode / MAX7219/7221 setup with high voltage displays. Trust me... It's not worth it! You don't want to know the trouble I've been through with this setup. Even though there's a good library out there, it's best to understand and have control of the underlying mechanism behind shift registers and multiplexing. 4. Regulated DC Power Adapter If you intend to use high-power displays, make sure to purchase a regulated dc adapter with a voltage higher than the forward voltage of your display. A DC adapter that is regulated ensures consistent voltage regardless of the load. Ensure that its current rating exceeds the necessary minimum. Typically, ratings exceeding 500mA are sufficient (more is preferable). 5. Resistors Resistors are necessary in order to reduce the current passing through the LEDs. The equation for determining necessary resistor is: (Difference between Supply Voltage and Minimum or Typical Forward Voltage per segment) divided by Desired forward current in Amps. Make sure to choose a current slightly lower than the maximum forward current specified in the datasheet to enhance the longevity of the LEDs. Remember to perform a distinct calculation for the decimal point, as it may have a lower forward voltage needed. Also, be careful with datasheets of large displays. If they show low forward voltages (< 5V), that rating may be for the individual LED in a segment rather than the entire segment. So, for example, if there are  5 LEDs in series per segment and the datasheet shows a forward voltage of 2.6V for a 5 inch display, you probably need to multiply it by 5 to get the correct forward voltage for the entire segment.Here is one such example. It's more complicated if it's series/parallel arrangement which is beyond the scope of this instructable. 6. Breadboard and jumper wires I recommend buying large solderless breadboards and a lot of jumper wires of various configurations (Male to Male, Male to Female). They are also known as dupont cables. Step 2: Draw the Schematic Now that you've got your hardware, you need to lay down and draw the connections between all the components. It may seem overwhelming, but it's real easy once you understand the general pattern. Before we begin, we need to know what each pin of the TPIC6B596 shift register does and where it connects to (I'll also give aliases that other manufacturers use): Vcc: The chip's power supply (Connects to +5V) SER IN: The input pin where data is received from the uController. (Connects to MOSI or Arduino user-defined pin). Aka Serial In, SER, MOSI, DIN... Drain 0 to 7: The pins where segments may connect to ground (Connects to segments A-DP respectively). Aka Source/Sink outputs, Qa-Qh, D0-D7... SRCLR: When high (+5), data can be transferred to the output buffer. When low (0V), all registers are cleared. (Connects to Vcc or +5 so it's always high). Aka Serial Clear, MR (master reset) G(bar): Enables/Disables drain pins. When low (0V), register data is transparent to the output buffer. When high (+5), drain pins are disabled but data is retained in the storage register. (Connects to Arduino pin with a pull-up resistor to +5V. We do this to ensure that no garbage will be seen during boot up.) Aka OE (output enable) SER OUT: The output pin where data is transmitted to the next shift register (Connects to SER IN of the next shift register). Aka Serial Out, DOUT, Qh'... SRCK: The pin where the clock signal is received. (Connects to SCK or Arduino user-defined pin and all SRCK pins). Aka Serial Clock, CLK, SRCLK RCK: The pin where the latch signal is received. (Connects to SS or Arduino user-defined pin and all RCK pins). Aka Register Clock, RCLK, LATCH, SS, LOAD, CS GND: Connects to ground (0V). (Note that there are 3 ground pins. You can connect one of them to ground as they are internally connected. If you have problems later on, try connecting each to ground). Aka 0V, PGND, LGND Now that you know where each pin connects to, you can now draw up your schematic. The schematic I give is simpler and easier to understand than others out there. However, you may need to change the resistor values and voltage going to the anodes of your displays. Step 3: Time to Code! At this stage, you probably have a strategy for programming your program, motivated by your diagram. Here is a simple example demonstrating multiplexing by sequentially displaying the number 456 with a decimal point. I also made sure that it can easily adjust to various configurations you may have. The origin can also be accessed for download at the bottom. Ensure you understand the code before transferring it to a fresh sketch by copying and pasting. Afterwards, make sure to adjust the variables and pin assignments as needed for your particular situation. Once you are done, send the file over to the Arduino. An essential factor to take into account is the manner in which the data is being transferred. If you remember my diagram, the shift register on the left side will take in the first byte and release it through the SER OUT when another byte arrives. So, in order to shift 11111111 to the rightmost digit, you must first shift out 11111111, then 00000000, and finally 00000000. Don't worry, the code handles this automatically. Rephrase the text utilizing the same input language and maintaining the original word count: START CODE /* Code for interfacing with 7 segment displays using the multiplexing method and the TPIC6B595 Shift Register (1 per digit) By K.O. */ //Pin Assignments (You should change these) const int CLK       = 9;           //Connected to TPIC pin 13: SRCLK (aka Clock) const int LATCH     = 10;          //Connected to TPIC pin 12: RCLK (aka Latch/load/CS/SS...) const int OE        = 11;          //Connected to TPIC pin 9: OE (Output Enable) const int DOUT      = 12;          //Connected to TPIC pin 3: SER (aka MOSI) //Number Patterns (0-9) //***Drains 0-7 must be connected to segments A-DP respectively*** const byte numTable[] = { B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11110110 }; //Global Variables int numDevices = 1;                       //The number of x-digit display modules you plan to use int maxDisplays = 3;                      //The maximum displays that could be accommodated (see note 1) int maxDigits = 3;                        //The maximum digits you plan on displaying per display module (each SR can handle a max of 8 digits) int SRData[3][3];                         //The storage location for the digit information. We must specify a fixed array at compile time (see note 2) boolean debug = true;                     //Change to true to print messages int delayTime = 1000;                     //Optional (just for demonstrating multiplexing) /* Notes 1. It is recommended to use an external power supply to avoid oversource/sinking the microcontroller or if you need to power high voltage, high current displays. This code will turn on/off all segments in a digit for ***each*** display. So, if using 2x 3-digit displays all displaying an 8 + DP, the max consumption will be: 20mA (desired forward current) * 8 (segments that are on) * 2 (displays showing identical info) = 320mA 2. The first dimension should equal maxDisplays. The second dimension should equal the number of digits */ void setup() { Serial.begin(9600); //Set pin modes pinMode(CLK,OUTPUT); pinMode(LATCH,OUTPUT); pinMode(DOUT, OUTPUT); pinMode(OE, OUTPUT); //7-Segment Display Init digitalWrite(OE,LOW);        //Enables SR Operation initializeSRData();          //Prepares SR and clears data on serial line //Test setDigit(0,0,4,true); setDigit(0,1,5,true); setDigit(0,2,6,true); } void loop() { refreshDisplay();            //Cycles through all displays and digits } //==========BEGIN SR Functions========== void initializeSRData() { //Display Scanner (Iterates through each display module) digitalWrite(LATCH,LOW);      //Tells all SRs that uController is sending data for(int dispID = 0; dispID < maxDisplays; dispID++) { //Digit Scanner (Iterates through each SR (digit) in a display module) for(int digit = 0; digit < maxDigits; digit++) { //Clears any garbage on the serial line shiftOut(DOUT,CLK,LSBFIRST,0);          //Shift out 0s to all displays SRData[dispID][digit] = 0;              //Stores a 0 for each digit so its completely off } } digitalWrite(LATCH,HIGH);      //Tells all SRs that uController is done sending data } void printSRData() { if(!debug) return; Serial.println("Printing SR Data..."); //Display Scanner for(int dispID = 0; dispID < maxDisplays; dispID++) { Serial.print("Display # "); Serial.println(dispID); //Digit Scanner for(int digit = 0; digit < maxDigits; digit++) { Serial.print("Digit "); Serial.print(digit); Serial.print(": "); Serial.println(SRData[dispID][digit],BIN); } Serial.println(); } } void setDigit(int dispID, int digit, int value, boolean dp) { //Parameter checker if(dispID < 0 || dispID >= numDevices) { Serial.println("dispID OoB!");         //OoB = Out of bounds return; } if(digit < 0 || digit > maxDigits) { Serial.println("digit OoB!"); return; } if(value < 0 || value > 9) { Serial.println("Invalid value!"); return; } value = numTable[value]; //Toggle dp if needed if(dp) value |= B00000001;          //Turns on the first binary digit (segment) using an OR bitmask //Store the digit SRData[dispID][digit] = value; if(debug) printSRData(); } void setSegments(int dispID, int digit, byte value) { //Parameter checker if(dispID < 0 || dispID >= numDevices) { Serial.println("dispID OoB!"); return; } if(digit < 0 || digit > maxDigits) { Serial.println("digit OoB!"); return; } if(value < 0 || value > 255) { Serial.println("Invalid byte!"); return; } //Store the digit SRData[dispID][digit] = value; if(debug) printSRData(); } void clearDisplay(int dispID) { initializeSRData(); refreshDisplay(); } void refreshDisplay() { //Digit Scanner for(int digit = 0; digit < maxDigits; digit++) { //Display Scanner digitalWrite(LATCH,LOW); for(int dispID = numDevices -  1; dispID >= 0; dispID--) { //Pre-Digit blanker (shifts out 0s to correct digits before sending segment data to desired digit) for(int blanks = (maxDigits - 1 - digit); blanks > 0; blanks--) shiftOut(DOUT,CLK,LSBFIRST,0); shiftOut(DOUT,CLK,LSBFIRST,SRData[dispID][digit]); //Post-Digit blanker (shifts out 0s to remaining digits) for(int blanks = digit; blanks > 0; blanks--) shiftOut(DOUT,CLK,LSBFIRST,0); } digitalWrite(LATCH,HIGH); //Demonstrates multiplexing operation delay(delayTime); delayTime -= 10; if(delayTime <= 0) delayTime = 0; } } //==========END SR Functions========== END CODE   For more detail: Multiplexing 7 Segment displays with Arduino and Shift Registers ### MQ-7 Carbon Monoxide Sensor Circuit Built with an Arduino In this project, we will go over how to build a carbon monoxide sensor circuit with an Arduino. The sensor we will utilize is the MQ-7 sensor for detecting carbon monoxide. This sensor is responsive to the impacts of CO. Carbon monoxide (CO) is a highly hazardous gas that lacks odor, color, and taste, making it undetectable by the senses. A person may not realize they are inhaling CO until they start feeling unwell. Headache, nausea, vomiting, dizziness, fatigue, and weakness are the typical signs of CO poisoning. Potential neurological symptoms consist of confusion, disorientation, visual impairment, fainting, and seizures. Carbon monoxide is generated during the incomplete oxidation of compounds containing carbon; it emerges when there is insufficient oxygen to create carbon dioxide (CO) as seen in scenarios like using a stove or running an internal combustion engine indoors. When oxygen is present, such as in the atmosphere, carbon monoxide combusts with a blue flame and creates carbon dioxide. Therefore, enclosed spaces with partial carbon product oxidation are where the risk of carbon monoxide production in homes or businesses is most prevalent.   Carbon monoxide poisoning is the primary cause of fatal air poisoning in numerous countries. Due to its lack of color, smell, and flavor, it is extremely difficult to detect yet extremely poisonous. The body takes in carbon monoxide through inhalation, and it is then transferred into the bloodstream during the exchange of gases in the lungs. CO binds with hemoglobin to form carboxyhemoglobin, replacing the oxygen-carrying space in hemoglobin, but is unable to effectively transport oxygen to the body's tissues. This results in a lack of oxygen, which has the potential to be fatal. The measurement of CO is in units of parts per million (ppm). To provide some context, the natural environment contains 0.1 parts per million. The typical concentration in households ranges from 0.5 to 5 parts per million. The concentration of gas near correctly adjusted gas stoves in households and from emissions of modern vehicles ranges from 5 to 15 parts per million (ppm). The emission levels of vehicles in the central area of Mexico City range from 100 to 200 parts per million. 5000 parts per million of carbon monoxide can be produced from the smoke of a wood fire in a household. Levels of only 667ppm can lead to as much as half of the body's hemoglobin being transformed into carboxyhemoglobin. A 50% carboxyhemoglobin level could lead to seizures, unconsciousness, and death. OSHA in the US restricts workplace exposure levels exceeding 50ppm for long-term duration. The Florida Department of Health states that more than 500 people in the US lose their lives each year because of accidental carbon monoxide exposure, while thousands require urgent medical care for non-lethal CO poisoning. These objects include defective fuel-burning appliances such as furnaces, stoves, water heaters, gas and kerosene space heaters, fireplaces, and indoor charcoal burners. Additional individuals die from carbon monoxide exposure due to objects like cars running in a closed garage, which are not commonly seen in residential settings. Every year, the Centers for Disease Control and Prevention estimate that thousands of people go to hospital emergency rooms. Carbon monoxide levels can be detected through blood samples taken in a laboratory, either from an artery or vein, or with a CO-oximeter analysis. Having this information about carbon monoxide provides insight into its origins and the significant risks it presents. Being able to detect and measure the level of CO present in the environment at any time highlights its importance. With this knowledge in mind, let's proceed to construct our carbon monoxide sensor circuit. Components Needed MQ-7 Carbon Monoxide Sensor Arduino LED The MQ-7 can be obtained very cheaply, just a few bucks. A good place to look for it is on ebay, which always has auctions on them for the $2-$3 range. It is important that you avoid getting just the sensor and instead opt for the complete MQ-7 board. This happens because purchasing the sensor separately requires completing the entire schematic assembly prior to linking it to the arduino. It is advisable to purchase the entire MQ-7 sensor circuit to make integration with the Arduino easier and less time-consuming. Below, you can see this. When purchasing the full board, there are 4 leads that must be linked together. The four leads are +5V, AOUT, DOUT, and GND. The connection wires for +5V and GND provide power to the alcohol sensor. The additional two connections are AOUT (analog output) and DOUT (digital output). The way the sensor operates is by providing an analog voltage output through terminal AOUT that is directly related to the level of carbon monoxide detected by the sensor. It will output a higher analog voltage as it detects more CO. On the other hand, if it detects lesser CO, it will produce lower analog voltage. When the analog voltage hits a specific level, the digital pin DOUT will be set to high. When the DOUT pin is activated, the Arduino will recognize it and activate the LED to indicate that the CO level has exceeded the limit. You can adjust the potentiometer to raise or lower the level in order to change this threshold level. MQ-7 Carbon Monoxide Sensor Circuit Schematic Below is the diagram of the circuit for the carbon monoxide sensor using an MQ-7 sensor connected to an arduino that we will construct. The links are quite simple. There are four leads to connect the sensor. 2 of them are designated for powering up. The sensor's +5V terminal should be connected to the arduino board's 5V terminal. The sensor's GND terminal is connected to the arduino's GND terminal. This gives the sensor authority. The remaining 2 links are the sensor's analog and digital output. These two are connected to analog pin A0 and digital pin D8, in that order. Code The code which we need to upload to the arduino so that it can measure carbon monoxide levels is shown below. /* MQ-7 Carbon Monoxide Sensor Circuit with Arduino */ const int AOUTpin=0;//the AOUT pin of the CO sensor goes into analog pin A0 of the arduino const int DOUTpin=8;//the DOUT pin of the CO sensor goes into digital pin D8 of the arduino const int ledPin=13;//the anode of the LED connects to digital pin D13 of the arduino int limit; int value; void setup() { Serial.begin(115200);//sets the baud rate pinMode(DOUTpin, INPUT);//sets the pin as an input to the arduino pinMode(ledPin, OUTPUT);//sets the pin as an output of the arduino } void loop() { value= analogRead(AOUTpin);//reads the analaog value from the CO sensor's AOUT pin limit= digitalRead(DOUTpin);//reads the digital value from the CO sensor's DOUT pin Serial.print("CO value: "); Serial.println(value);//prints the CO value Serial.print("Limit: "); Serial.print(limit);//prints the limit reached as either LOW or HIGH (above or underneath) delay(100); if (limit == HIGH){ digitalWrite(ledPin, HIGH);//if limit has been reached, LED turns on as status indicator } else{ digitalWrite(ledPin, LOW);//if threshold not reached, LED remains off } } The initial code block sets up the pin connections for both the sensor and the LED. The reason why the AOUT pin is set to 0 is because it is connected to the analog pin A0. The DOUTpin is set to 8 because it is connected to digital pin D8. The LED is initialized to 13 because it is connected to digital pin D13. Additionally, two variables called limit and value are defined. The purpose of these is to save the analog pin AOUT and digital pin DOUT values. The following code block establishes the baud rate and defines DOUTpin as input and ledPin as output. This is due to the fact that the sensor serves as an input for the arduino to read and analyze the sensor data. The LED functions as an output to show if alcohol has been detected by the sensor. The subsequent code block reads the AOUT sensor pin and saves the value in an integer variable. It additionally checks the sensor pin DOUT and saves the result in the integer variable limit. Next, we display the alcohol level, which is a numerical value between 0 (indicating no alcohol present) and 1023 (showing the highest measurable carbon monoxide level). We will also display the boundary, which will be either HIGH or LOW. If the level of detected CO is below the specified threshold, the limit value returned will be minimal. If the concentration of CO surpasses the threshold, the returned limit value will be HIGH. If the LED is turned on, it means the value is HIGH. When the value is not high, the LED will not turn on. Source: MQ-7 Carbon Monoxide Sensor Circuit Built with an Arduino ### MP3 player using Arduino and DFPlayer mini Hi guys, welcome to this tutorial. Today, we will build an mp3 player using an Arduino and the DFPlayer mini MP3 module. The DFplayer mini is a compact and affordable mp3 module with a basic audio output that can be easily linked to a speaker or headphones. The module can operate independently with a connected battery, speaker, and buttons or be paired with a microcontroller such as Arduino, supporting RX/TX communication. By sending serial commands, we can play music and control functions like switching songs, shuffling, and pausing. It features an SDcard slot and works with both FAT16 and FAT32 file systems. Included in the DF player mini are a variety of functions. Support of sampling rate of 8KHz, 11.025KHz, 12KHz, 16KHz, 22.05KHz, up to 48KHz 24-bit DAC output, dynamic range support 90dB, SNR supports 85dB Supports FAT16, FAT32 file system, maximum support 32GB TF card A variety of control modes, serial mode, AD key control mode The broadcast language spots feature, you can pause the background music being played Built-in 3W amplifier The audio data is sorted by folder; supports up to 100 folders, each folder can be assigned to close to 1000 songs 30 levels of volume adjustable, 10 levels EQ adjustable. The purpose of this tutorial is to show how to utilize this module with Arduino by using push buttons to direct Arduino in sending serial commands to the module and managing mp3 playback. To accomplish this, we will utilize three buttons. The initial button will act as the "previous" button in order for us to play the previous song. The next button will pause/play the current file and the following button will play the next file in line. Required Components The following components are required to build this project; DFPlayer Mini Cheap Arduino Uno Small Breadboard Buttons Speaker Resistor Wires Jumper wires As usual, each of this components can be bought via the link attached to them in the list above. Schematics The schematics for this project is fairly easy Read more: MP3 player using Arduino and DFPlayer mini ### Maze Solving Robot In this guide, I will demonstrate how to construct a robot that can solve mazes. This is my third try at creating one. The initial attempt was a total flop. The second was proficient at reaching the maze's end but could not backtrack and take the fastest route. This is my third and present one. It can reach the maze's exit and, once placed back at the beginning, navigate the shortest route to the exit without entering any dead ends. I am surprised that it actually doesn't make a mess. This was just a short introduction, everything else from theory, building, and programming will be explained in later steps. Parts list: 2 Micro Gear Motors Pair of Motor Brackets Pair of Wheels Ball Caster Analog Reflectance Sensor Array #2 Bolts and #2 Nuts Arduino RBBB Motor Driver IC 4AAA Battery Holder 4 Rechargeable AAA Batteries General Parts: 3 1in Spacers (Home Depot) Bolts and nuts that fit the spacers (Home Depot) Hook up wire (I use 22 gauge) Solder .100" Female and Male headers Velcro Tools: Soldering Iron Philips Screw driver Wire Strippers Something to cut the wire with Step 1: The Theory Part 1 How do you solve mazes? There are essentially 2 stages. The initial step is to navigate through the maze and locate its conclusion. The next step is to enhance the route so that your robot can navigate the maze again flawlessly, avoiding all dead ends. How does the robot locate the maze's endpoint? I employ a method known as the left hand on the wall. Picture yourself in a labyrinth as you consistently trace your left hand along the wall. Accomplishing this task will eventually lead you to escape a maze without any loops. This guide will specifically focus on mazes that do not have any looping paths. This algorithm of placing the left hand on the wall can be simplified to these basic conditions: - If you are able to make a left turn, feel free to do so. - if you are able to keep driving in a straight line, then proceed straight ahead. If you are able to make a right turn, then proceed with turning right. - When faced with a dead end, simply reverse direction. This is a crucial decision-making process for the robot at intersections. An intersection is a point within the maze where you can choose to change direction. If the robot fails to turn when presented with the chance to turn, it is viewed as continuing in a straight path. Every action made at a junction or while changing direction must be remembered. L = left turn R= right turn S= going straight past a turn B= turning around So let us apply this method to a simple maze and see if you can follow it. View the photos to see this method in action. The red circle will be the robot. As you can see in the photos for this example, the final path is LBLLBSR. Step 2: The Theory Part 2 Alright, you now have a route. How does the robot convert "LBLLBSR" into the right path in this situation? Let's examine the right course of action. Examine the pictures to find the right route. The ultimate accurate route is SRR. We need to change our direction from LBLLBSR to the correct path, which is SRR. We begin by examining our mistakes. A "B" shows the robot changed direction, signaling it took the incorrect route. In order to improve the route, we need to eliminate the "B" through substitution. Step 3: The Theory Part 3 Let's examine the initial 3 steps in the route "LBLLBSR". These actions are known as "LBL". That movement appears similar to the picture. Instead of making two left turns and then turning around, the robot should have proceeded straight ahead. Therefore, it can be stated that LBL equals S. This replacement is utilized by the robot to enhance the route. This is just one instance, however, here is the complete roster: LBR. = B LBS = R RBL = B SBL = R SBS = B LBL = SYou may not come across all of these when maze solving, but they are required when optimizing the path. Some even put "B" back into the path. This is required to further optimize the path correctly. You can figure out why for yourself or just trust me. Lets optimize our path now that we know how to: Path = LBLLBSR LBL = S so our new path would be: SLBSR We also know LBS = R so our new path would be: SRR As you can see we got the path that we were looking for. My robot optimizes the path as it travels. The path is stored in an array and every time it goes to store a new move, it checks to see if the previous move was a "B", if it was then it optimizes the path. You need to know at least 3 moves to optimize the path: The move before and after the turn around (and the turn around itself). Step 4: The Theory Part 4 Here is another example. Using the left hand on the wall algorithm, here is the path the robot would take: LLLBLLLRBLLBSRSRS Now here is the process of shortening that path: LL(LBL = S)LL(RBL = B)(LBS = R)RSRS The new path would be: LLSLLBRRSRS Continue shortening it until all the “B”s are gone: LLSL(LBR = B)RSRS The new path would be: LLSLBRSRS Continue shortening it: LLS(LBR = B)SRS The new path would be: LLSBSRS Continue shortening it: LL(SBS = B)RS The new path would be: LLBRS Continue shortening it: L(LBR = B)S The new path would be: LBS The final path is: LBS = R Step 5: The Design I want to clarify that your robot doesn't need to be constructed in the same way as mine. The main thing I notice is that I created and used a laser cutting machine to make a frame for my robot. I'll upload the AutoCAD file, but that's pretty much all I can handle. If you cannot laser cut the design, there is no need to fret. If you have an Arduino, identical sensors, and motors, you can make my code function on your robot with minimal modifications. Lately, I assisted someone online who replicated my design but did not include laser-cut components. The code operated on his robot with minimal adjustment. You can observe in the pictures the design I created and the components I utilized a laser cutter to produce. The components are created using acrylic material measuring .08 inches in thickness. This is available for purchase at The Home Depot. The third photo displays the lower level in my two-tier chassis plan. The lower level features mounting holes at the back for attaching motors, at the front for attaching the ball caster, a hole for the Arduino, and 2 tabs at the front for the sensor. The lower deck also includes 3 mounting holes for attachment to the upper deck with bolts and spacers. The upper deck features a sole, spacious opening for routing wires from the battery pack, which is secured with velcro on top, to the electronics located on the lower deck. It has three openings which enable connection to the lower platform as well. It is a straightforward, space-saving design that enables easy assembly with minimal wiring. You will see in the next steps how and where the parts fit on. maze_robot.dwg55 KB Step 6: Attaching The Motors In this stage, I just fixed my motors onto the upper surface of the lower deck using two #2 bolts for each motor. I have a small piece of wire connected to each motor, as they were taken from my old maze robot. Next, simply press the wheels onto the motor shaft to attach them. You need to align the shaft shaped like a "D" with the hole located in the middle of the wheel. Step 7: The Arduino The initial step you need to take is to adhere to the guidelines for putting together your RBBB. The instructions can be found right here. You should trim a section of the board as indicated in the bottom of the instructions, since it will not be necessary. If you don't require the power jack or regulator, simply cut them off. Using a big pair of tin snips is the most simple method to cut the board, although hack saws, jewelers saws, and band saws are also effective options. Avoid soldering any headers onto the board except for the ones required for the FTDI programming port. Then, attach a 9 pin row of female headers to the board's left side, going from pins marked "5v" to "A0". This will connect with the sensor plug at a later time. Attach a 4 pin row of female headers on the board's right side from pins marked "D5" to "D8". These pins are going to be utilized for managing the motor controller. In the end, attach a two-pin row of female headers to the right side of the board, specifically on the GND and 5V pins. These will provide electricity to the motor controller. You have the option to disregard the motor controller and top deck shown in the photos. We will address those later. Step 8: The Motor Controller The initial step you need to take is to adhere to the guidelines for putting together your RBBB. The instructions can be found right here. You should trim a section of the board as indicated in the bottom of the instructions, since it will not be necessary. If you don't require the power jack or regulator, simply cut them off. Using a big pair of tin snips is the most simple method to cut the board, although hack saws, jewelers saws, and band saws are also effective options. Avoid soldering any headers onto the board except for the ones required for the FTDI programming port. Then, attach a 9 pin row of female headers to the board's left side, going from pins marked "5v" to "A0". This will connect with the sensor plug at a later time. Attach a 4 pin row of female headers on the board's right side from pins marked "D5" to "D8". These pins are going to be utilized for managing the motor controller. In the end, attach a two-pin row of female headers to the right side of the board, specifically on the GND and 5V pins. These will provide electricity to the motor controller. You have the option to disregard the motor controller and top deck shown in the photos. We will address those later. As you can see I also went ahead and used some of the #2 nuts and bolts to bolt down the ball caster and Arduino. Step 9: The Sensor The sensor is provided in a grouping of 8 sensors. There are two things at the end that can and should be taken out. I utilized a set of diagonal cutters to accomplish this task. Solder a 9-pin female header strip onto the sensor, connecting from the "GND" to pin "6" of the sensor. Next, I inserted a row of male pins into the socket. These sensors emit an analog voltage depending on the amount of reflected IR light. These can be utilized to spot the black and white regions on the maze. If a white surface is detected by the sensor, it will output a low voltage close to 0V. If a dark surface is detected, the sensor will produce a voltage close to VIN. Step 10: Attach the Top Deck Secure the upper deck with 1 inch spacers, bolts, and nuts. Use Velcro to fasten the battery pack onto the top deck. Thread the cords from the battery pack through the opening in the upper platform to the lower platform. This battery pack comes with an integrated power switch already. I discovered that not putting the screw in the battery pack was the simplest option. The screw stops the battery pack from opening, but it also has clips that effectively keep it closed even without the screw. This enables a convenient battery replacement by simply sliding open the battery pack. This implies you don't have to remove the battery pack from the Velcro in order to replace the batteries. Step 11: Attach and Wire the Sensor The array of sensors is attached to the front of the robot with #2 bolts. The pin located at the very left of the sensor should be connected to the GND pin on the Arduino. The pin located second from the left is Vcc and should be connected to the 5V pin on the Arduino. The pins marked 6-1 on the analog sensor should be connected to the Arduino analog pins ranging from 5 to 0. Pin 6 from the sensor should be connected to Arduino analog pin 5, pin 5 of the sensor to Arduino analog pin 4, and so on. Step 12: Attach Power The last thing to do is wire the battery pack to the Arduino. This is done by soldering the wires to the power pins at the rear of the Arduino RBBB. The battery pack has a built in power switch so that is why we can simply solder the power leads straight to the back of the Arduino RBBB. The robot is now complete. Step 13: The Program Writing this program was a fun experience for me. Essentially, there are several functions that handle the entire process of solving the maze. The function on the wall's left side is responsible for processing the sensor data and guiding through the maze based on the predefined rules. The turning operations are set up so that the robot keeps turning until it detects the black line, at which point it moves forward. Additionally, there is a feature that has been programmed to include limited line-following abilities. While it's not a PID line following method, it does enable the robot to remain on track. This function is in charge of regulating the speed of the robot. The more specific purpose is to shorten the route. At each intersection, there is a letter indicating the robot's chosen direction. If the letter before was "B" – showing a mistake - the function that reduces the path is executed to replace letters for those 3 letter combinations mentioned before. At last, there is a feature that enables the robot to retrace the shortest route it determined, once it is lifted up and placed back onto the black line. The robot is able to determine when it has been placed back down and will then follow the shortest path that has been calculated. Source : Maze Solving Robot   ### Interfacing Electronic Circuits to Arduinos Interfacing Electronic Circuits to Arduino In this tutorial, I show how to link an Arduino to an ARINC 429 transceiver as an illustration of interfacing an Arduino with circuits, so you can use these methods for your projects. The ARINC 429 bus is commonly utilized for computer to computer communications on aircraft. The ARINC 429 bus operates at either a slow speed of 12.5 kbps or a fast speed of 100 kbps. The bus operates using two wires (in addition to a ground). Each data item is sent in a 32-bit word for transmission. Normally, the first 8 bits, referred to as the label, are used to identify the information contained in the ARINC word. Bits 9 and 10 often dictate the Source/Destination Indicator, but they can also contain data or serve as an extension of the label. Information can be located between bits 11 and 29 and could be in the form of binary twos complement, binary coded decimal, or a set of individual bits. Bits 30 and 31 contain the Sign Status Matrix, indicating Normal operation, Failure Warn, No Computed Data, and Functional Test. The final position in the 32-bit word is reserved for the Parity bit, set to guarantee the word maintains an ODD parity. Avionics equipment manufacturers, aircraft manufacturers, and avionics equipment service centers possess specialized testing tools for retrieving data from ARINC 429 data buses. I have aimed to own and use my own testing tools, which inspired me to develop the Arinc429eReader. While it can function as a standalone tutorial, I think the target audience for this device is restricted. I am going to share a more comprehensive guide on establishing connections between an Arduino and various electronic circuits. Step 1: Deciding to Do the Project Step 1a: Solved Already? Before attempting to address your issue, make sure to verify if it has already been resolved by another individual. Utilize Google to search for information. I found several companies in my research that manufacture ARINC 429 to USB converters, but they typically cost $1500 US dollars or more. A more efficient solution was necessary. I found an affordable ARINC 429 transceiver in a 40 pin DIP package. I reached out to the company and they provided me with free samples. Despite having a transmitter and two receivers, I only needed the receivers at the moment, making this chip a good choice. Step 1b: Can I do it? The task ahead is to determine if you have the skills (and the motivation) needed to finish the project. I acquired and examined the ARINC 429 transceiver chips' specifications to reach a decision. In my observation of the sample, I found that the chip operates on just 5v of power and does not need any unusual analog signals. It also requires a 1 MHz clock to coordinate its operations. I thought about using either the Arduino's clock or a 1 MHz clock chip. Besides requiring a 16-pin data bus, it also necessitates 11 input/output signals. The amount of pins is too high for the Arduino UNO but appropriate for the Arduino Mega. Please see the provided Figure 1. What about software-related skills? I am well-experienced in coding for different processors and I utilize existing library code as models for tackling comparable issues. Arduino's open-source code is perfect for my needs in this scenario. Step 1c: Should I do it? The task ahead requires determining if the project should be finished. Both money and time will be necessary. I usually prefer trying out new things solely for the purpose of gaining new experiences. It is generally not recommended to inquire about others' opinions. Remember that numerous significant individuals in the past faced criticism from their contemporaries for their beliefs and behaviors. I am confident that you are ready, enthusiastic, and able to move forward with your project! We should begin at this moment! Step 2: Read the Chip Data Sheet Step 2: Read the Chip Data Sheet Get the chip data sheet for your chip and read all of it. In my case the chip I found is the DEI1016 and its specification can be found here: www.deiaz.com/data-sheets/DS-MW-01016-01-E.pdf See the PDF file attached. Let’s take a look at the timing diagrams. They can be intimidating at first but I am sure you can learn how to read them if you don't know already. Here is the timing diagram for the Reset and Initialization Sequence. I've added a few annotations to help you learn how to read the timing diagrams: See timing diagram with annotations attached. When the line is high, that means it is at 5 volts, and when low, it is ground, just like the Arduino's digitalWrite HIGH and LOW. Now let’s add in the values for all those time measurements in the timing diagram: See timing diagram with times attached. The time between the MR pin going HIGH and the LDCW pin going low isn't specified, so let’s assume it isn't critical. Now let’s translate this into words: Set MR LOW and hold it there for at least 200 ns. Set MR HIGH. Set LDCW LOW. Set the data bus to its correct values and hold them there for at least 110 ns. Set LDCW HIGH. Let’s do the same thing for the Read operation: See Figure 8 attached. I find it intriguing how they decided to show the relative timings... OE1 should go LOW 0 ns after DR1 goes LOW, but 20 ns after SEL goes LOW. Additionally, it seems that there is no specified time frame for when Word 2 will be considered valid. I believe the main point is that Tdoedr of 200 ns represents the duration for Word 2 to become valid, not the timing for raising OE1 to HIGH. I will test this reasoning to confirm if my assumptions are accurate. Let’s translate this into words: The DEI1016 chip sets DR1 LOW to indicate data has been received on Receiver 1. Set SEL to LOW and wait for 20 ns. Set OE1 to LOW. Wait 200 ns for the chip to set the data pins. Read the data pins. Set OE1 to HIGH and wait for 20 ns. Set SEL to HIGH and wait for 30 ns. Set OE1 to LOW. Wait 200 ns for the chip to set the data pins. Read the data pins. Set OE1 to HIGH. Now that we have some understanding of how the pins need to be set to initialize the chip and to receive data, let’s turn these routines into Code. DS-MW-01016-01-E.pdf441 KB Major Components in ProjectArduino For more detail: Interfacing Electronic Circuits to Arduinos ### How to make Arduino Laser Turret using Servo motors and Joystick Arduino Laser Turret, Overview: In this endeavor, I will show how to construct an Arduino laser turret with servo motors and a two-axis joystick. I will supply the code needed along with a circuit diagram, along with a thorough explanation of the project. This will allow anyone to construct the laser turret without facing any challenges. What is Arduino Laser Turret? This task includes a simple tool made up of a two-way servo system with a laser component, operated by a PS2 style joystick. You may be curious about the practical applications of this project, and the response varies based on the particular situation. Allow me to offer some instances to demonstrate its potential practicality. Take into account a 4WD-capable robot that is controlled via Bluetooth. By affixing a camera to its head, we are able to not just see what is in front but also capture side and top angles. The idea of this project stays consistent, even though the modules are replaceable. Another use case encompasses integrating a water sprinkler into an Arduino robot designed for firefighting. We can direct the water pipe to accurately water specific areas. These instances show that the project can be utilized in different situations. After introducing the idea, we will explore the different phases of the project in a step-by-step manner for easy comprehension. Designing I have used a 3D printer to make the required parts for the servo mechanism section of this project. There's no need to worry if you are a beginner in designing and creating your own 3D prints. I have given STL files that are specifically made for this project, which you can utilize to conveniently create the necessary components. Download 3d Files: After acquiring the STL files, the following step is to get them ready for printing. This includes cutting the design, which can be accomplished by utilizing the popular Cura slicer software. Through the use of Cura, you can transform the 3D model into a compatible format for your 3D printer to accurately print. It took more than three hours to print the parts for this project. In my situation, I selected white PLA filament for the material used in printing, however, you can choose any color that works best for you. Making sure you have chosen the adhesion option in your 3D printer settings is crucial. As we are printing three parts at once, it is crucial to resolve any possible problems with one part in order to guarantee the successful printing of the remaining two. Once the printing process is finished and the printed components are in hand, some basic cleaning is necessary. A web-like pattern can often be seen on the printed pieces because supports were not utilized in the printing process. Adding direct supports to the process would increase the total printing time. In the picture below, you can observe the web-like structure being cleared with a hobby knife. Cleaning and removing the web-like structures from the printed parts can be time-consuming, especially since the same process must be done for all three parts. Nevertheless, after finishing the cleaning procedure, you will have the components displayed in the image below. With the main mechanism now ready, it is time to put together the different components. Before starting the assembly, make sure you have collected all the required parts. Now that the primary mechanism is prepared, we can proceed to the next phase of the project. We will gather all the materials listed below, as shown in the image provided. - Arduino Uno - Jumper wires and breadboard - Joystick module - 2 micro servos - Laser diode - Arduino IDE Having gathered these components, we can proceed with the assembly and implementation of the project. Circuit Diagram For Arduino laser turret: To simplify the process, let's go through the circuit building step by step, focusing on each component individually. There are two main components in this circuit: the micro servos and the PS2 module. Micro servo connections The micro servo is made up of three pins: two for the power source (positive and negative) and one for the signal. Based on the circuit diagram, the power rails on the breadboard are connected to the positive and negative pins of both servos. The servos' signal pins are connected to pins D3 and D4 on the Arduino Uno. In this assignment, the servos manage the controlling of the up-down and swinging movements. The horn of the second servo has a holder to keep the laser module secured. Analog joystick module The joystick module comprises four pins, of which two are dedicated to the power supply, and the remaining two are used for vertical and horizontal control. To make the connections, we need to link the positive (+) and negative (-) terminals of the joystick module to the power bars on the breadboard. Moreover, the Vrx pin is connected to A0 while the Vry pin is connected to A1 on the Arduino Uno board. Regarding the laser diode, it can be linked directly to the power rails on the breadboard, where the +5V and GND pins from the Arduino Uno are connected. Once these connections are set up, the circuit is fully operational, and we can move forward with uploading the codes to the Arduino Uno. Arduino laser turret code Servo servo1; // define servos Servo servo2; int joyX = 0; // give variable to joystick readings int joyY = 1; int joyVal; // create variable for joystick value void setup() { servo1.attach(3); // start servos servo2.attach(4); } void loop() {    joyVal = analogRead(joyX); // read value from joystick joyVal = map(joyVal, 0, 1023, 0, 180); // change value range to 0-180 servo1.write(joyVal); // write value to servo joyVal = analogRead(joyY); // repeat same for y axis joyVal = map(joyVal, 0, 1023, 0, 180); servo2.write(joyVal); delay(20); // add small delay to reduce noise } To upload the code to your Arduino Uno, follow these steps: 1. Connect the programming cable to the Arduino Uno. 2. Open the Arduino IDE. 3. Check the port number and board type by navigating to "Tools" and selecting the appropriate options for "Board Type" and "Ports." 4. Copy the provided code and paste it into the Arduino IDE. 5. Click on the "Upload" button to initiate the upload process. 6. Once the upload is complete, disconnect the programming cable from the Arduino Uno. By following these steps, you will successfully upload the code to your Arduino Uno and can proceed with the next stages of the project. Some basics about the code We start the code by #include that means we are telling the IDE to include servo library so that it can understand with what module we are trying to communicate After this we are calling functions for Joystick and then assigning the pin numbers for servos these are called as 1 2 3 servo1.attach(3); servo2.attach(4); and 1 2 3 int joyX = 0; int joyY = 1; Now, we need to assign values that determine how the servo should respond when it receives input from the joystick module. joyVal = analogRead(joyX); joyVal = map(joyVal, 0, 1023, 0, 180); servo1.write(joyVal); joyVal = analogRead(joyY); joyVal = map(joyVal, 0, 1023, 0, 180); servo2.write(joyVal); delay(20); The delay parameter represents the amount of time allocated to the servo. Increasing the delay value results in a slower response, as it allows for smoother movements and helps eliminate any unwanted noise or vibrations. Final assembly After you have uploaded the code successfully, it is important to test all the functions to make sure they are functioning correctly. Through comprehensive testing, you can confirm that every component and function is working as anticipated. After you have completed all the individual tests successfully, you can then move on to the assembly of all the components. To start putting together the servo, first connect the bottom piece. Insert the servo into position and fasten it with screws. If you don't intend on using the servo for other projects, you can also glue it in place with superglue. Perform the identical procedure on the another servo, ensuring it is firmly fastened. Then, connect the diode holder to the horns that have been attached to the 3D printed component. This will guarantee that the laser diode stays firmly fixed while in use. Once you have completed the previous step, you can connect the two servos together using a base servo. This base servo will be responsible for the swinging action of the mechanism. Next, secure the entire assembly onto a breadboard using a piece of double-sided adhesive. On the other hand, you could opt for a personalized 3D printed container, although it's not advisable because of its restrictions. Afterward, attach the joystick module to the edge of the breadboard. In this configuration, an Arduino is powered by a 7.4V supply from a lithium-ion battery pack. The Arduino then provides 5V power to both the breadboard and any additional components linked to the power rail. Just plug in the power source, and you'll be able to see your laser working! Using the analog joystick allows you to alter the laser's direction, giving you a gaming-like feel. Our goal is to improve this project in the future by converting it into a laser turret that is completely controlled wirelessly. Furthermore, our goal is to create a WiFi camera for a car controlled by a PS2. We trust that you found this project captivating, and we have more thrilling projects in store for the future. Thank you, and don't hesitate to share your thoughts and feedback. ### Ethernet Switching - with Arduino Aim: Switch relays from the ethernet or the internet, using your mobile, tablet or computer with a nice graphical user interface. Update V4.06 Please read the below steps to Step 2 if you are viewing this article for the first time. Please go to step 3 for the latest revision which is V4.06 Material: * Arduino MEGA 2560 * Arduino Ethernet Shield * Relay board * RJ45 cable Tools: * Arduino Software version 1.0.1 (downloadable from Arduino Website ) * A / B USB cable Infrastructure: * Internet access with fixed IP for Arduino * Access to your router to share the port for internet access * Testing devices - your pc, mobile etc Disclaimer: * This project was tested with iPhone 3GS, iPad 2 and MacBook Pro running Safari and PC running Safari, Firefox, Opera and IE. * This project was created on October 2012 with the mentioned material. * Binary sketch size: 22,322 bytes (of a 258,048 byte maximum). * This sketch does not offer any sort of authentification, therefore if required to be used from outside the network or from the internet, I suggest to configure your network to connect trough VPN. Nowadays many routers and smartphones support VPN. Step 1: Ethernet Switching - with Arduino - Description Description: * With this project, I had not included any images, or links to images from the internet. It only make use of CSS3 and HTML5. * The simulated LEDs are created from CSS3 code. * Some browsers does not make full use of CSS3 and HTML5. Thus I suggest using Safari. Step 2: Ethernet Switching - with Arduino - Program //Ethernet Switch // //Intro: //This will swich on and off outputs trough your mobile device. //No images or links to images. CSS3 and HTML5 use. //Though it work with other web browser, we suggest Safari for best experiance. // //Version: Web Server Ethernet Switching Version 3.05 //Author:  Claudio Vella - Malta //Initial code from: http://bildr.org/2011/06/arduino-ethernet-pin-control/ //Made lot of comments for beginners. //ARDUINO 1.0+ ONLY #include #include //////////////////////////////////////////////////////////////////////// //CONFIGURE //////////////////////////////////////////////////////////////////////// //IP manual settings byte ip[] = { 192, 168, 1, 177 };   //Manual setup only byte gateway[] = { 192, 168, 1, 254 }; //Manual setup only byte subnet[] = { 255, 255, 255, 0 }; //Manual setup only // if need to change the MAC address (Very Rare) byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Ethernet Port EthernetServer server = EthernetServer(80); //default html port 80 //The number of outputs going to be switched. int outputQuantity = 8;  //when added to outputLowest result should not exceed 10 //The lowest output pin we are starting from int outputLowest = 2;    //Should be between 2 to 9 //////////////////////////////////////////////////////////////////////// // Variable declaration int outp = 0; boolean printLastCommandOnce = false; boolean printButtonMenuOnce = false; boolean initialPrint = true; String allOn = ""; String allOff = ""; boolean reading = false; boolean readInput[10]; //Create a boolean array for the maximum ammount. //Beginning of the program void setup(){ Serial.begin(9600); //Pins 10,11,12 & 13 are used by the ethernet shield //Set pins as Outputs for (int var = outputLowest; var < outputLowest + outputQuantity; var++)  { pinMode(var, OUTPUT); } //Setting up the IP address. Comment out the one you dont need. //Ethernet.begin(mac); //for DHCP address. (Address will be printed to serial.) Ethernet.begin(mac, ip, gateway, subnet); //for manual setup. (Address is the one configured above.) server.begin(); Serial.println(Ethernet.localIP()); } void loop(){ // listen for incoming clients, and process requests. checkForClient(); } void checkForClient(){ EthernetClient client = server.available(); if (client) { // an http request ends with a blank line boolean currentLineIsBlank = true; boolean sentHeader = false; while (client.connected()) { if (client.available()) { if(!sentHeader){ // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); client.println(""); client.println(""); // add page title client.println("Ethernet Switching"); client.println(""); // add a meta refresh tag, so the browser pulls again every 5 seconds: client.println(""); // add other browser configuration client.println(""); client.println(""); client.println(""); //inserting the styles data, usually found in CSS files. client.println(""); client.println(""); //now printing the page itself client.println(""); client.println("
"); client.println("   
"); client.println("     

Ethernet Switching

"); client.println("   
"); client.println(""); client.println("   

Switch the required output.

"); client.println(); //This is for the arduino to construct the page on the fly. sentHeader = true; } char c = client.read(); if(reading && c == ' '){ reading = false; } //       Serial.print(c); if(c == '?') { reading = true; //found the ?, begin reading the info } if(reading){ if(c == 'H') {outp = 1;} if(c == 'L') {outp = 0;} Serial.print(c);   //print the value of c to serial communication //Serial.print(outp); //Serial.print('\n'); switch (c) { case '2': //add code here to trigger on 2 triggerPin(2, client, outp); break; case '3': //add code here to trigger on 3 triggerPin(3, client, outp); break; case '4': //add code here to trigger on 4 triggerPin(4, client, outp); break; case '5': //add code here to trigger on 5 triggerPin(5, client, outp); //printHtml(client); break; case '6': //add code here to trigger on 6 triggerPin(6, client, outp); break; case '7': //add code here to trigger on 7 triggerPin(7, client, outp); break; case '8': //add code here to trigger on 8 triggerPin(8, client, outp); break; case '9': //add code here to trigger on 9 triggerPin(9, client, outp); break; } } if (c == '\n' && currentLineIsBlank){ printLastCommandOnce = true; printButtonMenuOnce = true; triggerPin(777, client, outp); //Call to read input and print menu. 777 is used not to update any outputs break; } } } //Set Variables Before Exiting printLastCommandOnce = false; printButtonMenuOnce = false; allOn = ""; allOff = ""; client.println("\n

© Author - Claudio Vella
Malta - October - 2012

"); client.println("
\n\n\n"); delay(1); // give the web browser time to receive the data client.stop(); // close the connection: } } void triggerPin(int pin, EthernetClient client, int outp){ //Switching on or off outputs, reads the outputs and prints the buttons //Setting Outputs if (pin != 777){ if(outp == 1) { digitalWrite(pin, HIGH); } if(outp == 0){ digitalWrite(pin, LOW); } } //Refresh the reading of outputs readOutputStatuses(); //Prints the buttons if (printButtonMenuOnce == true){ printHtmlButtons(client); printButtonMenuOnce = false; } } //print the html buttons to switch on/off channels void printHtmlButtons(EthernetClient client){ //Start to create the html table client.println(""); //client.println("

"); client.println("

"); client.println(""); //Start printing button by button for (int var = outputLowest; var < outputLowest + outputQuantity; var++)  { //set command for all on/off allOn += "H"; allOn += var; allOff += "L"; allOff += var; //Print begining of row client.print("\n"); //Prints the ON Buttons client.print(" \n"); //Prints the OFF Buttons client.print(" \n"); //Print first part of the Circles or the LEDs if (readInput[var] == true){ client.print(" \n"); }else { client.print(" \n"); } //Print end of row client.print("\n"); } //Prints the ON All Pins Button client.print("\n\n"); //Prints the OFF All Pins Button client.print("\n\n\n"); //Closing the table and form client.println("
"); client.println("
"); //client.println("

"); } //Reading the Output Statuses void readOutputStatuses(){ for (int var = outputLowest; var < outputLowest + outputQuantity; var++)  { readInput[var] = digitalRead(var); //Serial.print(readInput[var]); } } For more detail: Ethernet Switching - with Arduino ### EMULATING A BLUETOOTH KEYBOARD WITH THE ESP32 Many individuals link the ESP family of microcontrollers with WiFi, as they have become the preferred solution for connecting your project to the internet swiftly and easily. Although WiFi is often highlighted, the ESP32 also includes Bluetooth, which is not utilized by users as frequently. If you want to begin using Bluetooth on the ESP32,then this simple wireless macro keypad from [Brian Lough] would be a great way to get started. From a hardware perspective, this project is very simple. Simply connect a membrane keypad to the GPIO pins on the ESP32. Including a battery is a nice addition, and you may consider placing it in some sort of container, but as a demonstration, it couldn't be simpler. In this scenario, [Brian] is utilizing the TinyPICO board, however, any ESP32 variant that you prefer will also be suitable. The remainder of the project consists solely of software, and [Brian] guides us through it in the video following the intermission. The ESP32 already has a library for Bluetooth Human Interface Device (HID) emulation, however, it must be manually added to the Arduino IDE. He then shows how to construct a working keyboard, including techniques like simultaneously sending multiple virtual keys. https://youtu.be/4sIkW7wogrE In the past we’ve seen the ESP32 used to create a Bluetooth game controller, but the ability to emulate a keyboard obviously offers quite a bit more flexibility. With a practical demonstration of how easy as it is to turn this low-cost microcontroller into a wireless input device, hopefully we’ll start seeing more projects that utilize the capability. Source: EMULATING A BLUETOOTH KEYBOARD WITH THE ESP32 ### Easy Arduino Menus for Rotary Encoders Rotary encoders with built-in buttons are excellent input devices for projects, particularly if you need to navigate menus and make selections. With any luck, this Instructable will empower you to experiment with a simple menu system and pair it with a rotary encoder to elevate the professionalism of your upcoming project! The reason why menus and rotary encoders require coding. I wanted to have a menu in an upcoming project and use a rotary encoder with a centre push button as my input hardware. This is really similar to the LCD controllers for RAMPS and Arduino MEGA 3D printers. The rotary encoder will allow me to scroll through the menu options, i.e. navigate the menu, select sub-menus and also change values within sub-menus/settings - very versatile for one hardware interface! A microcontroller is needed to manage all of this and microcontrollers need instructions, AKA code! Other options The problem I had with existing Arduino menu libraries and menu code is that for simple menus they were overly complicated. Another drawback of many alternatives was that the code was designed for LCD screens and momentary push buttons, not rotary encoders and adaptable to other display outputs. These menus were geared around selecting between a small number of modes and incrementing values relatively slowly. We know that rotary encoders are a great hardware input option because they afford relatively fast input value changes while retaining fine control at slow speed. I wanted to write code which would allow unambiguous top level menu navigation but also allow you to quickly scroll through a large range of values within each sub-menu/setting, exploiting the strengths of the rotary encoder. The approach I decided to follow some advice to use if() statements for a simple menu structure and keep it sketch-based. The resultant code builds on my previous Instructable which sought to reliably read the rotation pulses and direction. Please check it out for background. In this sketch, we add the reading of the centre push button on the rotary encoder shaft, using code that Nick Gammon developed to record button state changes with debouncing and without relying on the Arduino's delay() function that hinders the microcontroller from running different code and could cause significant delays in our sketch, such as sluggish display updates. Using code to change the state of a button is more beneficial than simply detecting whether the button is in a high or low digital logic when making a single selection, such as choosing a menu option, as it can avoid accidental multiple selections with each press of the button. Let's examine the requirements for setting up the example code in Step 1. Step 1: Preparation If you haven't yet, please see my other Instructable on rotary encoder reading to find out how to set up your hardware and Arduino IDE software. If you haven't yet, please see my other Instructable on rotary encoder reading to find out how to set up your hardware and Arduino IDE software. Hardware The images depict the extra hardware connections required to utilize the center push button. I utilized Fritzing for the diagram, but it lacked a rotary encoder component showing the pin layout. So, refer to the diagram, notes, and rotary encoder photo for a better understanding of the pin layout. One of the two pins on the side of the rotary encoder (not the three-pin side) should be linked to ground, while the other should be connected to a digital pin on the Arduino. I have utilized D4 for the demonstration sketch. If you decide to use a different pin, make sure to update the value of buttonPin in the sketch. Step 2 is up next with the code. Step 2: Code This is the code. By looking at the structure and the comments I hope you will find it easy to adapt for your specific needs! /*******Interrupt-based Rotary Encoder Menu Sketch******* * by Simon Merrett, based on insight from Oleg Mazurov, Nick Gammon, rt and Steve Spence, and code from Nick Gammon * 3,638 bytes with debugging on UNO, 1,604 bytes without debugging */ // Rotary encoder declarations static int pinA = 2; // Our first hardware interrupt pin is digital pin 2 static int pinB = 3; // Our second hardware interrupt pin is digital pin 3 volatile byte aFlag = 0; // let's us know when we're expecting a rising edge on pinA to signal that the encoder has arrived at a detent volatile byte bFlag = 0; // let's us know when we're expecting a rising edge on pinB to signal that the encoder has arrived at a detent (opposite direction to when aFlag is set) volatile byte encoderPos = 0; //this variable stores our current value of encoder position. Change to int or uin16_t instead of byte if you want to record a larger range than 0-255 volatile byte oldEncPos = 0; //stores the last encoder position value so we can compare to the current reading and see if it has changed (so we know when to print to the serial monitor) volatile byte reading = 0; //somewhere to store the direct values we read from our interrupt pins before checking to see if we have moved a whole detent // Button reading, including debounce without delay function declarations const byte buttonPin = 4; // this is the Arduino pin we are connecting the push button to byte oldButtonState = HIGH; // assume switch open because of pull-up resistor const unsigned long debounceTime = 10; // milliseconds unsigned long buttonPressTime; // when the switch last changed state boolean buttonPressed = 0; // a flag variable // Menu and submenu/setting declarations byte Mode = 0; // This is which menu mode we are in at any given time (top level or one of the submenus) const byte modeMax = 3; // This is the number of submenus/settings you want byte setting1 = 0; // a variable which holds the value we set byte setting2 = 0; // a variable which holds the value we set byte setting3 = 0; // a variable which holds the value we set /* Note: you may wish to change settingN etc to int, float or boolean to suit your application. Remember to change "void setAdmin(byte name,*BYTE* setting)" to match and probably add some "modeMax"-type overflow code in the "if(Mode == N && buttonPressed)" section*/ void setup() { //Rotary encoder section of setup pinMode(pinA, INPUT_PULLUP); // set pinA as an input, pulled HIGH to the logic voltage (5V or 3.3V for most cases) pinMode(pinB, INPUT_PULLUP); // set pinB as an input, pulled HIGH to the logic voltage (5V or 3.3V for most cases) attachInterrupt(0,PinA,RISING); // set an interrupt on PinA, looking for a rising edge signal and executing the "PinA" Interrupt Service Routine (below) attachInterrupt(1,PinB,RISING); // set an interrupt on PinB, looking for a rising edge signal and executing the "PinB" Interrupt Service Routine (below) // button section of setup pinMode (buttonPin, INPUT_PULLUP); // setup the button pin // DEBUGGING section of setup Serial.begin(9600); // DEBUGGING: opens serial port, sets data rate to 9600 bps } void loop() { rotaryMenu(); // carry out other loop code here } void rotaryMenu() { //This handles the bulk of the menu functions without needing to install/include/compile a menu library //DEBUGGING: Rotary encoder update display if turned if(oldEncPos != encoderPos) { // DEBUGGING Serial.println(encoderPos);// DEBUGGING. Sometimes the serial monitor may show a value just outside modeMax due to this function. The menu shouldn't be affected. oldEncPos = encoderPos;// DEBUGGING }// DEBUGGING // Button reading with non-delay() debounce - thank you Nick Gammon! byte buttonState = digitalRead (buttonPin); if (buttonState != oldButtonState){ if (millis () - buttonPressTime >= debounceTime){ // debounce buttonPressTime = millis (); // when we closed the switch oldButtonState = buttonState; // remember for next time if (buttonState == LOW){ Serial.println ("Button closed"); // DEBUGGING: print that button has been closed buttonPressed = 1; } else { Serial.println ("Button opened"); // DEBUGGING: print that button has been opened buttonPressed = 0; } } // end if debounce time up } // end of state change //Main menu section if (Mode == 0) { if (encoderPos > (modeMax+10)) encoderPos = modeMax; // check we haven't gone out of bounds below 0 and correct if we have else if (encoderPos > modeMax) encoderPos = 0; // check we haven't gone out of bounds above modeMax and correct if we have if (buttonPressed){ Mode = encoderPos; // set the Mode to the current value of input if button has been pressed Serial.print("Mode selected: "); //DEBUGGING: print which mode has been selected Serial.println(Mode); //DEBUGGING: print which mode has been selected buttonPressed = 0; // reset the button status so one press results in one action if (Mode == 1) { Serial.println("Mode 1"); //DEBUGGING: print which mode has been selected encoderPos = setting1; // start adjusting Vout from last set point } if (Mode == 2) { Serial.println("Mode 2"); //DEBUGGING: print which mode has been selected encoderPos = setting2; // start adjusting Imax from last set point } if (Mode == 3) { Serial.println("Mode 3"); //DEBUGGING: print which mode has been selected encoderPos = setting3; // start adjusting Vmin from last set point } } } if (Mode == 1 && buttonPressed) { setting1 = encoderPos; // record whatever value your encoder has been turned to, to setting 3 setAdmin(1,setting1); //code to do other things with setting1 here, perhaps update display } if (Mode == 2 && buttonPressed) { setting2 = encoderPos; // record whatever value your encoder has been turned to, to setting 2 setAdmin(2,setting2); //code to do other things with setting2 here, perhaps update display } if (Mode == 3 && buttonPressed){ setting3 = encoderPos; // record whatever value your encoder has been turned to, to setting 3 setAdmin(3,setting3); //code to do other things with setting3 here, perhaps update display } } // Carry out common activities each time a setting is changed void setAdmin(byte name, byte setting){ Serial.print("Setting "); //DEBUGGING Serial.print(name); //DEBUGGING Serial.print(" = "); //DEBUGGING Serial.println(setting);//DEBUGGING encoderPos = 0; // reorientate the menu index - optional as we have overflow check code elsewhere buttonPressed = 0; // reset the button status so one press results in one action Mode = 0; // go back to top level of menu, now that we've set values Serial.println("Main Menu"); //DEBUGGING } //Rotary encoder interrupt service routine for one encoder pin void PinA(){ cli(); //stop interrupts happening before we read pin values reading = PIND & 0xC; // read all eight pin values then strip away all but pinA and pinB's values if(reading == B00001100 && aFlag) { //check that we have both pins at detent (HIGH) and that we are expecting detent on this pin's rising edge encoderPos --; //decrement the encoder's position count bFlag = 0; //reset flags for the next turn aFlag = 0; //reset flags for the next turn } else if (reading == B00000100) bFlag = 1; //signal that we're expecting pinB to signal the transition to detent from free rotation sei(); //restart interrupts } //Rotary encoder interrupt service routine for the other encoder pin void PinB(){ cli(); //stop interrupts happening before we read pin values reading = PIND & 0xC; //read all eight pin values then strip away all but pinA and pinB's values if (reading == B00001100 && bFlag) { //check that we have both pins at detent (HIGH) and that we are expecting detent on this pin's rising edge encoderPos ++; //increment the encoder's position count bFlag = 0; //reset flags for the next turn aFlag = 0; //reset flags for the next turn } else if (reading == B00001000) aFlag = 1; //signal that we're expecting pinA to signal the transition to detent from free rotation sei(); //restart interrupts } // end of sketch! I have inserted "DEBUGGING" at the beginning of each comment on non-essential lines for the menu to function. If you are satisfied with how the menu operates, you may consider annotating or removing these lines to reduce the size of the compiled sketch. It is important to provide users with feedback as they navigate through menu options and settings. If you opt out of adding the DEBUGGING lines, consider using a different visual cue (such as an LCD text display or LEDs) to show that the encoder inputs are moving through the menu and adjusting settings. If I remove the DEBUGGING lines (while remembering that some visual feedback for menu navigation is still necessary), the final code size for Arduino Uno is approximately 1,650 bytes, which should allow room for the more interesting sections of your sketch on the ATMEGA328P! Proceed to Step 3 to understand the functionality of the menu system. Step 3: Operation and Conclusion Operation When you open the serial monitor in Arduino after uploading this sketch, and begin rotating the encoder shaft, you will notice the main menu rotating through the available sub-menus/options (restricted by the modeMax variable). Pressing the center-push button selects the mode/sub-menu you are on, allowing you to freely scroll through values ranging from 0 to 255 in that sub-menu. If you press the center-push button, the value will be set to setting1, setting2, setting3, etc. The Arduino immediately takes you back to the main menu after this action. While on, the Arduino stores the settings you choose and if you revisit a sub-menu for a setting you've already adjusted, it will begin the encoder adjustments from the last value selected! Conclusion I started to create code based on sketches that would enable rotary encoders to navigate a simple menu for Arduinos. I also attempted to ensure readability, allowing users to easily understand the menu structure and necessary code adjustments for customization, unlike other options. This code is simple and universal, designed to illustrate the functionality and can be easily customized for your own use. It utilizes the serial monitor as a simple debugging tool, eliminating the requirement for an additional display to observe the code's functionality. I hope it is helpful and encourages you to edit, modify, and enhance it! Please leave a comment sharing any activities or information you use it for! Source: Easy Arduino Menus for Rotary Encoders ### Arduino Pro Opta Ext A0602: Comprehensive Review of Features Introduction The Arduino platform has enabled hobbyists and professionals alike to create innovative projects with just a board, some code, and various add-on components. The Arduino Pro Opta Ext A0602 takes the powerful and flexible design even further, offering advanced features for more complex projects. In this extensive review, I will explore the key specs and functionality of the Arduino Pro Opta Ext board to help potential users understand what it is capable of and how to get the most out of it. Processor and Memory At the core of the Arduino Pro Opta Ext A0602 is an ARM Cortex-M4F processor running at 168 MHz. This provides it substantially more computational capacity than that which is available with 8-bit AVR microcontrollers used in rudimentary Arduino. Using the frequency of 168 MHz, the system allows for even faster operation of tasks, or in other words, more calculations. In addition to the more powerful processor, the board has 1 MB of Flash memory for storing code and sketches. It also includes 256 KB of SRAM for variables and active processes. This expanded memory allowance means much larger programs can be uploaded and run simultaneously compared to Arduino Uno or Nano boards. The additional memory makes the Pro Opta Ext well-suited for projects with complex programming requirements or that involve processing large amounts of sensor data. Analog and Digital I/O One of the headline specifications of this board is the generous number of input/output pins. It contains 54 programmable I/O pins, giving designers a huge amount of flexibility in how external hardware can be connected and controlled. Of these 54 pins, 12 can be configured specifically for analog input. This allows monitoring and reading sensor voltages within the 0-3.3V range with 10-bit accuracy. The high-resolution analog-to-digital conversion enables very finely graded measurements, which is important for applications like temperature/light sensing or spectrum analysis. The remaining 42 pins can be used for digital I/O. They support PWM, I2C, and SPI, and are 5V tolerant, making them well-equipped to interface with a vast array of add-on modules, displays, buttons, motors, and more. Having over four times as many I/O pins as a basic Arduino puts the analog and digital capabilities of this board in a completely different league. Complex designs requiring lots of sensor integration or output control become far more practical. Communication Features In addition to robust I/O, the Arduino Pro Opta Ext has several interfaces built directly into its microcontroller that support advanced communication methods. It includes hardware I2C used to quickly transfer data between peripherals and external chips. There are also two hardware SPI interfaces for high-speed serial communication, essential for protocols like SD cards, LCD, and sensor buses. A hardware UART is on board as well, allowing serial transmit and receive up to 3Mb/s. This provides a versatile connection to TTL serial devices, Bluetooth/WiFi modules, GPS chips, and more. For wireless functionality, an integrated SAMD21 Cortex M0+ chip supports Bluetooth Low Energy communication. Programs can access BLE to wirelessly transfer data or remotely control a project. Additionally, there is an onboard ATWINC1500 WiFi module capable of 802.11 b/g/n connectivity at speeds up to 150Mb/s. The combination of extensive I/O, multiple hardware protocols, and integrated wireless gives designers a huge array of options for sensing, actuation, and remote control capabilities in their projects. Complex networked systems and IoT applications become Within reach thanks to the communications features of this Arduino. Power Supply Options The Arduino Pro Opta Ext can be powered in a few different ways to suit different use cases. It operates on a standard voltage range of 3.3-5V, which covers the most common microcontroller and sensor modules. An onboard USB connector allows powering and programming via a computer. A DC barrel jack permits supplying 7-12V external power for applications drawing higher currents. There is also a 3.3V regulator output capable of supplying up to 50mA to attached peripherals, along with a 5V pin tied directly to the board's power input. For running projects on batteries, the board contains a LiPo/Li-ion charger with configuration options for 1, 2, or 3-cell lithium packs. This integrated charging solution streamlines portable designs that need to be untethered from mains power. The different voltages accepted and provided give flexibility in how to power-intensive circuits without add-on regulators. Combined with the low-current 3.3V rail, any power source can be accommodated based on a build's particular needs. Layout and Expansion In terms of physical layout, the Arduino Pro Opta Ext has everything arranged methodically across its large 79x53mm board area for easy use of all its capabilities. Controls and components are grouped logically, like the DC power, USB, and IO pins; while unassigned pins are broken out to 2.54mm headers for easy wiring of circuits and add-on boards. Status LEDs provide feedback on processes like programming and power states to assist with debugging. In addition, there are a handful of useful 'extra' features under the hood. A real-time clock with a rechargeable battery keeps time even when power is removed. An onboard temperature sensor lends itself to thermal monitoring projects as well. Expansion is supported through multiple interfaces. A Grove-compatible connector provides an easy way to link over 180 existing sensor/actuator modules into designs. There are also two independent PWM outputs, an ADC port, and a SAMD21 chip I/Os for highly customized peripheral integration. Amini JTAG connector facilitates in-circuit debugging and programming of firmware without using the Arduino IDE. A dedicated USB port on the SAMD21 M0+ chip offers more flexible connections compared to using the main MCU's serial interface. With all of these layout considerations and a range of expansion options, the Pro Opta Ext board gives creators more opportunity than ever before to compose just the system required for complex applications with advanced capabilities. Example Applications Thanks to its multitude of inputs and outputs, the Arduino Pro Opta Ext is highly applicable for complex automation and monitoring projects that might not be as feasible on simpler boards. Here are some possibilities: Robotics - With its fast speed, an abundance of control lines, complex code capacity, and wireless abilities, the Pro Opta Ext can operate walkers, manipulators, and drones with large sensors and positioning systems. Industrial IoT - Integrated sensors for environmental factors like temperature, humidity, light, and motion could all connect to this board for advanced industrial monitoring solutions with wireless reporting capabilities. Scientific Instruments - Its high-resolution ADC channels, serial buses, 3D graphics library support, memory, and processing power lend themselves to scientific measurement experiments and data logging scenarios too intensive for basic boards. Home Automation - Along with integrating a vast array of smart home gadgets through its multitude of digital/analog interfaces, the Pro Opta Ext enables sophisticated automated control through WiFi connectivity in larger multizone installations. Commercial Lighting - DMX control, sACN protocol, and plentiful PWM outputs make it a perfect fit for addressing dozens of individually addressable LED fixtures using the built-in lighting control library. These represent just a sampling of viable applications. Overall, any project requiring significant I/O integration, compute-intensive programs, complex firmware libraries, or networking of multiple systems can greatly benefit from an Arduino with the processing muscle and feature set of the Pro Opta Ext board. Its design opens the door to much more advanced builds. Software and Programming Like all Arduino boards, the recommended integrated development environment (IDE) for writing code with the Arduino Pro Opta Ext is the Arduino Software (IDE). The IDE provides an easy-to-use graphical interface and standard functions that speed development for Arduino projects. Additional third-party libraries and platforms also exist for more specialized needs. A few important points about programming the Pro Opta Ext:  It runs on the Arduino SAMD21 core and thus uses ARM-compatible instructions rather than AVR assembler code.  The Arduino IDE must be configured to program the appropriate board variant: "Arduino SAMD (32-bits ARM Cortex-M0+)".  Project code takes advantage of more memory and new capabilities like graphics and advanced math functions provided by the SAMD21 microcontroller compared to 8-bit boards.  Additional libraries specific to SAMD21 functionality optimize the use of features like I2C, SPI, PWM, CRC, and DMA channels.  A separate "opta_i2c" library simplifies controlling Grove I2C devices over the Pro Opta Ext port without manually coding protocol details.  Over 180 ready-made sensor library examples make integrating Grove modules very plug-and-play. Overall, the Arduino Pro Opta Ext board continues the easy-to-use programming experience that the Arduino ecosystem provides through standardized IDE development while unlocking capabilities made possible by its more fully-fledged processor and architecture. Its extensive pinouts and features can then be accessed through creative firmware design. Conclusion In summary, the Arduino Pro Opta Ext A0602 board raises the bar for the types of projects the Arduino platform is suited for. With an abundance of clearly documented and labeled interfaces, on-board wireless connectivity, ample memory and throughput for computationally intensive code, and ease of use through Arduino's development environment - this board empowers innovative builds at a higher level than ever before. Whether applying it to robotics, industrial automation, scientific experiments, home systems, or commercial installations, its wide array of input/output options combined with SAMD21 processing power and libraries covering standard features make it an outstanding single-board computer for complex interconnected designs. Overall it achieves an impressive blend of accessible user interface and hardcore embedded system capabilities. The Arduino Pro Opta Ext represents the next step in advancing creativity and productivity with open-source electronics. FAQ Q: What is the Arduino Pro Opta Ext A0602? A: The Arduino Pro Opta Ext A0602 is an advanced Arduino development board made by Opta that features a powerful ARM Cortex M4 microcontroller, abundant I/O pins, wireless connectivity options, and extensive expansion capabilities for more robust project builds. Q: Who is the target audience for this board? A: The Arduino Pro Opta Ext is best suited for intermediate to advanced users looking to create complex automated systems, industrial IoT applications, robotic platforms, or other intensive designs that push the limits of a basic Arduino board. Hobbyists and professionals alike can benefit from its high-performance specs. Q: How does it differ from a basic Arduino board? A: The key advantages over entry-level Arduino boards are the more powerful processor, ten times the Flash memory, over four times the I/O pins, built-in wireless support, battery charging circuitry, and interfaces optimized for complex programming and expansions. This allows much larger and more sophisticated projects beyond the scope of entry-level models. Q: Can it still be programmed with the Arduino IDE? A: Yes, the Arduino Pro Opta Ext is fully compatible with the Arduino Software (IDE) for writing codes and programs. However, the board variant must be set to "Arduino SAMD (32-bits ARM Cortex-M0+)" in the IDE options due to its ARM microcontroller architecture. Q: What kinds of applications is it best suited for? A: Examples highlighted in the commentary include robotics, industrial automation, scientific instruments, advanced home automation, and commercial lighting/signage. In general, any project requiring significant I/O integration, networking, compute power, or complex programming would be a good fit. Q: How expensive is it compared to basic Arduino boards? A: The Arduino Pro Opta Ext carries a higher price tag versus entry-level Arduino boards, pricing around $50-75 USD usually. However, for sophisticated usage scenarios, it provides a much more cost-effective solution than assembling comparable capabilities from multiple basic boards and add-ons. ### DIY SPEEDOMETER AND ODOMETER Step 1: HOW IT WORKS The operation of a project is uncomplicated. Understanding it is crucial for project development. Essentially, the device includes a reed switch or magnetic switch attached to the bicycle frame and a magnet attached to one of the spokes. The magnet activates the switch with each turn of the wheel. The arduino receives the signal, counts the rotations, and calculates the distance covered based on the pre-entered diameter of your cycle. The arduino also keeps track of the time and computes the velocity. The information is sent from the Arduino to the LCD display where it is presented in miles per hour (conversion is optional). Step 2: MATERIALS REQUIRED The full project would cost you about 5$-10$ depending on the place you live in. The cycle speedometer also would require moderate soldering skills and an afternoon. so without any further ado the materials for the build are --: 1. The arduino board - i got Rs.330 which is around 5$ but to programme the pro mini you will also need to have an arduino uno or an usb to ttl adapter (how to program an arduino pro mini with an uno) or if you don't have it then use an arduino micro or an arduino uno. 2.Arduino 16x2 lcd (Rs150 or 2.3 $) 3.7805 voltage regulator (increases the control over the contrast no major difference -optional) 4. 2x switches for backlight and on off (optional) 5.220 ohm resistor 6. trimer pot 10k ohm 7.female headers and male headers if you want the reed switch to be detachable 8. reed switch 9.wire 10. a momentary switch to change the modes 11. 0.1uf capacitor to reduce the debounce of the button 12.10k ohm resistor The tools you would require are 1. soldering iron 2.solder 3. enclosure 4. cutting tool like the dremel to cut out holes in the enclosure to mount he lcd and stuff 5. hot glue or any adhesive to mount the various components. Step 3: THE CODE It's a good idea to upload the code before working on the electronics to avoid a tangled mess of wires later on. Upload the provided code to the Arduino, but remember to adjust the size of your bike's wheels. Step 4: THE ELECTRONICS The wiring diagram can be found above also I have mentioned it down LCD -ARDUINO 1 - GND 2 VCC 3 VIPER PIN OF THE POT (ends to vcc and gnd and center to pin 3 of lcd) 4 13 5 gnd 6 12 7 -- 8 -- 9 -- 10 -- 11 11 12 10 13 9 14 8 15 VCC 16 GND Also a 220 ohm resistor is to be connected between pin 2 of the arduino and ground(pull down) the momentary switch is connected to pin two and vcc a 0.1 uf capacitor between the two terminals of the switch to reduce the debounce the reed switch to vcc and A0 a resistor between A0 and gnd (pull down) After connecting all this the wiring would be complete and now you can connect power and check if every thing is working Step 5: THE ENCLOSURE The casing could either be a plastic container or a wooden one, as long as it is durable and spacious enough. After installing the switches, LCD, button, and headers, make sure to test the functionality of the device as well. Make the cycle as waterproof as you can, since it will face the harshest conditions. Step 6: TESTING AND TROUBLESHOOTING Connect a 9v battery and test all three modes completely. Bring a magnet close to the reed switch and the speed and distance should increase. If it is not so in your case then post your doubts and queries in the comments and i will answer them back as soon as possible... Source: DIY SPEEDOMETER AND ODOMETER ### DIY Self Balancing Robot using Arduino After seeing RYNO motors and Segway's self balancing scooters, I was always interested in creating something alike. After some consideration, I made the decision to create a Self Balancing Robot using Arduino. This way, I would understand the fundamental idea behind the scooters and also gain knowledge of how the PID algorithm operates. As soon as I began constructing, I understood that constructing this robot would be quite a challenging task. There are numerous choices available, leading to confusion beginning with selecting the motors and continuing throughout the process of tuning PID values. There are numerous factors to take into account such as battery type, battery placement, wheel traction, motor driver type, maintaining the Centre of Gravity, and many others. However, once you construct it, you will realize that it is not as difficult as it may seem. Let's be honest, in this guide I will detail my journey of creating the self-balancing robot. You could be a complete novice taking the first steps or have arrived here after struggling for a while with your bot not functioning. This location is striving to be your ultimate stop. Let's begin now...... Selecting the Parts for your Bot Before I tell you all the options for building the bot let me list the items that I have used in this project Arduino UNO Geared DC motors (Yellow coloured) – 2Nos L298N Motor Driver Module MPU6050 A pair of wheels 7.4V Li-ion Battery Connecting wires 3D Printed Body Controller: I chose to use Arduino UNO as the controller here because it is user-friendly and simple to work with. You could opt for an Arduino Nano or Arduino mini, however, I suggest sticking with the UNO as we can program it without needing any additional hardware. Motors: The top motor option for a self balancing robot is definitely the Stepper motor. However, for simplicity's sake, I opted for a DC gear motor. No, having a stepper motor is not required; the bot functions well with these affordable yellow DC gear motors that are readily available. Motor Driver: If you have selected the DC gear motors like mine then you can either use the L298N driver module like me, or even a L293D should work just fine. Learn more about controlling DC motor using L293D and Arduino. Wheels: Do not under estimate these guys; I had a tough time figuring out that the problem was with my wheels. So make sure your wheels have good grip over the floor you are using. Watch closely, your grip should never allow your wheels to skit on the floor. Accelerometer and Gyroscope: The best choice of Accelerometer and Gyroscope for your bot will be the MPU6050. So do not attempt to build one with a normal Accelerometer like ADXL345 or something like that, it just won’t work. You will know why at the end of this article. You can also check our dedicated article on using MPU6050 with Arduino. Battery:  We need a battery that is as light as possible and the operating voltage should be more than 5V so that we can power our Arduino directly without a boost module. So the ideal choice will be a 7.4V Li-polymer battery. Here, since I had a 7.4V Li-ion battery readily available I have used it. But remember a Li-po is advantageous than Li-ion. Chassis: Another area where you should not make concessions is regarding your bots frame. You are able to utilize cardboard, wood, plastic, or any material you are comfortable with. However, ensure that the chassis is strong and does not move when the robot is attempting to maintain balance. I created my own chassis using Solidworks, taking inspiration from other bots, and then 3D printed it. Having a printer allows you to print the design files that will be included in the next section. 3D Printing and Assembling the Bot If you have decided to 3D print the same chassis that I am using to build my bot, then the STL files can be downloaded from thingiverse. I have also added the design files along with it so you can also modify it as per your personnel preferences. The parts have no overhanging structures so you can easily print them without any supports and an infill of 25% will work fine. The designs are pretty plain and any basic printer should be able to handle it with ease. I used the Cura software to slice the model and printed using my Tevo Tarantula, the setting are shown below. To make, you must print the body section and also four parts for mounting the motors. Putting together the items is quite simple; utilize 3mm bolts and nuts to fasten the motor and boards down. Once put together, it should resemble the image depicted below. The current layout included placement of the L298N drive module in the lower shelf and the Arduino and battery on top, as depicted in the image. If you are sticking to the same sequence, you can fasten the board through the pre-made holes and attach a wire tag to the Li-po battery. This setup should function as well, apart from the very basic wheels that I replaced afterwards. I rearranged the battery and Arduino UNO board in my bot to simplify programming, and added a perf board to finalize the connections. My bot didn't appear as I envisioned during the first phase. After finishing the wiring, programming, and testing, my bot now appears like this. Circuit Diagram Making the connections for this Arduino based Self balancing Robot is pretty simple. We just have to interface the MPU6050 with Arduino and connect the motors though the Motor driver module. The whole set-up is powered by the 7.4V li-ion battery.  The circuit diagram for the same is shown below. The Vin pin powers the Arduino while the 12V terminal powers the L298N Motor driver module. The Arduino board's built-in regulator will change the input voltage from 7.4V to 5V to supply power to the ATmega IC and MPU6050. The DC motors can operate within a voltage range of 5V to 12V. However, we will be linking the 7.4V positive cable from the battery to the 12V input terminal of the motor driver module. The motors will function at a voltage of 7.4V. The subsequent table will outline the connection between the MPU6050 and L298N motor driver module with Arduino. Component Pin Arduino Pin MPU6050 Vcc +5V Ground Gnd SCL A5 SDA A4 INT D2 L298N IN1 D6 IN2 D9 IN3 D10 IN4 D11 The communication between Arduino and MPU6050 is established via the I2C interface, therefore we utilize Arduino's A4 and A5 pins designated for SPI communication. The DC motors are linked to PWM pins D6, D9, D10, and D11 in that order. We have to link them to PWM pins as we will adjust the DC motor's speed by changing the duty cycle of the PWM signals. If you are unfamiliar with these two parts, it is advisable to go through the MPU6050 Interfacing and L298N Motor driver tutorial. Programming the Self Balancing Robot Next, we need to code our Arduino UNO board in order to stabilize the robot. This is the place where all the magic occurs; the idea behind it is straightforward. We need to determine if the bot is tilting forward or backward with the help of the MPU6050. If it's leaning forward, we should turn the wheels forward, and if it's leaning backward, we should turn the wheels backwards. We must also manage the rotation speed of the wheels while ensuring the bot stays centered; the wheels rotate slowly when slightly off-centered and increase in speed as the bot moves further away from the center position. The PID algorithm is utilized to achieve this logic, with the center position as the set-point and the degree of disorientation as the output. We utilize the MPU6050, a sensor that combines a 6-axis accelerometer and gyroscope, to determine the bot's current location. To obtain an accurate position measurement from the sensor, it is necessary to combine data from both the accelerometer and gyroscope. The accelerometer data may have noise issues, while the gyroscope data tends to drift over time. We need to combine both values to determine the yaw, pitch, and roll of our robot, but we will only use the yaw value. Doesn't it make your head spin a little? However, do not be concerned, because the Arduino community provides libraries that can easily handle the PID calculation and extract the yaw value from the MPU6050. The library is created by br3ttb and jrowberg individually. Now that we have included the libraries in our Arduino IDE. We should begin coding for our Self balancing Robot. As usual, the full code for the Project can be found at the bottom of this page, where I will only be discussing the key sections in the code. Previously, it was mentioned that the code is based on the MPU6050 example code. We will simply enhance the code for our specific requirements and incorporate PID and control techniques for our self-balancing robot. Initially, we add the necessary libraries for the program to function properly. This includes the built-in I2C library, PID Library, and MPU6050 Library that was recently downloaded. #include "I2Cdev.h" #include //From https://github.com/br3ttb/Arduino-PID-Library/blob/master/PID_v1.h #include "MPU6050_6Axis_MotionApps20.h" //https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050 Then we declare the variables that are required to get the data from the MPU6050 sensor. We read both the gravity vector and quaternion values and then compute the yaw pitch and roll value of the bot. The float array ypr[3] will hold the final result. // MPU control/status vars bool dmpReady = false; // set true if DMP init was successful uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU uint8_t devStatus; // return status after each device operation (0 = success, !0 = error) uint16_t packetSize; // expected DMP packet size (default is 42 bytes) uint16_t fifoCount; // count of all bytes currently in FIFO uint8_t fifoBuffer[64]; // FIFO storage buffer // orientation/motion vars Quaternion q; // [w, x, y, z] quaternion container VectorFloat gravity; // [x, y, z] gravity vector float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector Following is the highly significant part of the code, where you will dedicate a substantial amount of time adjusting for the correct values. If your robot is well-balanced and has symmetrical components (which is usually not the case), the set-point value will be 180. Alternatively, you can connect your bot to the Arduino serial monitor and adjust its tilt until you reach a stable position. Take note of the value shown on the serial monitor, as this will be your set point value. The tuning of Kp, Kd, and Ki should match your bot's characteristics. There is no way to avoid it as no two identical bots will have matching values for Kp, Kd, and Ki. View the video located at the bottom of this page for guidance on adjusting these values. /*********Tune these 4 values for your BOT*********/ double setpoint= 176; //set the value when the bot is perpendicular to ground using serial monitor. //Read the project documentation on circuitdigest.com to learn how to set these values double Kp = 21; //Set this first double Kd = 0.8; //Set this secound double Ki = 140; //Finally set this /******End of values setting*********/ In the following line, we start the PID algorithm by providing the input variables input, output, set point, Kp, Ki, and Kd. In the above section of code, we have already specified the values for set-point Kp, Ki, and Kd. The input value will be the current yaw value from the MPU6050 sensor, and the output value will be the result calculated by the PID algorithm. In essence, the PID algorithm produces an output value that helps adjust the Input value towards the set point. PID pid(&input, &output, &setpoint, Kp, Ki, Kd, DIRECT); In the setup function, we initialize the MPU6050 by setting up the DMP (Digital Motion Processor). This will assist us in merging the data from the Accelerometer with data from the Gyroscope to obtain a trustworthy measurement of Yaw, Pitch, and Roll. We won't delve much further into this as it would be way off topic. One specific part of code that needs to be investigated in the setup function are the gyro offset values. You can determine the offset values of your MPU6050 sensor using this Arduino sketch and then update the corresponding lines in your program accordingly. // supply your own gyro offsets here, scaled for min sensitivity mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1688); We also have to initialise the Digital PWM pins that we are using to connect our motors to. In our case it is D6, D9, D10 and D11. So we initialise these pins as output pins make them LOW by default. //Initialise the Motor outpu pins pinMode (6, OUTPUT); pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); //By default turn off both the motors analogWrite(6,LOW); analogWrite(9,LOW); analogWrite(10,LOW); analogWrite(11,LOW); In the main loop function, we verify if the data from the MPU6050 is available for reading. If the answer is affirmative, we utilize it to calculate the PID value and then showcase the input and output values of the PID on the serial monitor to assess the behavior of the PID system. After determining the output value, we determine whether the bot should proceed forward, backward, or remain stationary. Because we expect the MPU6050 to output 180 when the robot is standing straight up. Positive correction values are obtained when the bot falls forward, while negative values are obtained when it falls backward. Therefore, we verify this situation and then proceed to execute the necessary functions for the bot to either move forward or backward. < while (!mpuInterrupt && fifoCount < packetSize) { //no mpu data - performing PID calculations and output to motors pid.Compute(); //Print the value of Input and Output on serial monitor to check how it is working. Serial.print(input); Serial.print(" =>"); Serial.println(output); if (input>150 && input<200){//If the Bot is falling if (output>0) //Falling towards front Forward(); //Rotate the wheels forward else if (output<0) //Falling towards back Reverse(); //Rotate the wheels backward } else //If Bot not falling Stop(); //Hold the wheels still } The PID output variable also decides how fast the motor has to be rotated. If the bot is just about to fall then we make minor correction by rotating the wheel slowly. If these minor correction dint work and still if the bot is falling down we increase the speed of the motor. The value of how fast the wheels rotate will be decided by the PI algorithm. Note that for the Reverse function we have multiplied the value of output with -1 so that we can convert the negative value to positive. void Forward() //Code to rotate the wheel forward { analogWrite(6,output); analogWrite(9,0); analogWrite(10,output); analogWrite(11,0); Serial.print("F"); //Debugging information } void Reverse() //Code to rotate the wheel Backward { analogWrite(6,0); analogWrite(9,output*-1); analogWrite(10,0); analogWrite(11,output*-1); Serial.print("R"); } void Stop() //Code to stop both the wheels { analogWrite(6,0); analogWrite(9,0); analogWrite(10,0); analogWrite(11,0); Serial.print("S"); } Working of Arduino Self Balancing Robot After finishing the hardware setup, you can transfer the code to your Arduino board. Ensure that the connections are correct as we are using a Li-ion battery which requires extreme caution. Make sure to verify for any short circuits and prevent the terminals from touching in case of minor impacts on your robot. Turn on your module and launch your serial monitor. If your Arduino has successfully connected with the MPU6050 and everything is functioning as planned, you should be able to view the specified screen. Here are the input and output values of the PID algorithm represented as input => output. If the bot achieves perfect balance, the output value will be 0. The current value from the MPU6050 sensor is the input value. The letter "F" indicates forward movement of the bot, while "R" indicates reverse movement. In the beginning of PID tuning, I suggest keeping your Arduino cable connected to the robot for easy monitoring of input and output values, as well as for convenient correction and uploading of Kp, Ki, and Kd values. The video demonstrates the full functionality of the bot and provides guidance on adjusting your PID values. If you encounter any issues with getting your self balancing robot to work, feel free to ask questions in the comments or on the forums for more technical support. Code: /*Arduino Self Balancing Robot * Code by: B.Aswinth Raj * Build on top of Lib: https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050 * Website: circuitdigest.com */ #include "I2Cdev.h" #include //From https://github.com/br3ttb/Arduino-PID-Library/blob/master/PID_v1.h #include "MPU6050_6Axis_MotionApps20.h" //https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050 MPU6050 mpu; // MPU control/status vars bool dmpReady = false;  // set true if DMP init was successful uint8_t mpuIntStatus;   // holds actual interrupt status byte from MPU uint8_t devStatus;      // return status after each device operation (0 = success, !0 = error) uint16_t packetSize;    // expected DMP packet size (default is 42 bytes) uint16_t fifoCount;     // count of all bytes currently in FIFO uint8_t fifoBuffer[64]; // FIFO storage buffer // orientation/motion vars Quaternion q;           // [w, x, y, z]         quaternion container VectorFloat gravity;    // [x, y, z]            gravity vector float ypr[3];           // [yaw, pitch, roll]   yaw/pitch/roll container and gravity vector   /*********Tune these 4 values for your BOT*********/ double setpoint= 176; //set the value when the bot is perpendicular to ground using serial monitor. //Read the project documentation on circuitdigest.com to learn how to set these values double Kp = 21; //Set this first double Kd = 0.8; //Set this secound double Ki = 140; //Finally set this /******End of values setting*********/ double input, output; PID pid(&input, &output, &setpoint, Kp, Ki, Kd, DIRECT);   volatile bool mpuInterrupt = false;     // indicates whether MPU interrupt pin has gone high void dmpDataReady() { mpuInterrupt = true; } void setup() { Serial.begin(115200); // initialize device Serial.println(F("Initializing I2C devices...")); mpu.initialize(); // verify connection Serial.println(F("Testing device connections...")); Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed")); // load and configure the DMP devStatus = mpu.dmpInitialize(); // supply your own gyro offsets here, scaled for min sensitivity mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1688); // make sure it worked (returns 0 if so) if (devStatus == 0) { // turn on the DMP, now that it's ready Serial.println(F("Enabling DMP...")); mpu.setDMPEnabled(true); // enable Arduino interrupt detection Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)...")); attachInterrupt(0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // set our DMP Ready flag so the main loop() function knows it's okay to use it Serial.println(F("DMP ready! Waiting for first interrupt...")); dmpReady = true; // get expected DMP packet size for later comparison packetSize = mpu.dmpGetFIFOPacketSize(); //setup PID pid.SetMode(AUTOMATIC); pid.SetSampleTime(10); pid.SetOutputLimits(-255, 255); } else { // ERROR! // 1 = initial memory load failed // 2 = DMP configuration updates failed // (if it's going to break, usually the code will be 1) Serial.print(F("DMP Initialization failed (code ")); Serial.print(devStatus); Serial.println(F(")")); } //Initialise the Motor outpu pins pinMode (6, OUTPUT); pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); //By default turn off both the motors analogWrite(6,LOW); analogWrite(9,LOW); analogWrite(10,LOW); analogWrite(11,LOW); }   void loop() { // if programming failed, don't try to do anything if (!dmpReady) return; // wait for MPU interrupt or extra packet(s) available while (!mpuInterrupt && fifoCount < packetSize) { //no mpu data - performing PID calculations and output to motors pid.Compute(); //Print the value of Input and Output on serial monitor to check how it is working. Serial.print(input); Serial.print(" =>"); Serial.println(output); if (input>150 && input<200){//If the Bot is falling if (output>0) //Falling towards front Forward(); //Rotate the wheels forward else if (output<0) //Falling towards back Reverse(); //Rotate the wheels backward } else //If Bot not falling Stop(); //Hold the wheels still } // reset interrupt flag and get INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // get current FIFO count fifoCount = mpu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // reset so we can continue cleanly mpu.resetFIFO(); Serial.println(F("FIFO overflow!")); // otherwise, check for DMP data ready interrupt (this should happen frequently) } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // read a packet from FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // track FIFO count here in case there is > 1 packet available // (this lets us immediately read more without waiting for an interrupt) fifoCount -= packetSize; mpu.dmpGetQuaternion(&q, fifoBuffer); //get value for q mpu.dmpGetGravity(&gravity, &q); //get value for gravity mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); //get value for ypr input = ypr[1] * 180/M_PI + 180; } } void Forward() //Code to rotate the wheel forward { analogWrite(6,output); analogWrite(9,0); analogWrite(10,output); analogWrite(11,0); Serial.print("F"); //Debugging information } void Reverse() //Code to rotate the wheel Backward { analogWrite(6,0); analogWrite(9,output*-1); analogWrite(10,0); analogWrite(11,output*-1); Serial.print("R"); } void Stop() //Code to stop both the wheels { analogWrite(6,0); analogWrite(9,0); analogWrite(10,0); analogWrite(11,0); Serial.print("S"); } Source: DIY Self Balancing Robot using Arduino ### DIY ESP32 Wifi Self Balancing Robot - B-Robot ESP32 Arduino Programing https://youtu.be/tZynIj1StpM This article is proudly sponsored by PCBWAY. PCBWAY make high quality prototyping PCBs for people all over the world. Try it for your self and get 10 PCBs for just $5 at PCBWAY with very great quality, Thanks PCBWAY. The ESP32 Balancing Robot Shield that I developed in this project uses PCBWAY PCB services. In this instructable, I will show you how to build Self Balancing Robot use ESP32 Wifi. Let's get started! This self balancing robot is based on: B-Robot EVO 2.0 by JJRobots B-Robot ESP32 Step 1: Circuit Diagram Step 2: Parts List 1 x PCB ESP32 Balancing Robot Shield (https://www.pcbway.com/project/shareproject/ESP32_Balancing_Robot_Shield.html) 1 x ESP32 DEVKIT V1 board 2 x Stepper Motor Driver A4988 1 x 3 axis Acc. and Gyro sensor MPU6050 2 x Stepper Motor Nema17 1 x Servo Motor MG90S 1 x LED 3mm 2 x LED 3mm White Super Bright 1 x Active BUzzer 2 x V-Regulator 5V AMS1117 (SMD) 1 x Resistor 1K Ohm 1 x Capacitor 0.1uF 1 x Capacitor 100uF/16V 2 x Capacitor 220uF/16V 1 x Rocker Switch Dia. 20mm 2 x Rechargeable Battery Li-ion 18650 3,7V 1 x Battery Holder 2x 18650 1 x Micro USB Cable 1 x OTG Adapter 1 x Terminal Screw 2 pin 5mm 2 x Female Header 15 pin 5 x Female Header 8 pin 2 x Female Header 4 pin 1 x Male Header 2 pin 1 x Male Header 3 pin 1 x Jumper cap 1 x Set screw 5mm 1 x Set M3 set screw 10mm 2 x O-ring 3mm ID 82mm 1 x Set 3D Printed Parts Step 3: Order PCB on PCBWAY In order to create this project, you must purchase a prototype PCB from PCBWAY. Ordering is quite simple and for only $5, you will receive 10 Pcs of high-quality PCB. Step to Order: 1. SignUp/Log in on pcbway.com 2. Open this PCB project link ESP32 Wifi Balancing Robot Shield 3. Click Add to cart. 4. Wait moment for PCB review, then Click Check Out. Step 4: Solder SMD Component (AMS1117 5V) This project has two SMD component, it is not too difficult to solder because the size of the SMD component is quite large, so don't worry. You will need tweezers as a tool to hold the components when soldered. Step 5: Place the Components After finish solder SMD component, next attach other trough hole components on the PCB following the pictures and symbols on the PCB, for details you can follow step by step in the video. Step 6: Soldering To attach every leg of the components to the PCB's rear side, you can refer to the video for a detailed step-by-step guide. After completing the soldering process, trim all the lengthy legs of the component wire. Step 7: Attach Modules Connect the ESP32 board, MPU6050, and two Driver Stepper Motor A4988 to the female header socket as demonstrated, pay attention to the pin names to avoid incorrect orientation. Step 8: 3D Printed Parts Print all of 3D parts Balancing robot, get design file from thingiverse.com/thing:2306541 List 3D Printed Parts: 2x Wheels 2x Hub Arm 2x Side Panel Top Shelf Motor Shelf Electronics Shelf 2x Bumpers Step 9: Install 3D Parts Insert four M3 nuts into each hole on the edge of the Electronics Shelf (3d printed part). Install two Side Panel (3d printed part) on both sides then tie it with a machine screw. Step 10: Install Stepper Motor Attach two stepper motor Nema17 to the Motor Shelf (3d printed part) then tie it with a machine screw. Step 11: Assembly Parts Attach Motor Shelf assy with Electronic Shelf Assy then tie it with a machine screw. Step 12: Install Electronics Shield Put the battery scrap under the electronic shield as shown. Attach ESP32 Balancing Robot Shield into Electronic Shelf then tie it with a wood screw. Source: DIY ESP32 Wifi Self Balancing Robot - B-Robot ESP32 Arduino Programing ### DIY Arduino radar with display Makers, Arduino enthusiasts and students looking to learn more about ultrasonic sensors, may be interested in this DIY Arduino radar created by Mr Innovative. Capable of detecting objects placed in front of it the radar features a revolving dish capable of detecting objects in its line of sight. Watch the video below to learn more about its features, construction and capabilities. Mr Innovative elaborates further on the project, discussing various components that are part of it. "Hey guys, in this video I created a small radar with a screen using the HC-SR04 ultrasonic sensor. This sensor sends out ultrasonic waves that bounce back after hitting an object, providing data." a visualization is displayed on 1.8″ ST7735 display, if any object detect by radar it’ll show in display in red line.” Ultrasonic sensors are valuable in many robotics projects as they send out a high frequency sound wave and then detect its reflection to measure the distance of an object. If you want to see how the sensor perceives an area, Mr. Innovative's "radar" offers an enjoyable visualization. To get more information on creating your own DIY Arduino radar, visit the official GitHub page and Thingiverse for the 3D printable files for the enclosure and radar dish.   Source: DIY Arduino radar with display ### Create laser range finder using arduino  I have collected 2 methods to create laser range finder, one is very simple but for hobbiest the first one using arduino clock but it comes with errors. Its just to conceptulize how we can create range finder. The second one with the The 7558 and 7555 Series Rangefinder/Processor professional one. It uses already built kits we only have to use these to developer arduino based range finder.   1. TRYING TO MEASURE THE SPEED OF LIGHT WITH AN ARDUINO We know that measuring the speed of light with an Arduino is possible. It’s just that the implementation is hard. Last month we saw [Udo]’s blinkenlight shield that can be used as a line scan camera. It’s a neat piece of kit, but [Udo] really wants to submit something for the Buildlounge laser cutter giveaway, so he figured measuring the speed of light would be an easy project. If a kid and a chocolate bar can do it, surely it can’t be too hard. [Udo] came up with the idea of flashing a laser pointer and timing the reflection. With a mirror and a fairly extended line of sight, his blinken light shield can function as a light sensor. However, there are some issues with the configuration: at 16 MHz, an Arduino will cover a distance of 19 meters in a single clock cycle. Despite using advanced coding techniques, it is uncertain whether detecting an emitted photon is feasible with clock speeds that are relatively slow. Consider buying a few hundred meters of optic fiber so the whole experiment can be placed on a desk, but please share any alternative suggestions in the comments. The demonstration of Udo's combination of blinkenlights and lasers can be found below. 2. LASER RANGEFINDER RECEIVERS WITH RANGE PROCESSORS The Rangefinder/Processor assemblies in the 7558 and 7555 Series include a high-performing 758A or 755A receiver with small support electronics to deliver accurate range information to a main system. AMI's patented technology calibrates the output of serial range data to reduce the impact of range errors caused by factors such as variations in return signal amplitude, including walk. The ability to detect very small amounts enables the use of low power lasers, or instead, operation over long distances. The modules offer high voltage bias, time programmed gain with noise tracking threshold, selection of first, last, and strongest pulses, and range gating. The 7558 line features a TE cooler controller and heatsink. There are also several user-manageable settings accessible through the serial interface. The condensed design enables placement of the optics to achieve the smallest possible system size. Custom options and optimization are available. High Sensitivity down to 3nW (7558 Series) Fast Recovery from Overload Optimized for Multiple Targets Cooled Detector (7558 Series) Time Programmed Gain with Noise Tracking Threshold High Speed Range Counter Range Walk Correction to 1m RMS Digitally adjustable: APD Bias, Range Gates, False Alarm Rate Built-in HV Bias Supply for APD Detector Model Detector Ø Sensitivity (Typ) Multiple Target Resolution (1:1 Low Gain) Multiple Target Resolution (1:1 High Gain) Dynamic Range Min/Max Range 7555-04 200µm 5nW (20ns) 15 meters 30 meters 106:1 50m to 65km 7558-03 80µm 3nW (6ns) 10 meters 20 meters 107:1 50m to 65km 7558-04 200µm 5nW (6ns) 10 meters 20 meters 107:1 50m to 65km Interface test board available for the Model 7555 Application Notes available for most models.  Please contact us to request a copy of these ITAR controlled documents. Specifications are typical and are subject to change without notice. See data sheet for details. In the event these commodities will be transferred to a “foreign person” as defined in 22 CFR 120.16,either outside or within the United States, a validated US State Department license is required. ### Blink led example arduino with python To blink an LED with an Arduino using Python, you will need to: Connect the LED to the Arduino board. You will need to connect the positive leg of the LED (the longer leg) to a digital output pin and the negative leg (the shorter leg) to a ground pin. Install the PySerial library, which allows Python to communicate with the Arduino over a serial connection. Use PySerial to send a command to the Arduino to turn the LED on and off. You can do this by opening a serial connection to the Arduino and sending a string with the command you want to execute. Here's an example of how to blink an LED connected to digital pin 13 on an Arduino Uno using Python: import serial import time # Set up the serial connection to the Arduino ser = serial.Serial('/dev/ttyACM0', 9600) # Blink the LED on and off while True: ser.write(b'13H') # Turn the LED on time.sleep(1) # Wait 1 second ser.write(b'13L') # Turn the LED off time.sleep(1) # Wait 1 second # Close the serial connection ser.close() This code will turn the LED on for 1 second and then off for 1 second, creating a blinking effect. You can adjust the delay between turning the LED on and off by changing the time.sleep() duration. How to Install the PySerial library in Arduino in windows: To install the PySerial library on an Arduino board running Windows, you will need to follow these steps: Connect the Arduino board to your computer via a USB cable. Open the Arduino Integrated Development Environment (IDE) and go to the "Tools" menu. Under the "Tools" menu, select "Manage Libraries..." to open the Library Manager. In the search bar at the top of the Library Manager, type "pyserial" and press Enter. Scroll down to the "PySerial" library and click the "Install" button to the right of the library name. This will download and install the PySerial library onto your Arduino board, allowing you to use Python scripts to communicate with the Arduino over a serial connection. ### Arduino Datalogger This tutorial will show you how to build a simple data recorder using Arduino. The aim is to understand the basic principles of using Arduino to collect data and show it on the terminal. This basic structure can be used for a variety of purposes. To get started: You will need a Tinkercad (www.tinkercad.com) account. Head over and sign up with your email or social media account. Logging in takes you to the Tinkercad Dashboard. Click "Circuits" to the left and select "Create new Circuit". Let's get started! You can find the complete file on TInkercad Circuits - Thanks for checking it out! Step 1: Add Some Components You'll need some basic components. These include: Arduino board Breadboard Add those by searching for them and click-dragging them to the middle area. Place the breadboard over the Arduino. It makes it easier to view the connections later. Step 2: A Note About Breadboards A breadboard is a super helpful device for rapid prototyping. We use it to connect components. Some things to note. The dots are connected vertically, but the line in the middle separates this connection from the top and bottom columns. Columns are not connected left to right, as in across the row. This means that all components should be connected across the columns rather than down them vertically. If you need to use buttons or switches, connect them across the break in the middle. We'll visit this in a later tutorial. Step 3: Add Two Sensors We are employing a Photosensitive sensor and a Temperature sensor. These sensors evaluate the amount of light and temperature. We use Arduino to read the value and display it on the Serial monitor of the Arduino. Locate and place the set of sensors. Make sure they are placed in a horizontal alignment across the rows of the breadboard. Create enough space between them to improve visibility. Step 4: Photosensitive Sensor For the photosensitive sensor, add a wire from the 5V pin on the Arduino to the same column as the right leg on the part in the breadboard. Change the wire colour to red. Connect the left leg via the pin in the same column to the A0 (A-zero) pin on the Arduino. This is the analog pin, which we will use to read the value from the sensor. Colour this wire yellow or something other than red or black. Place a resistor (search and click-drag) on the board. This completes the circuit and protects the sensor and pin. Turn it around so it goes across the columns. Connect one leg to the right leg column on the breadboard Place a wire from the other end of the resistor to the ground Change the wire colour to black. Double check all connections. If something isn't in the right place, this won't function correctly. Source: Arduino Datalogger ### Arduino-Based Robotic Arm Controlled by Hand Gestures Introduction Greetings to all, hoping everyone is in good health. We're thrilled to present our newest article about Arduino projects. This article discusses the development of a robot arm that is operated through hand movements with the help of Arduino UNO. To identify hand motions, we will use four IR sensors placed in four separate orientations with their sensor heads pointed up. Feel at liberty to discover more Arduino and IoT projects created by our team. Adhere to the circuit diagram to put together the parts and then upload the given code to the Arduino board. Description In this project, the movement of the robot arm is manipulated without any physical touch. On the contrary, it reacts to hand movements by employing IR sensors embedded in the system. These sensors identify hand motions and produce a strong signal when they sense obstacles nearby. Two servo motors control the movements along the x-axis and y-axis, respectively. When you place your hand above the sensors, the robotic arm changes its movement in response. These robotic arms are currently in high demand, being used in a wide range of industries to increase efficiency. Thoroughly examine the article for detailed guidance on constructing this project on your own. Moreover, you have the option to investigate our previously developed WiFi controlled robot with nodemcu for more information. Components Required Certainly, here's a rephrased list of the components required: - Arduino UNO - 4 infrared (IR) sensors - 2 servo motors - Cardboard pieces - Jumper wires and a breadboard - USB cable used for uploading the code Circuit For Hand Gesture Controlled Robot Start by placing two servo motors one on top of the other as shown in the provided project image. Use a cardboard piece to hold up this arrangement. After that, connect the positive supply cables of the two servo motors to the 5-volt pin on the Arduino. Attach the servos' negative supply wires to the Arduino's GND pin. Continue by connecting the signal wire of the initial servo motor to the digital-12 pin on the Arduino. Attach the second servo motor's signal wire to the Arduino's digital-13 pin. Next, obtain four IR sensors and wire their VCC pins to the 5-volt pin on the Arduino. Join the ground pins of these sensors to the ground pin of the Arduino. Use a breadboard for efficient connections. Connect the OUT pin of the initial, second, third, and fourth IR sensors to the digital-8, digital-6, digital-7, and digital-9 pins of the Arduino correspondingly. Your circuit has been put together and is prepared for utilization. Code For Hand Gesture Controlled Robot Attention: Prior to uploading this code to the Arduino, ensure the installation of in case an error occurs. You can refer to instructions on adding a zip library to the Arduino IDE here for guidance. //Techatronic.com #include Servo motor1; Servo motor2; int sensor1 = 8; int sensor2 = 6; int sensor3 = 7; int sensor4 = 9; void setup() { pinMode(sensor1,INPUT); pinMode(sensor2,INPUT); motor1.attach(12); motor2.attach(13); // Serial.begin(9600); } void loop() { int top = digitalRead(sensor1); int bottom = digitalRead(sensor2); int right = digitalRead(sensor3); int left = digitalRead(sensor4); //Serial.println(top); //Serial.println(bottom); //Serial.println(right); //Serial.println(left); if (top == 1 && bottom == 1 && right == 1 && left == 1) { motor1.write(60); motor2.write(60); } else if(top == 1 && bottom == 1 && right == 1 && left == 0) { motor1.write(0); motor2.write(60); } else if(top == 1 && bottom == 1 && right == 0 && left == 1) { motor1.write(180); motor2.write(60); } else if(top == 1 && bottom == 1 && right == 0 && left == 0) { motor1.write(60); motor2.write(60); } else if(top == 1 && bottom == 0 && right == 1 && left == 1) { motor1.write(60); motor2.write(0); } else if(top == 1 && bottom == 0 && right == 1 && left == 0) { motor1.write(0); motor2.write(0); } else if(top == 1 && bottom == 0 && right == 0 && left == 1) { motor1.write(180); motor2.write(0); } else if(top == 1 && bottom == 0 && right == 0 && left == 0) { motor1.write(60); motor2.write(0); } else if(top == 0 && bottom == 1 && right == 1 && left == 1) { motor1.write(60); motor2.write(180); } else if(top == 0 && bottom == 1 && right == 1 && left == 0) { motor1.write(0); motor2.write(180); } else if(top == 0 && bottom == 1 && right == 0 && left == 1) { motor1.write(180); motor2.write(180); } else if(top == 0 && bottom == 1 && right == 0 && left == 0) { motor1.write(60); motor2.write(180); } else if(top == 0 && bottom == 0 && right == 1 && left == 1) { motor1.write(60); motor2.write(60); } else if(top == 0 && bottom == 0 && right == 1 && left == 0) { motor1.write(0); motor2.write(60); } else if(top == 0 && bottom == 0 && right == 0 && left == 1) { motor1.write(180); motor2.write(60); } else if(top == 0 && bottom == 0 && right == 0 && left == 0) { motor1.write(0); motor2.write(0); } } We hope you found this project enjoyable and have a good understanding of its concepts. If you have any questions or doubts about this project, please make use of the comments section provided. Furthermore, delve into additional guides on Arduino and Raspberry Pi to enhance your learning experience. ### Building a Robot with the Arduino Alvik Robot Kit Introduction The Arduino Alvik Robot Kit offers a fun and educational way for users to construct their own customizable robot. The kit contains all the necessary electronic and mechanical parts to build a robot capable of movement, environmental sensing, and responding to user commands. In this article, I will explore the main characteristics of the Arduino Alvik Robot Kit, the process of constructing and programming the robot, and comment on the educational benefits and potential uses of robots created with this toolkit. The kit allows one to both physically and digitally bring to life a self-sufficient machine by combining hardware components and writing code. What's Included in the Kit The Arduino Alvik Robot Kit is a Robot construction kit that has all the hardware components required to construct a Two-wheeled differential drive Robot. Some of the major components included are: Arduino Uno microcontroller- It is responsible for control of the robot and it contains different programs that it runs to control the robot. The Arduino is a miniature computer board that uses open-source hardware and software and has an ATmega328P microcontroller. Motors and wheels – Two geared DC motors with wheels are employed to provide mobility to the robot in any desired direction with speed control of wheels being individual. Motors driver – There is an L298N dual H-bridge motor driver that offers control and direction of the two DC motors. It plays the role of a mediator for the Arduino board and the motors to be connected to. Sensors – Besides the basic components, additional and advanced components such as an infrared proximity sensor, line follower sensor, and push buttons offer sensing and input capacity in the kit. A lithium-ion polymer battery and a battery charger offer power to the robot as a source of portable power to enable the operation of the Robot. Chassis – All the electronic components are fixed on a durably made plastic base with wheels. Robot designs are feasible since the structural plastic sheets and bars can suit the best robot design to be made. Cables and connectors: It comprises jumper wires, breadboards, and other cables that give ease in connection of components. Users are provided with details instructions and tutorials in the form of written documents that show how to assemble and program the robot. Further assistance comes from the online video tutorials. Assembly Process Constructing the robot from the kit components involves soldering, wiring, and fastening parts together following the instructions. Key steps in the assembly process are: It was mounting the Arduino board, motor driver, sensors, and buttons to the chassis using standoffs, screws, or zip ties. This forms the base electronics platform. Soldering the motor driver to the Arduino using the provided jumper wires based on the motor driver circuit diagram. This connects the control signals. Securing the motors to the chassis and connecting their power leads to the motor driver output ports with connectors. Wiring the battery, switches, and sensors to the appropriate Arduino and motor driver pins. Assembling additional robot parts like the chassis armor or line sensor mount as desired. Programming the Arduino to test basic robot functions before final assembly. Fastening on the wheels and finishing design additions. The robot assembly is now complete. Programming the Robot The Arduino IDE software is used to write programs that control the robot's behavior. Example programs are provided to demonstrate functions like: Moving the robot forward, backward, and turning using motor speed control. Sensing obstacles with the infrared sensor and stopping or turning away. Following a line by reading the reflected light values from the line sensor. Taking input from buttons to switch between programs. Users can modify these programs or write their code. The Arduino programming language is based on C/C++ and involves setting up inputs/outputs, using control structures, and calling motor driver functions. Documenting programs and adding comments is important. Over time, more complex programs can integrate multiple sensors for autonomous robot applications. Educational Value The Arduino Alvik Robot Kit provides a hands-on, creative way to learn fundamental principles of engineering, electronics, and programming. Some key skills it helps develop include: Mechanical skills - Assembly, designing physical structures, transferring technical diagrams. Electrical/electronic skills - Basic circuits, soldering, wiring components, signal flow. Programming logic - Translating problems into algorithms, debugging code, and flow control. Problem-solving - Integrating mechanical, electrical, and software elements into functioning systems. Creativity - Customizing robot designs and coming up with new applications. Collaboration - Working with others to build upon code and expand capability. Building robots from a kit improves conceptual understanding through an experiential "learning by doing" approach. It can inspire interest in STEAM fields and develop career interests at a young age. The open-ended nature allows for various applications and continual skill progress as skills and capabilities increase over time. Potential Applications Once functionally programmed and constructed, robots built using the Arduino Alvik Kit have a variety of possible applications: Education - Demonstrating engineering and programming principles in classroom settings or science fairs. Can integrate with curriculums. Robotics competitions - Participating in FIRST Lego League events by creating an autonomous robot to complete tasks. Automation - Using sensors and control systems on a robot for automated or repetitive tasks like cleaning, sorting, and assembly line functions. Surveillance - Adding cameras and wireless capabilities for security patrols, and infrastructure inspections from a safe distance. Research - As a platform for developing and testing new sensors, AI/machine learning algorithms, or form factors in university labs. Entertainment - Like remotely controlled vehicles or programmed dancing/performance robots for attractions, shows, or user entertainment. Hobbyist projects - Building versatile robot platforms for creative applications like artificial pet companions, interactive artwork, or R/C vehicles. Conclusion In summary, the Arduino Alvik Robot Kit is an accessible and educational kit well-suited for developing hands-on skills in mechanics, electronics, and programming. The open design philosophy supports endless creative applications for robots built with the kit. Both independent and classroom learning projects are possible as users discover what robots can do. In the future, continual expansion of sensor capabilities and integration of advanced technologies will only increase what's possible. For inspiring interest in STEAM careers or just having fun building robots, this kit provides a rewarding introductory experience. Introduction The Arduino Alvik Robot Kit offers a fun and educational way for users to construct their own customizable robot. The kit contains all the necessary electronic and mechanical parts to build a robot capable of movement, environmental sensing, and responding to user commands. In this article, I will explore the main characteristics of the Arduino Alvik Robot Kit, the process of constructing and programming the robot, and comment on the educational benefits and potential uses of robots created with this toolkit. The kit allows one to both physically and digitally bring to life a self-sufficient machine by combining hardware components and writing code. What's Included in the Kit The Arduino Alvik Robot Kit is a Robot construction kit that has all the hardware components required to construct a Two-wheeled differential drive Robot. Some of the major components included are: Arduino Uno microcontroller- It is responsible for control of the robot and it contains different programs that it runs to control the robot. The Arduino is a miniature computer board that uses open-source hardware and software and has an ATmega328P microcontroller. Motors and wheels – Two geared DC motors with wheels are employed to provide mobility to the robot in any desired direction with speed control of wheels being individual. Motors driver – There is an L298N dual H-bridge motor driver that offers control and direction of the two DC motors. It plays the role of a mediator for the Arduino board and the motors to be connected to. Sensors – Besides the basic components, additional and advanced components such as an infrared proximity sensor, line follower sensor, and push buttons offer sensing and input capacity in the kit. A lithium-ion polymer battery and a battery charger offer power to the robot as a source of portable power to enable the operation of the Robot. Chassis – All the electronic components are fixed on a durably made plastic base with wheels. Robot designs are feasible since the structural plastic sheets and bars can suit the best robot design to be made. Cables and connectors: It comprises jumper wires, breadboards, and other cables that give ease in connection of components. Users are provided with details instructions and tutorials in the form of written documents that show how to assemble and program the robot. Further assistance comes from the online video tutorials. Assembly Process Constructing the robot from the kit components involves soldering, wiring, and fastening parts together following the instructions. Key steps in the assembly process are: It was mounting the Arduino board, motor driver, sensors, and buttons to the chassis using standoffs, screws, or zip ties. This forms the base electronics platform. Soldering the motor driver to the Arduino using the provided jumper wires based on the motor driver circuit diagram. This connects the control signals. Securing the motors to the chassis and connecting their power leads to the motor driver output ports with connectors. Wiring the battery, switches, and sensors to the appropriate Arduino and motor driver pins. Assembling additional robot parts like the chassis armor or line sensor mount as desired. Programming the Arduino to test basic robot functions before final assembly. Fastening on the wheels and finishing design additions. The robot assembly is now complete. Programming the Robot The Arduino IDE software is used to write programs that control the robot's behavior. Example programs are provided to demonstrate functions like: Moving the robot forward, backward, and turning using motor speed control. Sensing obstacles with the infrared sensor and stopping or turning away. Following a line by reading the reflected light values from the line sensor. Taking input from buttons to switch between programs. Users can modify these programs or write their code. The Arduino programming language is based on C/C++ and involves setting up inputs/outputs, using control structures, and calling motor driver functions. Documenting programs and adding comments is important. Over time, more complex programs can integrate multiple sensors for autonomous robot applications. Educational Value The Arduino Alvik Robot Kit provides a hands-on, creative way to learn fundamental principles of engineering, electronics, and programming. Some key skills it helps develop include: Mechanical skills - Assembly, designing physical structures, transferring technical diagrams. Electrical/electronic skills - Basic circuits, soldering, wiring components, signal flow. Programming logic - Translating problems into algorithms, debugging code, and flow control. Problem-solving - Integrating mechanical, electrical, and software elements into functioning systems. Creativity - Customizing robot designs and coming up with new applications. Collaboration - Working with others to build upon code and expand capability. Building robots from a kit improves conceptual understanding through an experiential "learning by doing" approach. It can inspire interest in STEAM fields and develop career interests at a young age. The open-ended nature allows for various applications and continual skill progress as skills and capabilities increase over time. Potential Applications Once functionally programmed and constructed, robots built using the Arduino Alvik Kit have a variety of possible applications: Education - Demonstrating engineering and programming principles in classroom settings or science fairs. Can integrate with curriculums. Robotics competitions - Participating in FIRST Lego League events by creating an autonomous robot to complete tasks. Automation - Using sensors and control systems on a robot for automated or repetitive tasks like cleaning, sorting, and assembly line functions. Surveillance - Adding cameras and wireless capabilities for security patrols, and infrastructure inspections from a safe distance. Research - As a platform for developing and testing new sensors, AI/machine learning algorithms, or form factors in university labs. Entertainment - Like remotely controlled vehicles or programmed dancing/performance robots for attractions, shows, or user entertainment. Hobbyist projects - Building versatile robot platforms for creative applications like artificial pet companions, interactive artwork, or R/C vehicles. Conclusion In summary, the Arduino Alvik Robot Kit is an accessible and educational kit well-suited for developing hands-on skills in mechanics, electronics, and programming. The open design philosophy supports endless creative applications for robots built with the kit. Both independent and classroom learning projects are possible as users discover what robots can do. In the future, continual expansion of sensor capabilities and integration of advanced technologies will only increase what's possible. For inspiring interest in STEAM careers or just having fun building robots, this kit provides a rewarding introductory experience. Q: What is the recommended age range for this robot kit? A: The kit is suitable for ages 10 and up. Young builders may need help from parents or teachers for some assembly steps like soldering. But overall it provides an accessible introduction to robotics that older elementary/middle school students can manage independently. Q: How long does it take to assemble the robot? A: Most users report being able to fully assemble their first basic robot within 4-6 hours spread over a few sessions, though experienced builders may complete it faster. More advanced designs or adding extra sensors may take additional time. The step-by-step guide helps keep the process manageable. Q: Can I modify or expand the robot design after building the basic kit? A: Yes, the open-source nature of the Arduino platform and modular kit components allow for unlimited customization. Users can get creative by adding their structural elements, actuators, and inputs/outputs as their skills progress. The community also shares many expansion ideas. Q: What programming languages can be used to code the robot? A: The Arduino IDE uses Wiring/Arduino language which is based on C/C++. These are the best options. But some functions can also be controlled through Android/iOS apps or graphical block-based languages like Scratch with additional hardware. Q: Is prior programming experience required? A: No, the kit is designed for beginners and includes example programs to demonstrate basic functions. That said, some programming fundamentals will need to be learned. The guide gradually introduces key concepts to build knowledge step-by-step. Q: How durable is the assembled robot? A: It's meant for educational use, not heavy-duty tasks. Basic designs hold up well to normal indoor use and travel. Reinforcing connections and armor can improve strength for rougher applications. Precision maneuvering or sensitive sensors may be affected over long-term heavy use. Q: Can two robots communicate with each other wirelessly? A: Yes, including wireless modules allows robots built from the kit to link up. Technologies like Bluetooth, WiFi, or radio modules let them exchange data, coordinate functions, or compete against each other in experiments. ### HOW TO CREATE A MECHANICAL SHUTTER RELEASE FOR YOUR DIGITAL POINT & SHOOT CAMERA Most cameras these days offer some kind of built-in WiFI or Bluetooth control that allows you to fire your camera from an app on your smartphone. But not all of them do. The Ricoh GRII is one of those cameras that actually does offer some remote control via an app or USB remote, but sometimes you still want that tactile feel of pushing a shutter button, and the immediate response it gives. One GRII owner, Steloherd, has created his own method of firing the camera’s shutter via a traditional mechanical shutter release cable. It attaches via the camera’s hot shoe, and then the cable just screws into the top to push down the regular shutter button. Steloherd says he made the mechanical cable release bracket because he wasn’t very comfortable with the Ricoh CA-3 remote shutter release, which connects through the GRII’s USB port. He says the cable isn’t very flexible and little movements of the cable can shift the camera when he sets it down on a flat surface without a tripod. He also does not use smartphones. The lever is made from three main parts. There’s the foot which slides into the camera’s hot shoe, an arm to mount the release cable, and a lever which the cable pushes down to fire the shutter (although he says it’s not essential, it’s merely to protect it from scratches). These three components are held together by a single screw going into the hot shoe mount. It’s a neat idea, and I’ve seen a few others do similar over the years to add an external shutter release to cameras. Typically, though, it’s to add an external shutter release ones that don’t have a USB or smartphone option, often to be able to shoot timelapse. In those cases, instead of the mechanical shutter release cable, a servo motor or linear actuator and an Arduino was used to push down a lever onto the camera’s shutter button. Source: HOW TO CREATE A MECHANICAL SHUTTER RELEASE FOR YOUR DIGITAL POINT & SHOOT CAMERA ### Universal Air Slide Whistle 1000 In this post, we will learn how to make Universal-Air-Slide-Whistle-1000: The slide whistle is a musical instrument often used for comedic effect due to its silly sound. In this instructable, we teach you how to make an air slide whistle! What is an air slide whistle? It follows the same idea as air guitar where you mimic the movement of playing a guitar without actually playing a real guitar. In our case, we created a device that functions similarly to the slide whistle, except a distance sensor replaces the rod and a push-button replaces the user having to blow into the whistle. The reading on the distance sensor changes the pitch of the noise and the push button activates it. The LED light is just for show. What makes our air slide whistle "universal" is that you can upload different sounds to it besides a whistling noise (i.e. Wookie noise, trombone, didgeridoo, or any other sound bit you want)! We made this project in collaboration with the Femineers of Fremont Academy for our Electronics class at Pomona College. Steps how to make Universal Air Slide Whistle 1000 Step 1: Gather Your Supplies 1. 10K Resistor 2. Sparkfun Bluetooth Mate: https://www.digikey.com/product-detail/en/sparkfun... 3. Hexaware Wearable Electronics Kit: http://hexwear.com/ 4. Glove (fabric) 5. Hot Glue Gun 6. Laptop 7. Adafruit NeoPixel Digital RGBW LED Strip: https://www.adafruit.com/product/2824?length=1&fbc... 8. Male to Male AUX Cord 9. Fabric Wrist Band 10. Momentary Push Button Switch – 12mm Square: https://www.osepp.com/accessories/components/29-mo... 11. Solder 12. Soldering Iron 13. Speaker 14. Thin Circuit Board (like the one in the link): https://www.alliedelec.com/product/vector-electron... 15. Three AAA Batteries 16. Twist Ties (recommend circular twist ties like the one in the link): https://www.amazon.com/dp/B013LCUQIE/ref=sspa_dk_d... 17. Ultrasonic Range Sensor: https://www.amazon.com/HC-SR04-Ranging-Detector-Ul... 18. Wire Cutters 19. Wire Strippers 20. Wires (different colors are best, one is fine though) Step 2: Setting Up the Arduino Code Step 1: Download the Arduino IDE from the following site: https://www.arduino.cc/en/Main/Software Step 2: You may have to download the following libraries. Sketch > Include Library > Manage Library. Search for "HexWear HexLED", "SoftwareSerial", and "Wire". Click the box they're in and click "Install" Step 3: Download the attached Arduino code! ### The Desktop Device - a Customizable Desktop Assistant In this post, we will learn The-Desktop-Device-a-Customizable-Desktop-Assistant: The Desktop Device is a small personal desktop assistant that can display various information downloaded from the internet. This device was designed and built by me for the CRT 420 - Special Topics class at Berry College which is lead by Instructor Zane Cochran. This instructable will go into detail about how to build your own device similar to this one. In the video that I linked, the more visually appealing steps as well as some grade A commentary from me show the process of the device being built. I'm relatively new to YouTube but I am trying to make some interesting DIY / automotive content so feel free to check it out and let me know what you think I could improve on! Also if you want to check out some of my other Instructables, you can do so by clicking on my profile. Below are the items and software that are used to create the desktop device (The Amazon links are affiliate links which support me when you purchase items through them, at no extra cost to you) Much like SlouchyBoard (https://www.instructables.com/id/SlouchyBoard-an-A...), we started out by Breadboarding this circuit to make sure everything worked before we soldered it into a Printed Circuit Board (PCB). These are the breadboarding components that I used to make sure everything works. $11 ESP32: https://amzn.to/2HfT26Y $7 Micro USB: https://amzn.to/2PXntSb $17 Screen(HiLetgo 2.2" Display 240x320): https://amzn.to/2LNc0Gu $6.50 Jumper Wires: https://amzn.to/2ViOfFm (Not required, but we used a 10microFahrad Capacitor to make the screen run much better) $15.50 Capacitor kit: https://amzn.to/2LDNcR4 10k Ohm resistors (If you ever bought an Arduino kit you probably already have these) $9 Resistor Kit: https://amzn.to/2vVTwbL Buttons (again, you probably have some, just make sure your PCB has the correct button!): $17 Button kit (in case you want some other button choices):https://amzn.to/2E4Gu0j $10 Acrylic (I used some 1/16" acrylic to make my stand, however, anything could be used): https://amzn.to/30eFyQf $12 Spacer screws (used to attach the board to the case): https://amzn.to/2Yq5tTn I originally wanted to 3D print a case but ended up running out of time. In the lab, we use the XYZ 3D printers which make for a good starting printer: https://amzn.to/2JAyasy After testing all components and doing some basic programming tests, we went onto EasyEDA (https://easyeda.com/) to make the custom PCB board. Once that was done we moved all of those components over to the PCB and soldered them into place. The following steps will go into detail for the build. The total price of this project depends a lot on what you decide to make for yourself, what components you already have and/or chose to use. Steps for The Desktop Device - a Customizable Desktop Assistant: Step 1: Breadboarding To begin, you want to start by wiring up all your components in a breadboard according to the circuit schematic as shown. You should wire up the screen exactly as shown in the schematic as those pins work with the screen's library, however, the buttons don't matter as much and you can do whatever you want. You don't have to use 4 buttons or any buttons at all, you could use a joystick if you really wanted to. Below are the pins that I used. Note that these are the pins that are used in programming and not the physical pins. For example, the CS pin is connected to pin 22, which is actually the third pin from the top right when viewed from the schematic. There are a few different versions of the ESP-32 out there so some of the pins may not be exactly the same as shown in this project. If yours is different try to find a pinout diagram for your version. ### Retro LED Strip Audio Visualizer In this post, we will talk about Retro-LED-Strip-Audio-Visualizer: As a musician and electrical engineering student, I love any project that intersects these two fields. I've seen some DIY audio visualizers (here, here, here, and here), but each had missed at least one of the two goals I established for myself: professional build quality and a relatively large display (a wimpy 8*8 LED matrix would not suffice here!). With some vintage flair, and sitting at 40" x 20", this audio visualizer accomplishes both of those goals. Apologies in advance for vertical photos. A lot of them were taken for social media. Retro LED Strip Audio Visualizer: Step 1: Parts List I had several of these parts lying around already. The links are purely for reference. Please don't buy unnecessarily expensive components. Electronics WS2811 60LEDS/m @ 5m, IP30 (Non-Waterproof), Addressable - These were cheaper then WS2812 at the time. You have some leeway here but make sure the dimensions are correct and that you can actually talk to the LEDs. Also, note that WS2811s are 12V while WS2812s are 5V. 9 x 3-Pin JST Connectors + ReceptaclesDC 12V 20A (240W) Power Supply - I initially planned on doing 2 LED strips, and wanted a blow-your-house-down speaker set. Each light strip is 90W in a worst-case scenario (I haven't measured to confirm), which left me ~60W for speakers + amplifier. The 15A option was only $4 less anyway. Power cord (3 Prong)Arduino Uno - I had an R3 lying around so I used that. You may be able to find a cheaper option from one of the knockoffs or another vendor. TRRS Breakout - For aux input L7805 5V Regulator - Any 5V regulator that accepts a 12V input will work. 330 nF, 100 nF capacitors - per L7805 datasheet2 x 10kR, 2 x 1kR, 2 x 100 nF capacitors - for audio input biasing Stereo Receiver - any vintage stereo receiver will work as long as it has aux input (3.5mm or RCA). I picked up a Panasonic RA6600 off craigslist for $15. I recommend checking Goodwill, Craigslist, and other thrift stores for similar.* Speakers - Not BT speakers. Just a speaker set. Pay attention to what impedance is compatible with your receiver. I found a set of 3 20W (=loud) speakers at Goodwill for $6, and that came with a "center" and two "front" speakers. Logitech BT Audio Adapter - this device can stream audio out to the stereo speakers and to your circuit RCA male to RCA male cableAux cord Hardware: 2x6 (8ft) - Not pressure treated. Should be ~$6 or less at HD or Lowe's 40% Light Transmission Acrylic - I ordered 18" x 24" x 1/8", and it was technically 17.75" x 23.5". Keep it in the wrapping when you go to laser cut. Wood Stain - You only need a small can. I used Minwax red mahogany and it came out very nice. I definitely recommend a dark tone. I originally tried provincial and it didn't look as nice. Lacquer - First off, check out this video by Steve Ramsey and decide for yourself what works best. I got a spray can of semi-gloss (no gloss was available) and honestly, it didn't do that much. But I also only did one coat due to time constraints. 40 x 1/2" Wood screws - I had round head available to me but I recommend using flat top if you can. I don't think that would interfere with the build quality but feel free to ask anyone more familiar with woodworking first. Scrap wood, gorilla glue, hot glue, solder, wire, and command strips (velcro style, 20 medium or 10 large) * I plan on building a soundbar to make this project entirely "from scratch," which will replace 9-13 above. I hope to update this instructable with that by the end of the summer. Step 2: Prototyping This section is not something you need to complete, but I do want to show what the project looked like as it went along. Here, I taped down LEDs in the snake pattern and was experimenting with light diffusion via trash bag layered over top of itself (I highly recommend that as an alternative to the acrylic if you are trying to cut costs. Though you'll have to attach it some different way). A 10x10 setup worked for me, but you may prefer 8x12 or 7x14. Feel free to experiment. Before I had my stereo, I found an amplifier and hooked it up in my breadboard, and before that, I played audio from my laptop to the circuit for audio analysis and simultaneously hit "play" on my phone to hear it. I'm a huge believer in measure twice, cut once. So whatever you do, follow that guide and you'll be set. Read Full Post ### Make a Bronze Infinity YouTube Play Button Subscriber Counter In this post we will discuss Make a Bronze Infinity YouTube Play Button Subscriber Counter: Sometimes when people reach different milestones on YouTube, they will create their own play button. I decided that I would love to do that too, and I also wanted to have a subscriber counter. So to accomplish both goals, I came up with this: an Infinity Play Button! The infinity has a double meaning here because it has the subscriber counter AND the play button mirror is also an infinity mirror. For the infinity mirror, I just used a regular LED strip controller. For the subscriber counter display, that's being controlled by an Arduino. I didn't create the code that I used here, but I found this video made by the person who did create the code. https://www.youtube.com/watch?v=bePgZIXHSkM Here is a video that I made where I updated their video: https://youtu.be/YBJOAiQ848c I have also made a video of this Instructable, and you can check that out here: https://youtu.be/YaTuyXnq8VI This was a pretty big project. Hopefully, I described the steps well, and it is very important to also refer to the pictures that I have added. Here is what I used for it: Tools for Make a Bronze Infinity YouTube Play Button Subscriber Counter: RulerSharpieRemovable, Double Sided TapeTin SnipsScrew Clamps2" Spring ClampsRubber/Plastic HammerDremelCutoff WheelCone Grinding StoneSanding DrumSanding BlockSand PaperDrill1/8" Drill Bit1/16" Drill BitCountersink BitSoldering IronSolderFileHot Glue GunHot Glue SticksHandheld Saw Parts: D1 Mini WiFi BoardX7219 Dot Matrix Module,RedMAX7219 Dot Matrix Module,BlueMAX7219 Dot Matrix Module,GreenRound MirrorAluminum Sheet MetalWood GlueE6000 GlueFlat Black PaintHammered Bronze PaintAddressable LED StripLED ConnectorsAddressable RGB LED Controller #1Addressable RGB LED Controller #25VDC Power SupplyPlexiglassMirror Film, GoldMirror Film, BronzePainters TapeAluminum Foil Tape16 Gauge Wire1" Square Dowel Screws Step 1: Make the Layout On my computer, I made a layout of how I wanted the play button to look and printed it out. I wanted a subscriber counter, and I used this LED matrix display for that. For the play button mirror, I used this 5 1/2 round mirror. On this sheet of copper colored aluminum, I marked all of my lines. The aluminum sheet is 12" x 14 1/2" and the final play button will be 8 1/2" x 11". I added alignment lines to help me center and align the play button emblem. After attaching it to the metal sheet, I traced around it. I used double-sided removable tape to help me hold it in place. I also drew the triangle in place, extending each of the lines. Read Full post ### Control Arduino Using Your Brain and OpenBCI GUI In this post, we will briefly discuss Control-Arduino-Using-Your-Brain-and-OpenBCI GUI: This tutorial shows you how to get started streaming data from the OpenBCI GUI's Focus Widget via Serial connection to an Arduino UNO Rev3. Specifically, this is designed for use in classroom settings for individuals who have little or no electronics experience. No "hacking" is involved! OpenBCI hardware and software are open source! Experienced makers have the option of building this project from scratch. Full Documentation: OpenBCI Docs on GitHub. Grade Level Recommendations and Unit Timeline: Middle School: 2-5 days High School: 1-5 days College: 1-4 days This includes the time it takes to complete this instructable and then expand the project using the Arduino and available hardware (~60 mins each day). Teachers should complete this instructable before sharing with students and also account for lab setup time before each lesson. Using just one OpenBCI board with a whole class: The teacher should complete this Instructable and then share with the whole class as a live demonstration, with a few students chosen at random to be the Connected User. Then, student groups can use the recordings in the computer lab with Arduino kits and the GUI in Playback Mode while taking turns using the OpenBCI board. Skills Addressed: Computer Science: PC to Arduino Serial CommunicationNGSS: Gather and synthesize information that sensory receptors respond to stimuli by sending messages to the brain for immediate behavior or storage as memories. MS-LS1-8NGSS: Use argument supported by evidence for how the body is a system of interacting subsystems composed of groups of cells. MS-LS1-3NGSS: Develop and use a model to illustrate the hierarchical organization of interacting systems that provide specific functions within multicellular organisms. HS-LS1-2 Control Arduino Using Your Brain and OpenBCI GUI Brief: Hardware: A computer that meets the GUI System RequirementsAn Arduino UNO($20), or other similar device A Ganglion($200) or Cyton($500) board The OpenBCI Headband Kit($200) or Ultracortex "Mark IV" EEG Headset($350 for Print-It-Yourself) Recommended: OpenBCI Classroom Bundle (5 kits) + Dedicated Support($2800) Software: The Arduino IDE(free) The example Arduino sketch (provided) The OpenBCI GUI(free) standalone app or Processing sketch Flexible Grouping: The Software Operator controls the computer and software. The Connected User is physically connected to an OpenBCI board. The Hardware Specialist helps make sure the Connected User is properly connected. The Recorder takes notes for the group and assists the Software Operator and Hardware Specialist. Helpful Background Skills: Arduino BasicsKnowledge of Arduino or C-based programming How to setup the OpenBCI Headband Kit with Cyton or Ganglion OpenBCI Getting Started Guides: Headband TutorialOpenBCI GUIGanglionCyton Here is a helpful webpage that describes the scientific method: Science Buddies - Steps of the Scientific Method Teachers: Start the lesson with a hook of your choice, and then ask students to write down one question on a piece of paper. This question must be directly related to the brain. Possible Questions: What is the brain? What does the brain do? How does the brain control my body? What makes my brain different from another person's brain? Can a computer read my thoughts if I connect my brain to the computer? How do we measure brain activity? What does EEG stand for? Read More ### Arduino RC Robot https://youtu.be/ytwDgwwSEc0 Description A durable, 3D printed, remote controlled Arduino based robot with several hundred meters range. A modular quick-connect motor scheme lets you rapidly prototype different robot designs without any tools. Perfect for robotics education for kids. Whats it all about? So you've just started learning Arduino, or maybe 3D printing and your ready to build something cool. You want to build something meaningful, and practical, but fun... You're ready to build the OmniBot. If the Arduino is the Swiss Army Knife of electronics, then the OmniBot is the Swiss Army Knife of robotics! The OmniBot is the result of a several month long project of Bolts and Bytes Maker Academy that aimed to design a versatile and easy to use remote controlled robotics kit. And now its all open source! The OmniBot is battery powered, can drive up to four DC motor channels, two servo motors, and has a remote controlled range of several hundred meters! And it all fits inside a sleek 3D printed case, running on, you guessed it, an Arduino Uno brain. Okay, but why? We really wanted to make it super easy for young kids to pick up some cardboard and glue and end up with a working custom robot. With traditional robot kits you might buy online, you're forced to deal with lots of messy jumper wires, writing your own code, and - oh yeah... you can almost never control them remotely. They just run the same code in a loop. With the OmniBot, you simply plug in a battery, plug in a motor, and tape it or glue it where you want, and - boom. robot. All the code we've written auto-magically works with the same controller you might use for a drone or RC plane. It's the perfect kit for rapid prototyping field ready robots. When you have finished building your OmniBot platform, you have only just begun. In ten short minutes you could go from a mission critical bomb defusing robot, to a Rocket-league style soccer bot, and that's what makes OmniBot powerful. So let's get started! Recommended Skill Levels: This projects includes some light soldering, it is fairly manageable for beginners. General understanding of Arduino and how to work in the Arduino IDE uploading sketches and adding libraries. No coding is required but advanced users can customize their code if desired. Some light hardware work with screwdriver and wire cutters/strippers. Adult supervision recommended for young kids. (The final product is suitable for use with all ages!) Supplies: Required Tools: Soldering iron and solder Allen wrench/key or hex head screwdriver Phillips head or flat head screwdriver (depending on the terminal blocks of the motor shield) Hot glue gun and hot glue sticks (not required but highly recommended!) Wire cutters (flush cutters are recommended as they can be used in other steps) Wire strippers Needle nose pliers (not required but it makes cleaning the 3D print much easier) Access to a 3D printer (if you don't have one, ask your local maker space, school, lab, or library!) A computer with the Arduino IDE software Bill of Materials: The following items and links were sourced from Amazon (all or most are Amazon Prime items) but it should be noted that most, if not all of these, can be found for much cheaper on websites like Banggood and AliExpress if your willing to wait a few weeks for shipping. This can actually cut the project cost in half if you look well enough. Arduino Uno Microcontroller (the type with the surface mount chip works better for this) Arduino Motor Shield V1 Turnigy Evo Transmitter (mode 2) (this one comes with the receiver but most receivers with iBus communication should work) Male and Female JST plugs (I highly recommend the type with silicone because they are more flexible) 13.5mm x 9mm Rocker Switch M3x6mm countersunk screws (only 6 screws are actually needed) 2S Lipo battery (this can be substituted with a non rechargeable battery back between 7 and 12 volts) 2S Lipo Charger (only required if using a lipo battery) PETG 3D printer filament (PLA can be used but PETG is more durable and heat resistant to hot glue) TT motors and wheels Servo motors (larger servo motors can be used as well) If you've got all your tools and parts then follow me! We've got robots to build... Step 1: 3D Printing Your Robot Chassis For this step you will need: A 3D printer with a minimum build volume of 4.5"X x 4.5"Y x 1.5"Z The good news is, I've already design it for you! The 3D STL files are all right below. But first, here are some notes. The print is three separate solid models, the Upped Section, the Lower Section, and the Battery Door. The Lower Section does require support materials, but only under the section where the switch will be installed. The Lower Section and Battery Door can be printed in one shot as a "print in place" model, meaning that you can pull it straight off the printer when its done and the door will work right away without installation. Some lower quality printers might struggle with the tolerances however and melt these two parts together so I've also included separate print files for each the Battery Door and Lower Section so you can print them individually and assemble them after. Step 2: Cleaning the 3D Print For this step you will need: A pair of needle nose pliers A hobby knife Carefully remove your print from the build plate. If you printed it all in one shot like I did, you may have to brush off some stringing between parts. Using a pair of pliers, pull out the support material by the hole where the switch will go. On some printers the first layer or two of the battery door may be fused with the lower section, if this is the case you can use a hobby knife to slice out the door. If the fusing is too bad, you may need to print the door and lower section separately and snap them together afterwards. Read more: Arduino RC Robot ### Low Cost Bioprinter The goal of this project is to develop a low-cost bioprinter to make bioprinting more accessible to research institutions. Currently, low-end bioprinters cost approximately $10,000 while high-end bioprinters cost approximately $170,000. In contrast, our printer can be built for approximately $375. Supplies: Parts: Ramps 1.4: https://www.amazon.com/HiLetgo-Control-Printer-Su... Arduino mega 2560: https://www.amazon.com/Elegoo-EL-CB-003-ATmega2560... Stepper motor drivers: https://www.amazon.com/BIQU-Compatible-Stepper-Ste... Additional stepper motor (optional) https://www.amazon.com/Stepper-Motor-Bipolar-64oz-... Maker beam 2 in X 1 in Maker beam attachment hardware M3 screws assorted sizes M3 nuts x2 8 mm threaded rod 8 mm nut 608 bearing Binder clip Filament Monoprice V2 https://www.monoprice.com/product?p_id=15365&gcli... Zip ties M3 heat set nuts 2mm width Tools: Drill bits of various sizes Hand Drill Drill press Hacksaw Soldering iron + solder Wire stripper Needle nose pliers Hex keys various sizes Lab supplies: Petri dishes ~70mm diameter 60 ml syringe with Luer-lock tip 10 ml syringe with Luer-lock tip Luer-lock fittings Tubing for fittings T Connector for tubing Centrifuge Centrifuge tubes 60ml Scale Weigh boats Autoclave Beakers Graduated cylinder 0.1M CaCl2 solution Agarose Alginate Methylcellulose Sucrose Software: Fusion 360 or Solidworks Arduino IDE Repetier Host Ultimaker Cura 4 Step 1: Selecting a 3D Printer We chose the Monoprice MP Select Mini 3D Printer V2 as the starting 3D printer. This printer was selected because of its low cost and high availability. Additionally, a highly accurate 3D model of the printer was already available which made design easier. This instructable will be tailored for this specific printer but a similar process can be used to convert other common FDM printers and CNC machines. High accuracy model: https://www.thingiverse.com/thing:2681912 Step 2: 3D Printing Before disassembly of the Monoprice printer, several parts need to be 3D printed for the modification of the 3D printer. There are versions of the paste extruders, one that requires epoxy and one that doesn't. The one that requires epoxy is more compact but more difficult to assemble. Step 3: Prepare Printer for Modification The front tower panel, bottom cover and the control panel should be removed. Once the bottom has been removed, disconnect all electronics from the control board and remove the control board. Step 4: Interchangeable Mount Body 1 and Body 14 each require two heat set nuts. Body 1 is mounted to the printer frame by the two M3 bolts hidden under the belt. The bolts can be revealed by removing the belt tensioner and pulling the belt to one side. Read more: Low Cost Bioprinter ### Motion Tracking Face https://youtu.be/Nqh3Ej8qfTU Meet Chartreuse! Chartreuse's face follows you when you walk by. When she sees you, her eyes turn yellow and she gets a happy expression in her eyes. As you walk away, her eyes change to blue and she sadly turns away. Chartreuse is powered by an Arduino Uno, two servos, and a stepper motor and a couple of addressable LEDs and constructed from a few pieces of 1/8" hardboard. Supplies: What you'll need Electronics: Arduino Uno Servo Stepper Motor Solid core wire Materials: ~20 square feet of 1/8" hardboard Wood Glue 1.5 ft 1.5 inch PVC 20 1/8" Inch Ball Bearings Small piece of fiber glass mesh (8"x 2") Tools: 3D printer Laser cutter Clamps to hold things together while drying Soldering iron Hot glue gun Step 1: Making the Model We started the process with a mask modeled by kongorilla on Thingverse. This can be found here. This mask is intended to be cut from paper or another flat, flexible material. This meant that we had to do some modification but at least had a starting point. Editing In Meshmixer, we got rid of the mouth, eyes, and the back edges of the mask using the drag and draw brushes. Then, in Fusion360, we added eye holes by converting the mesh to a BRep. Then extruding circles through it. We then scaled the whole model to change it to our desired dimensions. Slicer In Slicer (an extension for Fusion360) we choose a slice angle starting at the nose and going back. If you'd like, we've done all these steps for you and all the files are ready to go in the next step! However, if you have familiarity with Fusion360, Meshmixer, or another CAD software feel free to make your own face (or not?) for this project. The .stl file for the mask and the sliced .3dmk file are included. Step 2: Building the Face https://youtu.be/INWJgIU671w https://youtu.be/vNg5P4LgWs4 Laser cutting First, you'll need to laser cut the parts. The attached PDF has the plans for the 52 layers that make up the face. The red lines need to be raster (etched into the MDF) and the blue lines need to be vector (cut). We used a Epilog Legend 36 EXT (9000 Series) laser cutter for this project. This meant we cut our hardboard down to the bed size of 36" by 24". Cut your material down to whatever the bed size of the laser cutter you are using is. We found it cut best with the glossy side facing up. You will also need to cut two 2.25" diameter circles for the eyes. We used scrap 1/8" opaque acrylic but anything that can diffuse the LEDs will work fine! Glueing Once cut, we split the pieces into 5 sections (layers 1-10, 11-20, 21-30, 31-40, 40-52). If you etched them, these number are marked on the top of the hardboard. There is also engraved guide lines to help you line up the piece with the layer below it. Starting with the lowest layer, add glue to the top of it and carefully place the next layer on top. Repeat until you have assembled the 5 sections. Then, place them on top of each other with glue between, clamp, and dry overnight. The included video shows a step-by-step animation of how the mask is assembled as well as our time lapse of assembly. Finishing Next, we coated the inside with a thin layer of wood glue using a craft brush. This will prevent the hardboard from bowing out and serve the dual purpose of smoothing the inside. After the glue has dried, we glued the eye pieces in using hot glue. From the inside, we added a small amount of glue around the eye holes and place them in. Be careful to not get any glue on parts of the eyes visible from the front, as this will be visible once you add the LEDs. Finally, sand off the etched numbers from the top layer. (Or, if you thought ahead, remove the etching numbers prior to cutting!) Read more: Motion Tracking Face ### Steam Linked Display Shelf Back Story My brother has Funko POP figures that represent his characters that his friends play most often in video games. We thought that it would be cool if they had a display case that would have LEDs in it to represent their status on Steam. So with my previous experience with Arduino, Steam API, and woodworking, I said that I could probably figure something out. For anyone that does not know what Steam is, Steam is a digital distribution platform developed by Valve Corporation for purchasing and playing video games with a built-in communication system. Steam also has the ability to allow users to view what others are playing, if the person is on their computer, away, in game, etc, it even lets you play with them if you so choose. Features / Design Once we decided that we were going to make this project I sat down a started to write out some features that I knew that this would need to have. Wireless Wi-Fi setup/login like a Chromecast. Dimmer / on-off switch. Defused LEDs. Status LED modes. Zero upkeep after setup and build. POP figurines must sit on/in. Must not be power hungry. After deciding what the project needed to include me and my brother started to go over designs until we got what we have now. An Important Note The original design was a box with multiple levels. However, once we had built the two bases we thought that it would look better as one long shelf instead of a box with multiple levels. I am going to try my best to explain how we would have built it if we had started with the new design, so if you notice in some of the pictures that we have slightly different sized pieces this is the reason. Step 1: Materials Electronics NodeMCU V1.0 ESP8266 (Link) USB 2.0 A-Male to Micro B Cable (For programming) 22 Gauge Silicone Wire 10ft (Link) 1/8 inch Expandable Braided Sleeving 10ft (Link) Panel Mount DC Jack (Link) 5V 2 Amp DC Power Supply (Link) Project Box (Link) Potentiometer (Link) Solder (Just about any electrical solder will work) 22 AWG project wire (Link) LED Strip (Link) Project Wood (Home Depot See Pictures) 1 Oak .25" X 1.5" X 48" 1 Oak .5" X 1.5" X 48" 2 Oak .25" X 5.5" X 48" 1 Polycarbonate sheet 8" X 10" Note that a .5" X 5.5" X 48" board is shown in the pictures but is not used in the project. Assembly 2 Tubes of two-part epoxy (Home Depot)Wood Glue (Home Depot)Magnets .315" Dia X .118" Thk (Home Depot) (Optional)Ebony stain (Home Depot) (Optional)Spray Polyurethane (If stained)Painters tape Step 2: Tools These are the tools that we used. Table Saw Radial Arm Saw Clamps Belt Sander Bandsaw Hot glue gun Scissors Soldering iron Wire stripper Power drill Drill press Sand Paper Tape measure File Although we used these tools it does not mean that you have to use these exact tools. It would only help step by step if you are looking to directly replicate the project. For example, the bandsaw could be substituted for a jigsaw, a scroll saw, a hand saw, etc. Step 3: Building the Project Box First, drill a hole in the project box from whatever side you would like to be the front, this will be for the dimming potentiometer. We drilled this hole on the small side right in the middle. If you are using the potentiometer listed in the parts list the best drill we found to use for this was 17/64 (Picture 1). Secondly, drill a hole in the back for the wires that will be going to the shelf, when looking at the box from the front we put this hole in the back left, we found that 3/16 drill worked best for this but it was a tight fit. Next, drill a hole in the back for our dc power jack, we put this on the back right side. If you are using the power jack in the parts list the best drill for this was a 5/16. (Picture 2) After that, drill a hole in the back for the reset button (this exact button is not listed because we got it out of our Arduino box) we put this right next to the power jack. Before assembling the project box we filed off the tab on the potentiometer as we can tighten the potentiometer tight enough so we don't actually need it. Finally, put all of the parts in their respective holes and tighten them down. (Picture 3) Read more: Steam Linked Display Shelf ### Arduino Decoration There’s a lot of night lamps outside, but they can’t customize to your favorite color. So, this project is to make a night lamp that you can choose your favorite color. Step 1: Step One: Electronics Needed Here are the electronics you need to make the Decoration. 1. 2* Arduino buttons 6*6*5 mm Purchase here 2. 1* RGB LED 5mm Purchase here 3. Male to Male Breadboard Jumper Wire Purchase here 4. Male to Female Breadboard Jumper Wire Purchase here 5. Breadboard Purchase here 6. Arduino Leonardo Purchase here 7. USB to Micro USB Wire Purchase here 8. 1/4w Resistor 5% Purchase here 9. 1/4w Resistor 1% Purchase here 10. Potentiometer *3 Purchase here Step 2: Step Two: Other Materials Needed Paper box (I used a 16 * 14 * 11 cm box, but any box that is large enough to hold your Arduino and the circuits will be enough. Tape Knife Pen or Pencil Paper (A4) Step 3: Step Three: Coding There are two parts of the code. One part of the code is from the potentiometer to the RGB LED. The code works like this, when the potentiometer sends the signal or a number to Arduino, Arduino will send it to the RGB LED, and one of the colors will glow. This is why we need three potentiometers. The second part is from the buttons to the RGB LED to the second button. When I press the first button, it saves the current situation on the RGB LED, and then when I press the second button, the RGB LED will be back to the previous situation saved in Arduino. The code looks like this:

int _1_x = 0.0 ;
int _2_y = 0.0 ; int _3_z = 0.0 ;

void setup() { pinMode( 3 , INPUT); pinMode( 4 , INPUT); _1_x = 1.0 ;

_2_y = 1.0 ;

_3_z = 1.0 ;

}

void loop() { analogWrite(10 , ( analogRead( A0 ) / 4.0 )); analogWrite(11 , ( analogRead( A1 ) / 4.0 )); analogWrite(5 , ( analogRead( A2 ) / 4.0 )); if (digitalRead( 3 )) { _1_x = ( analogRead( A0 ) / 4.0 ) ; _2_y = ( analogRead( A1 ) / 4.0 ) ; _3_z = ( analogRead( A2 ) / 4.0 ) ; } if (digitalRead( 4 )) { analogWrite(10 , _1_x); analogWrite(11 , _2_y); analogWrite(5 , _3_z); } }

Step 4: Step Four: Assembling the Circuits Now, it is time to assemble the circuits. The circuits are as shown at the top. However, this is good before putting into the box. Once you've finished testing the circuits and check for mistakes, you should do a little more things before you put into the box. Step 5: Step Five: Assembling the Circuits to Put Into the Box This step is fairly easy. Basically, just drag all of the inputs and outputs out with wires so we can put it on the box. Once you’re finished with that, the circuits are assembled and it can basically work. Step 6: Step Six: Making This Box and Decoration After you’ve assembled the circuits, you can start making your box. The main usage of the box is to cover your circuits, make your buttons, LED, and potentiometer from moving around, and decorate to make it look nicer. I’m using a 16*14*11 cm box, but any box that is big enough to hold your Arduino and circuits will be enough. So, the procedure are as follows: I put all of my circuits into the box. I cut the holes for my LED, buttons, and potentiometer. How I put them is the potentiometer on the side, and the buttons and LED on the top of the box. I tape the LED, buttons, and potentiometer on the box to make it stable. I cut a small hole on the side of the box so I can charge my Arduino when I want to use it. I make sure the circuits are connected correctly and that nothing falls off. Sometimes, the circuits aren’t stable enough, so it may fall off. By checking all the circuits, it prevents short circuits that may be dangerous. Read more: Arduino Decoration ### 10 Million YouTube Subscribers Award LED PCB https://youtu.be/WhDgftYFQ5g Summary This PCB (Printed Circuit Board) resembles the YouTube Play Button award that is given out to creators for reaching certain milestones such as 100,000, 1 million, and 10 million subscribers. When the switch is turned on, the user can scroll through 5 different modes by pressing the button on the top left corner. The first mode leaves all the LED's OFF, the second is silver (100,000 subs), the third is gold (1 million subs), the fourth is a sparkling diamond effect (10 million subs), and the fifth, just to match the board color, is all red. The board is about 150mm x 100mm, it has holes in the corners so it could be mounted somewhere, however, I have not mounted it to anything. The board is currently powered by a 3.7-volt drone battery, I might change this so that I can just leave it plugged in and mount it somewhere and not have to worry about changing the battery as it only lasts about 30 minutes with the LEDs at full brightness. This board was built for a Special Topics Class at Berry College taught by Zane Cochran who had the idea of using images to design and inspire PCB builds. Components Unlike Slouchy Board and the Desktop Device that I built, I did not breadboard this circuit as it was just LED's, a switch, a button, and an ATTiny85 microcontroller. All of the components that I used (all the surface mounted stuff), except for the batteries, can be found on https://lcsc.com/ for super cheap and are listed below. We used a custom-built programmer (by Zane) to program the boards while they were already surface mounted on the board. Since those are not commercially available, you'd have to either build your own or use the ATTiny with mounted sockets and the USB programmer. Or you could program the ATTiny through an Arduino if you make the header pin holes large enough on the PCB for jumper wires (sort of as shown in the video linked at the end of this video). Surface mounted ATTiny85 Microcontroller C89852 ($2 each) ($27) USB Programmer ($11) ATTiny + IC sockets Button C86487 ($0.20 each) Header pins for power connection C86471 ($0.20 each) 10k Ohm resistor C99198 ($.08 for 100) RGB LED C114585 ($0.50 for 5, $3.70 for 50) 100 nF Capacitor C1590 ($0.29 for 50) Switch C128955 ($0.41 for 5) 4.7uF Capacitor C108344 (20 for $0.37) Drone battery and charger perfect for powering low voltage circuits($23) Tools/Software To create the PCB, you can go to EasyEDA and make a free account, You can reference my Slouchy Board or Desktop Device Instructables for help with EasyEDA as those both show how to use it. The PCB's range from $5-$10 for 5 and take about a week or two to ship from China to the US. Once you get your PCB from China and you have all your components ready, you will need to use Solder Paste to attach each individual component. I used MG Chemicals Leaded Solder Paste. (CAREFUL, THIS PRODUCT DOES HAVE LEAD IN IT. I think they also make some lead free solder paste) To program, the ATTiny85, use Arduino's Software but make sure that you have the board files downloaded if you have never programmed an ATTiny85. This video does a great job of explaining how to do that: Tutorial: Programming the Attiny 85 with an Arduino. Step 1: EasyEDA: Schematic On EasyEDA, start by creating a new project and make a new schematic. Make sure you place the components that I list below and connect them similar to how I have it on the schematic. On the left side, you can search the various libraries for the parts required and then place them in the schematic. For programming the Microcontroller while in the board, use a surface mounted ATTiny or a Through hole ATTIny. Surface mounted ATTiny85 Microcontroller (Go to the "libraries" on the left and search "C89852"), to make the connections for jumper wires go to EELib on the left and chose a 2x4 male header pin as shown in the image. This means you could temporarily solder jumpers in place to program the board via an Arduino. OR Socket mounted ATTiny85 (Go to the "libraries" on the left and search "Attiny85-20PU THT" by AutogolazzoJr) this will place the footprint of the socket on the board which you can then solder in. This allows you to move the controller back and forth but means you have to have that USB controller which is quite pricey. place all of the following (1x on the back) Header pins for power connection (Go to the "libraries" on the left and search "C86471") (1x with button) 10k Ohm resistor (Go to the "libraries" on the left and search "C99198") (However many you want)RGB LED (Go to the "libraries" on the left and search "C114585") (One per LED)100 nF Capacitor (Go to the "libraries" on the left and search "C1590") (1x) Switch (Go to the "libraries" on the left and search "C128955") (1x) 4.7uF Capacitor (Go to the "libraries" on the left and search "C108344") Place this capacitor near the power header pins but make sure it is on the front, you can only surface solder on one side. (Otherwise, things fall off when you heat up the board) Once you have all the components placed, connect them to the correct pins as well as the GDN and VCC connections. You connect them by using the wiring tool and placing the GND & VCC symbols. Then once you have properly connected all the wires, you can click the convert to PCB button. Step 2: EasyEDA: PCB Design Before you get to the PCB environment use Inkscape or some other software that you can use to create DXF files and make an outline of your chosen shape. Once you have a DXF file of your shapes outline that has been sized to the correct units (150mmx100mm for example) create a separate file that contains what will be drawn on the board, for me it was just the triangle of the play button. When you start in the PCB environment, you'll see a bunch of layers and numbers on the right. Change your units to millimeters or whatever you want to use and change the snap size (snap size is basically at what interval you can place things on the grid) to something convenient. I made mine 10mm since I wanted my board outline to be easily placed at (0, 0). Start by editing the board outline layer (click the color and a pencil should appear) and import the outline DXF file. Once you have this, edit your top layer and start placing the components on the board how you want them by dragging them onto the outline. Then once the components are placed, connect all blue lines with the wire tool, unless they are connected to GND or VCC. The GND and VCC connections connect directly to the board and don't need to be isolated via the wires. Once all non-VCC and GND connections are wired together, you can use the Copper area tool to make the last connections. Do this once on the top layer and once on the bottom layer. Make sure that you change one of the copper areas to VCC in the properties tab, I usually make the top layer GND and the bottom layer VCC. Once you have that done, the board should look complete and you can zoom in to see where GND connects to the board. At this point, you want to check for DRC Errors by refreshing the DRC Errors under the Design Manager tab on the far left. If there are no errors, you are good to go and order your board. One last important thing you need to do if you are going the jumper wire route with Surface Mounted ATTiny is editing the holes of the header pin connections. Click on the 2x4 header pin connection, go to the right under properties and change the hole (Diameter) to 1mm. I think this should do if you solder the wires in place, make sure you do this for each hole. To order your board, click the button in the top ribbon with a G and right facing arrow to export your Gerber file. This will take you directly to where you purchase your boards, there are lots of options for different colors and finishes which will affect the price of the board, for PCB thickness, I think 1.6 is what we usually do. If you want to double check that your components fit, you can export a PNG image of your board and then push your components through the paper to see that the prongs all fit. Don't worry about scaling it, you should be able to just print it out. (Edit) I have added the Gerber file if you would like to use it. Read more: 10 Million YouTube Subscribers Award LED PCB ### Key Safe https://youtu.be/NLhxGl8CpGc During weekdays, I seldom bring my key out, but this causes difficulty when my mother left the house. By having no other choices, my mom has to leave the key inside the cabinet beside the door, which has no guarantee of whether the key is safe or not. By having this key lock, the one who is leaving the house can left the key inside this box to prevent others from stealing the key without any protection. Inasmuch as my mom will either be home before dinner or after dinner, I will need to know whether I need to find something to eat or not. This is the reason why the lock prints “Get Some Food”. Step 1: Prepare the Materials Arduino Leonardo (Arduino) Matrix Keypad 4x4 (Amazon) LCD 16x2 (Amazon) Micro Arduino Servo Motor SG90 (Amazon) Jumper Wires Male to Female (Amazon) Jumper Wires Male to Male (Amazon) Laser Cut 3D Printed Case x1 (15x20x12cm) Tape / Clay Wood Glue Charger Breadboard / Welding Gun Step 2: Code Code 1. Download 4 system from the library. 2. Make sure to declare the servo pin as 4 (any number except 2 or 3: both of them will not work if LCD occupies SDA and SCL). 3. Different rows and columns belong to different pins, so make sure to declare the correct one. 4. Set up own passcode for the lock. 5. “resetLocker” means when the system turns back to origin: LCD prints “Get Some Food” and “Pin”, and the servo turns to 40 degrees, which locks the box (the degree depends on different servo or the position of the servo). 6. “unlockdoor” works if the user enters the correct password, making the servo to turn to 110 degree (open) and the LCD print “pass”. In the other hand, the LCD will print “Wrong! Try Again” if the passcode is incorrect. 7. By pressing “*”, users can clear the password they entered; by pressing “#”, the machine can check for the passcode. Step 3: The Circuit 1. Plug in all the wires in the pins declared for the coding part. 2. Be aware of the positive and negative electrode or else the components might break (positive electrode: 5V, negative electrode: GND). 3. If the breadboard occupies a large space, use a welding gun solder to connect the wires together. In order to let the circuit operate, make sure the wires are not burned out, and the solder surrounds the wires (Tips for welding: Use the welding gun to heat the wires, put in the solder to let it melt until the liquid surrounds the wires, then remove the welding gun and the solder). 4. Using a breadboard: pin 6-13 should be the keypad, pin 4 is for servo, LCD’s SCL and SDA connect to the two pins on the left. The positive and negative electrode of both servo and LCD should be in the positive and negative part of the breadboard, then use two other wires to connect the holes of the breadboard to 5V and GND. 5. Using a welding gun: pin 6-13 should be the keypad, pin 4 is for servo, LCD’s SCL and SDA connect to the two pins on the left. The negative electrode of both the servo and LCD should be in the two holes of GND, but there is only one 5V hole, which means the positive electrode of both the servo and LCD should be together using soldering and them connect both of the wires to the 5V wire. Read more: Key Safe ### Iron Man's Arc Reactor That Pulses With Your Heart Beat https://youtu.be/bnX99E5VdHI There are lot of DIY arc reactors out there that look pretty cool. Some look realistic too. But why build something that just looks like that thing and does not do anything. Well, this arc reactor is not going to protect your heart using electromagnets (of course not) but will surely look cool when it beats with your heart. I mean literally, the LEDs in it will pulse with your heart beat. It might look (in the video) like the arc reactor is just blinking, but it's actually responding to my heartbeat since the pulse sensor is attached to my finger. Before I begin, please consider voting this project for the fandom contest. Thank you. Supplies: Sunboard (PVC board) https://www.amazon.com/Expanded-PVC-Sheet-Lightwei... Acrylicsheet Blackpaint (poster/acrylic) Nodemcu(esp8266 microcontroller) or an Arduino nano https://www.amazon.com/ESP8266-microcontroller-Nod... 3.7vLi ion / Li-po secondary battery https://www.banggood.in/3_7V-650mAh-JST-Plug-Recha... Liion battery charging module https://www.amazon.com/McIgIcM-Lithium-Charging-Pr... LEDs(LED strip is a better option) Magnetwires Solderingiron and solder Sandpaper Boardcutter (or any standard paper cutter) Step 1: Design The whole thing can be done in a jiffy if you have a 3D printer. But I didn't have one, so sun board to the rescue! First, we need to design and cut out the arc reactor case from sun board.You can look at the images and cut it accordingly or get a print out of the arc reactor shape from the PDF and do the cutting. Cutting a sun board isn't a hard task. All you need to do is run your cutter multiple times and the cut should be done. It's not a hard task but is a time consuming one. So, make sure you stay patient till all the cuts are made. Don't worry if the lines are visible after cutting the board, because we are going to paint it later. Make the side walls according to your required height. To keep it simple, the total height can be the sum of height of the node mcu/Arduino nano + thickness of battery + a few millimetres extra for wires to run through. The back can be made by tracing the borders of the front. There you go, you have an arc reactor, well, almost. Step 2: Code It If you're not much interested in coding, you're in luck. The code to make it work just as we want already exists in the pulse sensor library. So hurray! We can save a lot of time here. First of all, we have to download the pulse sensor library in the Arduino IDE. Fire up the IDE (I mean open the Arduino IDE in your pc) and click on sketch -> include library -> manage libraries. Now in the text box type "PulseSensor playground" and you'll find it with an option to install. Install the latest version. Now for the code. Click on file -> examples and scroll to the bottom to find pulseSensor playground. Click on it to find various pulse sensor example codes. From the list click on "pulseSensor BPM" if you're using Arduino or "pulseSensor BPM alternative" if you're using node mcu. Now all you have to do I upload the code. Great! One thing to note. Towards the beginning of the code you'll find pulse_blink=13 and pulse_fade=5. This means an led connected to pin 13 will blink with heartbeat and an led connected to pin 5 will fade with heartbeat. We need to connect two LEDs to each in parallel. In case you're using node mcu pin 13 and pin 5 are pins D7 and D1 respectively. That's all for the coding part. Cool! Let's move on. Step 3: A Little Here-and-there I cut out a small compartment in the back wall to make place for the battery. Then, for the front diffusion system, I cut a triangular shape from a piece of acrylic and used a sand paper to scratch on its surface several times to make it semi transparent. It is a time consuming and boring process though. You can also buy semi transparent acrylic directly, instead of manually making it semi transparent. Before sticking it to the front, I painted it black with poster colours. The inside is not necessary to be painted because the white colour of the acrylic reflects light and will result in a brighter and more evenly lit interior. The acrylic can now be stuck to the front from behind. Read more: Iron Man's Arc Reactor That Pulses With Your Heart Beat ### Secure IOT With AWS and Hornbill ESP32 Using Arduino. Security of connected devices is of paramount concern. There are several possible ways to make the devices secure. One of the most essential and widely used options is to use end to end encryption. The widely used Transport Layer Security (TLS) version 1.2 is the latest standard used on web for secure connections including banking. There are very few micro-controller based solutions that implement TLS 1.2 due to lack of resources. ESP32 is one of the most affordable options out there. So let’s look at securely connecting Hornbill ESP32 Dev board to Amazon web services (AWS) IOT. We will start with configuring AWS account, setting up the thing, generating the security certificates, testing with a MQTT desktop client and then communicating with the hardware. You'll need an ESP32 Dev board to accomplish this. We are running a campaign for the most affordable and feature rich ESP32 dev tools called Hornbill. Get one from the campaign here: https://www.crowdsupply.com/explore-embedded/hornbill Step 1: AWS User Account : For using the AWS services you need to have a user account and login using the AWS Login link Existing users can directly login and directly jump to next. New users should register first and link the credit card for payments. Basic plan is free for first Year, other plans are chargeable. Step 2: Creating a New Thing : After Login, click on Signin To Console to go to AWS dashboard. Now type AWS IOT and Select the AWS IOT (Connect Devices to Cloud) from drop down as shown below. Read more: Secure IOT With AWS and Hornbill ESP32 Using Arduino. ### ISS Globe- Blinks When the ISS Passes Overhead https://youtu.be/CFkH0GL3vdY Howdy! If you are interested in astronomy and always look up at the stars and not down at your feet, you'll surely know the ISS. The ISS or The International Space Station revolves around the earth around 16 times per day. Being an aerospace engineering student, I'm very keen about things like the ISS. If you're too, then I bet you'll love this project. Meet ISS Globe - a smart lamp that can notify you whenever the ISS is passing overhead. Basically, it's a small (and cute looking) hemispherical lamp that gives a mild glow when connected to a power supply. If the ISS is passing overhead, the lamp starts blinking for about 30 seconds (you can customise the duration). It's also very pleasant to look at when it just sits on the table like any other mood lamp. Sounds complicated to build, but nope, it's a very simple microcontroller project. No soldering, no glue gun, just a microcontroller(esp8266) and an LED for the main part. You can finish the complete build in just an hour! The video shows how it behaves, note that the blinking is just a demo. Although I have witnessed a flyby and blinking of the globe before writing this instructable. So what's the wait for? Let's get making! Supplies: NodeMcu WiFi development board https://www.amazon.com/AZDelivery-Nodemcu-Module-E... An LED Cardboard Female- Female jumpers (optional) https://www.amazon.com/LANDZO-Multicolored-Breadbo... Cellophane tape Adhesive Besides these, you'll have to install two free apps- Blynk and ifttt Playstore link: Blynk: https://play.google.com/store/apps/details?id=cc.b... IFTTT: https://play.google.com/store/apps/details?id=com.... Appstore link: IFTTT: https://itunes.apple.com/us/app/ifttt/id660944635?... Blynk: https://itunes.apple.com/us/app/blynk-iot-for-ardu... Step 1: Build the Structure To make the globe, I used the top portion of an old LED light. It can disperse the light very well. Popping it out of the light is simple, use a screw driver to push it out of the bottom plastic part. To make the base of the lamp, I cut a strip from black cardboard and rolled it into a cylinder. The height of the cylinder (thickness of the strip) should be a tiny bit more than the height of the NodeMcu when it is standing on its pins. I cut a circle with diameter equal to the diameter of the top globe from the cardboard and stuck the cylinder on it with adhesive. Great! The building process is complete. Now let's move to the electronics. Step 2: Upload the Code The heart of the ISS globe is the NodeMcu, and we need to code it to make it work as we want it to. You can find two different versions of the code in this step. One is the blink version and the other is power saving version. Let me explain what each one does. Blink version: When you power the NodeMcu, the led will always remain on. When the space station passes overhead, the led will start blinking for about 30 seconds. After that, it'll again glow continuously. Power saving version: The LED will remain off even when you power up the NodeMcu. When the space station passes overhead, the led will turn on for 30 seconds and then turn off. While the second one saves power since the led is normally off, I would suggest you to still use the first one because the globe looks very beautiful when it glows. Anyway a single led will not consume so much power that it'll alter your electricity bill. I shall do a code walkthrough at the end of the instructable. So if you're interested, you can refer it to understand the working. After you've decided which one to use, download it and open it in the Arduino IDE. Make sure you have the blynk and node mcu libraries installed. Then, replace the part of the code saying "ssid" with your WiFi name and "password" with the WiFi password. You also need to replace the part saying "Auth" which I'll explain in the coming steps. After doing these modifications, you can upload the code to your NodeMcu. Step 3: A Little Bit of Electronics This step is an easy one. I'll keep it short. Connect pin D1 of the NodeMcu to D7. Connect the positive electrode of the LED to D5 and negative electrode to GND of the NodeMcu. I sanded the top of the led to disperse the light and bent the pins in L shape. I then stuck the LED to the bottom of the NodeMcu so that it doesn't occupy much space. Now the NodeMcu can be placed upside down in the cardboard bottom we built earlier and the hemisphere can be stuck on top. Yify! The major part of the build is done! Now the only things left are configuring the two downloaded apps. Go ahead and download them if you haven't because I shall be explaining how to configure them in the next steps with screenshots. So it'll be easier for you if you follow along. Basically, what we are going to do is create a button on blynk that triggers a specific pin (say D1) of the Nodemcu. We then create an IFTTT applet that connects to blynk and triggers that button when the ISS passes over our location. All that the code does is blinks the LED for 30 seconds if that particular pin (D1 in this case) is triggered. Read more: ISS Globe- Blinks When the ISS Passes Overhead ### Betta Fish Feeder I'm setting up a betta fish tank and wanted to make an automatic fish feeder so he never misses a meal. I've seen other DIY fish feeders that just shake a container but I wanted to be able to precisely control how much food he'll get. Hope the new fishy likes it! Follow my other projects on Instagram @Trevor_DIY Purchasing through the following affiliate links supports me as a maker :) Supplies: Arduino UNO Arduino power adapter (or USB adapter) Motor driver and stepper motor (28BYJ-48) 3D printed wheel 3D printed housing Hot glue Fish tank Betta fish pellets Step 1: Wire Up the Motor Driver and Stepper Motor Yes, to run a stepper motor with Arduino, you MUST have a motor driver! There's heaps of info online about this but the quick and dirty reason is because the Arduino output pins are not able to supply the stepper with enough current (amps) to get the coils in the stepper to engage. I chose this stepper and motor driver because it can work off 5V which the Arduino has an output for. Plug the stepper into the motor driver with the white connector. Connect the Arduino output pins 8, 9, 10, 11 to the motor driver input pins 1N1, 1N2, 1N3, 1N4 respectively. Connect the Arduino power pins GND and 5V to the motor driver power pins - and + respectively. Connect the Arduino USB port to your computer and start the Arduino software. Step 2: Feeding Mechanism I used Autodesk Inventor to design the 2 parts to be 3D printed. The “Turn_Table” has 14 wells for fish pellets which means I can feed my fish twice a day for a week. The motor rotates the “Turn_Table” over the “Plate” which pushes the pellets forward until one well is dumped through the hole in the “Plate”. It's pretty similar to how a gumball machine works! Step 3: Program the Arduino This code is really simple since I am using the Arduino stepper.h library. The goal is to have the stepper rotate the turn table by one well so it dumps the next set of food into the tank. I’ve commented out the code so the details are below. Read more: Betta Fish Feeder ### Cat Whisker Sensory Extension Wearable (2.0) This project is a continuation and reimagining of my former colleague's (metaterra) "Whisker Sensory Extension Wearable". The purpose of this project was to focus on the creation of novel, computationally-enriched “sensory extensions” that allow for augmented-sensing of the natural world. My major effort with this project was devoted to the fabrication and implementation of sensory augmentations that will extend a sense through sensors and respond with a tactile output for the user. The intent is to enable anyone to fabricate their own sensory extensions, and thusly map intrinsically human/animal senses onto hardware. Effectively extending our senses in new and exciting ways that will lead to a better understanding of how our brain is able to adapt to new external senses. This material is based upon work supported by the National Science Foundation under Grant No. 1736051. The project was developed in the Lab for Playful Computation and Craft Tech Lab at the University of Colorado Boulder. With this project, I wanted to take the previous whisker sensory extension wearable and make it lighter, more cost-effective, as well as easier to construct. Here's an overview of the different components and their functions: - Two sets of custom built flex sensor whisker devices (total of 4, 2 per side) receive tactile information (bend, flex, etc.) from objects in the user's immediate environment. The initial voltage/resistance information received by each sensor is then converted to bend angle information (e.g., a bend angle of 10 degrees). This bend angle information is subsequently converted to proportional pulse width modulation output and sent to corresponding vibration motors on the user's forehead. - Each whisker flex sensor is attached to a 1" ProtoBoard and connected to an Arduino UNO that does the transducing/converting. - Four vibration motors supply tactile stimuli to the user's forehead. Each motor used correlates to one whisker, the vibration motor's intensity is based on a threshold that will be set based off of the whisker sensor. Supplies: 14" long, 0.08" wide, 0.03" thick polystyrene strip 4" unidirectional bend/flex sensorSugru JST plugs Vibration motors Hard headbands ProtoBoard - Square 1" A wire kit (I recommend silicone insulation) NOTE: you'll be using around 2-3 feet of wire for each connection 1/16" thick clear acrylic or cardboard Heat shrink tubing Liquid Nails 47k resistors NITECORE or other type of headband Velcro Step 1: Whisker Assembly (Disclaimer! This is taken directly from the previous instructable.) It took me a while to develop a whisker sensor apparatus that was flexible enough to mimic real whiskers, yet rigid enough to consistently return to a straight, unbent position. I ended up using a 4" unidirectional bend/flex sensor from Flexpoint Sensor Systems (See figure 1). A JST plug is soldered to the legs of the sensor, then a 14" long, 0.08" wide, 0.03" thick polystyrene strip (I procured mine at a local hardware store) is silicone glue-adhered to the sensor, heat shrink is applied, and a protective coating of Sugru is molded around the entire base of the whisker unit. Here are the detailed instructions: - Take the plug end of the 3-pin JST connector and remove the center wire (See figures 2-4) - Snip the plug wires so you have ~1.5 cm of wire remaining, then strip and solder these leads to the sensor pins (remembering the plug/sensor orientation). I used heat shrink to provide insulation (See figures 5, 6) - Mount the polystyrene strip to the sensor with some sort of flexible adhesive (I used Liquid Nails silicone glue). Make sure to secure the strip to the sensor well (See figures 7, 8) - Take your Sugru (I used a single 5g pack) and mold it around the base of the sensor/strip/plug making sure to encase all of these components. Also, be sure to apply the Sugru high enough to fully secure the strip, but not too high as to restrict the sensor's ease of movement/bend. Take your time. You'll have at least 30-45 minutes until the Sugru begins to harden. Before you let dry, make sure that your plug fits properly into the receptacle side of the JST connector (See figures 9-13) - Lastly, I adhered labels to the whisker apparatus. Side (L/R) and number position (1-4) were used (See figures 14, 15) - Make 3 more (or whatever number of whiskers you desire). Be sure to create each whisker in the same way. This will help with sensor calibration later. Step 2: Whisker Mount Assembly Now that the whisker flex sensors are complete, we can now mount them onto the cheek piece (figure 1). Metaterra designed a curved arm with a disc for mounting, he did so using Adobe Illustrator and used 1/16" thick clear acrylic as the material. NOTE: If a laser cutter isn't readily available you could try to make the mounts out of cardboard or other easily cut material, just print out the PDF and cut around the tracing while it's overlayed on cardboard. After laser cutting, drill four holes into the acrylic, then weave the JST plugs through the holes (figure 1, 3, and 4), then embed the whiskers into the disc part of the mount using Sugru. Here are the detailed instructions: - Open the whisker arm vector file (PDF). The material used for this instructable is 1/16" clear acrylic and cut with a laser cutter. - Drill four holes into the cheek mount. Feel free to play around with the hole size as well as the distance to make the whiskers as close or far away as you want. - Weave the 2-pin JST plug through the holes. make sure that the sides with the opening are facing away from each other. - Make sure your whiskers ports are located where you want them to be. Use Sugru and mold the JST plugs in place on the disc portion of the piece (this took me around four Sugru packets). With Sugru you'll have around 30 minutes of mold time, so take your time and make sure the whiskers won't overlap when plugged in, and that the JST plugs are oriented where you want them. Once you're happy with the placement, let the Sugru dry for a day. - Reference figure 9 and 10 for this step, also note that on my design: white = 3.3V, black = GND, and red is the analog pin. Solder the two ends of the JST plug onto one side of the 1' ProtoBoard, then repeat with the other whisker. Create a voltage divider using my design or change the layout (you can also look at SparkFun's flex sensor hookup guide). - To attach the cheek pieces onto the headband, two screws/bolts are used to secure the arm to the headband (figure 11). Step 3: Vibration Motor Integration, Headband, & Battery Setup Connecting the vibration motors is fairly straight forward, the red cable will connect to a digital PWM pin on the Arduino and the blue will connect to GND. The vibration motors are attached to a NITECORE headband using velcro, the placement is based on the whisker it's tied to, the outer vibration motors are tied to the front whiskers and the inner vibration motors are tied to the back whiskers (Figure 6). - Solder wire to each vibration motor's ends, apply heat shrink to each connection, then apply heat shrink to the vibration motor cord as well as the newly heat shrunk cables (Figure 2), repeat 3 times. Adhere a velcro disc (hook side) to the back of the motor. Repeat 3 times. - Cut one strip of velcro so that the collection of motors wires can be bound together and velcroed to the front of the NITECORE headband (See figure 5). Adhere (I used super glue) the strip to the inner-front of the headband and velcro the motors onto the strip in the same orientation as you placed the whisker ports on the cheek plate (Figure 7) - Use a clip or zip tie to connect the vibration motor cords, this will help protect the vibration motors from being pulled/broken (Figure 7). Step 4: Microprocessor and Connecting It All to an Arduino All vibration motors and whiskers will connect to an Arduino UNO. You will need an additional prototyping board that will allow for you to solder 9 GND cables and 4 3.3V cables. You will also most likely need a dupoint connector kit to add pins and housing to the cables that need to be plugged directly into the Arduino. The vibration motor pin wires (red cable) connect to the Arduino digital pins: 3,9,10,11 (These pins were chosen because they allow for PWM). The vibration motor GND wires (black or white) will be soldered onto the prototyping board. The whisker pins (red cable) will connect to the Arduino analog pins: A0, A1, A2, A3. The whisker VCC cables (white cable) and ground cables (black) will be soldered onto the prototyping board. Read more: Cat Whisker Sensory Extension Wearable (2.0) ### How to Make an Arduino Weather Station With DHT11 Temperature and Humidity Sensor Recently I started playing around with DHT11 Temperature and Humidity sensor, at that time around, I had an idea to make a small yet effective Weather Station, so in this project inscructable, we will use the DHT11 sensor from the previous tutorial and turn it into mini weather station for our desk, so follow up this tutorial to build this awesome Weather Station for yourself! Supplies: DHT 11 Sensor 16X2 I2C LCD Display Arduino Nano 3D Printed Parts ( attached in further Steps ) PCB board / Bread Board ( files attached in further steps ) (OPTIONAL) Cardboard (OPTIONAL) Hotglue Gun (OPTIONAL) Scissor/ Cutter Recently I started playing around with DHT11 Temperature and Humidity sensor, at that time around, I had an idea to make a small yet effective Weather Station, so in this project inscructable, we will use the DHT11 sensor from the previous tutorial and turn it into mini weather station for our desk, so follow up this tutorial to build this awesome Weather Station for yourself! Supplies: DHT 11 Sensor 16X2 I2C LCD Display Arduino Nano 3D Printed Parts ( attached in further Steps ) PCB board / Bread Board ( files attached in further steps ) (OPTIONAL) Cardboard (OPTIONAL) Hotglue Gun (OPTIONAL) Scissor/ Cutter Step 1: Watch the Video! https://youtu.be/pHEFIHh1QLs Step 2: Brush Up the Basics! in this project, we will use 3 things, so we need to Brush up our Basics on these 3 things 1. Arduino microcontroller. i have previously covered the very basics of Arduino Micro controllers in a video, please go through it to understand the very basics of Arduino Boards. https://youtu.be/3IVNv-d7FDo 2. LCD we will be using i2c lcd in this project, to understand its basics and working, lets refer this video of mine, which explains very basics of writing i2c code in easy steps. https://youtu.be/YgF1ZgCP2Nw 3. DHT 11 Sensor DHT 11 sensor is a Temperature and Humidity sensing module, which uses NTC - i.e. negative temperature coefficient to convert the temperature into equivalent resistance change. watch the following video for more detailed Tutorial and Working of DHT11 Sensor. https://youtu.be/zFGZtV22-Yc Step 3: Build the Circuit! for this project, we are using an i2c lcd for display and DHT 11 sensor, along with Arduino Nano, so complete this circuit, i first designed and created a PCB design according to simple connections as shown in attached pictures, using a free software tool called "Easy EDA " but i could not order the PCB due to time constrains, so i rather used a breadboard, and connected the following pins to arduino, but if you want to order the PCB, you can use the following gerber files to order the pcb / make it for yourself DHT11 connections GND - GND of arduino Data - D2 pin of arduino VCC - D3 pin of arduino ( i used pin D3 of arduino to create a virtual Vcc pin, by sending digital HIGH from code to power DHT11 ) LCD connections VCC - 5V of arduino GND- GND of arduino SDA - A4 of arduino SCL - A5 of arduino Read more: How to Make an Arduino Weather Station With DHT11 Temperature and Humidity Sensor ### Alexa Controlled Dog Feeder This is our dog Bailey. She's part Border Collie and Australian Cattle Dog so sometimes she's smarter than her own good, especially when it comes to telling time and knowing when she should be eating dinner. Typically, we try to feed her around 6 PM but this isn't always easy if we're away from home. The Alexa Controlled Dog Feeder was created as the perfect solution to feeding Bailey while we're away from home to make sure she doesn't get restless and can still keep to her schedule. The code is based on this project from Bob at I Like to Make Stuff which takes care of the base code for communicating with an Alexa device. The nice thing about using Alexa as the main communication system is that it can be controlled using the Alexa app on your smartphone, eliminating the need for any complex servers or advanced coding. The supply list is relatively short and the entire project itself can probably be finished in an afternoon once everything is collected. If you like what you see then please vote for me in the Pet Contest! I hope you find this Instructable helpful and let me know if you have any questions following along. Step 1: The Design I already made Bailey a small food stand that's a miniature version of our dining table for her food and water bowl to rest on. To optimize space I wanted the feeder to fit on this food stand and only hold a few servings of her food. The feeder is mainly supposed to be used for the small number of occasions when we're not home so I don't need it to fit a lot of food (just a few servings). If this doesn't fit your needs then don't worry as the dimensions can be scaled up or down pretty easily. The electronics will stay the same and you can adjust your feeder structure around them to fit your needs. The structure itself is made up of two main chambers: one for the food and one for the electronics. The food will drop down from the containment area and into a PVC pipe. The PVC pipe is inside the electronics containment area which houses two PVC T-pipes with a motor and 3D printed auger running through the pipes. Once the food drops into the first PVC pipe it'll be moved linearly by the auger until it drops out the second PVC pipe and down into the bowl. Upon testing the auger I've noticed it jams occasionally and causes the motor to stall. In future versions I plan on looking at this mechanism further to minimize this from happening. Again, the nice thing about this project is the main guts (i.e. electronics) can be adapted easily for whatever food delivery mechanism you decide on. I chose to make the structure itself out of 1/2" plywood I had lying around. The pieces are assembled using a mix of wood glue and pocket hole screws to make sure they're secure. I also chose to use a leftover piece of acrylic for the top to make it easy to fill the food back up and see how much food is left. Step 2: Materials Most of the materials can be purchased from your local hardware store and Amazon for cheap. The exception for this is the PVC pipe supports that are 3D printed, however you could get creative with pipe mounts and end caps to avoid this. The PVC pipes also need to be cut down so they're 2.75" long in order to fit within the structure. Materials Used: 1. 1/2" Plywood 2. 1/8" Acrylic 3. M8 Threaded Rod (6.5") and Nuts (if needed to secure Auger to Rod) 4. 2" PVC T-pipes 5. NEMA 17 Motor and Bracket 6. 6.35mm to 8mm Coupler 7. Arduino UNO 8. Node MCU 9. Stepper Motor Driver 10. Jumper Wires 11. Pocket Holes Screws 12. Wood Glue 13. Arduino Power Supply (9V-12V) Tools Used: - Circular Saw - 3D Printer - Pocket Hole Jig - Soldering Iron (optional, but helpful) - Heat Shrink Tubing or Electrical Tape - Hot Glue Gun Read more: Alexa Controlled Dog Feeder ### Crocodile Solar Pool Sensor This instructable shows how to build a rather special pool sensor measuring the pool temperature and transmitting it via WiFi to Blynk App and to a MQTT broker. I call it the "Crocodile Solar Pool Sensor".It uses the Arduino programming environment and an ESP8266 board (Wemos D1 mini pro). What's so special about this project? The look is just great Fully independent from power sources (solar panel feeds the LiPo battery) Low power ESP8266 WiFi connected sensor Rather high precision temperature sensor Data transmission of temp and voltage to Blynk APP for your mobile phone Sends also a "last updated" timestamp to Blynk APP Data transmission of temp and voltage to a MQTT broker Celsius and Fahrenheit switchable Can be reprogrammed Your skill level: intermediate to experienced Supplies: For this build you will need to know how work with: Arduino IDE (programming environment) a soldering iron a drill a sharp knife epoxy glue hot glue industrial spray foam spray color Step 1: Components Needed These things are needed to build this nice pool sensor: The crocodile head (foamed plastic) found here: Amazon: Crocodile Head ESP8266 Wemos D1 mini pro: (Aliexpress) Solar Panel 0.25W 45x45mm: (Aliexpress) 3.7V 1000mAh LiPo rechargeable battery: (Aliexpress) Battery charger module TP4056: (Aliexpress) Waterproof temperature sensor DS 18b20: (Aliexpress) 22 AWG wire (Aliexpress) Prototype PCB board 5x7cm (Aliexpress) 220 Ohm and 4.7 kOhm resistors a short USB to MicroUSB cable additionally: Insolating foam sealant @ DIY market or here: (Amazon) Waterproof paint @ DIY market or here: (Amazon) Filler primer spray @ DIY market or here: (Amazon) Liquid epoxy for a waterproof coating @ DIY market Hot glue You might need to use a 3D printer to print a waterproof cover for the USB port. Step 2: Electronics I thought it is easiest to start with some of these DIY universal prototype PCBs and I found that a 5x7cm is just perfect for this purpose. Building steps: Prepare the D1 mini pro for using an external antenna: Unsolder 0 Ohm resistor next to ceramic antenna Turn 0 Ohm resistor downwards and solder the connection to external antenna (good explanation found here - Step5) Place the parts and decide for the layout on the prototype PCB before you start soldering Solder the the pins to the D1 mini pro Solder the standoff pins to the prototype board Solder the pins for the charger board to the prototype PCB Solder the charger board to the pins Cut the cable of the temperature sensor to a length of 20 cm Please see image above for connecting the temperature sensor Solder the cable to the solar panel DO NOT YET solder the solar panel cables to the board - these need to be glued first to the crocodile's head Follow the Fritzing schema above to solder all the remaining connections to the PCB Once all components are connected and soldered use some hot glue to fix the batteryPlease note: For putting the ESP8266 to sleep it is necessary to connect pin D1 with pin RST. Sometimes the D1 mini pro causes problems with the serial port if port D0 and RST are connected. The one I used (see Aliexpress link above) did not have this problem.If you are facing this problem you might need to use a jumper or a switch to deconnect the two pins for uploading new code. But (!) then you have no chance to reprogram once the crocodile head has been sealed. In this case you also do not need to bring the USB port to the outside (e.g. to drill a third hole). Step 3: Hardware Part 1 (Preparation of the Crocodile Head) In this step we prepare the backside of the crocodile head to get enough space for the electronics. And we are drilling some holes for the antenna, the solar panel and the USB port.I planned my project first without the USB port. But then I thought that it would be impossible for me to do some software updates once the crocodile has been sealed again. Therefore I decided to use a short USB cable micro-USB to USB to allow an outside access to the ESP8266 board.Next steps to do: Use a sharp knife to cut a little more than 7x5 cm (size of your prototype board) off the hard surface Use a spoon to remove the softer foam from the inside Just make sure that you have enough space for your cables and your board Try out if it fits and that there is still some space to cover it later Now drill two or three holes into the head: for the solar panel for the antenna (optional) for the USB port for enabling later programming Use 2 component epoxy (5 minutes) to glue and seal these holes again. Use enough epoxy glue! Make sure that it will be waterproof afterwards! Glue the solar panel cable to the head and properly seal the hole Glue the solar panel between the eyes Glue the antenna socket to the head and properly seal the hole Glue the USB plug and properly seal the hole To avoid any water causing corrosion to the USB port I 3D-printed a little protective cap. Read more: Crocodile Solar Pool Sensor ### Monster Catcher Night Light https://youtu.be/iJaVeIyJZwk This nightlight doubles as a trap to catch monsters under the bed! Before you go to sleep at night, place it under your bed and it will catch any monster under there. It even keeps a light on all night to make sure new monsters stay away. This Instructable makes a great project for parents of a kid who’s afraid of monsters under the bed. The trap can help them sleep easy knowing that any monsters are locked away in the trap and can’t get them. The enclosure body of the Monster Catcher is made with laser cut acrylic (though this could be 3D printed if needed) and a few 3D printed parts. The electronics are built using an Arduino. Supplies: 3D printer - dual extruder Filament - PLA and PVA Sheet acrylic - 12” x 24 “ x ⅛” Adhesive vinyl etching - can be replaced with sanding, sandblaster, or spray paint, or some other diffuser Sharpie Laser cutter - with a bed large enough for 12x24 piece of acrylic Glue gun 2 L brackets & screws Arduino Uno, Leonardo, or equivalent Jumper wires 2 hobby servos Assorted resistors RGB LED Trimmer potentiometer, aka trimpot 9V battery pack with on/off switch 9V battery 2 small breadboards (Note the breadboard and jumper wires can be replaced by perfboards and stranded wire, if soldering the circuit together) Step 1: Write the Code Clone or download the Monster Catcher code from the colleeninboots Github repo. Upload it to your Arduino Uno or Leonardo. The firmware is designed to open the trap, i.e. the teeth, by moving the servos when the board is turned on, showing that it is ready to catch a monster. As the user turns the trimmer potentiometer (or trimpot), it changes the color of the light. Once a color is chosen, the trap snaps shut after 4 seconds, capturing any nearby monster. If the knob is turned all the way to 0, then the LED shuts off and the trap opens back up. The program is coded for a Common Anode RGB LED. If you have a Common Cathode RGB LED, just remove the "255 -" from each of the digitalWrite lines in the setColorRGB method. If you aren’t sure, then check the data sheet for the LED that you have. Step 2: Connect the Circuit The next step is to get the circuit working. Connect the components as shown in the schematic above. The servos will open and shut the mouth of the trap - one servo controls the top teeth and one the bottom. The RGB LED will be the light source of the night light, and the trimpot controls the color. The 9V battery powers the whole thing, while the Arduino controls all the components. I find it helpful to build one functional element at a time and then test. For example, connect only the RGB LED and then turn the Arduino on to make sure it is connected correctly. I even added some buttons and modified the code slightly to test the function of the servos (one to move the servos to the “open” position and one to move it to “shut”). The video above shows how you can use a piece of notebook paper to keep track of the components and their function while testing. Step 3: Laser Cut the Enclosure The monster catcher electronics are enclosed in a box with a cutout in the top for the “teeth” of the trap. All the sides of the box can be cut on a single sheet of 12 x 24” acrylic using the attached adobe illustrator file, including an insert for the inside of the box to hold the servos in place. The file includes a few test pieces for gauging the power setting of the machine and the tolerances of the finger joints. Settings vary a bit by machine, but I was able to get good cuts using the manufacturer settings for 1/8” thick acrylic on the Epilog Universal Laser. I recommend cutting just the rectangles in the top first, one by one, to test power settings on your machine. Then cut just the finger joint gauges to make sure you’re happy with the fit. Finally, cut the rest of the pieces. Lastly for this step, we'll add a light diffuser. I used adhesive etching vinyl. This is a roll of stick-on plastic that has the look of etched or frosted glass. I found it to be an easy way to get an evenly frosted look and diffuse the light inside the box. Just cut the vinyl in the same shapes as your pieces and stick it on. Two layers gave me a level of diffusion I was happy with. Read more: Monster Catcher Night Light ### Infinity Gauntlet Controlled Home Automation https://youtu.be/-H7YejeUWbI In my previous project i have made an infinity gauntlet that control a light switch. I wanted to use six stones and each stone can control appliance, door lock, or lighting.So, I made a home automation system using infinity gauntlet. In this project I used the RF24Network Library, which enables to build a wireless network with many Arduino boards. Step 1: Hardware and Materials Required Arduino Mega + USB Cable II Arduino Uno : https://amzn.to/2qU18sO II https://amzn.to/2qU18sOArduino nano: https://amzn.to/2zMXJU8 9v battery: https://amzn.to/2zIcBmL AA battery: https://amzn.to/2utifnx Resin : https://amzn.to/2JX9RDD Switch: https://amzn.to/2zIcBmL Jumper wires: https://amzn.to/2zIcBmL Male DC Barrel Jack Adapter for Arduino : https://amzn.to/2zIcBmL Micro Servo 9g : https://amzn.to/2zIcBmL Mini Breadboard : https://amzn.to/2zIcBmL 9v Battery Clip Connector : https://amzn.to/2zIcBmL Cardboard : https://amzn.to/2zIcBmL Ruby : https://amzn.to/2zIcBmL NRF24L01+ 2.4GHz Wireless RF Transceiver Module: https://amzn.to/2zIcBmL MPU 6050 : https://amzn.to/2zIcBmL LED Strips : https://amzn.to/2zIcBmL Step 2: Making the Infinity Stones and the Infinity Gauntlet From Cardboard For making infinity stones, I used ruby, epoxy resin + Hardener, colour paint, and clay (you can use silicon).- Push ruby into the clay and pull it out. - Mix the resin, hardener, colour paint and divide it into six different cups, one for each color. - Pour the epoxy into the mold and Let it dry. You can watch this video , if you want to know how I made infinity gauntlet from cardboard. Step 3: Arduino Wireless Network With Multiple NRF24L01 Modules A single NRF24L01 module can actively listen up to 6 other modules at the same time. You can define the addresses of the nodes in octal format. In this project, the address of the base (Infinity Gauntlet) is 00, the base children addresses are 01 to 0. So from the base (Infinity Gauntlet) , using a MPU6050 we will control the servo motor at the node 01 – 0. Step 4: Base( Infinity Gauntlet) Code From Base, We can send data to the node 01 - 0 for controlling the servo motors and WS2812B LED strip Step 5: Node(01 - 0) Code The nodes (01 - 0) are receiving data from Base, we use it to control the servos. Upload each program to each arduino. Step 6: Wiring Diagram for Infinity Gauntlet I added additional cardboard for placing the electronics and changed 9 Volt battery to 4 xAA battery from my previous project. Read more: Infinity Gauntlet Controlled Home Automation ### Inverted Pendulum: Control Theory and Dynamics https://youtu.be/xwXPipYmJ9A The inverted pendulum is a classic problem in dynamics and control theory that is generally elaborated in high-school and undergraduate physics or math courses. Being a math and science enthusiast myself, I decided to try and implement the concepts that I learned during my classes to build an inverted pendulum. Applying such concepts in real life not only helps strengthen your understanding of the concepts but also exposes you to a whole new dimension of problems and challenges that deal with practicality and real-life situations that one can never encounter in theory classes. In this instructable, I will firstly introduce the inverted pendulum problem, then cover the theory aspect of the problem, and then discuss the hardware and software required to bring this concept to life. I suggest you watch the video that is attached above while going through the instructable which will give you a better understanding. And finally, please don't forget to drop a vote in the 'Classroom Science Contest' if you liked this project and feel free to leave any questions in the comment section below. Happy making! :) Step 1: The Problem The inverted pendulum problem is analogous to balancing a broom or a long pole on the palm of your hand, which is something most of us have tried as a kid. When our eyes see the pole falling to a certain side, they send this information over to the brain which performs certain computations and then instructs your arm to move to a certain position with a certain velocity to counter the pole's movement, which would hopefully bring the tipping pole back up to vertical. This process is repeated several hundred times a second which keeps the pole completely under your control. The inverted pendulum functions in a similar manner. The aim is to balance a pendulum upside down on a cart that is allowed to move about. Instead of eyes, a sensor is used to detect the position of the pendulum which sends the information over to a computer which performs certain computations and instructs actuators to move the cart in a way to make the pendulum vertical again. Step 2: The Solution This problem of balancing a pendulum upside down requires insight into the movements and forces that are at play in this system. Eventually, this insight will allow us to come up with "equations of motion" of the system which can be used to compute relations between the output that is going to the actuators and the inputs coming from the sensors. The equations of motion can be derived in two ways depending on your level. They can either be derived using the basic laws of Newton and some high school level mathematics or using Lagrangian mechanics which is generally introduced in undergraduate physics courses. (Note: Deriving the equations of motion using Newton's laws is simple but tedious whereas using Lagrangian mechanics is much more elegant but requires the understanding of Lagrangian mechanics although both approaches eventually lead to the same solution). Both approaches and their formal derivations are usually covered in high school or undergraduate classes on math or physics, although they can easily be found using a simple google search or by visiting this link. Observing the final equations of motion we notice a relation between four quantities: The angle of the pendulum to the verticalThe angular velocity of the pendulumThe angular acceleration of the pendulumThe linear acceleration of the cart Where the first three are quantities that are going to be measured by the sensor and the last quantity is going to be sent to the actuator to perform. Step 3: Control Theory Control theory is a subfield of mathematics that deals with controlling and operating dynamical systems in engineered processes and machines. The objective is to develop a control model or a control loop to generally achieve stability. In our case, balance the upside down pendulum. There are two main types of control loops: open loop control and closed loop control. When implementing an open loop control, the control action or the command from the controller is independent of the system's output. A good example of this is a furnace, where the amount of time that the furnace remains on is purely dependant on the timer. Whereas in a closed loop system, the controller's command is dependant on the feedback from the state of the system. In our case, the feedback is the angle of the pendulum with reference to the normal which determines the speed and position of the cart, therefore making this system a closed loop system. Attached above is a visual representation in the form of a block diagram of a closed loop system. There are several feedback mechanism techniques but one of the most widely used is the proportional–integral–derivative controller (PID controller), which is what we are going to use. Note: Understanding the workings of such controllers is very useful in developing a successful controller although explaining the operations of such a controller is beyond the scope of this instructable. In case you have not come across these types of controllers in your course there are bunches of material online and a simple google search or an online course will help. Step 4: Implementing This Project in Your Classroom Age Group: This project is primarily for high-school or undergraduate students, but could also be presented to younger children simply as a demonstration by giving an overview of the concepts. Concepts Covered: The main concepts that are covered with this project is dynamics and control theory. Time required: Once all the parts are gathered and fabricated, assembling takes 10 to 15 mins. Creating the control model requires some more time, for this, the students can be given 2 to 3 days. Once each individual student (or groups of students) have developed their respective control models, another day can be used for the individuals or the teams to demonstrate. One way to implement this project into your classroom would be to build the system (described in following steps), while the batch is working on the subtopics of physics related to dynamics or while they are studying control systems in math classes. In this way, ideas and concepts that they come across during class can be directly implemented into a real-world application making their concepts far more clear because there is no better way to learn a new concept than by implementing it in real life. A single system can be built, together as a class and then the class can be divided into teams, each building a control model from scratch. Each team can then demonstrate their work in a competition format, where the best control model is the one that can balance the longest and withstand nudges and pushes robustly. Another way to implement this project in your classroom would be to make older kids (high school level or so), develop this project and demonstrate it to younger children while giving them an overview of dynamics and controls. This may not only spark interest for physics and math for the younger children but will also help the older students crystallize their concepts of the theory because one of the best ways to strengthen your concepts is by explaining it to others, especially younger children as it requires you to formulate your ideas in a very simple and clear manner. Step 5: Parts and Supplies The cart will be allowed to freely move on a set of rails giving it a single degree of freedom. Here are the parts and supplies required to make the pendulum and the cart and rails system: Electronics: One Arduino compatible board, any will work. I recommend an Uno in case you are not too experienced with electronics because it'll be simpler to follow along.One Nema17 stepper motor, which will function as the actuator for the cart.One stepper motor driver, once again anything will work, but I recommend A4988 stepper motor driver because it will just be simpler to follow along.One MPU-6050 Six-Axis (Gyro + Accelerometer), which will detect the various parameters such as angle and angular velocity of the pendulum.One 12v 10A power supply, 10A is actually a slight overkill for this specific project, anything above 3A will work, but having the possibility to draw extra current allows for future development where more power may be required. Hardware: 16 x bearings, I used skateboard bearings and they worked great2 x GT2 pulleys and beltAbout 2.4 meters of 1.5-inch PVC pipeBunch of 4mm nuts and bolts Some of the parts that were used in this project were also 3D printed, therefore having a 3D printer will be very useful, although local or online 3D printing facilities are commonly available. The total cost of all parts is just a little less than 50$ (excluding the 3D printer) Step 6: 3D Printed Parts Some of the parts of the cart and rails system had to be custom made, so I used Autodesk's free to use Fusion360 to model the cad files and 3D print them on a 3D printer. Some of the parts that were purely 2D shapes, such as the pendulum and the gantry bed, were laser-cut as it was much quicker. All the STL files are attached below in the zipped folder. Here is a complete list of all the parts: 2 x Gantry Roller4 x End Caps1 x Stepper Bracket2 x Idle Pulley Bearing Holder1 x Pendulum Holder2 x Belt Attachment1 x Pendulum Bearing Holder (a)1 x Pendulum Bearing Holder (b)1 x Pulley Hole Spacer4 x Bearing Hole Spacer1 x Gantry Plate1 x Stepper Holder Plate1 x Idle Pulley Holder Plate1 x Pendulum(a)1 x Pendulum(b) In total there are 24 parts, which don't take too long to print as the parts are small and can be printed together. In the course of this instructable, I will be referring to the parts based on the names in this list. Step 7: Assembling the Gantry Rollers The gantry rollers are like the wheels for the cart. These will roll along the PVC track which will allow the cart to move smoothly with minimal friction. For this step, grab the two 3D printed gantry rollers, 12 bearings and a bunch of nuts and bolts. You will require 6 bearings per roller. Attach the bearings to the roller using the nuts and bolts (Use the pictures as a reference). Once each roller is made, slide them onto the PVC pipe. Step 8: Assembling the Drive System (Stepper Motor) The cart is going to be driven by a standard Nema17 stepper motor. Clamp the motor into the stepper bracket using the screws that should have come as a set with the stepper. Then screw the bracket onto the stepper holder plate, align the 4 holes on the bracket with the 4 on the plate and use nuts and bolts to secure the two together. Next, mount the GT2 pulley onto the shaft of the motor and attach the 2 endcaps to the stepper holder plate from the bottom using more nuts and bolts. Once done, you can slide the endcaps onto the pipes. In case the fit is too right instead of forcing the endcaps onto the pipes, I recommend sanding the inner surface of the 3D printed endcap until the fit is snug. Read more: Inverted Pendulum: Control Theory and Dynamics ### Arduino Fireflies https://youtu.be/S8C5a9tcbgk One of the things I look forward to with summers in Pennsylvania are fireflies in my backyard. I recently taught myself Adruino programming for the purpose of making this simple project. It's a great program to start with and is easy enough for any programmer, novice to expert, to build, modify and have fun with in only a few minutes. Let's get started. Step 1: What You'll Need. To get your bugs blinking, you'll need these components: Arduino. I started with the Nano, however any Arduino compatible micro-controller will do. Yellow LEDs, 5mm. You can use up to 6 of them. Resistors. You will need one resistor per LED to limit current. I used 470-ohm but anything above 150 ohms should be fine to protect your micro-controller. Breadboard. Jumper wire. To complete the project for your backyard, you'll need: Weather proof project box. 9-volt battery with a connector. (Please see notes at the bottom of this section.) Switch. (I chose these waterproof switches. If you are not using this outside, any switch will do.) A few yards of wire to place the LEDs around the garden. I used about 10 feet of Cat5 Ethernet wire per LED. A small breadboard or some perf board. A weather proof cable gland through which the LED wires run. (You can omit this if you are not using this outside as well.) Heat shrink tubing to protect your LED bug butts. Green hook-and-loop (i.e. velcro) strips to affix the LED fireflies to plants and posts in your garden. Male headers for plugging components into your small breadboard. Tools: Drill bits for the project box. (Use this opportunity to get yourself a nice step-bit. You'll be glad you did). Hot glue gun. Soldering iron. Rotary tool (i.e. Dremel) for carving out space in the project box if you need it. A Few Notes Here: 1. The battery choice was for a quick and easy start-up. Using a 9-volt battery permanently is a bit wasteful. You're better off using a 4x AA-battery holder for longer life (however you will need a bigger project box in which to fit it). 2. If you choose to deconstruct a Cat 5 Ethernet cable for the wires, make sure they are copper core and wrap them neatly around some PVC to keep them organized while you work. Again, I used about 10 feet of wire per LED. If you want to spread the lights out far and wide, by all means use longer wires! 3. Lastly, all the links I provided are mere suggestions. Please read through this entire Instructable before building or buying anything as you will gain a better understanding of how you would like to personally proceed. Step 2: Build the Circuit. This project uses the pulse width modulation pins on your Arduino. The micro-controller has 6 of these pins and you are welcome to use as many as you want. The circuit is pretty straight forward. Wire all power from the pulse width modulation (PWM) pins D3, D5, D6, D9, D10, and D11 to the positive ends of your LEDs. Wire the negative ends to the resistors and then to a common ground. (The resistors can go in front of or behind the LED. It makes no difference unless you want to safeguard against short circuits in higher currents.) I included a few schematics to help with wiring. (The diagrams where created using Fritzing design software.) Step 3: The Code. https://youtu.be/29ISLQHjSyQ If you are a seasoned programmer, you'll find this code simplistic. It is a great code to start learning with as it introduces you to the use of variables, pinmodes, functions and even a random generator. The code is not as compact as it can be as I am sure the same effect can be achieved with arrays etc. The code comments lay out the logic of each section. The entire code is embedded here and you may download the sketch below. Read more: Arduino Fireflies ### Unsafe Noise Level Alert System The Oshman Engineering Design Kitchen (OEDK) is the largest makerspace at Rice University, providing a space for all students to design and prototype solutions to real-world challenges. To serve this purpose, the OEDK houses a number of power tools and large machinery that produce loud, potentially unsafe noises. While the OEDK has successfully established a culture of safety around eye protection and gloves, it has been unable to establish the same culture of safety around hearing protection, due to the fact that users are unsure of when hearing protection is required. Our team, Ring the Decibels, aims to solve this problem by designing, building, and implementing an alert system that advises OEDK users to wear appropriate hearing protection at unsafe sound levels. Step 1: Overview https://youtu.be/NM5pdUXI-MY This device uses an Arduino Uno microcontroller. Analog sound data is received from a Gravity Sound Level Meter, averaged, and then used to trigger a digital LED strip output. The visual displays include a gradient that continuously displays the average decibel level and a set of headphones that flashes red once a predetermined decibel threshold is reached. The casing is made from two plywood plates separated by two circular plywood plates separated by aluminum standoffs. The gradient and headphones displays are created with frosted acrylic All electronic components are mounted to the back plate. From raw materials to being mounted on the wall, this device only takes less than 2 hours to complete. We learned a lot about data smoothing and controlling LED strips through this project and we hope you have fun building it! Step 2: Components & Tools Needed The total cost for materials for this device is a little under $100. Since our team is building this device en masse, we were able to buy some materials in bulk to reduce the cost. Also, since we are building this device for and in an engineering makerspace, we had access to a lot of the components and tools already. The quantities of the components listed below are for one device. Components 1x Arduino Uno (or similar microcontroller) with USB Cable1x Prototyping Breadboard1x Perfboard (optional)2x Red Male-Male Jumper Wires2x Red Male-Female Jumper Wires2x Black Male-Male Jumper Wires2x Black Male-Female Jumper Wires3x Blue Male-Male Jumper Wires2x Blue Male-Female Jumper Wires1x 5V 1A Power Adaptor1x Gravity Analog Sound Level Meter1x Individually Addressable RGB LED WS2812B Strip (at least 20 LEDs)6x Male-Male Header Pins2x 330 Ohm Resistors24” x 12” of 1/4" Birch Plywood7" x 9" of 1/4" Acrylic9" x 9" of 1/8" Acrylic (width can vary)3x 1/4" Hex / 2" 6-32 Female-Female Aluminum Standoffs6x 1/4" Hex / 1 1/4" 6-32 Female-Female Aluminum Standoffs18x 3/4" 6-32 Flat-Head Screws18x No. 6 Washers8x 10mm M2.5 Female-Female Nylon Standoffs4x 25mm M2.5 Female-Female Nylon Standoffs4x 18mm M2.5 Male-Female Nylon Standoffs24x 6mm M2.5 Screws Tools Arduino IDESoldering Iron (HAKKO FM-204) with SolderRosin FluxLaser Cutter (EPILOG Fusion M2 40)Acrylic GlueSandblaster (optional)Sandpaper2-Part EpoxyCordless Drill5/32" Drill Bit1/8" Drill Bit1/2" 82º Countersink BitDrill Press#5 Counterbore BitScrewdriversHot Glue Gun with Glue Sticks Step 3: Prepare the LEDs Cut two strips of the individually addressable LED strips at the markings on the strip. You can cut any number of LEDs you would like, just be sure to re-initialize the number of LEDs in the code later. We used 10 LEDs per strip. Solder header pins onto each of the 3 connections one of the LED strip. Be sure to solder on the data input (DI) end. Repeat for the other LED strip. We used a bit of rosin flux brushed on the LED strip connectors to make soldering easier. Bend and fold one of the LED strips into an arc-like shape to fit the curve of the gradient piece. We achieved this by creating a wavy pattern with the LED strip that could curve on itself. Using this same technique, shape the other LED strip to follow the curve of the headphones piece. Step 4: Assemble the Circuit Start by connecting the Arduino 5V pin to the power rail on the breadboard. Then, connect the Arduino group pin to the ground rail on the breadboard. Connecting the LED Strips Connect the Arduino digital pin 5 to the data input (DI) connector on one LED strip, adding a 330 Ohm resistor between pin 5 and the DI connector. Connect the breadboard power rail on the breadboard to the 5V connector pin on the LED strip and connect the breadboard ground rail to the GND connector on the LED strip. This will be the LED strip for the gradient display. Connect the Arduino digital pin 6 to the DI connector on the other LED strip, adding a 330 Ohm resistor between pin 6 and the DI connector. Connect the breadboard power rail on the breadboard to the 5V connector pin on the LED strip and connect the breadboard ground rail to the GND connector on the LED strip. This will be the LED strip for the headphones display. Connecting the Gravity Sound Level Meter (the microphone) Connect the Arduino analog pin A0 to the analog port on the Gravity Sound Level Meter. Connect the breadboard power rail on the breadboard to the VCC port on the Gravity board and the breadboard ground rail to the GND port on the Gravity board. Transferring the Circuit to Perf Board (optional) To keep all the electronic components in place longer, our team decided to move our circuit onto a perf board. Our circuit isn't very complex, so we used a hacksaw to cut a 4cm x 6cm perf board into a 4cm x 3cm board and drilled new mounting holes into it with a 1/8" bit. This step is completely optional. Step 5: Edit and Upload the Code Download the code and open it in the Arduino IDE. Check that the value defined for the number of LEDs on each strip (NUM_LEDS_1 and NUM_LEDS_2) matches the number of LEDs you cut for the first LED strip (the gradient) and second LED strip (the headphones). If these values do not match, change the number on the code. Verify and upload the code to your Arduino board. Step 6: Prepare the Wood Casing Download the wood laser cutting file. Laser-cut the front and back plates and 6 LED supports from 1/4" plywood using the appropriate settings on your laser-cutter. Feel free to change the rastered logo on the front plate into any design you would like. On our laser-cutter (EPILOG Fusion M2 40), we used the following settings: 4 speed, 100 power, 10 frequency to vector-cut50 speed, 100 power, 300 DPI to raster-engrave We used a laser-cutter because we have access to one on the OEDK, but you can also download the files to use as an outline to cut the pieces with a CNC router or bandsaw. Drill 3 holes with a 5/32" bit into the front plate in the locations shown by the red Xs in the image. There should be one hole between the gradient and headphones, one underneath the right headphone, and one underneath the logo. Countersink these holes from the front. These holes will be for the 2" standoffs. Lay the front plate on top of the back plate such that they are both oriented in the direction as seen in the laser cutting file. With a pencil, lightly trace the outline of the gradient and headphone spaces, the microphone hole and the 3 holes just drilled in the front plate onto the back plate. Drill 3 holes with a 5/32" bit into the back plate in the locations just transferred from the front plate. Countersink these holes from the back. Step 7: Prepare the Acrylic Pieces Download the 1/4" acrylic laser-cutting file and the 1/8" laser-cutting file. Laser-cut the front-insert pieces from 1/4" acrylic and the backing pieces from 1/8" acrylic using the appropriate settings on your laser-cutter. On our laser-cutter (EPILOG Fusion M2 40), we used the following settings: 2 speed, 100 power, 100 frequency for the 1/4" acrylic4 speed, 100 power, 100 frequency for the 1/8" acrylic We used a laser-cutter because we have access to one on the OEDK, but you can also download the files to use as an outline to cut the pieces with a CNC router or bandsaw. Additionally, the backing pieces can be cut from acrylic of any width, but we found 1/8" or thinner worked well enough for attaching to the wood while reducing weight. Glue each acrylic backing piece to its corresponding front-insert piece with acrylic glue such that when the front-insert pieces are placed into the front plate, the tabs on the backing pieces are flush with the back of the front face. After the glue is set (at least 30 minutes), frost the front and back of the joined acrylic pieces to diffuse light better. We used a sandblaster for this, but fine-grit sandpaper (600 grit or higher) and some elbow grease will work as well. Read more: Unsafe Noise Level Alert System ### How to Make a Self-Watering IoT Planter With a Mason Jar and an ESP32! Introduction: On one of my weekly pilgrimages to Lowes (as any devout Kansan does), I found a sad little plant in the Gardening Department: a Janet Craig Compacta. The poor little guy looked lonely and dehydrated. We clicked right away and immediately I knew I had to take him under my wing. There was one major problem. I *suck* at gardening. I am a disgrace to my home state’s agricultural prestige and heritage — I frequently forget to water the plants in my care, countless dying from my neglectful hand. I knew I had to save this little guy, but I could not lead him to the same demise. I was determined to atone for my past sins. With my engineering skills and technical knowledge, I could create a solution that could keep my plants alive and redeem myself as a Kansan while wholeheartedly indulging my habit of short-term memory loss. Determined, I brought home that plant. He was overjoyed to be chosen (I could tell). I named him Plonty, short for Plonty Mython, and I quickly got to work on designing his brand new smart home, an IoT Mason Jar Planter. This is how I made it. This Instructable was sponsored by the Urban Farming Guys, in association with the Green Thumb Project. Huge thanks to these guys for helping me fund this tutorial, aiding in an effort to encourage and educate about more intelligent gardening. Step 1: Gathering the Tools and Materials Step 1a: Preamble This project has a long list of Tools and Materials. Because of this, I've divided the list into sections so you can see what materials are required, depending on the part of the project you are building. I've also provided Amazon links to each product, so you can easily find the parts you need. Let's get into it! Tools: The Pointy Bits: (please be careful!) Scissors Diagonal Cutters Exacto Knife Hand Drill (w/ bits) Disassembly: Crescent Wrench Prying Tool Needle Nose Pliers Allen Key Set Hot Stuff: (also be careful!) Lighter Hot Glue Gun For the Electronics: Soldering Iron Wire Stripper For Staining: Foam Brushes Paper Towels Materials: Jar Planter: Mason Jar Rocks (optional) Wire Mesh Yarn/Wick Electronics: ESP32 Buzzer (Piezo) Relay Module Breadboard (2x) Moisture Level Sensor Water Height Sensor 5V Micro USB Wall Wart 100Ω Resistor Wire Jumpers Wooden Base: Wood Square Wood Circle Plaque Wood Ring UV Lamp Expendables: Heat Shrink Hot Glue Electrical Tape Rosin-Core Solder Wood Glue Wood Stain (Note: some of these tools can be very dangerous, supervision is recommended for kids completing this project.) Step 2: Prepping the Base Step 2a: Drilling the Mounting Hole Once we have all of our materials, it's time to begin! We will start by creating the wooden base for the Mason Jar to sit on. First, we need to drill a hole for the lamp to mount later on. To do this, we will make a small ink mark using a Sharpie. This marks where to drill the hole. We want it as close to the corner as possible! Don't worry about making a few mistakes, the wooden ring will help to hide these. Now it's time to drill. Make sure the base is securely mounted/clamped down, and then begin to drill the hole. Don't go too fast, or you'll risk splitting the wood. I also did this in my carpeted apartment living room... maybe try doing it outside instead? Step 2b: Gluing the Base Together After the hole has been drilled, glue the pieces together. Apply a moderate amount of glue to the bottoms of the pieces, and place them onto the base. Now we wait for the glue to dry... *Jeopardy music begins to play* Step 2c: Staining the Base Now that the glue has dried, we can stain the wood!Carefully use a flat head screwdriver or prying tool to open the can of stain. After the can is open, stir the stain slowly to make sure it's ready for use. Lay down paper towels to protect your work surface. Then we will use a foam brush to apply a coat of stain to the wood. Make sure to get all the faces, as well as the little corners and cracks. Step 3: Attaching the Lamp Step 3a: Disassembling the Clamp Depending on the lamp you purchase and the base you use, this step will most likely change, but I am adding it here to fully explain my process in the event that someone follows exactly the steps I took. For me, my lamp had a clamp on the end, with a hex bolt holding it together. I used my Allen screwdriver to loosen this (while also snapping my finger with the spring in the process. Would not recommend). During disassembly, always remember to pay attention to where compressed energy might be hiding. Once I had the clip apart, I had to remove a 14mm nut from the base, which required me bending part of the clip down so I could access the nut. Step 3b: Removing the Switch After the nut was gone, it was time to open up and remove the power switch. We will be using the relay in its place later on. This will require using the prying tool again, and then a soldering iron to detach the switch. Now that the switch is gone, we can feed the wire through the hole in our base. Step 3c: (Actually) Attaching the Lamp The lamp should be completely stripped away with just a cable running out of the bottom. Slide this through the hole we drilled earlier, and slip the nut onto the wire. Press the lamp neck as far into the wood as possible, and begin to tighten the nut onto the bottom. Do this until it's nice and firmly mounted. It should be able to stand up on it's own. (as shown in the first picture) Read more: How to Make a Self-Watering IoT Planter With a Mason Jar and an ESP32! ### The Brachistochrone Curve https://youtu.be/1BdO8J0iynY The brachistochrone curve is a classic physics problem, that derives the fastest path between two points A and B which are at different elevations. Although this problem might seem simple it offers a counter-intuitive result and thus is fascinating to watch. In this instructables one will learn about the theoretical problem, develop the solution and finally build a model that demonstrates the properties of this amazing principle of physics. This project is designed for high school students to make as they are covering related concepts in theory classes. This hands-on project not only strengthens their grasp on the topic but also offers a synthesis of several other fields to develop. For example while building the model, students are going to learn about optics through Snell's law, computer programming, 3d modelling, digital frabrication and basic woodworking skills. This allows an entire class to contribute dividing the work among themselves, making it a team effort. The time required to make this project is around a week and can then be demonstrated to the class or to younger students. There is no better way to learn than through STEM, so follow on to make your very own working brachistochrone model. If you like the project do vote for it in the classroom contest. Step 1: Theoretical Problem The brachistochrone problem is one that revolves around finding a curve that joins two points A and B that are at different elevations, such that B is not directly below A, so that dropping a marble under the influence of a uniform gravitational field along this path will reach B in the quickest time possible. The problem was posed by Johann Bernoulli in 1696. When Johann Bernoulli asked the problem of the brachistochrone, on June 1696, to the readers of Acta Eruditorum, which was one of the first scientific journals of the German-speaking lands of Europe, he received answers from 5 mathematicians: Isaac Newton, Jakob Bernoulli, Gottfried Leibniz, Ehrenfried Walther von Tschirnhaus and Guillaume de l'Hôpital each having unique approaches! Alert: the following steps contain the answer and reveal the beauty behind this fastest path. Take a moment to try and think about this problem, maybe you might crack it just like one of these five geniuses. Step 2: Using Snell's Law to Demonstrate One of the approaches for solving the brachistochrone problem is to tackle the problem by drawing analogies with Snell's Law. Snell's Law is used to describe the path that a beam of light would follow to get from one point to another while transitioning through two different media, using Fermat's principle, which says that a beam of light will always take the quickest route. A formal derivation of this equation can be found by visiting the following link. Since a free-falling object under the influence of the gravitational field can be compared to a beam of light transitioning through changing media, each time that the beam of light encounters a new medium, the beam gets slightly deviated. The angle of this deviation can be calculated using Snell's law. As one continues to add layers of reducing densities in front of the deviated beam of light, until the beam reaches the critical angle, where the beam simply gets reflected, the trajectory of the beam describes the brachistochrone curve. (the red curve in the diagram above) The brachistochrone curve is in fact a cycloid which is the curve traced by a point on the rim of a circular wheel as the wheel rolls along a straight line without slipping. Thus if we need to draw the curve one can simply use the method above to generate it. Another unique property of the curve is that a ball released from any point of the curve will take exactly the same time to reach the bottom. The following steps describe the process of making a classroom experiment by constructing a model. Step 3: Practical Experiment Model The model consists of lasercut paths that act as tracks for the marbles. To demonstrate that the brachistochrone curve is the fastest path from point A to B we decided to compare it with two other paths. As quite a few people would intuitively feel that the shortest part is the fastest we decided to put a straight slope connecting both points as the second path. The third one is a steep curve, as one would feel that the sudden drop would generate enough speed to beat the rest. The second experiment in which the balls are released from different heights on three brachistochrone paths, results with the balls reaching at the same time. Thus our model features 3d printed guides that provide easy interchangeability between the acrylic panels letting conduct both experiments. Finally the release mechanism ensures that the balls are dropped together and the timing module at the bottom records the timings as the balls reach the bottom. To achieve this we have embedded three limit switches that are activated when the balls trigger it. Note: One could simply copy this design and make it out of cardboard or other materials that are easily available Step 4: Materials Needed Here are the parts and supplies to make a working model of the brachistochrone experiment HARDWARE : 1" Pine Wood Plank - dimensions; 100cm by 10cm Neodymium Magnetx 4 - dimensions; 1cm dia and 0.5cm in height 3D Printing Filament- PLA or ABS are fine M3 Threaded Insert x 8 - (optional) M3 Bolt x 8 - 2.5cm long Wood Screw x 3 - 6cm long Wood Screwx 12 - 2.5cm long ELECTRONICS : Arduino Uno Limit Switchx 4- these switches will act as the timing system Push Button LCD Display Jumpwire x many! The total cost of the model came to around 30$ Step 5: 3D Printing Several parts such as the release mechanism and the control box were made with the help of a 3d printer. The following list contains the total number of parts and their printing specifications. All the STL files are provided in a folder attached above, allowing one to make their needed modifications if necessary. Control Box x 1, 20% infill Guide x 6, 30% infill End Stop x 1, 20% infill Pivot Arm x 1, 20% infill Pivot Mount x 1, 30% infill Release Piece x 1, 20% infill The parts were printed in PLA as there is no particular stress acting on the pieces. In total it took around 40 hours of printing. Read more: The Brachistochrone Curve ### DIY Geiger Counter With an ESP8266 and a Touchscreen https://youtu.be/rmFnbVB5gCM I designed and built a Geiger Counter - a device that can detect ionizing radiation and warn its user of dangerous ambient radiation levels with the all-too-familiar clicking noise. It can also be used when scouting for minerals to see if the rock you found has Uranium Ore in it! There are many existing kits and tutorials available online to make your own Geiger Counter, but I wanted to make one that is unique - I designed a GUI display with touch controls so the information is displayed in a pretty way. Step 1: Basic Theory The working principle of a Geiger Counter is simple. A thin-walled tube with a low pressure gas inside (called a Geiger-Muller Tube) is energized with a high voltage across its two electrodes. The electric field that's created is not enough to cause dielectric breakdown - so no current flows through the tube. That is until a particle or photon of ionizing radiation goes through it. When beta or gamma radiation passes through, it can ionize some of the gas molecules inside, creating free electrons and positive ions. These particles start moving due to the presence of the electric field, and the electrons actually pick up enough speed that they end up ionizing other molecules, creating a cascade of charged particles which momentarily conduct electricity. This brief pulse of current can be detected by the circuit shown in the schematic, which can then be used to create the clicking sound, or in this case, fed to the microcontroller that can do calculations with it. I'm using the SBM-20 Geiger tube since it is easy to find on eBay, and quite sensitive to beta and gamma radiation. Step 2: Parts and Construction I used the NodeMCU board based on the ESP8266 microcontroller as the brains for this project. I wanted something that can be programmed like an Arduino but is fast enough to drive the display without too much lag. For the high voltage supply, I used this HV DC-DC boost converter from Aliexpress to supply 400V to the Geiger tube. Just keep in mind that when testing the output voltage, you can't measure it directly with a multimeter - the impedance is too low and it will drop the voltage so the reading will be inaccurate. Create a voltage divider with at least 100 MOhms in series with the multimeter and measure the voltage that way. The device is powered by an 18650 battery that feeds into another boost converter that supplies a constant 4.2V for the rest of the circuit. Here are all of the components needed for the circuit: SBM-20 GM tube (many sellers on eBay)High Voltage Boost Converter (AliExpress)Boost Converter for 4.2V (AliExpress)NodeMCU esp8266 board (Amazon)2.8" SPI Touchscreen (Amazon)18650 Li-ion cell (Amazon) OR Any 3.7 V LiPo battery (500+ mAh)18650 cell holder (Amazon) Note: this battery holder turned out to be a little too big for the PCB and I had to bend the pins inward to be able to solder it. I would recommend using a smaller LiPo battery and soldering JST leads to the battery pads on the PCB instead. Miscellaneous electronic components needed (you might have some of these already): Resistors (Ohms): 330, 1K, 10K, 22K, 100K, 1.8M, 3M. Recommend getting 10M resistors for making voltage divider needed to measure high voltage output.Capacitors: 220 pFTransistors: 2N3904LED: 3mmBuzzer: Any 12-17 mm piezo buzzerFuse holder 6.5*32 (to attach Geiger tube securely)Toggle switch 12 mm Please refer to the PDF schematic in my GitHub to see where all the components go. It's usually cheaper to order these components from a bulk distributor like DigiKey or LCSC. You'll find a spreadsheet with my order list from LCSC in the GitHub page that contains most of the components shown above. While a PCB is not needed, it can help make the circuit assembly easy and make it look neat. The Gerber files for PCB manufacturing can be found in my GitHub as well. I have made a few fixes to the PCB design since I got mine, so the additional jumpers should not be needed with the new design. This has not been tested, however. The case is 3D printed out of PLA and the parts can be found here. I have made changes to the CAD files to reflect the drill location changes in the PCB. It should work, but please note that this has not been tested. Step 3: Code and UI I used the Adafruit GFX library to create the user interface for the display. The code can be found in my GitHub account here. The home page shows the dose rate, counts per minute, and the total accumulated dose since the device was turned on. The user can choose a slow or fast integration mode which changes the rolling sum interval to either 60 seconds or 3 seconds. The buzzer and LED can be toggled on or off individually. There is a basic settings menu that allows the user to change the dose units, the alert threshold, and the calibration factor that relates the CPM to dose rate. All settings are saved in the EEPROM so they can be retrieved when the device is reset. Step 4: Testing and Conclusion The Geiger Counter measures a click rate of 15 - 30 counts per minute from natural background radiation, which is about what's expected from an SBM-20 tube. A small sample of Uranium Ore registers as moderately radioactive, at around 400 CPM, but a thoriated lantern mantle can make it click faster than 5000 CPM when held up against the tube! The Geiger counter draws around 180 mA at 3.7V, so a 2000 mAh battery should last around 11 hours on a charge. I plan to properly calibrate the tube with a standard source of Cesium-137, which will make the dose readings more accurate. For future improvements, I could also add WiFi capability and data logging functionality since the ESP8266 already comes with WiFi built in. I hope you found this project interesting! Please share your build if you end up making something similar! Read more: DIY Geiger Counter With an ESP8266 and a Touchscreen ### ARDUINO PH METER In this project, we will be making a benchtop pH meter using the gravity analog pH circuit and probe from Atlas Scientific and an Arduino Uno. Readings will be displayed on a liquid crystal display (LCD). MATERIALS 1 - Arduino Uno 1 - Gravity analog pH sensor 1 - pH probe 1 - 20x4 LCD module 1 - 158x90x60mm Enclosure 1 - Mini breadboard Jumper wires Acrylic sheet (plexiglass) 4 - 11mm standoffs and screws (comes with the pH sensor) 1 - 220Ω and 1 - 1kΩ resistors TOOLS Drill, drill bits, drywall cutter bits, files, screwdrivers, benchtop vise, band saw, glue gun and glue stick, soldering iron and solder, digital caliper, ruler. Step 1: Prepare Housing Safety: Remember to take care when handling tools/machinery and to wear proper safety gear such as goggles, gloves, and respirators. The housing used is an ABS plastic enclosure. It has to be modified for the pH meter. Cut opening for the LCD a) The LCD is placed in the top portion (cover) of the enclosure. Center a 98x40mm rectangle on the cover. b) Put the piece in the vise and drill a 3.2mm (1/8") pilot hole in the rectangle that was marked off. c) Use this pilot hole as the start point for the 3.2mm (1/8") drywall cutting bit. Since this a small job, we will use the bit on the hand drill rather than a drywall cutting machine. Work on the inside of the rectangle instead of the lines as it may be a bit difficult to cut in a straight manner with this bit on the drill. d) Next, use a hand file to remove the excess material and shape the rectangle to the required size. Cut openings for BNC connector and Arduino ports The openings for the BNC connector and Arduino ports are on the side of the bottom portion of the enclosure. a) Using the dimensions provided above, mark the center point for the circle and outlines for the two rectangles. b) Put the piece in the vice and cut the openings. The circular opening is made using drill bits. The rectangular ones are made by following a similar process used to make the opening for the LCD. Outfit the base plate to mount components The base plate is used to mount the Arduino, pH sensor and mini breadboard. 6.4mm (1/4") thick acrylic sheet is used. a) Using a band saw, cut the acrylic sheet to 135x62.5mm. b) Mark off the positions for the four holes as shown. Drill 2.38mm (3/32") diameter holes. Countersink the holes on one side of the plate to a depth of 3mm and diameter of 4.4mm (11/64"). This is necessary to keep a flat undersurface when the screws are inserted to hold the standoffs. c) Attach the 11mm standoffs using the provided screws. The pH sensor comes with 4 standoffs and screws. Use two of them for the Arduino. Step 2: Install Electronics in Housing 1) Insert the base plate into the bottom portion of the housing. Keep in position with screws or hot glue. 2) Mount the pH sensor on the base plate. Secure to standoffs with screws. 3) Mount the Arduino Uno onto the base plate. Secure to standoffs screws. 4) Add the mini breadboard onto the base plate. 5) Solder the header pins to the LCD (pins provided). Insert LCD into the top portion of the housing and use some hot glue to keep the screen in place. Step 3: Wire Electronics Together Wire the components are shown in the schematic above. Use the mini breadboard for the 1kΩ and 220Ω and for distributing the Arduino's 5V and ground pins. The two resistors are used to set the screen contrast. Datasheets Gravity pH sensor, pH probe Step 4: Finalize Assembly After the wiring has been completed: a) Put the top and bottom portions of the housing together using the provided screws. b) Connect the probe to the BNC connector. Step 5: Upload Code Onto Arduino Uno The code for this project makes use of customized libraries and header files. You will have to add them to your Arduino IDE to use the code. The steps below include the process of making this addition to the IDE. a) Connect the Arduino to your computer and open the IDE. The IDE can be downloaded from this LINK if you do not have it. Go to Tools -> Board -> Select Arduino/Genuino Uno. Go to Tools -> Port -> select the port where the Arduino is connected to. b) Add Liquid Crystal Display library: In the IDE go to Sketch -> Include library -> Manage libraries. In the search bar of the Library Manager enter "liquidcrystal". Look for the package titled "LiquidCrystal Built-in by Arduino, Adafruit". It may or may not be installed. If not, select the package and click on install. c) Add Atlas Gravity sensor library: Download the zip file from the following LINK. The file will be saved as "Atlas_gravity.zip". In the IDE go to Sketch -> Include library -> Add .ZIP Library. Locate the "Atlas_gravity.zip" file and select to add. d) Next, we have to add the code for the pH meter. Copy the code from this LI NK onto the IDE work panel. e) Compile and upload the code to the Arduino. f) The pH readings will then be displayed on the LCD. You can also view the readings on the serial monitor. To open the serial monitor, go to Tools -> Serial Monitor or press Ctrl+Shift+M on your keyboard. Set the baud rate to 9600 and select "Carriage return". Step 6: Calibrate PH Sensor Note: If you plan on using an external power supply for the Arduino, connect it to the Arduino before doing the calibration. This will ensure that the reference levels are appropriately set, which will aid in the correct calibration. This pH meter can be calibrated to one, two or three-points calibration. Standard buffer solutions (pH 4,7 and 10) are required The serial monitor is used for the calibration process. The user will be able to observe the gradual change in readings as they come to stabilization and send the appropriate commands. Calibration data are stored in the EEPROM of the Arduino. Calibration commands Low-point: cal,4 Mid-point: cal,7 High-point: cal,10 Clear calibration: cal,clear Steps a) Remove the soaker bottle and rinse off the pH probe. b) Pour some of the pH 4 solution into a cup. Ensure that there is enough to cover the sensing area of the probe. c) Place the probe in the cup and stir it around to remove trapped air. Observe the readings on the serial monitor. Let the probe sit in the solution until the readings stabilize (small movement from one reading to the next is normal) d) After the readings stabilize, enter the command cal,4 into the serial monitor. Calibration to pH 4 is now complete. Repeat steps a-d for pH7 and pH10. Remember to rinse the probe as you proceed to different buffer solutions. What about temperature compensation? The sensor used in this project has an accuracy of +/- 0.2%. The pH meter will operate within this accuracy in the temperature range of 7 - 46°C. Outside of this range, the meter will have to be modified for temp compensation. Note: The pH probe can be subjected to a range of 1 − 60 °C. Read more: ARDUINO PH METER ### Berry Racer - a Game Programmed in Arduino and Played on a Custom PCB https://youtu.be/C8IPaMl1wTk Berry Racer is a game that I came up with and programmed using Arduino's Software. The game is run on a Teensy microcontroller which is connected through a custom PCB (Printed Circuit Board) to a Screen, a Joystick, four buttons, and a piezo speaker. The board can be powered through the micro USB port on the Teensy or with a battery that can be plugged into the back of the PCB, there is also a switch to turn the circuit off when running on battery power. This Device and Program was designed and built by me with the help of Zane Cochran who was the instructor of the CRT 420 - Special Topics Course at Berry College for the Creative Technologies major. This instructable will go into detail about how to build a GamePad like this one, however, I hope it is also helpful in case you want to build something slightly different. The video that is linked to this intro slide covers the entire build process as well as some of the programming steps that I took, however it does not go into a lot of details about programming. I try to explain why or how I am doing the things that I am doing and in the end, I criticize my shortcomings on this project, I definitely am proud of what I was able to accomplish with this project but there are so many more things that I want to improve in the future. Let me know if you would like to see a version 2 and what improvements you would make! But for this instructable, I will detail the steps I took to accomplish this version 1 GamePad. The following is a brief overview of the design process and provides all necessary links to the components/equipment/software that is required and will act sort of like your Bill of Materials. Read through the entire thing and figure out what components and/or software you might need. To begin, I figured out what Game I would make and what I wanted my GamePad to look like. You will need to use Inkscape to create a DXF file for the outline of the board. I then used easyEDA to design the board based on that outline and once I was happy with the board, I ordered the boards to be manufactured. Below is the list of components that I used on the board. Pushbuttons (4) (If you have an Arduino starter kit, you might have the right ones laying around) 10k resistors (4) (if you have a starter kit you most likely have some 10k's leftover) Teensy 3.2 (1) Screen (1) Joystick (1) Slide switch (1) Header Pins (1) Piezo Buzzer (1) Batteries (1) The board will take about 1-2 weeks to be manufactured and shipped to your doorstep. Once you receive your boards, the next step is to gather your components and then solder them into the board. I had access to really nice soldering stations at the lab but any plain soldering iron will get the job done. The minimum order is 5 boards so you will have a couple of extras in case you screw something up with the soldering process. That being said, if you do screw up, try not to screw up with the Teensy or the screen as those are the most expensive components. Helping hands are nice to have when soldering but not required, using rubber bands can also a cheap and easy alternative to holding components into the board while you are soldering, you can actually see me doing this in the video along with helping hands. You'll also want to have some wire cutters and Kapton tape. Once you have correctly soldered everything into the board, you can begin testing your components by uploading the code that I will provide. This will be the code I used for my class and I will provide explanations of the most important bits to hopefully help your understanding of the code. Part of this code will show you on the screen when you interact with the joystick or the buttons letting you know that everything is working. In order to do any of this, you will need Arduino's software (I recommend downloading the program instead of using the web version as I have not used the web version) as well as the driver for the Teensy (Follow instructions on PJRC page). Once you have tested that your board and components work, you can go ahead and start programming your game! This instructable will show you how to program my game and hopefully also be helpful for programming a game of your own. If you want to and have access to a 3D printer, you can also make a case for your GamePad. To model the case I used Fusion 360 but there are other options that you can use. I use Fusion because you can get it and the entire AutoCAD suite for free with a student email account. If you find any mistakes in this Instructable, please let me know so that I can correct them right away! I am trying to be as detailed as possible but I am human and it is possible that I missed a step or am just straight-up wrong on something since it has been a while since I did this stuff. I am also not claiming that this is the perfect way to go about making something like this, there are probably more efficient ways but this instructable will detail the steps that I took to make this GamePad and program BerryRacer. Source: Berry Racer - a Game Programmed in Arduino and Played on a Custom PCB ### Upright Laser Harp https://youtu.be/_1oTBekbUT4 Laser harps are musical devices with laser beam "strings." When the beam is blocked, a note is played by the instrument. Usually laser harps have the beams travel vertically in the shape of a fan or vertical lines. In this project, I built a laser harp with stacked laser beams that propagate horizontally. The beams reflect off mirrors to form square-shaped beam paths. With this design, the lasers land on "frets," which makes it much simpler to block notes with a single finger. Instead of a MIDI output like my previous laser harp, this device has a built-in MIDI player so the output is an audio signal. This means the device does not have to be connected to a computer or MIDI player (e.g. keyboard) to play sound. Both built-in speakers and audio output jack are available for playing music. In this instructable, I will go over the construction and how to play the instrument. Supplies: See below. Step 1: Supply List Supplies: Arduino MegaAdafruit Music Maker Shield3mm thick plywoodBlack acrylicClear acrylic12 laser diode modules (650nm, 5mW)12 photoresistors12 1kOhm resistors and 12 30kOhm resistors12 npn transistors28BYJ-48 ULN2003 5V Stepper Motor + ULN2003 Driver BoardRotary encoderLatch pushbutton for speaker on/offPower switch5kOhm potentiometerAudio jackPower jack and cable12V Power supply - with this supply I had to solder a 5.5 x 2.5 mm cable to match the jack (this could be better planned)Momentary pushbutton for resetHall effect sensor2mm diameter magnet8 ohm speakers1/8" audio cableUSB extension cable and panel mountHeader pinsWire wrap wireElectrical tapeSuper glueMetric hardware Tools: Laser cutterSoldering iron3D printerWire cuttersAllen wrenchesSmall hammer Step 2: System Overview The upright laser harp consists of 12 lasers and photoresistors arranged in six layers. Two mirrors per layer reflect the laser beams to the photoresistors. In the figure, the red arrow indicates how the laser is reflected to the photoresistor and the corresponding pins the laser and photoresistor is connected to. The pins are scrambled up due to the way the wiring feeds down the tower to the Arduino Mega. The lasers can be triggered on and off using digital pins, and the voltage drop across the photoresistors is measured using analog input pins. When the laser is blocked, the resistance of the photoresistor increases and the voltage output drops. The instrument produces audio output using the incredible Adafruit Music Maker shield. I was so happy to discover this shield, because I can now easily produce audio signals from the device without connecting a MIDI player. Check the link for all the info on how to set up this shield. The shield is run in MIDI mode with the audio output being run to audio jack and speakers. A latched pushbutton turns the speakers on and off. Here is a link to the chip (VS1053b) at the heart of the music maker shield. Page 33 has all the instruments. The volume of the device is controlled using a potentiometer connected to the Arduino Mega. The output is read and software updates the volume of the MIDI signal. Finally, the device can also switch between different MIDI instruments. A rotary switch is read and the output is used to update the instrument. I chose to have 16 preloaded instrument selections on the device. The number of instruments is not limited by the Arduino and music shield. There are over 100 options for instruments on the VS1053 chip. I think there is probably enough memory on the mega to store all those instrument codes if you wanted. The selected instrument is displayed on a wheel with 16 spokes. The wheel is turned using a stepper motor, which is controlled with 4 digital pins. Read more: Upright Laser Harp ### Programmable Macropad V2 In this Instructable I will walk through how I build my new and improved Macropad. I made one a while back and it has always had some things I would like to improve on it. The main one being the location of the state LEDs. When redesigning the case I figured why not take a look at the whole thing and see if I can do a better job. So I did. This macropad is capable of 10 buttons per layout and up to 16 layouts in total. If you can do it I'll be impressed. It also has a click rotary encoder, that has a fixed function, volume and play/pause. In this version I am sticking with an Arduino Pro Micro, and adding another button on. While I was reading I also decided to use diodes just like a really keyboard. This also makes coding a bit easier as a lot of libraries already exist for this. I won't spend a lot of time on why I made the changes I did, but I'll touch on it here and there throughout. Honestly they both work great. I just wanted a new challenge. Supplies: Materials I am providing links to what I used but don't feel like you need these exact parts. Get, or use what makes sense for you. (11) Key Switches & Caps (I used some I had, otherwise you could print some)(1) Arduino Pro Micro (1) Rotary Encoder (11) IN4148 Diodes Case & Hardware (4) LEDs (1) 330 ohm Resistor (or what ever size you need for the color you are using) Wire USB Cable Optional: Rubber Feet Tools Soldering Iron Pliers Snips Wire strippers Scissors 3D printer (optional) Step 1: Case As with any project I like to get the case started first. Especially when printing one, as it takes a while and I only need to slice and load the file and the printer does the rest. Here is a link to the case that I designed for this project: https://www.thingiverse.com/thing:4792978 This project does necessitate the at least the top of the case being done before moving on as all of the parts need to be clipped into the top and then soldered together. You don't need to print a case for this. You can use what ever you have access too. For this case design I would recommend checking the dimensions on your keys, LEDs, and encoder before printing the whole thing. Step 2: Assemble the Top The begins by installing all the switches into the plate. The best fit on the switches is a bit tight, that way you can remove any key caps and the switch won't pull out. After adding the switches bend the ground leg of the LED down at a right angle and place them into their spots at the bottom of the plate with the bend leg on the outside. If your encoder came with header pins, like mine did, you will need to remove them before you can put the encoder in place as the pins run into the switches. To do that use your snips to clip the plastic that holds them all together and then remove them one at a time using a soldering iron to heat the pin and solder and a pair of pliers to pull the pin out. Once the pins have been removed you can put the encoder in place and attach it. It may also be easier to wait until you have soldered the wires onto the encoder before putting it in place. Step 3: Soldering Soldering this is the hardest part. Each of the switches needs a diode and a wire. We are basically making a grid wires with a switch and diode at each intersection. The diodes help in case more than one switch is pressed at a time. I've attached a circuit layout that I used (or pretty close). The pins aren't hugely important, as they can easily be swapped in the code later. Make sure that you avoid pin 0 and 1 (RX and TX) as I think they are used to communicate with the computer; tying into them might be weird. There are 3 pins that are important. They are the pins from the encoder. The encoder will work best if the moment tracking pins connected to interrupt capable pins on the Micro. On the Pro Micro attached to pin 2 and 3. They are important as they track the movement of the encoder. If you have the same encoder I do they are the DT and CLK pins. The encoder I have also needs +5v to work, so the power needs to run from the RAW pin. The RAW pin exposes the +5v coming from the USB port. All other pins will run at 3.3v. Step 4: Code Now the fun part. For this version I am breaking the code down into a lot more functions. Functions are useful as the make it a lot easier to keep each section of your code small. By making each section smaller, its easier to follow. The main thing to remember with functions is that each function should only do 1 thing. The other thing to remember is why write code many times when you can wrap it in a function and use it a bunch of times. I've attached the code below and if you are interested I have an in depth walk through in the next step. For the actual key functions I've left a few in Layout2() for you to look at. With this code always remember when sending key strokes make sure that you release any keys you press. Some of the functions like .send() do release the keys they press but .press() does not. Use .releaseAll() to release pressed keys. You can change the pin numbers at the top to what you have used. #include #include #include #include "HID-Project.h" //Keypad buttons int R1 = 6; int R2 = 5; int R3 = 21; int R4 = 20; int C1 = 7; int C2 = 8; int C3 = 9; const byte ROWS = 4; const byte COLS = 3; char keys[COLS][ROWS] = { {'X','7','4','1'}, {'*','8','5','2'}, {'-','9','6','3'} }; byte rowPins[ROWS] = {R1, R2, R3, R4}; byte colPins[COLS] = {C1, C2, C3}; Keypad kpd = Keypad( makeKeymap(keys), colPins, rowPins, COLS, ROWS); //State LED pins int S1 = 15; int S2 = 14; int S3 = 16; int S4 = 10; const int numStates = 4; const int States[numStates] = {S1, S2, S3, S4}; int currentState = 0; int lastDebounceTime = 0; const int debounceTime = 50; //Encoder int SW = 19; int DT = 2; int CLK = 3; Encoder volumeKnob(DT,CLK); Bounce encoderButton = Bounce(SW,10); int timeLimit = 500; long oldPosition = -999; void setup() { // put your setup code here, to run once: Serial.begin(9600); for (int i = 0; i < numStates; i++){ pinMode(States[i], OUTPUT); digitalWrite(States[i], LOW); } pinMode(CLK, INPUT_PULLUP); Keyboard.begin(); //Consumer.begin(); Serial.print("Ready"); StartAnimation(); digitalWrite(States[currentState], HIGH); } void StartAnimation(){ int waitTime = 250; digitalWrite(S1, HIGH); delay(waitTime); digitalWrite(S2, HIGH); delay(waitTime); digitalWrite(S3, HIGH); delay(waitTime); digitalWrite(S4, HIGH); delay(waitTime); digitalWrite(S1, LOW); delay(waitTime); digitalWrite(S2, LOW); delay(waitTime); digitalWrite(S3, LOW); delay(waitTime); digitalWrite(S4, LOW); delay(waitTime); return; } void ChangeState(){ digitalWrite(States[currentState], LOW); currentState++; if (currentState == numStates){ currentState = 0; } digitalWrite(States[currentState], HIGH); //Serial.print("State Changed. Current State: "); Serial.println(currentState); delay(100); return; } void Layout1(char button){ switch(button){ case '1': Keyboard.print('1'); break; case '2': Keyboard.print('2'); break; case '3': Keyboard.print('3'); break; case '4': Keyboard.print('4'); break; case '5': Keyboard.print('5'); break; case '6': Keyboard.print('6'); break; case '7': Keyboard.print('7'); break; case '8': Keyboard.print('8'); break; case '9': Keyboard.print('9'); break; }; }// void Layout2(char button){ switch(button){ case '1':// break; case '2':// break; case '3':// break; case '4':// break; case '5':// break; case '6'://Return Keyboard.press(KEY_RETURN); Keyboard.releaseAll(); break; case '7'://Escape Keyboard.press(KEY_ESC); Keyboard.releaseAll(); break; case '8':// break; case '9':// break; }; } void Layout3(char button){ switch(button){ case '1': Keyboard.print('7'); break; case '2': Keyboard.print('8'); break; case '3': Keyboard.print('9'); break; case '4': Keyboard.print('4'); break; case '5': Keyboard.print('5'); break; case '6': Keyboard.print('6'); break; case '7': Keyboard.print('1'); break; case '8': Keyboard.print('2'); break; case '9': Keyboard.print('3'); break; }; } void Layout4(char button){ switch(button){ case '1': Keyboard.print('1'); break; case '2': Keyboard.print('2'); break; case '3': Keyboard.print('3'); break; case '4': Keyboard.print('4'); break; case '5': Keyboard.print('5'); break; case '6': Keyboard.print('6'); break; case '7': Keyboard.print('7'); break; case '8': Keyboard.print('8'); break; case '9': Keyboard.print('9'); break; }; } void loop() { //check the key matrix first char key = kpd.getKey(); if(key) { switch(key){ case '*': ChangeState(); break; case '-': Keyboard.press(KEY_RIGHT_CTRL); Keyboard.press('s'); delay(10); Keyboard.releaseAll(); break; default: switch(currentState){ case 0: Layout1(key); break; case 1: Layout2(key); break; case 2: Layout3(key); break; case 3: Layout4(key); break; } } } //check the encoder button if(encoderButton.update()) { if(encoderButton.fallingEdge()) { int fall = millis(); while(!encoderButton.update()){} if(encoderButton.risingEdge()){ int rise = millis(); //Serial.println(rise - fall); if(rise - fall > timeLimit){ Consumer.write(MEDIA_NEXT); Serial.print("Next"); } else { Consumer.write(MEDIA_PLAY_PAUSE); Serial.print("Play/Pause"); } } Keyboard.releaseAll(); } } //check encoder rotation long newPosition = volumeKnob.read(); if(newPosition != oldPosition){ Serial.print(newPosition); if((newPosition - oldPosition) > 0) { //volumeup Serial.println("volume up"); Consumer.write(MEDIA_VOLUME_UP); } else { //volumedown Serial.println("volume down"); Consumer.write(MEDIA_VOLUME_DOWN); } oldPosition = newPosition; Keyboard.releaseAll(); delay(200); //a delay of 200 seems to be the sweet spot for this encoder. } } Source: Programmable Macropad V2 ### The Simplest Buzzer Tutorial; Using Arduino https://youtu.be/pq3YFhjS-Wc Hey Makers, Lets make a Simple Quiz Buzzer using Arduino! Step 1: ​What We Can Do With It? What we can do with it? >Quiz Game Buzzer >Play Tunes and lots more…………. Step 2: Things Required >Arduino Uno (Buy From Amazon.in) (Buy From Amazon.com) >Buzzer (Buy From Amazon.in) (Buy From Amazon.com) >Switch (Buy From Amazon.in)(Buy From Amazon.com) >100ohm Resister (Buy From Amazon.in)(Buy From Amazon.com) Step 3: Circuit Connect Arduino According to the Circuit > Digital pin 13- Buzzer Positive (Via Resistor/Switch) > Gnd -Buzzer Negative (Directly) Read more: The Simplest Buzzer Tutorial; Using Arduino ### Arduino Bluetooth Car Controlled by Labview This is a Arduino RC car, originally based off of a project made by Owen_soo. It is very maneuverable, able to do quick turns, go backward and forward with just a flick of a switch. This was originally just going to be a very basic RC car that can go forward and turn right or left. It uses an Arduino Uno. I decided to change the software and use Labview instead. Step 1: Parts This are the necessary parts needed to build this project. Primary Materials 1. Arduino Uno Board 2. RC Car Platform 3. L298n Motor Control 4. HC-06 Bluetooth Module 5. 1.5V AA Battery(6 needed) 6. 6 AA Battery Holder 7. Resistor 5.1K Ohm(x3), 2K Ohm(x1), 1K Ohm(x1) 8. Capacitor 10uF 10V (x2) 9. 5V Regulator LM7805 10.9V Snap Connector 11. On/Off Switch Software Labview Labview Makerhub (Labview Add-on) All components on the platform is put in place using double sided tape with the addition of a few screws. Step 2: Programming The software that I use is called Labview. Unlike many of the more popular programming languages, Labview is a drag and drop icon base language. It has built in functions and uses data wires to connect and transfer information. One of the major problems that I ran into while creating the code was that Labview was unable to complete the initialization sequence. If there are any errors please scroll down. Labview consists of two platforms called the "Block Diagram" and "Control Panel". The Block Diagram consist of the code which the program is runned by. The control panel is how the car will be controlled. When the program is running, DO NOT press the stop button on the top left hand corner otherwise the program will stop working. If this does happen then turn the power off and back on. Disconnect the bluetooth and reconnect the bluetooth again. After that verify which serial port and connect to the right serial port. Step 3: Wiring This is the wiring for the car. The underside of the power regulator is soldered together including the bluetooth. The schematic shows how the wire connections work. For the motors, if the wiring doesn't work at first just switch the wires for each of the motors. The wire connecting to the battery and the Arduino's power port is soldered together. You can see this in the pictures above. Source: Arduino Bluetooth Car Controlled by Labview ### DIY Smart Follow Me Drone With Camera (Arduino Based) Drones are very popular toys and tools these days. You can find professional and even beginner drones and flying gadgets in the market. I have four drones (quadcopters and hexcopters), because I love everything that flies, but the 200th flight isn't so interesting and starts to be boring, so I decided that I will build my own drone with some extra feutures. I like to program Arduino and design circuits and gadgets so I started to build it. I used the MultiWii flight controller that is based on the ATMega328 chip that is also used in the Arduino UNO, so programming was pretty simple. This drone can be connected to an Android smartphone that sends its GPS data to the drone, that compares to its own GPS signal, then starts to follow phone, so if I move on the street the drone follows me. Of course has many failings yet, because I wasn't able to make a proffesional filming drone, but follows the phone, makes a video and also has a ultrasonic distance sensor to avoid the obstacles in the air. I think this is pretty much features from a homemade drone. As soon as possible I will load up a video about a flight, but it is hard to make good quality records with an always moving drone. Step 1: Main Properties The drone is almost fully automatically, you don't have to control it, because follows your phone that is usually in your bike, The ultrasonic sensor helps to bypass trees, buildings and other obstacles and the GPS gives a very accurate position data, but let's see what do we have in total: 1000mAh battery, enough for 16-18 minutes of continous flyingultrasonic sensor to avoid obstacles in the airBluetooth module to recieve data from the phoneArduino based microcontrollerbuild-in gyroscoperegulated maximum height (5 meters)when battery is low automatically lands on the phone (hopefully in your hands)costs about $100 to buildcan be programmed to anythingwith the help of the GPS you can send the drone to any coordinatesquadcopter desingequipped with a 2MP 720p HQ videocameraweighs 109 grams (3.84 ounces) So that is all that the first version can do, of course I want to develop it. During the summer I want to hack my bigger drone with this software. Step 2: Flight Test Video https://youtu.be/OJl-Qp6tzzU I asked two good friends of me to walk in the front of the drone, while I was under the drone, to save it if falls down. But the test succeeded, and as you can see the drone still is not very stable, but worked. The left guy in a yellow T-shirt held the phone, that transmitted the GPS data. The video quality with this camera is not the best, but I didn't find low weight 1080p cameras. Step 3: Gathering Parts and Tools For this project you need some new and unusual parts. I designed from low wieght and recycled parts to reduce the cost, and succeded I got very good materials for the frame. But let's see what we need! I bought the Crius brand of the flight controller from Amazon.com and worked Tools: Soldering IronGlue GunCutterWire CutterRotary ToolSuper GlueDuctapeRubberband Parts: MultiWii 32kB Flight ConrollerSerial GPS ModuleSerial to I2C ConverterBluetooth ModuleUltrasonic SensorStrawsPlastic PieceGearingMotorsPropellersScrewsL293D Motor Driver (it was a bad choice, I will correct in the second version)1000mAh Lithium Ion Battery Step 4: Assembe the Propellers I bought these proppellers with motors from the Amazon.com for 18 bucks, they are spare parts for the Syma S5X drone, but they seemed useful so I ordered them, and worked fine. You just have to put the motor in its hole, and attach the props to the gearing. Step 5: Circuit Schemantic Always look at the schemantic while working and be careful with the connections. Step 6: Soldering Motors to the Driver Now you have to solder all cables from the motors to the L293D motor driver IC. Look at the pictures, they say much more, you have to connect black and blue wires to the GND and positive wires to the Outputs 1-4, just like me. The L293D can drive these motors, but I recommend to use some power transistors because this chip cannot handle all the four motors at high power (more than 2 Ampers). After this cut 15 cm straws these will hold the motors in place. I used extra strong straws that I got from a local bakery and cafe. Put these straws gently on the motors's gearings. Read more: DIY Smart Follow Me Drone With Camera (Arduino Based) ### RFID Door Lock With Arduino Here we are with the classic RFID door lock. It's classic in that whole, "We live in the future and take it for granted at this point" sense. In this tutorial, we will set up a door latch that can be opened with the swipe of an RFID Tag! We will program a list of acceptable 'key' cards that will unlatch the door for a specified amount of time. This is a really simple project, but it does require that you alter your door jamb, so be prepared to do some wood work if you the strike plate to fit securely and flush. Step 1: Project Parts List These are the recommended parts for this project. You can use another Arduino variant, relay, or compatible RFID Tag, but we recommend using the RFIDuino Shield so that the code we will provide you in this tutorial works without a hitch. RFIDuino Shield and Antenna Geekduino or other Arduino compatible microcontroller RobotGeek Relay Board A Door Latch Solenoid or An Electronic Strike Plate (note that these are example parts, and may not fit your specific door. When selecting an electronic strike plate, make sure to choose one marked 'NO', or normally open. This means that when the circuit is open, the door is secured, keeping you safe in a power outage situation) 3-pin Sensor Cable 6v Power Supply (for Geekduino) An appropriate Power Supply for your solenoid (in the case of the linked solenoid, 12V) Micro USB cable for your Geekduino or cable for your Arduino compatible board A compatible RFID Tag -all tags on this page are compatible with the RFIDuino Panel Mount Dual Power Cable Wire Nut, Electrical Tape, Solder, or other wire connection method. Note that using a straight door latch solenoid requires power to unlock the door. If you lose power, you will be effectively locked out and unable to open your door until power is returned to the system. With the electronic strike plate, you can still use your regular key to open the door in the case of a power outage. Choose wisely. Step 2: Get Your RFID Tag Data Connect your RFIDuino as shown. (Click here for the v1.1 Connection Diagram) Open RFIDuino_helloworld onto your board. You can find this sketch underFile>Examples>RFIDuino>RFIDuino_helloworld You will need to make sure the code is adjusted for your RFIduino hardware.v1.2 shields (2 pin antenna, 'REV 1.2' printed on the board) will need the following codeRFIDuino myRFIDuino(1.2); //initialize an RFIDuino object for hardware version 1.2v1.1 shields (4-pin antenna, no version number printed on the board) will need the following codeRFIDuino myRFIDuino(1.1); //initialize an RFIDuino object for hardware version 1.1Both lines of code are available in the RFIDuino_helloworld sketch, simply uncomment the one you don't need.If you are still unsure about what hardware you are using, see this page Connect a micro USB cable from your computer to your Geekduino Load RFIDuino_helloworld3 onto your board using the upload button in the Arduino IDE. Once loaded, you can leave your board connected to your computer - you will need this connection to power the board and to communicate with the computer Open the Serial Monitor.Tools -> Serial MonitorThe serial monitor should be set to its default settings ('No Line ending', 9600 baud) Swipe a tag across the RFIDuino antenna. The green light will light up and your buzzer will make a noise. The Serial Monitor will display 5 numbers. These numbers make up the ID of your tag. Copy down these numbers for future use. It can be handy to write the ID on a sticky note and attach it to the tag. NOTE: You will need the ID for at least one tag for the next step. Step 3: Wiring and Programming Connect your components as shown here. Open RFIDuino_demo3_lockbox_multi onto your board. You can find this sketch underFile>Examples>RFIDuino>RFIDuino_demo3_lockbox_multi You will need to make sure the code is adjusted for your RFIduino hardware.v1.2 shields (2 pin antenna, 'REV 1.2' printed on the board) will need the following codeRFIDuino myRFIDuino(1.2); //initialize an RFIDuino object for hardware version 1.2v1.1 shields (4-pin antenna, no version number printed on the board) will need the following codeRFIDuino myRFIDuino(1.1); //initialize an RFIDuino object for hardware version 1.1Both lines of code are available in the RFIDuino_demo3_lockbox_multi sketch, simply uncomment the one you don't need.If you are still unsure about what hardware you are using, see this page. The RFID Experimenter's Kit comes with the version 1.2 shield. Modify the code for the number of cards you want by editing line 58. For example, if you have three cards, use the code#define NUMBER_OF_CARDS 3 //total numer of key cards that the system will respond to. You will also need to modify the sketch to include the IDs of the tags that you want to include. These IDs can be found using the Hello World sketch. Find the block of code starting at line 62 - it looks like this.byte keyTag[NUMBER_OF_CARDS][5] ={ {0,0,0,0,0}, //Tag 1 //commenting each tag with a description can help you keep track of them {0,0,0,0,0}, //Tag 2 {0,0,0,0,0}, //Tag 3 {0,0,0,0,0},//Tag 4 }; Now insert the IDs for your tags. If we had three key tags, our code might look something likebyte keyTag[NUMBER_OF_CARDS][5] ={ {77,0,44,22,242}, //Tag 1 //commenting each tag with a description can help you keep track of them {200,1,4,98,236}, //Tag 2 {23,64,4,25,1}, //Tag 3 }; Connect a micro USB cable from your computer to your Geekduino Load RFIDuino_demo3_lockbox_multi onto your board using the upload button int the Arduino IDE. Once loaded, you disconnect the USB cable from your computer.. Swipe any of the 'key' tags across the RFIDuino antenna. The green light will light up and your buzzer play three different notes. Additionally, the solenoid will fire. Swipe any tag that is not the 'key' tag across the RFIDuino antenna. The red light will light up and your buzzer play three monotone notes. The solenoid will not react. Step 4: Mount It Where You Can Use It https://youtu.be/soNDYea5VJg Once you're sure that you have it programmed and the latch releases when you swipe the correct RFID Tag, mount it in your door frame. We had a metal frame door with glass windows, so it was an easy call putting the RFID Reader behind the glass. You may want to mount the antenna in a weatherproof box for accessibility and keep the ~duino and other electronics indoors for safety. There are instructions with the strike plate that should help you mount that. We recommend keeping the plate as flush as you can to the wall it's mounted to, and to be careful when running wires through a wall. Step 5: You're Done! That was fun! So now that you have an arduino that can let you into your home, what are you going to do next? You could add a keypad for code entry, that'd be pretty cool. What about integrating bluetooth, so you can unlock your door with your phone? There are loads of features you can add, and we'd love to see what you come up with! Source: RFID Door Lock With Arduino ### Print Conductive Circuits With an Inkjet Printer This tutorial will teach you how to modify your average inkjet printer to be able to print electrically conductive circuits. This technology is fairly new but can provide a faster and safer prototyping option for DIY printed circuit boards. This project also acts as an introduction to the larger field of printed electronics. Step 1: Parts Needed Inkjet Printer ( Brother MFC-J450DW)Silver Nanoparticle InkRefillable Ink CartridgesRefill SyringesPrinter PaperQuick Drying Transparencies Optional Electrical TapeCopper TapeCircuit ComponentsLED330 Ω ResistorATtiny85DremelPower DrillHacksaw Step 2: What Are Printed Electronics? Printed electronics can refer to a wide range of techniques that are used to print electrical devices onto a substrate. A substrate is just the technical term for any substance that the printing process takes place on such as paper, glass, cover slips, etc. The techniques for printing electronics are still largely being developed. Some of the main techniques include screen printing[1], rotogravure[2], and inkjet. Why use printers at all for electronics? Currently there are two main ways of prototyping a circuit, breadboards and printed circuit boards (PCB). They both have their own pros and cons. A breadboard allows for a cheap way to easily connect wires and different components. However the standard layout of a breadboard means that you must conform your parts to fit what you are given.[3] A PCB can be designed to suit the exact needs of the project you are working on. The manufacturing costs of the PCB are its downfall for hobbyists however. It can take weeks to have your order made and shipped to you or the use of potent chemicals if you wish to etch it yourself.[4] The ability to print electronics on demand combines the best qualities of a breadboard and PCB. They are cheap to print, easy to add parts to, and can be revised very quickly. Printing electronics is becoming to the electronics industry what 3D printing has become to the mechanical industry. Step 3: How Do Inkjet Printers Work? This project will focus on the inkjet printing method for it is the cheapest and easiest method for hobbyists to get started with. Inkjet printers work mainly by one of two ways. The first being a “Thermal Bubble” where a current is first sent through tiny resistors in the print head. These resistors give off heat and vaporize some of the nearby ink. This vaporization of the ink creates a gas bubble which, as it expands, pushes ink out of the nozzle in the form of tiny droplets. When the bubble eventually pops, a vacuum is created in its absence which refills the nozzle with ink.[5] The second method is known as a “Piezoelectric” printer. Piezoelectricity is a material property where if a mechanical stress is applied, an electric potential is created. The opposite is also true, if a piezoelectric material is exposed to a change in electric potential energy, then its volume will change.[6] Piezoelectric printers utilize this property by having piezoelectric crystals in the print head’s ink reservoir. When a voltage is applied to these crystals they deform and expel tiny ink droplets out of the nozzle. [5] Read more: Print Conductive Circuits With an Inkjet Printer ### Arduino Solar Tracker (Single or Dual Axis) https://youtu.be/5KljnLkbgB4 If you’ve installed solar panels on a camper van to provide you with electricity on your camping trip or at home to supplement your electricity usage or take your home completely off grid then you probably know that the panels work the best when they are aligned directly towards the sun. This sounds simple enough, except that the sun moves throughout the day. This is why there are now a number of different mechanisms which work on a range of principles with the purpose of aligning your panel or array of panels directly towards the sun, they are called solar trackers. There are two principle types of trackers, single and duel axis trackers. Single axis trackers are adjusted every month or so account for seasonal changes in the suns position, the single axis is then used to track the daily movement of the sun across the sky. Duel axis trackers eliminate the need for monthly adjustment by using one axis to track the suns daily movement and another axis to track the seasonal movement. A single axis solar tracker improves solar output by around 25% and a dual axis tracker by around 40% according to this article on Altestore. This solar tracker control system is designed to take light measurements from the east and west (left and right) side of the solar panel and determine which way to move the panel to point it directly at the source of the light. A servo is used to actuate the panel tracker; these are available in a broad range of sizes and can be scaled according to your panel size. Although this tracker is single axis, the two sensors and servo can simply be duplicated to provide dual axis control. This project assumes you know the basics of Arduino programming, otherwise read my article on getting started with Arduino. You could also take this project further by building your own solar panel as well, here is our guide on how to build a solar panel at home. If you are thinking of switching some or all of your homes power requirements to solar power, read my article on switching to solar power first. Update: I have had a number of requests to show how this project and code can be modified to drive a linear actuator for heavier loads and panel arrays. I have written up a "how to" on the physical changes required as well as the revised software to make a linear actuator driven solar tracker. Step 1: What You Will Need for a Solar Tracker Here is a list of the items which you need in order to complete this project. If you are looking to make a dual axis tracking stand then you will need to double up on the servos, LDRs and resistors. An Arduino (Uno used here) – Buy HereSingle Axis Tracking Stand (Brief DIY Design Shown In Step 6)2 x 4.7K Resistors – Buy Here2 x LDRs – Buy HerePWM Servo – Buy Here The specific servo model or size has not been stated as it depends on the size and weight of your solar panel. The one used in this project is a 9 gram analogue servo. You can use any size PWM hobby servo with the Arduino although the larger servos will require their own power source. Step 2: Assemble the Components First you need to start by assembling the components onto your solar panel, or breadboard. The LDRs (light dependent resistors) or PRs (photo-resistors) change resistance with changing light, therefore they need to be connected in such a way that the changing resistance is converted into a changing voltage signal which the Arduino understands. The servo is controlled through one of the Arduino's PWM outputs. If you are going to be installing the solar tracker permanently then you may want to solder the resistors and LDRs together so that they cannot come loose. If you are simply trying this project for fun then a breadboard is perfect. The basic circuit for the connection of the LDRs and servo to the Arduino is shown in the attached image. The resistors R1 and R2 are each 4.7K, the PR1 and PR2 are the two LDRs and the servo can be any PWM hobby servo. If you are using a servo larger than 9 grams then the Arduino will probably not be able to supply it enough power to achieve its full torque capability, you will need to supply the servo directly with its own 5V power source. If you are making this a permanent installation, then it is best to solder the resistors right up near the LDRs on the panel. This way you can run a single 4 core wire from the control box up to the sensors on the panel, the four cores will be 5V, Gnd and then signal 1 and 2 from the LDRs. Once your LDRs and resistors have been soldered together, you can mount them on your solar panel. Mount the LDRs on the east and west (left and right) sides of the panel facing towards the sun. Make sure that they are not shaded in any way by the frame and have an unobstructed view of the sun. A breadboard has been used in this project purely to distribute the Ardunio's 5V power supply to both the resistors and the servo. The servo needs to be sized according to the size of your solar panel. The panel used in this example is small and relatively light; a small servo was therefore used and is powered by the Arduino. For a larger servo (anything above 9 grams), you will need to power the servo externally as the Arduino doesn’t have sufficient capacity for it. Make sure that you connect the external power sources ground to the Arduinos GND as well otherwise the PWM control signal to the servo will not work. Step 3: Upload the Sketch Now you can upload your sketch onto your Arduino, if you haven’t uploaded a sketch before then follow this guide on getting started. The sketch is shown in the attached image. Here is the link to download the Solar Tracker code. The code essential measures the light intensity from both photo resistors, it then compares the two to see which is receiving more light. If the difference is greater than a small threshold then the Arduino tells the servo to move in that direction to direct the panel towards the light source. If the light falls below a certain level on both sensors then it is detected as night time and the panel is moved to face east again for sunrise. Step 4: Autodesk Circuits Diagram & Simulator Here is the setup drawn up in Autodesk Circuits, the code is also imbeded and can be simulated by dragging the light intensities on the LDRs once the simulation mode has been started. Step 5: Calibrate the Sensor Error Because of differences between the LDRs, resistors and the resistance of the wire used, there will be a difference between the signal received from both sensors even when they are receiving the same amount of light. This is taken into account by introducing a calibration offset into the calculation, this number will need to be adjusted in your code according to your setup. Adjust this calibration factor where it is declared in the code, Line 13: int calibration = 204. The most accurate way to determine this factor is to shine a light equally between both sensors and then use the Serial monitor on your computer to read the values output by the east and west sensor. The difference between these two values will be the calibration offset. The LDRs are very sensitive so the tracker only moves when the difference between them is greater than 15 in the code otherwise it would be continuously tracking forwards and backwards and wasting power. If you are not familiar with the Serial interface then you can play around with this value until the tracker remains still when a light is shined equally onto both sensors. Step 6: Making a Single Axis Tracking Stand While this instructable is centered more around the Arduino control and is not intended to detail making a tracking stand because of the extremely diverse range and size of panels available, here is a brief outline on the design along with some key pointers. Your stand should look something like the attached image when it is complete. Ideally the stand should be made from aluminium angle as it is strong, durable and suitable for outdoor use but it can also be made from wood, plywood or PVC piping. The stand is essentially made in two parts, the base and the panel support. They are joined around a pivot point on which the panel support rotates. The servo is mounted onto the base and the arm actuates the panel support. The panel should protrude from the panel support as little as possible to keep the out of balance load on the servos to a minimum. Ideally, the pivot point should be placed at the centre of gravity of the panel and panel support together so that the servo has an equal load placed on it no matter which direction the panel is facing although this is not always practically possible. Two servos may be used for heavier panels, one on each side of the panel. The geometry needs to be the same and the servos need to be the same type/model. You can then duplicate the servo code in the software so that both servos are given the same reference position and move together to actuate the panel. For very heavy panels or for solar arrays, the servos will need to be replaced with stronger stepper motors. The stepper motors will need to be driven by a driver board such as this one. Please let me know if you have made this project or done something similar. I'm always looking for quicker and easier ways to do things. Leave a review in the comments section at this link to have some of your ideas added to our page. Read more: Arduino Solar Tracker (Single or Dual Axis) ### Arduino Data Glasses for My Multimeter https://youtu.be/lkl6yVauCKg Video of the working device Trying to build a cheap Arduino Data Glasses for everybody. Why? I just wanted one. It's working, and now it can even help to avoid accidents. From the first idea to the working prototype, it took 4 Month The challenge was, that It should be constructed out of common materials that can be found easily. The project is more about how to build the optical system for this HMD. One thing is clear, you can not just place a screen in front of your eyes, because it will not be possible for them to focus it. In the logs you can see from the first tests to what I have now. The optical design was the most difficult part, but I think I found a solution for this. The costs of the prototype amounted to +-70Euros. And now I have a Head-Up Display For Hight Voltage Step 1: What's Inside and How Does It Work? The received Bluetooth data is displayed, on the OLED display. It's then reflected over the mirror, goes through the lens and you can see the picture in the little transparent acrylic glass. That is the simple explication. The details are coming now :) Step 2: The Lens. the Most Tricky Part I made the data glasses work, but it was more a trial an error challenge. So I took a google crash course in optics. First of all I had to understand the difference between a real and a virtual image with lenses. Then a very important thing is, that a human eye can only focus an object at a distance of min 25cm. And all what I needed was this formula (1/f) = (1/o) + (1/i) where f is focal length of the lens o is object distance to the lens and i is the distance of the virtual image. Here are the values I used: with f=10cm and o=7.3cm you will get an i=-27.03cm (virtual images have always a negative value) and a magnification M=3.7 Lens Calculation Websitehttp://hyperphysics.phy-astr.gsu.edu/hbase/geoopt/image4.html Step 3: Alternative Lens I know that the lens is hard to find. I uses one of a cheap cardboard wich has lenses with a Focal length of 100mm and not like the google cardboard 45mm UPDATE I think I found a good solution for the lens. I just checked the physical data (FL = +- 110mm). and they should be perfect. I have no time right now, to test them, but if somebody could do it and give me a feedback, this would be great. A small Fresnel lens should do the job. and they are cheap and easy to find on the internet. And you can cut them with a cutter. Like this one https://www.amazon.com/Small-Fresnel-Lens-Magnifier-Pack/dp/B00CF5ZXKK An otherf alternative is a the lens of a head mounted magnifier. Normally they deliver 3 to 5 lenses and one of these should have a FL between 110mm and 120mm which works fine. It's just a little bit heavier and not so easy to cut Step 4: Electronics Here are all the electronic parts for the data glasses I just used a smaller battery in the final version. To use the 280mA battery, I had to change the 3k resistor against a 5.6k resistor on the original board. The charging current is now reduced to +- 200mA. Step 5: the Enclosure For the first tests, I used an enclosure made out of cardboard. This was a cheap solution and worked very well For the final version, I used my 3D printer. The style file has been created in 123design. I need to make a few modifications to the design, but it's not bad for the first try. Read more: Arduino Data Glasses for My Multimeter ### Make Your Own GPS SMS Security Tracking System In this project I will show you how to combine a SIM5320 3G module with an Arduino and a piezoelectric transducer as a shock sensor in order to create a security tracking system that will send you the location of your precious vehicle via SMS when it is moved around without you knowing it. Let's get started! Step 1: Watch the Video! https://youtu.be/CeStrH-5Llo The video gives you a decent overview on how to create the security tracking system. In the next steps though, I will present you some additional information. Step 2: Order Your Components! Here you can find a parts list with example sellers: Amazon.com: 1x SIM5320 3G Module (USA): http://amzn.to/2no6PPC 1x Arduino Pro Mini: http://amzn.to/2nav5Ee 1x MCP602 OpAmp: http://amzn.to/2nAgqDF 2x 20kΩ, 2x 680kΩ, 1x 10kΩ, 1x 470Ω Resistor: http://amzn.to/2nAmMmw 1x 50kΩ Trimmer: http://amzn.to/2mhfW54 1x IRLZ44N MOSFET: http://amzn.to/2mgYSvU 1x LM2940CT 5.0 Voltage Regulator: http://amzn.to/2no9Tv8 1x 220nF, 1x 22µF Capacitor: http://amzn.to/2nAmo7t 1x Piezoelectric Transducer: http://amzn.to/2nAouUP 1x Key Switch: http://amzn.to/2mFnZnm 1x MCP602 OpAmp:   https://www.win-source.net/linear-amplifiers-instrumentationop-ampsbuffer-amps-mcp602-ip.html 1x IRLZ44N MOSFET:   https://www.win-source.net/fets-single-irlz44npbf.html 1x LM2940CT 5.0 Voltage Regulator: https://www.win-source.net/pmic-voltage-regulators-linear-lm2940ct-5.0.html Ebay: 1x SIM5320 3G Module (Europe): http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x SIM5320 3G Module (USA): http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Arduino Pro Mini: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x MCP602 OpAmp: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 2x 20kΩ, 2x 680kΩ, 1x 10kΩ, 1x 470Ω Resistor: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x 50kΩ Trimmer: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x IRLZ44N MOSFET: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x LM2940CT 5.0 Voltage Regulator: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x 220nF, 1x 22µF Capacitor: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Piezoelectric Transducer: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Key Switch: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Amazon.de: 1x SIM5320 3G Module (Europe): - 1x Arduino Pro Mini: http://amzn.to/2kMv0ly 1x MCP602 OpAmp: http://amzn.to/2dLaboV 2x 20kΩ, 2x 680kΩ, 1x 10kΩ, 1x 470Ω Resistor: http://amzn.to/2nFIpOR 1x 50kΩ Trimmer: http://amzn.to/2nSlGyk 1x IRLZ44N MOSFET: http://amzn.to/2dL9WKB 1x LM2940CT 5.0 Voltage Regulator: http://amzn.to/2nFLFK0 1x 220nF, 1x 22µF Capacitor: http://amzn.to/2n2kUyp 1x Piezoelectric Transducer: http://amzn.to/2nFVKqH 1x Key Switch: http://amzn.to/2nFVPuv Step 3: Build the Circuit! Build the Circuit! Step 4: Upload the Code! Here you can find the sketch that you need to upload to your Arduino Pro Mini. Make sure to change the telephone number inside the sketch before the upload. And don't worry "+491521234567" is not my actual number. Don't forget to also download these libraries and copy them into the library folder of your Arduino software: https://github.com/adafruit/Adafruit_FONA https://github.com/rocketscream/Low-Power Step 5: Success! You did it! You just created your GPS SMS Security Tracking System!Feel free to check out my YouTube channel for more awesome projects: http://www.youtube.com/user/greatscottlab You can also follow me on Facebook, Twitter and Google+ for news about upcoming projects and behind the scenes information: Source: Make Your Own GPS SMS Security Tracking System ### Arduino Laser Harp A couple of weeks ago I presented my culmination project, framed laser harp, at New York City College of Technology. Work on it was so interesting for me, that I decided to share it here. I am an Arduino amateur and don't have any professional experience in electrical engineering or programming. Neither am I a musician. Probably that's why I had so much fun: when you are moving blindly, you can't see the ground anyway:) So, why laser harp? First of all, lasers are always cool. But laser beams making sounds were some kind of sorcery for me ever since I encountered a huge Arc Harp at Burning Man 2012. I was obsessed with the idea of making my own laser instrument, and finally got a chance to do it. After quite a bit of a research, I finally found a wonderful starting point – very well documented project template made by mnsman. Although I modified many things, my project heavily relies on mnsman's work. For example, the code I'm using is entirely taken from his project. Another extremely helpful resource was Chris Ball's instructable. It has very comprehensive wiring diagrams and is great in explaining the working principle. Laser Harp project is pretty 'multidimensional', because it involves different types of skills, such as wiring and soldering, drafting, woodworking, familiarity with Arduino and MIDI, and more. At the same time, everything is very flexible: you could design and build your own enclosure, change the number and function of laser modules, modify the code, etc. A note on safety: NEVER LOOK DIRECTLY INTO THE LASERS. Also, avoid using high power laser modules (more than 5mW) for this project. Good luck, and please let me know of any inaccuracies (either descriptive or grammatical) in this instructable. Step 1: Working Principle A laser harp is an electronic musical instrument, consisting of several laser beams (9 in this case: 7 notes, Octave Up, Octave Down) to be blocked in order to produce sound. In a framed version of the harp, each beam strikes a photocell, and when the player's hand interrupts it, the sensor prompts an Arduino microcontroller to send a MIDI "Note On" (logic HIGH) message. In this particular laser harp MIDI signal is sent from the Arduino through MIDI interface to the laptop running MIDI software (I used MuLab, because it's free and simple). The second USB A/B cable just powers up the Arduino (it is possible to use a 5V power supply or couple of batteries instead). Step 2: Parts and Tools Electronic Components 1 x Laptop (running MIDI software); 1 x Arduino Uno; 1 x MIDI interface (I used MIDIsport 4x4, because I had this at home); 2 x USB A to B cables (Arduino to laptop; MIDI interface to laptop); 1 x 5 pin DIN MIDI cable (harp to MIDI interface); 9 x 5mW red laser diodes; 9 x 50Ω photo-resistors (LDRs); 9 x 4.7K Ω resistor (in series voltage dividers with photo-resistors); 1 x 220Ω resistor (for MIDI plug); 1 x Arduino Proto Shield (bare PCB; to solder all wires into the board, instead of just inserting them into the Arduino itself); ~ 15 pin headers (to attach a bare PCB shield to the Arduino) 1 spool x 22 gauge electrical wire; 1 x ON/OFF switch (optional, for harp); 1 x 5 pin DIN female connector (harp to MIDI interface); 1 x 5V power supply (for laser modules); Tools and Supplies Soldering iron and solder; Wire cutters; Wire strippers; Glue gun with hot glue sticks; Electrical tape; Tape measure; Marker; Breadboard (for circuit prototyping); Jumper wires (for circuit prototyping); Tac putty tabs (to hold laser modules in place when aligned); Scissors; Enclosure The enclosure design is entirely up to you. I had access to a professional shop, and decided to give my harp a 'real' look. I will not describe the process of building the enclosure in this instructable, however, the drawings I used will be provided (as is). I used 1x pine for the neck and the column, 1/4" MDF for the sides of the 'box' and the stand, and 1/2" plywood for the top and bottom of the 'box'. I found this shape to be inefficient, because of the difficulties in laser modules/photodiodes alignment. I highly recommend to come up with another shape, something where the lasers and photodiodes form strait vertical lines when aligned. It was for me a real nightmare to align lasers and diodes at an angle. If you decide to replicate this shape, you will need the following tools and supplies: Table saw; Band saw (jig saw may be used); Screw gun or pneumatic stapler; Drill with different drill bits (for the photo-resistors, power button and harp outputs placement); Wood glue; Spatel; Joint compound; Paint; Step 3: Schematics There are two independent circuits: one for the laser modules (with power button and a 3-5V power supply), and another one for the Arduino board, photocells, and a MIDI jack. Each photocell is wired in series with an 4.7K resistor, which acts as a voltage divider and triggers logic HIGH when any of the laser beams is blocked. In the "Laser Circuit" schematics above 5mW laser modules are shown as regular LEDs, simply because I couldn't find a laser module symbol in Fritzing. The same is true about the two AA batteries in the schematics – in reality I used a 5V power supply. See the PDF of the EagleCAD schematic at the end of this step. Step 4: Laser Circuit Wiring https://youtu.be/jqSWBnDUvaU Nine 5mW laser modules are wired in parallel and breadboarded before soldering. I also added an optional power button to the circuit, to be able to turn the lasers ON and OFF. Step 5: Arduino Circuit Wiring Wire a MIDI jack according to the pinout: Pin 2 – Ground, Pin 4 – 5V (through 220Ω resistor), Pin 5 – Tx. Label everything, it will be vital later. Breadboard the photocells/resistors circuit according to the schematic in Step 3. Solder after testing. Step 6: MIDI Interface and Software After assembling the Arduino circuit, you need to be able to send MIDI commands to the laptop. In order to do so I used a MIDIsport 4x4 interface (simply because I got it for free). MIDI cable runs from the MIDI jack (Step 5) to the MIDIsport's Port A, and from there to the laptop running MuLab software. Read more: Arduino Laser Harp ### Arduino Simple Memory Game This project is all about creating a simple game to test your memory. I’ll be using a Teensy 3.0 board. (If you want to know more about this board please click here to read a Getting Started Guide). This project is also 100% compatible with the Arduino. Watch the video below https://youtu.be/cDEmH0iguMw Step 1: Parts Required 1x Arduino UNO (or an Teensy 3.0) (Click to see on Amazon) 8x 220 Ohm Resistor 4x LED’s 4x Pushbuttons 1x Buzzer 1x Breadboard Jumper Cables Step 2: Schematics In the picture above you can find the schematics for the Arduino.And also the schematics if you're using a Teensy 3.0 instead. Step 3: Upload the Arduino Code Click here to download the Code.(The code above works great in the Arduino and Teensy) Step 4: Final Step It's done! If you didn't watch the youtube video yet, make sure you watch now. To see the demonstration of this project! https://youtu.be/cDEmH0iguMw Did you enjoyed this project?Please support my work by sharing this project with a friend! Make sure you follow me on instructables so you don't miss my next project! Have a problem?Leave a comment below and I'll help you :) Source: Arduino Simple Memory Game ### Motorized Pulldown Curtain (Phone & Radio Controlled) https://youtu.be/v0-TlGm9BxM I pull my curtain up and down a couple of times a day. If I watch a movie I pull it down and then, I pull it up to get better lighting. I also pull it down when I go to sleep and I pull it up again when I wake up. I want this process to be automatic, if my curtain rises before I wake up, it will be easier for me to wake up when the clock goes off. Just like those night lights that lights up before you wake up this can do the same but with the sun as a source. If you are like me and would like to have your home automated, you might also have considered buying motorized Curtains. But if you have, then you have also realized that they cost a considerable amount. Therefore, I have decided to make my own motorized curtain. This project will be about modding an existing IKEA curtain, adding a motor to it and writing some code. Without further ado, let's begin! Step 1: How It Should Work These two pictures should give you an idea about how I wanted it to work. What they do not tell you is that the manual-control for up and down can be used at any time (even in the initial phase). And the external control sends "requests", you might not always be able to see the curtain, or you might have made it so the phone sends requests automatically. For example you push on the phone that you want it to go up, it will move up if it is in the down position and it will do nothing if it is already up. This makes it so you won't need to think about witch button you push and you can also make it so it sends a request to move up at 8:30 in the morning for example. In this case the external control is a NodeMCU controlled by a phone. But you could choose to use another Arduino with an SMS-shield instead if that would be a better solution for you. The curtain will work with only a remote controller so if you do not need the "phone control" feature you could skip it, the code that I provide will still work. Step 2: Tools & Supplies For this project we will need some tools. Tools Drill-bitScrewdriverComputerSoldering IronCrimp toolWire StrippersGlue gunElectrical tape Step 3: Parts Parts 1: Pulldown Curtain (that fits the window, IKEA is one supplier of these).1: Motor(The one I use is a servo-motor, with the servofunctionality removed. It is supplied with good plastic mounts, this makes it easy to mount it to the curtain).2: Relays (You could also use power transistors for this if you want).1: 5V power supply. (Do not buy a "fake" power supply of ebay[or any other seller], instead wait for a sale in one of your local stores).1: Arduino1: NodeMCU1: Reflective IR Sensor 1: 433MHz Reciever(will be used to take commands from remote).1: Radio remote. (I recommend "Livolo Mini Remote Controller"only because it is the one I will be using in this project and I will provide code that support this remote).1: Project Box1: Switch (For manual control).2: Zip Ties (Used to hold the motor onto the L-shaped mounts) Step 4: Code for the Curtain You do not have to change anything in the code for the Arduino (RullgardinV3.3English) but if you want to be able to use your phone to control the curtain and set timers for when it should rise in the morning and roll down in the evening. Then you will need to change at least two things in the code for the NodeMCU board (ESP8266_CurtainCompanion) I have marked these two rows and one of them is the authentication token for your project in the Blynk app on your phone. The other one is the name and password of your Wi-Fi connection. The code for this project is quite long, please download them if you want to take a look. Read more: Motorized Pulldown Curtain (Phone & Radio Controlled) ### Wearable Wireless Gesture Control With PHIRO Pro + Arduino + Pocket Code Smartphone App (JEDI MODE) Once again, here we are with another tutorial to "Awaken the Force" within you! With the new Star Wars movie just around the corner, we thought it would be fun to use the force to control PHIRO. In this tutorial, we will be using PHIRO Pro with Arduino along with some awesome Flex sensors. "To the tutorial go, we shall. Yes, hmmm!" Step 1: What You Will Need 1) PHIRO Pro - currently available for pre-order on Kickstarter2) Flex Sensors - http://www.amazon.com/SPECTRA-SYMBOL-SYMBOLFLEX-SE...3) Arduino UNO - http://www.amazon.com/arduino-org-A000066-Arduino...4) HC-05 Bluetooth module - http://www.amazon.com/JBtek-Wireless-Bluetooth-Tra...5) Glove - http://www.amazon.com/Radio-Shack-Whole-Screen-Glo...6) Jumper wires - http://www.amazon.com/Gikfun-Dupont-Male-Male-Fem...7) 9V Battery - http://www.amazon.com/Duracell-Alkaline-Batteries...8) Pocket Code on an Android smartphone Step 2: Uploading Standard Firmata to Arduino Similar to our previous instructables, we will need to upload standard firmata to the Arduino board in order to connect to Pocket Code. Here we have used an Arduino UNO, however any Arduino board can be used it it's place. In Arduino IDE, Select the COM Port. Tools -> Serial Port -> Corresponding COM Port Next select your Arduino Board. Tools -> Board -> Your Arduino Board (We have used an Arduino Uno, but you can use ANY Arduino board) Next we are going to select the Standard Firmata. Click on Examples -> Firmata -> Standard Firmata Click on Upload. Step 3: Connecting Flex Sensors to Arduino and Fixing It to the Glove Flex sensors are resistive devices that can be used to detect bending or flexing. The connection diagram for connecting Flex sensors to the Arduino is shown above. We have also shown how we have mounted our flex sensors to the Glove. We secured the sensors by using some bent resisitors, however you could ziptie them as well. Step 4: Connecting HC-05 Bluetooth Module to Arduino Next we connect the bluetooth module to the Arduino board.Connections are as follows: HC05 Tx - Arduino RxHC05 Rx - Arduino TxVcc - 5VGND - GND Step 5: Complete the Arduino Setup With Battery Connections We have used a 9V battery to power up the Arduino board with Bluetooth module. You can see the arrangement in the picture. We do this so that it is easy to mount on your wrist. The more compact it is, the better. Step 6: Program With Pocket Code If you haven't got the Pocket Code app, you can go get it here.You can have a look at the pictures we used for our program. They were inspired by Darth Vader's chest panel (sort of). Make sure PHIRO Pro is on Mode 3 (Bluetooth Mode - press the Mode button on PHIRO till BLUE LED near the display on top turns ON.) For the program, we had 7 conditions in total. Following are the conditions we used and the outputs associated with them. 1) When Index Finger is OPENGlow headlamps' LEDs RED, Background on phone changes to show STOP 2) When Index Finger and Middle Finger are OPENGlow headlamps' LEDs GREEN, Background on phone changes to show STOP 3) When Index Finger, Middle Finger and Ring Finger are OPENGlow headlamps' LEDs BLUE, Background on phone changes to show STOP 4) When full palm is OPENPHIRO moves forward, Glow headlamps' LEDs WHITE, Background on phone changes to show FORWARD 5) When fist is closedPHIRO stops, Turn headlamps' LEDs OFF, Background on phone changes to show STOP 6) When fist is closed and arm is tilted to the left, the phone tilts leftPHIRO turns Left, Glow Left LED YELLOW, Background on phone changes to show LEFT 7) When fist is closed and arm is tilted to the right, the phone tilts rightPHIRO turns Right, Glow Right LED YELLOW, Background on phone changes to show RIGHT Read more: Wearable Wireless Gesture Control With PHIRO Pro + Arduino + Pocket Code Smartphone App (JEDI MODE) ### Arduino LED Matrix https://youtu.be/Eu9ExmHkkIk https://youtu.be/_srC_gPAEP0 In this short tutorial you will learn how to make an Arduino-powered LED matrix. Unlike several other designs, this one uses a "companion" computer to notify the Arduino which LEDs should be powered. I have provided the code for the Arduino, as well as some Java code for displaying text on the LED matrix (this includes a custom-made 7x5 character font). Things to keep in mind: With the software provided, a maximum of 7 rows is possible if you want to display text. It would technically be possible to increase this limit to 15, but I'll leave that to someone else. If you want to just display sound values (i. e you want to light up the LEDs consecutively from the bottom), it would be technically be possible to use up to 127 rows. I cannot release the code for the audio visualization(sorry!) for various reasons Step 1: The Materials For this project, you will need the following materials: An Arduino that has as many digital pins as you want rows and columns combined. (eg, If you want to have a 7x5 LED matrix, you need at least 12 digital pins on your arduino). I used an Arduino Mega 2560 as the Mega has 54 digital I/O pins and was the only which allowed me to make a 20 by 7 grid (I needed 27 pins). In order to connect your Arduino to the LED matrix, it would be helpful to have female to male breadboard wires Enough LED's for your matrix. (With a 7x5 matrix, you need 35 LEDs). For this project, I used the blue LEDs which can be found here The link above also has the resistors you need. You will need as many resistors as you have rows in your LED matrix A wooden board for mounting the LEDs. You'll need some reasonably thin wood for this project. How thick and how big the wood should be depends on how much you want your LEDs to protrude out the front and how far apart you want the LEDs to be spaced. I would recommend a 1 cm spacing between your LEDs(mine were 5mm in diameter). Remember to leave some space on all sides(especially to the left and right of the matrix). A companion computer to connect the Arduino to. Spray paint for the added effect. You will also need various tools: drill (+ a selection of drill bits), pliers, clippers(or wire cutters), and a soldering iron(with solder) Step 2: Cutting/Drilling the Board (The picture above is of a prototype board, not the final product. Use it as inspiration to come up with other cool LED patterns) The first thing you need to construct is the board on which the LEDs will be mounted. Here you have several options on how to structure the LED board. You could design you LED board in the classical, grid LED matrix or you could take a more interesting approach by making a circular LED pattern. In this step you will also have to take into account the spacing of your LEDs. I would recommend having the centers of the LEDs be 1 cm apart from each so that the LEDs(which are 5mm in diameter) will be tightly packed(but not so tightly it is impossible to work with). The size drill bit you should use depends on the size of the LEDs. I bought a special 5mm drill bit so the LEDs would fit exactly. Take into consideration that if you are going to spray paint the board, this will make the holes slightly smaller. Step 3: Spray Painting the Board If you want to make your board a certain color, then now is the time to do that. Before inserting your LEDs, you should consider spray painting your board (as this will not be an option once the LEDs are in place--you don't want to spray paint the LEDs). I chose black as the preferred color for my board as I happened to have a black spray paint on hand and thought it would go well with my blue LEDs. Read more: Arduino LED Matrix ### Arduino Thermometer Its hot here in Los Angeles! Besides the massive drought California is in, Its not as cool around here lately. I wanted to build something to see just how hot it really was, and here it is! Read this instructable and Ill teach how you can turn just a few components you have into an accurate mini desktop thermometer!I hope you enjoy the project and vote for it for the contests! Lets Build It! Step 1: You Will Need... If you would like to make this project, you will need: LM35 sensor (Already had) Plastic Tupperware (Free) Breadboard (Already had) 9v Battery and Arduino 9v clip (Already had) LCD 16x2 (Already had) Arduino Uno (Already Had) Wires! (Already Had) As you can see, you dont need much. In fact I had these pieces lying around my house so this was FREE! Step 2: Test the LCD I wanted to test and see if my LCD still worked. It still worked! Heres how I wired it: LCD Arduino 1...... GDN 2...... 5V 3...... GDN 4...... PIN 8 5...... GDN 6...... PIN 9 7...... – 8....... – 9...... – 10...... – 11...... PIN 4 12......PIN 5 13......PIN 6 14...... PIN 7 15...... 5V 16...... GDN Step 3: Add in the LM35! Take the LM35 and add it in! Heres a helpful guide: (Ignore the periods) [ LM35 (Front) ] […………………. ] [_] I…………I………..I I…………I………..I I…………I………. I (5v)….(A0)…..(GDN) Step 4: Check Your Wiring We don't want any mistakes! Heres a schematic I used for this project Step 5: Code! Now its time to code! Here the code! (Please If you see anything wrong tell me) Step 6: Measure LCD Now its time to make the case Measure the LCD protruding sceen and cut a hole just big enough to squeeze over the LCD. Read more: Arduino Thermometer ### Lettuce for Life - Arduino 101 Based Automated Controller for Hydroponics, Aeroponics, Aquaponics, Etc. Intel Curie SUMMARY A device that can be used to control up to 4 different Hydroponic/Aeroponic Systems at once. The device will control the components of the system and will display notification to a LCD screen and allow the user to customize settings via Bluetooth. This system will be user friendly and optimized for fast growing so that even the least experienced user can grow lettuce with minimal maintenance required. AUDIANCE This instructable was put together to help: A tech/computer person who is interested in growing plants in water(Myself) A traditional gardening(soil) person interested in converting their crops to DWC(Deep Water Culture) A DWC person interested in automating the process An agricultural/farming person that wants to implement new technology into their crops Last but not least, the Curious George INSPIRATIONAL VIDEOS Backyard aeroponics: self-sustaining farm for Wisconsin Hydroponics vs Aeroponics vs Soil BACKGROUND I do not have a garden or experience with growing plants. I'm just a computer geek that decided to quickly grow plants without soil inside my apartment. What inspired the lettuce for life project was the idea of regrowing lettuce. After learning about DWC(Deep Water Culture), I decided to start this Instructable because I found lots of information about DWC, but not a lot about the automation of the systems. GROWING PLANTS I decided to use 5 Gallons buckets to build a Hydroponic and an Aeroponic system that will be monitored by the Arduino device. I will show you how to build the device and both bucket system. If you have an existing DWC system, you can focus on the automation steps to add some automation to your system. DEVICE DESIGN The design has been inspired by power strip packet sniffer article from lifehack.com. Here is the Amazon Link to the exact powerstrip used. This one should work as well. You can come up with your own device design that does not require you to tamper a powerstrip. For example, using a plastic electrical junction box is a better option for those who do not know much about electricity. Quick warning: AC current can kill you. I would not recommend anybody to follow a tutorial on the internet that deals with something that kills, like electricity, if they do not have basic understanding of it. TECHNOLOGY For this project, I chose the $30 Arduino 101 board because it comes with a tiny, low-power Intel Curie module with built-in Real Time Clock(necessary for timer), and built-in Bluetooth. There is also a in built-in Gyroscope, but we will not be using it. I will break this Instructables down to the enabling of each component per step page. Finally, a step for the master code that used to pull information from all the sensors every 5 seconds. Here is a preview list the components used for automation: Intel Arduino 101 - Amazon Link OLED LCD Screen - Amazon Link Solid State Relay - Amazon Link Humidity and Temperature Sensor - Amazon Link Light Sensor - Amazon Link Water level sensor - Amazon Link With no further dues, lets get stated! UPDATE: DON'T FORGET TO VOTE FOR LETTUCE FOR LIFE! Step 1: Setting Up the Location INSTRUCTIONS To utilize dead space, I chose to setup inside my A/C closet. When choosing a location for your project, keep in mind the following : Temperature should not change dramatically. Power Outlet closeby, but not too close where it could get wet from splashes. A place to clamp the light A way to close the area so that the light will not go everywhere WHY IS THE LIGHT PINK? The light looks pink because it is a mixture of Violet-Blues and Orange-Reds LEDs. These lamps are commonly known as Full Spectrum Light. Reds are needed for Chlorophyll A (used in photosynthesis) Blues are needed for Chlorophyll B Greens are reflected by the plant THE SHOPPING LIST Full spectrum Light Bulb with heat-sink - Amazon link Light Clamp - Amazon Link Step 2: Setting Up the Hydroponic Bucket WHAT IS IT? Hydroponics is a method of growing plants using mineral nutrient solutions, in water, without soil. Terrestrial plants may be grown with their roots in the mineral solution. oxygen is delivered to the roots via a air stone inside the water. INSTRUCTIONS In this Instructable, I will be using 2 Hydroponics buckets to grow a single plant per bucket. If you wish to use one only, I still recommend buying the two channel air pump and 2 air stones, just put both air stones in the same bucket. The medium used is hydroton (a clay pebbles and should not be substituted). Wash it before use Do NOT use RIVER ROCKS because they are not pourus. Do NOT use LAVA ROCKS because they have sharp edges and will damage your roots I chose to use a 5 Gallon buckets because: It's structure is stronger than those Walmart tote, and uses less water than it Easy to move it around Easy to change water Easy to clean You will need to make a hole on the lid or create an opening on the edge of the bucket to pass the air hose Fill up your bucket with the water going 1 to 2 inches over the bottom of the net cup, so the lower pebbles are submerged As your roots grow past the net cup, the water level should be lowered THE SHOPPING LIST 2x 5 Gallon bucket Air Pump 7.8L/min - 2 channels - Amazon link 8 ft of flexible air line tubing(cut in half and use 4 ft per channel) - Amazon link 2x Small Cylinder Air Stone - Amazon link 8 in Wide Bucket Basket - Amazon link Hydroponics Clay Pebbles Grow Media - Amazon Link OR You may buy a similar pre-made system like the Hydroponic Deep Water Culture Vegetative System from homedepot.com. This setup ends up being cheaper, but it has a lower quality. Step 3: Setting Up the Aeroponic Bucket WHAT IS IT? Aeroponics is the process of growing plants in an air by spraying the roots with mineral nutrient solutions without the use of soil. Aeroponics grow faster than hydroponics because more nutrients and oxygen gets absorbed since plants are 100% in the air INSTRUCTIONS Get a 5 gallons bucket and lid Drill openings in the lid with the same size of your netcups. The smaller PVC hole is for the water sensor Starting from the water-pump, stack a few PVC male to female couplings. This makes it easier for you to adjust the height as your roots grow inside the bucket. Attach the 360° sprinkler head to the end of it. Create a gap on the side of the bucket to pass the pump's electrical wire DO NOT make the hole too small because you will damage the electrical cord DO NOT make the hole too big because water will leak. This happened to me and I had to tape some orange foam to stop the leak Depending on your lid, you may need to also create an opening in the inside of the lid if it touches the cord THE SHOPPING LIST 5 Gallon Buckets Active Aqua 400-GPH Submersible Water Pump 6 Foot Cord - Amazon link 360° Non-Adjustable Sprinkler Head Threaded Male to Female PVC couplings. Make sure it fits your pump and the sprinkler 2 or 3 inches net cups - Amazon Link 3" works better for regrowing 2" works better for growing for seed Step 4: Growing Letuce WHY ROMAINE LETTUCE? Lettuce can be easily regrown; it doesn't require you to have a green thumb Fast Growth. In DWC, lettuce can go from seed to harvest as fast as 30 days Doesn't require lots of nutrients. Will almost grow on tap water! Doesn't require special light bulb. Will grow under white daylight light bulb Also, care2.com compared the benefits of romaine vs iceberg lettuce. Romaine lettuce has: Less sugar Twice the protein Twice the calcium Three times the Vitamin K Four times the Iron Eight times the Vitamin C Seven times the Vitamin A INSTRUCTIONS Cut Romaine lettuce about 1 - 2 inches from the bottom. Make a nice salad with the top With a spoon, scrape off the gunk on bottom of lettuce stem DO NOT remove outer leafs. Doing so will make your lettuce grow loosely all over the place(see image 3) Lettuce will start regrowing if you simply put it in a plate with 1in water and change the water daily Get a sample of tap water and check the ppm and pH. As you can see in picture Texas tap water was at 114PPM and had a pH of 8.5 Fill up bucket with water until it covers water pump completely, adjust pH, and add fertilizer  pH should be between 6.5 PPM should be about 560 - 840 of nutrients DO NOT over fertilize lettuce. This is the most common mistake people make. Keep nutrient water away from leaves. It can damage leaves by making nutrient burns Fertilizer should have a balance of the following required nutrients for your plant: Primary: Nitrogen(N), phosphorus(P), potassium(K) Secondary: Calcium Nitrate(Ca), Magnesium Sulfate(Mg) There are multiple table for each plant's fertilizer mix values available on the internet Once in a while, check your sprinkler head filter(if you have one) BEST CONDITIONS TO GROW LETTUCE Ideal humidity is from 40% to 80%, with 50% being the best for growth Ideal temperature is 60°F to 70°F during day time, and 50°F to 60°F at night time if you are using LED lights, raise temperatures by 5°C. LEDs do not radiate heat I had better results with 20 hours of Light, 4 Hours of Dark Ideal PPM 560 - 840 ideal pH is from 6.0 to 7.0 ideal cF is 8-12 THE SHOPPING LIST Romaine Lettuce - No amazon link, go to the store and buy it =) Digital LCD TDS Meter Water Tester- Amazon link General Hydroponics GH1514 Ph Control Kit - Amazon Link Hydroponic Lettuce Fertilizer 24-15-36 - Amazon Link Step 5: Setting Up Arduino 101 WHAT IS AN INTEL ARDUINO 101? Arduino 101 is the first widely available development board based on the tiny, low-power Intel Curie module. Easy to use and affordable, Arduino 101 is ideal for education environments, makers and embedded developers. LETS GET STARTED! Connect the Intel Arduino 101 to your PC with a USB A to B cable Download the latest Arduino Software(IDE) Go to http://www.arduino.cc, Navigate to the Download page Chose the Operating system on the right side of the page. Then a donation page will show up before you start the download You can skip it by clicking on "JUST DOWNLOAD" to start download Install the Arduino Software with all default selected options. If prompted, Install any required drivers as well. Open Arduino Software. A new scketch will pop up with 2 fundamental functions, setup() loop() Remember that this IDE is made in Java so if you have troubles opening the IDE, It may be because your PC does not have Java installed By default, Intel Arduino 101 board is not part of the software and needs to be downloaded manually On the Top Menu Bar, navigate to Tools -> Board -> Board Manager. In the Boards Manager window, search for the word "curie" You should see the "Intel Curie Boards. Arduino/Genuino 101". Click in the install button and wait for the board package to be downloaded. When prompted, click install on any popup in Windows. Select the Arduino 101 Board Now navigate back to Tools -> Boards and scroll down to the "Intel Curie(32-bit) Boards" section Select "Arduino/Genuino 101" board Select the COM Port for your Arduino platform Navigate to Tools -> Port select the port that has the label "Arduino/Genuino 101" In my case was COM3 Last but not least,we need to make sure we have the 3 main Curie libraries. Navigate to Sketch -> Libraries - > Library Manager Type the word "curie" in the search box. Install "CurieBLT", "CurieIMU", and "CurieTime" if not installed already. SANITY CHECK Now lets upload a quick example to verify that everything is setup properly. Make sure you have the Arduino connected via USB Navigate and open to File -> Examples ->01.Basics -> Blink. A new window called Blink will popup with some code. In this window, simply click on the "Upload" button Button located on the top left of the window(looks like an arrow to the right). This will cause the code to compile and upload. If everything is setup correct, you should see a green build-in LED blink on your Arduino board(LED located close to Digital pin 13) Read more: Lettuce for Life - Arduino 101 Based Automated Controller for Hydroponics, Aeroponics, Aquaponics, Etc. Intel Curie ### InstaKISS : Networked Picture Frames These frames are connected to the internet, which allows you to instantly send a kiss to a loved one. When my boyfriend and I were in a long distance relationship (for one and half years!), we communicated anyway that we could. We talked on the phone, sent presents and cards, fought through text and would leave our webcams on while sleeping so we knew the other was there if we needed them. We communicated through what was convenient and what made sense, our phones and computers. Letters were written, but less frequently, they had that personal touch, but weren't as immediate. Through all these ways, it still didn't seem enough. I don't think being able to stand next to one another and hold hands will ever be replaced with technology, but it's nice to think of ways to make it more endearing and personalized. We now live together, but just recently I got a chance to make a project that touches upon this remote intimacy that we experienced while apart. This project translates a loving gesture, a blown kiss, into a message. This message is simply a talk bubble that lights up on the receiving end representing the digital kiss that has been sent. In the talk bubble is a red heart, but it can contain any image or whatever words you or your partner want it to. This 'ible will take you through the steps on how to make a pair of networked picture frames. It includes some wood working, circuit building and simple networking. Get connected with a loved one and send digital kisses from afar! This project is dedicated to the one I love. Step 1: Materials First off - special thanks to JON-A-TRON for cutting and assembling the frames for me and helping this project come to be! He is a wood wizard. Both frames are 6 1/2" x 6 1/2" x 2" with acrylic press fit details. The transparency sheet is for printing the heart on, this can be omitted for dry erase markers or another message or graphic you would like to put there. Any Arduino supported microcontroller setup that has WiFi abilities can be used, for this project I used the Intel Edison. Frames [1] 8" x 36" hard maple, 1/2" thick [1] 9" x 5" clear acrylic, 1/8" thick [1] 18" x 8" white acrylic, 1/8" thick [1] 12” x 6” plywood, 3/8” thick [1] 12” x 6” plywood, 1/8” thick [16] size 4-40 screws, 3/8” long [10] hex nuts for size 4-40 screws [1] 1/4” long wood screw [6] 1/2” standoffs for 4-40 screws [1] 12” x 12” chip board, 32pt (1/32”) thick [1] 5” x 10” piece of cardboard, 1/8” thick [1] tube of 5-Minute Epoxy [1] 4” x 4” mesh fabric wood glue Circuit [1] Edison with mini breakout [1] Edison with Arduino dev board [2] 10mm diffused white LEDs [1] NPN transistor (2n2222) [1] Electret Microphone Amplifier - MAX4466 [1] 1K resistor [2] Adafruit Perma-Proto Quarter-sized PCBs or any small perf boards. There is a laser cut piece that is designed for the perma-proto, but you can work around it. [2] 9 volt batteries [2] 9 volt battery snaps [2] 9 volt battery holders [2] slide switches [1] 16mm panel mount momentary button hookup wire Tools: laser cutter 3D printer (optional if you find another way to make the wind funnel from step wood router with 1/8" rabbeting bit clamps mallet - preferably wooded or rubber belt sander palm sander soldering iron 3D printer Step 2: Laser Cut Wood Download the attached files and open the FrameCut.ai file in Illustrator. Check that the stroke width is .001 pt and that the layout will fit within the piece of wood. To prevent scorch marks use application tape on the bottom and top of the wood. Scorch marks can also be removed with little sanding. Depending on what kind of laser cutter you use, it could take a few passes to cut through 1/2” thick hard maple. If using a Metabeam laser cutter, one pass will be all you need. If using a 60 Watt Epilogue laser cutter, it will take a few passes. Protecting the wood is more important if using a laser cutter that calls for more passes. The settings below, and to follow in the next steps, are for a 120 Watt Epilogue, if using a different cutter, do some research on what settings may be right for that machine. Step 3: Laser Cut Acrylic Keep all the protective films on the acrylic pieces after cutting. Settings Speed - 30%, Power - 50%, Frequency - 5000 From white: 1 x whiteTalkbbl From clear: 2 x clearAcrylicWindow Step 4: Laser Cut the Rest Chipboard I needed to preserve my Edisons, so the designs for the receiving board is for a mini breakout that has male headers. The perf board gets screwed on to the board and the wires go through the cut out and connect via female headers. If you are soldering straight to your microcontroller, you may not need the extra long opening. 1 x rxMountBoard 1 x txMountBoard Settings Speed - 15, Power - 50, Frequency - 500 1/8" Cardboard 2 x photoBacking Settings Speed - 30, Power - 18, Frequency - 500 1/8" Plywood1 x rxFrameBack 1 x txFrameBack Settings Speed - 8, Power - 100, Frequency - 500 Step 5: Route a Rabbet A piece of clear acrylic is press fit in the front of each frame to provide protection for the displayed picture. To give room for the picture and it's cardboard backing, we need to route a rabbet around the perimeter. - Identify what will be the inside of each frame, this is the side that will be routed. - Fit a 1/8" rabbet router bit on your wood router and adjust the depth to 1/4". - Clamp the front down if using a hand router and route along the perimeter. Step 6: Build Wooden Frames Glue and Clamp Sides Grab the side pieces of the frames and apply some wood glue to the finger joints. Fit all four together and clamp to let dry. Though it may seem tricky, gluing all four at once is the easiest since you need the opposing sides to clamp against and keep the others in place. Glue and Clamp Front Apply wood glue to the front edge of each frame and fit the front on. To apply even pressure and protect the wood from markings, grab two pieces of scrap wood that are a little longer than the frames. Place them on top and place one clamp at each corner, making sure all edges are pressed together and making contact. Let dry completely. Sand Use a belt sander and palm sander to make even out the surfaces of the joints and to take off any scorch marks. There were a couple cracks in the wood where the clamps were applied too tightly, if this happens fill them in wood filler, let dry, then sand. If you would like to stain your frames, look for a stainable wood filler. Step 7: Add Standoffs to Frames The frames consist of three layers, the outside wooden frame, mounting board and the frame back. Each layer will screw in to the next via standoffs, screws and hex nuts. In this step we will be adding hardware for the frame and mounting board to be connected. Before the frames can come together, the standoffs need to be added. Take one of the mounting boards and mate it with it’s frame. Take a pencil and mark where the holes are on the inside of the frame. Put the mounting board aside and grab three standoffs and the 5-Minute epoxy. Mix up about a teaspoon of the the epoxy and let it sit for one minute to let it firm up a teensy bit. When ready, put the epoxy on the bottom of the standoff and around the perimeter. Carefully position it over the pencil marking. I advise placing all three standoffs at once, putting the mounting board on top and checking the positions of the holes in the span of 5 minutes. This way you can make any adjustments to the standoffs that are needed before the epoxy sets. Do this for the second frame, set aside to fully cure for about 15 minutes. Step 8: 3D Print Wind Funnel The purpose of the wind funnel is to direct the blown kiss to the mic. Download and print the windFunnel.stl file out of PLA or ABS, it doesn’t matter too much what material it’s made out of, it’s more about the shape. This could also be constructed out of wood, wood is just not my medium, so I went with 3D printing which was the quickest and most precise solution available to me. Feel free to construct this any way that works if you do not have access to a 3D printer. Read more: InstaKISS : Networked Picture Frames ### Make Your Own Motorized Camera Slider In this project I will show you how I repurposed two old camera tripods in order to create a motorized camera slider. The mechanical system consist mostly of aluminium and stainless steel which makes the slider sturdy and pretty decent looking. The electrical system consists of an Arduino Nano with LCD, rotary encoder, limit switches and stepper motor. Let's get started! Step 1: Watch the Videos! https://youtu.be/2n3viPBmx-E https://youtu.be/XtpOl8FpkB8 Both video parts will give you a good overview on how to create such a camera slider. But the following steps will still contain some extra useful information. Step 2: Order Your Parts! Here you can find a parts list with example seller for the mechanical and electrical parts of the project: Mechanical: Amazon.com:4x Ball Bearing Slide Bushing: http://amzn.to/2bPalMg 2x Flanged Ball Bearing: http://amzn.to/2bPalMg Timing Belt: http://amzn.to/2bPalMg 1x Pulley: http://amzn.to/2bPalMg 2x 1/4" to 3/8" Convert Screw Adapter: http://amzn.to/2bPalMg 1x Tripod Ball Head: http://amzn.to/2bPalMg Ebay: 4x Ball Bearing Slide Bushing: http://amzn.to/2bPalMg 2x Flanged Ball Bearing: http://amzn.to/2bPalMg Timing Belt: http://amzn.to/2bPalMg 1x Pulley: http://amzn.to/2bPalMg 2x 1/4" to 3/8" Convert Screw Adapter: http://amzn.to/2bPalMg 1x Tripod Ball Head: http://amzn.to/2bPalMg Amazon.de: 4x Ball Bearing Slide Bushing: http://amzn.to/2bPalMg 2x Flanged Ball Bearing: http://amzn.to/2bPalMg Timing Belt: http://amzn.to/2bPalMg 1x Pulley: http://amzn.to/2bPalMg 2x 1/4" to 3/8" Convert Screw Adapter: http://amzn.to/2bPalMg 1x Tripod Ball Head: http://amzn.to/2bPalMg + http://amzn.to/2bPalMg Crossbar Holder: http://amzn.to/2bPalMg Home Improvement Store: 6mm Aluminium, 4mm Aluminium, 8mm 2m stainless steel pipe, 8mm 2m stainless steel rod, bolt+nuts+washers Electronics: Amazon.com:1x Arduino Nano: http://amzn.to/2cHpj7Q 1x A4988 Stepper Motor IC: http://amzn.to/2cHpj7Q 1x 74HC14N Schmitt trigger IC: http://amzn.to/2cHpj7Q 1x 16x2 I2C LCD: http://amzn.to/2cHpj7Q 1x Stepper Motor: http://amzn.to/2cHpj7Q 1x Rotary Encoder: http://amzn.to/2cHpj7Q 2x Limit Switches: http://amzn.to/2cHpj7Q Ebay: 1x Arduino Nano: http://amzn.to/2cHpj7Q 1x A4988 Stepper Motor IC: http://amzn.to/2cHpj7Q 1x 74HC14N Schmitt trigger IC: http://amzn.to/2cHpj7Q 1x 16x2 I2C LCD: http://amzn.to/2cHpj7Q 1x Stepper Motor: http://amzn.to/2cHpj7Q 1x Rotary Encoder: http://amzn.to/2cHpj7Q 2x Limit Switches: http://amzn.to/2cHpj7Q Amazon.de: 1x Arduino Nano: http://amzn.to/2cHpj7Q 1x A4988 Stepper Motor IC: http://amzn.to/2cHpj7Q 1x 74HC14N Schmitt trigger IC: http://amzn.to/2cHpj7Q 1x 16x2 I2C LCD: http://amzn.to/2cHpj7Q 1x Stepper Motor: http://amzn.to/2cHpj7Q 1x Rotary Encoder: http://amzn.to/2cHpj7Q 2x Limit Switches: http://amzn.to/2cHpj7Q Step 3: Create the Mechanical Parts! Here you can download the .svg files and the 123D Design file that I created for my design. Feel free to use them or modify them. Step 4: Create the Circuit! Here you can find the schematic that I created for this project. You can also find it on the EasyEDA website: https://easyeda.com/GreatScott/MotorizedCameraSlid... Read more: Make Your Own Motorized Camera Slider ### Electromagnet Superhero Glove For a class assignment, I needed to make something fabric-based which took an Arduino, some programming, and at least two inputs and outputs. After sketching a few different ideas, I hit on this one: an electromagnetic glove for MagnetoGirl. It sprang to life for me, because magnetism is an invisible force which can seem magical. Also, a superhero can be given life, character, and (the best part) a cool costume. I decided to make an opera glove with some embedded circuitry. The electromagnet is in the index finger of the right hand; the electromagnet (and also the on-Arduino LED for pin13) are on while the red button is held down; there are sensors made of conductive thread on the palm and pad of the ring finger which, when touched together, disable the electromagnet while the button is still held down (but the LED stays on). MagnetoGirl's powers are a bit weak right now, though- her glove still has to be plugged in to the laptop for power! Improvements welcome. Step 1: Materials Glove:-fabric-thread-needle/sewing machine-alternately, a pre-made glove, and then you can skip the next step Circuit:-Lilypad Arduino & USB cable-button switch-soldering iron/solder-conductive thread & needle-wirepower transistor-2 high-resistance resistors (for tie-downs)-electromagnet-something conductive-electromagnet wire Step 2: Make the Glove I made my own glove on my sewing machine. Start with some kind of stretchy, thin fabric. I used dark blue lining that feels like it might be rayon? Double the fabric over and lay your arm and hand down on it. It should be turned so that the stretch is across your hand- such that the fabric will stretch around your fingers once you sew it. If that didn't make sense, try this: your fingers won't get longer while you're wearing the glove, but they will get fatter when you bend them, so orient the stretch accordingly. Trace your hand. Don't do the stupid, lazy thing I did and stick your hand in the sewing machine. Sew a straight stitch just barely out from the line you traced all the way around your hand and up your arm.Test the fit- don't even bother turning it inside out, just stick your hand in it and see how it feels. Good? Good. Now cut off extra fabric, close but not too close to the seam. If you cut it too big, it won't fit right. If you cut it too close, you'll have to mend it. Turn it inside out and voila! You have made an opera glove. Step 3: Sew on Conductive Thread Sensors. (Ignore the electromagnet in first picture) Conductive thread is thicker than normal thread, which makes it a fine embroidery floss. I cut out a paper template in the shape of MagnetoGirl's double magnet logo, pinned it to the palm of the glove, and stitched around it. Be careful not to sew the glove together! The logo is also a sensor, so any extra touches, like the coils on this logo, have to be worked in contiguously. Once the logo is stitched, turn the glove inside out and continue stitching on the inside of the glove (see second picture). If you just pick up a couple of threads with each stitch, you should be able to sew the conductive thread along so that it's invisible when the glove is turned right side out again. Stitch it all the way around to the back of the hand so you can bring the thread up through into the Lilypad later. Do the pad on the ring finger similarly. Step 4: Sew on Lilypad. Sew the Lilypad onto the back of the glove (place it while your hand is in the glove). For now, you should probably sew only through pins that you aren't planning to use, to make it easier to attach the conductive thread later. You can affix it more firmly later. Before sewing down too much of it, add some conductive thread (see note on next step) to the negative and positive pins and run them through the inside of the glove (separately, of course, and using the invisible-sewing technique from the previous step) all the way over to the other side of the Lilypad. You will need loose ends here as well, to attach to the button. Leave open pins 5, 8, 10, and 13. Step 5: Make Electromagnet. Find a nice, conductive piece of metal. It should be small enough to attach to a fingertip (and allow the finger to bend) but big enough that plenty of wire can be wound around it. Get a lot of electromagnet wire. You want a length that has at least an ohm of resistance. Wrap it up! Listen to some Elton John/George Michael  while you're about it. Hook it up to a power source and make sure you can pick something up with five volts. If you can't, you can add more coils, get a more conductive core, or find thicker wire. Read more: Electromagnet Superhero Glove ### Bionic Iron Man Glove One of our prime passions is to motivate the next great minds and ideas by posting informative step-by-step tutorials. To celebrate the launch of our fourth-generation muscle sensor, the MyoWare, we've revisited our most popular tutorial and simplified it down to just four major components! This Instructable will teach you to build a bionic glove using our fourth-generation muscle sensor, the MyoWare. Simply flex your forearm muscle and hear the repulsor charge up, then relax your forearm to fire (lighting up the LEDs on your palm and playing explosion sound effects). As an added flair for realism, when you turn on the system, JARVIS's voice takes you through the boot up and calibration sequence. https://youtu.be/ZIc0kvtYBhU I AM IRON MAN! Be sure to check out our Kickstarter campaign (running until June 6th) to pick up a kit that includes the four major components for this tutorial. As part of the campaign, we are donating one of our sensors for every five backers to Limbitless Solutions, a non-profit that builds and donates 3D-printed myoelectric prosthetic arms to children in need around the world. About Advancer Technologies Advancer Technologies is a company devoted to developing innovative biomechatronic technologies and applied sciences. Additionally, Advancer Technologies promotes all forms of interest and learning into biomechatronic technologies. To help cultivate and educate future great minds and concepts in the field, they frequently post free tutorials on how to build amazing projects using their technology. For more information, please visit www.AdvancerTechnologies.com. Step 1: Gather the Materials Materials Required: Small thin speaker – Adafruit, Sparkfun Lilypad MP3 – Sparkfun 3.7V LiPo Battery with JST connector - Adafruit, Sparkfun Note: Batteries less than 500mAh are not compatible with Lilypad on-board charger! 150mAh is used for this tutorial MyoWare™ Muscle Sensor – Kickstarter NeoPixel 12 LED Ring – Adafruit microSD card - Adafruit, Sparkfun, Amazon Optional, but makes things easier: Sticky-back Velcro* – Amazon Gloves* – Amazon (can substitute with others) Servo wire* – Amazon Tools Soldering Iron & Solder 5V FTDI Cable* - Sparkfun LiPo Charger - Adafruit (suitable for both small and larger mAh batteries) Wire strippers Software Arduino IDE Project files on GitHub repository Recommended reading Lilypad MP3 Getting Started Guide Arduino Getting Started Guide NeoPixel Uberguide (Optional) Foam Armor: The NeoPixel/LilypadMP3/MyoWare setup can be directly attached to any glove without making the painted foam armor as shown in the video. This tutorial will briefly go over how to make the foam armor at the end if you choose to go down that advanced route. However, the steps won't be as in depth as the rest. There is a wealth of tutorials on how to make EPA foam Iron Man armor on the internet (YouTube, TheRPF.com). Materials - 2mm EPA foam sheets - Ebay Dupli-color Toreador Red Metallic Spray Paint - Amazon, Advance Auto Parts Dupli-color Grey Scratch Filler Primer - Amazon, Advance Auto Parts Dupli-color Plastic Adhesion Promoter - Amazon, Advance Auto Parts Hot glue sticks Cardstock printer paper Tools - Hot glue gun Exacto Knife Heat gun Software - Pepakura Viewer Armor files on the GitHub repository * indicates the item can substituted with other similar products Step 2: Rewire the Speaker These thin speakers come with flimsy and fragile wires already soldered to them so we'll want to first remove these and solder more robust wiring. Take out your soldering iron and remove the existing wires from the back of the speaker. Cut off a couple inches of the servo wire, rip off and throw away the yellow wire, and strip ~1/8 inch from each end of the red and black wires. Split one side of the red/black wire just enough to reach both solder tabs on the back of the speaker. Solder the red wire to the speaker's positive (+) solder tab and black wire to the negative (-) solder tab. Photo credit: Sparkfun Step 3: Connect the Speaker to the Lilypad MP3 Next, we'll solder the speaker wire to the Lillypad MP3. From the topside of the board, insert the red/black wires into the Lilypad's left speaker pins (see picture). The red wire should go in the positive (+) pin and the black wire in the negative (-) pin. Solder the wires to the board and clip off any excess wire. You could alternatively use a 2-pin Molex, JST, or some other type of connector so the speaker can be disconnected from the rest of the setup. Photo credit: Sparkfun Step 4: Test the Lilypad MP3 Now that the speaker is connected. We should check to make sure this standard Lilypad MP3 setup is working properly before start hijacking pins for the NeoPixel and uploading new code. The Lilypad MP3 comes with the Trigger sketch preloaded. This sketch will play a sound from the microSD disc when the associated trigger pin (T1, T2, T3, T4, and T5) are pulled to ground.   Copy the sound files from our GitHub repository to the microSD disc. Insert the microSD disc into the Lilypad disc slot. Plug the LiPo batter into the JST battery port on the Lilypad Turn the Lilypad MP3 switch to ON. Using spare wire or alligator clips, connect/hold one end to the Lillypad's GND pin and tap any of the trigger pins. You should hear a different sound clip for each trigger pin. If you don't hear any sound, double check that the positive pin on the speaker is attached to the positive left speaker pin on the Lilypad. Same with the negative pin. If you still don't hear any sound, you might want to contact Sparkfun to help troubleshoot the Lilypad MP3. Step 5: Wire the NeoPixel Ring OK by this point, the Lilypad MP3 should be able to play sound through the speaker you've attached. Now, we're going to work on hooking up the NeoPixel ring to make an awesome glove repulsor. Cut off a reasonable length of servo wire (or three strips of wire if you're not using servo wire) and strip ~1/8 inch from both ends. From the bottom side of the board, insert the servo wire into the NeoPixels pins. The red wire should go in the power (PWR / 5V DC Power) pin, the black wire in the ground (GND) pin, and the yellow wire in the input signal (IN / Data Input) pin. You could alternatively use a 3-pin Molex, JST, or some other type of connector so the NeoPixel can be disconnected from the rest of the setup. Photo credit: Adafruit Step 6: Connect the NeoPixel Ring to the Lilypad MP3 Next, we'll solder the NeoPixel wire to the Lillypad MP3. From the bottom side of the board, insert the NeoPixel wires into the Lilypad's pin shown in the picture. The red wire should go in the positive (+) pin next to the JST battery port (labeled VBATT from below), the black wire in the negative (-) pin, next to the JST port (labeled GND from below), and the yellow wire in the ROT-LEDB pin (yellow arrow in the picture). Solder the wires to the board and clip off any excess wire. Notes: The ROT-LEDB pin connects to the D5 pin of the microcontroller. The VBATT pin is unfortunately not switched which means the NeoPixel is always on when the battery is connected; you'll need to disconnect the battery when you turn off the Lilypad MP3 to avoid draining the battery. Or add a switch between the battery and the JST port. Or use a connector to wire the NeoPixel to the LilyPad and disconnect it when not in use. You may have noticed the Lillypad uses a 3.3V based microcontroller and the NeoPixel is designed for 5V and are scratching your heads a bit on how this setup works. This setup (as recommended by Adafruit) works because the 3.7V of the battery powers the NeoPixel while the control signal is 3.3V and this difference is not too great for the NeoPixel's drivers to overcome. This is why the NeoPixel isn't connected to the 3.3V pin of the Lilypad. Step 7: Test the NeoPixel Ring Time to test the NeoPixel ring. To do this, we'll need to upload new test code to the Lilypad MP3's microcontroller. Connect the 5V FDTI programming cable to the Lilypad and a computer. Grab the Arduino NeoPixel test sketch from our GitHub repository and open it in the Arduino IDE. In the Arduino IDE, click on Tools and make sure the board is set to "Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328". Yup, that's right; you need a 5V FDTI but use the 3.3V board setting... it's a bit unusual. Upload the sketch to the Lilypad MP3. Note: Make sure the Lilypad MP3's power switch is set to ON. You'll get a sync error otherwise. Disconnect the FDTI cable, connect the LiPo battery, and turn the Lilypad on. The NeoPixel should turn on and loop through two light sequences. The first is a "rainbow comet" where the light travels around the ring in a clockwise fashion changing colors as it goes, The second will "wipe" along the ring coloring each LED green and then pulse in brightness a few times before "wiping" the LEDs off. These are the same sequences that occur when turning on the completed glove. Step 8: Wire the MyoWare Muscle Sensor Almost done! All we have left is to connect up the muscle sensor and upload the final Arduino sketch. Measure the distance from your wrist to your elbow, cut off an equal length of servo wire, and strip both ends. Insert the yellow wire into the muscle sensor's output signal pin (SIG), the red wire into the power (+) pin, and the black wire into the ground (-) pin. Note: Unfortunately, the servo wire color order does not match the sensor's pin order so make sure you're connecting the wires correctly. Solder the wires to the muscle sensor board and clip off any excess wire. You could alternatively use a 3-pin Molex, JST, or some other type of connector so the sensor can be disconnected from the rest of the setup. Step 9: Connect the MyoWare Muscle Sensor Next, we'll solder the MyoWare wire to the Lillypad MP3. From the bottom side of the board, insert the servo wire into the Lilypad's pins (see picture). The red wire should go in the 3.3V pin, the black wire in the ground (GND) pin, and the yellow wire in the first trigger pin (T1). Solder the wires to the board and clip off any excess wire. Step 10: Test the MyoWare Muscle Sensor You'll want to test the MyoWare to be sure it is setup correctly before uploading the new Arduino code. Snap three new electrodes onto the MyoWare sensor. Peel off the the electrodes and stick the MyoWare sensor to your forearm. Place one of the electrodes that are connected directly to the MyoWare board in the middle of your forearm muscle with the other electrode placed along the length of the muscle. Place the reference electrode nonadjacent to the muscle body that the other electrodes were placed. Plug the LiPo battery into the LilyPad and turn the LilyPad on. Turn the MyoWare sensor on if it isn't already. The MyoWare sensor power LED should turn on at this point. If it does not, check your connections and make sure the LiPo is charged. The second LED represents the output signal. If this LED does not turn off when your muscle is relaxed, check your connections and electrode placement. Next, make sure the MyoWare sensor is setup correctly by flexing your forearm muscle. The second LED on the sensor board should light up when you flex your muscle and turn off when you relax. If it does not, check your connections and electrode placement. Step 11: Upload the Arduino Sketch You're so close! By now... the speaker has been tested and plays the sound clips from the Lilypad, the NeoPixel has been tested and the Lilypad is able to turn the MyoWare sensor has been tested and it's on-board LED lights up when flexing It's time to upload the Arduino sketch. Connect the 5V FDTI programming cable to the Lilypad and a computer. Grab the Arduino IronManRepulsor sketch from our GitHub repository and open it in the Arduino IDE. In the Arduino IDE, click on Tools and make sure the board is set to "Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328".Yup, that's right; you need a 5V FDTI but use the 3.3V board setting... it's a bit unusual. Upload the sketch to the Lilypad MP3. Note: Make sure the Lilypad MP3's power switch is set to ON. You'll get a sync error otherwise. Disconnect the FDTI cable. Step 12: Test the Completed Hardware Because you've been testing the system step-by-step, all that's left is to test to make sure the sketch was uploaded correctly. Snap on your MyoWare sensor, plug in the battery, and turn the bionic system on. You should hear the start up SFX as the NeoPixel goes through its start up lighting sequence. Flex your muscle You should hear the power up SFX as the NeoPixel glows a dim red. Relax your muscle You should hear the firing SFX as the NeoPixel intensifies to a bright white. After the firing sequence finishes, you should hear the power down sequence as the NeoPixel dims back to red. Troubleshooting Tips (besides going back and testing phase individually) If you feel like you have to flex too hard to get the system to trigger, you have a couple options: Increase the MyoWare gain - get a screwdriver and turn the gain potentiometer on the sensor clockwise to increase the gain of the sensor. Warning - this could increase false triggering. Decrease the system threshold in the Arduino code - the default threshold is just a suggestion you can increase it to make the system require a stronger flex to trigger or decrease to require a weaker flex. Warning - this could increase false triggering. Adjust the MyoWare placement - improper electrode placement can lead to a smaller signal detected by MyoWare If you are getting false triggering of the system, you have a couple options: Decrease the MyoWare gain - get a screwdriver and turn the gain potentiometer on the sensor counter-clockwise Increase the system threshold in the Arduino code Adjust the MyoWare placement - improper electrode placement can lead to muscle cross-talk. Cross-talkbbb is when the signal from an adjacent muscle gets mixed in with the intended muscle's signal. Step 13: Attaching the System to the Glove If you aren't going to build the foam armor for the glove, the next step is pretty straight-forward. Grab either the hot glue gun or the sticky backed velcro and the glove you've picked out. Attach the Lilypad and the speaker to the back side of the glove. Attach the NeoPixel to the middle of the glove's palm. Congratulations! You've just built your own bionic blaster glove. Now get started on the glove for the other hand! Step 14: (Optional) Making the Foam Armor If you haven't already, grab the armor files from the GitHub repository. Use Pepakura Viewer to open the finger armor files and print them on the cardstock paper. Open the palm armor files in Adobe Reader and print them on the cardstock paper as well. Cut out the paper pieces with an Exacto knife. Put on the glove and hold the finger armor pieces in their intended place to see if they are too big/small If they are not sized properly, you'll need to adjust the scale in Pepakura. Click on 2D Menu, go to Change Scale, and select either Scale Factor, Increase Scale 10%, or Decrease Scale 10%. Scale Factor will allow you to change the scale in increments other than 10% You might need to repeat this step a few times before you get the scale correct. The armor in this tutorial was increased by 10% and then trimmed one at a time to get the fit to feel correct. Once satisfied with the scale, use the cardstock pieces and a sharpie pen to trace their outline on the foam sheets. Make sure to label the foam pieces accordingly. To make the opposite hand, simply flip the pieces over. Cut out the foam pieces with the Exacto knife. Cut 45 degree V-shaped grooves along the fold lines to get crisp bend lines. Glue the pieces together with the hot glue. For the palm armor, attach the knuckle piece to the lower palm piece first making sure to place the pieces that boarder the repulsor such that they form as close to perfect circle as you can. Take your time and make sure to get this part right. These are the most important pieces since the repulsor is the focal point of the armor and it will really stand out if the pieces boarding the circular repulsor aren't quite right. Only glue the top palm upper piece at the end opposite of the Velcro section. This was used to embedd the speaker into the top of the glove. Figure out how you want to position the Lilypad MP3 between the glove and foam armor upper palm. Cut a slot in the upper palm bottom section to allow the speaker to be slid through. Position the speaker between the top and bottom upper palm pieces and cut out a circle in the top piece smaller then the diameter of the speaker. If you used a connector to attach the NeoPixel to the Lilypad, cut a hole in the lower palm and thread the wire through such that the NeoPixel can be Velcroed/Glued to the foam armor but the wire can be threaded between the foam armor and the glove to the Lilypad on the upper palm. Gently wisk hot air over all the pieces's surfaces with the heat gun to seal the EPA foam. Don't heat the foam too much or it will melt. Quickly waving the gun back and forth over the foam should be enough. As the foam seals, you should be able to see the foam turn slightly shinier. Makes it easy to tell were the hot air has passed over already. Apply a couple coats of plastic adhesion promoter on all the pieces. Follow instructions on the can. Apply a couple coats of the primer. Follow instructions on the can. Apply a couple coats of the toreador red paint. Follow instructions on the can. Apply a couple light coats of a clear coat to protect the paint. Hot glue the painted pieces to the base glove. Velcro the Lilypad MP3 to the back of the glove and fit the battery where ever there is room. Hot glue the NeoPixel to the palm. Source: Bionic Iron Man Glove ### Arduino Voting Machine This instructable will teach you to build a simple Arduino based Voting machine using simple components such as push buttons and LCD. The highlighting feature of this system is that Serial Monitor in Arduino IDE is used to perform the polling operation no other external applications needed. Key Features: Every step of polling operation will be under control of the supervisor. Password enabled security system. Poll results can be obtained instantly. Voter will be aware of the candidate he is voting for. Step 1: PARTS REQUIRED This simple project can be done with minimal components. The parts list are given below Arduino Uno - 1 16x2 LCD -1 Push Buttons - As required Potentiometer 100k - 1 Breadboard - 1 Connecting Wires - As required. Step 2: DESIGN The design of the voting machine was given here. The Arduino reads the keypad input by the process of Polling. A 16x2 LCD was connected to the PORTD in 4 bit mode. This system will be operated by plugging the Arduino to the your PC and controlling using Serial monitor of Arduino IDE. Step 3: PUT IT TOGETHER Now connect the buttons to a breadboard as shown in the diagram. You can increase the number of buttons you use based on the number of candidates for the poll. Afix the LCD along with the potentiometer to the board and finish up all the connections as shown in the schematic design. Step 4: ADD YOUR ARDUINO Now connect your Arduino to buttons and LCD in the breadboard. You are now all set with the hardware. Step 5: CODE AND WORKING OPERATION You can read the detailed working operation and code in this website http://www.gadgetronicx.com/arduino-based-voting-system/ . Upload the code to your arduino after obtaining it from that site. Step 6: OPERATING WITH SERIAL MONITOR Now you are ready to go and operate your voting machine. Connect your Arduino to the PC using the USB. Now open the Serial monitor to conduct the poll. Enter the password to get access to the system. V - Allow Voter to caste their vote D - Display the Vote tally. Take a look at the snap shot of serial monitor to get understanding of its working. Step 7: WORKING VIDEO https://youtu.be/j4ijsR4lFe8 See the outcome of this system in this video which is uploaded to official channel of Gadgetronicx . Source: Arduino Voting Machine ### TOP 5 PC-BASED OSCILLOSCOPES FOR THINKERS AND MAKERS Every serious maker out there will surely tell you the importance of having a good oscilloscope. An oscilloscope is something you should have if you really consider yourself a maker, and fortunately enough, the cost of quality oscilloscope has been on the decline for some time now, so you don’t necessarily have to get the big bucker ones to get started. Small size PC based USB scopes are an excellent alternative, and they do feature a host of capabilities that will give you the performance, accessibility, portability you will need and also cost-effectiveness as a maker. We could possible underestimate the potential of a PC-based USB oscilloscope because of the sheer small size as compared to benchtop versions. But as the processing power available on today’s PCs is increasing, high-end USB PC-based scopes are sprouting out which are increasing rivaling their benchtop partners and even with the advantage of a lower cost. Not only are PC based scopes significantly easy to use, but the idea of using a PC for the processing means, user can do more with the files, write a custom program to interface with the scope to maximize the full scope potential and many more. In this article, we will mention some lovely USB based scopes (not in any order) for every maker, thinkers, and upcoming electronics engineers. Owon VDS1022I The Owon VDS1022I is a PC based scope from the Chinese manufacturer Owon that features a 25 MHz bandwidth and maximum 1 GS/s real-time sample rate. The scope is a multi-channel oscilloscope  (2+1) channel with a multi-trigger option: Edge, Video, Slope, Pulse, and Alternate. One exciting feature about the scope is that it is capable of displaying two separate waveforms on the same screen. The scope includes isolated USB for protection, RS232 port, USB port, LAN port, and a probe compensation. The scope is available for purchase for about $104 on Amazon Hantek HT6022BE The Hantek HT6022BE is an inexpensive PC based scope for the maker on a budget. The PC based scope is capable of 20 MHz of bandwidth, a multi-channel scope, 48MS/s sampling rate, and quite portable allowing for easy carry. The Hantek HT6022BE cost around $65.55 and available for purchase on Amazon. Perytech DSO-U2200 The Perytech DSO U2200 USB oscilloscope carries a price tag of $110 and also comes with a slight software design from the conventional window design to a more oscilloscope like environment allowing it to be easy to use without the need of manuals. One significant advantage of the Perytech scope as compared to others is its productive software environment with features automatic measuring functions, including maximum value, minimum value, frequency, and period. A stacking function allows up to four USB oscilloscopes to be stacked as an eight-channel oscilloscope. The scope also features logic analyzer, and the PC based scope is capable of 60MHz Bandwidth with a sampling rate of 240 MS/s. The scope is available for purchase on Amazon. Read more: TOP 5 PC-BASED OSCILLOSCOPES FOR THINKERS AND MAKERS ### DRS Oil Container An oil container that can automatically order new oil via Amazon DRS when the oil level in the container is low. Things used in this project Hardware components Arduino MKR1000 × 1 Ultrasonic Sensor - HC-SR04 (Generic) × 1 Jumper wires (generic) × 1 Software apps and online services Arduino IDE Amazon Web Services AWS SNS Amazon Web Services Amazon Dash Replenishment Service Story Motivation Have you ever craved to eat something but need to postponed cooking it just because you run out of oil? Now, this won't happen again with the DRS Oil Container, an oil container that can automatically order new bottle of oil when you're running low of it. DRS Oil Cointainer The DRS Oil Container is equipped with ultrasonic sensor acting as level sensor and connected to the Genuino MKR1000. The Genuino will initiate a purchase with the help Amazon DRS API when the sensor reading is below the threshold value. Hardware setup This project only involves the use of Genuino MKR1000 and HC-SR04 sensor. The HC-SR04 is connected to the Genuino MKR1000 as shown in the schematics. The Trigger and Echo pin of the HC-SR04 can be connected to any digital pins of your choice. The sensor is then placed under the container's cap. Sensor placed under the container's cap Software setup This project utilize AmazonDRS Library. The library is available on GitHub together with tutorial to setup DRS with push button. Before you start coding, there few setups need to be done in order to enable the Genuino MKR1000 to initiate a purchase via the DRS API. 1. Create Amazon Developer account 2. Create SNS Topic 3. Create a login with amazon (LWA) security profile Create security profile for LWA Please take note of your Client ID and Client Secret as these need to be used in AmazonTokens.h file 4. Create a Dash Replenishment Device Create the Device Name, Model ID, and upload a transparent png img (<1MB) Create slots ASINs are Amazon's version of unique product identification Please take note of the devices Model ID and the respective Slot ID 5. Authorize the device created earlier to make purchases and get authorization code grant After you finish editing the AmazonTokens.h file and add your refresh_token, your Genuino is now ready to initiate a purchase Demo In this demo, water is used instead of olive oil. The Genuino initiate a purchase when the level is below 5 cm. Email confirmation of olive oil purchased Conclusion The project is not limited to replenishment of oil only but can be extended to any type of liquid container. Schematics Hardware Connection Schematics of connecting the level sensor to the Genuino MKR1000 Code Code Arduino Code for the DRS Oil Container /******************************************************************* This code implement the Amazon Amazon Dash Replenishment API to automatically buy something from amazon when the sensor reading is below the threshold value. This code utilize the WiFi101 library, AmazonDRS library, Ultrasonic Library and ArduinoJson library. It is the modified version of the amazonDashButton found in the AmazonDRS library example. Credit to Brian Carbonette, J.Rodrigo and Benoit Blanchon for writing the AmazonDRS library, Ultrasonic Library and Arduino json library respectively. AmazonDRS library https://github.com/andium/AmazonDRS Arduino json library https://github.com/bblanchon/ArduinoJson Arduino ultrasonic library https://github.com/JRodrigoTech/Ultrasonic-HC-SR04 WiFi101 library https://github.com/arduino-libraries/WiFi101 *******************************************************************/ #include "AmazonDRS.h" #include "Ultrasonic.h" AmazonDRS DRS = AmazonDRS(); //WiFi creds ---------------------------------------------------------------------------------- char ssid[] = "****"; // your network SSID (name) char pass[] = "****"; // your network password (use for WPA, or use as key for WEP) //------------------------------------------------------------------------------------------------------ #define slotNumber 1 //This will vary for multi slot devices const int TrigPin = 4; //DIO number of the trigger pin const int EchoPin = 5; //DIO number of the echo pin const in Bottle_height = 25; //Insert containers height (based on sensor position) static long sensorTime = 0; //millis of last sensor reading static long waitingTime = 0; //millis of last purchase static String slotStatus = ""; //boolean which depicts if slot is available for replenishment static String slotId = ""; //unique slot id ex: 0a5038b7-7609-4b81-b87e-3e291f386324 Ultrasonic ultrasonic(TrigPin, EchoPin); void setup() { Serial.begin(115200); //pinMode(EchoPin, INPUT); //pinMode(TrigPin, OUTPUT); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } //Start up DRS DRS.begin(ssid,pass); //initialize slots DRS.retrieveSubscriptionInfo(); //check slot statuses slotStatus = DRS.getSlotStatus(slotNumber); slotId = DRS.getSlotId(slotNumber); } void loop() { //Check for level reading //if the slot status is true proceed to request replenishment for the associated slot if (levelCheck() && ((millis() - waitingTime) > 10000)) //wait 10 secs { //Check if slot is available, if so replenish if(slotStatus == "true") //if the product in slot are available { waitingTime = millis(); //we have a match! replenish the products associated with that slot! DRS.requestReplenishmentForSlot(slotId); Serial.println("Buy new"); } else { Serial.print("Sorry, slot "); Serial.print(slotId); Serial.println(" is not available at this time"); } } } bool levelCheck(void) { delay(1000); int sensor = ultrasonic.Ranging(CM); int level = Bottle_height-sensor; Serial.print("Level(cm): "); Serial.println(level); if(level < 5 && level > 0 && ((millis() - sensorTime) > 30000)) //wait 30 sec { sensorTime = millis(); Serial.println(" Level Low!"); return true; } else { return false; } } Source : DRS Oil Container ### Replacing a dead iPhone battery About a week ago, in preparing to run some errands, I plugged my iPhone 4S into the charger in my car so that I could stream Pandora while I drove. Oddly, a “this accessory may not be supported” message appeared on-screen; when I unplugged and re-plugged the iPhone to the charger, it didn’t reappear, so I didn’t think anything more of it … until a half hour later, when the iPhone again alerted me, this time with a “low battery” message. For some reason, attempting to charge the battery was instead rapidly drainingit; unplugging the phone from the charger restored the normal discharge-via-use rate. But by that point, the “damage had been done;” none of the chargers I tried would restore normal operation, and the battery was soon completely drained. This was my work (Verizon carrier, versus personal AT&T carrier) phone, and it was a Friday, so instead of switching to a different handset right away I ordered a replacement battery (complete with toolset) for $20 from Amazon with free Prime two-day shipping. It arrived mid-day the following Monday, and I set to work on the swap right away. Bafflingly, the battery-plus-tools didn’t come with any installation instructions; fortunately, iFixit came through once again. I recommend that you supplement this writeup with a perusal of their battery-replacement guide, which also includes additional images. I’ll begin with a couple of views of the patient: When I opened up the product box, here’s what tumbled out (again, note the lack of an instruction sheet): The included “pentalobe” and Philips screwdrivers were surprisingly well-made. I also ended up using the plastic tool; I never figured out what the other two metal-constructed tools were for (did I mention that the vendor neglected to include any instructions?). Read more: Replacing a dead iPhone battery ### BristleSwarm: Explorations into Swarm Robotics A growing branch of robotics research is the study of swarm organization, emergent behavior and artificial intelligence through the use of autonomous robotic agents. In this Instructable, I’m going to walk you through a one week project that I created as part of my Masters Architecture studies at theCalifornia College of Arts in collaboration with Prerna Auplish. The studio, run by Jason Kelly Johnson and Michael Shiloh, leveraged robotics and digital fabrication as a method to explore the relationship between architects and the tools they use. Our goal was to create a drawing machine with a swarm of robots in as little time as possible and with a fairly limited understanding of electronics and robotics. Oh, and also with not too much money! This project was the inspiration and jump off point for the Swarmscapers project, which has also been published as an Instructable. In the course of that week long exploration we were able to barely scratch the surface of swarm behavior, and opened up a . In order to more fully explore the potential of these little guys, we’re releasing them into the wild to see what other behaviors the Instructables community can discover! This Instructable will teach you some basics about how to work with robotics, how to program and work with arduino and we’ll also play around with the grasshopper plugin Firefly created by Jason Kelly Johnson and Andy Payne. So, click on through and we’ll get started! Step 1: Why Swarms? But before we get too far ahead of ourselves, let’s spend some time talking about swarms. What’s so cool about a swarm that makes it worth studying? I’m glad you asked! Swarms are all around us. You and I are both members of a swarm. We are constituted of an enormous swarm of brain synapses that never stop firing. Steven Johnson argues in his book Emergence, that cities can be understood as the resultant emergent behavior of a swarm. It might be easier to answer what isn’ta swarm. Swarms are capable of making very smart decisions but are comprised of drones who aren’t even aware that this high level thinking and computation is going on. How does this happen? When we talk about swarms, we usually imagine a flock of birds (or BOIDS) or maybe a swarm of bees. That’s because the easiest swarm behavior to visualize is how a swarm moves together, sometimes called flocking. We’re actually very good at understanding this particular type of swarm behavior. There are manymathematical models that accurately simulate this phenomenon, which is pretty cool! The highly coordinated behavior of a flock of birds can be described with a few very simple rules: Separation: Make sure you don’t get to close to any of your friends. Alignment: Try to be going in the same direction as the guys next to you. Cohesion: Fly towards where you see everyone else is. Outside of those few rules, there’s no other type of coordination happening, so the individual agents are really quite simple, but together are capable of doingsome cool stuff. But the robot we’re going to build isn’t even going to be that smart… yet. We’re going to build a bristle bot that will act as a Braitenburg vehicle and simulate the behavior of a BOID swarm with an attractor (ie a flashlight). So enough talk, let’s get to work. Step 2: The Shopping List First up, we’re going to have to pick up some supplies and get access to some tools. I’ll walk you through the specific way I decided to put my robots together, but the basic principles are easily transferable to different designs. The core mechanism of a steerable bristlebot is to have two vibrating DC motors attached directly to two forward leaning bristles. Under compression, the bristles make the robot fall forward and then bounce straight back up, causing forward motion. The reason we originally decided on bristles as a platform is that they’re mechanically simple and easy to assemble. If you’re going to build a swarm of something, keeping things simple works in your favor. With that in mind, here’s the list of parts that I used to get my swarm rolling. I’m a fan of Adafruit.com as a source for supplies due to their support and the wonderful tutorials that are linked to their products, but many of the items I’ll be linking are available all over and probably for cheaper prices. Tools: 1. Soldering Iron If you’ve read this much, you probably already have a soldering iron. If not, consider investing in one. They’re fairly affordable and enable you to sculpt the path of electrons to suit your ends, which is literally what wizards do. 2. 3D Printer or Laser Cutter If you’ve got access to a laser cutter, you can use the attached .dwg to cut out the chassis. If you’ve got access 3D printer, you can use the attached .stl to print out a body. If you don’t have access to either of those, you can design your own, which may be the best option. Mechanics/Robotics: 1. Vibrating DC Motors (2x each) You’ve got two options here. You can buy cheap DC motors and make your own with some wire, a bit of epoxy and a small weight, or you can buy a pre-made weighted motor instead. The major downside to the cheap DC’s are that the contact that you solder to are inevitably the cheapest part and will fail after very little fatigue. The nice part is that they’re less than $2 a piece! 2. Microcontroller (1x each) You can use basically any arduino you want to. I decided to go with Adafruit’s 5V Trinket as my controller, because they’re small, cheap and it has just enough pins for what I wanted to do. 3. Prototyping Boards (1x each) One downside of making a robot that relies of vibration to run is that it means it’s going to constantly trying to shake itself to death every time you turn it on. That means a solderless breadboard isn’t going to do us any favors. I’m a big fan of Adafruit’s perma-proto boards. These quarter sized ones are just big enough for what we’re trying to do. 4. Electronics PN2222 Transistors (2x each) – These will allow us to control the speed of our motors so we can steer   1N4001 Diode (2x each) – Needed to get the transistor circuits to work. Resistors (5x each) – I used 560 Ohm resistors, but these 330’s should work too. CdS photoresistor (2x each) – These will be the sensor suite of our robots. On/Off Switch (1x each) – Much easier than tearing the battery out. Female Header Pins (1/2x each) – Used for mounting your trinket to the breadboard. Solid & Stranded Core Wire – 22 AWG, make sure you’ve got a few colors to keep things straight. LED’s, Multiple Colors (1x different color each) These will be used for our vision tracking system. 5. Power Supply (1x each) Okay, so you’ve got two options for your power supply. You can either use a9V battery holder and matching barrel jack or you can get fancy and get yourself a lithium polymer battery and charger that you can integrate with your circuitry. 6. Bristles (2x each) I found the bristles I used at the local Ace hardware here in San Francisco, but you can use any type of toothbrush or cleaning brush you find, as long as they’re symmetrical. Important: the bristles have to lean in the direction of travel in order to operate as we need them to. You’ll probably have to modify them to get the desired effect, so be prepared to experiment. 7. A Chassis This can be as complicated or as simple as you’d like it to be. The first bots I made were just hot glued to a sheet of acrylic and it worked just fine. The later versions were laser cut acrylic from the attached cutfile. I’ve also got a 3D printable chassis that you can use if you like. The chassis can give your little swarm bots some character, so have fun on this one! Step 3: Assembly To assemble your robot, you’ll have to solder all these parts onto a board and assemble the chassis, then stick it all together and you’ll have yourself a functional BristleSwarm. So, ladies and gentlemen, start your soldering irons. I’m going to assume you have some basic knowledge of how to solder and lay out a board. If you don’t, there’s quite a few guides right here on Instructablesthat’ll help you out. 1. Circuit: Take a look at the attached schematic and the close up photo of the finished board for reference. To simplify , it’s two transistors, each controlling a DC motor, two photocells, and an LED for tracking. Here’s a great tutorial on Adafruit that explains the basics of using PN2222’s to control a DC motor, and here’s another one on photocells. I squeeze it all in on a trinket, but you can use whichever controller you like. 2. The Chassis: For the chassis design, just make sure you’ve got your bristles separated and each motor is mounted pretty close to each bristle. Beyond that, you can get as fancy or as simple as you like. My first prototype was quite literally a piece of spare acrylic and some hot glue, which then got stripped down and cut up for the second prototype. Now I’ve got a 3D printable body that’s simple to mass produce and works with all the components that I’m using now. Lasercut Chassis: Take a look at the images above. I assembled this one with small zip ties and hot glue. I can’t recommend the hot glue attachments, but they get the job done and are easily repairable. Whatever you use as a fixer, make sure it’s durable. The locomotion method this platform uses is based off of nonstop shaking, so every joint will be constantly fatigued. That’s why I designed the next chassis For more detail: BristleSwarm: Explorations into Swarm Robotics ### Excellent starter kit for people interested in learning about Arduino Arduino is an easy-to-learn prototyping platform that lets you create interactive electronic projects. This Arduino compatible kit is the one I recommend to people who ask me how to get started. The reason I recommend it is because it's very cheap and it has a bunch of components that would cost a lot more if you were to purchase them separately. Two things it doesn't have, but should if you really want to have fun with Arduino: a potentiometer and a servo motor. This kit, which has these components and many more, is available for about twice as much as the basic kit above. Source: Excellent starter kit for people interested in learning about Arduino ### From Trash to Treasure: How to Resurrect a Minitel Terminal One of us (Mailland) grew up in Paris in the 1980s, surrounded by advertisements for racy “pink” chat rooms, accessible through terminals connected to France’s Minitel network. They were a lucrative part of the wider Minitel economy, which also let you send messages, check bank balances, and read news. By 2000, as the Internet displaced the Minitel network, the billboards started being replaced by piles of terminals abandoned by trash cans. In 2010, while researching Minitel law and policy for a project that became the first English-language academic book on Minitel, I’d collected over 15 terminals of various models, when I met an American home brewer (Driscoll) who wanted to play with them. We quickly completed our first project: turning a terminal into a Twitter client. Then we turned it into a webcam client; then, into a videotex slideshow display. We found a lot of help along the way because we weren’t the only people unwilling to let these stylish terminals end up as e-waste. Indeed, there’s now a vibrant Minitel hacking scene. You don’t need to be in France to try any of these upcyling projects either. Minitel was an open platform, and a number of failed attempts to replicate Minitel’s success means there are localized terminals to be found, with ones for Ireland, South Africa, and the United States, among others. However, a lot of the guidance we relied upon is in French, so here we’d like to offer an English-language introduction to Minitel hacking. The first thing you’ll need is a terminal. French terminals are plentiful on eBay, and despite their age, very sturdy. A reasonable offer shouldn’t top US $23 (shipping is the issue, thanks to relatively heavy cathode ray tubes. Expect that to cost at least $90 to North America). We recommend getting the “1B” model, the sturdiest and most versatile. Steer away from Magis, M2, or M12, each of which present problems for the home brewer. Your terminal must have a five-pin DIN connector in the back. If you’re in North America, or anywhere else that uses 110-volt AC power, you’ll need a step-up transformer to feed your terminal with 220-V AC power (unless you’ve managed to obtain a native U.S. version, of course!). If all goes well, you’ll be able to turn it on, and be able to type on the keyboard and see characters echoed to the screen. Our next step was to connect the Minitel 1B to a laptop running Linux. With the help of Google Translate, Driscoll found instructions to build a simple circuit for connecting a Minitel’s DIN serial port to a standard RS-232 port, posted by Frédéric Leperchois and Furrtek. This particular circuit—which shifts signal voltage levels appropriately between the DIN and RS-232 ends—has a long history in French hacker culture, appearing in 1980s computer magazines and “download kits,” enabling PC owners to use their Minitels as modems. We’ve reproduced the schematic here with English labels. We laid out the circuit and sent a stream of data to the Minitel from the laptop. (Computers with RS-232 ports are becoming harder to find, so you may have to use an RS-232–to–USB converter cable). On our Linux system, the Minitel was connected to the port mounted at /dev/ttyS0. We used the agetty utility to create a console interface set to 4,800 baud, 7 data bits, and 1 even parity bit. We set the port speed on the Minitel by hitting P and the FNCT button together, followed by 4. Instead of nice alphanumeric characters, however, we got strange symbols on the screen. The problem was that Minitel was expecting not ASCII but videotex. (Older British and Irish readers will be familiar with videotex from its use by the Ceefax and Aertel television information systems and the BBC Micro.) We had to switch the terminal into the ASCII-derived téléinformatique mode, a little-known feature of the Minitel 1B. After we pressed FNCT+T followed by A, the familiar Linux prompt appeared. Within a few days, we had put together a Linux system monitor, an ASCII art webcam, and a Twitter client. We were hooked. Thanks to Frederic Cambus, maintainer of a large repository of resources, we got our hands on the official technical specifications [PDF], which spell out exactly how Minitel graphics were encoded and displayed. Driscoll’s rudimentary French began to include technical jargon such as des caractères semi-graphiques. Using the specs, we built a simple Arduino Uno–based videotex server. We connected the serial communication pins on the Arduino to the Minitel’s DIN port and used the SoftwareSerial library to write videotex. The Minitel serial port was designed to interconnect with peripherals using a logical-high threshold level of 2.5 V or more and a logical-low threshold of 0.4 V or less. The Minitel detected Arduino’s 5-V signals without a problem, but we needed a logic-level converter for the Arduino to reliably detect the Minitel’s 2.5-V signals. With the help of an old 16-bit teletext authoring tool, we created Minitel screens and animations. We’ve exhibited this system to provoke conversation about the role of openness in the design of digital networks. In recent years, the Minitel revival scene has seen an influx of participants, ranging from old-timers to teenage geeks. Legendary pink site 3615 SM has now been ported to the Internet and was recently demoed during an exhibit in New York City. Christian Quest has ported other services, including Minitel’s electronic phone-book service, complete with up-to-date information extracted via France Telecom’s public API. Github lists dozens of repositories tagged “minitel” including those by Eric Sérandour. A French engineering school has even introduced Minitel as part of its curriculum, assigning students the task of “giving a second life to Minitel.” The Minitel community is not shy about sharing tips and code. We hope you join us and reanimate these terminals by unleashing your creativity. This article appears in the March 2019 print issue as “From Trash to Treasure: Turn a Minitel terminal into a Linux terminal or videotex display.” About the Authors Kevin Driscoll is an assistant professor of media studies at the University of Virginia. Julien Mailland is an assistant professor in telecommunications at Indiana University’s Media School. They are the authors Minitel: Welcome to the Internet (MIT Press, 2017), and they are the founders of the Minitel Research Lab, USA, the world’s largest digital museum on the Minitel. Source: From Trash to Treasure: How to Resurrect a Minitel Terminal ### Elegoo Gift Guide Is for a Complete Arduino Starter Kit with 20% discount Arduino is an open source software and electronics platform that has evolved the open hardware, DIY (do it yourself), makers, STEM, and the electronics industry. Arduino has grown to be one of the best learning platforms for young engineers and students. Using an Arduino a student new to electronics and embedded systems can easily build something interesting in less than 2 hours. Despite the awesomeness and usefulness of the Arduino platform, it also comes with some challenges. Arduino has several add-ons like sensors, modules, shields, displays, and others that can be added to a project to increase its complexity and there are several add-ons that are available in the market from different makers. It can be overwhelming for beginners to get started with so many options. What if we could house all the necessary components in one box? Here, comes the Arduino kits. There are many Arduino starter kits available on the market and most of these kits are intended for electronics enthusiasts who just beginning their journey to Arduino. But how to choose the one that is right for you? Here we will take a look on Elegoo Arduino Starter Kit. Arduino kits contain an Arduino Uno board or similar board and some other parts that can be used to teach electronics and programming in its simplest form to kids, students, makers, and others. At the same time, professionals can use Arduino for research purposes as the kits have been made to suit everyone. With these kits, one can build projects like smart homes, robots, weather station, fancy light controllers, Alexa clone and many more. The Elegoo EL-KIT-001 is one of such Arduino kits that goes a step above of other available kits. This is because each component of the kit is clearly labeled, it includes a CD with various Arduino tutorials and includes more than 200 electronics components to build your own project. Elegoo Kit is made from a technology company based in Shenzhen China which I that’s justify its low cost and availability. Elegoo, also creates and sells various types of Arduino kits and pieces. As said, Elegoo-El-KIT-001 UNO R3 is an Arduino starter kit that has over 200 components to cover most of your starter needs. The kit is compatible with most Arduino modules and Elegoo believes it is the most complete starter kit (I think it might be) out there. True to its’ name, the Elegoo starter kits come with a PDF that contains more than 30 tutorials on projects that deal with the use of every single material found in the kit. Read More: Elegoo Gift Guide Is for a Complete Arduino Starter Kit with 20% discount   ### 8 Best Arduino Starter Kit for Beginners Best Arduino Starter Kit Arduino Starter Kit from Arduino Elegoo Uno Project Super Starter Kit with Tutorial for Arduino Vilros Arduino Uno 3 Ultimate Starter Kit SunFounder Project Super Starter Kit for Arduino Osoyoo Ultimate Starter Kit for Arduino with Mega2560 and UNO R3 Board Projects Longruner Starter Kit for Arduino Kuman Arduino Complete Starter Kit Smraza Starter Kit for Arduino For a beginner in the world of Arduino, we present some of the best Arduino starter kits which help you to get familiar with all the essential components required to build some basic circuits.The Arduino kits reviewed here are not only good for students but also for people who have very little knowledge in coding who are enthusiastic to learn more. There are hundreds of Arduino starter pack combinations available online for you to choose and buy. We have compiled together 8 of them that are perfect for beginners. The review of each starter kit Arduino is provided with users’ view of the product, Arduino starter kit components, other contents of the kit, possible circuits that can be built with each kit, and a detailed buying guide to assist you throughout. Since each kit is different from the other, it is important to know all minute details about the product, and this, we have done for you!! The Big List of Arduino Starter Kit   #1. Arduino Starter Kit from Arduino – Official English Kit with 170 Page Learning Book Official Arduino Starter Kit  The official Arduino starter kit from Arduino is by far the best & “Complete Arduino Starter Kit” for a beginner. With over 200 useful components and 50 additional electronic parts, the kit comes with a high quality microcontroller compatible with Arduino Uno R3. The whole kit is available at an economic price. Inside the Arduino Uno Starter Kit Box from Arduino Official Arduino Starter Kit Specification Quantity Arduino Projects Book 15 Projects, 170 Pages 1 Arduino UNO R3 1 USB Cable 1 Breadboard 400 Pins 1 Wooden Base Easy to assemble 1 Battery Snap 9 V 1 Jumper Wires Solid Core 70 Jumper Wire Stranded 1 Phototransistors 6 Potentiometers 10 KOhm 6 Push Buttons 10 Temperature Sensor TMP36 1 Tilt Sensor 1 Alphanumeric LCD Display 16x2 1 LED's White - 1 RGB - 1 Red - 8 Green - 8 Yellow - 8 Blue - 3 Small DC Motor (6-9) Volts 1 Servo Motor Small in size 1 Piezo Capsule 1 H-Bridge Motor Driver L293D 1 Optocoupler 4N35 2 MOSFET Transistor IRF520 2 Capacitor 100nF - 5 100µF - 3 100pF - 5 Diode 1N4007 5 Transparent Gels Red Green Blue Male Header Strip 40 Pin Resistors 220Ohms - 20 560Ohms - 5 1KOhm - 5 4.7KOhms - 5 10KOhms - 10 1MOhm - 5 10MOhms - 5   The 170 page book comes with all the basics that you need to need to know about the subject, and is also fun to experiment on. The book contains the following projects. GET TO KNOW YOUR TOOLS – Basics of all the components inside this kit is explained in detail. SPACESHIP INTERFACE – A fancy way to learn the basics of blinking LED’s. LOVE-O-METER – Interfacing Arduino & temperature sensor (TMP36) to check hand temperature. COLOR MIXING LAMP – Using RGB LED and light sensors to change colors according to difference in light intensity. MOOD CUE – Controlling a Servomotor using an Arduino & Potentiometer to rotate at different angles. LIGHT THEREMIN – Using a photoresistor and a piezo buzzer to produce a tone according to the intensity of light received by the Arduino. KEYBOARD INSTRUMENT – Producing different tones using switches and a piezo buzzer. DIGITAL HOURGLASS – Using a Tilt switch and some LED’s to denote time. MOTORIZED PINWHEEL – Spinning a motor with a transistor and battery. ZOETROPE – Creating an illusion of motion with a group of still images using an H-bridge motor driver and a DC Motor. CRYSTAL BALL – Using an LCD as a fortune teller. Creating random answers and displaying it on LCD. KNOCK LOCK – Using a buzzer and a servomotor to open a lock after knocking 3 times. TOUCHY-FEELY LAMP – Basically a “thief detector”. Using a metal piece for detection and a LED for warning. TWEAK THE ARDUINO LOGO – Learning the basics of serial communication between Arduino Board and PC. HACKING BUTTONS – Using an optocoupler to hack another device. The Arduino Uno projects book that is provided along with this kit gives you an insight on the basics of programming, by explaining the codes of all the projects in the simplest way possible. For a starter, the book also provides info on the basic components provided along with the kit. The book also covers some basic theory on electronics and then runs into 15 pages of fun projects. All the projects are neatly presented with clear descriptions of the components needed, schematic, and the source code. All the components available with the kit are not labelled. So, if you are a novice in electronics it may take some time and other resources to get acquainted with all the components. All the components are neatly packed in a box along with the 170 page book. “The Arduino Uno R3 Starter Kit from Arduino is the best in its class and is a favorite guide for the novice.” #2. Elegoo Uno Project Super Starter Kit with Tutorial for Arduino (EL-KIT-003) Elegoo Arduino Starter Kit  The Arduino starter kit by Elegoo is extremely popular for the beginners in the world of Arduino. The kit has helped many starters to get a firm base on the idea of Arduino, and to move further to an advanced level. Though the Arduino board is a Chinese clone of the original one, it does keep up to the standards. The whole board is neatly soldered and clearly placed. Inside the Elegoo UNO Super Starter Kit ELEGOO UNO Starter Kit Specification Quantity Elegoo UNO R3 Compatible with Arduino Uno 1 LCD Module ( with pin header) 16X2 1 Breadboard Solderless 1 Breadboard Expansion Board 1 Breadboard Power Supply Module 1 Joystick Module 1 IR Receiver 1 Servo Motor SG90 1 Stepper Motor 1 Stepper Motor Driver Board ULN2003 1 Ultrasonic Sensor 1 Temperature and Humidity Module DHT11 1 9V Battery with DC 1 Jumper Wire 65 USB Cable 1 Active Buzzer 1 Passive Buzzer 1 Potentiometer 1 Relay 5 Volt 1 Remote 1 Tilt Switch 1 Button (small) 5 7-segment Display 1 Digit 1 7-segment Display 4 Digit 1 LED Yellow - 5 Blue - 5 Green - 5 Red - 5 RGB - 1 Photoresistor 2 Thermistor 1 Diode 1N4007 2 NPN Transistor P2N2222 2 Shift Register IC 74HC595 1 Resistor 120 Pcs Dupont Wire Female 2 Male 10 The kit comes in a hard plastic box which can be used to store all the components and electronic parts in future. An instructional CD is available along with the kit which has a PDF file of 22 Arduino tutorials with fun projects. The package comes with an Arduino Uno R3 board along with other useful components like a solder-less breadboard and a prototyping field board. The prototyping board is the most useful component in this package, mainly for two reasons:- A prototyping board alone could cost half the price of the circuit, if bought separately. The prototyping board can be fit on top of the Arduino board to make your circuit compact and easy to use. The starter kit Arduino also comes with a stepper motor and a stepper motor driver. Such components not only helps you in building basic projects, but also in future while building advanced ones. A power supply module is alos available which helps you in supplying additional 5V and 3.3V input to various sensors. The greatest advantage of the Elegoo Arduino beginner kit is that it is not only for beginners, but also for advanced users. Once you get to know the basics, y7ou can get into advanced projects like Robotics, Weather Monitoring, Motor Control and so on. “Elegoo Arduino starter kit has it all, to make you a quick learner of Arduino through simple yet5 fun projects.” #3. Vilros Arduino Uno 3 Ultimate Starter Kit Vilros Ultimate Starter Pack    The Vilros ultimate starter kit comes with the original Arduino Uno board and includes some basic components that will guide you as a beginner. The kit also includes a 72 page instruction manual, which contains some basic projects and an electronics tutorial on different components that comes with the kit. All the circuits are neatly labelled in the manual with warning labels for users to watch out for while designing various circuits. Inside Vilros Arduino Uno Starter Kit Vilros Arduino Uno Starter Kit Specification Quantity Arduino UNO R3 1 Holder For Arduino Board & Breadboard 1 Bread Board 1 Shift Register 74HC595 1 NPN Transistors P2N2222A 2 Diode 1N4148 2 DC Motor with wires 1 Small Servo 1 Relay 5 Volt 1 Temperature Sensor TMP36 1 USB Cable 1 Jumper Wires 65 Photocell 1 LED Red - 10 Yellow - 10 RGB - 1 Trimpot 10K 1 Piezo Buzzer 1 Buttons (Big Size) 12mm 2 Resistors 330 Ohms - 45 10 KOhms - 45    “The Vilros Ultimate Starter kit lays it all out and gives you all the components you will ever have to use as a starter.” #4. SunFounder Project Super Starter Kit for Arduino (Uno, Mega and Nano) SunFounder Super Starter Kit for Arduino    The Sunfounder Super Starter Arduino kit is ideal for people who are intermediately knowledge in Arduino and need sophisticated components for advanced Arduino projects. The one point to be noted is that the Arduino board is not included in this kit. You will have to buy the board separately to carry on with your Arduino projects. Inside Sunfounder Arduino Starter Kit SunFounder Project Super Starter Kit Specifications Quantity Project Box 8 Compartments 1 Booklet 19 Projects 1 LED Red - 16 White - 2 Green - 2 Yellow - 2 RGB - 1 Header 40 Pin Timer IC 555 1 Optocoupler 4N35 2 Shift Resister 74HC595N 2 H-Bridge Motor Driver L293D 1 Accelerometer ADXL335 1 Rotary Encoder 1 Push-Button Small 5 Resistors 220 Ohms - 8 1KOhm - 4 10KOhms - 4 1MOhms - 1 5.1MOhms - 1 Switch 1 Potentiometer 50KOhms 1 LCD 16X2 1 Dot Matrix Display 8X8 1 Character Display 7-Segment 2 DC Motor 1 NPN Transistor S8050 2 PNP Transistor S8550 2 Capacitor Ceramic 10 NanoFarads - 4 100 NanoFarads - 4 Diode 4 Breadboard 1 USB Cable 1 Jumper Wire Male to Male 65 DuPont Wire Female to Male 20 Passive Buzzer 1 Fan 1 Apart from the components, the kit contains a tutorial CD and a small instruction guide book. Though the booklet is small and hard to read, it has a lot of basic experiments to get you started with Arduino. The kit contains a CDwhich included circuit, code, video & Fritzing. The addition of the computer application “Fritzing” is a bonus because it develops your skills to design circuits on PC before building and mounting circuits practically. “If you are trying to move over from a beginner to an advanced Arduino user, the Sunfounder Arduino starter pack will be the right choice for you.”    #5. Osoyoo Ultimate Starter Kit for Arduino with Mega2560 and UNO R3 Board Projects Osoyoo Ultimate Starter Kit for Arduino    The Osoyoo Arduino Starter Kit is a Chinese product and is pretty much worth for its low price. The kit offers an Arduino Uno R3 compatible board along with a Mega2560 compatible board. Buying both these boards separately itself will cost almost the kit price. The kit comes with electronic components that are more than enough to carry out your basic projects. The kit comes with a tutorial for 21 projects, where each project is explained in detail with circuit diagram, source codes and step-by-step procedures. Inside the Osoyoo Ultimate Starter Kit Show 10 25 50 100 entries Search: Osoyoo Arduino Starter Kit Specification Quantity Osoyoo Arduino Board UNO R3 & Mega 2560 Board 1 Each USB Cable 1 Solderless Prototype Breadboard 1 Jumper Wires 1 LED Bright White Red Yellow Green 6 Each Photoresistors 6 Potentiometer 10KOhm 3 Temperature Sensor TMP36 1 Tilt Sensor 1 LCD 16x2 (I2C Type) 1 Showing 1 to 10 of 18 entries PreviousNext Another spotlight is the LCD module. Unlike other starter kits, the Osoyoo starter kit provides a 16X2 LCD module that is of I2C type. Projects with the use of the LCD module will help you know more about I2C communication. The tutorials available are:-   “The Osoyoo ultimate starter kit is economic, with abundant components, and a good tutorial.” #6. Longruner Starter Kit for Arduino Longruner Starter Kit for Arduino    The Longruner Arduino starter pack comes with an Arduino Uno R3 board and is well known to be an RFID starter kit. It includes the basic RFID components like the RC522 module, the RFID proximity ID round tag and the RFID proximity ID card tag. All RFID based projects using Arduino can be experimented and learned at affordable costs. Inside the Longruner Starter Kit Longruner Arduino Starter Kit Specifications Quantity Arduino UNO R3 1 Breadboard 830 Point, Solderless 1 Stepping Motor Driver Board 1 RFID RC522 Module 1 RFID Proximity ID Round Tag 1 RFID Proximity ID Card Tag 1 LED Module RGB Tri-color 1 Joystick Module 1 Relay Module 5 Volt 1 LCD Module 16X2 1 Microphone Sound Sensor Module 1 Water Sensor Module High Sensitivity 1 Matrix Keyboard Buttons Module 4X4 1 Real Time Clock Module RTC DS1302 1 Digital Temperature Humidity Sensor Module DHT11 1 Stepping Motor 1 Tower Pro Micro Servo 9g 1 Buzzer Active & Passive 1 Each Shift Register 9 Bit, 74HC59 Model Potentiometer 1 Light Sensor 3 Yellow Push Bottons 4 LED Green Red Yellow 5 Each Flame Sensor 1 Infrared Receiver 1 Tilt Sensors / Switches 2 Temperature Sensor LM35 1 USB Cable 1 Jumper Wires 30 Dupont Cable 10 way 20cm 1 Remote Control IR Based 1 Button Cap 4 Dot Matrix LED Display 4X4 1 8 Segment Display 1 Digit 1 8 Segment Display 4 Digit 1 40 Pin Header 2.54mm, Straight 1 Storage Box 1 Resistor 220 Ohm - 8 330 Ohm - 8 1KOhm - 10 10KOhm - 10 For the price of the kit, you get a great collection of parts along with a CD that is filled with tutorials that are apt for beginners as well as advanced learners. All the tutorials provide source codes and circuit diagrams. “If you are looking out for a starter kit with RFID based components and a genuine Arduino board, the Longruner starter kit is the best product to buy out. Economic & worthy!!” #7. Kuman Arduino Complete Starter Kit with Detailed Tutorial Though the Kuman Arduino kit has a custom Arduino board that is compatible with Arduino Uno, it’s the only one among the lot to have all the desired components in one package. With a total of 44 types of components and additional items like power supply module, servo motor, DC motor, DC prototype expansion board and more, this kit is one of the best sellers in it’s category. Inside Kuman Starter Kit Kuman Arduino Starter Kit Specifications Quantity Kuman Development Board Arduino UNO R3 1 USB Cable 1 Prototype Extension Board 1 Mini Breadboard 1 Stepper Motor 5Volt 1 Stepper motor driver board ULN2003 1 LED Red Green Yellow RGB - 1 5 Each Vibration Sensor 2 Flame Sensor 1 Temperature Sensor LM35 1 Infrared Receiver 1 Photoresistor 3 Key Cap 4 Key Switch 4 Potentiometer Adjustable 1 Passive Buzzer Piezo Buzzer 1 Active Buzzer Tone Generator 1 Jumper Cap 1 Breadboard Large 1 Remote Control 1 LCD Screen 16X2 1 Breadboard Module 1 Ultrasonic Sensor HC-SR04 1 Component Box 1 Dupont Line 10 Pin Breadboard Line 30 (Approx.) Dot Matrix LED Display 8X8 1 Eight Segment Tube 1 Digit 1 Eight Segment Tube 4 Digit 1 8 Pin Shift Register IC 74HC595 1 Battery Holder 1 Resistor 220 Ohms 330 Ohms 1KOhm 10KOhms 5 Each Battery 9 Volt 1 Pin Header 40 Pin 1 Thermistor Module Touch Sensor CD with Tutorial Plastic Box BUY KUMAN KIT FROM->> AMAZON   The kit contains tutorials in the form of a CD-ROM. The CD includes eBooks, project circuits, explanation, step-by-step instructions and tried out source codes, all in the form of PDF files. A total of 23 projects are included. “For reliable components at an affordable price, with a neat tutorial filled with fun and info, Kuman Arduino Starter kit  is the best choice.” #8. Smraza Starter Kit for Arduino with Tutorials The Smraza Arduino kit includes a custom made Arduino Uno board and comes with around 200 useful electronic components including a large breadboard. The kit includes 35 tutorials in the form of a CD. This CD includes source codes, datasheet of all the components in the kit, and detailed circuit explanation of all the basic and advanced projects. Inside the Smraza Starter Kit for Arduino Smraza Uno R3 Starter Kit for Arduino Specification Quantity Arduino Uno R3 1 LED Matrix 8X8 1 LCD Module 16X2 (with pin header) 1 USB Cable 1 Breadboard 830 Tie Points 1 Temperature & Humidity Sensor DHT11 1 Servo Motor SG90 1 Stepper Motor Driver ULN2003 1 7 Segment Display 4 Digit 1 Shift Register IC 74HC595 1 Buzzer Active Passive 1 Each H-Bridge Motor Driver L293D 1 Potentiometer 10K 2 Rotary Encoder Module 1 Joystick Module 1 Relay 5 Volt 1 IR Module Receiver 1 Button Small 5 Tilt Switch 1 Prototype Expansion 1 Power Supply Module 9 Volt, 1 Amp 1 PIR Movement Sensor HC-SR501 1 Ultrasonic Distance Sensor 1 DC Motor 1 3 Axis Accelerometer ADXL335 1 Diode Rectifier 1N4007 4 Jumper Wire 65 Clock Module DS3231 1 RFID Module RC522 1 RFID Key 1 Water Level Sensor 1 Sound Sensor Module 1 Battery Holder 9 Volt 1 Fan Motor 1 Garden Soil Moisture Sensor 1 8 Digit LED Driver MAX7219 1 Transistor NPN - S8050 PNP - PN2222 5 Each Fan 1 Ceramic Capacitor 22pF 104 5 Each Electrolytic Capacitor 10UF, 50V 100UF, 50V 2 Each Resistor 10R, 100R, 220R, 330R 1K, 2K, 5.1K, 10K, 100K 1M 10 Each Thermistor 1 LED White Yellow Blue Green Red RGB - 1 5 Each BUY SMRAZA FROM->> AMAZON The kit includes a humidity sensor, LCD module, and more. One drawback is the absence of DC motor, stepper motor and capacitors. A servo motor is provided instead. The 9 Volt 1 Ampere power supply module is an added element that is compatible to both Arduino Uno and Mega 2560.   Source : 8 Best Arduino Starter Kit for Beginners ### DIY ADJUSTABLE CONSTANT LOAD (CURRENT & POWER) In this project I will show you how I combined an Arduino Nano, a current sensor, an LCD, a rotary encoder and a couple of other complementary components in order to create an adjustable constant load. It features a constant current and power mode and can handle a maximum of 30V and 20A if your heatsink design can handle it. Let's get started! Step 1: Watch the Video! The video gives you all the information you need to make your own adjustable constant load. During the next steps though, I will present you some additional information. Step 2: Order the Components! Here you can find a parts list with example seller: Amazon.com: 1x Arduino Nano: https://amzn.to/2PzA0ue 1x 16x2 I2C LCD: https://amzn.to/2o9Ms7N 1x Rotary Encoder: https://amzn.to/2wdvDNH 1x TC4420 MOSFET Driver: https://amzn.to/2PCV8Qf 1x IRFZ44N MOSFET: https://amzn.to/2P7NJYp 1x ACS712 Current Sensor: https://amzn.to/2BLBxL5 1x Fuse Holder: https://amzn.to/2BSGtxw 1x 20A Fuse: https://amzn.to/2MRbeax 2x Binding Post: https://amzn.to/2MN8Q4L Ebay: 1x Arduino Nano: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x 16x2 I2C LCD: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Rotary Encoder: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x TC4420 MOSFET Driver: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x IRFZ44N MOSFET: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x ACS712 Current Sensor: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Fuse Holder: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x 20A Fuse: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 2x Binding Post: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Amazon.de: 1x Arduino Nano: https://amzn.to/2BLw2Ml 1x 16x2 I2C LCD: https://amzn.to/2BJ8tnx 1x Rotary Encoder: https://amzn.to/2Lmt5S0 1x TC4420 MOSFET Driver: https://amzn.to/2PBVQ0g 1x IRFZ44N MOSFET: https://amzn.to/2PxQd38 1x ACS712 Current Sensor: https://amzn.to/2NijkGn 1x Fuse Holder: https://amzn.to/2NkffkK 1x 20A Fuse: https://amzn.to/2PCLm0A 2x Binding Post: https://amzn.to/2BP0eGq Step 3: Create the Circuit! Here you can find the schematic as well as pictures of my finished circuit. Feel free to use it as a reference for your own circuit. Step 4: Upload the Code! Here you can download the code for the project. Upload it to the Arduino Nano through the Arduino IDE Read more: DIY ADJUSTABLE CONSTANT LOAD (CURRENT & POWER) ### Alexa Controlled Door Sign Demo Use Alexa to tell your door sign what message to display. Things used in this project Hardware components Arduino MKR1000 × 1 Waveshare 200x200, 1.54inch E-Ink display module × 1 18650-Type Lithium Ion Battery (generic) × 1 18650-Type Battery Holder (generic) × 1 Breadboard (generic) × 1 Software apps and online services Arduino IDE Amazon Alexa Alexa Skills Kit Amazon Web Services AWS Lambda Thinger.io Platform Story Why? You are running a small "geek shop" and want to impress the first/last customer of the day? You want to leave your desk for a short break and think telling that to your colleagues - and to Alexa - should be enough effort (why should you leave a note)? Or just to show the world how cool you are? Or just for fun? ;) Introduction & Disclaimer This is just a demo, a prototype, a short sketch or quick recipe, how to control an e-paper display connected to an Arduino MKR1000 using Amazon's Alexa Skills Kit. If you look for more comprehensive information about the Arduino MRK1000 board, how to build Amazon Alexa Skills, the Thinger.io platform or how use a Waveshare 1.54 inch e-Paper Module you are encouraged to read the associated documentation for this platforms/products. Prerequisites Hardware components (see BOM) Arduino Desktop IDE setup for Arduino MKR1000 (see here) Latest WiFi firmware update for the Arduino MKR1000 (see here ) Amazon Developer account AWS account (AWS Free Tier) Thinger.io account Optional: Amazon Echo device About costs: For the hardware (MKR1000 & e-paper module) you may have to spent about 50 bucks. For developing the Alexa skill, you need an Amazon Developer account, which can be registered for free. You also need to create an AWS Lambda function. The compute service AWS Lambda is included in the AWS Free Tier with 1.000.000 requests/month for a unlimited period. To create and use AWS Free Tier resources you have to register to AWS and provide a valid credit card, which won’t be charged if you stay within the limits of the Free Tier program. Thinger.io offers a free plan for evaluation, learning and testing. For this project you need to configure one of 2 free devices included in this plan and you probably won't exceed the call rate limits in the free plan. Thinger.io Thinger.io offers "a ready to go scalable cloud infrastructure for connecting millions of devices. You can control them with our easy to use admin console, or integrate them in your business logic with our REST API. Open Source." The REST API to a device's endpoints provided by the platform makes it easy to integrate a device into applications on other platforms (here the AWS platform). First create a device from the cloud console following the documention like this:  Under the "Devices" section click "Add Device"  Pick an ID, enter a description and generate a credential token.  Note Id and token and click "Add Device"  Your device is now setup in the platform  Select the newly created device from the list of your devices.  Create an additional device token.  This will be the access token for the Alexa Skill application.  Note the generated token. Follow these instructions for setting up your Arduino IDE and this section for the Arduino MKR1000. After uploading the customized example sketch... #define _DEBUG_ #define _DISABLE_TLS_ #include #include #define USERNAME "3magku" #define DEVICE_ID "DoorSign" #define DEVICE_CREDENTIAL "Iq7OxG4htORD" #define SSID "yourWifiSsid" #define SSID_PASSWORD "yourWifiPassword" #define LED_PIN 6 ThingerWifi101 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL); void setup() { Serial.begin(115200); // configure wifi network thing.add_wifi(SSID, SSID_PASSWORD); pinMode(LED_PIN, OUTPUT); // pin control example (i.e. turning on/off a light, a relay, etc) thing["led"] << digitalPin(LED_PIN); // resource output example (i.e. reading a sensor value, a variable, etc) thing["millis"] >> outputValue(millis()); // more details at http://docs.thinger.io/arduino/ } void loop() { thing.handle(); } ...your device status should look like this in the cloud console: Device online Waveshare 1.54 inch e-Paper Module The Waveshare 1.54 inch e-Paper Module "is an E-paper device adopting the image display technology of Microencapsulated Electrophoretic Display, MED." The e-paper screen display patterns by reflecting ambient light and does not require a background light requirement. Once the display pattern is set/updated the module has an extreme low power consumption in standby mode (5 uA = 0.000005 A) Since the Arduino MKR1000 provides significant more SRAM than the Arduino UNO/Mega and is 3.3 V voltage based, it is a considerable platform for using it with a Waveshare 1.54 inch e-Paper Module. The extreme low power consumption of an e-paper display makes it even more interesting to try to connect it to a board like the MKR1000 when powered by a battery. To connect the display module to the MKR1000 and run the vendor’s example program on it, you can basically follow the instructions for “Working with Arduino” from the vendors documentation and consider some differences regarding the pin layout between the MKR1000 and the UNO: The SPI pins on the MKR1000 are D8 (MOSI), D9 (SCK), and D10 (MISO) - the SPI pins on the UNO are D11 (MOSI), D12 (MISO) and D13 (SCK). Following the instructions from the Waveshare Wiki Page the two SPI signals SCK and MOSI must be remapped to D9 and D8 for the MKR1000. The remaining signals like CS, DC, RST and BUSY can be freely mapped to the other digital signals of the MKR1000. This is the extend mapping table for wiring the module with the MKR1000: Pins & Wires; Connecting the e-paper module to the MKR1000 The resulting wiring looks like this: Wiring (Schema) And the real prototype setup looks like this: Testing the e-paper module setup To run the vendor provided example and your own sketches, some minor changes to the provided library code are necessary: Download code and library from https://www.waveshare.com/wiki/File:1.54inch_e-Paper_Module_code.7z and extract the package. Copy the files from thedirectory arduino/libraries of the demo package to documents/arduino/libraries, the actual path can be determined by Arduino IDE --> File --> Preferences -->Sketchbook location. In the file libraries/ep1in54/epdif.h make the following changes to reflect the modified pin mapping for the MKR1000: #ifndef EPDIF_H #define EPDIF_H #include /* COMMENT OR REMOVE THIS SECTION: // Pin definition #define RST_PIN 8 #define DC_PIN 9 #define CS_PIN 10 #define BUSY_PIN 7 */ /* ADD THE FOLLOWING SECTION: */ // Custom pin definition (MKR1000) #define RST_PIN 4 #define DC_PIN 5 #define CS_PIN 7 #define BUSY_PIN 3 class EpdIf { Compile and upload the demo sketch epd1in54-demo to test the module and your setup. Door Sign - Application The door sign application is a simple combination of the two example sketches from the previous sections: The sketch for testing the Thinger.ioconnectivity and the ep1in54-demo sketch provided by Waveshare. For this demo we basically: create three small (200 x 200 px) monochrome bitmaps and convert these images to C byte arrays - see the "How to display an image" section in the Waveshare wiki. OPEN closed include these bitmap arrays in a sketch: /* "imagedata_open.h" */ extern const unsigned char IMAGE_DATA_OPEN[]; /* "imagedata_open.coo" */ #include "imagedata_open.h" #include const unsigned char IMAGE_DATA_OPEN[] PROGMEM = { /* 0X00,0X01,0XC8,0X00,0XC8,0X00, */ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ... // Image data for "We are open", "Sorry, we are closed" and "Be right back" ... #include "imagedata_open.h" #include "imagedata_closed.h" #include "imagedata_brb.h" define an input resource and a handler for thinger.io to receive a parameter to select which image to display: // Handle for "image" resource: thing["image"] << [](pson &in) { boolean clean = in["clean"]; int number = in["number"]; displayImage(clean, number); }; // Handler called function for displaying images: void displayImage(boolean clean, int number) { if (clean) { ePaperClear(); } const unsigned char *image_data; switch (number) { case 0: image_data = IMAGE_DATA_OPEN; break; case 1: image_data = IMAGE_DATA_AWAY; break; case 2: image_data = IMAGE_DATA_CLOSED; break; } ePaperShowImage(image_data); } // Clear e-ink display: void ePaperClear() { epd.ClearFrameMemory(0xFF); // bit set = white, bit reset = black epd.DisplayFrame(); epd.ClearFrameMemory(0xFF); // bit set = white, bit reset = black epd.DisplayFrame(); epd.Init(lut_partial_update); } // Display image on e-ink display: void ePaperShowImage(const unsigned char image_data[]) { epd.SetFrameMemory(image_data); epd.DisplayFrame(); epd.SetFrameMemory(image_data); epd.DisplayFrame(); epd.Init(lut_partial_update); } The full code can be found here. After compiling, uploading and running the code, the device should be shown as Online in the thinger.io device status board and after clicking on the View API button you should see the previously defined input resource as image - Private in the DOORSIGN API. When you expand this item you'll see the input parameters and you'll be able to send a request to your device: DOORSIGN Dashboard Doorsign Api The REST call shown if you select Show query will be used later in the AWS Lambda function. More information on the thinger.io Server API can be found here. Alexa Skill Create the Alexa Skill starting at the Amazon Developer Console: Leave the Skill Type as Custom Interaction Model. If your device uses English(U.K.) change the language to English(U.K.). Pick a Name, e.g. “Door Sign”. Leave all other Global Fields to No. Save. Note the newly created Application ID on the next screen. Click Next.           Next define an Intent Schema (see below) { "intents": [ { "slots": [ { "name": "Status", "type": "STATUS_TYPE" } ], "intent": "ShowStatus" }, { "intent": "AMAZON.HelpIntent" }, { "intent": "AMAZON.StopIntent" } ] } a custom Slot Type “STATUS_TYPE” with values “open”, “away” and “closed” and Sample Utterances (see below) ShowStatus display that we are {Status} ShowStatus show that i am {Status} ShowStatus we are {Status} ShowStatus i am {Status}  Interaction Model: Intent Schema AWS Lambda As endpoint for the Skill, we create an AWS Lambda function. Sign-in to the AWS Management Console, Select All Services > Compute > Lambda Select Create Function Choose Blueprints and filter by entering "alexa" Choose any blueprint e.g. the alexa-skill-kit-sdk-factskill (Node.js) and click Configure Pick a name for your function e.g. myDoorSign Select an existing role or define a new one (see here) After the function has been created successfully: Add a trigger of type Alexa Skills Kit and configure it by entering the Application Id of the previously created Alexa Skill. In the Function code section select all code in the inline editor for the file index.js and replace it by pasting the following code: 'use strict'; /* * App ID for the skill */ var APP_ID = "REPLACE_ME__ALEXA_APP_ID"; var SKILL_NAME = "REPLACE_ME__ALEXA_SKILL_NAME"; /* * Alexa SDK */ var Alexa = require('alexa-sdk'); /* * HTTP/HTTPS */ var https = require('https'); /* * Thinger.io device */ const ti_user = "REPLACE_ME__THINGER_IO_USER"; const ti_device = "REPLACE_ME__THINGER_IO_DEVICE_ID"; const ti_token = "REPLACE_ME__THINGER_IO_ACCESS_TOKEN"; const ti_api_host = "api.thinger.io" const ti_api_port = 443; const ti_api_base_path = "/v2/users/" + ti_user + "/devices/" + ti_device + "/"; /* * Register handlers */ exports.handler = function (event, context, callback) { var alexa = Alexa.handler(event, context); alexa.appId = APP_ID; alexa.registerHandlers(handlers); alexa.execute(); }; var handlers = { /* * The "ShowStatus" intent: */ "ShowStatus": function () { var myHandler = this; var speechOutput; var cardTitle; var statusSlot = this.event.request.intent.slots.Status; var status = "open"; var imageNumber = 0; // Get slot(s): if (statusSlot && statusSlot.value) { status = statusSlot.value.toLowerCase(); } // Determine image number from status: switch (status) { case "open": imageNumber = 0; break; case "closed": imageNumber = 2; break; case "away": imageNumber = 1; break; default: imageNumber = 0; break; } // Build path: var ti_api_path = ti_api_base_path + "image"; // Build request body: var ti_input = { in: { clean: true, number: imageNumber } }; // Build POST request: var request_body = JSON.stringify(ti_input); var request_headers = { "Authorization": "Bearer " + ti_token, "Content-Type": "application/json", "Content-Length": Buffer.byteLength(request_body) } var request_options = { host: ti_api_host, port: ti_api_port, path: ti_api_path, method: "POST", headers: request_headers } console.log("REQUEST - HEAD:" + JSON.stringify(request_options)); console.log("REQUEST - BODY:" + JSON.stringify(request_body)); // Handle POST request: var request = https.request(request_options, function (r) { console.log("RESPONSE - STATUS:" + r.statusCode); r.on('data', function (d) { console.log("RESPONSE:" + d); var d_json = JSON.parse(d); }); r.on('end', function () { console.log("END: returning speech output ..."); speechOutput = "The door sign has been updated successfully! The new status shown is '"+ status+"'."; cardTitle = "Success"; myHandler.emit(':tellWithCard', speechOutput, cardTitle, speechOutput); }); r.on('error', function (e) { console.log("ERROR:"); console.error(e); speechOutput = "Sorry, there was problem - I could not update the door sign!"; cardTitle = "Error"; myHandler.emit(':tellWithCard', speechOutput, cardTitle, speechOutput); }); }); // Send POST request: request.write(request_body); request.end(); }, /* * Built-in intents: */ "AMAZON.HelpIntent": function () { this.emit(':ask', "You can say tell door sign 'we are open', or, you can say exit... What can I help you with?", "What can I help you with?"); }, "AMAZON.StopIntent": function () { var speechOutput = "OK"; this.emit(':tell', speechOutput); }, 'Unhandled': function () { this.emit(':ask', "What can I do for you?", "What can I do for you?"); } }; and replace the strings: REPLACE_ME__THINGER_IO_USER with your thinger.io username REPLACE_ME__THINGER_IO_DEVICE_ID with the Id of the previously registered device at thinger.io REPLACE_ME__THINGER_IO_ACCESS_TOKEN with the previously created additional access token for your device at thinger.io REPLACE_ME__ALEXA_APP_ID with the Application Id of the previously created Alexa Skill REPLACE_ME__ALEXA_SKILL_NAME with the name of the previously created Alexa Skill In the Configuration section of your Alex Skill: Select AWS Lambda ARN (Amazon Resource Name) as Service Endpoint Type and enter the ARN of this Lambda function in the Default field. AWS management control                           Sewing It All Together Now you should have connected your device to the thinger.io platform (via username, device Id and device token), linked your device to an AWS Lambda function (via username, device Id and access token) and linked the AWS Lambda function to an Alexa Skill (via Skill Application Id and the Lambda function's ARN). If all steps have been performed correctly, you can test your setup. Test Test Test Test Final test with Echo Dot Improvements, Changes & To Do A nice encasement A more sophisticated, less power consuming communication setup (e.g. MQTT with an reconnecting algorithm facilitating longer sleeping periods) A bigger display If you can't (or don't want to) get a hold of an Arduino MKR1000, any Arduino code compatible device (e.g. an ESP8266 type board) with SPI hardware support should do too, if you adapt the pin mapping a little bit. Schematics Wiring Code Thinger.io_e-paper.ino Arduino #define _DEBUG_ #define _DISABLE_TLS_#define _DEBUG_ #define _DISABLE_TLS_ /* INCLUDES */ // WiFi 101 #include // Thinger.io #include // Waveshare e-paper module #include #include #include // Image data for "We are open", "Sorry, we are closed" and "Be right back" ... #include "imagedata_open.h" #include "imagedata_closed.h" #include "imagedata_away.h" /* DEFINES */ // WiFi parameters #define WIFI_SSID "REPLACE_ME__WIFI_SSID" #define WIFI_SSID_PASSWORD "REPLACE_ME__WIFI_PASSWORD" // Thinger.io parameters #define THINGERIO_USERNAME "REPLACE_ME__THINGER_IO_USER" #define THINGERIO_DEVICE_ID "REPLACE_ME__THINGER_IO_DEVICE_ID" #define THINGERIO_DEVICE_CREDENTIAL "REPLACE_ME__THINGER_IO_DEVICE_CREDENTIAL" // E-ink colours #define COLORED 0 #define UNCOLORED 1 #define LED_PIN 6 /* VARIABLES */ // Thinger.io device handle ThingerWifi101 thing(THINGERIO_USERNAME, THINGERIO_DEVICE_ID, THINGERIO_DEVICE_CREDENTIAL); // E-paper image buffer and handle unsigned char image[5000]; Paint paint(image, 0, 0); Epd epd; /* SETUP */ void setup() { // Configure serial Serial.begin(115200); // Initialize e-paper if (epd.Init(lut_full_update) != 0) { Serial.println("e-Paper init failed!"); return; } // Configure wifi network thing.add_wifi(WIFI_SSID, WIFI_SSID_PASSWORD); // Configure ressource(s) ... // Handle for "text" resource: thing["text"] << [](pson & in) { boolean clean = in["clean"]; int posX = in["posX"]; int posY = in["posY"]; int fontSize = in["fontSize"]; String content = in["content"]; #ifdef _DEBUG_ Serial.println("Received 'text' command ..."); Serial.print("text.clean:"); Serial.println(clean); Serial.print("text.posX:"); Serial.println(posX); Serial.print("text.posY:"); Serial.println(posY); Serial.print("text.fontSize:"); Serial.println(fontSize); Serial.print("text.content:"); Serial.println(content); #endif displayText(clean, posX, posY, fontSize, content); }; // Handle for "image" resource: thing["image"] << [](pson & in) { boolean clean = in["clean"]; int number = in["number"]; #ifdef _DEBUG_ Serial.println("Received 'image' command ..."); Serial.print("image.clean:"); Serial.println(clean); Serial.print("image.number:"); Serial.println(number); #endif displayImage(clean, number); }; } /* LOOP */ void loop() { // Just call Thinger.io device handler ... thing.handle(); } /* FUNCTIONS */ // Handler called function for displaying text: void displayText(boolean clean, int posX, int posY, int fontSize, String text) { if (clean) { ePaperClear(); } ePaperDisplayText(clean, posX, posY, fontSize, text); } // Handler called function for displaying images: void displayImage(boolean clean, int number) { if (clean) { ePaperClear(); } const unsigned char *image_data; switch (number) { case 0: image_data = IMAGE_DATA_OPEN; break; case 1: image_data = IMAGE_DATA_AWAY; break; case 2: image_data = IMAGE_DATA_CLOSED; break; } ePaperShowImage(image_data); } // E-paper functions ... // Clear e-ink display: void ePaperClear() { /** From epd1in54-demo.ino - Waveshare 1.54inch e-paper display demo: There are 2 memory areas embedded in the e-paper display and once the display is refreshed, the memory area will be auto-toggled, i.e. the next action of SetFrameMemory will set the other memory area therefore you have to clear the frame memory twice. */ epd.ClearFrameMemory(0xFF); // bit set = white, bit reset = black epd.DisplayFrame(); epd.ClearFrameMemory(0xFF); // bit set = white, bit reset = black epd.DisplayFrame(); if (epd.Init(lut_partial_update) != 0) { Serial.print("e-Paper init failed!"); return; } } // Display text on e-ink display: void ePaperDisplayText(boolean clean, int posX, int posY, int fontSize, String text) { paint.SetRotate(ROTATE_0); paint.SetWidth(200); paint.SetHeight(200); if (clean) { paint.Clear(UNCOLORED); } sFONT *font; switch (fontSize) { case 8: font = &Font8; break; case 12: font = &Font12; break; case 16: font = &Font16; break; case 20: font = &Font20; break; case 24: font = &Font24; break; default: font = &Font24; break; } paint.DrawStringAt(posX, posY, text.c_str(), font, COLORED); epd.SetFrameMemory(paint.GetImage(), 0, 0, paint.GetWidth(), paint.GetHeight()); epd.DisplayFrame(); if (epd.Init(lut_partial_update) != 0) { Serial.print("e-Paper init failed"); return; } } // Display image on e-ink display: void ePaperShowImage(const unsigned char image_data[]) { /** From epd1in54-demo.ino - Waveshare 1.54inch e-paper display demo: There are 2 memory areas embedded in the e-paper display and once the display is refreshed, the memory area will be auto-toggled, i.e. the next action of SetFrameMemory will set the other memory area therefore you have to clear the frame memory twice. */ epd.SetFrameMemory(image_data); epd.DisplayFrame(); epd.SetFrameMemory(image_data); epd.DisplayFrame(); if (epd.Init(lut_partial_update) != 0) { Serial.print("e-Paper init failed!"); return; } } Alexa controlled door sign demo Alexa skill interaction model, AWS Lambda function code, Arduino code ... 3magku / alexa-controlled-door-sign-demo Alexa controlled door sign demo — Read More Download as zip   Source : Alexa Controlled Door Sign Demo ### Liquid Laundry Detergent DRS Sensor (LaundryBot) Never run out of liquid laundry detergent again with this Amazon DRS enabled liquid laundry detergent sensor, a.k.a. LaundryBot. Things used in this project Hardware components Arduino MKR1000 × 1 Pololu VL6180X Time-of-Flight Distance Sensor Carrier with Voltage Regulator × 1 Adafruit Standard LCD - 16x2 White on Blue × 1 Resistor 10k ohm × 1 Tactile Button Switch (12mm) × 1 MG Chemicals Silicone Conformal Coating × 1 Software apps and online services Amazon Web Services AWS Lambda Arduino IDE Amazon Web Services AWS S3 Amazon Web Services Amazon DRS API Hand tools and fabrication machines 3D Printer (generic) Soldering iron (generic) Story Introduction The LaundryBot is a Amazon Dash Replenishment Service (DRS) enabled smart liquid level sensor that will contentiously measure the surface height of the liquid detergent in the container, and automatically re-order through Amazon DRS service when the detergent is running low. It also features a Amazon Dash button that allows the user to manually order the liquid detergent at any time. The LaundryBot consists of a non-contact liquid level Sensor Probe utilizing STMicroelectronics VL6180X Time-of-Flight LIDAR Sensor and a Controller powered by Arduino MKR1000. The Sensor Probe is designed to be mounted on the bulk liquid detergent container use the top ventilation opening. The Controller is Wi-Fi enabled and features a large back-lit LCD screen and can be placed nearby the the washing machine for easy access. Motivation As in many household we use the bulk liquid detergent bought from warehouse stores and online. They come in big bottles with a dispenser and can last for several months. Often they are stored above the washing machine and the detergent is dispensed use the valve below. It is difficult to check how much detergent is still available in the container, and if it needs replenishment. I want to have a 'fuel gauge' to visually display how much liquid is available with minimum modification to the container itself. Bilk liquid detergent with dispenser  LaundryBot sensor and control unit The Hardware Design - Use VL6180X as none-contact fluid level sensor I deiced to use a STMicroelectronics VL6180X Time-of-Flight LIDAR Sensor instead of ultrasonic or IR sensors to measure the fluid level. VL6180X is a ToF ( Time-of-Flight) sensor with a built-in LIDAR: The sensor is sending out infraed laser light pulses and measures how much time it takes for the light to come back, allowing it to give accurate results independent of the target’s color and surface. The VL6180X device is operating at 2.8V. I used the breakout module from Pololu which includes the necessary voltage generator and level shifter to use the module in 3.3V or 5V systems. The breakout board is only 12mmx18mm, small enough to fit into the ventilation opening without cutting the plastic container. To be used as liquid level sensor, this method works best on liquid with high viscosity and colorants. My experiments show that the sensor is not stable to measure clear liquid with low viscosity such as water since it sometimes can't differentiate the light reflection from the surface and the bottom of the container.  A transparent plastic shield is mounted in front of the VL6180 board to make it water proof Custom Parts and Enclosures The sensor probe and control units are 3D printed with PLA. The STL files are included in the attachment. The sensor probe will be inserted into the container from top ventilation opening, and secured onto the container by the cap ring. The sensor head is sealed and water proofed with silicone conformal coating to protect the sensor. The sensor can also be used for other liquids in addition to liquid detergent, such as fabric softeners.  Sensor head assembly with the Pololu VL6180 breakout board All the 3D printed parts Sensor head fits into the ventilation opening The cap ring secures the sensor to the container Final assembled LaundryBot Senor and the Control box Setting up the Amazon DRS for the LaundryBot In order to start with the Amazon Dash Replenishment Service for the LaundryBot, follow the following steps: Sign up for an Amazon Developer account: aws.amazon.com Create a new Amazon LWA Security Profile: developer.amazon.com Create Amazon Web Services SNS Topic: aws.amazon.com In this step, I used the same information that I obtained for another DRS project, the FilamentBot and added the return URL for the new LaundryBot. Create a new Device at the Dash Replenishment Console Finally it is time to create my own DRS device, the LaundryBot. This can be done at the Amazon Dash Replenishment Console. For each device you can create multiple 'Slot' which like the pre-loaded shopping carts so the end user can easily select the items they would like to order by the LaundryBot. These steps are rather straight forward and I'm going to skip the detailed descriptions here for now. Create the Device and Slot, pick products to fill the slot Product Registration Page With the above AWS information obtained, I then proceeded with setting up the LaundryBot Product Registration Page at http://laundrybot.artsuzhou.com. The website is hosted on Amazon AWS Simple Storage Service (S3) using the Amazon AWS Route 53 DNS management service. The example html code for the website can be found on the project Github repository. Product Registration page  Success! The Arduino Sketch for the LaundryBot For distance measurement, I used the Pololu Arduino library for VL6180X. The sensor is set in the 2X scale mode which would extend the sensor range to 40cm with reduced resolution. The distance from sensor to the surface of the liquid will be shortest when the container is full, and becomes larger as the liquid level drops. The reversed linear relationship between the distance and the total volume will be visualized on the LCD screen in the shape of a bar graph in real time. When the fluid level drops below a pre-defined threshold, the LaundryBot will place the DRS order automatically. The user can also place the DRS order by pressing the 'DASH' button on the LaundryBot at any time. For DRS, again the Arduino AmazonDRS library written by Brian Carbonette. Brian is used. The example Arduino Sketch be found on the project Github repository. The steps are identical to what I have included in the FilamentBot project. For detailed information, please visit the FilamentBot project page. Exchanged the auth_code for the refresh token by running the authCodeGrant example sketch. Updated the AmazonTokens.h header file in your AmazonDRS library 'src' directory with values for...client id, client secret, refresh token, and redirect uri. Upload the LaundryBot sketch with your WiFi credential etc. to the LaundrytBot using Arduino IDE. Finally the LaundryBot is ready to go! There are two ways in which the LaundrytBot can help you initiate a purchase of the detergent: By pressing the Amazon Dash button on the LaundryBot. Let the LaundryBot automatically initiate the DRS request on your behalf when the detergent level falls below a preset level! Custom parts and enclosures Sensor probe upper Sensor pad Sensor cap box case box bottom Sensor probe lower with vent hole Schematics Wiring diagram Code Github sb43201 / LaundryBot This repository contains the codes required for the LaundryBot smart liquid sensor project powered by Amazon DRS — Read More Download as zip Source : Liquid Laundry Detergent DRS Sensor (LaundryBot)  ### Universal Remote Control with Alexa and IR I hate looking where is the remote controller or grab my phone to control my TV or other IR devices. Alexa and hacking saved my day! Story As a lot of lazy folks, Alexa is saving my day. I don't want to spend time looking for my remote controller to turn on TV or switch sources. I would like to be able to ask Alexa to do it for me! I spent some time building that and this article explains how. Demo Before discussing the technical aspects, this is a short demo video that shows how it works. Architecture There is a long road between the lazy guy's voice and the actuation on the TV. The figure below illustrate the journey of the command from the voice command to the action on the TV. Alexa Skill Amazon proposes a well define interaction model for the smart home skill. As this project is about building a controller for TV, everything i need is available on the smart home skill for entertainment devices. AWS Lambda Building a back-end for a skill is straightforward with Lambda as they offer support for multiple programming languages and an easy integration with Alexa skills. Ideally, using AWS IoT is recommended as it offer a more secure way to interact with the devices. However, smaller devices do not support the authentication and security mechanism offered by AWS IoT. I decided to use an other solution. Adafruit IO I had to use a small device that connects simply to the Lambda. As this is not a critical application, lower security is acceptable. Adafruit IO offers a MQTT broker available for free for low traffic application. It offers also libraries to connect to the broker from Arduino compatible devices. Arduino device I was initially planning to use the MKR1000 as it is one of my favorite devices. unfortunately, the IR library is not supporting this device yet (i am trying to help the IRLib2 team to support it). My choice was then for Adafruit Feather HUZZAH ESP8266 as it still a smaller device that i have available, it support WiFi, MQTT, and IR libraries. There is code examples available that illustrates how to use MQTT on this device. The library IRremoteESP8266 works just fine with this device with plenty of examples provided including with MQTT communication. TV Depending on the TV make and model, specific codes needs to be used. For now, i added only codes for Samsung TV. Other makes and models are available on databases like this one. I am planning to retrieve directly the codes from those databases on the runtime to support a marge number of TVs. Read more: Universal Remote Control with Alexa and IR ### Wise Chameleon - Turn Anything Into a Smart Device! We want to combine DIY electronics and 3D printing to turn anything into a smart device. Story wisechameleon.com Update: We are so excited to have won the competition, thanks to everybody who supported us and of course to the judges. :) We are already continuing development on this project to make it more user-friendly, easier to adopt and of course add more attachments so it can do more cool stuff. Please check back frequently and let us know what you think of our progress. IoT for the WIN! Let's do something different in the smart home space! Something next level not just turning on lights. Let's see if we can get it to a kick-startable level! After some discussion on various topics, we pinned down our starting project definition to "smart device controlled modular actuators." We would like to produce a ready-to-use device which will have a servo/motor head that can accept adapters (3D-printed or molded) and triggered by an app or smart hub. This will leverage on a couple of things, first the modularity that will be very exciting for growing makers community and 3D printer owners, and also the growing smart home DIY electronics. This will be helpful in transforming non-smart devices (blinds, etc) and also come up with new applications (watering plants) through various adapters. Components A board capable of Running a motor/servo WiFi communication with Alexa/Google/Smart Hub Power management for handling battery/solar/dc Power Servo/motor Power source Use case defined attachments website - ios/android app Alexa skill integration INITIAL IMPLEMENTATION We use Arduino MKR1000 board connected to the Adafruit.IO device cloud. And Alexa skills is developed as an AWS Lambda function that implements amazons Smart Home Skill Kit Inteface. In particular it implements the PowerController and PowerLevelController as well as custom scenes. Used components: AWS lambda - cloudwatch logs, to debug alexa req / resp mss Amazon Developer Account (where lambda definition and publish abilities lie) - Adafruit.io the device cloud to control our Arduinos Test echo virtual device (just sign in as chameleon wise developer account) - https://echosim.io/ Here be the AWS lambda code that Implements the Alexa Smart Home Skill API needed for integration of Chameleon Wise's /dev device (alexa controlled servo). Detailed info on the Smart Home Skill API is here: https://developer.amazon.com/docs/smarthome/understand-the-smart-home-skill-api.html Deployment: $ cd AlexaSmarthomeAPI_Chameleon$ pip install requests -t .$ pip install nodb -t . Now since our alexa skill is python3 and nodb doesn't support python3 make the following changes to AlexaSmartHomeAPI_Chameleon/nodb/__init__.py line 69 -> bytesIO.write(bytes(serialized, 'utf-8')) line 241 -> if index in obj: line 264 -> return self.hash_function(bytes(index_value, 'utf-8')).hexdigest() once the file is modified you are read to deploy to lambda from AlexaSmarthomeAPI_Chameleon directory do: $ zip -r python.zip . This will zip everything up, then navigate to the lambda page Under Function Code select Upload a Zip File then select the python.zip file upload it and click save. Now you can test it out. There are three things to test Discovery... navigate to https://alexa.amazon.com/spa/index.html#appliances login with the chameleonwise user Forget all device Click discover A device called moto should appear (if you are using the smart phone app, you will get a device controler for this guy that looks like a power switch). Your now setup and ready to go To test out the functionality use the following uterance Alexa turn moto on alexa turn moto off alexa setup power level to 100 on moto Debugging: To check whats happening with the lambda, check out the CloudWatch Logs Use Cases After testing the system on breadboard, we made a case for MKR1000 and continuous servo (check our thingiverse page for the 3D models https://www.thingiverse.com/wise_chameleon/designs). Soldering was a bit tedious, but eventually worked. Designed an adapter for the blind wand, and also one with a gear that can be used on a sliding door, which we used for a pet feeder. Read more: Wise Chameleon - Turn Anything Into a Smart Device! ### Did You Ever Want to Have a Video Doorphone? Recycle your old cellphone to build one and connect it by a browser to your new phone, PC or tablet! Things used in this project Hardware components Arduino MKR1000 × 1 ICStation UNO × 1 2.8 TFT Shield for Arduino Uno × 1 Breadboard (generic) × 1 Relay (generic) × 2 Software apps and online services Web of Cam Story About this Project Introduction At first, I wanted to use my actual Windows 10 Phone and Windows Virtual Shields to setup the video and audio connection to my Windows 10 PC. But this was to hard to realize for a beginner like me as I would have needed to write at least some apps for Windows 10 mobile and PC right from the scratch. Thus, I decided to use my old Android cellphone and I have found all the apps I needed for my project in the Playstore, and there are more than one available of each kind. The only task to develop which was left to me was to invent the remote control for my device and the screen to display my own picture at the door. (I need this display because my old cellphone does not have a front camera and I have picked to use a security cam / babyphone app which does not provide a video stream back to the cellphone anyways.) Video Doorphone in Action Please, have a look how it works: Video Doorphone Materials used and where to get them Arduino / Genuino MKR1000 (won as a contest prize) Arduino UNO R3 Board UNO R3 2.8 TFT Touch Screen with SD Card Socket for Arduino Board Module Breadboard Relay Module, 5V, 10A, Opto Isolated Recycle ware: (use what you have or search for used staff in the internet) Android cellphone from Samsung GT-S5830i Three cellphone power supplies (5V) USB extension cable Connector fitting to 5V power supply plug from Windows 5 mobile phone Power plug for Arduino Uno Project instructions Setup the breadboard with the MKR1000 and put all the above mentioned parts together as shown in the pictures: Overview: The Uno R3 is flashed with the code necessary to display my picture stored on SD card sitting in the SD card reader which is a part of the screen shield plugged on top of the Uno. I have connected the power supply for the Uno to the right relay module as shown here: caption (optional) The kathode line to the Arduino Uno power plug is switched by the relay while the anode line is plugged into a 5V connector from the Arduino board. The other relay module will switch the power supply to the Android cellphone as follows:  caption (optional) I have partly cut open this USB extension cable to switch the anode line by the relay (as the power to the cellphone is supplied by a generic USB cable). Finally, the MKR1000 is flashed by a proper code to switch the relay modules and assembled as shown: As you can see, I am using only 5 connectors from MKR1000: the top right one which is port 6, the one at number 49 which is port 11 and the three power connectors: 5V at number 41, 3.3V at number 43 (VCC) and the ground connector (at 44). These lines are connected to the relais modules as shown here: From left to right: 5V, 3.3V at the left connector and ground, port 6 (IN1), port 11 (IN2) at the right connector. If you are content to use Windows Remote Arduino you do not need to write any code at all for the MKR1000. Just flash the StandardFirmata example from the Arduino IDE to switch by USB or the StandardFirmataWiFi example to switch by network! Using StandardFirmata, every possible output from the MKR1000 may be used to switch something while using StandardFirmataWiFithe ports 5, 7, 8, 9 and 10 will not work. Therefore, I have chosen to use ports 6 and 11. Much more comfortable and nicer to use is a webserver for switching. I have edited the IDE example WiFiWebServer from folder WiFi101. You may download the changed code here: https://github.com/kds678/Video-Doorphone/tree/master. At this address, I have also provided the code to display your picture on the UNO with TFT shield. Just save your own picture with 320 x 240 pixels and 24 bit to the SD card root as webcam.bmp and change line 85 in doorpic2.ino according to your needs (e.g. I setup my picture like I have done in the sketch to display it centered as it was 24 pixels smaller than the screen). Conversation between the doorphone and your computer/cellphone/tablet There are many possibilities to choose from. Just pick the securitycam or babyphone app from the Android Playstore which you like best. Usually, your cellphone will be serving the video and audio to your network and you may get these by a webbrowser/viewer running on the device you have chosen. If you are running a webserver for the remote control as well I recommend to use two different browsers. I have shown one solution in the video above. Further improvements A great idea would be to install a cellphone at the door which is capable to run Whatsapp or Skype. Using for example a Nokia Lumia 625 with Windows 10 would have the advantage that it automatically turns on when the power supply is connected. Thus it could be remotely switched on by the described remote control. It will also automatically shut down when the battery is almost drained. So, I would not need extra apps to perform these tasks like when I am using an Android doorphone. It would also be worthwhile to implement notification to your actual cellphone which you are taking with you (e.g. by Blynk as shown by another contest participant) so you could perform a call to your doorphone and talk to the person who is just ringing your bell, even by a videocall. To prevent stealing of the installed smartphone at the door one could use Azure IOT Hub to get a permanent record of safety cam pictures from the doorphone camera. Schematics Video-Doorphone Fritzing charts Code Video-Doorphone Code for MKR1000 and Arduino UNO Source : Did You Ever Want to Have a Video Doorphone? ### Smart Kitchen Cube Alexa controlled timers at a glimpse. A really fancy egg-timer with added temperature control. Story Idea Both of us like to tinker with electronics and the latest hard- and software. While most projects never get out of "early-Alpha", we wanted to create something with a prototype look&feel for quite a while now. Participating in The Alexa and Arduino Smart Home Challenge finally made us consider creating something worthy of publishing here. Having used Alexa on a daily basis for controlling lights and music throughout our home, something that really bothered me was the timers we would regularly set for things like cooking and making tea. The initial request for setting up a timer was usually followed by a couple of "Alexa, how much time left on the tea-timer?" so we rather quickly had the idea of creating an additional device, that let you glimpse at your timers without having to interact with Alexa again. We basically wanted to create an egg-timer with a really fancy hard- and software stack. For additional fanciness, we added a temperature controlled cooking mode. Concept While there are other options, having Alexa communicate with an Amazon Lambda function is the quickest and easiest way to get started with development. You can either set up your own skill and lambda or activate our Smart Kitchen Cube skill from your Alexa App. You can view and activate the skill here, or search for "Smart Kitchen Cube" in the Alexa App. For a quick start, we recommend trying our skill first and then switch to your own skill and lambda in case you want to tinker with the software-side of this project. For detailed instructions on how to duplicate our setup, refer to the last two chapters of this project to get started, then modify things to your need. But first off, the necessary steps to build your own cube and link it to our skill! Particle Cloud You will need an account with particle.io to link the skill to. So head over there and either register as a new user or sign in to your existing account. Then go to build.particle.io, click on settings (the gearwheel in the lower left) and take note of your access token. You will need the token in your Arduino sketch so the Arduino can communicate with the particle cloud. While you are at it, flash the particle you will use for the cube with the software provided in the code section. If you haven't set up your particle yet, do so now via the particle app, it has great step-by-step instructions on how to do this. Account Linking With your Particle account you can already set up our skill, so head over to alexa.amazon.com, log in with the account you have your Echo connected to, click on the Skills tab and search for "smart kitchen cube". Click on the skill and then on "Enable". A window will open where you have to login with your Particle account. Press "Ok" when it asks you for permission to link the account. As of now, the device discovery will not yield any results unless you have flashed our code to the particle, but once you did that and add a device, it will show up in the "Smart Home" section of the alexa.amazon.com website. Lets build a device and hook it up now! Hardware - The Cube As we wanted to build more than just a breadboard prototype, creating our cube was as much about constructing the case as it was about building the circuit. Read more: Smart Kitchen Cube   ### Alexa, Put the Kettle On! Make a smart kettle for under £60 using Alexa and Arduino. Things used in this project Hardware components Arduino MKR1000 × 1 SparkFun Logic Level Converter - Bi-Directional × 1 Tefal Temperature Control Kettle × 1 Software apps and online services Arduino IDE Amazon Alexa Alexa Skills Kit Amazon Web Services AWS Lambda Shiftr Story Introduction Why make two trips to the kitchen, or hang around waiting for the kettle to boil when you can just ask Alexa to put the kettle on? This project uses as few components as possible and is really easy to follow but it does involve tinkering with mains powered devices and water. So be careful and always make sure the kettle is unplugged when working on it! You will need to know how to solder to complete this hack. Try it for yourself I've published a demo version of the Skill HERE. If you add this to your Alexa account then visit the Shiftr Namespace HERE you will be able to say "Alexa, put the kettle on" and see a blip move around the node map to the device brewTime-TEST. You can also see the state of the request in the top left corner. The device brewTime-01 is the kettle in my house, you can't control this but you can see it's state. Prerequisites An Amazon developer account, create one here if needed An Alexa-enabled device associated with the above account This can also be a virtual device like echosim.io or reverb.ai An AWS account, create one here if needed As shiftr.io account, create one here How the services communicate The software Let's get your MKR1000 talking to Alexa before we start hacking the kettle. This involves creating an Alexa Smarthome Skill, an AWS Lambda function to handle the requests from Alexa and using Shiftr.io to communicate with the MKR1000. Setup a Namespace on shiftr This service allows your MRK1000 to talk to AWS via a simple protocol called MQTT. Log in to your dashboard on shiftr.io Click New Namespace, give it a name and click Create Click on the Namespace Setting Page link and click Add Token Leave everything as default and click Create Token Make a note of your key and secret, you'll need these later. Setup LWA First, you need to create an LWA security profile. Here’s how: Go to the Amazon Developer Console and sign in as needed Click on Developer Console in the top right corner if you are not redirected Click on Apps & Services, in the menu then click Login with Amazon in the submenu. (link) Click on Create a New Security Profile Fill in all three fields to create your security profile and click Save. The name and description are up to you and the privacy URL can just be http://example.com/privacy On the cog icon, click on Security Profile Make a note of Client ID and Client Secret, we will need these later. *** Leave this tab open, we will need to come back here later! Create the skill This is super easy! The steps here will provide you with the bare minimum required for a working Smart Home skill. Go to the Amazon Developer Console and sign in as needed Click on Developer Console in the top right corner if you are not redirected Go to Alexa > Alexa Skills Kit (Get Started) > Add a New Skill (link) In the Skill Information tab: Skill Type = Smart Home Skill API Language = Choose your region e.g. US or UK - this is important and has to match your Alexa device and Lambda function region. Name = Test Smart Home Skill (or whatever you want) Payload Version = v3 Click Save This creates the skill. Note the skill ID near the top, underneath your skill name. Create a Lambda function This couldn't be easier! I've included a zip file with everything you need to upload to AWS. Now let's setup the Lambda function: Go to the AWS Console and sign in Go to Services > Compute > Lambda In the top right corner of the page next to Support will be a geographical region. e.g. "Ireland" or "N. Virginia". Click this dropdown and choose Ireland for an Alexa Skill in the UK, or N. Virginia for US. I'm not sure what other regons are needed for Alexa in other countries. Click on Create Function Step 1: Click on "Author from scratch" and enter the following into the fields... Name = SampleLambdaFunction (or whatever you want) Runtime = Node.js 6.10 Role = Create a Custom Role which will launch a new tab. Click Allow. This will create a new role named lambda_basic_execution and automatically insert this role into the Lambda basic information dialog. If after you click Allow the Role changes to Choose an existing role, then select the Existing role named lambda_basic_execution from the box below. Click Create Function Step 2: In the Add Triggers List, click Alexa Smart Home, then scroll down to the box titled Configure Triggers. If you can't find the Alexa Smart Home trigger it's becasue your Lamda function is in the wrong region. Try creating a new function in a differnt region. Application Id = skill ID of your test skill that you noted above Enable trigger = checked Click Add Step 3: Click on the name of your function in the layout box at the top of your page e.g. SampleLambdaFunction, it has an orange icon. Scroll down to Function Code and enter the following information... Code entry type = Upload a .ZIP file Click on Upload and choose the upload.zip from the repo HERE Handler = index.handler Under the Environmental Variables section, enter the following keys/values: key=MQTT_KEY value=Your shiftr key from earlier key=MQTT_SECRET value=Your shiftr secret from earlier key=DEVICE_ID value=brewTime-01 (the device ID can be changed as long as you change the device ID in the Arduino sketch as well) Click Save at the top of the page. In the top right corner, note the Lambda ARN. Configure the Skill Now that you have all the components, let's put everything together. Go back to the Amazon Developer Console and sign in as needed Click on Developer Console in the top right corner if you are not redirected. Go to Alexa > Alexa Skills Kit. (link) Then click the test skill you created earlier In the Configuration section: Endpoint > Default = enter your Lambda ARN noted from the previous step Authorization URL = https://www.amazon.com/ap/oa Client ID = your client ID from LWA noted in a previous step Scope = profile (click Add Scope first) *this is case sensitive* Access Token URI: https://api.amazon.com/auth/o2/token Client Secret: your client secret from LWA noted in a previous step Client Authentication Scheme: HTTP Basic (Recommended) Click Save Provide Redirect URL's to LWA: The Configuration page for your Skill lists several Redirect URLs (shown in green above). Open the LWA security profile you created earlier (the tab that you left open) and click on the Web Settings tab. Click Edit and provide each of the Redirect URL values from your Skill in the Allowed Return URLs field. Click Save. Upload the sketch to your MKR1000 Download the Arduino IDE from https://www.arduino.cc/en/Main/Software Don't connect your MRK1000 just yet Launch the IDE and open the MKR1000 sketch from the repo. HERE Click on the tab called arduino_secrets.h Enter the SSID and password for your WiFi into SECRET_SSID and SECRET_PASS Enter the shiftr key and secret you wrote down earlier into MQTT_KEYand MQTT_SECRET If you chose a different device ID when creating the Lambda function, then change MQTT_DEVICE_ID here to match. Click on the Tools menu, where it says Board: xxxxxxxxxxx and click Board Manager... In the text box enter MKR Click the entry called Arduino SAMD boards... and click Install. Once the install is complete click Close Click on the Tools menu, where it says Board: xxxxxxxxxxx and click Arduino/Genuino MKR1000 Click on Sketch > Include Library > Manage Libraries... on the menu Search for WiFi101, click on WiFi101 by Arduino, click Install Search for MQTT, click on MQTT by Joel Gaehwiler, click Install, click Close Connect your MKR1000 with a USB cable. On the Tools menu again, where it says Port: xxxxx select the correct port, e.g. COM10 (Arduino/Genuino MKR1000) This may already be selected. On the menu click Tools > Serial Monitor to open the serial monitor window. Then click Sketch > Upload, once the upload has completed you should see the following appear in the serial monitor window... Checking wifi...done Connecting to MQTT broker...done Status: OFF Power: OFF Heat: OFF Test it! Now comes the fun part: Open https://shiftr.io/ in your browser and login to your dashboard. You should see a variable appear in the list on the left called BrewTime/Actual and a blip moving around the nodes every 10 seconds. In a new tab open https://alexa.amazon.com Login with same Amazon developer account Make sure you have an Alexa device associated with the account. If not, in another tab visit https://echosim.io/ and setup a virtual Alexa on your Amazon account. Once you have an Alexa device setup Go to Skills > Your Skills (in the top right corner) then click on Dev Skills. Click on the skill and then click Enable Log in with the same Amazon credentials when presented with a LWA login page Allow LWA access, and you should see a message that says you can close this window. Close that window and you should be presented with a popup asking to discovery devices. Click Discover Devices. Go to Smart Home > Devices and you should see Brew Time Kettle Now with your Alexa device, try "Alexa, put the kettle on", Alexa should respond "OK" and the LED should light up on the MKR1000. If this doesn't happen check the CloudWatch logs for your Lambda function for error messages. https://aws.amazon.com/cloudwatch/ If you get stuck, there are some notes on testing and debugging in the repo. https://github.com/TmpR/brew-time The Hardware This video shows you how to wire up your MKR1000 and Logic Level Converter to the kettle. You can also refer to the wiring diagram, PCB image and schematic below for more info. I chose this kettle because it had low voltage pushbuttons and a digital display. This makes it much easier to interface with the Arduino than a conventional kettle with a 240v switch, although the routine for turning it on and off is a little complicated. It also has all the electronics in the base, which gives us more room to add things and it's completely separate from the 3kW heating element and water! The process for boiling the water requires pressing the power button (unless the kettle is already powered on). Then pressing the temperature button, once only, pressing it again within 5 seconds will change the temperature. To stop the kettle we can just press the power button once, but we need to make sure it is actually on already. To get the Arduino to simulate pressing these buttons, we simply connect one side of the button to GND for 150ms. We can read the state of the kettle by monitoring the LED backlight voltage, this will tell us if it's powered on, and checking for +5v on the HEAT control wire to see if the kettle is actually boiling the water. As the MKR1000 I/O pins operate at 3.3V we need to use a logic level convertor to step the voltage up and down to interface with the 5V kettle. The voltage between the LED backlight negative pin and GND is between 2 and 3 volts, so this can be connected directly to the MKR1000's analogue in pin. Further Reading Some of the steps above were taken from Amazon's guide to building a Smart Home Skill, it's a useful resource. https://github.com/alexa/alexa-smarthome/wiki/Build-a-Working-Smart-Home-Skill-in-15-Minutes Why use shifter as the MQTT broker and not Arduino Cloud or AWS IoT? At the time of writing Arduino Cloud is still in alpha and is fairly unreliable. This would be the obvious choice once they have worked out all the bugs. AWS IoT also integrates very nicely with Lambda, however it only supports certificate-based authentication and this can't be done easily with the MKR1000 at the moment. Schematics Kettle PCB Where to connect the wires to the kettle Maker:S,Date:2017-8-29,Ver:6,Lens:Kan03,Act:Lar02,E-Y Wiring Diagram How to connect up the MKR1000 and Logic Level Converter to the kettle. Schematic The Schematic. Code BrewTime repository Contains the AWS Lambda function and the Arduino MKR1000 sketch. Tmp2k / brew-time Arduino MKR1000 powered Alexa Smart Home Skill to put the kettle on. — Read More Download as zip   Source : Alexa, Put the Kettle On! ### Amazon Alexa Enabled USB Fan Amazon's Alexa is cool. USB fans are cool. Alexa enabled USB fan, even cooler. This fan turns on with a voice command to an Amazon Alexa device, "Alexa, turn [insert your name here]'s fan on". The fan is also set to turn off automatically after 45minutes (adjustable through code). The weather has been hot lately and my kids wanted a fan in their room to cool them off at night when they go to sleep. We used a stationary Vornado fan but the fan was way too loud (even at the lowest setting) and kept them up. I stumbled across these plastic Comfort Zone desktop USB fans at my local hardware store on sale for $11 each (also available on Amazon). The fans are fairly quiet and strong enough to provide a pleasant breeze. The fans are perfect except I had to remember to turn them off. https://youtu.be/LjalOHyUP1U I have a bunch of ESP8266 Wi-Fi modules and read about the fauxmoESP project. That gave me the idea to control the fans with Amazon's Alexa. Initially I thought about making a small hub that used one module with 2 USB ports, but that seemed like a lot of work designing and printing an enclosure and I would have to order female USB ports. The simpler method is to stick the ESP8266 module in each fan. This ends up using more modules and USB chargers but I completed this project in a day for 4 fans (one for each member of the family). These instructions are for the Comfort Zone fans, but I'm sure that similar USB fans can be modified. My guess is that any fan with optional battery power would be a great candidate since the ESP8266 would fit in the battery compartment. Step 1: Materials, Tools, Supplies and Software Materials USB Fan with battery compartment (Comfort Zone Oscillating Desk Fan)ESP8266 Module (Wemos D1 mini)Logic Level N-Channel Mosfet (IRL3103PbF)300 Ohm Resistor10K Ohm ResistorWire Tools Hobby KnifeHot Glue GunMicro USB CableScrew DriverSoldering IronTweezersWire Strippers Supplies SolderSolder WickHot Glue Software Arduino IDE Notes: Almost any USB fan could be used for this project as long as there is room to fit the ESP8266 module. A fan with a 4AA battery compartment will fit a Wemos D1 mini. If using another fan, you would need to figure out the circuit of the fan and basically replace the switch with the Wemos D1 mini. I chose the Wemos D1 mini as it is an inexpensive and an easy ESP8266 module to use. The board contains everything you need to get started right away. It has a USB connection to connect to your computer and a decent LDO voltage regulator that you can connect USB power to. I used an IRL3103 N-Channel MOSFET because it fully turns on with 3.3V on the gate, on resistance is very low, capable of 64A, and works nicely with 5V. I know the current rating is overkill, probably only need around 750mA, 200mA for the ESP8266, 400mA for the fan, and some leeway. If you choose another MOSFET make sure it is similar and able to handle the power requirements. Step 2: Fan Modification Wiring The diagrams show the fan's original wiring (minus the connectors to the motor and front PCB that has the power switch/speed select) and the modified wiring. Basically the modification is just replacing the original power switch with an ESP8266 module and MOSFET as a switch. As for values for the resistors and MOSFET, I pieced what I could understand from reading electronics posts and blogs. I am a software developer and dabble in electronics as a hobby so please don't scream at me at why use that or don't need it. I do welcome suggestions and improvements if you have any. I chose 300 ohm for the gate resistor after reading somewhere that even though the gate is suppose to be high impedance, there is chance that it goes low during a transition. The 300 ohm should limit current at the 12mA I/O max of the ESP8266. The 10K resistor to ground is what most say is good enough to discharge the gate. Works for me so why not. I'm not sure if there is already a flyback diode somewhere up the fan assembly. I'm guessing there isn't any. So I reuse the diode that was meant to protect the batteries from the USB power as a flyback diode across the fan motor. Speaking of that diode, what protects the USB power? I guess they expect the USB to protect itself. Like I said, I'm a software developer, so I welcome suggestions and improvements for the electronic parts. Step 3: Program the ESP8266 Program your ESP8266 module first. Install the ESP8266 libraries for the Arduino IDE. Download the project fauxmoESP from Bitbucket. Also download all the dependencies for fauxmoESP. I chose fauxmoESP for its simplicity and ease of use. Aside from the necessary ESP8266 library setup, you just need 4 lines of code to enable Alexa to turn on and off something. Download the Arduino project files ESP8266AlexaEnabledUsbFan from GitHub. The Arduino project is in the folder src/ESP8266AlexaEnabledUsbFan/. You can double-click on ESP8266AlexaEnabledUsbFan.ino to open the project in the Arduino IDE. There are a few lines of code that will need updates. //#define DEBUG // uncomment to print to Serial output This line enables/disables debug statements to serial out. Uncomment if you run into problems. The debug statements tell you if you connect to your Wi-Fi and the IP of the module, and if the module responds to Alexa. For now, uncomment the line by remove the beginning two slashes "//". #include // contains my credential information ... You can create a MyCredentials.h file and define the symbols HOME_WIFI_SSID and HOME_WIFI_PASSWORD or remove this line and hardcode your SSID and password further in the program for WiFi.begin(). *Note: To be safe and save yourself from frustration, treat SSID as case sensitive. I'm not sure if my router or the ESP8266 module is the one that is picky about it. I could not connect to my Wi-Fi when I used all lower case when my SSID had capital letters in a few places. I had to match the SSID exactly.* #define DEVICE_NAME "Daddy's fan" // name used for Alexa command ... This line defines the name you will use for the Alexa on/off command. As coded, you would say "Alexa, turn Daddy's fan on". Change to something meaningful for your fan. #define FAN_ON_DURATION 2700000 // 45mins = 2700000ms ... This line defines how long the fan will stay on in milliseconds when turned on by Alexa. Change to a time that suits you. // setup static IP as this cuts down on time trying to obtain an IP through DHCP IPAddress espIP(192, 168, 1, 30); IPAddress gateway(192, 168, 1, 1); IPAddress subnet(255, 255, 255, 0); These set of lines are to setup the IP address of the ESP8266 module. You want to set a static IP as Alexa remembers your device by IP. So if the IP changes, you will need to rediscover the device before you can control it again. Read your Wi-Fi's manual on how to set a static IP connection and enter the correct settings. WiFi.begin(HOME_WIFI_SSID, HOME_WIFI_PASSWORD); Finally, if you do not want to make MyCredentials.h file. You will need to enter your Wi-Fi information here. Compile and flash the program to your ESP8266 module via a micro USB cable. Open the Arduino IDE Serial Monitor and reset the module. You should see the connection to your Wi-Fi. If not, then the Wi-Fi credentials and/or IP settings are incorrect. *Note: SSID might be case sensitive as I mentioned earlier.* Keep the module attached to you computer and the Arduino IDE running for the next step. Step 4: Discover Device Open and login to the Amazon Alexa application at https://alexa.amazon.com. Click on Smart Home in the left pane. Click Devices in the right pane. Click on Discover. You should see your device name show up as a Wemo switch. As you can see, I made 4. Command Alexa to turn on and off your fan. You should see debug statements in the Serial Output window of the Arduino IDE. If the module responds correctly to Alexa, comment the debug statement and re-flash the program to the ESP8266 module. The module does not need to send serial output since you will embed it in the fan. Now that our module is setup, we will move onto modifying the USB fan. Step 5: Remove Switch Knob At the base of the fan is the power switch. You will need to pull off the plastic knob as it does not slip into the slit when you remove the bottom. Step 6: Remove Bottom Screws Place the fan on its side. Best to place with the fan face down. The plastic structure of the fan doesn't seem strong. With the fan face down, you don't stress out the neck as much. Remove the battery cover and keep it close. Carefully remove the circular foam pads to keep the sticky stuck to it. Best to slowly lift the pad from all around instead of just tearing from one side. Stick the removed pads to the inside of the battery cover. The battery cover makes a great temporary holding place for the pads. Remove the screws that were hidden under the pads and store them somewhere safe. The screws are small and desktop gremlins love sneaking away with them. Step 7: Disconnect Connectors Remove the bottom from the fan. The rear of the fan has a PCB with a DC jack and two connectors. One connector (with red and black wires) leads to the switch in front. The other connector (two black wires) connects to the fan motor. Disconnect the two connectors. Step 8: Remove Battery Connections Remove the two connections from the rear PCB to the battery terminals. Step 9: (Optional) Remove Power Switch I removed the power switch because the fan will turn on and off with Alexa. Also, I don't care for two speeds, I just want max speed. The switch PCB pulls straight out. Oh another reason for removing the switch is to prevent my wife and kids complaining the switch doesn't do anything. So I rather just remove it completely. Step 10: Unmount Rear PCB Unmount the rear PCB. Some models have the PCB mounted with screws and others snapped in. My blue fan had screws while the three other black fans snapped onto posts. Step 11: Remove Battery Terminals Straighten the battery tabs sticking through from the battery compartment. Flip the bottom over and remove all the battery springs, connectors, and terminals. Step 12: Solder Flyback Diode I'm not sure of the internals of the fan if there is a flyback diode or not. I'm guess there is none considering this fan is cheapy. We can reuse the battery protection diode as the flyback diode. The great part is that the diode is already half-way in the right place and we can reuse a wire already connected to it. You will need to connect the red wire that used to connect to the batteries to the ground side pin of the connector to the motor. The right most solder pad if you are looking at PCB with DC jack facing you on the bottom of the PCB. Cut the red wire to length a little past the connector. Strip the end and tin. Solder the wire to the connector's pin. Step 13: Remove Switch Connector & Last Battery Wire Use a soldering iron to remove the black wire that used to connect to the batteries. Do the same for the connector that was used to connect to the front PCB. Use solder wick to clean the solder pad and holes so that you can use them in the up coming steps. This will make soldering in wires easier. Step 14: Widen Battery Terminal Hole Widen the left hole (when looking at the bottom facing the rear) that had a battery terminal sticking out of. Widen the hole big enough that you can fit 4 of the wires you will use to connect the rear PCB to the ESP8266 module. Cut your wires to a length of about 6 inches each. I happen to have a nicely colored 4-wire ribbon cable. Two negative wires (black), one positive (red), and one for the motor's negative connection to the MOSFET drain pin(green). Step 15: Strip and Tin Wires Strip and tin one end of your wires. Step 16: Soldering Wires to Rear PCB Stick your wires that will be used to connect to ground in the two left most holes. Left-most hole used to have the black wire connected to the batteries. The next hole was the left pin of the connector that used to connect to the front PCB. Stick your motor wire to the right pin of the connector that used to connect to the front PCB. Solder the wires in place. Step 17: Solder Power Wire to Rear PCB Solder the last wire for power to the diode leg connected to the positive input of the DC jack (I found this the easiest spot to solder to). This would be third solder spot from the right. Step 18: Trim Excess Trim any excess wire you have after you have soldered the 4 wires. Step 19: Insert Wires Into Battery Compartment Insert the 4 wires you just soldered to the rear PCB through the hole you widened earlier. Pull about half length of the wires into the battery compartment. Remount the rear PCB. Pull the slack in the wires into the battery compartment. The base has some clearance above the bottom so you don't have to worry about completely removing all slack. There is some wiggle room. Step 20: Prepare MOSFET and Resistors To make the ESP8266 module and components fit in the battery compartment you will need to trim the legs of the MOSFET. I trimmed the MOSFET legs about 1mm away from the body where the legs became thinner. I trimmed one side of the resistors to about 3mm. Step 21: Tin MOSFET Legs Tin the legs of the MOSFET. Try to leave a smidge of solder on the leg. This will make connecting the resistors and wires easier. Tin the short legs of the resistors. Step 22: Solder 10K Resistor to Source Pin Solder the short leg of the 10k ohm resistor to the source pin of the MOSFET. Since the MOSFET leg has some solder on it and the resistor leg is tinned, put the two together and heat with a tinned iron. The MOSFET and resistor should solder together quickly and nicely. Step 23: Solder 300 Ohm Resistor to Gate Pin Solder the 300 ohm resistor to the gate pin. Just like how you did in the last step. Step 24: Connecting Resistors Together Lay the MOSFET with the ground plate side down. Bend the leg of the 10K resistor at a right angle towards the 300 ohm resistor. Join the resistors together by wrapping the leg of the 300 ohm resistor around the leg of the 10K resistor where they intersect a few times. Cut the excess leg off of the 300 ohm resistor. Solder the joint. Step 25: Connect MOSFET to ESP8266 Module Place the ESP8266 module with the metal casing side down. Place the MOSFET ground plate down to the to the right of the ESP8266 module. Insert the leg of the 10K resistor into the D2 hole from the bottom. The leg should be stick out of the module on the side of the USB connector. Try to get the MOSFET as close as possible to the module. Solder the resistor in place and cut off the excess. Note: Handle this component by the ESP8266 module so that you do not stress break the resistor leg. Step 26: Cut Wires to Length Place the module in the battery compartment (remember to only handle the ESP8266 and not the MOSFET). I placed the module on the far side of where the wires enter (see picture). Trim the wires to a length that can reach the module but not too short, you want about 2-3mm excess length so that you can trim the ends for leads). Step 27: Strip and Tin As usual, strip and tin the end of the wires to make soldering easier. Step 28: Solder 5V and GND Insert your positive wire lead into the 5V hole and your negative wire into the GND hole. Solder in place. Step 29: Solder Motor Wire This step is easier done with tweezers. Solder the motor wire to the drain pin of the MOSFET. As you did with the resistors earlier, as long as the leg and wire lead have solder on them, a quick touch of the soldering to the two will connect them together. Step 30: Solder Ground Wire to MOSFET Solder the final wire that should be the ground wire to the source pin of the MOSFET. This pin has the 10K resistor attached to it. Step 31: Hot Glue Gun MOSFET Use a hot glue gun to hold the MOSFET in place. A drop or two globbed on the side that has the metal casing should be enough to hold the MOSFET. The reason I held off doing this step for last is that I'm terrible with a hot glue gun. I didn't want glue flowing over the 5V and GND pads of the ESP8266 module before the wires are soldered in place. With the MOSFET glued in place you don't have to worry about stressing the connecting resistor leg. Step 32: Test Run Place the ESP8266 assembly into the battery compartment and place the battery cover back on. Place the top of the fan close enough that you can connect the fan motor to the rear PCB. Reconnect the fan motor. Make sure the top of the fan is upright. Plug in the USB cable and connect to a USB charger that is capable of delivering at minimum 600mA. Speak your Alexa command. The fan should turn on. If not, check your connections and make sure you flashed the ESP8266 correctly. Step 33: Put Fan Back Together Align the top and bottom correctly and screw back together. Return the foam pads to theirs spots covering the screws. Step 34: Personalize Personalize the fans so you know the name of the fan. Useful if you have many fans. I just used a simple label maker to put the name of the fan. Source: Amazon Alexa Enabled USB Fan ### Amazon DRS Promise: Never Miss Coffee Break Again! Amazon Dash Replenishment Service Automatic coffee ordering robot using Arduino MKR1000. Never miss another coffee break again! Things used in this project Hardware components Ultrasonic Distance Sensor × 1 LED (generic) × 1 SparkFun Pushbutton switch 12mm × 1 Resistor 100 ohm × 1 Arduino MKR1000 × 1 Software apps and online services Arduino IDE Amazon Web Services AWS SNS Amazon Web Services Amazon Dash Replenishment Service Hand tools and fabrication machines 3D Printer (generic) Story Coffee fuels our nation, according to this Gallup article Just under two-thirds of U.S. adults drink at least one cup a day Coffee drinkers average 2.7 cups per day, unchanged from 1999 A quarter say they're addicted, but only 10% want to cut back We all love our coffee. We want constant supply of it - at home, in the office, the gym, everywhere these days. Some people have it for breakfast, morning breaks, lunch, afternoon snacks, after dinner, midnight snacks. Just about anytime of the day. This led me to experiment on new Amazon Dash Replenishment Services. Coffee is something we use everyday and a great use case for Amazon DRS. Demonstration Setup Instructions This is based from following instructions from this github Repo from Brian Carbonette. https://github.com/andium/AmazonDRS The instructions are easy to follow. Fit for Hackster devs like us. I used the same library and followed the steps to create an Arduino MKR1000. SNS Simple Notification Service Create a developer account with amazon web services Create SNS Simple Notifications Service. Set up the SNS Topic for Dash Replenishment! You can find those here. LWA Login With Amazon Create a login with amazon security profile. Create a security profile to authorize the device to make purchases and log in with Amazon. Fill out the required fields, Security Profile Name,Security Profile Description,Consent Privacy Notice URL,Consent Logo Image Don't forget to setup Allowed Origins and Allowed Return URLs. Take note of Client ID and Client Secret. Dash Replenishment Device Create a Dash Replenishment Device. Follow this device creation wizard. It's simple. You need Device Name, Model ID, Image. Then create Slots. You would need to know how to get the Amazon Standard Identification Number (ASIN). Currently only items that are "Shipped and Sold by Amazon" are eligible for DRS. Take note of your devices Model ID as well as the associated Slot IDs. Login With Amazon and Authorization Code Grant To simplify the process, we're skipping the customer facing app and just hack our registration. Make sure you install postman. here's the message to send https://www.amazon.com/ap/oa?client_id=&scope=dash%3Areplenish&scope_data=%7B%22dash%3Areplenish%22%3A%7B%22device_model%22%3A%22%22%2C%22serial%22%3A%22%22%2C%20%22is_test_device%22%3A%22true%22%7D%7Dtest&response_type=code&redirect_uri=https%3A%2F%2Fwww.getpostman.com%2Foauth2%2Fcallback replace these: : amazon Client ID like is the device model, in my case I named it WalabotPi3 is the name of device, I named it arduino123. It's currently setup as a test device so it won't order. Go thru the process of selecting items for each slots. Complete it. After that, In the address bar it would look something like this. https://app.getpostman.com/oauth2/callback?code=&scope=dash%3Areplenish jot down the code, you will use it to setup device. code looks something like "ANdNAVhyhqirUelHGEHA" Authorization I cloned this repo, modified AmazonTokens.h file #define client_id "amzn1.application-oa2-client.c0a2100c1af289b1bf4011c71f6029b3" #define client_secret "ec48483c54c34a23a71aa8ccb2742902f7d3d00c2dd78fc5ac404eef0111e485" #define redirect_uri "https%3A%2F%2Fwww.getpostman.com%2Foauth2%2Fcallback" Zipped up the folder then installed the library in Arduino Then open this example File>>Examples>>AmazonDRS>>authCodeGran and modify auth_code #define auth_code "ANNnZjoWYoEIhEJrtLqL"; After running the authCodeGrant, look at the output on serial port. It will return something like this refresh token = "Atzr|IwEBILdfysz66E9sRHsUobHgfh1X_h-esnBfcCdYjdcCfhGRkZqXujzXSN_3a8yqj5btX1B6NgbrmEX6wax_wmJ7Sgaaa39GbR-6hjDt_tHpKsFXPGwnIhy-14CWuE4oeYDWG4pCvQ4JEMKk2DiAsuwlUtoOVwaEOif1gWErh5rswCJ8mRhaXQ7SJhZB0CWYHm_ZA_PY8xTTVTUcZFqP7iz8kBw5QGDePyOb8NvJvSuBYYkwRQTj-qrytfdcHwMWOJc5QdoyPFpmchSfsMUpMqjDmwVPBfFzb0xZWYKxdUerSeKV1VVlS4Bwl2j-4gHnjHGohUsxau4Bn9SfG9McP-7RqD9Vmk3g--rsfACQ-uVLCJSJ29sBEMNkA5sxh9E9fpTwEw166WY-xBfYa_XB9aAU3n6Fn2yFM0I7ZpPIY1fy0gkdYkFOFD0uAOdoTFDxGXwbBWE"; Which is the refresh token for your device. Now go back and edit AmazonTokens.h at the Arduino Library Folder and change refresh token and authorization_grant_code static String refresh_token = "Atzr|IwEBIIKDkzgMa5g7O0R1mLZZ6YZo-A1Ae5Ffj6wmV_rPbmAI0oixxTff8g3PN6MrOIEQpB9o_6BlDjiR6gkfRS_82Wp_0GWWvTrtYehcFJ8iKjuqf8n1ff9OrdHQU1_5nW_5Hf5loeIQ88TGazK2wy18UmOXOz1lbl9FDvWVQZl4t_6ggzDfMTVupvNr_ZtDrPm72auzoJIkGmGIM4S1RUw-Ru8X4q-UlzzYYfvRSJnPLAUTM3tTOEkv5e33SzExAaHl0tF22drRqvR1dEVlR_Zzw_IZ-1hzhIAvHrJs22K5dSEmkJKN7g8sD1tUKkn-ErMJhJrMehmvjwanF_O141Z5bVokmOLwiQKq_AYKGz8mJ0WPjBNQ3TbZ1g-3Xp-LqeMcKViNImcl1-_K89K5rupwAh-OmIPP5VhBArvhdeqEnreNU7LVLNoHvvyFB5ypwKQsHLe8"; static String authorization_grant_code = "ANNnZjoWYoEIhEJrtLqL"; Hardware The hardware is enclosed in a 3D printed enclosure big enough to fit an Arduino Uno sized microcontroller with Wifi Shield. Lots of different hardware can be used. In this case we powered the device with a MKR1000 Arduino microcontroller. The MKR1000 has built in WiFi. The enclosure is 3d printed, the STL and SketchUp files can be found below for download. Firmware Here's the code. Assign your wifi credentials. char ssid[] = "XXXXXXXX"; // your network SSID (name) char pass[] = "XXXXXXXX"; // your network password (use for WPA, or use as key for WEP) Assign the SlotID and Slot Number #define slotNumber 1 //This will vary for multi slot devices - dash buttons typically only serve one product/slot static String slotStatus = "true"; //boolean which depicts if slot is available for replenishment static String slotId = "e2d8d2a3-ecf3-4532-bc02-a1bbb776bdf8"; //unique slot id ex: 0a5038b7-7609-4b81-b87e-3e291f386324 Push the code to the Device. Watch the serial monitor, you'll see something like this... Placing Order Requesting Replenishment for slotId b6783dfa-838f-838f-838f-e1eae6049757 HTTP/1.1 200 OK Server: Server Date: Sun, 26 Feb 2017 13:32:52 GMT Content-Type: application/json Content-Length: 170 Connection: close x-amzn-RequestId: 127cd13d-fc28-11e6-ad46-a75ded86f73a x-amzn-type-version: com.amazon.dash.replenishment.DrsReplenishResult@1.0 Vary: Accept-Encoding,User-Agent {"detailCode":"ORDER_INPROGRESS","eventInstanceId":"amzn1.dash.v2.o.ci5hNTc5MzlkMC1lZjRkLTQ4MjYtYTNhZC1iZjI3ODIzOGYxYzcuM2IyZjY0ZjItOWE4My00OWI0LTgyOGMtODA5ZTc2ODBhNTRl"}cm: 148 Average cm: 24 cm: 148 That's it. You'll receive an email something like this... It won't order because we specified that this is a test device during the registration, change this is_test_device%22%3A%22false for production. https://www.amazon.com/ap/oa?client_id=&scope=dash%3Areplenish&scope_data=%7B%22dash%3Areplenish%22%3A%7B%22device_model%22%3A%22%22%2C%22serial%22%3A%22%22%2C%20%22 Feel free to contact us. If this project made you interested in Amazon Dash Replenishment Services, Everything MKR1000, or made you want another cup of coffee; Follow us and push the respect project. Custom parts and enclosures 3D Printed Parts STL and SKP files. Google Sketchup and STereoLithography files Schematics Circuit Diagram Schematic Code coffeeAmazonDRS2.ino Amazon DRS Promise: Never Miss Coffee Break Again! https://www.hackster.io/coffee-drinkers/amazon-drs-promise-never-miss-coffee-break-again-a88584 AmazonDRS An Arduino library for WiFi101 connected devices implementing the Amazon Dash Replenishment API andium / AmazonDRS Download as zip Source : Amazon DRS Promise: Never Miss Coffee Break Again! ### Amazon Dash Button for Arduino! A project using the AmazonDRS library for WiFi101 connected Arduinos. Just like the AWS IoT button, but completely open source! Things used in this project Story TL;DR; Buy some stuff on Amazon by clicking a pushbutton connected to your WiFi101 enabled Arduino. It's like a Dash button, but cooler! Motivation Back in the Spring of 2015 Amazon released the Dash Button to help facilitate frictionless product purchases with just the click of a button! For example this dash button ensures my pups insatiable appetite for Greenies dog treats is always well served and my pantry never runs low! You register the button to your amazon account and when you're about to run out you press the button, a couple days later voilá treats at your doorstep! Cool. Then for the developer community Amazon released the AWS IoT button! It's possibilities are endless! Amazon describes the AWS IoT Button as... "...a programmable button based on the Amazon Dash Button hardware. This simple Wi-Fi device is easy to configure and designed for developers to get started with AWS IoT, AWS Lambda, Amazon DynamoDB, Amazon SNS, and many other Amazon Web Services without writing device-specific code." This is great if you're a web savvy developer comfortable with AWS or are looking to learn more about the IoT services Amazon is now supporting. Unfortunately this boxes out us hardware hackers! Where's my I/O? What if mildly "device-specific code" is sort of your thing? Sure you could hack open a Dash Button and dive headfirst into some "bare metal" dash embedded dev like the talented folks at Adafruit have documented for you. But if you're still building your chops on Arduino and aren't quite ready to dive into hardware abstraction layers and shift registers you're still out of luck. Until now! Amazon has released the Dash Replenishment API for device manufacturers and developers! The good news... now we can create hardware devices that can initiate frictionless purchases all on their own! This means our coffee makers can purchase filters for us before we run out, or our laundry machines can order detergent based off of usage statistics. It's now up to us to build these creative frictionless purchasing devices. Read more: Amazon Dash Button for Arduino! ### Heart-rate monitor on a small OLED display with MicroPython Pulse sensors have become popular due to their use in health-monitors like the Fitbit. The sensors used are cheap, simple and pretty reliable at getting a reasonable indication of heart rate in daily use. They work by sensing the change in light absorption or reflection by blood as it pulses through your arteries — a technique jauntily named photoplethysmography (PPG). The rising and falling light signal can be used to identify the pulse, and subsequently calculate heart rate. Most commercial sensors (Fitbit, etc.) use green-light based sensors and similar sensors are available for use in your own projects. In this project we're taking a Pulsesensor.com sensor and using it to build a working heart monitor with OLED pulse, BPM and trace display, using MicroPython on a Wemos D1. Wiring up the sensor In this project we're using an Wemos D1 and a Pulsesensor.com heart rate sensor, but other boards and sensors will also work fine. Wire up the sensor as follows, with the signal (S) pin connected to your board's analoge input. Once your sensor is wired to this pin you can use following MicroPython code to read the value from the sensor: import machine adc = machine.ADC(0) >>> adc.read() 550 Note: The values output by this ADC are integers in the range 0-1023. A reading of 550 is equivalent to 0.54 on a 0-1 scale. Detecting a beat To get some data to work with I set up an loop to print out the above data to terminal while measuring my own pulse. The output was logged to an outfile using screen -L 115200 Below is a plot showing the resulting output showing a rising peak for each beat. Read more: Heart-rate monitor on a small OLED display with MicroPython ### Broadcom AFBR-S50 ToF laser light sensor measures up to 10 meters The AFBR – S50 is a multipixel distance and motion measurement sensor. It has an integrated 850nm vertical cavity surface emitting laser (VCSEL) which uses a single voltage supply of 5V. It’s measurement rates are quick and as fast as 3 kHz, which is a distinguishing feature. However, this is not the reason why the AFBR – S50 stands out. It is different because unlike other Time of Flight (ToF) ranging sensors, the AFBR – S50 can measure up to 10 meters whereas similar sensors don’t get close to that. Furthermore, the sensor works on the principle of Optical Time of Flight. Time-of-Flight principle (ToF) is a method for measuring the distance between a sensor and an object, based on the time difference between the emission of a signal and its return to the sensor, after being reflected by an object. If you have used the popular HC-SR05 Ultrasonic sensor, then you have seen this principle in action. The AFBR – S50 can be used both inside and outside to cover wide ranges of ambient light. It supports almost 3000 frames every second with an accuracy of less than one percent on diverse types of surfaces. The multi-pixel sensor works with up to 16 illuminated pixels out of 32 and with its best-in-class ambient light suppression of up to 200kLx, to ensure smooth usage outside. It uses SPI Interface to communicate with a host device. AFBR – S50 not only works outside but it is also equally effective on colored, white, black and metallic reflection objects. Broadcom has released two different versions of the sensor: AFBR-S50MV680B 680nm laser light source. One illuminated pixel FOV (Field Of View) 1.55° x 1.55° Single voltage – 5V supply AFBR-S50MV85G 850nm laser light source 9-16 illuminated pixels FOV 6.2° x 6.2° Single voltage – 5V supply Below are the General Specifications for the Multipixel sensor: Integrated 850nm laser light source. Between 9-16 illuminated pixels. FOV 6.2°x 6.2° (1.55 x 1.55°/pixel). High-speed measurement rates of up to 3 kHz. Variable distance range up to 10m. Operation up to 200k Lux ambient light. Works well on all surface conditions. SPI digital interface (up to 20 MHz). Single voltage supply 5V. Integrated clock source. Laser Class 1. Accuracy < 1 percent. Drop-in compatible with the AFBR-S50 sensor platform Read more: Broadcom AFBR-S50 ToF laser light sensor measures up to 10 meters ### Simple Arduino Data Logger Introduction A data logger is an electronic device or instrument that records data over a period of time. It allows the user to record time or location stamped data which can be viewed at a later time or real time. Irrespective of the type of data being logged or the kind of data logger, these devices usually contain two main units, the sensor unit and the storage/communication unit. The sensor unit may involve the use of an external instrument or a sensor embedded within the device. Increasingly, but not entirely, data logging devices are becoming more based on micro processors and microcontrollers, which has opened up a whole new level of data gathering and storage. For today’s tutorial, our focus will be on building an Arduino based data logger that reads the temperature of the environment every few minutes and saves the data in a micro SD card. The Project is based on the Arduino Nano and the DS3231 RTC Module which has a temperature sensor and a real time clock on board. Required Components The following components are required to build this project:  DS3231 RTC  Micro SD card module  Arduino Nano  Multimeter Mastech 8268  AA Battery holder  Small Breadboard  Wires  Batteries  Schematics Connect the components as shown in the circuit diagram below. The data logger is made up of the Arduino Nano, the Ds3231 RTC Module, and a micro SD card module. The micro SD card module communicates with the Arduino over SPI as explained in a detailed tutorial here, while the DS3231 module communicates with the Arduino over I2C. A detailed tutorial on the DS3231 module can also be found here. To simplify the connection further, a pin map of the connections in the schematics is done below. Connection between Arduino and Micro SD card Module: Read more: Simple Arduino Data Logger   ### Imitation Fireplace Using Cool Mist and LEDs Build a convincing artificial fire effect for the holiday season using NeoPixel LEDs, an Arduino UNO, and a cool mist module. Story This is a project I've had on the backburner for almost exactly 1 calendar year. The seed was planted when I toured the Harry Potter Studios last year and saw a fake fireplace effect being used quite extensively. I am also an avid watcher of the "Fireplace for your Home" Netflix channel, so I eventually realized I needed one of these imitation fires of my own. So here we are now! Take a look at what I put together, and if that curiosity is still burning keep reading for instructions to reproduce this project yourself. Materials Ultrasonic Mist Module Computer Fan 4 x AA battery holder Arduino Uno Portable Arduino Power Supply NeoPixel Stick 3D Printed Motherboard Fire Logs (found in local forest) Scraps of wood to build a stand (found in local scrap heap) Instructions The instructions for this are actually pretty simple, basically you just need to get the materials, and put them all together. The only technical part is soldering the wires onto the NeoPixel stick, and uploading the code to the Arduino. So let's start with the NeoPixel LEDs. Step 1: Get the LEDs Working Start by downloading and installing the NeoPixel Arduino Library found here. Prepare your NeoPixel stick to plug into the Arduino by soldering wires to the GND, DIN, and VIN leads located at the bottom of the stick. Now plug GND into the GND pin on your Arduino, VIN into the 5V pin, and DIN to Pin 6 on the Arduino. If you run the example sketches included in the NeoPixel library, you should the lights working as expect. Now you can upload the fire specific code I wrote found here. If you've plugged the NeoPixel into Pin 6, GND, and +5V, you should now get some bright orange lights. Read more: Imitation Fireplace Using Cool Mist and LEDs ### DIY Arduino Battery Capacity Tester I have salvaged so many old lap-top batteries ( 18650 ) to reuse them in my solar projects.It is very difficult to identify the good cells in battery pack.Earlier in one of my Power Bank Instructable I have told, how to identify good cells by measuring their voltages, but this method is not at all reliable.So I really wanted a way to measure each cell exact capacity instead of their voltages. Few week ago, I have started the project from the basics.This version is really simple one,which is based on Ohms Law.The accuracy of the tester won’t be 100% perfect, but it does give reasonable results that can be used and compared with other battery, so you can easily identify good cells in a old battery pack. During my work I realised, their are lot of things which can be improved.In future I will try to implement those things. But for the time being I am happy with it.I hope this little tester will be useful, so I am sharing it with you all. Note : Please dispose the bad batteries properly. Disclaimer: Please note that you are working with Li Ion battery which is highly explosive and dangerous . I cannot be held responsible for any loss of property, damage, or loss of life if it comes to that. This tutorial was written for those who have knowledge on rechargeable lithium ion technology.Please do not attempt this if you are novice. Stay Safe. Step 1: Parts and Tools Required : Parts Required : 1. Arduino Nano (Gear Best ) 2. 0.96" OLED Display ( Amazon ) 3. MOSFET - IRLZ44 ( Amazon ) 4.Resistors ( 4 x 10K , 1/4W ) ( Amazon ) 5. Power Resistor ( 10R, 10W ) ( Amazon ) 6. Screw Terminals ( 3 Nos) ( Amazon ) 7.Buzzer ( Amazon ) 8.Prototype Board ( Amazon ) 9. 18650 Battery Holder ( Amazon ) 10. 18650 Battery ( GearBest ) 11. Spacers ( Amazon ) Tools Required : 1. Wire Cutter / Stripper ( Gear Best ) 2.Soldering Iron ( Amazon ) Instrument Used : IMAX Balance Charger ( Gearbest ) Infrared Thermometer Gun ( Amazon /Gearbest) Read more: DIY Arduino Battery Capacity Tester ### Connecting Anduino to IFTTT Connect your anduinoWiFi to IFTTT. Control everything around you, or 'let go' and let random events in cyberspace control your surroundings! Things used in this project Hardware components Arduino Due × 1 Arduino Zero & Genuino Zero × 1 Andium Anduino WiFi × 1 Software apps and online services Arduino IDE Adafruit IO IFTTT Adafruit Story Motivation The Arduino, and most popular DIY embedded solutions for that matter are usually great at one of two things; Communicating with sensors and discrete pieces of hardware, or running complex or interpreted code and connecting to third party services (APIs). Balancing power consumption, processing capabilities, and storage will always offer tradeoffs. This usually lands us choosing between Raspberry Pi or Arduino. Pi vs Arduino Raspberry Pi and embedded Linux grants you the opportunity to easily integrate third party libraries and implementations to utilize, say a Java SDK to connect to AWS. Although things can get tricky when it comes time to speak to the DHT22 temperature sensor that's pushing readings to your S3 bucket. With Arduino, instead of having to wrap Python, on top of C, and having no real great way to guarantee consistent timing for readings; You can easily communicate to the sensor on the Arduino using the "bit-banged" proprietary protocol and less than 200 lines of code. Not to mention you'll be hard pressed to get your Arduino MKR1000 to draw 750ma of current to get the job done. In an ideal world you'd have: Low power consumption Simple/close to the hardware, real time sensor integration 3rd party API connectivity and TLS security Finding a single hardware device that fulfills all these requirements is inevitably going to initiate some compromises. I might argue that a true, complete solution, would actually include both an Arduino style embedded device and an embedded Linux machine working together. But when you've only got your Arduino Due and anduinoWiFi shield there's still a great way to get connected to the wonderfully diverse world of open API's out in the wild. IFTTT Enter, IFTTT (If This... Then That). This write up is all about getting your anduinoWiFi speaking to any of the services (applets) available. Imagine: Logging sensor data to a Google Docs spreadsheet Sending a push notification to your phone when your laundry is done Illuminating your umbrella handle with an led if there's rain in the forecast Opening your garage door when you pull into the driveway All of these ideas are totally possible with only a WiFi101 connected Arduino. In a recent project write up we saw how easy it is to connect Arduino to Adafruit IO using anduinoWiFi. Adafruit IO is going to be our gateway to IFTTT. So essentially, by publishing/subscribing to feeds using MQTT (just like we did here) we'll be able to communicate with any applet on IFTTT. Getting Started We're going to jump right into IFTTT and assume that you've already tried the 'Anduino Speaks Adafruit' project and are completely fluent in Adafruit IO, Adafruit MQTT, feeds, etc. If not, take a quick detour and come back in 20 minutes. Assuming you've just confirmed your sensor readings in the Adafruit IO dashboard what's next? Let's hop on over to IFTTT and get these sensor readings streaming to Google Docs. IFTTT So you've signed up for IFTTT and your ready to create your first applet. Applets are what IFTTT calls the little logic widgets that control what happens 'if this' event occurs. Click '+ this': IFTTT Services And you're greeted with a long list possibilities! In this first applet we're going to send data from our Arduino to Google Docs. So: IF our Arduino has a 'temperature reading' log that reading in a google spreadsheet'. Using MQTT we've already published our latest reading in a feed on Adafruit IO, so next we need to get that feed speaking to Google. Search for Adafruit and select: Adafruit IFTTT Applets 'Any new data'. This way, anytime our 'Temperature' feed receives new data, we'll send it over to Google. Choose Temperature Feed Now we get to select our 'trigger' and complete the 'that' portion of our logic. If (We receive new data on our 'Temperature' feed on Adafruit IO) then (????) Search for Google, select Google Drive, and then, 'Add row to spreadsheet'. (If this is your first time using the Google Drive applets you'll be prompted to authenticate using your google account): Google Drive IFTTT Applets The applet pre-populates with variables representing our feed, values, etc... Add row to spreadsheet Don't worry about creating the spreadsheet first, this applet will create one for you named 'adafruit_io_Temperature'. (Or whatever you type in the first field.) Each row in our spreadsheet will contain our temperature value and the timestamp it was created. Your new IFTTT Applet That's it! Just like we had planned earlier... IF our Arduino has a 'temperature reading' log that reading in a google spreadsheet'. Let's see it in action! Anduino --> IFTTT! We've just received our first temperature reading from our Arduino on /bcarbon1/feeds/Temperature: Temp reading 71*F At the same time if we check our Google Drive: Spreadsheet created via IFTTT Applet We even received a push notification (requires d/l of the IFTTT app on your iOS/Android phone) to let us know the new published reading. IFTTT Push Notification That's it! We've just laid the groundwork for easily connecting your Arduino to just about any API out there. What's next? What about using a third party app as a 'trigger' to control something on our Arduino? Bi-directional communication is totally possible. Keep an eye out for more anduino projects where we'll show just how easy it is to subscribe to feed data using MQTT and actuate something in your environment using the Arduino. Can't wait to see what you create using IFTTT, Adafruit IO, and anduinoWiFi! Code Anduino An Arduino library for the Andium(Anduino) shield. Transform your Arduino into an AndiumNode. andium / Anduino An Arduino library for the Andium(Anduino) shield. Transform your Arduino into an AndiumNode. — Read More Download as zip Adafruit MQTT Arduino library for MQTT support adafruit / Adafruit_MQTT_Library Arduino library for MQTT support — Read More Download as zip Source : Connecting Anduino to IFTTT ### Web-connected Glow Pillows Like many older people, my mom lives by herself. She likes her lifestyle but sometimes it gets a bit lonely. We talk on the phone a few times each week but it's the in-between times where she could use a little emotional boost. A simple "I'm thinking of you" would be enough to make her smile but text messages just don't cut it. This seemed like an interesting maker challenge with a feel-good finish line so I grabbed a few things I knew and learned a few things I didn't. Primary goals: Create a non-computer-interface way of communicating Make the UX very simple (she's in her 80s, after all) Evoke the same visceral feeling as holding hands To achieve goal #1, I looked around her living room for normal, everyday objects that she already has. Turns out that throw pillows were pretty ubiquitous so I settled on this as the thing to connect. That decision led to many questions... so many that I had to step back and settle on a few principles so that I'd actually deliver something. Project Principles: Keep it simple Keep it modular During prototyping, emphasize speed over optimization Balance learning with doing Results: The end product made her (and me) very happy! She simply touches her pillow and mine sparkles, indicating a "call". If I touch mine in response, both pillows will glow cyan which shows we're connected. When I press again both pillows glow red, indicating that I'm "hanging up". Obviously, we both need to be around our pillows at the same time but that's the point; this is meant to be like I'm in the room with her. We'll use it in the evenings when she's reading and I'm watching TV or on weekends when I'm running around and don't have time to chat. My kids are always "calling" her and get a thrill when she "answers". It's kind of surprising what a small gesture can do for your spirits. This Instructable: This Instructable is involved and includes everything from soldering, to firmware engineering, to cloud computing to 3D printing. I've made all code and CAD files available but you'll need your own AWS account (free for the first year and the costs associated with this project are tiny after that). Also, you'll need to make two of everything so keep that in mind before embarking! Time required: A weekend or two Cost: ~$45 per electronic device. Add ~$10 per pillow if you don't have any laying around. Difficulty: Moderate if you have some experience with the different skills involved. Advanced if you're jumping in the deep end (mad props if you do!) https://youtu.be/7D8okKQTgDo Step 1: Parts and Tools You'll need a bunch of stuff to build these. I've included links to Adafruit's store where possible because they enable my making passions, have high-quality products and awesome learning materials (shout out to Becky Stern for her work there). Everything can be bought elsewhere but YMMV. Electronic parts: 2 x Adafruit HUZZAH ESP32 Feather The link is to a board with pre-soldered headers. You can also buy them without headers if you want to save a couple bucks by soldering them yourself. 2 x Adafruit Perma-proto half-sized breadboard PCB I like this board as it has power and ground rails as well as numbered holes. These little time-saving features add up. 2 x 12mm tactile button switch 2 x 3 pin right angle JST PH jumper 2 x 2 pin right angle JST PH jumper Multicolored 22 AWG wire Heat shrink tubing One meter Adafruit NeoPixel RGB strip (to be cut into pieces roughly 12" in length) I also tried their Mini Skinny NeoPixels which are smaller and denser. I actually prefer them for this project but they are more expensive and drain the battery faster. My code works with either so I'll leave it to you to decide which you want. 2 x RAVPower 6700mAh USB power bank I didn't want to mess around with LiPo batteries as they require proper handling and care. This power bank packs a long lifespan and is certified. It's the most expensive part in this project. Pillow parts: 2 x 18x18 throw pillow covers (Of course, you don't have to get these particular designs. But I do recommend keeping the pillow cover art to a minimum so you can easily see the LEDs) 2 x 18x18 throw pillow inserts Batting Tools: Note - Tools can get expensive if you don't already have them but consider it an investment in your making-future! I've found that a well-stocked workbench with quality stuff is worth the extra money. I'm listing the tools that I used but you can easily swap in your favorites. Physical tools: Soldering iron - I use this Hakko station Lead-free solder Hot glue gun - I use a Stanley but any will do Super glue (you'll only need a bit) Flush snips Wire strippers Solder sucker Third hand tool PCB clamp tool A micro USB cable The Feather has a micro USB connector; the other end needs to go into your computer so pick whatever works. Beware that some cheap USB cables lack the data wire and are only designed for charging; you won't be able to see your Feather if you use one of these. If you run into this problem, change your cable. I used the cable that came with my RAVPower battery packs. Multimeter - I use the Extech EX330 Testing your solder joints for continuity is optional but good practice. It can help you quickly diagnose problems that would cause you hours of headaches down the line. A computer with a hard drive (I have a Mac Powerbook. A Windows or Linux system should work too but I don't know if Chromebooks will work) Scotch tape Foam mounting tape Scissors That blue thing in the photos is a silicone soldering pad. It saves my kitchen table from getting more burns but you don't need it. Software tools: Wifi (the ESP32 chip will talk to your WiFI router, which will then handle communication with AWS) IDE - I used VSCODE with the Arduino extension but you can just use the Arduino IDE if you already have it arduino-esp32 USB to UART driver - This gives you the virtual port needed in order to flash the firmware Libraries (see the code for the full list) WiFiManager development branch (supports ESP32 boards). I love the out-of-the-box access point; this makes it super easy to configure WiFi at run-time instead of hardcoding networks and passwords into the firmware. The upshot is I can walk my mom through setup over the phone :-) WiFiClientSecure - Because security is cool NeoPixelBus - Adafruit's awesome NeoPixel library doesn't work well on ESP32 boards. I won't get into the guts but NeoPixelBus works great. Specific libraries are NeoPixelBrightnessBus and NeoPixelAnimator AceButton - An easy-to-use library that let's me track different click types. My code monitors for single-click and long-pressed events. Arduino-MQTT - MQTT is a very lightweight protocol over TCP. This is one of many libraries out there ArduinoJSON - JSON is the format of choice for MQTT messages AWS IoT Core AWS is but one of many options for IoT services. Arguably, there are simpler ones I could have used for this project but I like all the extras AWS brings to the table. It's nice having logs and events built in and you can easily pipe things to alarms that send you a text message (this came in really handy when I was troubleshooting seemingly random disconnects). Step 2: Soldering the Protoboard (If you're new to soldering, check out this tutorial first) Lay out everything you need within arms' reach so you don't have to get up once work begins. Prepping the wires: Cut eight 5 cm wires: two red, two black, two white and two yellow. Strip the ends. Test the length of the red and black wires by placing them on the protobards from rail to rail. You'll want them to be flush to the board for that nice, clean look (if it matters to you). Cut ten 2 cm wires: four red, six black. Strip the ends Tin the wires Solder ESP32 Feather to protoboard: Place the protoboard into your PCB clamp Insert the Feather so that the RST header pin goes into B5 of the protoboard (Triple check this step because everything else depends on it!) Stick a piece of tape on there so the Feather doesn't fall out when you flip it over Flip it and start soldering - I like to use a bevel tip and 800F iron Solder pins at opposite corners so the board is held in place Solder the rest of the pins - the order doesn't matter Inspect all joints closely! You don't want any shorts or bum connections. I keep a magnifying glass on hand to do quick checks Solder wires and connectors to protoboard. Trim wires as needed. In these steps, hole numbers should be followed exactly when I include a row letter and used as guidelines when attaching to power and ground rails): Solder a red 5 cm wire from one power rail to the other across the board Solder a black 5 cm wire from one ground rail to the other across the board Solder a 2 cm red wire from A6 (Feather 3V pin) to power rail 4 Solder a 2 cm black wire from A8 (Feather GND pin) to ground rail 11 Solder a 2 cm black wire from C25 to ground rail 22 or 21 Solder a 5 cm yellow wire from I14 (Feather pin 27) to E26 Solder a 2 cm red wire from I25 to power rail 23 or 22 Solder a 2 cm black wire from H26 to ground rail 22 or 21 Solder a 5 cm white wire from J13 (Feather pin 12) to H27 Place the 2 pin JST plug in A25 and A26 (position plug so it faces outward). Add tape to secure, flip over and solder Solder the 3 pin JST plug to J27, J26, J25 (position plug so it faces outward). Add tape to secure, flip over and solder At this point you can turn your multimeter to the continuity setting and test all your joints (there are plenty of YouTube videos that will teach you how to do this). Now take your flush snips and carefully snip off all the legs on the bottom of the board. Don't worry about getting it absolutely flat, just clean it up. In fact, if you clip to close you risk upsetting a joint. Tip: Put a bag around the board when snipping so the debris doesn't go flying everywhere. Put a small piece of tape on the Feather board with an identifier, e.g. 1, 2, etc . This will save you time later when you're stuck thinking "now which board is this?" Did you get here? Awesome! Now do it again because you're building two :-p Step 3: Soldering NeoPixels NeoPixels: I went through a few versions to figure out the best way to position the NeoPixels. Initially, they were pointing straight up but I didn't like the look. Eventually I hit upon arranging them in a circle, facing outward. This gave me a large illumination space and smoothed out the look of the animations. The NeoPixels will wrap around the outside of the enclosure which has a diameter of 105 mm; this means the circumference is 105 * Pi, or roughly 330 mm. If you're using the 30 LED per meter role, then cut after 10 pixels. Be sure you leave the copper pads on at the start but you can trim them off the end. Note that the enclosure has a 15mm opening for wires & the USB plug to pass through so you don't want to cover that with the strip. If you're using the Minny Skinny NeoPixels with 60 LEDs per meter, you'll cut after the 19th LED. Now prep and solder. Remove the silicone sleeve from NeoPixels. Lay strip flat Add a daub of solder to each of the copper pads on the input side of the NeoPixels (look for the arrow to make sure you're soldering the correct end) Tin the wires of the 3 PIN JST wire Line up the wires with the associated pads. Red for power, black for ground and yellow for data. For each of the wires, hold the one you want to solder next to its pad, place the soldering tip on the pad to liquify the solder you put there in Step 3, then gently lay the wire on top. The wire should submerge into the solder and when you remove your iron, you'll have a sweet junction. Do this quickly so as not to burn off the pads Inspect the joints Are they secure? Are they separate? Consider a quick continuity test with your multimeter Cut a 2 cm piece of heat shrink tubing and slide it over the wires and newly soldered connection. Hold a lighter under the tube for a couple of seconds and watch it shrink (be careful!) Add a small blob of hot glue to the wire end of the heat shrink for extra support Step 4: Printing the Enclosure Electronics need a housing! There are some great tools and resources out there for CAD/CAM design - Fusion 360 is free for hobbyists and you can find plenty of good on-line courses to teach you the basics. I really liked Designing for 3D Printing with Fusion 360 by Vladimir Mariano. Udemy runs sales and you can get the course for as cheap as $12. Anyway, for this Instructable, I've made the STL files available so you don't have to do any design work. But you will need access to a 3D printer and printing software like Simplify3D. I went down to my local maker space (props to Artisan's Asylum) and used Flashforge printers with PLA filament. There are four separate files: Case_body.stl - This is where you'll put the protoboard and NeoPixels lid.stl - A thin section with ridges to snap onto the Case_body and four tiny holes for the legs of the electronic button Button_lid.stl - A half dome that sits on top of the lid and has an opening for the top of the electronic button button.stl - A 51mm wafer that we'll glue to the top of the electronic button to increase its surface area I used the same settings for each: 30% infill, no scaffolds, a thin brim, 60C for bed and 200C for extruder. Because the enclosure won't be visible I didn't care about color or aesthetics - I just wanted it to print quickly. If you look closely at the finished product you can see the ugly filament matrix; if this bothers you, increase the infill percentage. Printing steps: Open individual files in your slicer software Position on bed, making sure the flat side is on the bottom Edit settings as described above Save as g code file Start print Hang around for the first layer to ensure a good start to the print. Since the enclosure has a somewhat wide diameter, errors pop up early. Once it looks good, go get a beer. All told, it took me nearly 7 hours to print the four parts so print parts simultaneously if you have a large enough bed size. Remember, you'll need two copies of each part! https://youtu.be/QouMXVdHXl4 Step 5: Electronic and Enclosure Assembly It's time to put it all together. For this you'll need your hot glue gun and your soldering iron so get them hot and follow these steps: Lid assembly Run a spiral of glue around the lid's flat side Line up the button lid's flat side with the lid, making sure the four tiny holes for the button legs are all visible. Press together and hold for around 20 seconds for the glue to dry a bit Button assembly Working from the top of the button lid, insert the legs of your 12mm button switch into the tiny holes. Use some tape to prevent the button from dislodging and turn over Pick two legs that are diagonally apart from each other and tin them with solder - be careful not to touch the plastic or it will melt and gunk up your tip! Tin the ends of your 2 pin JST wire Carefully solder wires to the legs (it doesn't matter which goes to which) After inspecting the joints, add a couple blobs of hot glue to secure it in place. Turn over and remove the tape. Add a drop of super glue to the very top of the button switch, being careful that none drips down the side. Press the flat side of your 3D printed button onto the glue and hold for a couple seconds. Click a few times, you deserve it! Note that the button attachment doesn't have to be super durable because there won't be much room for it to move once in the pillow Attach the NeoPixels Grab the case and quickly run a thin line of glue around the edge, towards the bottom With the LEDs facing out, bend the strip around the left side of the case opening (the first LED should be within a centimeter of the opening) and wrap in a clockwise direction around the case. Gently press into the glue - be careful not to touch the glue with your fingers! Align as needed so that the distance between the first and last LED is about the same as the connected LEDs on the strip. Make sure the strip doesn't block the opening! Attach the JST plugs for the button and NeoPixels to their connections on the protoboard Place a couple blobs of hot glue in the center of the case and stick on the protoboard - it should be nested in between the ridges with the cable sticking out of the opening Grab the lid, line up an opening on the side of the lid with the case opening and press down to snap together. If you open it in the future, be careful not to pull off the button wires! Step 6: Configuring AWS Web-connected IoT devices need two things: a gateway and a broker. For this project, your home WiFi router is the gateway to the internet and AWS is the broker. The job of a broker is to route messages to and from recipients. The messages are commonly in JSON format and are transmitted using a protocol called MQTT. For an introduction to IoT see How AWS IoT Works. You can create "things" on AWS in several ways and we'll do it using the console (personally, I like to do this type of work as code but I don't want to clutter this Instructable with environment settings, etc). If you don't already have an AWS account, take 10 mins to go set it up (it's free for the first year) and also set up a billing alarm for safety. For this section, I'm going to assume you know a bit about AWS, IAM and policies but I've tried to make the steps concise enough that you can get to a successful end result even if this is new to you. Ok, see that physical Adafruit Feather board on the table? It only one part of your thing. Since it's in the real world, we need something to identify it in the virtual world so that we can establish secure communication and this is called a certificate. Certificates can't do anything unless they are associated with a real-world thing and have permissions. The permissions are recorded in something called a policy. Create the thing and certificate: Log onto AWS management console Navigate to Services -> AWS IoT Core Click Manage Click the Create button Create a single thing Add the Name, feather_esp32_1 (you can name it whatever you want). Leave everything else as default and click Next Click Create certificate for the first option, titled, One-click certification creation Create a folder on your computer named after your thing and download the three files into it Click the link to download a root CA for AWS IoT The link with take you to another page where you'll choose Amazon Root CA. Copy the contents and paste into a new file on your computer named AmazonRootCA1.pem Click the "Activate" button for the certificate Do it again for your second thing (give it a slightly different name) Create the policy: Navigate back to AWS IoT Core Click Secure -> Things Click Policies Click Create Name it pillow-policy Under Add statements, click Advanced mode Paste the contents of pillow-policy.json (found at the bottom of this section) into the box, overwriting everything else in there Click Create A word on policies: The best policies are the most explicit. The one I'm providing is wide open and therefore not secure. I didn't restrict it because that would add more variables to the mix with an already complex project. Once you get everything working I highly recommend learning a bit about how to better restrict your IoT policies. Attach policy to certificates: Navigate back to AWS IoT Core Click Secure -> Certificates For each certificate you created, click the little "..." icon on the right a select Attach Policy Check pillow-policy and click Attach Ok, to summarize, we've created two things, two certificates and one policy. The certificates are associated with the things and the policy is attached to the certificates. Golden. Onward. Step 7: Flashing Firmware This is the step where we upload the firmware to the boards. You're almost finished! Prerequisites: Make sure you have your environment configured properly: Arduino IDE installed If using VSCode, install the Arduino extention Install arduino-esp32 Libraries listed in the Parts and Tools section downloaded and available in a place Arduino can see them See the Arduino Libraries page for more info USBtoUART driver installed Code: Download the file from this section and unzip Change the name of Config.h.template to Config.h Change the name of certificates.h.template to certificates.h Open CallConnect_ESP32.ino in your IDE Modify the configuration files as follows: Config.h Replace "|device id|" with the name you gave your thing in the AWS step (keep the double quotes) Replace "|access point password|" with a password of your choice. This password will be required when connecting to your Feather's access point during the WiFi configuration step (keep the double quotes) Replace |num pixels| with the number of LEDs on your NeoPixel strip (no double quotes) Replace "|endpoint|" with your AWS IoT endpoint (keep the double quotes). You'll need to get this from AWS: AWS Management Console Services -> IoT Core Settings Copy the value shown in custom endpoint Replace "|mqtt topic|" with any name you choose; "pillow", for example certificates.h Open the AmazonRootCA1.pem file that you downloaded earlier in a text editor. Select all and copy the contents onto your clipboard and switch back to certificates.h Replace "|root|" with the contents of your clipboard. Then add line break characters, following the directions in the file See certificates.h.example for syntax reference Repeat with your private key file and certificate file you downloaded earlier (note that the public key file you downloaded doesn't go into certificates.h) Double & triple check the formatting of the file. If anything is wrong, your thing won't be able to connect to AWS Flashing the code: Grab your first device and plug the USB cable into your computer Open CallConnect_ESP32.ino in your Arduino IDE Select your board Tools -> Board -> Adafruit ESP32 Feather Note you'll probably see this board under the ESP32 Arduino Boards section and not under the Adafruit Boards section (confusing, I know) Select the port Tools -> Port -> /dev/cu.SLAB_USBto_UART If you don't see this port, make sure you installed it correctly from the link above If installed correctly, try a different USB cable If still no, restart your IDE Click "Verify" to compile the code and make sure you don't get any errors. If you do get some, review the messages to find out why. Common causes are missing libraries or not having Config.h and/or certificates.h in the right directory. Click Upload and monitor the progress. Once 100% uploaded, open the Serial Monitor in your IDE and you should see the following output If it worked, you'll see this in the Serial Monitor Here you can see the network name is set to "feather_esp32_2" and the access point password is "doobeedoo". Now repeat for the second board. Step 8: Connecting to Your WiFi (Note that you can complete this step with your device plugged in to either your computer or the battery. The settings will persist when power is removed, assuming you power it back up next to the same WiFi) If the NeoPixels are connected correctly, you'll see an animation of yellow lights spinning around (if not, check the JST plug and solder connections). https://youtu.be/e5o3tRZL8ts A word about Access Points What's happening here is that the board wakes up and looks in memory for saved network credentials. If it can't find any, or if it can but the network isn't available, it will start its own web server called an "access point". This access points exists simply to give you a web page where you can tell the chip what network you want it to connect to, e.g. your home WiFi's 2.4Ghz network (note that ESP32 won't work on 5Ghz networks). With your iOS or Android device, or your computer, check the available WiFi networks and you'll see one named after your thing. Source: Web-connected Glow Pillows ### AmazonDRS NFC Replenisher You just say what the thing does and then you add '-er'." Replenisher keeps your fridge, office...stocked! Just scan! "I'm going on break! Story TL;DR; This project utilizes the AmazonDRS Arduino library to initiate frictionless purchases on Amazon by scanning NFC tags. Looking for some help getting started with AmazonDRS Dash Replenishment for Arduino and still need to get your Amazon accounts setup, authorize 'Log in with Amazon', exchange tokens, etc? Hop on over to the Getting Started guide at the AmazonDRS GitHub repo and try out the Amazon Dash Button for Arduino project. 1/12/2017 - Coming Soon! I'm working on creating an Arduino shield(aimed at the Due and Zero) that will incorporate the ATWINC1500 WiFi and the PN532 transceiver for NFC all in one shield sized package. Stay tuned for more updates! 2/26/2017 - The Shields Are In! Check out the video below for a complete demo of Replenisher! I The shield combines NFC, WiFi, EEPROM, and an LCD. The open source design and libraries for interacting with the shield are all available here! Big thanks to Andium(a new IoT startup I work at) for working with me to spin off a small batch of these shields to make available to the community! You can grab one here. I created a project hub on hackster where I'll start posting more projects and ideas that spin off from the new shield. Motivation The Amazon Dash Button for Arduino is cool, but once the excitement of interacting with the API wears off there really isn't anything too mind blowing about hitting a button to place an order. So I decided to create this project to show a different way you might want to initiate frictionless Dash Replenishment around your home or office. The idea is to use NFC tags to create a more fluid replenishment process for products that might not necessarily pair with a "smart" device. A smart fridge that orders groceries is great, but does your T.V. remote really need a WiFi connection to order new batteries? Utilizing the unique product identifiers Amazon uses called ASINs we can burn an identifier into each RFID tag. The sticker tags could be placed anywhere! Manufacturers could even print them onto their packaging or place them inside their devices. Since RFID tags are passively powered they require no batteries, no WiFi, no time consuming setup. The only device we need to connect to WiFi is the NFC scanner that we're about to create! Getting Started Hardware First lets make sure you have all of the necessary hardware for the project. I've used the Arduino MKR1000 but any WiFi 101 enabled Arduino should work. In order to scan NFC tags we're also going to need an NFC antenna and transceiver. I've decided to go with Adafruit's PN532 NFC shield with a built-in antenna. The shield is designed for the typical Arduino Uno/Due/Zero/Etc shield form factor but there are breakouts on the board for SPI so we can easily wire up our MKR1000. In addition to headers that ship with the shield and the Arduino we'll also need, jumper cables, and some NFC tags. Specifically Ntag203 Mifare Ultra-light tags(I chose the round stickers, you'll see why in a minute!) This specific flavor or RFID tags are compatible with Adafruit's shield as well as most Android phones and tablets I've tried. If you haven't already, solder the two rows of header pins to your MKR1000 and solder the provided shield headers to your PN532 shield. We'll be using SPI so you only need to solder the NFC shield headers to the strip labeled for power (IOr, RST, 3v, 5v, GND...) and the SPI header(MOSI, SS, MISO...etc). You'll also want to make sure you bridge 'SEL 1' and 'SEL 0' with a blob of solder to configure the shield for SPI. If you're a bit lost on setting up the shield check out Adafruit's getting started guide for the PN532 shield. Let's wire up the shield! Outlined in this Fritzing diagram are all the connections you'll need to make between the shield and the Arduino. Take note below of SEL 1 and SEl 0. Those are the copper contacts that need to be bridged together, each witch a blob of solder, so we can use SPI to communicate with the shield instead of I2C. Read more: AmazonDRS NFC Replenisher ### DIY Arduino Soldering Station In this project I will show you how to create an Arduino based soldering station for a standard JBC soldering iron. During the build I will talk about thermocouples, AC power control and zero point detection. Let's get started! Step 1: Watch the Video! The video gives you all the basic information you need to build a soldering station. In the next steps though I will present you additional, helpful information. Step 2: Order Your Components! Here you can find a parts list with example seller: Amazon.com: 1x Toroidal Transformer: - 2x 2W10 Full Bridge Rectifier: http://amzn.to/2oOZEB3 1x BTB26 Triac: http://amzn.to/2nXQv5f 1x MOC3020 Optocoupler: http://amzn.to/2oSyn0i 1x 4N25 Optocoupler: http://amzn.to/2oSIySu 1x Arduino Pro Mini: http://amzn.to/2nXvY0K 1x SPI OLED LCD: http://amzn.to/2oVBQbx 1x MAX6675: http://amzn.to/2nueIUu 2x 1000µF Capacitor: http://amzn.to/2omfjXL 3x 100Ω, 1x 330Ω, 1x 2kΩ Resistor: http://amzn.to/2odSJOJ 1x 50kΩ Potentiometer: http://amzn.to/2oml73s Ebay: 1x Toroidal Transformer: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 2x 2W10 Full Bridge Rectifier: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x BTB26 Triac: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x MOC3020 Optocoupler: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x 4N25 Optocoupler: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Arduino Pro Mini: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x SPI OLED LCD: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x MAX6675: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 2x 1000µF Capacitor: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 3x 100Ω, 1x 330Ω, 1x 2kΩ Resistor: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x 50kΩ Potentiometer: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Amazon.de: 1x Toroidal Transformer: http://amzn.to/2oVuJA6 2x 2W10 Full Bridge Rectifier: http://amzn.to/2om5usC 1x BTB26 Triac: http://amzn.to/2oVvitI 1x MOC3020 Optocoupler: http://amzn.to/2oVkDyT 1x 4N25 Optocoupler: http://amzn.to/2omdI3V 1x Arduino Pro Mini: http://amzn.to/2g6Ujjr 1x SPI OLED LCD: http://amzn.to/2omdKc2 1x MAX6675: http://amzn.to/2omcLcb 2x 1000µF Capacitor: http://amzn.to/2oVnrfx 3x 100Ω, 1x 330Ω, 1x 2kΩ Resistor: http://amzn.to/2aAsWdV 1x 50kΩ Potentiometer: http://amzn.to/2n2cd7e Step 3: Print Your Enclosure! Here you can download the 123D Design file of my enclosure. Make sure to print it as three seperate pieces. Read more: DIY Arduino Soldering Station ### How to Make an Arduino Capacitance Meter With all the different ways capacitors are labeled, figuring out the values of your capacitors can be challenging. Especially if you don’t have a digital multi-meter to test them. In this tutorial, I’ll show you how to build three different capacitance meters using an Arduino and a couple resistors. After finishing this project, you’ll be able to measure all of your capacitors and label them for future reference. When I was testing these capacitance meters, I couldn’t find one that was able to accurately measure the full range of commonly used capacitors. One meter would accurately measure values in the 1000 μF range, but it would fail in the nF and pF range. Another capacitance meter was accurate in the nF and pF ranges, but failed in the μF range. So, I’ll show you three different meters that together will cover a range of about 10 pF to 3900 μF. BONUS: I made a quick start guide for this tutorial that you can download and go back to later if you can’t set this up right now. It covers all of the steps, diagrams, and code you need to get started. To compare the error in their measurements, I tested the output of each capacitance meter described below against capacitors of known values. This graph shows the range of values each capacitance meter is able to measure accurately: Before we start building the circuits, let’s get a little background on how we can use the Arduino to measure capacitance… How the Arduino Can Measure Capacitance Each Arduino capacitance meter relies on a property of resistor capacitor (RC) circuits- the time constant. The time constant of an RC circuit is defined as the time it takes for the voltage across the capacitor to reach 63.2% of its voltage when fully charged: Read more: How to Make an Arduino Capacitance Meter ### YouTube Subscriber Counter With ESP8266 I was inspired by the Play Button awards YouTube sends out for subscriber milestones and whipped up a simple circuit using an ESP8266 wifi board and seven segment display to show off my realtime subscriber count. This is a great IoT beginner project, with just a little soldering and a code personalization required to make it work for your own account. I made a version 2 that supports more than 10K subscribers, too. Before attempting this project, you should be generally familiar with uploading new programs to your Arduino board and installing code libraries, both of which you can learn for free in my Arduino Class, though you really don't have to understand any of the actual Arduino code to get this project running. For this project, you will need the following materials: Small shadow box Printer and paper Scissors Cutting mat or scrap cardboard Illustration board or more scrap cardboard Utility/craft knife Metal ruler (optional) Tape Glue stick Feather Huzzah ESP8266 with female headers 4-digit 7-segment FeatherWing display Micro USB cable (charge + sync, not charge-only) USB power adapter (optional) and the following tools: Soldering iron and solder Flush diagonal cutters Desoldering braid or solder sucker (for mistakes) Required software libraries: Arduino YouTube API Arduino Json Adafruit GFX Adafruit LED Backpack Unique data required: Google API key YouTube channel ID Wifi network name/password As an alternative to the Feather Huzzah, you can also use your favorite ESP8266 microcontroller board, some of which require an FTDI cable to upload new programs. Use the standard 7-segment backpack rather than the FeatherWing version. Read more: YouTube Subscriber Counter With ESP8266 ### Knife Sharpening Angle Coach With Bluetooth & Arduino Precision sharpening skills aren't developed overnight! Here's a high-tech way to monitor your knife angle during sharpening, with the help of an absolute orientation sensor and bluetooth microcontroller. This project is a collaboration with Alex French Guy Cooking! This is an intermediate level Arduino project, so if you're an ultra-beginner or a bit rusty, brush up with my free Arduino Class. Pick up the following components (find them in an Adafruit wishlist or from Amazon affiliate links below): Adafruit Bluefruit Feather 32u4 microntrollerBNO055 9-DOF absolute orientation IMU fusion breakoutSmall lipoly batterySmall switch5mm thick rare earth magnets x2Thin gauge stranded wire Tools you'll need: Soldering iron & solderHelping third hand toolWire strippersFlush diagonal cuttersStrong glue such as E6000Rubber band or clampTapeWater resistant covering of some kind, like a plastic bag, mint box, or 3D printed enclosureKnife sharpening stoneVessel large enough to soak your stoneYour dull kitchen knives To keep up with what I'm working on, follow me on YouTube, Instagram, Twitter, Pinterest, and subscribe to my newsletter. As an Amazon Associate I earn from qualifying purchases you make using my affiliate links. Step 1: Software & Configurations for Feather Bluefruit 32u4 Before you can communicate with your microcontroller, there are a few setup tasks, which we'll walk you through here! To program your Feather board from your computer, you'll need to add the Adafruit boards package to your Arduino IDE software (not supported by default). The first step of that process is providing a URL to the Additional Boards Manager. In the text box near the bottom of the Preferences window, paste in exactly this text: https://adafruit.github.io/arduino-board-index/package_adafruit_index.json If the box was not blank when you opened the Preferences window, you may have some other boards already installed. If that's the case, append the text box's contents with the above URL, using a comma to separate multiple URLs. Click OK to close the Preferences window and save changes. Navigate to the menu item Tools-> Board:(board name)-> Boards Manager. Allow a moment for the boards manager to download its index, then start typing "adafruit" into the search bar. When you see "Adafruit AVR Boards by Adafruit," you can stop typing in the search and click "Install" to get the latest boards package installed inside your Arduino application. Plug in your Feather. On Windows, you will also have to install a driver. As with all microcontroller projects, be sure you're able to program the Blink sample code to your board before proceeding. Open the sketch from File->Examples->01.Basics->Blink, or copy the following into an empty sketch: void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } Under Tools->Board:, select Adafruit Feather 32u4. After plugging in your Feather Bluefruit, you should see it appear under Tools->Port:. If none of your ports are labeled, try unplugging your board, checkingthe Ports menu, then replugging your board and checking the Ports menu again. Whichever port name disappears then reappears is likely to be your Arduino board. On Windows your port will likely be called "COM3" (or higher numbers) and on OS X it's likely to be something like "/dev/cu.usbmodem1461" (with different numbers in place of those shown). Now click the Upload button (right-facing arrow) to transfer the Blink example code to the Arduino board. You'll also need the following libraries, available by searching the Library Manager (Sketch->Include Library->Manage Libraries...) or download and install the old-fashioned way: Adafruit Unified SensorAdafruit BNO055Adafruit BluefruitLE nRF51 To receive and display sensor values from your circuit over bluetooth, you'll need a mobile device running the Bluefruit LE Connect app for iOS or Android. Step 2: Build Breadboard Prototype (Optional) I always like to build a breadboard prototype of my circuits before I commit to the final assembly, but then again I make things like this more than most folks and generally have two of everything. This particular project's parts are a bit pricey, and not easy to convert from breadboard-friendly to free-wire compatible, plus the circuit doesn't have that many connections-- so I think you'll probably do fine assembling it straight away. This time, you can learn vicariously from my breadboard experience. For example, I learned that the relevant axis to monitor for this project is Z (yaw) for the desired orientation of the sensor (skinny to line up with the Feather, which will run longways along the knife blade). Step 3: Arduino Code The code for this project is very barely modified from one of the bluetooth library's examples, accessible under File->Examples->Adafruit BluefruitLE nRF51->ndof_bno055. If it does not appear in your Arduino menus, then you do not have the library installed correctly, and you should go back to the setup step. The changes we made simplify what's sent to the mobile device to just the desired angle (UART is sorta slow so there's no reason to send extra data), and massage that number to always be positive, even if you flip the device upside down. // Send abbreviated integer data out over BLE UART ble.print("AT+BLEUARTTX="); //ble.print("X: "); //ble.print(euler.x(), 1); //ble.print(" Y: "); //ble.print(euler.y(), 1); //ble.print(" Z: "); if (euler.z() > 90.0){ ble.println((180-euler.z()), 1); } else if(euler.z() < -90.0){ ble.println((180+euler.z()), 1); }else{ ble.println(euler.z(), 1); } Our version also abstracts the bluetooth configuration into its own file in the same sketch folder (matter of preference), and comments out the following line right at the beginning of the setup: while (!Serial); which interfered with the device's ability to send data without being connected over USB. To get the code for this project, download and unzip the file attached to this step and upload it to your Feather Bluefruit 32u4 using your Arduino software. If you're having trouble uploading, revisit the setup step to get your board settings and libraries in order. If you'd rather avoid bluetooth altogether, you could swap the microcontroller for a Feather 32u4 Proto, and use the Adafruit BNO055 Arduino library sample code as a starting point. Step 4: Assemble Circuit Strip and tin the ends of some small gauge silicone coated stranded wire. The tinned ends should fit through the tiny holes on the Feather without catching any strands or scrunching, which could cause a short circuit that doesn't function. Solder the wires to the microcontroller, switch, and the sensor according to the circuit diagram. Note that two wires need to go to ground, and it's easier to connect them both at the same time. To keep the sensor parallel to the blade, I mounted it on the underside of the microcontroller board with a small piece of flat double-stick tape, and used thick neodymium magnets as standoffs on either end of the Feather. The sensor board is 4mm tall, and my magnets are 5mm tall. For now, just tape the magnets in place. Source: Knife Sharpening Angle Coach With Bluetooth & Arduino ### How to Install LEDs Under a Scooter (with Bluetooth) Join me in creating ground effect lighting for my scooter using a bluetooth microcontroller and addressable LED strip. For this project I'm recycling two bits of pixel strip leftover from my old POV bike project tutorial. These are APA102s or DotStars, but you could totally use Neopixels for this project, I just happened to have this set of two strips wired in parallel, which is perfect for sticking under my scooter. For this project you will need: Two strips of APA102 (aka DotStar) LEDs (or WS2812b aka NeoPixels with a slight code change)Bluefruit 32u4 Feather Arduino-compatible microcontroller boardLithium batteryWaterproof project enclosureStranded wireSoldering iron and solderWire strippers and flush cuttersHeat shrink tubingHelping third hand tool (optional but handy)Hot glue (nearby ice water is great for unexpected burns)TapeNeodynium (rare earth) magnetsCB radio antenna magnet with hardware to attach (washer, nut, bolt)Small screwdriver To keep up with what I'm working on, follow me on YouTube, Instagram, Twitter, Pinterest, and subscribe to my newsletter. As an Amazon Associate I earn from qualifying purchases you make using my affiliate links. https://youtu.be/DVEuMbX-K1o Legal disclaimer! The automotive underglow lighting laws where you live may prohibit some or all colors/animations-- where I live, only solid white is technically allowed, and I don't drive with any other colors/patterns in traffic. Never use flashing lights in the colors emergency vehicles use! Step 1: Build the Circuit I double checked and touched up the solder connections, which I made on alternating sides of the strip. It's just cleaner that way. I'm using the waterproof alkaline battery holder from the bike project as a project enclosure in this project. It already has a waterproof switch and is the right size for a Bluefruit Feather microcontroller and flat lithium battery, so I removed the metal bits and cut away small sections to maximize the interior volume.I also removed the original wires and hot glue using a bit of rubbing alcohol. I did something in this project I don't normally recommend folks do, which is to solder directly to the leads of a lithium battery, and that's because you could short it out and cause a fire. Anyway I badly wanted to use the switch built in to the waterproof battery pack so I spliced it in. Then I tinned the LED strip wires and fed them through the opening. I soldered up power, ground, and data and clock to two different microntroller pins. Step 2: Customize Code & Upload Once I had the circuit assembled, I went to program it using my Arduino software. I modified a bluetooth sketch I made for my 2017 LED sign which used Neopixels but the same bluetooth Arduino compatible feather board. The sketch includes configurable color and a few animation patterns. Download the scooter_underlight.zip file and open scooter_underlight.ino with your Arduino software. Step 3: Install Magnetized Circuit Under Scooter To prepare the pixel strip for the underside of my scooter, I taped neodymium magnets to each end and used hot glue and more tape to seal up the ends. I've used silicone adhesive to seal up pixel strip before, but it takes 24 hours to dry and I just wasn't willing to wait this time-- I wanted this to be a one day build. I tried the same treatment with rare earth magnets inside the enclosure, but it just didn't feel sticky enough for the bumpy road. So I found this old CB radio antenna magnet and bolted it to the lid. Step 4: Enjoy! Now all the parts feel super secure stuck to the steel structure of my scooter. Maybe someday I'll wire these lights into the electrical system of my bike, but for now I'll just remove the circuit for charging. The Arduino sketch pairs with the Adafruit Bluefruit LE connect app to adjust the LED color and change between a few patterns. It looks just like my vehicles in GTA 5 online! Thanks for following along! I'd love to hear how you'd make this project your own in the comments below. Step 5: More Photos & Thank You! Here are some more photos of the finished project in action. If you like this project, you may be interested in some of my others: 13 Ideas for Diffusing LEDsDiffused LED Strip Sign With Arduino/BluetoothYouTube Subscriber Counter with ESP8266Easy Infinity Mirror3 Beginner Arduino Mistakes To keep up with what I'm working on, follow me on YouTube, Instagram, Twitter, Pinterest, and Snapchat. Source: How to Install LEDs Under a Scooter (with Bluetooth) ### EEZ H24005, Two-Channel Programmable Power Supply Envox Experimental Zone (EEZ) is an open hardware and open source development website, that creates and shares various open source hardware and software projects using as much as possible open-source tools and technologies. One of their projects is the programmable bench power supply ‘EEZ H24005’. The goal is to make a reliable, modular, open and programmable power supply, that can be used for various tasks starting with powering breadboard, charge batteries of various types, or to be used as an educational tool and science experiments. The EEZ H24005 is a DIY power supply unit consists of four PCBs and SMT electronics components except some power resistor, AC/DC adapter, and power regulators. Only two ICs need hot air soldering station to mount, while the remaining parts can be simply mounted with soldering iron. To build this PSU you will need these tools: Soldering iron with conical sloped tip Hot air soldering station Solder wire 0.25 mm, and 0.7 mm (optionally solder paste, for ICs with exposed power tabs) Solder wick / desoldering braid Flux Magnifying glass with light Self-locking tweezers Set of tweezers Isopropyl alcohol example and paper wipes for cleaning PCB holder In addition to modularity, programmability, openness, and DIY, reliability was one of the key features and design guidelines of the designing process. Because as a sourcing device, the PSU has to be designed in the way that no dangerous oscillation in voltage or current is present over the long period of deployment. That includes border case of turning the PSU on and off, applying or disconnecting load, etc. Read more: EEZ H24005, Two-Channel Programmable Power Supply ### Make An Old-School Arduino-Based Two-Way Pager This Arduino-based pager by  Mike Schaus will allow you to send and receive real SMS text messages. This messaging device has its own SIM card and phone number. In order to build this project you need the following parts: 1* Arduino UNO 1*Hologram SIM Card w/Device Management 1*Arduino GSM shield V2 1*Adafruit LCD Shield Kit w/ 16×2 Character Display 1*Hammond Project Box 4.7 x 2.6 x 1.4 Translucent Blue And you will need to use this software to run the project: Hologram Data Router. This project was made possible as part of Hologram’s Hacker-In-Residence program, The Hologram Global SIM Card allows you to connect you IoT device everywhere. Paired with a powerful device management platform and API. It provides a cellular data service that works with any device that accepts a SIM card. In addition it is totally inexpensive. GSM shield, the Hologram things, and Arduino stacked on top of each other made a good combination to build such a project. For powering the project, Mike had used a 9V battery as an option, and still, powering from USB is possible. Mike had designed this project so it could be used by children instead of a real cell phone, or it could be used as an “SOS” button for someone working alone outdoors or even exercising. Check this video to know how this project works: The amazing thing about Adafruit LCD shield that it only uses 2 pins of Arduino since it works over the I2C bus, which results with many places left for future features. This is the schematics of the project: It is super easy, the wires mean putting the pieces on top of each other. Read more: Make An Old-School Arduino-Based Two-Way Pager     ### How to Set Up an Ultrasonic Range Finder on an Arduino Ultrasonic range finders are fun little modules that measure distance. You can use them to find the distance to an object, or to detect when something is near the sensor like a motion detector. They’re ideal for projects involving navigation, object avoidance, and home security. Because they use sound to measure distance, they work just as well in the dark as they do in the light. The ultrasonic range finder I’ll be using in this tutorial is the HC-SR04, which can measure distances from 2 cm up to 4oo cm with an accuracy of ±3 mm. In this article, I’ll show you how to make three different range finder circuits for the Arduino. The first range finder circuit is easy to set up, and has pretty good accuracy. The other two are a bit more complicated, but are a bit more accurate because they factor in temperature and humidity. But before we get into that, lets talk about how the range finder measures distance. BONUS: I made a quick start guide for this tutorial that you can download and go back to later if you can’t set this up right now. It covers all of the steps, diagrams, and code you need to get started. The Speed of Sound Ultrasonic range finders measure distance by emitting a pulse of ultrasonic sound that travels through the air until it hits an object. When that pulse of sound hits an object, it’s reflected off the object and travels back to the ultrasonic range finder. The ultrasonic range finder measures how long it takes the sound pulse to travel in its round trip journey from the sensor and back. It then sends a signal to the Arduino with information about how long it took for the sonic pulse to travel. Knowing the time it takes the ultrasonic pulse to travel back and forth to the object, and also knowing the speed of sound, the Arduino can calculate the distance to the object. The formula relating the speed of sound, distance, and time traveled is: Read more: How to Set Up an Ultrasonic Range Finder on an Arduino ### Make an Arduino Temperature Sensor (Thermistor Tutorial) The DHT11 humidity and temperature sensor makes it really easy to add humidity and temperature data to your DIY electronics projects. It’s perfect for remote weather stations, home environmental control systems, and farm or garden monitoring systems. In this tutorial, I’ll first go into a little background about humidity, then I’ll explain how the DHT11 measures humidity. After that, I’ll show you how to connect the DHT11 to an Arduino and give you some example code so you can use the DHT11 in your own projects. BONUS: I made a quick start guide for this tutorial that you can download and go back to later if you can’t set this up right now. It covers all of the steps, diagrams, and code you need to get started. Here are the ranges and accuracy of the DHT11: Humidity Range: 20-90% RH Humidity Accuracy: ±5% RH Temperature Range: 0-50 °C Temperature Accuracy: ±2% °C Operating Voltage: 3V to 5.5V The DHT11 Datasheet: What is Relative Humidity? The DHT11 measures relative humidity. Relative humidity is the amount of water vapor in air vs. the saturation point of water vapor in air. At the saturation point, water vapor starts to condense and accumulate on surfaces forming dew. The saturation point changes with air temperature. Cold air can hold less water vapor before it becomes saturated, and hot air can hold more water vapor before it becomes saturated. The formula to calculate relative humidity is: Relative humidity is expressed as a percentage. At 100% RH, condensation occurs, and at 0% RH, the air is completely dry. How the DHT11 Measures Humidity and Temperature The DHT11 detects water vapor by measuring the electrical resistance between two electrodes. The humidity sensing component is a moisture holding substrate with electrodes applied to the surface. When water vapor is absorbed by the substrate, ions are released by the substrate which increases the conductivity between the electrodes. The change in resistance between the two electrodes is proportional to the relative humidity. Higher relative humidity decreases the resistance between the electrodes, while lower relative humidity increases the resistance between the electrodes. Read more: Make an Arduino Temperature Sensor (Thermistor Tutorial) ### How to Set Up the DHT11 Humidity Sensor on an Arduino The DHT11 humidity and temperature sensor makes it really easy to add humidity and temperature data to your DIY electronics projects. It’s perfect for remote weather stations, home environmental control systems, and farm or garden monitoring systems. In this tutorial, I’ll first go into a little background about humidity, then I’ll explain how the DHT11 measures humidity. After that, I’ll show you how to connect the DHT11 to an Arduino and give you some example code so you can use the DHT11 in your own projects. BONUS: I made a quick start guide for this tutorial that you can download and go back to later if you can’t set this up right now. It covers all of the steps, diagrams, and code you need to get started. Here are the ranges and accuracy of the DHT11: Humidity Range: 20-90% RH Humidity Accuracy: ±5% RH Temperature Range: 0-50 °C Temperature Accuracy: ±2% °C Operating Voltage: 3V to 5.5V The DHT11 Datasheet: What is Relative Humidity? The DHT11 measures relative humidity. Relative humidity is the amount of water vapor in air vs. the saturation point of water vapor in air. At the saturation point, water vapor starts to condense and accumulate on surfaces forming dew. The saturation point changes with air temperature. Cold air can hold less water vapor before it becomes saturated, and hot air can hold more water vapor before it becomes saturated. The formula to calculate relative humidity is: Relative humidity is expressed as a percentage. At 100% RH, condensation occurs, and at 0% RH, the air is completely dry. How the DHT11 Measures Humidity and Temperature The DHT11 detects water vapor by measuring the electrical resistance between two electrodes. The humidity sensing component is a moisture holding substrate with electrodes applied to the surface. When water vapor is absorbed by the substrate, ions are released by the substrate which increases the conductivity between the electrodes. The change in resistance between the two electrodes is proportional to the relative humidity. Higher relative humidity decreases the resistance between the electrodes, while lower relative humidity increases the resistance between the electrodes. Read more: How to Set Up the DHT11 Humidity Sensor on an Arduino ### How to Set Up and Program an LCD Display on an Arduino In this tutorial, I’ll explain how to set up an LCD on an Arduino and show you all the different ways you can program it. I’ll show you how to print text, scroll text, make custom characters, blink text, and position text. They’re great for any project that outputs data, and they can make your project a lot more interesting and interactive. The display I’m using is a 16×2 LCD display that I bought for about $5. You may be wondering why it’s called a 16×2 LCD. The part 16×2 means that the LCD has 2 lines, and can display 16 characters per line. Therefore, a 16×2 LCD screen can display up to 32 characters at once. It is possible to display more than 32 characters with scrolling though. The code in this article is written for LCD’s that use the standard Hitachi HD44780 driver. If your LCD has 16 pins, then it probably has the Hitachi HD44780 driver. These displays can be wired in either 4 bit mode or 8 bit mode. Wiring the LCD in 4 bit mode is usually preferred since it uses four less wires than 8 bit mode. In practice, there isn’t a noticeable difference in performance between the two modes. In this tutorial, I’ll connect the LCD in 4 bit mode. BONUS: I made a quick start guide for this tutorial that you can download and go back to later if you can’t set this up right now. It covers all of the steps, diagrams, and code you need to get started. Connecting the LCD to the Arduino Here’s a diagram of the pins on the LCD I’m using. The connections from each pin to the Arduino will be the same, but your pins might be arranged differently on the LCD. Be sure to check the datasheet or look for labels on your particular LCD: Also, you might need to solder a 16 pin header to your LCD before connecting it to a breadboard. Follow the diagram below to wire the LCD to your Arduino: The resistor in the diagram above sets the backlight brightness. A typical value is 220 Ohms, but other values will work too. Smaller resistors will make the backlight brighter. Read more: How to Set Up and Program an LCD Display on an Arduino ### Make Your Own Power Meter/Logger In this project I will show you how I combined an Arduino, an INA219 power monitor IC, an OLED LCD and a Micro SD Card PCB in order to create a power meter/logger that has more functions than the popular USB Power Meter. Let's get started! Step 1: Watch the Video! The video gives you a good overview on how to create your own power meter. In the next steps though I will present you some additional information to make this project even simpler. Step 2: Order Your Parts! Here you can find a parts list with example seller for the portable version of this project. Amazon.com: 1x LiPo Battery: http://amzn.to/2gz4yvd 1x TP4056 Board: http://amzn.to/2gzdIb4 1x Arduino Pro Mini: http://amzn.to/2gvfXuQ 1x INA219 Board: http://amzn.to/2gvflW7 1x OLED LCD: http://amzn.to/2fobopO 1x SD Card PCB: http://amzn.to/2fodhmu 1x Switch: http://amzn.to/2gz9ZtW Ebay: 1x TP4056 Board: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Arduino Pro Mini: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x INA219 Board: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x OLED LCD: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x SD Card PCB: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Switch: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Amazon.de: 1x LiPo Battery: http://amzn.to/2gM2vXB 1x TP4056 Board: http://amzn.to/2eUvMNO 1x Arduino Pro Mini: http://amzn.to/2g6Ujjr 1x INA219 Board: http://amzn.to/2gM5M9v 1x OLED LCD: http://amzn.to/2g6Q3Rd 1x SD Card PCB: http://amzn.to/2gM9Zdf Step 3: Create the Circuit! Here you can find the schematic for the Arduino Nano version and the portable version of this project. You can also find those schematic on the EasyEDA website: https://easyeda.com/GreatScott/PowerMeter-b6051723... https://easyeda.com/GreatScott/PortablePowerMeter-... You can also use the pictures of my finished board as a reference for your own. Step 4: Upload the Code! Now that your circuit is complete, it is time to upload the code. You can download it here. But don't forget to download and include the following libraries before uploading: https://github.com/adafruit/Adafruit_INA219 https://github.com/adafruit/Adafruit_SSD1306 https://github.com/greiman/SdFat Step 5: Success! You did it! You just created your own Power Meter/Logger Feel free to check out my YouTube channel for more awesome projects: http://www.youtube.com/user/greatscottlab You can also follow me on Facebook, Twitter and Google+ for news about upcoming projects and behind the scenes information: https://twitter.com/GreatScottLab https://www.facebook.com/greatscottlab Source : Make Your Own Power Meter/Logger ### how to measure home ac current 110v / 200v with arduino The cool thing about an ACS712 is that current is measured is measured in two directions.  What this means is that if we sample fast enough and long enough,  we sure to find the peak in one direction and the peak in another direction. With both peaks known, it is a matter of knowing the shape of the waveform to calculate the current.   In the case of line or mains power, we know that waveform to be a SINE wave.   Knowing that allows us to apply a basic electronic formula to yield a decent result. This tutorial will show you how this is done. Getting an ACS712 They are readily available at any of the following vendors: eBay Amazon Bang Good Ali-Express Discussion of the Basic Methology Applied Finding the RMS Value In most cases, an expression of AC current  will be in a value known as RMS.   In order to use the ACS712 current sensor to measure AC current, it is important to understand how to calculate an RMS current value from the device readings. The formula that is applied here is very basic and is right out of any basic electricity or electronics manual. With an ACS712,  current measurements are reported with a voltage output.   In this tutorial, we will calculate the RMS volts and apply the ACS712 scale factor. Conversion for a sine wave with a zero volt offset (like your mains or line power) is performed as follows… 1) Find the peak to peak voltage  ( Volts Peak to Peak ) 2) Divide the peak to peak voltage by two to get peak voltage (Volts Peak) 3) Multiply the peak voltage by 0.707 to yield rms volts (Volts RMS) Having Calculated RMS voltage,  is simply a matter of multiplying by the scale factor of the particular ACS712 to yield the RMS value of the current being measured. Arduino Sampling for the Peaks The values out of the ACS712 are constantly changing when measuring AC Current.   In order ensure that you have come very close to finding the peaks, you need to sample fast enough and long enough.    Because mains or line power is at a frequency of 50 to 60 hz,  the Arduino will be fast enough provided it takes consecutive samples with little or no interruption. In this tutorial,  there is a function dedicated to doing just that. Arduino ACS712 Current Measurement Tutorial NOTE:   This works for lower voltage measurements and perhaps experimentally at a higher line voltage.  This should not be used in a permanent line voltage application. Arduino ACS712 AC Measurement Tutorial Setup Fundamental to performing this tutorial safely is knowing what the current rating of your ACS712 and the amount of current that your load requires. Connect the components as shown below:  The ACS712 Arduino AC Current Tutorial Sketch Copy, Paste and Upload the code below.   Also take a look at how I make a call to the ‘getVPP‘ function from the main loop.  In that function, I take interupted AC samples for one second while recording the maximum and minimum values.  From this I will calculate the peak to peak voltage measured.   I’ve found this to be extremely effective for line power frequencies. Mind you, my power is pretty clean.  If you’ve got a lot of spikes, getting a meaningful measurement could be tough. /* Measuring AC Current Using ACS712 */ const int sensorIn = A0; int mVperAmp = 185; // use 100 for 20A Module and 66 for 30A Module double Voltage = 0; double VRMS = 0; double AmpsRMS = 0; void setup(){  Serial.begin(9600); } void loop(){      Voltage = getVPP();  VRMS = (Voltage/2.0) *0.707;   AmpsRMS = (VRMS * 1000)/mVperAmp;  Serial.print(AmpsRMS);  Serial.println(" Amps RMS"); } float getVPP() {   float result;      int readValue; //value read from the sensor   int maxValue = 0; // store max value here   int minValue = 1024; // store min value here       uint32_t start_time = millis();    while((millis()-start_time) < 1000) //sample for 1 Sec    {        readValue = analogRead(sensorIn);        // see if you have a new maxValue        if (readValue > maxValue)        {            /*record the maximum sensor value*/            maxValue = readValue;        }        if (readValue < minValue)        {            /*record the maximum sensor value*/            minValue = readValue;        }    }        // Subtract min from max    result = ((maxValue - minValue) * 5.0)/1024.0;           return result;  } ### Arduino Touch Screen Music Player and Alarm Clock Project In this project I will show you how you can make an Arduino Touch Screen MP3 Music Player and Alarm Clock. You can watch the following video or read the written tutorial below. If we enter the Music Player we can start playing the music by pressing the big “Play” button in the middle of the screen. Right beside it, there are two more buttons, for playing the previous or the next song. Above these buttons there is the song progress bar, and at the bottom of the screen we have a volume bar and two buttons for decreasing and increasing the volume. In the upper right corner there is a clock and on the left side is the “Menu” button which brings us back to the home screen. On the other hand, if we enter the Alarm Clock we can set an alarm by using the two buttons for setting the hours and the minutes. When the alarm will be activated, a song will start playing at a higher volume, and it will keep playing until we press the “Dismiss” button. How It Works Now let’s take a look how this device works. It uses an Arduino Mega board and a 3.2” TFT touch screen with a suitable shield for connecting the screen with the Arduino Board. For playing the music, it uses the BY8001 MP3 Player module and for the alarm clock it uses the DS3231 Real Time Clock module. You can get the components needed for this Arduino Project from the links below: 3.2″ TFT Touch Display………… Amazon / Aliexpress TFT Display Mega Shield……… Amazon / Aliexpress BY8001-16P MP3 Module ……… Amazon / Aliexpress 0.5W Speaker ………………………. Amazon / Aliexpress DS3231 Real Time Clock ……….. Amazon / Aliexpress Arduino Board ……………………… Amazon / Aliexpress *Please note: These are affiliate links. I may make a commission if you buy the components through these links. I would appreciate your support in this way! Read more: Arduino Touch Screen Music Player and Alarm Clock Project ### Arduino Remote Control Tutorial In this tutorial I am going to show you exactly how to make an Arduino remote control. You can use this project to combine functions from different remote controls and make your super-awesome dream remote control! If you are not familiar with Arduino, check out What is Arduino and where to start? A remote control sends out an infrared (IR) code when you push a button. The gadget you point the remote control at will receive this IR code. To make your own Arduino remote control, you need to first copy the IR code from an existing remote control using an IR receiver. To create our remote control we need to: Get button-code from original remote Make a remote-control program Upload our program to the Arduino We will use these components for our Arduino project: Arduino IR Receiver TSOP31238 IR Diode 100 Ohm Resistor You can buy an Arduino at Amazon. Connect the hardware We start by connecting the components to the Arduino. Here is how to connect the components: Get the Arduino-IRremote library In this tutorial we will use the Arduino-IRremote library. It is open-source and can be found at https://github.com/shirriff/Arduino-IRremote We’ll download and install the library as described on their website. It’s basically just to download a zip-file, unzip it and rename it. Then put it in the arduino/library/ folder. This library includes everything we need to receive and send IR signals. Retrieve the button-code and protocol First we need to get the button-code and protocol from the original remote. In this tutorial we will copy the “Standby”-button from a Sandstrøm radio remote control. To receive the IR code, we will use the IRrecvDemo example. You’ll find it in the example folder of the Arduino-IRremote folder (…/arduino/libraries/IRremote/examples/IRrecvDemo/IRrecvDemo.ino) This example prints the code it receives. But we also want to know which protocol it uses. So we’ll modify the program slightly. We’ll add these two lines to the program: Read more: Arduino Remote Control Tutorial ### ESP8266 Standalone WiFI Relay Control AIM To control a relay switch using esp8266 in standalone mode(without arduino,pic or any other Micro-controller) via Web-UI The ESP broadcasts its own SSID.It does not connect to a router.local IP address of esp is 192.168.4.1 Step 1: Gather Hardware ESP 8266 (There are a lot of variants available in the market.for this tutorial lets just use the esp-01).If you are curious about the different variants click this link. 3.3v/5v power supply (depending on your module.My esp 01 uses 3.3v.Its very important that you have and external power source.More on this later),12 v power supply Any WI-Fi enabled device. FTDI USB to TTL adapter like this Bread Board Some connecting wires DC-DC Buck converter(optional.To power the module.) 1N5408 diode(optional) A multi meter (optional) Relay Driver(3v in my case) I recommend you to get the one withoptocouple like this you can build the relay driver on your own if you wish to with an npn transistor and a relay,the circuit is provided here.but i recommend you get a relay driver Step 2: Gather Software Node MCU Flasher - Node_MCU.7z ESPlorer(The IDE to load Lua script to the module) - ESPlorer.7z Step 3: Setting Up Power Supply This step is important. Some FTDI USB to TTL converters have a 3.3 v power supply build into it.To avoid unnecessary confusions.Don't try to power the module from the power supply of the USB to TTL converter. It Just wont work guys Methods to power it: Use a 3.7 v battery from your old phone.(an additional 0.4v wont damage your module) Use a DC to DC buck converter like this Calibrating the Buck Converter Make connections as shown in the Diagram Connect a 12v power supply to the input via a diode(protection) Switch to DC voltage measurement in you multi meter and connect it to the output of the Buck converter adjust the variable resistance on the buck converter till the multi meter reads 3.3v Read more: ESP8266 Standalone WiFI Relay Control ### Teardown: Amazon Dash Button keeps you connected Amazon's Dash Button, which I previously mentioned back in late May 2015, is the ultimate in consumer convenience (or, if you prefer, consumerism gone crazy). Simply press a button on the inconspicuous adhesive-backed device (perfect for attaching to your washer and dryer, refrigerator, counter, or cabinet), and your Amazon account is charged for the purchase while the corresponding product gets automatically ordered and shipped to you. Initially unveiled on April 1, 2015 (therefore explaining why I at first thought the announcement was an April Fools' joke from the company), they cost only $4.99, and Amazon more recently announced that it'd even refund the purchase price after your first associated-consumable order. How much hardware was Amazon able to squeeze into such a diminutive bill-of-materials budget, or perhaps more accurately, how much are Amazon and its consumable-supplier partners subsidizing the initial hardware cost in the hope of plenty of future generated profits? Let's find out. To begin, here are some views of the packaging for the particular unit I ordered, which is associated with Gatorade sports drink: On the last one, you'll note that (for privacy-preservation reasons) I've blurred out both the UPC and alphanumeric sequence associated with my unit's DSN (Dash Serial Number). This code, as its name implies, is device-specific; in conjunction with your pre-configured Amazon account information, it indicates to Amazon's servers what class of product is being ordered (Gatorade sports drink, versus any of the other items on the already-numerous and steadily growing list of consumables that the Dash Button service supports) and who's ordering it. Still to be configured upon initial product setup are your residence's wireless network SSID and encryption password, and exactly what product you're interested in button-press ordering (Gatorade flavor, for example, and packaging size and quantity). Stay tuned for more details on how both objectives are hardware-accomplished. [Sponsored Teardown: See inside Schneider variable speed drives.] The packaging is Apple-like (or, come to think of it, Amazon-like, keeping in mind past products from the company that I've also used) in its simplicity: The only thing inside the box aside from the Dash Button itself is a diminutive quick-start guide. Here's what my Dash Button (3.2×1.2×0.6 inches; 1 ounce) looks like after removal from the box: Note the small LED above the button, used both when initially setting up the Dash Button and subsequently as visual feedback of a successful order submission. Note, too, the mysterious hole above the Gatorade logo, whose function will be explained shortly: The DSN is replicated on the unit's backside, along with a QR code, both of which I've again obscured: Read more: Teardown: Amazon Dash Button keeps you connected ### Reverse engineering the popular 555 timer chip (CMOS version) Reverse engineering the popular 555 timer chip (CMOS version) This article explains how the LMC555 timer chip works, from the tiny transistors and resistors on the silicon chip, to the functional units such as comparators and current mirrors that make it work. The popular 555 timer integrated circuit is said to be the world's best-selling integrated circuit with billions sold since it was designed in 1970 by analog IC wizard Hans Camenzind[1]. The LMC555 is a low-power CMOS version of the 555; instead of the bipolar transistors in the classic 555 (which I described earlier), the CMOS chip is built from low-power MOS transistors. The LMC555 chip can be understood by carefully examining the die photo. The structure of the integrated circuit The photo below shows the silicon die of the LMC555 as seen through a microscope, with the main function blocks labeled (photo from Zeptobars). The die is very small, just over 1mm square. The large black circles are connections between the chip and its external pins. A thin layer of metal connects different parts of the chip. This metal is clearly visible in the photo as white lines and regions. The different types of silicon on the chip appear as different colors. Regions of the chip are treated (doped) with impurities to change the electrical properties of the silicon. N-type silicon has an excess of electrons (making it Negative), while P-type silicon lacks electrons (making it Positive). On top of the silicon, polysilicon wiring shows up as other colors. The silicon regions and polysilicon are the building blocks of the chip, forming transistors and resistors, which are connected by the metal layer. A brief explanation of the 555 timer The 555 chip is extremely versatile with hundreds of applications from a timer or latch to a voltage-controlled oscillator or modulator. To explain the chip, I will use one of the simplest circuits, an oscillator that cycles on and off at a fixed frequency.The diagram below illustrates the internal operation of the 555 timer used as an oscillator. An external capacitor is repeatedly charged and discharged to produce the oscillation. Inside the 555 chip, three resistors form a divider generating reference voltages of 1/3 and 2/3 of the supply voltage. The external capacitor will charge and discharge between these limits, producing an oscillation, as shown on the left. In more detail, the capacitor will slowly charge (A) through the external resistors until its voltage hits the 2/3 reference. At that point (B), the threshold (upper) comparator switches the flip flop off turning the output off. This turns on the discharge transistor, slowly discharging the capacitor (C) through the resistor. When the voltage on the capacitor hits the 1/3 reference (D), the trigger (lower) comparator turns on, setting the flip flop and the output on, and the cycle repeats. The values of the resistors and capacitor control the timing, from microseconds to hours. Read more: Reverse engineering the popular 555 timer chip (CMOS version) ### Reverse engineering the popular 555 timer chip This article explains how the LMC555 timer chip works, from the tiny transistors and resistors on the silicon chip, to the functional units such as comparators and current mirrors that make it work. The popular 555 timer integrated circuit is said to be the world's best-selling integrated circuit with billions sold since it was designed in 1970 by analog IC wizard Hans Camenzind[1]. The LMC555 is a low-power CMOS version of the 555; instead of the bipolar transistors in the classic 555 (which I described earlier), the CMOS chip is built from low-power MOS transistors. The LMC555 chip can be understood by carefully examining the die photo. The structure of the integrated circuit The photo below shows the silicon die of the LMC555 as seen through a microscope, with the main function blocks labeled (photo from Zeptobars). The die is very small, just over 1mm square. The large black circles are connections between the chip and its external pins. A thin layer of metal connects different parts of the chip. This metal is clearly visible in the photo as white lines and regions. The different types of silicon on the chip appear as different colors. Regions of the chip are treated (doped) with impurities to change the electrical properties of the silicon. N-type silicon has an excess of electrons (making it Negative), while P-type silicon lacks electrons (making it Positive). On top of the silicon, polysilicon wiring shows up as other colors. The silicon regions and polysilicon are the building blocks of the chip, forming transistors and resistors, which are connected by the metal layer. A brief explanation of the 555 timer The 555 chip is extremely versatile with hundreds of applications from a timer or latch to a voltage-controlled oscillator or modulator. To explain the chip, I will use one of the simplest circuits, an oscillator that cycles on and off at a fixed frequency. The diagram below illustrates the internal operation of the 555 timer used as an oscillator. An external capacitor is repeatedly charged and discharged to produce the oscillation. Inside the 555 chip, three resistors form a divider generating reference voltages of 1/3 and 2/3 of the supply voltage. The external capacitor will charge and discharge between these limits, producing an oscillation, as shown on the left. In more detail, the capacitor will slowly charge (A) through the external resistors until its voltage hits the 2/3 reference. At that point (B), the threshold (upper) comparator switches the flip flop off turning the output off. This turns on the discharge transistor, slowly discharging the capacitor (C) through the resistor. When the voltage on the capacitor hits the 1/3 reference (D), the trigger (lower) comparator turns on, setting the flip flop and the output on, and the cycle repeats. The values of the resistors and capacitor control the timing, from microseconds to hours. To summarize, the key components inside the 555 timer are the comparators to detect the upper and lower voltage limits, the three-resistor divider to set these limits, the flip flop to keep track of whether the circuit is charging or discharging, and the discharge transistor. The 555 timer has two other pins (reset and control voltage) that I haven't covered above; they are used in more complex circuits. Read more: Reverse engineering the popular 555 timer chip ### 555 Timer Teardown If you've played around with electronic circuits, you probably know[1] the 555 timer integrated circuit, said to be the world's best-selling integrated circuit with billions sold. Designed by analog IC wizard Hans Camenzind[2] in 1970, the 555 has been called one of the greatest chips of all time with whole books devoted to 555 timer circuits. Given the popularity of the 555 timer, I thought it would be interesting to find out what's inside the 555 timer and how it works. While the 555 timer is usually sold as a black plastic IC, it is also available in a metal can, which can be cut open with a hacksaw[3] revealing the tiny die inside. A brief explanation of the 555 timer The 555 timer has hundreds of applications, operating as anything from a timer or latch to a voltage-controlled oscillator or modulator. The diagram below illustrates how the 555 timer operates as a simple oscillator. Inside the 555 chip, three resistors form a divider generating references voltages of 1/3 and 2/3 of the supply voltage. The external capacitor will charge and discharge between these limits, producing an oscillation. In more detail, the capacitor will slowly charge (A) through the external resistors until its voltage hits the 2/3 reference. At that point (B), the upper (threshold) comparator switches the flip flop off and the output off. This turns on the discharge transistor, slowly discharging the capacitor (C). When the voltage on the capacitor hits the 1/3 reference (D), the lower (trigger) comparator turns on, setting the flip flop and the output, and the cycle repeats. The values of the resistors and capacitor control the timing, from microseconds to hours.[4] To summarize, the key components of the 555 timer are the comparators to detect the upper and lower voltage limits, the three-resistor divider to set these limits, and the flip flop to keep track of whether the circuit is charging or discharging. The 555 timer has two other pins (reset and control voltage) that I haven't covered above; they can be used for more complex circuits. The structure of the integrated circuit The photo below shows the silicon die of the 555 through a microscope. On top of the silicon, a thin layer of metal connects different parts of the chip. This metal is clearly visible in the photo as yellowish-white traces and regions. Under the metal, a thin, glassy silicon dioxide layer provides insulation between the metal and the silicon, except where contact holes in the silicon dioxide allow the metal to connect to the silicon. At the edge of the chip, thin wires connect the metal pads to the chip's external pins. Read more: 555 Timer Teardown ### How To Make A Simple Arduino Voltmeter Prototype In this instructable, I'll show you how to make a simple Arduino voltmeter. It can measure voltages in excess of 30VDC depending on how you configure it. The smaller the voltage range you want to measure, the more accurate that your meter will be. This project is going to be apart of a gauss meter that I am making to measure magnetic fields strength as well as magnetic field polarity. This instructable should provide a good base for a large number of different applications that will need the Arduino to monitor the voltage level of something. Step 1: What You Will Need 1. Arduino Uno or similar microcontroller. 2. 128x64 OLED display 3. Two resistors. The values depend on the range of voltages you want to measure Step 2: Schematic Wire up your components as shown and choose your resistor values based on the range you want to measure. For example, if you want to measure 0-10V then you could pick R1 as 100k and R2 as 100k. Be sure to measure your resistors before plugging the number into your program to ensure a more accurate measurement. To calculate your desired voltage range you will need to use the following voltage divider formula. Vout = (R2*Vin)/(R1+R2) Vout will need to be 5V for the ADC and Vin will be the max voltage value that you want to measure. Here are a few voltage range examples: 0-10V : R1=100k, R2=100k 0-15V : R1=100k, R2=50k 0-25V : R1=100k, R2=25k 0-55V : R1=100k, R2=10k Step 3: Upload the Code Before you upload the code, you will need to download the U8glib library from here if you are using an OLED display. Step 4: How It Works This voltmeter uses the Arduino's analog to digital converter on the analog pin and convert 0-5 volts into a value from 0-1023. To measure more than 5 volts, you need use a voltage divider and calculate the voltage in your program. The problem with this is that the Arduino's analog to digital converter still only has a resolution of 1024 points so the higher voltage you want to measure, the less accurate your voltmeter will be. The ADC on the Arduino is a 10-bit ADC, meaning it only has the ability to detect 1,024 discrete analog levels. For my gauss meter I will probably use a microcontroller with a 16-bit ADC for 65,535 discrete levels and a overall more accurate meter. Only use this voltmeter to measure positive voltages and never hook it up with the wrong polarity. In my gauss meter instructable, the Arduino will measure negative and positive values so wait for that to see how to measure negative values. Read more: How To Make A Simple Arduino Voltmeter Prototype   ### DIY I2C LCD Display The typical parallel LCD used with an Arduino (16x2 or 20x4) has 16 pins. Only 6 I/O pins are required on the Arduino, but what if you could get that down to two I/O pins, and still have those pins available for other devices? The I2C interface is on pins A4 and A5 of the Arduino UNO. These are addressable, and are therefore shareable with other I2C devices that have different addresses. Now, you can buy I2C LCD's, and you can even find I2C LCD's with different addresses, but they are typically two line LCD's, and the addresses are fixed. I'm going to show you how to build your own I2C interface, select one of 8 addresses, and even be able to add up to 8 inputs or outputs, using a MCP23017 16 port expander chip.This is the same chip Adafruit uses on their I2C LCD Keypad Shield, and uses their library to talk to it. You could even have up to 16 LCD displays, or up to 128 digital I/O pins, and combinations thereof MCP23017 20x4 LCD or 16x2 LCD Step 1: LCD Wiring The connections between the Hitachi type parallel LCD (2 or 4 line) and the MCP23017 are shown in the photo. SDA (pin 13 on the MCP23017) connects to Arduino A4, and SCL (pin 12) connects to Arduino A5. Some suggest 4.7k pull up resistors (pin 13 to +5v and pin 12 to +5v) but this project works fine without them. Notice the 220 Ohm resistor on the LCD k (cathode, gnd) connection. This is a MUST! Without it, you can blow the MCP23107 backlight pin. There are 3 pins you can use for the backlight. Pin 1 is called BLUE in the Library and Sketch, Pin 28 is called GREEN, and pin 27 is called RED. If you have a monochrome LCD, you can use any of the three pins, and use the corresponding color callout. If you have a RGB backlight, you can get many combinations of colors. Check them out at http://arduinotronics.blogspot.com/2015/04/arduino-ups-battery-shield.html Pins 15, 16, and 17 on the MCP23017 determine the I2C address. We have all 3 grounded, as this is the default address the Adafruit library uses. To add multiple displays, or pick another address, the library will have to be modified, so we will go with the default for now. Adafruit_MCP23017.h contains the following line: #define MCP23017_ADDRESS 0x20 Pin 17 = A2, Pin 16 = A1, and Pin 15 = A0 0 = ground, 1 = +5v The address format is 0100A2A1A0, so since we have grounded all 3 lines, we are using binary 0100000, or 20 in hex (0x20). 0100111 would be 27 in hex (0x27). Read more: DIY I2C LCD Display ### Intel Galileo Project: Simple DIY Weather Station I’ve played with the Intel Galileo a lot lately, so now it’s time to build some Intel Galileo projects! In this project I built a very simple weather station that records the temperature and humidity and saves these to a memory card. I’ll show you how to read temperature and humidity from a DHT11 sensor with the Intel Galileo. Then how to save these values to an SD-card. If you’re new to the Intel Galileo, check out my guide on getting started with Intel Galileo projects. What is a DHT11 Sensor? The DHT11 is a cheap sensor for measuring temperature and humidity. It’s really easy to use with for example an Arduino. And since the Intel Galileo is in many ways similar to the Arduino, it’s also easy to use it for this project. Here’s one place to buy the DHT11 sensor: Amazon.com. Step 1: Get the Sensor Up and Running I started out using Adafruit’s DHT library to get the sensor up and running. I tested it using a standard Arduino UNO, just to see if the sensor worked. And it did. But when compiling for Intel Galileo, I got a few errors because of some AVR-specific calls. I fixed those errors, but still no luck… Then I found this article that explains why the sensor does not work with the standard library on a Galileo. Basically it is because of the strict timing requirements of the one-wire interface that the sensor uses. Since the Intel Galileo board runs an operating system, it can take more time to switch a pin from input to output than on a microcontroller. The workaround is to add a diode to split the one pin into two pins. This way the Galileo don’t have to switch one pin between being input and output. Like this: Note: If you are using a 3-pin sensor like me, ignore the resistor. Different modules have different pin placements. On mine, the data pin is on the middle pin. On others, it’s on the left. Download the modified library here: DHT library for Intel Galileo (Code by adafruit, modified by Dino Tinitigan) Learn how to add custom libraries to Arduino. Step 2: Format SD-Card To write to the SD-card, you need to use the SD-library: #include I had a 32GB SD card that I formatted to some Linux format, because that sounded like a reasonable thing to do (the board runs Linux). But the SD.begin() command failed. So, I tried NTFS format. But it still failed. Then, after a lot of Googling, I stumbled upon the following article that says the SD card must be formatted in FAT or FAT32: http://www.hofrock.com/sd-card-issues/ I formatted my SD card in FAT32 format, and it worked. Read more: Intel Galileo Project: Simple DIY Weather Station ### Make A Tiny Message Board Using Arduino We will make a tiny connected message board with a 0.96" OLED display that can be controlled from your phone. We will use the IFTTT "DO" app to set and clear the reminder so that no extra hardware will be required besides the OLED display. In addition to the reminder, our tiny message board can display 3 other lines, which we will use to display the daily weather temperature forecast and a surf report, which will be pushed via a couple of IFTTT recipes. The message board uses a Particle photon (Arduino compatible) for the brain and internet connectivity and a 128x64 monochrome OLED display. Let's get started. A Particle photon microcontroller $20 A 0.96" I2C Monochrome OLED display $10. Also available on the ADAFRUIT web store. A small Breadboard $3 Breadboard wiring An enclosure for the project (a mint box will work) Step 2: Wiring The I2C display requires only 4 connections: GND and VCC, which we can conveniently get from the Photon's pins 3V3 and GND, and SDA and SCL which we will connect to the Photon's D0 and and D1 respectively. The display consists of 128x64 pixels, which corresponds to 8 rows of 8 pixels (font size 1) or 4 lines of 16 pixels if we use a font size of 2. Our display is "monochrome", but the first line of text is yellow and the rest is blue, so we will use the first line for our reminder and the other 3 lines for other information such as surf report and weather for the day (or whatever else is important to you). Step 3: Software We will use the Particle web IDE to write and upload the software to the Photon. I will assume that you have already successfully gone through the registration steps outlined here: getting started. Read more: Make A Tiny Message Board Using Arduino   ### The Pendulum Clock If you've ever rode the Link Light Rail in Seattle to the airport, you may have glanced out of the window while traveling through a tunnel and seen playing cards illuminated on the walls. These images are not made from two dimensional screens. Each display is just a row of lights that changes rapidly as the train drives by, giving the illusion of a two-dimensional picture. The University Street station also has rows of lights blinking on the walls on the mezzanine floor. I always point out the artwork whenever I walk through the station with someone. At first glance the displays just appear to be red lines, but if you move your eyes rapidly from side to side, there are images hidden in how the lights blink. That was the inspiration for the Pendulum Clock. You might not see it at first, but it is showing an analog clock face that reads 2:40. Usually it takes a couple swings to see the picture. Once you see it, it becomes very easy to read the time. The Pendulum Clock has a row of 64 white LEDs that change based on the position of the pendulum. I've used it to display an analog clock face, but it can be used to display any 2D image. The motion of the clock is not powered; you have to manually push the pendulum to one side to start it moving. It's powered by a simple Arduino Uno, a DS1307 RTC for keeping time, a MAX7219 LED controller, and a bad ass rotary encoder. The case is a Hammond box, which fit all of the components with just the right amount of room. The face is a 4"x24" piece of basswood. Read more: The Pendulum Clock ### Chinese Rings Puzzle With Arduino Introduction Hello all, The Chinese Rings Puzzle with Arduino is my version of a centennial Chinese puzzle. It is very simple to play and it is an example of a combinatorial puzzle, and lots of patience and concentration is required to solve it. The objective is to untangle the long loop from all nine rings, and the solution takes 341 moves (minimum possible). Once you learn the method to solve the puzzle, you will see that is very easy to play it! This project is very simple to be assembled, using only an Arduino UNO R3 and a LCD Keypad Shield. It took me some time, but the code I developed reproduced exactly the same conditions and constraints as the original mechanical puzzle. Let's do it and have a fun for a long time!! LAGSILVA The Puzzle Story Stewart Culin in his book "Games of the Orient" records a story that the Chinese Rings puzzle was invented by the famous Chinese hero Mung Ming (A.D. 181 - 234). He apparently gave it to his wife when he went to war so she would have something to keep her busy in his absence. The story relates that she forgot her sorrow while trying to solve the puzzle. This puzzle or the Cardano's Rings was introduced in Europe by Girolamo Cardano in 1550 and it is perhaps the greatest mechanical puzzle of China. The original puzzle consists of a long loop with a handle on one end that is interlocked with nine rings. A Little of Math The total of moves for a number of rings (n) is determined by the following equations: 1) When n is odd number: T (n) = (2 ^ (n+1) − 1 ) / 3 2) When n is even number: T (n) = (2 ^ (n+1) − 2 ) / 3 n T(n) 1 1 2 2 3 5 4 10 5 21 6 42 7 85 8 170 9 341 10 682 11 1365 12 2730 13 5461 14 10922 15 21845 16 43690 17 87381 18 174762 19 349525 20 699050 Material List Arduino UNO R3 LCD Keypad Switch he Code The code is attached to this project. Just upload it to your Arduino. For this project you will need the Liquid Crystal library. Playing The first line of LCD is shown the 09 rings, and in the second line is shown the pointer. You must use the keys LEFT & RIGHT to move the pointer, and the key SELECT to remove or to insert a ring. For more detail: Chinese Rings Puzzle With Arduino ### Polar Heart Rate Monitor Interface + Arduino The following code and library are compatible with arduino software 1.0+ ONLY. You can download the newest version of the arduino software here. When you start to talk about biometrics in electronics, heart-rate is usually the first thing to come up. And why not? I think it is often the thing we are most aware of changing when we get excited, nervous, are being active, or very calm. There are several ways of sensing heart rate that dont require lots of heavy equipment and electrodes taped to you. A lot of work has been done on wrist worn IR based sensing, but it tends to be error prone, especially with movement. Currently, the best available method at a reasonable price seems to come from the company Polar. And, what makes it better is that Sparkfun in conjunction with danjuliodesigns, created a microcontroller compatible receiver for the polar monitors. So let’s take a look at using the Polar Heart Rate Monitor Interface and getting it running with your arduino. The annoying thing about all of this is that you do need to wear a sensor on your body to get this going. I picked up this guy off amazon and had pretty good results most of the time. This transmitter band is a reusable electrode that wirelessly transmits to a receiver. A note when you are testing, the band will only transmit when it is on person, or you have semi-wet thumbs pressed into the sensor plates. Also because it is an electrode, it wants a good connection with your skin… meaning sweat. They sell electrode gel you can use with it for a better connection when the skin is dry, but I never tried it. In the humid summer nights I was testing this in, I never really had an issue. Hooking It Up Ok… so this board is capable of a ton of stuff. But we are just looking today at using this with the Arduino, and the simplest way is to get this guy running in I2C mode because it will allow us to get the heart rate from it easily into our Arduino. I2C is a 2-wire serial connection, so you just need to connect the SDA (Data) and SCL (Clock) lines to your Arduino for communication. On your Arduino (everything but the mega) SDA is on analog pin 4, and SCL is on analog pin 5. On an Arduino Mega, SDA is digital 20, and SCL is digital 21. The board doesn’t come setup for I2C by default, so we need to make a few changes. There are two solder-jumpers on the board that need to be changed to make this happen. The first is SJ1 just to the right of the 5V pin. Remove the solder from there using solder wick or a solder sucker so that the two parts are not connected. (like in the illustration). Next look at the row of pads at the top of the board labeled OP0 – OP7. We need to solder OP0 so the two pads are connected (See the illustration). Ok, so once you have the board modified and ready for I2C communication, we can actually just power it up with 5v to check if it is able to communicate with the band. With the board on, moisten your thumbs and press them firmly into the back of the band where the electrodes are and hold it less than a food from the monitor board. You should see a green LED on the board start to blink. If it does… Awesome, the band and the board are communicating! If not, try it a bit more, and see if you can get it going. For more detail: Polar Heart Rate Monitor Interface + Arduino ### Sensing Capacitive Touch – MPR121 + Arduino Every now and then you get sick of the typical push buttons and you want something cooler. And what is cooler than touch sensitive things? Remember that old lamp in your Grandma’s that changed brightness just by touching the base? Yeah, that’s right… We are talking THAT cool! The MPR121 capitative touch sensor gives you 12 of such inputs that we can use with our Arduino, and you can get it in several forms from SparkFun – Im using the basic breakout board. How? Well… Capacitive sensing is pretty simple in concept. Every object has capacitance, (in laymen’s terms capacitance is just an objects ability to hold a charge), and when you come in contact with something you change its capacitance. Well the MPR121 just looks for these changes, and tells us when it happens. Hooking It Up Hooking it up to your Arduino is pretty simple, the MPR121 is an I2C device. I2C is a 2-wire serial connection, so you just need to connect the SDA (Data) and SCL (Clock) lines to your Arduino for communication. On your Arduino (everything but the mega) SDA is on analog pin 4, and SCL is on analog pin 5. On an Arduino Mega, SDA is digital 20, and SCL is digital 21. When the MPR121 senses a change, it pulls an interrupt pin LOW. Now if we were ninja’s we would use this oppertunity to create an interrupt on our Arduino and deal with changed immediately. However, to simplify things for us non-ninjas, we are just going to check that pin to see if it is LOW during our loop. To do this, this sensor also needs access to another digital pin, and in this case we are using digital 2. Electrodes This is a touch sensor, so we need something to touch right? We call these electrodes. Typically, electrodes can just be some piece of metal, or a wire, or my favorite, metal tape (just make sure you have at least 1/2in of bare wire in contact with the sticky part of the tape for good contact). But some times depending on the length of our wire, or the material the electrode is on, it can make triggering the sensor difficult. For this reason, the MPR121 allows you to configure what is needed to trigger and untrigger an electrode. So if you are getting false or no positives, you may need to change that. Proximity Sensing There is a small change in capacitance even as you approach an electrode, just through the air. So if you set the touch threshold, or release threshold too low you may notice it trigger even a few inches away. If you want it to trigger from a decent distance away, the MPR121 supports aggregating all of the electrodes together to use it as a single large proximity sensor – But you will need to read the doc sheet to figure that one out, sorry. For more detail: Sensing Capacitive Touch – MPR121 + Arduino ### Bluetooth enabled Door locker using Arduino DIY Arduino based lockers can be found plenty in the internet where keypad was used to feed lock input. But this Bluetooth enabled Door locker uses Bluetooth as a medium to connect with the locker and your smart phone to feed input credentials. This locker allows you to lock/unlock your locker without physical touch when you are within the range of Bluetooth communication. DESIGN: Arduino is the heart of this locker system and HC-05 module provides the bluetooth connectivity for the arduino. I have added a relay to act as an activator for the E-locker in the above design. You may replace it with any other electronic activator or door activator if you are going to use it for doors. If that’s the case alter the design in such a way that the system is provided with enough power to drive the activator. I have added a simple LED in the project i have built-in place of Relay since i haven’t got one to use, kindly excuse me for that. HC-05: The HC-05 is a pretty famous Bluetooth module used in standard embedded applications where BT connectivity is required. This module converts the data received through Bluetooth and converts it into serial format that can be understood by Controllers equipped with UART communication. This module should be powered by +3.3v and special key pin for secured communication. BT TERMINAL SOFTWARE: A special software known as Bluetooth serial terminal is needed for this project. This software is used to send raw data from our device to the HC-05 module connected to the Arduino. This kind of software available for all smart phone platforms such as Android, iOS and Windows. I have used SENA BTerm software  Android for this project. However you can choose any Bluetooth terminal software in any platform, everything will work just fine. FEATURES: The locker password can be set to any complex level and length with no restrictions. Bluetooth access reduces the hardware size and complexity of adding keypad to the system. Wireless activation of door locker will be the most highlighting specs of this system. Less power consumption by Bluetooth will be of great advantage. PARTS REQUIRED: Arduino Uno HC-05 Bluetooth Module Relay Connecting Wires   Read More: Bluetooth enabled Door locker using Arduino ### Remote controlled light effects using Arduino Christmas is just around the corner and its time to start planning things to lighten up this festive season. Today you are about to see building of Remote controlled lights with adjustable lighting effects using Arduino. The coolest thing about this project is controlling the effects of LED lighting using a typical household Remote and Arduino. This eliminates the primitive way of using pot to control LED effects and go wireless.   PARTS REQUIRED: TSOP1738 – Buy here Arduino Uno – Buy here LEDs – Buy here Transistors DESIGN OF REMOTE CONTROLLED LIGHTS: Arduino forms the heart of this system where a simple blink code with varied time delays is used to produce the lighting effect. Two NPN transistors was used here as a switch to turn the LED’s ON and OFF since the Arduino cannot source large current to power up the LED’s by itself. And TSOP1738 IR receiver to receive the IR beam from the remote and send signals to the Arduino. TSOP 1738: TSOP1738 is a simple IR signal receiver that is capable of receiving IR signals of frequency 38Khz at which most of our household remotes work. This made the project fit to be controlled with any remotes we use in our house. This is an active low sensor which gives low output when IR signal incident and high in absence of IR signal. We have to program Arduino accordingly to receive this TSOP1738 input accordingly. WORKING EXPLANATION: The Arduino acts as a simple activator and a delay generator for the effects. Meanwhile the transistor is to switch the LED sets connected to the pin 7 of the LED. The IR receiver receives the incoming IR signal and triggers interrupt to the Arduino. So when user presses any button in the remote facing the sensor it give low signal in its output pin which in turn create an interrupt in Arduino. With each encountered interrupt the Arduino uses set of delay value between the ON and OFF state of the LED which will be predefined in the code. This way the LED blink will overall looks like a beautiful effect to the user. This makes the two set of LED’s to turn on and off at the same time. And varying time delay will take care of creating attractive effect.   Read More: Remote controlled light effects using Arduino ### The Zambroombi: Roomba’s Next Ultrasonic Competitor The Zambroombi is the next step up from your neighbor's fancy Roomba. Set it and forget it! "It changed my life. I don't know where I'd be today without it. I used to just have to clean everything once, but thanks to The Zambroombi, I get to clean everything twice!"  —Real Zambroombi© Customer BOM: Arduino Uno Adafruit motor shield Ultrasonic sensor Robot chassis w/ 2 DC motors Battery pack (if not included with chassis)   Why? With the holidays approaching, I began to look at the calendar, and I became overwhelmed with stress. How am I supposed to host family gatherings AND cook and clean all by myself!? I knew something had to be done. Digging through my workbench for spare parts, I discovered the ultrasonic sensor and immediately went to work. Minutes later (easy project, try it out!), I held a new and fabulous household appliance, The Zambroombi! The appearance leaves a bit to be desired, and the scooping design perhaps has an imperfection or two, but there is so much potential! The Zambroombi serves many functions: it sweeps up popcorn, it gives your dog a pal, it is even a friend to talk to at night. Add some bristles to a sweeping servo and give it a functioning tail, collecting and spreading dust across your house! How? The Zambroombi is such a great design because I can turn it on and let it run free. Its ability to calculate an object's distance and correct its own driving path means it can drive endlessly on its own—at least until it gets stuck on a potato. Its astonishing ability to operate autonomously is based on the bot's ultrasonic sensor. The ultrasonic sensor functions by emitting high-frequency sound waves (too high for the human ear to detect), waiting for those sound waves to reflect off an object, and then calculating how long it takes for the sound to return to the sensor. The sensor has included send and receive pins labeled "trigger" and "echo," respectively, which perform most of the work for us. You can find more details about interfacing to the sensor module by looking through the code, found below in the orange code download button. Read More:  The Zambroombi: Roomba’s Next Ultrasonic Competitor ### Make Your Own GPS Transmitter with the HC-12 Transceiver The initial part of this series, titled Understanding and Implementing the HC-12 Wireless Transceiver Module, demonstrates using HC-12 for long-range data exchange between two Arduino Unos. This article utilizes two HC-12 transceivers, a GPS module, an Arduino, and Google Maps in order to develop a basic tracking device. Item Cost More Information HC-12 transceiver (x2) $4 Datasheet GPS Receiver $16 Datasheet or Adafruit GPS Logger Shield $45 Project Guide Arduino Uno R3 (or compatible) $45 Reference Part one of this two-part series discussed the HC-12 transceiver module and described how to hook it up to an Arduino and a power source. In this article, we will create a remote GPS receiver that can be used to track nearby items without using a cellular network. For further information on the transceiver module, please see the HC-12 datasheet (PDF). Adding and Transmitting GPS The Global Positioning System (GPS) allows users to accurately determine the location of objects on or above the surface of the Earth. Both of the GPS receivers listed at the top of this article transmit National Marine Electronics Association (NMEA) sentences that provide information that includes latitude and longitude, altitude, time, bearing, speed, and a great many other variables at 9600 baud. The HC-12s can transmit the information from a GPS receiver with no additional programming or circuitry. You can transmit GPS coordinates to remote locations with as little as a GPS receiver, an HC-12 transceiver, and a battery. Remotely transmitted coordinates would have to be received by another HC-12 transceiver and then processed with a microcontroller or computer. Setting up a basic system like the one described can enable you to design a compact remote object tracker; once the object goes beyond a set area, you will receive a notification, giving you a window to locate it before losing signal. This could be utilized with a car, a pet, or even - if you're worried about theft - the large pumpkin you're cultivating for the state fair. If you are in an area with clear line of sight, the transmitters will broadcast up to one kilometer, which is a 15-minute walk (or 5-minute run). The maximum range in urban areas will decrease but should remain adequate to alert you if your luggage is leaving the train station without you, or let you know where your dog ventures when he escapes from your yard. Instead of sending GPS data directly to the HC-12, we can improve the project by transmitting it to an Arduino first. Afterward, only certain strings are able to be sent to the HC-12. Decreasing the over-the-air baud rate can be helpful in extending the range of HC-12 communication. The SparkFun GPS module priced at $16 comes with a default transmission rate of 9600 baud, which is equivalent to an over-the-air rate of 15000 baud. Transferring GPS data at 9600 baud to Arduino, then sending specific data at 2400 baud to HC-12 will lower air rate to 5000 baud. Per the datasheet, this enhances receiver sensitivity by a maximum of 5 dB, resulting in a slight boost in range. The SparkFun GPS receiver provides six sentences at 9600 baud: GPRMC, GPVTG, GPGGA, GPGSA, GPGSV, and GPGLL. The GPS shield from Adafruit, which is significantly more expensive, can be programmed to transmit select sentences at all standard baud rates. This is an example data transmission from the receiver to an Arduino. You can decode your own strings with this online tool. $GPRMC,210154.00,A,3358.88969,N,11756.33387,W,0.824,,200916,,,A*6F $GPVTG,,T,,M,0.824,N,1.527,K,A*2C $GPGGA,210154.00,3358.88969,N,11756.33387,W,1,05,1.67,254.3,M,-32.6,M,,*6E $GPGSA,A,3,13,05,21,18,29,,,,,,,,3.15,1.67,2.66*01 $GPGSV,3,1,11,05,20,044,23,10,10,223,,13,26,083,22,15,37,120,*70 $GPGSV,3,2,11,16,11,322,,18,45,224,23,20,76,043,,21,55,312,22*76 $GPGSV,3,3,11,25,23,195,17,26,27,298,,29,72,108,17*47 $GPGLL,3358.88969,N,11756.33387,W,210154.00,A,A*74 Arduino libraries exist that enable decoding of NMEA sentences into the latitude & longitude pairs below:   Type UTC Time Position Speed Altitude HDOP, VDOP, PDOP Satellites RMC 2016-09-20T21:01:54Z 33°58'53.38''N, 117°56'20.03''W 0.824 knots VTG 0.824 knots GGA 2016-09-20T21:01:54Z 33°58'53.38''N, 117°56'20.03''W 254.3 5 GSA 1.67, 2.66, 3.15 5 GSV 11 GSV 11 GSV 11 GLL 2016-09-20T21:01:54Z 33°58'53.38''N, 117°56'20.03''W RMC (recommended minimum information), GGA (3D location and accuracy), and GLL (latitude and longitude) all include latitude, longitude, and time. GGA provides altitude, and GSA provides the dilution of precision of the reading (lower numbers indicate greater precision). The following program is backward-compatible with the two programs presented in part one. It reads the NMEA sentences sent by the GPS to the Arduino, discards all but the selected sentence, and transmits the selected sentence to a remote Arduino when requested. It works with either the SparkFun GPS receiver or the Adafruit GPS logger shield, as shown below. This program allows users to remotely "ping" distant transceivers to determine their location. GPS data from a remote transmitter received, via a pair of HC-12 transceivers, by a local Arduino HC-12 transceiver paired with an Adafruit GPS shield HC-12 transceiver paired with a SparkFun GPS module Connect the power supply, GPS, Arduino, and HC-12 as shown above. The SparkFun GPS receiver has only three wires; the fourth signal (GPS RXD) is not needed for basic functionality and is not made available to the user. However, if you use the Adafruit shield, the GPS RX pin is enabled, and you can change the refresh rate and which sentences the GPS transmits, eliminating the need for the portion of the Arduino code at the end of the file that simply deletes unwanted sentences. One potential problem with using the Arduino UNO for this program is that the SoftwareSerial library can only "listen" to one serial port at a time—data sent to a serial port when the software isn't "listening" on that port will be discarded. The program functions as intended during testing, but I would not consider it a robust solution. If you need multiple serial communication ports in your project, consider the Arduino Mega, or a separate chip such as the ATSAMD21. If you are tracking a single object near your house, it is sufficient to set upper and lower limits for expected latitude and longitude values. If you are trying to determine the distance between two GPS units, you might consider implementing Vincenty's formula on a 16-bit or 32-bit microcontroller. /* HC12 Send/Receive Example Program 3 By Mark J. Hughes for AllAboutCircuits.com This code will automatically detect commands as sentences that begin with AT and both write them and broadcast them to remote receivers when requested. Changing settings on a local transceiver will also change settings on a remote receiver. Connect HC12 "RXD" pin to Arduino Digital Pin 4 Connect HC12 "TXD" pin to Arduino Digital Pin 5 Connect HC12 "Set" pin to Arduino Digital Pin 6 Connect GPS GND and 3.3V to Arduino or separate supply Connect GPS "RX" to Arduino Digital Pin 7 (optional) Connect GPS "TX" to Arduino Digital Pin 8 Do not power over USB. Per datasheet, power the HC12 with a supply of at least 100 mA current capability, and include a 22 uF - 1000 uF reservoir capacitor. Upload code to two Arduinos connected to two computers. Transceivers must be at least several meters apart to work in default mode. */ #include //--- Begin Pin Declarations ---// const byte HC12RxdPin = 4; // "RXD" Pin on HC12 const byte HC12TxdPin = 5; // "TXD" Pin on HC12 const byte HC12SetPin = 6; // "SET" Pin on HC12 const byte GPSRxdPin = 7; // "RXD" on GPS (if available) const byte GPSTxdPin = 8; // "TXD" on GPS //--- End Pin Declarations ---// //--- Begin variable declarations ---// char byteIn; // Temporary variable String HC12ReadBuffer = ""; // Read/Write Buffer 1 -- Serial String SerialReadBuffer = ""; // Read/Write Buffer 2 -- HC12 String GPSReadBuffer = ""; // Read/Write Buffer 3 -- GPS boolean serialEnd = false; // Flag for End of Serial String boolean HC12End = false; // Flag for End of HC12 String boolean GPSEnd = false; // Flag for End of GPS String boolean commandMode = false; // Send AT commands to remote receivers boolean GPSLocal = true; // send GPS local or remote flag //--- End variable declarations ---// // Create Software Serial Ports for HC12 & GPS // Software Serial ports Rx and Tx are opposite the HC12 Rxd and Txd SoftwareSerial HC12(HC12TxdPin, HC12RxdPin); SoftwareSerial GPS(GPSTxdPin, GPSRxdPin); void setup() { HC12ReadBuffer.reserve(82); // Reserve 82 bytes for message SerialReadBuffer.reserve(82); // Reserve 82 bytes for message GPSReadBuffer.reserve(82); // Reserve 82 bytes for longest NMEA sentence pinMode(HC12SetPin, OUTPUT); // Output High for Transparent / Low for Command digitalWrite(HC12SetPin, HIGH); // Enter Transparent mode delay(80); // 80 ms delay before operation per datasheet Serial.begin(9600); // Open serial port to computer at 9600 Baud HC12.begin(9600); // Open software serial port to HC12 at 9600 Baud GPS.begin(9600); // Open software serial port to GPS at 9600 Baud HC12.listen(); // Listen to HC12 } void loop() { while (HC12.available()) { // If Arduino's HC12 rx buffer has data byteIn = HC12.read(); // Store each character in byteIn HC12ReadBuffer += char(byteIn); // Write each character of byteIn to HC12ReadBuffer if (byteIn == '\n') { // At the end of the line HC12End = true; // Set HC12End flag to true. } } while (Serial.available()) { // If Arduino's computer rx buffer has data byteIn = Serial.read(); // Store each character in byteIn SerialReadBuffer += char(byteIn); // Write each character of byteIn to SerialReadBuffer if (byteIn == '\n') { // At the end of the line serialEnd = true; // Set serialEnd flag to true. } } while (GPS.available()) { byteIn = GPS.read(); GPSReadBuffer += char(byteIn); if (byteIn == '\n') { GPSEnd = true; } } if (serialEnd) { // Check to see if serialEnd flag is true if (SerialReadBuffer.startsWith("AT")) { // Check to see if a command has been sent if (SerialReadBuffer.startsWith("AT+B")) { // If it is a baud change command, delete it immediately SerialReadBuffer = ""; Serial.print("Denied: Changing HC12 Baud does not change Arduino Baudrate"); } HC12.print(SerialReadBuffer); // Send local command to remote HC12 before changing settings delay(100); // digitalWrite(HC12SetPin, LOW); // If true, enter command mode delay(100); // Delay before writing command HC12.print(SerialReadBuffer); // Send command to HC12 Serial.print(SerialReadBuffer); // Send command to serial delay(500); // Wait 0.5s for reply digitalWrite(HC12SetPin, HIGH); // Exit command / enter transparent mode delay(100); // Delay before proceeding } if (SerialReadBuffer.startsWith("GPS")) { HC12.print(SerialReadBuffer); GPS.listen(); GPSLocal = true; } HC12.print(SerialReadBuffer); // Send text to HC12 to be broadcast SerialReadBuffer = ""; // Clear buffer 2 serialEnd = false; // Reset serialEnd flag } if (HC12End) { // If HC12End flag is true if (HC12ReadBuffer.startsWith("AT")) { // Check to see if a command was received digitalWrite(HC12SetPin, LOW); // If true, enter command mode delay(40); // Delay before writing command HC12.print(HC12ReadBuffer); // Send incoming command back to HC12 Serial.println(HC12ReadBuffer); // Send command to serial delay(1000); // Wait 0.5s for reply digitalWrite(HC12SetPin, HIGH); // Exit command / enter transparent mode delay(80); // Delay before proceeding HC12.println("Remote Command Executed"); } if (HC12ReadBuffer.startsWith("GPS")) { GPS.listen(); HC12.print("Remote GPS Command Received"); GPSLocal = false; } Serial.print(HC12ReadBuffer); // Send message to screen HC12ReadBuffer = ""; // Empty Buffer HC12End = false; // Reset Flag } if (GPSEnd) { // Options include GPRMC, GPGGA, GPGLL, etc... if (GPSReadBuffer.startsWith("$GPGGA")) { // Look for target GPS sentence if (GPSLocal) { Serial.print("Local GPS:"); // Send to local serial port Serial.print(GPSReadBuffer); // Send local GPS } else { HC12.print("Remote GPS:"); // Local Arduino responds to remote request HC12.print(GPSReadBuffer); // Sends local GPS to remote } GPSReadBuffer = ""; // Delete target GPS sentence HC12.listen(); // Found target GPS sentence, start listening to HC12 again } else { GPSReadBuffer = ""; // Delete unwanted strings } GPSEnd = false; // Reset GPS } } Data that you collect can be converted into KML files for use in Google Maps using one of many free online converters. The above image shows variations in the logged GPS coordinates of a stationary object. The error is rather large, even for the low-cost setup used in this project—the GPS receiver sold by SparkFun, for example, claims to provide positional accuracy of 2.5 m CEP. It is likely that multipath interference made a significant contribution to the additional error. Real-Time GPS Tracking in Google Earth Now we will create a GPS tracker with the HC-12 and Google Earth Pro. Through experimentation, I found that tracking worked if at least the $GPGGA, $GPGSA, and $GPGLL strings were passed along to Google Earth. The program sends GPS data to a distant receiver to track objects from a distance. It gets all sentences at 9600 baud from the computer and sends only the $GPRMC, $GPGGA, and $GPGGL sentences at 4800 baud through the HC-12. To receive and transmit the information to the computer, a different HC-12/Arduino set-up would be required. /* HC12 Send/Receive Example Program 4 By Mark J. Hughes for AllAboutCircuits.com Connect HC12 "RXD" pin to Arduino Digital Pin 4 Connect HC12 "TXD" pin to Arduino Digital Pin 5 Connect HC12 "Set" pin to Arduino Digital Pin 6 Connect GPS "TXD" to Arduino Digital Pin 7 (Optional) Connect GPS "RXD" to Arduino Digital Pin 8 Do not power over USB. Per datasheet, power the HC12 with a supply of at least 100 mA current capability, and include a 22 uF - 1000 uF reservoir capacitor. Upload code to two Arduinos connected to two computers. Transceivers must be at least several meters apart to work in default mode. */ #include &let;SoftwareSerial.h> //--- Begin Pin Declarations ---// const byte HC12RxdPin = 4; // "RXD" Pin on HC12 const byte HC12TxdPin = 5; // "TXD" Pin on HC12 const byte HC12SetPin = 6; // "SET" Pin on HC12 const byte GPSTxdPin = 7; // "TXD" on GPS (if available) const byte GPSRxdPin = 8; // "RXD" on GPS //--- End Pin Declarations ---// //--- Begin variable declarations ---// char GPSbyteIn; // Temporary variable String GPSBuffer3 = ""; // Read/Write Buffer 3 -- GPS boolean debug = false; boolean HC12End = false; // Flag for End of HC12 String boolean GPSEnd = false; // Flag for End of GPS String boolean commandMode = false; // Send AT commands to remote receivers //--- End variable declarations ---// // Create Software Serial Ports for HC12 & GPS // Software Serial ports Rx and Tx are opposite the HC12 Rxd and Txd SoftwareSerial HC12(HC12TxdPin, HC12RxdPin); SoftwareSerial GPS(GPSRxdPin, GPSTxdPin); void setup() { buffer3.reserve(82); // Reserve 82 bytes for longest NMEA sentence pinMode(HC12SetPin, OUTPUT); // Output High for Transparent / Low for Command digitalWrite(HC12SetPin, HIGH); // Enter Transparent mode delay(80); // 80 ms delay before operation per datasheet HC12.begin(4800); // Open software serial port to HC12 GPS.begin(9600); // Open software serial port to GPS GPS.listen(); } void loop() { while (GPS.available()) { byteIn = GPS.read(); buffer3 += char(byteIn); if (byteIn == '\n') { GPSEnd = true; } } if (GPSEnd) { // GPRMC, GPVTG, GPGGA, GPGSA, GPGSV, GPGLL if (buffer3.startsWith("$GPRMC")||buffer3.startsWith("$GPGGA")||buffer3.startsWith("$GPGLL")) { HC12.print(buffer3); // Transmit RMC, GGA, and GLL sentences buffer3 = ""; // Clear buffer } else { buffer3 = ""; // Delete GSA, GSV, VTG sentences } GPSEnd = false; // Reset GPS flag } } Here are the steps you'll need to follow: Open Google Earth Select Tools -> GPS Select the Realtime tab and click Start. Google Earth will cycle through available serial ports looking for NMEA sentences. When NMEA data is found, it will provide a location on the map. Note: An Arduino (or any similar microcontroller) is not necessarily needed for this to function. Connecting an HC-12 directly to a GPS module, like the Adafruit logger shield, allows for programming to transmit specific sentences at 4800 baud. Information can be transmitted to Google Earth by connecting a separate HC-12 to a computer's serial port through a logic-level-to-RS232 converter. Conclusion This two-article series demonstrates that the HC-12 is a versatile and easy-to-use RF transceiver module. It is similar to the nRF24L01, but it offers the important advantage of longer range. The straightforward UART interface facilitates integration into a wide variety of systems—microcontrollers and PCs can directly communicate with the HC-12. As this article has shown, the HC-12 is a simple solution for logging GPS data and for real-time GPS tracking. Source: GPS Transmitter with the HC-12 Transceiver ### The Santa Cam! An Arduino PIR Motion-Activated Camera System The Santa Cam is sure to catch who is stealing your milk and cookies this holiday season! You can even use it for a photo booth this New Year's Eve! BOM: Arduino Uno DSLR camera with remote shutter jack 2.5mm TRS cable Rectifier diode Milk and cookies Why? You see, when I was little, my dad used to set up a video camera in the corner of the living room on Christmas Eve night, right near the milk and cookies. The next morning, after obnoxiously tearing through my presents, we would sit down and scroll through the footage to see if we caught anything. Lo and behold, Saint Nick walked right past the camera—but no shot of his face! Since my childhood, I have tried staying up time and time again to catch him, myself (he always comes right after I fall asleep)! This year, I figured I would beat the man at his own game! With just a few components and my handy-dandy DSLR, I found a great All About Circuits article and built the infamous "Santa Cam." I found my nearest spare Debra-head and strapped on the components and used her as a scarecrow (act natural, nothing to see here)! How? First, let's understand how my camera works. Yours may be different, so double check your manual before moving forward. My Canon EOS Rebel T3i has a 2.5mm TRS (tip, ring, sleeve) remote shutter jack. A common auxiliary TRS cable, like the one you plug your phone into to play music in your car, is a 3.5mm TRS cable. I had an extra one of those lying around but the connector was too big for my camera, so I bought a 3.5mm female–to–2.5mm male adapter. In a typical setup like mine, you can control the focus or shutter separately by shorting either of the corresponding leads to ground. On my cable, the tip (T) controls the shutter, the ring (R) controls the focus, and the sleeve (S) is ground. By shorting the tip or ring to the sleeve, we can activate one of the two functions. Read More:  PIR Motion-Activated Camera System ### How to Make a DIY ChalKaat CNC/Laser Cutter CNC/Laser cutters are invariable tools of modern day fabrication and there are a lot of open source DIY laser cutter projects that you can make. They are now being widely used in industrial applications at a more personal and mass consumer level. But the cutters today have an indirect interface involving external computers. I can explain this better with an example. Imagine you want to cut a leather bracelet for your arm. To do this with present laser cutters, you will have to first take the measurement of your wrist, make a CAD drawing, and only can you cut a shape. There are two problems here: Taking measurements is a boring and tedious process. The user doesn’t get the actual feel of the size and place of the final cut. For example, a 1cm radius circle will look different on different screens at different zoom levels. What if you could simplify this by placing your hand directly on the work piece and telling the system directly about measurements, using hand strokes? It removes the process of tedious measurement taking and CAD modeling. The system projects the tool path telling the user about the actual size to be cut and the actual position where cutting will happen. Chal-Kaat(meaning lets cut in Hindi) is an attempt to do exactly this. It’s a direct manipulation DIY laser cutter that’s aware of the strokes being drawn on the workpiece. Chalkaat is a pen stroke based UI for interacting with laser cutters. The users can express themselves by working directly on the workpiece. The camera on top tracks the strokes on paper. Different colored markers allow different commands to be executed. We built a laser cutter from ground up, with computer vision and mechanics to optimize the interface.  Required Materials   2W laser without driver($84) Laser driver($36) Laser heat sink and mount($4) Build your own Arduino it’s much cheaper (less than $5) Wireless programmer for Arduino($22.5) 2 Pololu stepper motor drivers ($12) At least 2 Stepper motors (got them from my 3D printer) Pico projector($110) USB HD Web Camera($68) Stainless steel rods (got them from local market for $4) 4 SK8 mounts ($8) 6 SC8UU bearings ($20) Belts (got them from my 3D printer) CPU fan for cooling laser($5) Cardboard base (got them from local market for $2) Glue (<$1) 12v-4amps and 6v-3amps power supply (got them from local market for $10) The total cost comes up to $390. You can reduce the cost of your DIY laser cutter further by salvaging components like motors, drivers, belts, bearings, and fans from old electronic gadgets. How Does it Work? As explained above, the ChalKaat project allows you to interact with your cutter and design your results on the work piece. This is how the system works: User places the object to be cut under the system or manually draws the dimensions using hand strokes. System scans the image, generates g-code, and projects the scanned image on the work piece. User can now use different colored markers(red and blue here) to translate and scale the projected image. After fixing the position and scale, the laser cutter will now cut out the work piece of that exact scale and position. This is achieved using a projector and an RGB camera. The RGB camera has two functions: It tracks the hand strokes by scanning the image. It tracks the markers for scaling and positioning. The projector, on the other hand, projects the scanned image on the material surface used for cutting. Read More:  How to Make a DIY ChalKaat CNC/Laser Cutter! ### DIY Arduino Tutorial: How to Automate Your Curtains This Arduino Curtain Automation project will let you automate your curtain blinds using just an Arduino and a stepper motor. I just moved to America pursuing my higher studies. Because my dorm is very dark, I wanted to brighten up my room when I wanted to. Since I would be there for only for a month, I couldn’t make anything too complicated. So I decided to make myself this DIY Arduino Curtain Automation system. Using regular curtain blinds, I could control the amount of light in the room and suit it according to my needs. The design for this Arduino Curtain Automation system is quite simple and there are two ways to activate the curtains: Using a sound sensor (mic) to control it using my claps (Step 2). Using buttons to move the shades of the curtain (Step 3). So let’s get started with our DIY Arduino Curtain Automation system, follow the simple instructions to replicate this project. Required Materials Arduino (I am using Arduino Nano to save space; in the picture, it’s attached to a shield for easy testing) Adafruit sound sensor (optional) Stepper motor +Darlington array driver 2-3 Buttons An LED for indication Jumper wires and breadboard How Does it Work? The working of this DIY Arduino Curtain Automation system is very simple. The Arduino takes input from either the sound sensor (mic) or buttons. It then correspondingly controls the stepper motor through the Darlington array driver for the motor. The stepper motor is attached to the control stick of the curtain blinds and thus on rotation, opens/closes the blinds. Interfacing the Stepper Motor The first step I did was testing the design for the Arduino curtain automation system. The motor is connected to the 4 wires of the driver as shown in the diagram. Depending on the direction of rotation for your curtain, you need to plug the driver accordingly Basically, the first button from the right will activate the motor to spin a particular degree (you can change in the code). Press the button 4 times and it will return to the original place since it will spin around 90 degrees during each press. The middle button will lock the circuit so that the first button cannot activate the motor. The LED will turn ON when the motor is locked. The final button will return the motor to the original place no matter where is it, at the time pressed. It’s still a simple program, hope you guys understand. You can find the code below. int pin[8]={2,3,4,5,6,7,8,9}; int steps[][4] = { {HIGH,HIGH,LOW,LOW}, {HIGH,LOW,LOW,HIGH}, {LOW,LOW,HIGH,HIGH}, {LOW,HIGH,HIGH,LOW}, } ; int numofroun=1; //Change accordingly to your needs int current=1; int type=3; int place=0; int lastLockState = LOW; long lastLockTime = 0; int LockState; int Lockreading; bool lock=true; int lastPauseState = LOW; long lastPauseTime = 0; int PauseState; int Pausereading; bool Pauseled=false; bool pause=false; int lastReturnState = LOW; long lastReturnTime = 0; int ReturnState; int Returnreading; void setup() { for (int num=0; num<5; num++) pinMode(pin[num],OUTPUT); for (int num=5; num<8; num++) pinMode(pin[num],INPUT); } void reset(){ for(int num=0;num<4;num++) digitalWrite(pin[num],LOW); } void stepper() { for (int num=0; num<4;num++) { digitalWrite(pin[num],steps[abs(type-current)][num]);} if(type==0) {++place;} if(type==3) {--place;} delay(2); } void button1() { Lockreading = digitalRead(pin[5]); if (Lockreading != lastLockState) { lastLockTime = millis(); } if ((millis() - lastLockTime) > 50) { if (Lockreading != LockState) { LockState = Lockreading; if (LockState == HIGH) { lock=false; if ((place!=1536*numofroun)&&(place!=1024*numofroun)&&(place!=512*numofroun)) {type=abs(type-3);} } } } lastLockState = Lockreading; } void button2() { Pausereading = digitalRead(pin[6]); if (Pausereading != lastPauseState) { lastPauseTime = millis(); } if ((millis() - lastPauseTime) > 50) { if (Pausereading != PauseState) { PauseState = Pausereading; if (PauseState == HIGH) { Pauseled=!Pauseled; pause=!pause; if (Pauseled) {digitalWrite(pin[4],HIGH);} if (!Pauseled) {digitalWrite(pin[4],LOW);} } } } lastPauseState = Pausereading; } void button3() { Returnreading = digitalRead(pin[7]); if (Returnreading != lastReturnState) { lastReturnTime = millis(); } if ((millis() - lastReturnTime) > 50) { if (Returnreading != ReturnState) { ReturnState = Returnreading; if (ReturnState == HIGH) { type=3; while (place>0) { for (int num=0; num<4;num++) { digitalWrite(pin[num],steps[3-current][num]);} --place; if (current==3) {current=0;} else ++current; delay(2); } reset(); } } } lastReturnState = Returnreading; } void loop() { if (lock==true) {button2();button3();} if (!pause) { if (lock==true) {button1();} if (lock==false) {stepper();} if ((place==2048)or(place==0)or(((place==1536*numofroun)or(place==1024*numofroun)or(place==512*numofroun))&&(type==3))) {lock=true;reset();} if (current==3) {current=0;} else ++current; } } Read More:  DIY Arduino Tutorial: How to Automate Your Curtains! ### Create a Christmas Light Show with Arduino The Christmas light show with Arduino is a project that controls a number of lights according to a song in sync with the music. It can be used to control stage lights and fog machines (that don’t have DMX) with a computer to achieve wonderful synchronization for performances on stage, which is not always possible with manual lighting control consoles. During last year’s holidays, I was watching videos of Christmas songs on Youtube and the video above of Christmas lights flashing according to the music caught my eye. So I wanted to make my own Christmas light show with Arduino. I was wondering how I would sync the lights according to a song and how I would send data in sync with a song. I got the idea to use MIDI signals when I was working with a song using sound editing software. I hacked the MIDI signals from the software (which was in sync with a song) and turned them into light control data. Required Materials An Arduino Uno 74HC595 IC (3 nos) (1 for each 8 channels) 8 channel relay board (3 nos) (1 for each 8 channels) 1μF capacitor How does it work? Controlling Lights in Sync with a Song Above is a screenshot of Studio One software (Digital Audio Workstation software) that I used for this project. The MIDI track in the DAW software is in sync with a song. I turned the notes from C3 to E6 (excluding sharp notes) on and off in the MIDI track to control the lights. I used ‘Hairless MIDI to serial bridge’ to send the MIDI signals to the Arduino and programmed it to turn specific relays on and off according to the notes received. Now the DAW software actually controls the lights according to the song’s rhythm. I did not use sharp notes (the black keys) because, if you have a real MIDI keyboard, you can program the lights with it. You can play a Glissando and control all the lights! Block Diagram: Christmas Light Show with Arduino The lights are connected to the relays on the relay boards. The three 74HC595’s are used to control the relays. Three bytes are used to store the light states in the program (on/off). The music software sends out the MIDI data which is received by the Arduino and sets the corresponding bit of one of the three bytes to 0 or 1. The three bytes are shifted out of the registers and then are latched on so the relays turn on/off. After all the bytes are sent and the process is finished, they are latched, which prevents the relays from turning on/off while shifting the data. Now get ready to build your own Christmas light show with Arduino! Read More:  Create a Christmas Light Show with Arduino ### Arduino Servo Catapult: DIY Catapult using Arduino Use an Arduino and a servo to shoot food to your cat! (Also works with other animals). Check out the video below to see how this Arduino Servo Catapult works. While maybe not the most practical application, this project will teach you the basics of servo motors and analog inputs, which can be implemented into more practical projects, like these: Give Your Camera Motion Tracking With Arduino Make a Line Follower Robot in 10 Minutes Create an Android Controlled Robot with Arduino Make a Simple RC Plane at Home Make a DIY Drone The Arduino Servo Catapult Required Materials Hardware: Arduino Uno w/ USB cable Computer with Arduino IDE Micro Servo Force Sensitive Resistor (FSR) Pushbutton 10k resistors (x2) Catapult Software: Arduino IDE How Does it Work? Before we get started with our arduino servo catapult, when using a motor, always use an external source to power your Arduino, do not draw power from a USB connection! Our Cat-a-pult uses an Arduino Uno with servo control and its analog input to read the FSR value which controls the servo. When we say that a servo starts in “the spot of zero,” we are referring to the servo’s neutral position. If you look at the diagram below, if a 1.5ms pulse width is applied to the control line, the servo will sit at its neutral position, which in this case is 90º. When the pulse width increases or decreases, the servo moves towards 180º (Increase) or 0º (Decrease). If you choose to describe the neutral position as 0º, your servo’s angular range would be from -90º to +90º. Our servo should move 90º (I said 110º in the video, oops!) We initialized our serial monitor so that we can read our FSR’s values and adjust our kitty-threshold accordingly. Once we’re satisfied with our threshold value, we can turn the servo to lock the CAT-apult by pressing our pushbutton. When the cat puts its weight on the FSR, the servo moves back to the neutral position and launches cat food into the feline’s face. Read More:   Arduino Servo Catapult: DIY Catapult using Arduino ### Arduino Wheelchair Project: Motorized Controller Mount This was an Arduino wheelchair project we developed for Principles and Practices of Assistive Technology (PPAT) in Fall 2016 at MIT. We made an Arduino-based motorized wheelchair controller mount for our client, Lisa. She lives at the Boston Home, a center for people with progressive neurological diseases, and has Multiple Sclerosis. With her old controller mount, she would often bump into sinks and tables because the controller was difficult to push out of the way and jutted out, preventing her from getting as close as she wanted. She wanted a method to move the mount out of the way easily so that she could access sinks and tables. Our solution was this Arduino wheelchair project, that is to create a motorized controller mount which uses a DC Gear Motor and a microcontroller (Arduino UNO) so that Lisa can move the mount with the push of a button. One button press moves the mount away from her, and another press moves it back in front of her. You can watch a video of our device in action below. We understand that this is not just a problem faced by Lisa alone. A large number of powered wheelchair users face this and similar problems all over the world. We created this Arduino wheelchair tutorial with open source designs for anyone who wants to replicate the project. You can find all the relevant documentation for this project on the Wiki page, including code and design files. In this tutorial, we will try to show you the steps for creating the same. According to Lisa, “it works just like I’d imagined.” Parts Required for this Arduino Wheelchair Project We ensured that the parts used for our Arduino wheelchair prototype were common and easily available. Here is a comprehensive list of all the parts with their specifications. 1” Aluminum 6061 Extruded Bar stock Scrap piece of steel sheet metal 1.1 – 1.2mm thick Cytron 12V 17RPM 194.4oz-in Spur Gearmotor Motor mount bracket Screws and nuts – multiple sizes set screw: 8-32 size and thread Heavy duty limit switch Arduino UNO(we used this as we had one lying around. You can use a smaller board such as Arduino Nano if you like) L293D motor driver IC LM2596 buck converter IC LM7805 voltage regulator IC Manufacturing the Mechanical Parts There are two mechanical parts that need to be manufactured for this Arduino wheelchair project. One out of steel sheet metal and another from the extruded aluminum bar. The CAD files for the two parts are available for download. Read More:  Arduino Wheelchair Project: Motorized Controller Mount ### Amazon Kitchen DRS The Project This project is a combination of the many smart fridges and pantry's of the past. The idea is to combine all of them while also introducing Amazon's DRS system through Alexa and the Echo products as a bonus feature. The process will be simple: As you put the item you purchased via Amazon Prime Pantry in your fridge, it will be scanned by an RFID tag scanner. This will detect an assigned UID, which will then correspond to a given ASIN. The ASIN will give details VIA web connection, such as weight, size, product name, etc. Once scanned, the item will then be put onto a shelf with a built in scale. It will keep in mind the item that is going on, then detect the weight change, and track a percent and amount of that given item left. These details will then go to an Amazon-hosted webpage where your Alexa can respond to simple questions, such as asking how much of an item is left, or asking Alexa to order something for you. She can also track expiration dates and give warnings. The system will not be solely based around Alexa, though. It can have a small LCD screen that will display the information, and will allow programming to reorder if a certain item drops below a pre-determined amount. Additionally, when you order a Pantry Box, it will include an RFID tag that you can scan to your pantry. This will assume that all of the items are full and ready to stock, and in turn saves time. What will make this system better than others? While there have been smart pantry systems in the past, many of them required too much user input, and many do not have the interconnections between the sensors that will be in this product. RFID smart pantrys only track what has been put in the fridge, not what is left; Scale based pantry's only track weight and require the user interface with it and record what was put in. As stated above, not only will this project fix those, but it will also interweave it into a service, this case is Amazon. Building the Project: Part 1, Materials: This is very vague because it can be done in many methods, this is just the method I chose to do. Arduino of choice (Preferably AVR over STM) MFRC522 RFID scanner and Tag ESP8266, source of internet connection. Load cell ( I recommend one over 20 kg load) HX711 (For load cell amplification) 5 Volt Power Supply Ethernet cable (If card) Breadboard for testing Wire Acrylic or plastic for scale Part 2, Libraries: Again, much of this is up to personal choice. I am using these because I found them first and they worked for me best. MFRC522 Library ENC28J60 Library (Mostly a drop in replacement for the Arduino Ethernet Library Wire Library, found in Arduino IDE SPI library, found in Arduino IDE HX711 Library ArduinoJSON library AmazonDRS Library WiFi101 Library Arduino ESP8266 Library, Secure Library To install the ones you do not have (HX711, ENC, MFRC) just unzip then install them into the Library Folder of where your IDE is installed. For the Ethernet you do NOT have to delete the Ethernet folder, instead, all you have to do is rename all "Ethernet.h" Libraries to "UIPEthernet.h" Update: Because of the library being used, this will only work with utilization of an ESP8266 module Part 3, Other Resources: Google Drive/Forms/Sheets Amazon API Developer PushingBox Arduino IDE Lots of time. Lots and Lots of time. Seriously though, I have put in 150+ hours over the past 4 weeks and it is no where near done, and half of those hours were from just simple wiring issues and code bugs that were not even relevant to the whole project. This is why I am bumping up there experience level. Along with time, patience. For obvious reasons. Google Developer/API Part 4, Wiring: I'll post a diagram later, but for now: RFID on UNO #1 ( I will refer to it as #1 for the rest of the writeup) RFID Arduino VCC 3.3 Volts--While it will work on 5V, IT IS HIGHLY ADVISED AGAINST RST Any digital lower than 10; I have it assigned to pin 9 GND Ground on Arduino, who would have guessed MISO PIN 12 on UNO, 50 on MEGA MOSI PIN 11 on UNO, 51 on MEGA SCK PIN 13 on UNO, 52 on MEGA SS PIN10, however this can be changed. IRQ Unassigned. Ground Also to Ground on Arduino #2 Serial Connections (WIRE) among Arduinos #1 and #2 UNO #1 MEGA Analog_A4 20 Analog_A5 21 Ground Ground Ethernet on UNO #2 (again, will refer to it as #2 for the whole thing) Updated: The Library being used does not work with Ethernet, instead it uses the ESP module. Similar to the HX711 below, wiring the ESP will be completely dependent on if you have a 3.3v power supply, or if you need a voltage divider. ETHERNET Arduino VCC 3.3 Volts--While it will work on 5V, IT IS HIGHLY ADVISED AGAINST RST Unassigned how I have it right now, I might add a reset function later GND Ground on Arduino, again MISO PIN 12 on UNO, 50 on MEGA MOSI PIN 11 on UNO, 51 on MEGA SCK PIN 13 on UNO, 52 on MEGA CS PIN10, Not sure yet if it can be changed. I haven't snooped that far CLOCKOUT Unassigned. INT Unassigned. WOL Unassigned. Ground Also to Ground on Arduino #1 HX711: I would check the datasheet you get it with, whether it is Amazon, Ebay, or anywhere else. Two of mine were marked incorrectly and did not work as planned. Trial and error will get you there! Read More:  Amazon Kitchen DRS   ### ESP8266 touchscreen WiFi light controller and clock A couple of months ago I picked up cheap WiFi-controlled LED bulbs (one among dozens of very similar devices), after seeing them at a friend’s place.  This turned out to be an excuse to play with the ESP8266, which has inspired several hacks. I was overall very happy with these bulbs: decent Android and iOS apps and, compared to fancier solutions (e.g., Philips Hue or Belkin WeMo), they do not require any proprietary base stations, and you can’t beat the price!  However, switching off the lights before falling asleep involved hunting for the phone, opening the app, and waiting for it to scan the network; not an ideal user experience.  I was actually missing our old X10 alarm clock controller (remember those?), so I decided to make one from scratch, because… why not? Although the X10 Powerhouse controller’s faux-wood styling and 7-segment LED had a certain… charm, I decided to go more modern and use a touchscreen.  I also designed a 3D printed enclosure with simple geometric shapes and used it as a further excuse to play with 3D print finishing techniques.  Here is the final result: Component selection. There are several boards with the ESP8266, most of them using the ESP-12 module. I decided to go with the SparkFun Thing (which directly incorporates the ESP chip), as it also includes a LiPo charge controller.  Perhaps overkill for battery backup, but nice to have.  If you do use the charge controller, then the price is very reasonable (e.g., an Adafruit ESP breakout and Micro-LiPo combo will cost about the same–although flash is 4x larger and the ESP-12 module is FCC-approved). Also, it’s a very nice board for experimentation and it’s become my go-to ESP board: nice header layout, and the easiest to program (tip: instead of fiddling with the DTR jumper on the Thing, just cut your DTR wire and insert a pin header pair: once esptool starts uploading, just pull the pin and.. done!). For More Details: ESP8266 touchscreen WiFi light controller and clock   ### Arduino-Based “Analog” Slow Cooker Controller I had two options: One required me to spend money. The other cost me nothing and gave me an opportunity to make something useful. To make a short story longer, I have an “analog” slow cooker (just a dial on the front) and I wanted the ability to set the cooking time and temperature. Now I could have just gone out and bought an appliance timer, which certainly would have done the job. But that wouldn’t have given me temperature control. I had a few bits lying around from other projects, so I decided to smash them together and see what happened. Since I would actually be using the slow cooker for its intended purpose, I really wasn’t concerned with being able to set the temperature to the exact tenth of a degree. Being able to select Warm/Low/Medium/High would be fine. Instead of modifying the slow cooker, I would just set the dial to High and control the AC power connection. Having played around with Adafruit’s SousViduino project a while back, I would use that as a starting point. There, I modified a wireless outlet remote control such that I could control it with two GPIO pins. This allowed for the actual mains power switching hardware to be completely isolated from the controller. I’ve used this trick several times to great effect. This time would be no different. With the AC power control figured out, I considered the User Interface. I opted for something simple. The Adafruit RGB LCD Shield would work well as it had both a display and buttons built in. Sure, I could have beat this project about the head and neck with “IoT”-this and “ESP8266”-that, but I was feeling lazy and just wanted a simple timer control. Of course, there’s nothing that says I won’t add some kind of wireless connectivity, but for now, local control is fine. For more Details: Arduino-Based “Analog” Slow Cooker Controller ### Arduino LCD Project for Measuring Distance with Ultrasonic Sensor In LESSON 18 you learned how to use an ultrasonic sensor to measure distance, and in LESSON 19 you learned how to connect an LCD to the arduino. In this lesson we will combine what you have learned to create a circuit for measuring distance, and displaying results on an LCD display. - See more at: http://www.toptechboy.com/arduino/lesson-20-arduino-lcd-project-for-measuring-distance-with-ultrasonic-sensor/#sthash.eWyq5823.dpuf You can use the schematic below to connect the circuit. If you did LESSON 19,  you should already have the LCD hooked up. For more info on connecting to the LCD, and how it works, review LESSON 19. This schematic is for the LCD in the Sparkfun Inventor Kit, or similar LCD. If you have a different LCD, you will have to determine the proper connections. There are some helps in LESSON 19. If you need the ultrasonic sensor, you can pick one up HERE. - See more at: http://www.toptechboy.com/arduino/lesson-20-arduino-lcd-project-for-measuring-distance-with-ultrasonic-sensor/#sthash.eWyq5823.dpuf Be very careful connecting the circuit. Check your work, and it helps to work with a Buddy. Have one person looking at the schematic, and one looking at the circuit. Sometimes it is easier to get it right working in pairs. Now the objective of this project is to measure distance using the ultrasonic sensor, and then display that value on the LCD display. You should have the skills you need from the earlier lessons. Try and do this project on your own, but if you get stuck, you can look at my code below. As always, don’t copy and paste my code, but it should be used as a guide to help you write yours if you get stuck. - See more at: http://www.toptechboy.com/arduino/lesson-20-arduino-lcd-project-for-measuring-distance-with-ultrasonic-sensor/#sthash.eWyq5823.dpuf For More Details:Arduino LCD Project for Measuring Distance with Ultrasonic Sensor ### Create A Giant Meter Using Arduino The Meter The whole idea of this project was to create a giant meter to show website response time almost like a speedometer would. The result is something that’s both fun to watch and provides a meaningful ‘heartbeat’ of current status. After several revisions and different designs along the way, I ended up with what you see here. Construction & Design The meter is carved using my CNC machine from 1/4” bi-color HDPE (12 inches square). This is a great material to cut signs or other carvings with because anything carved out is the alternate material color, so there’s no painting/masking/re-painting needed. The needle is cut from 1/8” orange acrylic which worked great for the speedometer theme. For mounting the micro servo, I designed a hole matching the shape of the outer plastic casing which the servo I chose had (see parts list for a link). I designed the whole thing using Inkscape and Easel, mainly because they are free and fairly easy to use. Check out my bill of materials if you are interested in using the same HDPE and acrylic. Electronics I decided to power the meter using the Arduino Uno microcontroller since it handles servo control really well. The Raspberry Pi would be another option, but I’ll detail the Arduino setup for now. My implementation also uses a few LED displays to display detailed metrics, but the servo is the main piece you need. Here’s a quick parts list: Arduino UNO micro servo motor (my design has a specific hole for this exact type, but can be modified) 2x Adafruit Quad Alphanumeric Display - Blue 0.54” (optional) Adafruit Bicolor LED Square Pixel Matrix (optional) misc jumper wires screws, scrap wood for test cuts, etc. For More Details: Create A Giant Meter Using Arduino   ### Arduino android projects for the evil genius Book Description Discover how to create cool Arduino devices that “talk” to Android smartphones and tablets! Arduino + Android Projects for the Evil Genius brings two popular open-source technologies together with a series of hands-on projects that marry the worlds of touch-screen devices and physical computing. The book covers the Android Open Application Development Kit and USB interface, showing you how to use it with the basic Arduino platform. Other projects demonstrate methods of communication between Android and Arduino—including sound, Bluetooth, and WiFi/Ethernet—that don’t require the ADK at all. From fun, inventive projects such as building a Geiger counter or Bluetooth-controlled Arduino robot, to practical home automation projects, the book contains something for everyone. Included is a beginner’s guide to programming the Arduino that will help those who are new to the platform start with a firm foundation. Author: Simon Monk Arduino + Android Projects for the Evil Genius - Demonstrates how to use the Android Open Accessory Development Kit (ADK) with the basic Arduino platform - Features self-contained projects that include an clear explanation of the theory as well as practical, - - step-by-step instructions thoroughly illustrated with drawings and photographs - Shows how to use Ethernet, Bluetooth, and short-range RF links to talk to Arduino - Reveals the author's own never-before-seen sound-based link for making the two devices communicate with audio tones - Provides the fundamental knowledge you need to create your own projects - Contains techniques that work with ANY Android device - Explains how to create practical, useful home automation devices and communicate with them by radio or Internet Everything for the Evil Genius! Bluetooth-Controlled Robot; Geiger Counter Using ADK; Light Show Using ADK; TV Remote Using ADK; Temperature Logger Using ADK; Home Automation Controller; Controlling Mains Devices; Smart Home Thermostat; RFID Door Lock; Power Consumption Meter; Delay Timer; Programming Primer Each fun, inexpensive, and slightly wicked Evil Genius project includes a detailed list of materials, sources for parts, schematics, and lots of clear, well-illustrated instructions for easy assembly. The larger workbook-style layout and convenient two-column format make following the step-by-step instructions a breeze. Table of Contents Part One: Android Peripherals 1. Bluetooth Robot 2. Android Geiger Counter 3. Android Light Show 4. TV Remote 5. Temperature Logger 6. Ultrasonic Range Finder Part Two: Home Automation 7. Home Automation Controller 8. Power Control 9. Smart Thermostat 10. RFID Door Lock 11. Signaling Flags 12. Delay Timer Download You can download this book from any of the following links. If any link is dead please feel free to leave a comment. Purchase E-Book Arduino android projects for the evil genius  Copyright Disclaimer This site does not store any files on its server. We only index and link to content provided by other sites. Please contact the content providers to delete copyright contents if any and email us, we'll remove relevant links or contents immediately. Purchase ArduinoAndroid ebook ### 9 Degrees of Freedom - IMU I'm working on a project that requires full orientation information, so I built an Inertial Measurement Unit from scratch. I really like the 9DOF IMU board that Sparkfun makes - the calibration code that comes with it is fantastic - but I wanted to redesign the board so that it could be made at a much lower price using a single-sided PCB mill. I think the electronics come out to about $20 for this project. All the code, schematics, and PCB milling files are up on github (click the cloud-shaped button to download). Here's what it does: PARTS LIST: Gyro: (x1) ITG-3200 3 Axis Gyro Component Distributors Inc ITG-3200 Sparkfun SEN-09793 Newark 37T8091 (x2) 4.7K resistor Digikey P4.7KECT-ND (x2) 0.1uF capacitor Digikey 1276-1017-1-ND (x1) 10nF capacitor Digikey 1276-1035-1-ND (x1) 2.2nF capacitor Digikey 1276-1288-1-ND Accelerometer/Magnetometer: (x1) LSM303 3 Axis Accelerometer/Magnetometer Digikey 497-13819-1-ND (x1) 10uF capacitor Digikey 1276-2876-1-ND (x1) 0.1uF capacitor Digikey 1276-1017-1-ND (x1) 4.7uF capacitor Digikey 587-2994-1-ND (x1) 0.22nF capacitor Digikey 1276-2759-1-ND AVR: (x1) Atmega328P Microcontroller Digikey ATMEGA328P-AURCT-ND (x1) 10K resistor Digikey P10KECT-ND (x1) tact switch Digikey SW262CT-ND (x2) 0.1uF capacitor Digikey 1276-1017-1-ND (x1) 8MHz resonator Digikey 535-10004-1-ND (x1) green LED (optional, but will help with debugging) Digikey 160-1404-1-ND (x1) 1K resistor (optional, but will help with debugging) Digikey P1.0KECT-ND Interface: (x1) 6 pin surface mount ISP header Mouser 649-95278-101A06LF (x1) 6 pin through hole FTDI header Mouser 571-3-644456-6 (I included two additional rows of through hole headers in my PCB to make mounting the board easier, in this case you will need 3 of the through hole 6 pin headers. This is optional) Power (x1) 10uF capacitor Digikey 1276-2876-1-ND (x1) 0.1uF capacitor Digikey 1276-1017-1-ND (x1) 1K resistor (optional, but will help with debugging) Digikey P1.0KECT-ND (x1) red LED (optional, but will help with debugging) Digikey 160-1405-1-ND Other: (x9) 0 Ohm resistor (jumpers) Digikey P0.0ECT-ND Milling: (x1) 10mil carbide endmill Carbide Depot CU 222737 (for the tiniest features on the board) (x1) 1/64" endmill Carbide Depot CU 129974 (for milling out most of the traces) (x1) 1/32" endmill Carbide Depot CU 129985 (for cutting out the board) (x1) FR-1 machinable single sided PCB blank Inventables 24201-02 I used a Roland Modela for the milling, though I believe this could be done on a Shopbot Desktop or similar machine as well. Other Supplies solder soldering iron heat gun flux pen tweezers multimeter 3.3V FTDI cable Digikey 768-1015-ND or board Sparkfun DEV-09873 (you may be able to use an Arduino as an FTDI connector, but I'm not sure this will work with the 8Mhz clock) ISP programmer (or use an Arduino or make your own - 6 pin connector and ribbon cable)   For more detail: 9 Degrees of Freedom - IMU   ### Cheap Arduino Controlled Light Sockets - Reverse Engineering RF Smart lightbulbs cost your firstborn child. Which is a shame, because smart lights unlock tremendous potential for home automation, energy savings, and all sorts of cool projects. If only there was a way to control your lights without breaking the bank... And now there is! For $19 on Amazon, you can get a 4-lightbulb kit from China that ordinarily is limited to 4 channels from a single remote...but with some creative hacking, can be used to control an unlimited number of channels using an arduino and a very simple RF module! Here's a video of them in action as part of our smart bathroom project (Instructable for that coming soon!): Think this is awesome? Don't forget to favorite it and follow us on Facebook! Time required: 1-2 hours Total Cost: $19 for four sockets ($5/socket), ~$20 for a transmitter You should know: How to program an Arduino (see here) The basics of using a Bus Pirate (see here) Materials: A 4-pack of Vktech Wireless Light Bulb Holders Arduino Uno or similar 315MHz RF Link Transmitter Tools: IC Clips/hooks Bus Pirate (we used the sparkfun version) Small Phillips screwdriver Computer with a micro USB cable A breadboard and spare wire (solid core is best) Step 1: Reading the EEPROM We'll start by cracking open one of these light sockets and reading its memory. Grab your screwdriver and remove the two phillips screws holding the housing together. The case should fall open and reveal the PCB inside. If you look around, you'll see a few capacitors, some diodes, a big box (the relay), a long IC (the microcontroller), a separate board tacked on (the RF receiver), and a little 8-DIP chip marked 24C04 - this is the EEPROM that stores the RF command to turn on the bulb. Let's take a closer look at what the memory chip holds, shall we? Using the bus pirate and the datasheet for the EEPROM chip, wire up a circuit like the one shown. You should have: Bus Pirate VCC -> chip VCC (and to VPU, the pullup pin of the Bus Pirate) Bus Pirate GND -> chip GND Bus Pirate SDA (MOSI, Orange for Sparkfun BPs) -> chip SDA Bus Pirate SCL (CLK, Yellow for Sparkfun BPs) -> chip SCL Bus Pirate VPU -> Bus Pirate VCC (the pullup I/O pins are driven from this pin) Next, let's run a script that will dump the EEPROM data to a file using the I2C circuit we just set up. Using the terminal or command line, navigate to the folder where you downloaded i2c_dump.py and run it as follows: It'll produce a .hex file showing the hex values of the data. Open up the .txt file. If it contains nothing but 0x00 or nothing but 0xFF, chances are you need to check your circuit and re-run the dump. If you see a few different values towards the start of the file and a bunch of 0x00's after, you have a successful hex dump! It's a good idea at this point to try dumping a couple of the other bulbs to see what values change in this code. Don't worry if the hex dumps don't make sense yet, but you should notice that only one specific value in them is changing. Hmmmm...   For more detail: Cheap Arduino Controlled Light Sockets - Reverse Engineering RF ### Build A Speech Controlled Quadropod Using Arduino This is my first post on Instructable and I am super excited to share my knowledge! My original robot post is here: Spryo SpoonTail which is just my robot showing some tricks but with a tethered control. In this Instructable I am going to show you how to make a quadrapod of your own and using speech recognition via Bluetooth to control your bot. Gotta thank Oddbot for introducing me to robotics and helping me on a lot of projects. I am gonna reference his Instructable in certain stages to make this one shorter (with his permission of course!). Step 1: Understanding The Project This project is not simple, in fact if you haven't worked with Arduino and python, this project would be quite challenging, but trust me the end product is completely worth it. Additionally, you will discover how simple and powerful both Arduino and python really are. It is worth mentioning that the main reason I am making this Instructable is to show that remote control via Bluetooth using speech recognition is quite possible and ain't that hard. Also if you already have a robot of your own or even an RC car you have hacked, you can use this tutorial just for the speech recognition - control part. Acknowledgements: Playful Puppy Robot by OddBot Speech Recognition with BitVoicer and Arduino by leandro4b Let's Make Robots Step 2: Getting Started Hardware Required: Dagu Quadbot Chassis Kit Dagu Spider Controller Mini USB Cable Jumper wires (loads of em) Bluetooth Module HC-06 Batteries (LiPo 7V-30V recommended) SRF05 Ultrasonic Sensor (optional) Bluetooth USB module (if your PC doesn't come with an inbuilt Bluetooth, like in my case) LEDs (come on who doesn't like LEDs on their projects, however it is optional)   Software Required: Arduino - programming the quadropod Python 3.4 - communication Eclipse or Geany - python interface Bitvoicer ($5) - speech recognition or Google Speech Recognition via python (free but involves more coding)   Skills Recommended: Arduino knowledge Python language Patience (a lot required) Note: I am not advertising anything here, I am just linking you the products that I have used for my project, you are free to use tools/software/products of your liking or even make some on your own (think 3D printing). Step 3: Chassis Assembly If you choose to use your own robot like an RC car, teddy bear or even a home automation device, feel free to skip this step. Remember Oddbot who I mentioned before? He's basically my virtual mentor. What you are going to do now is follow steps 1 to 7 from his Instructable - Playful Puppy Robot or you could use this PDF Manual to assemble to chassis of the quadrapod. That's it for this step. Step 4: Wiring Lets connect the servos first, they go in like this: Front Left Hip servo - pin 46 Front Right Hip servo - pin 52 Rear Left Hip servo - pin 28 Rear Right Hip servo - pin 13 Front Left Knee servo - pin 47 Front Right Knee servo - pin 53 Rear Left Knee servo - pin 29 Rear Right Knee servo - pin 12 Note: The servos can be connected to which ever pins you find convenient, you just have to change the code to correspond to that changed pin. Then the HC-06 Bluetooth module (figure 4): GND - GND VCC - +5V TXD - RX0 / D0 (Signal) RXD - TX0 / D1 (Signal) Figure 1: Shows the layout of the majestic DAGU Spider Board (note I drew the GND, 5V and Signal regions on the board for those of you who are slightly lazy to go through the manuals which I anyway really really recommend you to do). Figure 2: Shows the splendid HC 06 Bluetooth module which will be our "RC" for this project. For this specific project, we will only be using the module to receive messages. Figure 3: Wiring of the HC 06 to an Arduino UNO (in cause you just want to test it with an UNO or similar board for your specific project). Figure 4: Plugging the HC 06 module to the Spider Board (GND and VCC connections are upto you as long as they are in that same line). Figure 5: What it should kind of look like with everything plugged it (don't worry about the shinny two 'eyes' in the front part of my bot, its just for show, and the servo on the back is for controlling his tail but the tail broke :( will fix it soon).   For more detail: Build A Speech Controlled Quadropod Using Arduino   ### Daox's diy arduino thermal differential controller We have a great thread that contains lots of info on thermal differential controllers here. However, I wanted to start a thread dedicated to my own development of a thermal differential controller that I'll be using for my attic heat reclamation project. Tonight I setup a simple circuit that tested the operation of the differential controller and it worked great. Its very simple and adding features later on won't be a big deal at all. I am using the arduino since I know how to use it, its cheap, and it can do everything I'd ever want to be able to do with a thermal differential controller. The temperature sensors are LM35 sensors. They cost a bit more than the thermistors ($1.70 vs $.20) I had planned on using on the controller before, but they are much easier to use while programming and will probably give a better signal over long wire runs. The 120V relay I'm planning on using is a solid state relay (SSR) that the arduino can power directly. The 5V power supply is an old cell phone charger. As for the operation of the controller, for now its a very simple setup. When the temperature of the attic gets 3C/5.4F higher than the house, the relay kicks on whatever is connected to it. In my case right now, that is two bathroom vent fans. Once the temperature of the attic drops down below the temperature of the house, the relay powers down the fans. There is also a 30 second minimum on time just in case to prevent any odd start/stop situations. I'm also thinking about adding a LED that indicates that the fans are on, but I'm not sure if that'll be needed as you'll probably hear the air rushing out of the vent. Parts List: Here is a parts list of what you'll need. I've linked to a few places where I've bought things from before. Arduino - your choice in what one to use, there are many 5V power supply (cell phone charger) - probably have one of these laying around AC solid state relay - can use other forms of relay, solid state relays just work well/easy with the Arduino and doesn't require the diode in the schematic (2) LM35 Temperature sensors telephone wire - make sure to get enough to put both temperature sensors where you need them The total for these items comes to ~$40 plus shipping which shouldn't be too bad. It can definitely be done cheaper if you go with a cheaper arduino or find parts to use. Arduino program code Code: /* Thermal Differential Controller The program monitors two temperature sensors and activates a relay when one sensor is warmer than the other. */ int SsensorPin = 4; // the pin to input attic temperature int TsensorPin = 5; // the pin to input kitchen temperature int RelayPin = 2; // the pin to operate the relay int ledPin = 13; // led pin (verify fan on condition) int Ssensor = 0; // variable to store the value of the attic temperature int SensorDiff = 0; // variable to store the Ssensor value plus differential (Diff) int Tsensor = 0; // variable to store the value of the kitchen temperature int Diff = 3.0; // temperature difference that must exist between attic and kitchen before relay enables (degrees C) void setup() { pinMode(SsensorPin, INPUT); pinMode(TsensorPin, INPUT); pinMode(RelayPin, OUTPUT); pinMode(ledPin, OUTPUT); // Serial.begin(9600); digitalWrite(RelayPin, LOW); } void loop() { // read sensor inputs and assign to variables Ssensor = analogRead(SsensorPin) / 2; Tsensor = analogRead(TsensorPin) / 2; // add temperature difference to Ssensor value SensorDiff = Ssensor - Diff; // send temperature signals back to computer /* Serial.print(Ssensor); Serial.print(", "); Serial.print(Tsensor); Serial.print(", "); Serial.println(SensorDiff); delay(1000); */ // if attic is warmer than kitchen sensor, enable relay if (SensorDiff > Tsensor && Tsensor < 27) { digitalWrite(RelayPin, HIGH); digitalWrite(ledPin, HIGH); delay(1000); } // if attic sensor is cooler than kitchen sensor, disable relay if (Ssensor < Tsensor || Tsensor > 27 ) { digitalWrite(RelayPin, LOW); digitalWrite(ledPin, LOW); delay(1000); } }   For more detail: Daox's diy arduino thermal differential controller ### DIY Thermal Differential Controller – Part 4: Building Your Own In our last episode, I explained how I redesigned the controller from what I first thought I was going to do. Now, I am going to explain how to make your own thermal differential controller based on mine. As it is, this setup will only control an AC load, but it would be fairly simple to convert it to run a DC load. Here is the list of parts you’ll need. I’ve added links to where I like to get parts from. Arduino – There are many forms of Arduinos out there. I like the kits from ModernDevice.com since you save some money not having things assembled for you. 5V power supply – If you have a spare cell phone charger or wall wart laying around it’ll probably work fine, just make sure its 5 to 12V. AC solid state relay – This will keep wiring a bit simpler. You can use a mechanical relay, but you would need to add a diode to protect the Arduino and you might need to add a transistor to help power it. LM35 temperature sensors – You’ll need two of these. 10uf capacitor – You can probably go with a bit larger or smaller capacitor here. I recommend finding one of similar capacity in some broken electronics component laying around the house if possible. That is what I did. If you have a long wire run to each temperature sensor, you may need a capacitor on both lines. Telephone wire (4 conductor) – This will be used for wiring the temperature sensors. Now that we have all the components, the circuit diagram is quite simple. Since it is so simple, to wire things up, I simply used some connectors on the arduino and ran wires to each component. That way there is no need for a bread board or shield. Lastly, we need the code for the Arduino. If you haven’t yet, go to the Arduino website and download the Arduino development software. This is required to upload the program to the Arduino. Now, go ahead and download the code for the thermal differential controller. Using the code should be pretty straight forward. I commented pretty throughly. To change the temperature differential to turn the load on, simply plug in a new number into the “int OnDiff =” line. By default its set to 3 degrees Celsius. The differential to control when to turn the load off is controlled likewise by “OffDiff”. There is an LED pin programmed to verify the load on/off status if you want to use it. There is also serial output for the two sensors if you want to uncomment it and datalog the temperatures.   For more detail: DIY Thermal Differential Controller – Part 4: Building Your Own ### The LCDuino-1 I/O processor News - April 25, 2010: All future announcements and updates for the LCDuino-1 and related app modules (δ1 relay-based attenuator, δ2 relay-based input/output selector, and others) have moved to the new AMB DIY audio forum. We have an entire forum category dedicated to the LCDuino system, with separate sub-forums for each module. LinuxWorks and I will focus our support of these projects there. Introduction Ever since I built my β24 power amplifier, I've been wanting to build a high-end pre-amp to match. However, rather than using ordinary rotary switches for input/output selection, and a conventional potentiometer or stepped attenuator based on a mechanical switch for volume, I wanted to do something better. There are off-the-shelf solutions available for relay-based selectors, relay-based, chip-based or motorized pot volume controls, etc., but virtually all of them are designed for a singular purpose, some are operable with a remote control, some not. Some have a display for status, some don't. It would be nice to have all of those features, yet implement it in an extensible manner such that more capabilities could be added without wholesale redesign, and to allow a builder to tailor the system to suit his/her exact needs. Many of you may have noticed the recent Arduino-based LCD driver circuits that linuxworks built on perfboards, controlling a myriad of devices such as the input/output selector and volume control for his β22, a S/PDIF input selector, and even an Espresso machine monitor/controller. Many months ago we began exploring the idea about turning the basic concept into a generic, extensible and modular platform, usable for many applications not only for audio, but other devices too. Arduino is attractive because of the rich set of tools, libraries, code and support available for firmware development. It uses the C programming language and the GNU C compiler (gcc) in a nice graphical integrated development environment. The environment runs on Linux, Windows and MacOS X. There is also a large and active Arduino programmer and user community where Open Source is de rigeur. In all it's a very exciting and dynamic scene and fits perfectly with the spirit of our project and goals. The LCDuino-1 The first result of this collaboration is the LCDuino-1 I/O processor, which will serve as the "heart" of the entire framework. LCDuino-1 is basically an LCD driver circuit based on a customized Arduino platform with some extra features. This board has two 6P pin headers which will mate up with matching receptacles on an industry-standard 2 row x 16 characters LCD module (80mm x 36mm, parallel interface, 5V DC, low-power backlighting). These LCD modules are available in various colors and backlighting, transmissive or transflective. Here are some examples of usable LCD modules. The LCDuino-1 has the same form-factor as the LCD module, with matching screw hole locations. When mated together, they become a two-board "sandwich" that is easily mounted to an enclosure's front panel. LCDuino-1's slim profile allows the assembly to fit in a 1U rack case. Off-the-shelf front bezels are available for these LCD modules. Depending on the nature of the application, the LCD display would show the current input/output selection, a volume control bargraph, the date and time (see below), or some other information as appropriate. It is worth noting that the LCD module is actually optional, LCDuino-1 could function without one. There may be applications where no display is required, yet LCDuino-1 could still serve as the control center. The main component on LCDuino-1 is the Atmel ATMEGA328P microcontroller. See the datasheet for chip features, you'll notice that amongst other features, this microcontroller offers many digital and analog I/O ports, I²C serial bus support and serial UART for program download, making it very versatile as a monitor and controller for devices. The microcontroller is clocked by a 16MHz ceramic resonator, and has an onboard pushbutton reset switch should the need arise. On the LCDuino-1, the I²C bus is connected to an onboard MCP23008 port expander chip, which gives us 8 more I/O ports. Six of these ports are used for controlling the LCD module. This means that we only consume 2 of the microcontroller's ports to operate the LCD module (plus one more port for the backlight). The I²C bus can be extended offboard to other devices (see "Application modules" below). An optional real-time clock chip DS1302 may be populated (clocked with a 32.768KHz crystal and could be backed up with an optional 0.022 Farad supercapacitor). This allows the LCD display to double as a date/time clock. The real-time clock option consumes three of the microcontroller's ports. A 3P pin header is provided to connect a Vishay TSOP34838 infrared receiver for remote control purposes. The infrared receiver's output uses up one microcontroller port. The module should be mounted on the enclosure's front panel.   For more detail: The LCDuino-1 I/O processor   ### Fun With The Arduino Esplora: A Digital Picture Frame With this article I kick off my series on the Arduino Esplora board. Today's project is a nice (and cheap!) little digital picture frame that uses the Esplora's TFT Screen add-on. Materials Needed In this section you will find the materials that you need to obtain to build this project. Arduino Esplora Board The Arduino Esplora is the most feature rich of all the Arduino boards. It has the shape of a game controller, which makes it the coolest looking. The Esplora board includes joystick, directional buttons, slider, RGB LED, temperature sensor. microphone, buzzer and accelerometer, all on-board, so it can work for lots of different projects. A screen is sold separately. The official price for this board is currently $59.99 USD. The Chinese electronics stores on Ebay sell clones for much less, but you'll have to wait several weeks for it to arrive. Links: Amazon, TFT Screen The second component that you need is the Arduino TFT screen. This is a small 160x128 pixel 16-bit color display that plugs into a socket on the Esplora board. This screen also includes a micro-SD card slot that will give the Arduino board the ability to read and write files to SD cards. The original Arduino brand of this screen costs $25, but it has been out of stock for a while. There are many clones on Amazon and Ebay that sell for the same or lower price. Links: Amazon, Note: when you buy the screen make sure it is the kind that plugs into the Arduino Esplora, as there are other very similar screens that have different connectors. Power Cable To power the Arduino Esplora you need a mini-USB cable, the kind that many smartphones use these days to charge: Hardware Setup The hardware preparations are really simple. The TFT screen plugs into the front socket of the Arduino Esplora. After you connect it you can power the board by connecting it to your computer using the USB cable. If you are using a Windows PC you need to install drivers for your Arduino board. The process is explained in the Arduino documentation. If you are using Windows 8 there is an additional complication because the Arduino drivers aren't signed by Microsoft and this version of Windows does not accept drivers that are not signed. The process to bypass the signed driver requirement is described in detail in this page. Users of Linux and Mac OS X do not need to install any drivers. Software Installation Now it is time to install the Arduino Software. This software contains the tools to write and upload programs to your Arduino board. Make sure you install version 1.0.5 or newer. With the Arduino board connected, launch the Arduino software. In the Tools menu open the Board submenu and make sure you select the Arduino Esplora from the list. Then in the Port submenu you have to select the serial port entry that corresponds to your board. On Windows this is going to be something like COM, on Mac OS X /dev/tty.usbmodem and on Linux /dev/ttyACM. A First Arduino Program The large white area in the Arduino software is where programs are entered. Type (or copy/paste) the following C++ program there: void setup() { Serial.begin(9600); pinMode(13, OUTPUT); } void loop() { Serial.println("Hello, world!"); digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(500); } The setup() and loop() blocks are called functions. These two functions are present in all Arduino programs. The setup() function contains instructions that initialize the Arduino. In the above example the serial port is initialized to run at 9600 bauds, and pin 13 is initialized as an output pin. The loop() function contains the body of the program. This function is called over and over. In the example the function prints the message "Hello, world!" to the serial port, then gives power to pin 13, which on most Arduino boards turns an on-board LED on. The delay() function waits for the number of milliseconds given as argument, in this case half a second. After the delay the LED is turned off by removing power from pin 13, and then another wait of half a second is done. The cycle then repeats. To upload and execute this program in your Esplora board press the "Upload" button in the toolbar (second button from the left). The text written to the serial port is sent over the USB cable to your computer. You can view it by opening the Serial Monitor, the button at the far right of the toolbar. If you don't see the greeting printing once per second then make sure the baud selection in the Serial Monitor is set to 9600 to match the program. Controlling the Screen The TFT screen is controlled with the help of the TFT and SPI libraries that come with the Arduino software. Libraries contain utility functions that are generic and can be used by many programs. The following Arduino program makes the screen alternate colors between black and white: #include #include bool black = false; void setup() { EsploraTFT.begin(); } void loop() { if (black) { EsploraTFT.background(255, 255, 255); black = false; } else { EsploraTFT.background(0, 0, 0); black = true; } delay(1000); } The #include statements at the start of the program import the two libraries that are required to control the screen. The EsploraTFT object represents the screen. In the setup() function its begin() method is invoked to initialize the display. Then in loop() the background() method is called to change the color. The three arguments to background() are the red, green, blue components of the color, each a value from 0 to 255. The black variable declared near the top is used to alternate the colors each time loop() executes. For this project images will be displayed on the screen. To have the most flexibility I have decided to write my own image drawing function, so the individual pixels need to be set one by one to the correct color, using the drawPixel() method. As an introductory example to pixel drawing, the following Arduino program draws a horizontal red line in the middle of the screen: #include #include void setup() { EsploraTFT.begin(); EsploraTFT.background(0, 0, 0); } void loop() { int width = EsploraTFT.width(); int height = EsploraTFT.height(); int row = height / 2; for (int col = 0; col < width; col++) EsploraTFT.drawPixel(col, row, 0x00F8); } This program sets the background color of the screen in the setup() function. In loop() it obtains the dimensions of the screen in pixels and then uses a for-loop to draw the line of pixels. The drawPixel() method takes three arguments. The first two are the column and row for the pixel to draw. The third argument is the color, which for this method is not given as three numbers for red, green and blue. Instead, the color is given as a single number in the internal 16-bit representation of the screen. The red and blue channels use 5 bits each, while the green channel uses 6 bits. The representation is as follows: For example, the color red, which is represented in 24-bit RGB notation as red=255, green=0 and blue=0 is represented as the 16-bit binary number 0000 0000 1111 1000, or 0x00F8 in hexadecimal. A 50% red color would be 0000 0000 1000 0000, or 0x0080. If this seems like an arbitrary representation consider that the Arduino has a little-endian CPU, so the two bytes are reversed when stored in memory. And now the five red bits appear first, followed by the six green bits and then the five blue bits. Image Processing with Python If you search for other picture slideshows for the Arduino you will find that most, if not all, read the images in BMP format from a memory card installed in the SD slot in the back of the LCD screen. This requires you to convert the images, which you probably have as high resolution JPGs to 160x128 BMPs. For this project I've decided to take a completely different approach. Instead of using the SD card as storage I take advantage of the serial connection between the Arduino and the computer. The Esplora acts as a server, it waits for the computer to send pictures to display over the serial port. The following Python script runs on the computer connected to the Arduino and accomplishes the task of loading an image, scaling it to 160x128 while preserving the aspect ratio and finally sending it one pixel at a time over the serial port: from serial import Serial from PIL import Image def upload_image(filename, screen_size, serial): img = Image.open(filename) img.thumbnail(screen_size, Image.ANTIALIAS) img_data = img.getdata() # center image on display top_margin = (screen_size[1] - img.size[1]) / 2 bottom_margin = screen_size[1] - img.size[1] - top_margin left_margin = (screen_size[0] - img.size[0]) / 2 right_margin = screen_size[0] - img.size[0] - left_margin # send image data over serial port serial.write('I') for row in range(top_margin): for col in range(screen_size[0]): serial.write('\x00\x00') i = 0 for row in range(img.size[1]): for col in range(left_margin): serial.write('\x00\x00') for col in range(img.size[0]): red = img_data[i][0] >> 3 green = img_data[i][1] >> 2 blue = img_data[i][2] >> 3 serial.write('%c%c' % ((((green & 0x03) << 5) | red), (blue << 3) | (green >> 3))) i = i + 1 for col in range(left_margin): serial.write('\x00\x00') for row in range(bottom_margin): for col in range(screen_size[0]): serial.write('\x00\x00') serial = Serial('/dev/ttyACM0') # <--- enter your own serial port here upload_image('santi.jpg', (160, 128), serial) # <--- enter a path to a jpg image here To run this program you need a Python interpreter and the pyserial and pillow packages. If you have pip installed on your system then you can install these packages as follows: $ pip install pyserial pillow Some Python distributions come with easy_install instead: $ easy_install pyserial pillow The upload_image function opens the image file given as the first argument and scales it down to the dimensions of the screen, given as a second argument. This is all done using the Image class from pillow. The img_data variable holds an array of pixels for the resized image, which each pixel represented by a 3-element tuple. The resized image may not fit exactly in the screen due to its aspect ratio, so the function then computes the margins to center the image. Finally, the function converts each pixel to the 16-bit format used by the Arduino TFT screen and sends each as two bytes over the serial connection, given as third argument to the function. The character I is sent before the image data, to inform the Esplora that an image is coming. It is always a good idea to leave room for expansion in any communication protocol, so by adding a one byte prefix new commands can be added later. The data sent over the serial port matches exactly the size of the screen, so the margins that were calculated before are used to generate black pixels that complete the picture. Copy/paste the script above and write it as file upload_img.py, as you will be able to use it soon. Receiving and Displaying Images The Arduino program that receives and displays images sent by the Python script is shown below: #include #include unsigned short *line = 0; void setup() { EsploraTFT.begin(); EsploraTFT.background(0,0,0); Serial.begin(115200); line = new unsigned short[EsploraTFT.width()]; } void loop() { if (Serial.available() > 0) { char cmd = Serial.read(); switch (cmd) { case 'I': // image for (int row = 0; row < EsploraTFT.height(); row++) { bytes = EsploraTFT.width() * 2; char* p = (char*)line; while (bytes > 0) { int n = Serial.readBytes(p, bytes); if (n == 0) { // timeout return; } p += n; bytes -= n; } for (int col = 0; col < EsploraTFT.width(); col++) EsploraTFT.drawPixel(col, row, line[col]); } } } } This program initializes the screen with black background and sets the speed of the serial port at the maximum, which is 115200 bps. A buffer that is big enough to hold an entire line is also allocated during initialization. In loop() the program waits until the is serial data available, and then reads one byte. If it is the I byte then it gets into a for-loop that iterates over all the rows in the image. For each row it reads the entire line of 16-bit pixels into a buffer. Once the entire line is stored an inner loop that iterates on the columns draws the pixels using drawPixel(). Why read all the pixels in a row before drawing them? Because it is more efficient to issue large reads. Reading pixels one by one and drawing them is slower because the cost of issuing a read does not scale directly to the size of the read, each read has a fixed cost associated with it, so the least amount of reads the more efficient the program will be. Why read a line using a while loop? Because the serial port in the Arduino has a buffer of only 64 bytes, so a single read would never return more than that amount. An entire line has 160 pixels, which at 2 bytes per pixel make it a 320 byte buffer. Copy/paste the above program into the Arduino software and upload it to your Esplora. Once the screen turns black the board is waiting for images sent from the computer. Now you can run the Python script to send an image over, but first make sure you edit the bottom two lines to use the correct serial port number for your board and the path to a JPG image that you want to use: $ python upload_img.py And voila! You should now be seeing the image displayed on the Esplora screen. Some Improvements I have a more robust version of the code presented above in a GitHub project: View the project on GitHub. Download the project as a zip file. The Arduino side is called server.ino, and has been expanded to also support other Arduino boards besides the Esplora. If you connect the LCD screen to a different Arduino then you can run this program by removing the IS_ESPLORA definition at the top and setting the correct pin constants where the TFT object is initialized. If you recall, images are prepended with an I character in the serial communication. This version of the Arduino program accepts a second command, prefixed with the letter C for "connect". When the client sends this command the Arduino responds by writing the width and height of the screen to the serial port. This is useful to make the client software independent of the hardware. If one day you install a larger screen then the client will not need to change, since the picture dimensions are discovered from the communication with the device. The Python script, called client.py is given a folder in the command line arguments. During start up the script searches the folder and all its sub-folders for jpeg pictures. Random images found in this folder are uploaded periodically to the Arduino board, making it into a slideshow. The supported command line arguments are shown below: $ ./client.py --help usage: client.py [-h] --port PORT [--folder FOLDER] [--interval INTERVAL] Send pictures to the Arduino based digital picture frame. optional arguments: -h, --help show this help message and exit --port PORT, -P PORT serial port number, starting from zero. --folder FOLDER, -f FOLDER picture folder (default: current directory). --interval INTERVAL, -i INTERVAL interval between pictures (default: 10 seconds). --baudrate BPS, -b BPS serial port baud rate (default: 115200 seconds). Below is a screenshot of the TFT screen connected to an Arduino Uno.   For more detail: Fun With The Arduino Esplora: A Digital Picture Frame ### Make a swimming Robo-Snake Using Arduino Sneel is the name of my snake / eel swimming robot. This is documentation of hardware, software and mechanical design of  Sneel_003. urethane flex tubing, microcontrollers, Zigbee wireless radio, hose clamps, wires, servo motors, titanium servo brackets, silicon, marine grease, epoxy, pond pump Sneel is a swimming robotic water-snake, constructed to explore lifelike, sinuous motion in an aquatic robot. It is designed to navigate unknown territory and extreme terrain. Sneel is inspired by Protei, (protei.org), an international project for the design of a fleet of open source, robotic, unmanned sailboats. Sneel is a development of Protei_007. Sneel_003 swimming in San Francisco, California, Spreckles Lake, Golden Gate Park: Sneel is an open-source, biomimetic, locomotive, aquatic robot. The electromechanical design of Sneel mimics the structure and motion of a real water snake, as a test to explore swimming behavior in an undulating linear robot. The inspiration for Sneel originates from a fascination with reptilian forms of motility and the implications of modelling hardware from biological structures and functions. Sneel uses a custom-written software library to propagate an oscillating wave down a line of servo motors that comprise the robot’s body. The current model is a platform for the development of other low-cost snake drones, with semi-autonomous navigational control for waypoint following, and sensing capabilities for obstacle avoidance. Worldwide applications for Sneel include remote marine data collection of salinity / toxicity levels, nuclear level monitoring, pipeline or underwater exploration, fishery monitoring, and oil-collection. Sneel version 2 swimming like a real snake: Step 1: Bill of Materials Mechanical hardware: 5x Lynxmotion servo brackets 5x Lynxmotion C-brackets 5x injection molded servo hinge urethane dust collection tube, 5' x 2.5" convoluted hose clamp 5/16" tubing 5/16" hose clamp 2x shop vac 2.5 to 1.25" vacuum reducer 5x servo bracketshttp://www.seeedstudio.com/depot/bracket-for-rb421-servo-p-939.html?cPath=0 urethane sealant marine grease marine epoxy sealant o rings carbon fiber 3x (1/32", 1"x12" strips) rubber about 1/8" thick, 2"x10" at least, like this neoprene works well loctite (green) nylon string as a tether optional:  inner tube or valve for positive pressurizing with a bike pump silica gel packs electronics: 10 Servo motors (I recommend these Hitec ones with Karbonite gears but these are a bit pricy. Whatever you get, the nylon gears will ear out quickly so I warn against them) 3 6V NiMh battery packs Arduino UNO 1 seeeduino mega Xbee explorer 2x xbee series 1 xbee wireless shield servo motor shield servo extension wire xbee breakout + 2 rows of 10 male header pins + 2 rows of xbee 2mm female headerssupplies: wires needlenose pliers angle snips wire strippers small screwdriver 4-40 screws, lock or toothed nuts, and bolts 2-56 screws, lock or toothed nuts, and bolts solder iron + solder hack saw drill or drill press 3 mm drill bit optional:  dremel Step 2: Waterproof the servo motors See this instructables I made about waterproofing servo motors. But briefly: -apply silicon marine sealant around the two seams in the plastic of the servos, around the spot where the wires are inserted, and  where the screws are mounted on the bottom. -Let the motors dry for 24 hours...-Unscrew the servo horn (the round plastic top of the servo motor). -Apply petroleum or marine grease around the toothed shaft, and slip an o-ring around the shaft. -Put back on the round servo horn. Make sure it is centered (turn it one direction and make sure that it rotates about 90 degrees from center one direction and 90 degrees the other direction). -Screw back on the circular plastic servo horn. Step 3: Prepare the frame: cut the carbon fiber With a hacksaw, cut the carbon fiber into 4 inch pieces (each 12" x1" strip should be cut in 3 parts). I used a dremel to round the jaggedy corners. -Lay out one of each servo bracket 3 inches apart. Mark on the carbon fiber where the two large holes in the brackets line up, so you can drill here to screw them into the carbon fiber. -Drill the 4 holes in each piece of the carbon fiber using a 3 mm drill bit, or around that size. -Do this with 7x 4" pieces. Step 4: Prepare the frame: attach the brackets to the carbon fiber Using the fat screws that came with both brackets, line up the holes you cut with the holes in the brackets. -Screw in the screws to attach the carbon to the brackets. Make sure you screw with the bolt on the backside of the brackets as shown in the photo. Step 5: Prepare the frame: attach the c-brackets -Line up the rubber with the c-bracket middle section (see image) and cut 5 pieces. They will be about 1" x 2"-Line up the cut piece of rubber with one of the c-brackets, and draw a dot on the rubber where two of the holes line up. -Use a pin to poke a hole in the rubber at the two hole-marks. -Insert the 2-56 screws from the black clamp, through the rubber (pop it or screw it through), then through the red bracket. -Do this for every black/red bracket pair. NOTE: from the image, I did things in a slightly different order than described above - you can see my servo is already attached to the servo bracket. This made it significantly more difficult to screw in the two screws here. Also, I ended up getting 1/2 inch screws but at first I was using 1 inch screws and had to grind or cut off the excess. Step 6: Prepare the frame: Mount the servos on the brackets In the package with the servos, there are a few parts. Grab the small rectangle cube. -Insert this into all four of the holes on the servo motor. Note that the rubber has a flat side. This side should be facing outwards. -on 5 of the servos, adhere the injection molded joint (unless you have c-brackets with bearings in the bottom) -Place the servo in the bracket as shown - the servos with the injected molded joint go on the black servo bracket. -Screw in the 4x40 screws. Place a lock nut on the bottom and screw in the bolt. Step 7: Prepare the frame: Mount the c-bracket pairs to the servo brackets Mount the red servo-brackets to the red c-brackets, and the black to the black: RED: Slip the c bracket over the servo horn and under the servo bracket, as shown in the photo. Use the screw and bearing to secure it in place. BLACK: Slip the c bracket over the servo covering most of its body. Slip it over the servo horn and under the servo bracket. Make sure that the top side on the servo horn is the side with one large hole and four small holes. The injected molded segment on the bottom should pop into place in the small hole. Now you should have a full length snake like structure. Step 8: Screw in the servo horn to the bracket line the holes up with the brackets and the servo horn. -Make sure that your horn is centered (you can spin it in one direction and the other direction, then bring it about halfway back turned, to the center position, so if you put your bracket on aligned straight with the servo it will be calibrated to center position. -use a small screwdriver to screw the bracket and the round plastic servo horn together. I like to pinch them together with pliers to make sure holes line up. The brackets and servos should rotate freely. You should apply some grease between the two metal brackets if there is friction. You can also apply loctite to some of the screws so that they dont come out. Make sure not to do this before you are certain you are finished, because it is very hard to undo the screw once you've applied loctite. Also, the green loctite is a little less permanent. At this point, your snake body is ready! Step 9: Make the circuit Prepare the xbee breakout board (solder on the 2 rows of male headers and 2 rows of 2mm xbee female headers) -Insert the xbee onto it. -I'm using a servo motor shield from seeed studios, but I am sort of just using it as a perf board, but a convenient one because all the ground and power pins to my servo motor are already jumped together, with a screw terminal for the battery input. And ignore those wires hanging off the board - I had previously soldered on female header pins for another use of the board, so I removed them so I could use this here. I eventually clipped them off but you can see them in the pics. -So if you have the servo shield, solder on the screw terminal; two rows of headers  where the 6V and GND from the battery are connected. Solder on male headers so it will mount in your seeeduino (or Arduino) mega. I'm using the seeeduino again because i had it around, and because it is smaller so it fits better into the skin tube  (the protective outer layer). Note: an Arduino mega is necessary not because of the numbers of outputs but because the flash memory space in the Arduino UNO is not large enough. -jump xbee pin 1 (3.3Vin) to Arduino 3.3V pin (see red wire) -jump xbee tx (pin 2) to Arduino RX (pin1) (see yellow wire) -jump xbee ground (pin 10) to Arduino gnd (see black wire) -jump power from the 6V battery input to the Arduino VIN pin (green wire) -Solder on wires from all the digital output pins (as many servos as you are using). -place on the servo connectors (Red, black, white here) and insert the dOUT wires from Arduino into the servo cables (white signal wire). NOTE: if Arduino is to be housed in the frotnt of the snake, connect the pins low to high from Arduino to the servos that are most close to the head to far away) . in other words: the first servo (as in when the snake is moving ahead, the servo at the HEAD) should be digital pin 2, and the tail end servo should be digital pin 11. -Screw in wires to the screw terminals to attach to 6V and GROUND from your batteries. -I clipped the extra metal off (you shouldn't have to do this if you are starting from a clean board, not one with female header pins soldered in) Step 10: Upload the firmware I wrote a software library to easily generate wave locomotion based on oscillation. It calls on the Servo Arduino library to generate a sine wave propagating down the line of servos. It allows for modularity to change the sensory input, wave parameters, and number of servos. Download the code here. Upload it to Arduino, without the xbee plugged in (when the xbee is plugged in, the tx and rx pins (pins 1 and 0) on Arduino mega are used references a class that propagates a sine wave down a line of motors. During each loop cycle: -The main program, references a class that propagates a sine wave down a line of motors. -listens to a wireless RC protocol communicating to the snake via the joystick   /Code written by Gabriella Levine to take inputs from button pins and output //chars to the serial port // set pin numbers: const int buttonPin1 = 2;     // the number of the pushbutton pin const int buttonPin2 = 3;     // the number of the pushbutton pin const int buttonPin3 = 4;     // the number of the pushbutton pin const int buttonPin4 = 5;     // the number of the pushbutton pin const int buttonPin5 = 6;     // the number of the pushbutton pin const int buttonPin6 = 7;     // the number of the pushbutton pin const int ledPin =  13;      // the number of the LED pin // variables int buttonState1 = 0;         // variable for reading the pushbutton status int buttonState3 = 0;         // variable for reading the pushbutton status int buttonState2 = 0;         // variable for reading the pushbutton status int buttonState4 = 0;         // variable for reading the pushbutton status int buttonState5 = 0;         // variable for reading the pushbutton status int buttonState6 = 0;         // variable for reading the pushbutton status void setup() { Serial.begin(9600); // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); pinMode(buttonPin3, INPUT); pinMode(buttonPin4, INPUT); pinMode(buttonPin5, INPUT); pinMode(buttonPin6, INPUT);} void loop(){ if(Serial.available()>0){ byte incomingByte = Serial.read(); if(incomingByte=='1'||incomingByte=='2'||incomingByte=='6'||incomingByte=='5'||incomingByte=='0') { digitalWrite(ledPin, HIGH); delay(10); digitalWrite(ledPin, LOW);}} // read the state of the pushbutton value: buttonState1 = digitalRead(buttonPin1); buttonState2 = digitalRead(buttonPin2); buttonState3 = digitalRead(buttonPin3); buttonState4 = digitalRead(buttonPin4); buttonState5 = digitalRead(buttonPin5); buttonState6 = digitalRead(buttonPin6); // check if the pushbutton is pressed. if (buttonState1 == HIGH) { Serial.print('1'); } if (buttonState2 == HIGH) { Serial.print('2'); } if (buttonState4 == HIGH) { Serial.print('4'); } if (buttonState3 == HIGH) { Serial.print('3'); } if (buttonState5 == HIGH) { Serial.print('5');} if (buttonState6 == HIGH) { Serial.print('6');} delay(10);}   For more detail: Make a swimming Robo-Snake Using Arduino   ### Arduino-Controlled Robotic Drum For years I have been telling anyone who listens that I was going to build a robotic drum. Most people kind of shrugged indifferently. Even as I built it, most people kind of glanced over at it and conveyed doubtfulness. It seemed like no one but myself was convinced of just how awesome it was going to be. I received a lot of snarky comments about how I was making a strange annoying noise maker. When I finally go it set up for the trial run, I quickly silenced the naysayers. This robotic drum blew everyone away. I was finally able to convey my vision and explain why someone would ever want to build a robotic drum. The reason to build a robotic drum is because it is plain super-awesome. It keeps a beat like clockwork. You can slow down and speed up any drum beat with precision and ease. It can even play things a real human drummer could never do. I intend to use mine for rocking out. The current plan is to program it with different drum beats and play guitar along with it. I decided to use linear actuators (car door lock motors to be exact), and Arduinos with motor controller shields simply for ease of use and duplication. I am sure there are other more elegant ways to interface with the motors, but this is by far the easiest. Step 1: Go get stuff You will need: (x1) Drum set (Amazon) (x12) Drum sticks (Amazon) (x12) Car door lock actuator motor (Amazon) (x6) Arduino Uno (Radioshack #276-128) (x6) Arduino Motor Shield (Radioshack #276-131) (x1) 7" x 5" x 3" project enclosure (Radioshack #270-1807) (x1) European-style terminal strip (Radioshack #274-680) (x2) 24' spool 18 AWG speaker wire (Radioshack #42-2456) (x3) Panel mount M-type power socket (Radioshack #274-1563) (x1) 1/4" mono jack (Radioshack #274-252) (x1) 1/4" mono plug (Radioshack #274-1536) (x1) 4" zip tie (Radioshack #278-1632) (x1) Stranded 22 AWG red and black wire spools (Radioshack #278-1224) (x1) Assorted shrink tube (Radioshack #278-1611) (x3) 9V 1.5A power adapters (M-type plugs) (Radioshack #273-356) (x1) Power strip (Radioshack #61-056) (x1) 7 socket USB hub (Radioshack #55053562) (x6) 6' USB A to B cable (Radioshack #55010623) (x1) 4' x 8' x 1/4" plywood sheet (x4) 1/2" pipe mounting flange (x1) 24" x 1/2" threaded pipe (x1) 18" x 1/2" threaded pipe (x8) 1/2" pipe L-bracket (x2) 1/2" pipe T-bracket (x2) 1" threaded pipe (x4) 2" threaded pipe (x4) 2-1/2" threaded pipe (x2) 3" threaded pipe (x2) Cymbal stands (x3) 3/4" x 10' 22 gauge steel hanger strap (x16) 8 - 1/2" wood screws (x20) 1/4 x 5" bolts (x4) 1/4 x 2" bolts (x1) Box of 1/4 nuts (x22) 6-32 x 2" nuts and bolts (x4) 6-32 x 1" nuts and bolts (x11) 1-1/2" binding posts (x20) 1-1/2" (1/4" i.d.) spacers (x18) 4-40 x 1-1.2" nuts and bolts (x18) 1/4" (1/8" i.d.) spacers You will also need to download the attached files and laser cut (or cut the old fashioned way) the following: (x16) Drum brackets (x6) Cymbal brackets (x4) Cymbal bracket circle spacers (x2) Kick drum brackets Step 2: Attach the motor Take two of the pieces of the standard drum bracket (without Arduino mounting holes) and sandwich a motor in-between. Fasten it through the center mounting holes using 6-32 nuts and bolts. Step 3: Make another Pass 4-40 bolts through the Arduino mounting holes on one of the drum brackets and loosely hold them in place with bolts. Once the bolts are passed through, make another motor bracket "sandwich" like you did in the last step. Step 4: Motor pair Pass a 5" x 1/4 bolt through on of the corner mounting holes in the motor bracket "sandwich" that is prepped for the Arduino. Repeat for all of the other holes. Thread a nut all the way down one of the bolts to hold it in place, and then repeat for all of the other bolts Slide a spacer over each of the bolts and then thread more nuts on to hold them all in place. Slide the other motor bracket "sandwich" onto the bolt. Fasten everything securely in place with another nut. Step 5: Drill a hole Tape two drumsticks together and then fasten them securely into a vise in preparation for drilling. Make a mark at 5-1/8" and 7-1/4". Drill down through all of these marks with a 3/16" drill bit, to leave an identical pair of holes in each stick Repeat this process 5 more times, to make 6 sets of drilled drum sticks. Step 6: Attach drum sticks Grab the complete drum stick assembly. Pass a binding post from the outside of the assembly through the corner pivot hole,  through the hole in the drumstick closer to the tip, and then through the inner pivot hole. Fasten the binding post shut. Zip tie the drum sticks to the motor assembly using the other drilled hole. Repeat this process for the other motor. Step 7: Build more After you build your first complete drum stick assembly, build three more. Step 8: Glue and clamp The motor bracket "sandwich" assembly for the hi hat cymbals requires and extra piece of wood attached on each side of the outside of the assembly. To attach this wood piece, simply lay down a little bit of wood glue, align the pre-drilled 1/8" pilot holes, and then once aligned, clamp them in place. Don't forget to make certain that one of the pieces you are gluing the wood piece to has holes for mounting the Arduino. Step 9: Motor brackets Take your brackets and make two more motor "sandwiches," such that when they are ultimately assembled, the pieces with the extra wood piece glued on will be facing outwards. Step 10: Assemble Put together the motor assembly like previous motor assemblies, will paying special attention that the pieces with the extra wood piece glued on are facing outwards. Step 11: Build the mount Start with a T-bracket and thread a 3" section of threaded pipe on each end. Connect L-brackets to each end of the respective threaded pipes. Thread a 2" section of threaded pipe onto the end of each L-bracket. Again, put L-brackets on the end of each respective threaded pipe. Thread a 1" section of threaded pipe onto the end of each L-bracket. Finally, attach flanges to the end of each threaded pipe. Step 12: Attach Slide the flange over the extra bit of wood on the drumstick assembly until they are aligned. Rotate the flanges as necessary so that the pilot holes are aligned with the flange's mounting holes. Fasten the drumstick assembly to the mounting bracket place with wood screws. Step 13: 18" pipe Attach the 18" threaded pipe to the base of the T-bracket. Step 14: Connect drum sticks Using the binding posts, mount the drum sticks like you did for the previous drum stick assemblies. Again, zip tie the drum sticks to the linear motor assembly. Step 15: Clamp and glue again Again you will need to attach an extra wood piece to the wooden bracket sfor the cymbal assembly mount. However, because the cymbal only uses one stick, you only have two brackets and will need to glue the wood to each. Make sure that when you do this, the extra piece of wood will be on the outside when you make your motor "sandwich." Simply lay down a little bit of wood glue, align the pre-drilled 1/8" pilot holes, and then once aligned, clamp them in place. Step 16: Assemble The cymbal drumstick assembly only has one motor "sandwich." Assemble it accordingly, with the extra bits of wood facing out. Don't forget to install the Arduino mounting screws as well. Step 17: Build another mount Start with a T-bracket and thread a 2-1/2" section of threaded pipe on each end. Connect L-brackets to each end of the respective threaded pipes. Thread a 2-1/2" section of threaded pipe onto the end of each L-bracket. Again, put L-brackets on the end of each respective threaded pipe. Thread a 2" section of threaded pipe onto the end of each L-bracket. Finally, attach flanges to the end of each threaded pipe. Step 18: Fasten Connect the drum stick assembly to the pipe mount exactly like you did for the hi hat assembly. Step 19: 24" pipe Attach the 24" threaded pipe to the base of the T-bracket. Step 20: Connect the drum stick Once more, mount the drum sticks like you did for the previous drum stick assemblies, and then zip tie the drum sticks to the linear motor assembly. Step 21: Prepare the kick drum pedal Detach the foot pedal and chain from the kick drum pedal. Remove the spring that is keeping tension on the pedal's rotational assembly. Using the mounting holes in the wooden bracket as a guide, drill 1/4" holes on both sides of the pedal. This should result in 2 holes on each side of the pedal. Step 22: Attach Attach the wooden brackets with 1/4 nuts and bolts to the kick drum pedal assembly using the holes that you have just drilled. Step 23: Spacers Dissemble two pens so you are left only with the pen tube. Insert 5" x 1/4 bolts through the bracket's structural mounting holes, using the pens as spacers in-between the two. Fasten each bolt firmly in place with a nut. Step 24: Attach motor Line up the shaft of the linear motor assembly with the rotational pivot of the kick drum pedal assembly that the spring used to be attached to. Attach the motor to the wooden bracket using 6-32 nuts and bolts. Zip tie the motor shaft to the rotational pivot of the kick drum pedal. Step 25: Socket Wire the 1/4" socket to the motor on the kick drum assembly such that the ground wire from the motor is connected to the tip, and the other wire is connected to the barrel of the jack. If the motor does not have red or black wires, designate one of the colors to be ground and the other to be power. In this case, the green wire will be ground. Step 26: Jack Take apart the 1/4" plug, and go grab about 5' of speaker wire. Solder the marked edge of the speaker wire to the ground terminal. Solder the unmarked edge to the tip terminal. Reassemble the plug when you are done.   For more detail: Arduino-Controlled Robotic Drum ### Sigh Collector Sigh v. i. [imp. & p. p. {Sighed}; p. pr. & vb. n. {Sighing}.] 1. To inhale a larger quantity of air than usual, and immediately expel it; to make a deep single audible respiration, especially as the result or involuntary expression of fatigue, exhaustion, grief, sorrow, or the like. [1913 Webster] Description: These are instructions for building a home monitoring system that measures and 'collects' sighs. The result is a physical visualization of the amount of sighing, for personal use in a domestic environment. The project is in two parts. The first part is a stationary unit, which inflates a large red air bladder upon receiving the appropriate signal. The second part is a mobile unit, worn by the user, which monitors breathing (via a chest strap) and communicates a signal to the stationary unit wirelessly when a sigh is detected. Assumptions: 1. You have a basic understanding of construction and fabrication techniques, as well as access to the appropriate tools and facilities. 2. You have a working knowledge of physical computing (reading circuit diagrams) 3. You are overwhelmed with the anxiety of living in a failing state, and frustrated that most of your household objects address only physical rather than emotional health. Step 1: Material Needed Here is an overview of the materials that will be needed. Each individual page has more details and links on where you can purchase some of these materials. Physical Materials: > 1, 4x8 Sheet of Plywood. I used a piece of shop-grade maple ply. > 2, 2x2 for the structural frame > ~2 yards of red nylon strap fabric > Some loose red fabric from a fabric store > Latex tubing (Inner Diameter: 1/8", Outer: 1/4") > Wood Screws ( 5/16, 3", 4" ) > 1 Rechargeable battery powered air pump (Coleman Rechargeable Quick-Pump) > 1 unidirectional "Check Valve" > A piece of a garden hose > Liquid Latex & Red Pigment, or a large red balloon of some kind. Electronics, Misc: > 1, 20cm Stretch Sensor > 1 red RCA cable, Male and female headers > 1 10K Potentiometer with large sized knob > 1 3-way toggle switch > 2 Arduino Microcontrollers (Diecimille or newer) > 2 9V battery clips with 5mm (center positive) male jacks. > 2 xBee wireless modules > 2 xBee shiels from LadyAda > 1 FTDI cable for programming the xBees > 1 LMC662, "rail-to-rail" OpAmp chip > Misc Electronics components (see circuit diagrams for details). Step 2: Build and Program Circuit. Hack into Air Pump I like to start by getting the electronics working first, usually with a prototype of what I want to build (made from cheap exterior plywood, or even cardboard and hot-glue). The electronics are divided into two parts. This part is the receiving end. It will receive a wireless signal from the wearable unit and use that signal to turn an air pump on for ~2 seconds and then turn it off. Between the pump and balloon, is what's called a check valve, which lets air pass one direction but not the other. The air pump is a Coleman Rechargeable "Quickpump". I like it because of the rechargeable battery, and the different sized nose attachments. Open up the pump and rework the toggle switch, so that it's bridging between the battery and one terminal of the motor. The other terminal of the motor will run to the collector of the TIP120 transistor. To do this, you'll have to de-solder the black wire from the second motor terminal, and also de-solder the lead coming from the battery charger and going to the other end of the toggle switch. Be sure to common ground the motor's battery with the Arduino's power supply. Build the circuit in the diagram below. There is also a PDF attached for higher resolution. Program the Arduino with the code supplied in the text file. You'll need to install this library. If you don't know how to work with Arduino, here are some references so you can learn: > Main Arduino Website > Freeduino -- Repository of Arduino knowledge and links > NYU, ITP's in-house physical computing site with tutorials and references. Step 3: Build the Sigh Collector main unit For the sake of brevity, I will not detail every step in the process of building the main unit. Suffice it to say that it can be as simple or complex as you wish; anything from cardboard and hot glue to custom fabricated or more advanced materials. I have designed mine this way, which isn't to say it's the only way it could be done. If you care to follow or elaborate on my instructions, see the diagram below. Again, a higher resolution PDF is attached. On the diagram, you will find exact measurements and specifications on how to build the unit pictured below. As stated in Step 2, I built mine out of shop-grade Maple plywood. It has a nice grain and cuts well. I left the surface raw. A couple design notes: I decided to drive all the screws in from the inside so that you wouldn't see them from the exterior. It can be tricky to sneak a drill inside of the unit, so I recommend building it in sections. I angled the bottom edges of the 2x2 frame, so that they would look a little sleeker when visible. The top piece with the mitered corners and circular opening is removable, for easy repair of inside parts. The pump and electronics will sit inside the box, on a shelf that is held up by two of the 2x2's on the inner frame (see diagram). The reason I built it on a frame is so that the corners would stay square. Otherwise, plywood can tend to warp. This way, also, everything can be held together by screws and therefore broken down easily into pieces. Step 4: Make the air bladder I wanted a more organic, fleshy texture of my air bladder, so I cast it out of liquid latex. Liquid latex of many different sorts can be bought in a craft store, prop shop or easily on the internet. I mixed the latex with red pigment to color it, and painted it, in layers, onto the outside of a large balloon. The many layers built up to form a big, floppy fleshy balloon, with the texture I created with the brush. A simple balloon, beach ball or even a garbage bag could replace. Check out this website for different types of large-sized balloons. Step 5: Combine electronics with main unit. Install Check Valve and Pump Place the air pump and circuit inside of the main unit, on the lower shelf. Now it's time to make a connection between the air pump, and the air bladder/balloon, which will sit on the surface. We only want air to go one way, and not come out the other direction, so we use something called a "check valve". The basic principle is that a hinged door, rubber diaphragm or ball is displace by air going one way, but then prevents the air from going back.   For more detail: Sigh Collector   ### Automatic Garden Watering Device - Arduino As part of the Content Creation course for my MLIS degree (Our class blog: http://scumakers.wordpress.com/ ), I needed to come up with a final project and wanted to learn to use an Arduino. In the end I came up with this device to automatically sense when the soil in my garden is dry and turn on a switch to water it. I know there are other devices out there that do the same thing and probably do it better, but other than using the little idea here and using some existing code and I came up with this method on my own. If you are ever stuck anywhere use the Arduino Forums for help. If you have a question about something, the chances are somebody else has asked it before... no matter how simple or silly you may thing it is. I also had to reteach myself basic electronics and the Spark Fun Tutorials were great from that. Step 1: Lets start with the complicated concepts.... the circuits! This project consists of three circuits that when broken down individually aren't that difficult. I'm going to diagram them each and then we will take a look at everything put together. Parts needed for the Curcuits: 16 pin LCD Potentiometer 5v Relay 10K resistor NPN transistor 12 V solenoid 12 V battery Sunkee Soil Hygrometer 28 Jumper wires Step 2: The Relay Circuit This circuit allows the Arduino (which runs at 5V) to turn on the water valve (which runs at 12V). Without this type of switch, it wouldn't be possible (or would be really difficult) to get these two different pieces to work together. Parts: 5v Relay 10K resistor NPN transistor 12 V solenoid 12 V battery 11 Jumper wires Step 3: The Soil Sensor Circuit This is the most simple circuit of the three and requires the Sunkee Soil Hygrometer. Another brand of Hygrometer will work as well, but the wiring might be a little different. This one comes with it's own little shield that has four pins on it. The first (from left) goes to 5v on the Arduino, the second to ground, the third is the digital pin, and the fourth is the analog. We won't be using the digital pin, as that just tells the Arduino two values - High or Low, we actually want the analog pin that will give the Arduino a value from 400 to 1023. By doing this, we can be more specific about when we want the valve to turn on. Parts: Sunkee Soil Hygrometer 3 Jumper wires Step 4: LCD Circuit Step 5: That's all of the circuitry That's it for circuits, if you put those three together on one Arduino and one breadboard, we are ready to move onto the code and then the box for it! Step 6: Let's do some code! Thankfully we have some resources online that provide us with most of the code, we just have to get it to work together. This is the code for the Sunkee Sensor from Steve Spence's Blog //The (int soil=0) is the soil variable which turns the reading that comes in on the sensor into a %, this will be an important variable in this project int soil=0; // the setup routine runs once when you press reset, and sets up communication with the serial port: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600);} // the loop routine runs over and over again forever: void loop() {// read the input on analog pin 0: int sensorValue = analogRead(A0); sensorValue = constrain(sensorValue, 485, 1023); // print out the value you read: //Serial.println(sensorValue); //map the value to a percentage soil = map(sensorValue, 485, 1023, 100, 0); // print out the soil water percentage you calculated: Serial.print(soil); Serial.println("%"); delay(1000); // delay in between reads for stability, the delay is in millieseconds so this is a 1 second delay} The following is public domain code used from the Arduino website. This code sends whatever message we want to the LCD Screen. In this instance it displays "Hello World" on the first line and a count of the seconds since reset on the second. #include // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() {// set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("hello, world!");} void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 1); // print the number of seconds since reset: lcd.print(millis()/1000);} Step 7: Putting the Code Together The next step is to modify those two pieces of code and then put a loop in it that will turn on the relay when soil moisture falls to a certain point. When that is all said and done, it looks like this: //This first section sets up our variables and initializes the LCD screen int soil=0; int Relay = 7; int relay_level=60; #include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // the setup routine runs once when you press reset: void setup() {// initialize serial communication at 9600 bits per second: Serial.begin(9600); // set up the LCD's number of columns and rows:} // the loop routine runs over and over again forever: void loop() {// read the input on analog pin 0: int sensorValue = analogRead(A0); sensorValue = constrain(sensorValue, 485, 1023); // print out the value you read: Serial.println(sensorValue); // initialize the digital pin as an output. pinMode(Relay, OUTPUT); //map the value to a percentage soil = map(sensorValue, 485, 1023, 100, 0); // print out the soil water percentage you calculated to the LCD Screen: Serial.print(soil); Serial.println("%"); // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.begin(16, 2); // Print a message to the LCD. lcd.clear(); lcd.print("Soil Saturation:"); lcd.setCursor(0, 1); // print the number of seconds since reset: lcd.print(soil); lcd.print ("%"); // delay in between reads for stability delay(1000); // This next loop turns on the relay for one minute if the moisture is below the level we want (in this case 60%), if the moisture is above that level, it keeps testing. If the level of moisture is below that level it turns the relay (and subsequently the water valve for as long as you would like (in this case it is set for 60000 milliseconds (1 minute)). It then waits another minute before testing the soil again in order to see if it is wet enough. if (soil < relay_level) {digitalWrite(Relay, HIGH); // turn the Relay on (HIGH is the voltage level) delay(60000); // wait for a minute digitalWrite(Relay, LOW); // turn the LED off by making the voltage LOW delay(60000); // wait for a minute}} Step 8: We then compile the code from the Arudino window and send it to the board. Here is a link for the software: http://arduino.cc/en/Main/Software All this code stuff is confusing, the best way to learn it is to read through the tutorials and then play around with it. Some great tutorials are here: http://arduino.cc/en/Tutorial/HomePage Step 9: Installing it in the Container I bought a Plano box for about $15 which is more than I wanted to pay, but I did soak it with water and it stayed dry so I have no complaints. Step 10: Spot for the LCD Screen I traced the screen with a pencil and then used a Dremel cutting blade to cut the hole to a rough size. I then used a small Dremel grinding wheel to get the fit perfect.I put clear silicon caulk on top of the board and installed it in the hole. I then put a small bead on the top side around the screen. Before doing this, make sure your wires are connected as you will no longer be able to see the labels on the board.   For more detail: Automatic Garden Watering Device - Arduino ### Project Suite Bros: Voice Activated LED Friendship Photoset (Arduino, Bluetooth, Crafts) (and partner-in-crime, Abbie). Now, I'm off to the next stage of my life, so I decided to build this friendship photoset for Kevin and Briton to remember our golden era. We called ourselves: "The Suite Bros". This project is actually an extension of the "Voice Activated Arduino (Bluetooth + Android) by ASCAS. I highly advise you guys to read his project first! ASCAS really simplified the fundamentals of the project down super well. It's been a little more than a year since the last time (and the first time) I took Electronics at Pomona College and learned to use the Arduino. I thought ASCAS's project was fun and easy-to-learn. He has great project. Check him out when you can! HOW PROJECT SUITE BROS WORKS It's a DIY photoset that has LEDs inserted in the frame and in the back of photos that are activated by your voice commands via an Android's speech recognition app. The app is called "Android Meets Robots: Voice" by SimpleLabsIN. This app converts your voice commands to data strings and sends them to your Arduino via Bluetooth. You can build the photoset in any way you want. I just want to show you how I built mine in this Instructable. Step 1: Materials and Equipment MATERIALS HC-05 Serial Bluetooth Module Assorted LEDs - I used about 12 LEDs Jumper Cables Arduino UNO Power Supply for Arduino Electronics Wall Plug USB for Arduino Drip Mat - Just a plastic cover I used to write "Always a party when we're together". For crafts purposes. Construction Paper - Not much needed Plastic Microwave Tray - Used this as the photoset frame. It was $1.50 at the DAISO store Baby pack lunchboxes - Used to place underneath photos and to contain LEDs. $1.50 at DAISO EQUIPMENT Solderless Breadboard (for testing) Soldering Tool Kit - Buy a decent one for yourself! Basic Power Drill - Only need it to drill a hole through the photoset frame Step 2: Understand the Basics Read through this Instructable to make sure you understand the basics of this project: "Voice Activated Arduino (Bluetooth + Android)" by ASCAS Step 3: Prepare your photos and LED containers Print out your photos and make sure they fit the LED containers (aka. baby pack lunchboxes). Use the LED containers to draw a circle on your photos. Cut construction paper (pick any color you like) so that it wraps around the LED containers on the sides. Then, attach your photo on the bottom of the LED container with tape or glue. Find out where you want to place your photos + LED container units on your frame board. (Optional) I laminated the photos, so they'd look more cool. Drill holes where you wish for your LEDs to show up. I drilled about 12 holes - two for each photo, two in the center, one on each side, and two on the bottom. Add any creative text or decorations on the photos. I cut out the words "THE SUITE BROS" and placed each word on each photo. Then, I taped on yellow dividers. Step 4: Assemble the Bluetooth This step is referenced directly from ASCAS's instructions. I believe he made very clear instructions and a great diagram. I put this here for your convenience. Remember to connect to 3.3 V and not 5 V (like the diagram). "Grab some jumper cables and power the Bluetooth module with 3.3 volts. Remember, the bare HC-05 run on 3.3v and not on 5v. Now connect the RX (pin #0) of the Arduino to the TX pin of the Bluetooth module and the TX (pin #1) of the Arduino to the RX pin of the Bluetooth module. (refer to the image above) Step 5: Assemble the LEDs The schematic seems quite complicated, but it's not that bad. In my diagram, I connected LEDs to basically all the pins left. Connect LED 1 To Pin #2 Connect LED 2 To Pin #3 Connect LED 3 To Pin #4 Connect LED 4 To Pin #5 Connect LED 5 To Pin #6 Connect LED 6 To Pin #7 Connect LED 7 To Pin #8 Connect LED 8 To Pin #9 Connect LED 9 To Pin #10 Connect LED 10 To Pin #11 Connect LED 11 To Pin #12 Connect LED 12 To Pin #13 I forgot to purchase blank circuit boards, so my actual setup looks like a complete mess. I basically soldered the ends of jumper cables to ends of LEDs. Lesson learned. But hey, it works! So yes, I suggest you to use blank circuit boards to connect all of the GND components of the LEDs Step 6: Programming your Arduino This next part is also very important. Once again, ASCAS has given an outstanding explanation. I've pasted it here below (but please check his page): Understanding The App Before you program the arduino, you must first learn how the app works. The app work by recognizing your voice command, it will then display the words that you've spoken then sending data/ strings to the arduino via bluetooth. What's a string? A string is like a word, you can make conditional statements out of it [ex: if (voice == "*computer on") {// turn Pin #2 on} ]. The "voice" is your string, "==" is your condition (means equal to), "*computer on" is your command and the code inside the curly-braces "{ }" are the codes to be executed once your string matches the command condition. What's the format of the string? How does it know when the next command kicks in? How does it differentiate a set of words from a new command? The app sends strings in this format *command#, the asterisk (*) indicates the start of a new command and the hash-tag (#) indicates the end of a command. I was able to remove the hash-tag (#) after each word in the conditional statement was not able to remove the asterisk (*). You'll need to start your command condition with an asterisk otherwise the sketch will not work. How Can I Change The Commands? You can see that the "*TV on" is highlighted from the image above. If you want to change the command to ,humm let's say "open garage door", you can replace the "*TV on" with "*open garage door". Always remember to start the command with an asterisk. THE CODE //Voice Activated Arduino (Bluetooth + Android) Coded By: Angelo Casimiro (4/27/14) //Adapted By: Chloe Shih (8/25/14) //PROJECT SUITE BROS //Feel free to modify it but remember to give credit String voice; String voice2; int led1 = 2, //Connect LED 1 To Pin #2 led2 = 3, //Connect LED 2 To Pin #3 led3 = 4, //Connect LED 3 To Pin #4 led4 = 5, //Connect LED 4 To Pin #5 led5 = 6, //Connect LED 5 To Pin #6 led6 = 7, //Connect LED 6 To Pin #7 led7 = 8, //Connect LED 7 To Pin #8 (bottom pins begin here) led8 = 9, //Connect LED 8 To Pin #9 led9 = 10, //Connect LED 9 To Pin #10 led10 = 11, //Connect LED 10 To Pin #11 led11 = 12, //Connect LED 11 To Pin #12 led12 = 13; //Connect LED 12 To Pin #13 //--------------------------Call A Function-------------------------------// void allon(){ digitalWrite(led1, HIGH); // kevin digitalWrite(led2, HIGH); // briton digitalWrite(led3, HIGH); // chloe digitalWrite(led4, HIGH); // kevin's color digitalWrite(led5, HIGH); // briton's color digitalWrite(led6, HIGH); // chloe's color digitalWrite(led7, HIGH); // yellow middle digitalWrite(led8, HIGH); // green middle digitalWrite(led9, HIGH); // blue side digitalWrite(led10, HIGH); // red side digitalWrite(led11, HIGH); // white bottom digitalWrite(led12, HIGH); // yellow bottom } void alloff(){ digitalWrite(led1, LOW); // kevin digitalWrite(led2, LOW); // briton digitalWrite(led3, LOW); // chloe digitalWrite(led4, LOW); // kevin's color digitalWrite(led5, LOW); // briton's color digitalWrite(led6, LOW); // chloe's color digitalWrite(led7, LOW); // yellow middle digitalWrite(led8, LOW); // green middle digitalWrite(led9, LOW); // blue side digitalWrite(led10, LOW); // red side digitalWrite(led11, LOW); // white bottom digitalWrite(led12, LOW); // yellow bottom } void partyloop(){ while (voice == "*party on") { digitalWrite(led4, HIGH); // turn the LED on (HIGH is the voltage level) digitalWrite(led5, HIGH); digitalWrite(led12, HIGH); // bottom yellow digitalWrite(led6, HIGH); digitalWrite(led7, HIGH); digitalWrite(led8, HIGH); digitalWrite(led9, HIGH); digitalWrite(led10, HIGH); delay(300); // wait for half a second digitalWrite(led1, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, LOW); // turn the LED off by making the voltage LOW digitalWrite(led6, LOW); digitalWrite(led7, LOW); digitalWrite(led10, LOW); delay(100); digitalWrite(led3, LOW); digitalWrite(led1, LOW); digitalWrite(led5, LOW); digitalWrite(led12, LOW); // bottom yellow digitalWrite(led2, HIGH); digitalWrite(led11, HIGH); // bottom white digitalWrite(led4, HIGH); digitalWrite(led6, HIGH); digitalWrite(led8, LOW); digitalWrite(led7, HIGH); digitalWrite(led9, LOW); digitalWrite(led10, HIGH); delay(500); digitalWrite(led6, LOW); digitalWrite(led1, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, LOW); digitalWrite(led5, HIGH); digitalWrite(led12, HIGH); digitalWrite(led8, HIGH); digitalWrite(led7, LOW); digitalWrite(led9, LOW); digitalWrite(led10, HIGH); delay(600); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led11, LOW); // bottom white digitalWrite(led5, LOW); digitalWrite(led12, LOW); // bottom yellow digitalWrite(led3, LOW); // voice: "*party on" at this point digitalWrite(led7, HIGH); digitalWrite(led8, LOW); digitalWrite(led9, HIGH); digitalWrite(led10, LOW); Serial.println("in loop"); newVoice(); // receives new voice. if (!(voice2.equals(voice)) && voice2 != "") { voice = voice2;}} if (voice != "*party over" && voice != "*party off" && voice != "*party poop" && voice != "*party pooper" && voice != "*lights off" && voice != "*party of") { voice = "*party on"; voice2 = ""; partyloop();} alloff(); // turn all lights off} //-----------------------------------------------------------------------// void newVoice() {voice2 == ""; // clear voice while (Serial.available()){ //Check if there is an available byte to read delay(10); //Delay added to make thing stable char c = Serial.read(); //Conduct a serial read if (c == '#') {break;} //Exit the loop when the # is detected after the word voice2 += c; //Shorthand for voice = voice + c} if (voice2.length() > 0) { Serial.println(voice2);}} //-----------------------------------------------------------------------// void setup() { Serial.begin(9600); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); pinMode(led9, OUTPUT); pinMode(led10, OUTPUT); pinMode(led11, OUTPUT); pinMode(led12, OUTPUT);} //-----------------------------------------------------------------------// void loop() { while (Serial.available()){ //Check if there is an available byte to read delay(10); //Delay added to make thing stable char c = Serial.read(); //Conduct a serial read if (c == '#') {break; } //Exit the loop when the # is detected after the word voice += c; //Shorthand for voice = voice + c} if (voice.length() > 0) { Serial.println(voice); //-----------------------------------------------------------------------// //----------Control Multiple Pins/ LEDs----------// if(voice == "*turn all on") {allon();} //Turn Off All Pins (Call Function) else if(voice == "*turn all off" || voice == "*turn off" || voice == "*party over" || voice == "*party off" || voice == "*party of" || voice == "*party poop" || voice == "*lights off" || voice == "*lights of"){alloff();} //Turn On All Pins (Call Function) else if(voice == "*party on"){partyloop();} else if(voice == "*friends on" || voice == "*the suite bros on" || voice == "*the sweet Bros" || voice == "*suite bros on" || voice == "*sweet Bros on") { digitalWrite(led1, HIGH); // kevin digitalWrite(led2, HIGH); // briton digitalWrite(led3, HIGH); // chloe} else if(voice == "*side lights on") {digitalWrite(led9, HIGH); digitalWrite(led10, HIGH);} //----------Turn On One-By-One----------// else if(voice == "*Kevin on" || voice == "*kevin on") {digitalWrite(led1, HIGH);} else if(voice == "*Briton on" || voice == "*Brighton on" || voice == "*Abbie on" || voice == "*abbie on") {digitalWrite(led2, HIGH);} else if(voice == "*Chloe on") {digitalWrite(led3, HIGH);} else if(voice == "*smile on") {digitalWrite(led11, HIGH);} else if(voice == "*message on") {digitalWrite(led8, HIGH); digitalWrite(led7, HIGH);} else if(voice == "*red on") {digitalWrite(led10, HIGH);} else if(voice == "*blue on") {digitalWrite(led9, HIGH);} //----------Turn Off One-By-One----------// else if(voice == "*Kevin off" || voice == "*kevin off") {digitalWrite(led1, LOW); digitalWrite(led4, LOW);} else if(voice == "*Briton off" || voice == "Brighton off" || voice == "*abbie off" || voice == "*Abbie of" || voice == "*abbie of" || voice == "*Abbie off") {digitalWrite(led2, LOW);digitalWrite(led5, LOW);} else if(voice == "*Chloe off") {digitalWrite(led3, LOW);digitalWrite(led6, LOW);} else if(voice == "*message off" || voice == "*message of") {digitalWrite(led7, LOW); digitalWrite(led8, LOW);} else if(voice == "*red off" || voice == "*red of") {digitalWrite(led10, LOW);} else if(voice == "*blue off" || voice == "*blue of") {digitalWrite(led9, LOW);} else if(voice == "*smile of" || voice == "*smile off") {digitalWrite(led11, LOW); digitalWrite(led12, LOW);} //----------Turn Off in Group----------// else if(voice == "*friends off" || voice == "*friends of" || voice == "suite bros off" || voice == "*sweet Bros of" || voice == "*sweet Bros off" || voice == "*sweet bros off" || voice == "*sweet bros of") { digitalWrite(led1, LOW); // kevin digitalWrite(led2, LOW); // briton digitalWrite(led3, LOW); // chloe} //-----------------------------------------------------------------------// voice="";}} //Reset the variable after initiating   For more detail: Project Suite Bros: Voice Activated LED Friendship Photoset (Arduino, Bluetooth, Crafts) ### Arduino Garage Controller Although there are many garage door projects on Instructable using Arduinos, I needed/wanted something different. Last year, we had a warm summer and when I would come home after work, I would leave the garage door open about 1 foot so it could cool off. The trouble was that several nights I left the garage door open overnight :-(  So I thought, I could use an Arduino with a real-time clock (RTC) to automatically close the garage door at 9 pm. So I built the first version of a garage controller. I used two sensors, one for "door is closed" and the other for "door is fully open" and a relay. The controller worked quite well for the rest of the summer. When winter came, I decided to unplug the garage controller since I would leave the garage door partially open. This year when it started getting warm again, I plugged in the garage controller again. The trouble was that the RTC was not very accurate and the time was off. The only way to correct the time was to plug my laptop via USB to the garage controller, a pain because I had installed the garage controller on top of the garage door opener. So I had to climb a ladder with my laptop, connect the USB port to the Arduino, upload a "new" sketch that had to correct time and then upload the regular sketch (that didn't set the RTC). In the meantime, I had bought a factory refurbished Vera2 "Smart Home Controller" from Mi Casa Verde on eBay. I had also found a Z-Wave home thermostat at Fry's for $14 so I could automatically set schedules for the heating and air conditioning. The Vera also allows me to remotely control the thermostat from my cell phone using one of the many apps that talk to the Vera. Given that I had the Vera (that keeps accurate time) and the fact that you can write your own "plugins" for the Vera, I thought, I should connect my garage controller to the Vera. Once I connected my garage controller, I thought, Hey, I have an Arduino in the garage, what else can I control? So I decided to add more relays to control my irrigation system and replace the timer I have in the garage. Have you ever tried to manually turn on one zone with today's timers? Now, with my cell phone, I just tap a button! The garage controller connects to the Vera2 via Ethernet. I'm using an Ethernet shield because they are less expensive than WiFi shields. I could have used a Raspberry Pi but since its GPIO are 3.3V I decided to stick with the Arduino. Step 1: Parts & Tools So here's are the parts I used: Arduino Uno An Ethernet Shield (any shield that works with your Arduino) A 4 Channel 5 volt relay module A PC board A fuse holder for the 24V used by the irrigation valves A polarized connector for the 24V A DB9 male connector with flat ribbon cable (I had laying around) Miscellaneous screws and bolts A plastic box to hold the controller. Various straight and right angle headers Wire-wrap wire (I had laying around) Magnet wire (for the 24V) 2 Switches with NO and NC connections Speaker or telephone wire to connect sensors 2 conductor connectors In addition, you'll need the following tools: Soldering Iron Solder Drill and bits Files Labeler (optional) Arduino Development Software A text editor You also must be familiar with the Vera and how to add your own device to the Vera. Step 2: Schematic/Block Diagram Here's the schematic/block diagram. Step 3: Arduino Uno, Ethernet Shield & 4 Channel Relay Module By trial & error, I first mounted the Arduino Uno to the bottom half of the plastic box by drilling on the bottom. I had to cut  and file away the plastic to allow for the USB connector. I used spacers to hold the Arduino Uno to the bottom. In a similar fashion, I attached the 4 channel relay module to the bottom half of the plastic box. I also drill/cut/filed the holes in the top half of the plastic box for the Ethernet connector, the 24V connector, the DB9 connector and for the sensors and switch headers. In the first photo below, I've already attached the wires from the DB9 connector. Step 4: Breadboard The breadboard is what connects the Arduino/Ethernet Shield to the relay module and the "outside" world. Step 5: Door Sensors and Pushbutton I mounted the 2 switches at each end of the garage door rail. Since I wanted to sense the "normal state" (i.e. the garage door is closed) as HIGH on the Arduino, the closed door sensor is connected to the NO pin and the fully open sensor is connected to the NC pin on the switches. To open and close the garage door, I then spliced a wire from a relay in the garage controller to the wire coming from the pushbutton on the wall.   Step 6: The Arduino Code Here's the code running on the Arduino: /* Garage Controller Written by Aram Perez Licensed under GPLv2, available at http://www.gnu.org/licenses/gpl-2.0.txt */ //#define LOG_SERIAL #include #include #include #define NO_PORTA_PINCHANGES #define NO_PORTC_PINCHANGES #include #define IOPORT 23  //Normal telnet port #define NBR_OF_RELAYS 4 // Garage door sensors & pushbutton #define GARAGE_CLOSED_SENSOR 2 //Connect to NC terminal, active high #define GARAGE_PARTIALLY_OPEN_SENSOR 3   //Connect to NO terminal, active high #define RELAY0 4 #define GARAGE_RELAY RELAY0  //Relay for garage door button #define RELAY1 5 #define RELAY2 6 #define RELAY3 7 #define CR ((char)13) #define LF ((char)10) // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network. // gateway and subnet are optional: static byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; static IPAddress ip(192, 168, 1, 170); static IPAddress gateway(192, 168, 1, 1); static IPAddress subnet(255, 255, 255, 0); static EthernetServer server(IOPORT); static EthernetClient client; static char relayState[NBR_OF_RELAYS]; class GarageDoor {bool closedState, partiallyOpenState; public: GarageDoor(); void Init(); void SetClosedState(bool st){ closedState = st;} void SetPartiallyOpenState(bool st){ partiallyOpenState = st;} char State() const; void PushButton(); };static GarageDoor garageDoor; //This should be a private function in the GarageDoor class //i.e. GarageDoor::StateChangedISR(void), //but the compiler gives an error if it is :-( static void StateChangedISR(void) {if( PCintPort::arduinoPin == GARAGE_CLOSED_SENSOR ){ garageDoor.SetClosedState(PCintPort::pinState);} else{ //Must have been the GARAGE_PARTIALLY_OPEN_SENSOR: garageDoor.SetPartiallyOpenState(PCintPort::pinState);}} GarageDoor::GarageDoor(){} void GarageDoor::Init() {pinMode(GARAGE_CLOSED_SENSOR, INPUT_PULLUP); PCintPort::attachInterrupt(GARAGE_CLOSED_SENSOR, &StateChangedISR, CHANGE); pinMode(GARAGE_PARTIALLY_OPEN_SENSOR, INPUT_PULLUP); PCintPort::attachInterrupt(GARAGE_PARTIALLY_OPEN_SENSOR, &StateChangedISR, CHANGE); closedState = digitalRead(GARAGE_CLOSED_SENSOR); partiallyOpenState = digitalRead(GARAGE_PARTIALLY_OPEN_SENSOR);} void GarageDoor::PushButton() {digitalWrite(GARAGE_RELAY, LOW);delay(400);  //Delay .4 secs digitalWrite(GARAGE_RELAY, HIGH);}char GarageDoor::State() const {if( closedState ) return 'c'; return partiallyOpenState ? 'p' : 'o';} void setup() { #ifdef LOG_SERIAL Serial.begin(56700); #endif // initialize the ethernet device Ethernet.begin(mac, ip, gateway, subnet); // start listening for clients server.begin(); garageDoor.Init(); for( int i = 0; i < NBR_OF_RELAYS; i++ ){ pinMode(RELAY0+i, OUTPUT);  //Zone 1 digitalWrite(RELAY0+i, HIGH); //Relays use inverted logic, HIGH = Off relayState[i] = '0';  //Use normal logic} if( client.connected() ){client.flush();} #ifdef LOG_SERIAL Serial.println("\r\nOK");#endif}char ReadNext(){char ch = client.read();#ifdef LOG_SERIAL Serial.print(ch);#endifreturn ch;} ////Commands: //  g? - return current garage door state //          c - door is closed //          o - door is fully open //          p - door is partially open //  gb - "push" garage door button //  rx? - return relay x state //  rxy - set relay x to y (0 or 1) // void loop() { static char lastGarageDoorState = 'c'; char ch, rAsc; if( !client.connected() ){ // If client is not connected, wait for a new client: client = server.available(); } if( client.available() > 0 ){ int rNdx; bool err = false; while( client.available() > 0 ){ switch ( ReadNext() ) { case 'g': switch ( ReadNext() ) { case '?': ch = garageDoor.State(); client.print('g'); client.println(ch); #ifdef LOG_SERIAL Serial.print(">g"); Serial.println(ch); #endif break; case 'b': garageDoor.PushButton(); break; default: err = true; } break; case 'r': ch = ReadNext(); switch( ch ){ case '1': case '2': case '3': rAsc = ch; rNdx = ch - '1'; ch = ReadNext(); switch( ch ){ case '?': ch = relayState[rNdx]; break; case '0': digitalWrite(RELAY1 + rNdx, HIGH);  //Inverted logic relayState[rNdx] = ch; break; case '1': digitalWrite(RELAY1 + rNdx, LOW);  //Inverted logic relayState[rNdx] = ch; break; default: err = true; } if( !err ){ client.print('r'); client.print(rAsc); client.println(ch); #ifdef LOG_SERIAL Serial.print('>'); Serial.println(ch); #endif }break; default: err = true;} break; case CR: case LF: break;    //Ignore CR & LF default: err = true;}} if( err ){client.println('?'); #ifdef LOG_SERIAL Serial.println(">Say what?"); #endif}} ch = garageDoor.State(); if( ch != lastGarageDoorState ){ lastGarageDoorState = ch; client.print('g'); client.println(ch); #ifdef LOG_SERIAL Serial.print(">g"); Serial.println(ch); #endif}}   For more detail:  Arduino Garage Controller   ### The Arduino Mothbot The purpose of this project is to design and build a simple light-following robot using an Arduino Duemilanove microcontroller board. I really wanted to share a robot project that was cheap, simple to build, and had a complete set of instructions for all of the different steps. I hope I've succeeded and I'd love to get comments about making this instructable even better. The design of this robot focused around using the book "Getting Started with Arduino" by Massimo Banzi and published with [makezine.com Make]. I also employed code for running the servos from a project titled: How to Make an Arduino Controlled Servo Robot (SERB). The Arduino Mothbot is in total a pretty quick robot to build. Assuming you start with all of the parts and don't have to improvise, the project in total should take maybe an hour to build. That is if you follow the instructions and copy the code. However, if you build only one feature at a time and test along the way then this project could take significantly longer. The advantage of the longer track is that you'll probably learn a lot more and have some fun along the way. Step 1: Gather your Parts and Tools Building this robot is going to cost you roughly $80 in parts if you've never done anything like this before. The cost for me was significantly less since I've got a lot of electronics lying around to work from. However, I know how frustrating it can be to try and follow an instructable without knowing which parts to get, where to order from, and how much everything will cost up front so I've done all that work for you. Once you've got the parts all squared away it should be a snap to do this project. Follow the following link to my project wiki to get a complete parts list. Now you may want to get some tools. Since this project employs a solderless breadboard you can do without a lot of fancy electronics equipment. Hopefully you can find the rest of the things you need in a garage: 1. Needle nose pliers 2. Wire Cutters 3. Flat head screw driver 4. Small Phillips (4-sided) screw driver 5. Adjustable wrench or 11/32" hex wrench 6. Drill 7. 1/16", 5/32" and 7/32" drill bits 8. Saw (optional) 9. Safety Goggles Please use safe practices when using any power tools. Step 2: The Planning Stage Before I started this project I looked around Instructables at a lot of other projects. I also spent some time reading the book "Getting Started with Arduino" by Massimo Banzi. Nearly everything in this project is done from an example on this website or in the book. I designed the project this way in an attempt to make it accessible to the novice roboticist. In my planning phase I did not only looked at hardware and coding but did my electronics homework as well. I wanted to draw up a simple electronics schematic for this project so I could follow what was going on as I built it. You can see in the picture the different components, power lines, and the Arduino pins. Hopefully it's a clear diagram and also illustrates how simple the electronics for this project is. Step 3: Connecting the Servos to the Arduino If you're going to build a robot the first thing you probably want to work out is how to get it moving around. Most likely you want to be able to send it forward, backward, right, left and make it stop. If you can't figure out how to command it to move properly you're not likely to be able to make it do anything when you connect all the sensors. Below are the steps to connect the motor to the Arduino. 1. The first thing to do when setting up the solderless breadboard is to set up the ground (GND) and power (+6V) for the servos. I chose to use the two long strips on the board that would be closest to the Arduino. 2. Once the ground and power lines are identified connect the ground of the Arduino board to the ground strip on the solderless breadboard. Do not connect the power to the solderless breadboard yet. 3. Each servo has three wires that come out of them. Mine have a black, red, and white wire for each. The black is for ground, the red is for power, and the white is the control wire. Cut three jumper wires for each servo of the same size (so 6 in total) 4. Attach the jumper wires to the end of the servo wires and then each servo to the solderless breadboard. 5. Now use jumpers to connect the ground and power from each servo to the ground and power of the solderless breadboard. 6. Now connect the control wires from each servo to the Arduino. Connect the left servo to digital output (PWM) 3 and the right servo to digital output (PWM) 11. 7. Finally, connect the ground and power from the 4AA batteries to the solderless breadboard ground and power. Don't be alarmed if the servos start moving when your Arduino has no power or is not yet programed. 8. Using the code you should now be able to run the motors in the forward, backward, left or right directions using the included functions. Step 4: Testing out the Motors I think it's important to include some of the test code I used when putting together the Arduino Mothbot. If you're interested and willing to put in the time to tinker around I think you'll find these code snippets educational and useful in other projects. Before I post any code below I want to make it known that the following is based on another great project called How to Make an Arduino Controlled Servo Robot (SERB). I learned a lot from following the work on that instructable and want to give credit where it is due. Step 5: Integrating the On/Off Button Now you may be wanting to turn your robot on and off with the push of a button. The Arduino itself will run code in an endless loop until you unplug it, which can be quite frustrating when you plug in your robot on the table and it starts running away from you! Integrating the button is a great step in this process because you'll also learn how to use buttons for other things, like creating a bumper to detect when the robot hits a wall. As a note, you'll notice I removed the servos from the solderless breadboard for most of my pictures. This just helps make the image more clear when I'm showing different steps. 1. To begin, disconnect power from the servo motors before doing any more work. Remember to do this every time you add something to this project. 2. Now you may want to be able to turn your robot on and off as opposed to having the robot immediately start moving when you connect the power. 3. Identify a strip on the opposite side of the solderless breadboard to be power for on/off button (and later the sensors). 4. Using a long jumper wire connect the power (+5V) from the Arduino to the strip you just identified. 5. Connect two jumper wires to the momentary switch and plug one end into the (+5V) power 6. Plug the other end of the momentary switch into a smaller strip in the middle of the solderless breadboard. 7. From that same strip connect a 10K ohm resistor to the strip and the other end into ground 8. Finally, connect a wire from the strip with the switch and the resistor on one end and place the other end in digital input 7 on the Arduino. 9. Now, with the code you should be able to use the button to turn on and off the robot. If you use the code with the LED (digital output 13) you will see the on-board LED turn on and off with the robot. This is a great way to test the Arduino code if you have the power to the motors disconnected. Step 6: Testing the On/Off Button This new code includes the information for using the On/Off button and making the onboard LED blink Step 7: Integrating the Light Sensors What would an Arduino Mothbot be if it didn't have light sensors? The point of this simple project is to make a robot that is attracted to the brightest light. For this we'll need to integrate some light sensors, also known as photo-resistors. 1. Again, disconnect the power from the servo motors before doing this step 2. The setup for the light sensors will be done twice. It is almost the exact same setup as the momentary switch. Actually, it is the same setup, but this time you will use the light sensor (photo-resistor) instead of a momentary switch. 3. Because this robot will use the two light sensors to pick a direction to drive it is recommended that you set up each light sensor on opposite sides of the solderless breadboard or as far apart as possible. 4. Connect one end of a light sensor to the (+5V) power line and the other end into a small strip in the center of the board. 5. Connect a 10k ohm resistor to that same strip and the other end to ground 6. Now connect a jumper wire from the small strip (where the photo resistor and regular resistor are connected) and plug the other end into an analog input. 7. Connect the left sensor to analog input 0 on the Arduino and the right sensor to analog input 1. 8. You should now be able to use the light sensors to move the servos.   For more detail: The Arduino Mothbot ### Simple Distance Measuring Device In this project we are going to learn how to use the HC-SR04 PING))) ultrasonic sensor to measure distance. This sensor is also often used on robots to detect obstacles. Difficulty level: Easy Time needed: ±10 minutes Step 1: Things You'll Need HC-SR04 PING sensor (x1) Arduino UNO (x1) LCD 16x2 (x1) 9V battery + dc adaptor (x1) Potentiometer 10kΩ (x1) Set of jumper wires Step 2: Plug the PING sensor and LCD HC-SR04 GND (pin 1) to potentiometer (left pin) VCC (pin 2) to potentiometer (right pin) VO (pin 3) to potentiometer (center pin) RS (pin 4) to arduino digital pin 12 RW (pin 5) to potentiometer (left pin) E (pin 6) to arduino digital pin 11 D4 (pin 11) to arduino digital pin 5 D5 (pin 12) to arduino digital pin 4 D6 (pin 13) to arduino digital pin 3 D7 (pin 14) to arduino digital pin 2 Potentiometer left pin to arduino GND right pin ro arduino 5V PING Sensor VCC to arduino 5V Trig to arduino digital pin 7 Echo to arduino digital pin 6 9V battery To arduino DC power socket   For more detail: Simple Distance Measuring Device ### How to Connect and Read a Keypad with an Arduino n this project, we will go over how to integrate a keyboard with an arduino board so that the arduino can read the keys being pressed by a user. Keypads are used in all types of devices, including cell phones, fax machines, microwaves, ovens, door locks, etc. They're practically everywhere. Tons of electronic devices use them for user input. So knowing how to connect a keypad to a microcontroller such as an arduino is very valuable for building many different types of commercial products. At the end when all is connected properly and programmed, when a key is pressed, it show up at the Serial Monitor on your computer. Whenever you press a key, it shows up on the Serial Monitor. Later, in another project, we will connect the keypad circuit, so that it will get displayed on an LCD. But for now, for simplicity purposes, we start at simply showing the key pressed on the computer. For this project, the type of keypad we will use is a matrix keypad. This is a keypad that follows an encoding scheme that allows it to have much less output pins than there are keys. For example, the matrix keypad we are using has 16 keys (0-9, A-D, *, #), yet only 8 output pins. With a linear keypad, there would have to be 17 output pins (one for each key and a ground pin) in order to work. The matrix encoding scheme allows for less output pins and thus much less connections that have to made for the keypad to work. In this way, they are more efficient than linear keypads, being that they have less wiring. Components Needed Arduino 4x4 Matrix Keypad 8 male to male pin header The 4x4 matrix keypad can be obtained from a number of retailers online. It can be purchased at amazon and many other online retailers if you google the part. The type we will use is by an electronic manufactuer called Sunkee. One of the most mysterious things about these keypads is that they usually come with no documentation, so a user is left to figure out the pin configuration for him or herself. However, we at this site, have figured it out. With the keypad facing up so that the keys are up and facing you, from left to right, the 1st 4 pins are the row pins and the last 4 pins are the column pins. When connecting the pins to the arduino board, we connect them to the digital output pins, D9-D2. We connect the first pin of the keypad to D9, the second pin to D8, the third pin to D7, the fourth pin to D6, the fifth pin to D5, the sixth pin to D4, the seventh pin to D3, and the eighth pin to D2. These are the connections in a table: Keypad Pin Connects to Arduino Pin... 1 D9 2 D8 3 D7 4 D6 5 D5 6 D4 7 D3 8 D2 Keypad with Arduino Circuit Schematic This is a visual of how the circuit is when connected up.   For more detail: How to Connect and Read a Keypad with an Arduino ### How to Build a Motion Sensor Light Circuit with an Arduino In this project, we will go over how to build a motion sensor light circuit with an arduino. A motion sensor light circuit is a circuit in which a light turns on when motion is detected. With a PIR motion sensor integrated with an arduino, we can detect movement and program the arduino to turn a light on for a certain period of time once this motion is detected. For example, once motion is detected, we will turn on the light attached to the output of the PIR sensor for 1 minute. This is how most commercial motion sensor lights work. When motion is detected, the light will turn on for about 1 or 2 minutes. If the light turned on and stayed on for only the second that motion is detected, this wouldn't be very useful. When motion is detected by a motion sensor light, it will stay on for at least a period of time, on average 2 minutes, so that it can provide illumination for this time if the person that triggered the sensor stays in the area. Then, after this period of time has elapsed, it will shut off. If the person continues moving in the vicinity of the motion sensor, it will then be triggered again and stay on for 2 minutes again. This cycle will continue as long as needed. Again, this is how most commercial motion sensor lights work. You can decide how long you want the light to stay on once detected for your circuit. You will see how to do this in the code you will write and upload to the arduino board. Parts Needed Arduino Board PIR motion sensor LED USB with type A and B connectors The main electronic component we will use that allows us to pick up this detection is the PIR motion sensor. The PIR motion sensor is a sensor which detects movement through picking up infrared radiation. Being that a person emits infrared radiation, the detector is able to detect this and react, according to the how the circuit is designed to react. The sensor can also pick up the movement of inanimate objects as well, such a rolling ball, because as those objects move, friction acts on them, generating heat. This heat emits infrared radiation, which the PIR sensors may be able to detect if great enough. This motion sensor can be bought at various online retailers. Probably the most reasonable price to get it is from amazon.com at the following link:Amazon- PIR Motion Sensor. The PIR motion sensor is a 3-pin device. Below is the pinout of this device: Pin 1 is the pin which receives the positive DC voltage. The PIR motion sensor needs between 5V-9VDC of power for operation. In our case, we will use about 6V of power. This can be obtained from switching a DC power supply to 6V or using 4 'AA' batteries connected in series. We will then feed this voltage into pin 1 of the PIR module. Pin 2 is the negative DC voltage or ground pin of the device. We connect the negative terminal of the power source to this pin, for a return path. Pin 3 is the Output pin of the PIR module. This is where the output of the PIR will leave from. When motion is detected by the PIR, its output will go high to 3V. When no motion is detected, its output low and it gives off practically no voltage. When high you can see then how it can power the LED will we attach to this pin. This sensor has a sensitivity range up to 20 feet (6 meters) and a 110° x 70° detection range, making it a wide lens detection sensor. This means it can measure 110° vertically (from top to bottom) and 70° horizontally (from left to right). The best way to check its sensitivity is when the circuit is built, try moving around through all of its angles. See at which angles it can detect your movement and at which angles it is not able to detect your movement, meaning your out of its angle scope. A lot of it is trial and error and experimenting. Once you know where it can and cannot detect, you can place it in an optimal place where it can detect in areas where you want it to. Besides this sensor, we need an LED, which we will light when motion is detected. You can use any arduino board. You will need a USB with a type A connector at one end and a type B connector at the other. The type A side connects to the computer you will be using and the type B plugs into the arduino USB slot. This way, we can program and upload software for the arduino board to follow. Arduino Motion Sensor Light Circuit The arduino motion sensor light circuit we will build is shown below:   For more detail: How to Build a Motion Sensor Light Circuit with an Arduino ### Make A Touch-less Switch Using Arduino Arduino Project – Touch Me Not I modified the Arduino project from the Arduino Starter Kit (Touch Sensor Lamp). Now it lights up an LED when your hand is close on the aluminium foil (without even touching it). This can be used as a ‘Touch-less Switch’. I just did it because it seemed pretty cool to me! How is this Arduino project useful? Let me know how you think this can be useful, in the comments below. How does it work? Things Required 1) Arduino Uno 2) 1 LED (any color) 3) A 200 ohm resistor 4) A 1 Mega ohm resistor 5) Aluminium Foil 6) Capacitive Sensor Library (Note: You need to unzip this file and put it inside the Arduino’s Library Folder. If you don’t know how to do that, you may this tutorial) Build the Circuit In the Circuit: * The LED and the 220 ohm resistor are connected to Pin 12 on the Arduino (and of course to the Ground) * The 1 Mega ohm resistor is connected between Pin 2 and 4. * The Aluminium Foil is connected to Pin 2. [If you want to use other Pins then don't forget to change those pins in the code below. I suggest you use the same Pins as shown in the circuit figure above so that you don’t have to change anything in the code]   For more detail: Make A Touch-less Switch Using Arduino     ### Make an Ultrasonic Distance Calculator Arduino Project – The distance calculator I have been playing with Arduino (micro-controller) for about 2 years now and I am becoming more and more passionate about circuits. For those who are not aware of Arduino, check out my article “Arduino – A Guide for Beginners“. Recently, I was testing some new components that I ordered, which included an ultrasonic sensor and an LCD. I found an article online that give an explanation on how to use the ultrasonic sensor (HC-SR04) with the arduino to find a certain distance. I decided to add something new to the Arduino project to make it my own. Therefore, what I did was I added an LCD display that would show the distance between the ultrasonic sensor and the object. The coding was really simple because most of it was used online in other Arduino projects and I just had to modify it a little. I call it the Arduino Distance Calculator. How it Works? Basically, the main components used in this Arduino Project are ultrasonic sensor, LCD display and of course the Arduino to program and control the circuit. The ultrasonic sensor uses echo to measure the time it takes for the echo to bounce back to the sensor after hitting the target. The distance between the sensor and the object is then found by just doing some basic calculations to convert the time and speed of sound. Watch the video below to see a quick demo of the finished project. Components Used: (1) Arduino Nano (Arduino UNO will also work) (2) Ultrasonic sensor (HC-SR04) (3) Liquid Crystal Display (16 x 2) (4) One 220 ohm resistor (5) One potentiometer (6) Breadboard and Wires   For more detail: Make an Ultrasonic Distance Calculator ### Use Arduino to Interface with a Remote Controlled Power Switch Update: check out the RFToy — an easy-to-use standalone gadget to control remote power sockets. Also, support for remote power sockets have been added to OpenSprinkler firmware 2.1.1. For a while I’ve been looking for a way to switch household power line (110V) devices. One of the simplest options is to use a relay that is connected to the power line. This is easy in concept but quite dangerous to work with. You don’t want to accidentally touch the power line wire and shock yourself. A much better option is to use thepowerswitch tail, which insulates the relay and the relevant circuity inside a plastic enclosure, leaving only two MCU pins to interface with. Much safer. But you still have to run wires between your MCU and the power socket. I am more interested in an wireless option. Recently I purchase a set of remote controlled switch sockets from Amazon. It comes with one remote and three sockets, each of which can be individually switched. The whole package is quite cheap. The way this works is that you plug the sockets into the wall, and when you press a button on the remote, the corresponding socket will switch, thus turning on or off the device connected to the socket. I took apart the remote control and found that the circuit is quite simple. It’s based on an HT2262 remote control encoder and a 434 MHz transmitter circuit. In fact, the schematic of the circuit is well documented in the datasheet of the encoder: From the schematic, it’s quite clear that when a button is pressed, the input voltage is fed to one of the encoder pins (as well as the VCC pin of the encoder). Then the encoder will send the signal to the RF transmitter circuit. The RF signal will be received at the power socket side and decoded. Very simple. Now, to use my Arduino to interface with this power switch, all I need to do is to simulate a button press by sourcing a positive voltage to wires labeled SW1, SW2, SW3 etc. It turns out that the HT2262 can work with a fairly wide range of voltage: from 4V to 18V. Clearly the 5V output from an Arduino IO pin falls within the acceptable range. So I can simply connect those wires individually with Arduino I/O pins, and write a program that outputs HIGH momentarily when I need to switch a device. The only downside is at 5V the transmitting range is limited. The higher the input voltage, the longer distance it can transmit. So a more flexible design is to have a ‘source’ driver to supply higher than 5V to the encoder.   For more detail: Use Arduino to Interface with a Remote Controlled Power Switch ### Automated LED stairs using arduino After seeing the lovely LED stairs at interactivefurniture.de, I decided to make my own, open-source version. Here is a video of them in action. I am not an expert videographer and cannot do the stairs full justice, but they came out exactly as I wanted. In this clip I use a very simple lighting sequence without any dimming. However it is easy to program the stairs to do any light sequence desired, with up to 34 LEDs per controller. My build was featured in Make: Online. This is the schematic. I wired it up with perfboard and used screw terminals to connect to the external LEDs and PING sensor. The Eagle schematic file is here and should have the correct footprint for the chips; if you plan to make a PCB version it would need to be edited and checked, as I did not use it for that. My code for the Arduino Processing environment can be found here. You can edit this to add more lights, or to use a different lighting sequence. This code uses the Lightuino source code to drive the M5451 and I am very grateful to have it, as it saved me writing hardware-level code. NOTE: The Ping library here is outdated and uses the BYTE keyword that is no longer supported by recent Arduino releases. I recommend using the NewPing library instead. Materials: Arduino Mini Pro. Any Arduino should work; this was the right size and price for me. M5451 (available at multiple suppliers; use Octopart.) NorthStar 12V LED lights Bell wire rated for indoor use. Get more than you think you need.   For more detail: Automated LED stairs ### Portable Charger for your Smartphone For a long time I've had old back up cell phones taking up space in my desk drawer. I was curious if I could put any of these old phones to some use. I can't just throw them away so I decided to try and re-purpose one of them as a portable charger for my current smart phone. Step 1: Materials Mp1405 5v 1a Lithium Battery Charging Board (Blue board) http://www.amazon.com/gp/product/B00EXGFG42/ref=oh_aui_detailpage_o07_s00?ie=UTF8&psc=1 2. DC 3V to 5V 1A USB Battery Converter Step Up Module (Red board) http://www.amazon.com/gp/product/B00C93Z8JY/ref=oh_aui_detailpage_o06_s00?ie=UTF8&psc=1 3. SAMSUNG OEM EB-L1D7IBA 1850MAH BATTERY FOR GALAXY S II (If you don't own a Galaxy S II) http://www.amazon.com/gp/product/B007PSBELE/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1 4. 4 jumper wires ((2) 1.5 inch wires, (2) 2.5 inch wires) http://www.amazon.com/Pre-formed-140-piece-Jumper-Wire-Kit/dp/B005GYB93M/ref=pd_sim_t_3?ie=UTF8&refRID=1CT2Q151JM4F5PDK7Z1A Tools 1. Soldering Iron 2. Solder 3. Access to a 3D printer Step 2: Circuit for charging portable battery Insert and solder the two 2.5 inch wires to the B+ and B- terminals of the "Mp1405 Charging Board". Each of these wires will be connected to their respective positive and negative contacts on the battery. The "Mp1405 Charging Board" is what will be used to charge the cell phone battery, and will feed power from the battery to the "DC Converter Step Up Module". The Micro-USB connector on the "Mp1405 Charging Board" will be used to charge the internal battery of the portable charger. Step 3: Circuit for charging smart phone from portable battery Using a 1.5 inch wire, connect the OUT(-) terminal of the "Mp1405 Charging Board" to the IN(-) terminal of the Converter "DC Step Up Module". Do the same thing with the OUT(+) and IN(+) terminals. The USB connector on the DC Step Up Module will be used to connect a micro-USB cable in order to charge a smart phone.   For more detail: Portable Charger for your Smartphone ### Control Your Robot Using a Wii Nunchuck (and an Arduino) using arduino After wearing myself out playing Wii Boxing I got to thinking wouldn't it be great if I could use this to control my robot, (looking to my left hand). Looking around the internet I found a bevy of people doing similar things, (links to everyone just below the video). So what follows is a re-packaging of all their hard work, resulting in a robot controllable by both the Wii nunchuck's joystick or more interestingly its accelerometers. A quick video of my Arduino Controlled Servo Robot - (SERB) being controlled by a Wii nunchuck. (resources) (here) - Arduino Code - Chad at WindMeadows.com has written excellent arduino code for reading the Wii nunchuck. Code which I have included pretty much verbatim in this project. if you're interested in more technical details this is where to look. (here) - Nunchuck Details - WiiLi.org has a great wiki about all things Wii, this is a link to a page that describes the nunchucks protocol and how to calibrate your nunchuck. (here) - WiiChuck Adapter - Tod of todbot.com very kindly produced a small adapter to make plugging your nunchuck into a breadboard particularly easy. (similar projects) (here) - Wireless Nunchuck Control - Frank over at Society of Robots went one step further adding a wireless link so he can control his Arduino robot with all the tilt and twist fun from afar. (here) - Nunchuck Controlled Pan and Tilt Camera - Using a Nunchuck and an Arduino to control the pan and tilt of a camera. (here) - Nunchuck and Arduino Controlled Canoe - Finally a rather epic project that uses an Arduino, nunchuck, servos and small trolling motor to drive a Canoe. (if you have an Arduino nunchuck project you've completed drop me a line and it can be added here) (shameless plug) To check out more of our lovely open source projects - oomlout.com Step 1: Parts & Tools Only a few parts to collect before we get wiring and programming Robot - (Arduino Controlled Servo Robot - (SERB) ) ( build your own , or purchase a lovely kit ($175) We use an Arduino Controlled Servo Robot - (SERB) however any Arduino powered dual servo robot will work. Other options (here) Electronics - ($24) Wii Nunchuck - ($20) - (Amazon) , or at your closest Blockbuster or CircuitCity WiiChuck Adapter - ($4) - A small circuit board that allows you to plug your nunchuck into a breadboard without modifying it. (if you don't want to use your nunchuck on your Wii you can save yourself four dollars and simply cut the connector off and plug the wires directly into your breadboard) - (FunGizmos) Assorted pieces of Breadboard wire - (22 AWG solid)   For more detail: Control Your Robot Using a Wii Nunchuck (and an Arduino) ### Control a RepStrap with Processing using arduino This instructable shows how you can use many openly available projects together to build an interesting and complex system. It draws on several community projects including: RepRap, Arduino, Processing, Linux and, of course, Instructables! More specifically this intructable shows how to draw the path of a bouncing ball with a CNC machine. But this is primarly an example of this open source toolchain. The first few steps of this intstructable describe the basic setup I am using and includes links to additional information. This is followed by more specific intructions and code to creaste the drawings. Here is a breif outline of the setup I am using. Setup: Hardware: 1 - RepStrap McWire Carestion Bot 2 - Stepper drivers with firmware from RepRap 3 - PC power supply 4 - Arduino Duemilanove Software: 1 - Arduino IDE on a computer 2 - Processing software on a computer Here are some good books on Arduino and Processing: Programming Arduino Getting Started with Sketches Processing: A Programming Handbook for Visual Designers and Artists **NOTE** 7/2013 -- 3D printing is now pretty popular -- there is now an amazon 3D printing store here Amazon 3D printing store Step 1: The Setup RepStrap This is "McWire Cartesian Bot v1.2" - It is a version of Tom McGuire's CNC machine which has been adapted by The RepRap group for 3D printing. For simplicity, this Instructable is only using the X-Y axis. You should be able to use any X-Y stage that is driven with stepper motors. If you would like to build this exact machine, detailed instructions can be found here (http://reprap.org/bin/view/Main/McWire_Cartesian_Bot_1_2) I believe these were posted by Zach Smith of the RepRap team. Tom McGurie's original instructable is here (http://www.instructables.com/id/Easy-to-Build-Desk-Top-3-Axis-CNC-Milling-Machine/) "Stepper Drivers" These driver boards are also the work of the RepRap team. They are "Stepper Motor Driver V1.2" Designed by Zach Hoeken. Full instructions can be found at http://reprap.org/bin/view/Main/Stepper_Motor_Driver_1_2. These include ports for optical endstops. This is a very nice feature, but I am not using it here. They have new version - Stepper Motor Driver v2.3 which is availble here (http://store.makerbot.com/featured-products/stepper-motor-driver-v2-3-kit.html). SparkFun is stocking a good looking driver as well (http://www.sparkfun.com/commerce/product_info.php?products_id=9402). "Power" The power to the drivers is from a desktop computer power supply. RepRap will also tell you how to do this! http://dev.www.reprap.org/bin/view/Main/PCPowerSupply "Arduino with breakout" This setup is using an Arduino Duemilanove with an Atmega 168 chip. Everything should work with other Arduino's and clones. This breakout is also from RepRap. It is "Arduino Breakout v1.4" also Designed by Zach Hoeken. And available here. http://store.makerbot.com/electronics/pcbs/arduino-breakout-v1-4-pcb.html Spark fun is stocking a nice screw sheild as well (http://www.sparkfun.com/commerce/product_info.php?products_id=9282) "USB cable to PC" The Arduino is connected to a desktop computer with a USB cable. "Software on the PC" I'm running an Ubunto distribution of Linux on my PC, the operating system shouldn't really matter since this project using Arduino and Processing software which is designed to run on most platforms (Linux, Mac, Windows). If you don't already have them, You will need to load the Arduino and Processing software packages. http://www.arduino.cc/ http://processing.org/ Step 2: Build a pen holder Ideally you would have a milling tool or plastic extruder mounted on the Z-axis of your desktop CNC machine. Since I have not built those parts for my RepSrap yet, I am using a Sharpie marker clamped to the Z-axis frame. To build a quick Sharpie holder. Drill a 1/2" hole in through one end of a strip of wood or plastic (approx 1/4?X1.5"X6"). Wrap a bit of duct tape around the Sharpie for traction. Then stick the sharpie through the hold and clip it inplace with two binder clips, as shown below. This holds reasonalby will and can be quickly adjusted. Once you are ready to start "printint" you just clamp the strip of wood to the fram of the Z-axis, or whatever is handy. Step 3: Arduino Wiring: Arduino Wiring: It is important to have stepper motor drivers wired to the stepper motor correctly. In this case, 'correclty' means that the Arduino to Stepper driver connections match the pins called out in the Arduino and Processing Code that follows. Wire the stepper motor to the Arduino like this: X - Driver "Arduino" "What it does" Pin 3 2 Step Pin 4 3 Direction Y - Driver "Arduino" "What it does" Pin 3 10 Step Pin 4 7 Direction This is the same setup used by RepRap.org (http://make.rrf.org/electronics-2.0). So if you have a half built RapRap you are all set! Step 4: Arduino Code "Arduino Code:" This project requires to peices of code. 'Firmware' that is loaded onto the Arduino microcontroller. And 'Software' that is run by the Processing program on the PC. The chain of command goes like this - Processing -> Ardcuino Board -> Steppr drivers -> stepper motors -> X-Y stages. Here is a little more detail of the communication that will be happening, based on my understanding of the way things work.... The Processing software will send commands to the Arduino board over the USB cable. T The Arduino board will take the command and set the specifed output pins to high or low logic states (5V or 0V). The stepper drivers are wired to the Arduino board outputs. So when the drivers see the high and low signals, they send power to the approriate coils in the stepper motors, making them go. The code below sets up the Arduino board to listen for the commands sent from Processing and then take actions. You can cut and paste the code in the Arduino IDE. Then verify the code by clicking the 'Play" button. If there are no errors you can then upload it to the board by pressing the upload button - which looks like a right arrow. // Arduino code: // Read data from the serial and turn ON or OFF a light depending on the value //and control stepper motor on RepStrap char val; // Data received from the serial port int ledPin = 13; // Set the pin to digital I/O 13 #define XstepPin 10 #define XdirPin 7 #define YstepPin 2 #define YdirPin 3 void setup() { pinMode(ledPin, OUTPUT); // Set pin as OUTPUT pinMode(XstepPin, OUTPUT); pinMode(XdirPin, OUTPUT); pinMode(YstepPin, OUTPUT); pinMode(YdirPin, OUTPUT); Serial.begin(9600); // Start serial communication at 9600 bps} void loop() { if (Serial.available()) { // If data is available to read, val = Serial.read(); // read it and store it in val} if (val == 'H') { // If H was received digitalWrite(ledPin, HIGH); // turn the LED on digitalWrite(XdirPin,HIGH); digitalWrite(XstepPin,HIGH); delayMicroseconds(2); digitalWrite(XstepPin,LOW); delayMicroseconds(2);} if(val == 'h') { digitalWrite(ledPin, HIGH); // turn the LED on digitalWrite(YdirPin,HIGH); digitalWrite(YstepPin,HIGH); delayMicroseconds(2); digitalWrite(YstepPin,LOW); delayMicroseconds(2);} if (val == 'L'){ digitalWrite(ledPin, LOW); // Otherwise turn it OFF digitalWrite(XdirPin,LOW); digitalWrite(XstepPin,HIGH); delayMicroseconds(2); digitalWrite(XstepPin,LOW); delayMicroseconds(2);} if (val == 'l'){ digitalWrite(ledPin, LOW); // Otherwise turn it OFF digitalWrite(YdirPin,LOW); digitalWrite(YstepPin,HIGH); delayMicroseconds(2); digitalWrite(YstepPin,LOW); delayMicroseconds(2);} delayMicroseconds(1000); // <<<<<< USE TO CHANGE SPEED <<<<<<<<} Step 5: Processing Code "Processing Code" Here is the Processing code. Open Processing and cut and paste the code. This code is built on an example from the Processing text book written by Casey Reas and Ben Fry. (http://www.amazon.com/Processing-Programming-Handbook-Designers-Artists/dp/0262182629) //This outputs the motion of the bouncing ball to the RepRap X and Y axis import processing.serial.*; Serial myPort; // Create object from Serial class int val; // Data received from the serial port float x= 50.0; float y = 50.0; float speedX = 1.0; float speedY= .4; float radius = 15.0; int timeDelay = 10; //10 ms delay between direction prints gives rocky step int directionX = 1; int directionY = 1; void setup(){ size(100, 100); smooth(); noStroke(); ellipseMode(RADIUS); String portName = Serial.list()[0]; myPort = new Serial(this, portName, 9600);} void draw(){ fill(0,12); rect(0,0,width, height); fill(255); ellipse(x, y, radius, radius); x += speedX * directionX; if (directionX == 1){ //if the direction is up, the motor goes one way myPort.write('H'); print('H'); delay(100); } else { // if the direction is down, the motor goes the other way myPort.write('L'); // send an L otherwise print('L'); delay(100);} if((x>width-radius) || (x < radius)) { directionX = -directionX;} y += speedY * directionY; if (directionY == 1){ //if the direction is up, the motor goes one way myPort.write('h'); print('h'); delay(100);} else { // if the direction is down, the motor goes the other way myPort.write('l'); // send an L otherwise print('l'); delay(100);} if((y>height-radius) || (y < radius)) { directionY = -directionY;}} Step 6: Run the Processing Code "Run the Processing Code:" Confirm that power is OFF to the stepper motors. Run the Processing code by clicking the 'Play' button. You should see: 1 - A display window on the computer monitor showing the ball slowly bouncing around. 2 - The LEDs on the Arduino and stepper boards blinking. The H,h,L,l outputs are printed on the bottom of the screen, they are also sent over the USB cable to the Aduino board. Step 7: Draw! Draw! Now that the path of the bouncing ball is being sent to the Arduino Board, it is time to set up the paper and pen. - Tape a peice of paper to the X-Y platform. - Clip a pen to the Z-axis frame. -Check that the ball is still bouning and the lights are still blining. -Turn on power to the stepper motors! Step 8: Make changes "Make changes:" Now you can mess around with the code to change the behavior of the ball, which will change the comands to the robot and it will draw somehting different. Changing the size of the box will make a bigger drawing. You can also: Change speed Change the X or Y bounce You will probably notice that the steppers are not running very smoothly. I'll post some new code once this is fixed. Alternatives and ideas: -You can do almost this exact instructable using the Arduino "Frimata" library. I don't know if there is much advantage either way. -Ultimately would like to print 3D objects that are generated from Processing. I'd like to print 3D fractals, but I am a long way off for now! Step 9: Making it a little better As I make improvements I am going to add steps to the end of this instructable. 10-11-09 The previus code tracks the ball pretty well but the steppers are driven in a very rocky way. In this updated code, the Proccessing sketch only sends a signal to the Arduino when there is a change in direction.  So the stepper motors just run in whatever direction they were last set to, until they are told to change.    This allows the motors to run alot faster and smoother. But there is still somthing a bit off.  The Arduino seems to miss some of the signals, so the RepStrap ends up with the X-Y stage pushed all the way to one side. I will try to fix this. The Arduino and Processing code is below.  I have added more comments to help keep things clear. ///////////////////////////////////////////////// // Arduino code: // Read data from the serial //Use data to determine direction of X and Y steppers #define XstepPin 10 #define XdirPin 7 #define YstepPin 2 #define YdirPin 3 int val; // Data received from the serial port void setup() { pinMode(XstepPin, OUTPUT); pinMode(XdirPin, OUTPUT); pinMode(YstepPin, OUTPUT); pinMode(YdirPin, OUTPUT); Serial.begin(9600); // Start serial communication at 9600 bps } void loop() { int dirX; int dirY; if (Serial.available()) { // If data is available to read, val = Serial.read(); // then read it and store value in val } if (val == 'H'){        //set the direction of X and Y based on data sent from Processing dirX = HIGH; } if (val == 'L'){ dirX = LOW; } if (val == 'h'){ dirY = HIGH; } if (val == 'l'){ dirY = LOW; } digitalWrite(XdirPin,dirX);    //set X direction digitalWrite(YdirPin,dirY);    //set Y direction digitalWrite(XstepPin,HIGH);      //take steps digitalWrite(YstepPin,HIGH); delayMicroseconds(2); digitalWrite(XstepPin,LOW); digitalWrite(YstepPin,LOW); delayMicroseconds(2); delayMicroseconds(1000); // <<<<<< USE TO CHANGE SPEED <<<<<<<<} //Processing Code: //This outputs the motion of the bouncing ball to the RepRap X and Y axis import processing.serial.*; Serial myPort; // Create object from Serial class int val; float x= 50.0; float y = 50.0; float speedX = 1.0; float speedY= .4; float radius = 15.0; int directionX = 1; int directionY = 1; int old_directionX = 1; int old_directionY = 1; void setup(){ size(100, 100); smooth(); noStroke(); ellipseMode(RADIUS); String portName = Serial.list()[0]; myPort = new Serial(this, portName, 9600);} void draw(){ fill(0,12); rect(0,0,width, height); fill(255); ellipse(x, y, radius, radius); x += speedX * directionX; if((x>width-radius) || (x < radius)) {  //change X direction if the ball hits the side of the box directionX = -directionX;} y += speedY * directionY; if((y>height-radius) || (y < radius)) {  //change Y direction if the ball hits the side of the box directionY = -directionY;} if ((directionX != old_directionX) && (directionX == 1)){ //if X direction changed print H myPort.write('H'); print('H'); delay(100);} if ((directionX != old_directionX) && (directionX == -1)){ //if X direction changed print h myPort.write('h'); print('h'); delay(100);} if ((directionY != old_directionY) && (directionY == 1)){ //if Y direction changed print L myPort.write('L'); print('L'); delay(100);} if ((directionY != old_directionY) && (directionY == -1)){ //if Y direction changed print l myPort.write('l'); print('l'); delay(100);} old_directionX = directionX ;  //stores the directions we just used, as the old direction old_directionY= directionY; delay(100); //uncomment to slow the whole thing down for troubleshooting} Step 10: Doing it with Firmata Here is an alternative approach that uses the Firmata library to change the direction of the stepper motor from Processing. You can learn more about it here: http://arduino.cc/en/Reference/Firmata and here: http://firmata.org/wiki/Main_Page I don't understand the details.  But, from my experience so far, I do know that is  does a good job of handling the communication between the PC and the Arduino.  So, I am happy to ignore the details for now. I have started by modifying an example that is included in theArduinoIDE called "SimpleDigitalFirmata".  Once this code is loaded onto the Arduino,  You can communicate with the digital pins on the Arduino board directly from Processing. In processing I am working from an example that turns on and off an LED on the Arduino board when you move a mouse over a square dawn of the monitor of the PC. To make Processing control the LED and a Stepper motor, you need to modiify the code for the Arduino and Processing. On the Arduino side - I've defined the stepper pins at the top of the sketch.  Then I jammed in code to drive the stepper at the end of the main loop.  I put this outside of the code that reads the serial port.  So the stepper will just go. The direction of the stepper is set directly from Processing.  The example code turned on and off an LED on pin13.  So, I just made the step direction pin do the same thing as the LED. Here is the code.  This only controls the X stepper. ///////////////// ARDUINO ////////////////////// //Supports as many digital inputs and outputs as possible. // //This example code is in the public domain. #include #define XstepPin 10            //Step pin #define XdirPin 7                 //Direction pin byte previousPIN[2];  // PIN means PORT for input byte previousPORT[2]; void outputPort(byte portNumber, byte portValue) { // only send the data when it changes, otherwise you get too many messages! if(previousPIN[portNumber] != portValue) { Firmata.sendDigitalPort(portNumber, portValue); previousPIN[portNumber] = portValue; Firmata.sendDigitalPort(portNumber, portValue); } } void setPinModeCallback(byte pin, int mode) { if(pin > 1) { // don't touch RxTx pins (0,1) pinMode(pin, mode); } } void digitalWriteCallback(byte port, int value) { byte i; byte currentPinValue, previousPinValue; if(value != previousPORT[port]) { for(i=0; i<8; i++) { currentPinValue = (byte) value & (1 << i); previousPinValue = previousPORT[port] & (1 << i); if(currentPinValue != previousPinValue) { digitalWrite(i + (port*8), currentPinValue); } } previousPORT[port] = value; } } void setup() { Firmata.setFirmwareVersion(0, 1); Firmata.attach(DIGITAL_MESSAGE, digitalWriteCallback); Firmata.attach(SET_PIN_MODE, setPinModeCallback); Firmata.begin(57600); } void loop() { outputPort(0, PIND &~ B00000011); // pins 0-7, ignoring Rx/Tx pins (0/1) outputPort(1, PINB); // pins 8-13 while(Firmata.available()) { Firmata.processInput(); } //added stepper sequence to firmata code digitalWrite(XstepPin,HIGH);    //take steps delayMicroseconds(2); digitalWrite(XstepPin,LOW); delayMicroseconds(2); delayMicroseconds(1000); //  <<<<<< USE TO CHANGE STEPPER SPEED <<<<<<<< } //////////////////////////////////Processing///////////////////////////////// /** * Simple Write. < modified to control stepper direction * * Check if the mouse is over a rectangle and writes the status to the serial port. * This example works with the Wiring / Arduino program that follows below. */ import processing.serial.*; import cc.arduino.*; Arduino arduino; //Serial myPort;  // Create object from Serial class // Data received from the serial port int ledPin = 13;              // pin for LED int XdirPin = 7;             // pin for stepper X direction int XstepPin = 10;        //pin for X step void setup() { size(200, 200); // I know that the first port in the serial list on my mac // is always my  FTDI adaptor, so I open Serial.list()[0]. // On Windows machines, this generally opens COM1. // Open whatever port is the one you're using. // String portName = Serial.list()[0]; //myPort = new Serial(this, portName, 9600); arduino = new Arduino(this, Arduino.list()[0], 57600); // v1 arduino.pinMode(ledPin, Arduino.OUTPUT); arduino.pinMode(XdirPin, Arduino.OUTPUT); } void draw() { background(255); if (mouseOverRect() == true) {  // If mouse is over square, fill(204);                    // change color and arduino.digitalWrite(ledPin, Arduino.HIGH);              // LED on arduino.digitalWrite(XdirPin, Arduino.HIGH);            // Stepper direction this way } else {                        // If mouse is not over square, fill(0);                      // change color and arduino.digitalWrite(ledPin, Arduino.LOW);      // LED off arduino.digitalWrite(XdirPin, Arduino.LOW);    //Stepper direction the other way } rect(50, 50, 100, 100);         // Draw a square } boolean mouseOverRect() { // Test if mouse is over square return ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 50) && (mouseY <= 150));} Step 11: Correction to firmata.... It looks like something is wrong in step 10, which is making it so the stepper motor doesn't run. The code below works - but doesn't have as many comments. //////////////////////////Arduino////////////////////////// // Wiring/Arduino code:// simmple digital firmata //Supports as many digital inputs and outputs as possible. //This example code is in the public domain. #include #define XstepPin 10 #define XdirPin 7 #define YstepPin 2 #define YdirPin 3 byte previousPIN[2];  // PIN means PORT for input byte previousPORT[2]; void outputPort(byte portNumber, byte portValue) { // only send the data when it changes, otherwise you get too many messages! if(previousPIN[portNumber] != portValue) { Firmata.sendDigitalPort(portNumber, portValue); previousPIN[portNumber] = portValue; Firmata.sendDigitalPort(portNumber, portValue); } } void setPinModeCallback(byte pin, int mode) { if(pin > 1) { // don't touch RxTx pins (0,1) pinMode(pin, mode); } } void digitalWriteCallback(byte port, int value) { byte i; byte currentPinValue, previousPinValue; if(value != previousPORT[port]) { for(i=0; i<8; i++) { currentPinValue = (byte) value & (1 << i); previousPinValue = previousPORT[port] & (1 << i); if(currentPinValue != previousPinValue) { digitalWrite(i + (port*8), currentPinValue);} } previousPORT[port] = value;}} void setup(){ Firmata.setFirmwareVersion(0, 1); Firmata.attach(DIGITAL_MESSAGE, digitalWriteCallback); Firmata.attach(SET_PIN_MODE, setPinModeCallback); Firmata.begin(57600);} void loop(){outputPort(0, PIND &~ B00000011); // pins 0-7, ignoring Rx/Tx pins (0/1) outputPort(1, PINB); // pins 8-13 while(Firmata.available()) { Firmata.processInput(); } //added stepper sequence to firmata code digitalWrite(XstepPin,HIGH);    //take steps digitalWrite(YstepPin,HIGH); delayMicroseconds(2); digitalWrite(XstepPin,LOW); digitalWrite(YstepPin,LOW); delayMicroseconds(2); delayMicroseconds(1000); //  <<<<<< USE TO CHANGE STEPPER SPEED???? <<<<<<<<} /////////////////////////////PROCESSING////////////////////////////////////// * Simple Write. * * Check if the mouse is over a rectangle and writes the status to the serial port. * This example works with the Wiring / Arduino program that follows below. */ import processing.serial.*; import cc.arduino.*; Arduino arduino; //Serial myPort;  // Create object from Serial class // Data received from the serial port int ledPin = 13; int XstepPin = 10; int XdirPin = 7; void setup() { size(200, 200); // I know that the first port in the serial list on my mac // is always my  FTDI adaptor, so I open Serial.list()[0]. // On Windows machines, this generally opens COM1. // Open whatever port is the one you're using. // String portName = Serial.list()[0]; //myPort = new Serial(this, portName, 9600); arduino = new Arduino(this, Arduino.list()[0], 57600); // v1 arduino.pinMode(ledPin, Arduino.OUTPUT); arduino.pinMode(XstepPin, Arduino.OUTPUT); arduino.pinMode(XdirPin, Arduino.OUTPUT); } void draw() { background(255); if (mouseOverRect() == true) {  // If mouse is over square, fill(204);                    // change color and arduino.digitalWrite(ledPin, Arduino.HIGH);              // send an H to indicate mouse is over square arduino.digitalWrite(XdirPin, Arduino.HIGH); //arduino.digitalWrite(XstepPin, Arduino.HIGH); //delay(1); //arduino.digitalWrite(XstepPin, Arduino.LOW); //delay(1); } else {                        // If mouse is not over square, fill(0);                      // change color and arduino.digitalWrite(ledPin, Arduino.LOW);      // send an L otherwise arduino.digitalWrite(XdirPin, Arduino.LOW); //arduino.digitalWrite(XstepPin, Arduino.HIGH); //delay(1); //arduino.digitalWrite(XstepPin,Arduino.LOW); //delay(1); } rect(50, 50, 100, 100);         // Draw a square } boolean mouseOverRect() { // Test if mouse is over square return ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 50) && (mouseY <= 150));} Step 12: Corrected and commented Here is a third pass at the Firmata code. This should work and includes comments. ///////////////// ARDUINO ////////////////////// /* Supports as many digital inputs and outputs as possible. * #define XstepPin 10            //Step pin #define XdirPin 7                 //Direction pin byte previousPIN[2];  // PIN means PORT for input byte previousPORT[2]; void outputPort(byte portNumber, byte portValue) { // only send the data when it changes, otherwise you get too many messages! if(previousPIN[portNumber] != portValue) { Firmata.sendDigitalPort(portNumber, portValue); previousPIN[portNumber] = portValue; Firmata.sendDigitalPort(portNumber, portValue); } } void setPinModeCallback(byte pin, int mode) { if(pin > 1) { // don't touch RxTx pins (0,1) pinMode(pin, mode); } } void digitalWriteCallback(byte port, int value) { byte i; byte currentPinValue, previousPinValue; if(value != previousPORT[port]) { for(i=0; i<8; i++) { currentPinValue = (byte) value & (1 << i); previousPinValue = previousPORT[port] & (1 << i); if(currentPinValue != previousPinValue) { digitalWrite(i + (port*8), currentPinValue); } } previousPORT[port] = value; } } void setup() { Firmata.setFirmwareVersion(0, 1); Firmata.attach(DIGITAL_MESSAGE, digitalWriteCallback); Firmata.attach(SET_PIN_MODE, setPinModeCallback); Firmata.begin(57600); } void loop() { outputPort(0, PIND &~ B00000011); // pins 0-7, ignoring Rx/Tx pins (0/1) outputPort(1, PINB); // pins 8-13 while(Firmata.available()) { Firmata.processInput()} //added stepper sequence to firmata code //digitalWrite(XdirPin,HIGH); digitalWrite(XstepPin,HIGH);    //take steps delayMicroseconds(2); digitalWrite(XstepPin,LOW); delayMicroseconds(2); delayMicroseconds(1000); //  <<<<<< USE TO CHANGE STEPPER SPEED <<<<<<<<   For more detail: Control a RepStrap with Processing ### Make a wall avoiding Robot! using arduino Objective: To create from scratch a working robot that is able to avoid walls and obstacles. Ever wanted to make a robot that could actually do something, but never had the time or knowledge to do it? Fear no more, this instructable is just for you! I will show you step by step how to make all the necessary parts, and programs to get your very own robot up and running. I was first inspired to build a robot when I was ten, and saw Lost in Space, with that famous B-9 robot, I wanted one! Well six years later I finally built a working robot, its name- Walbot of course! Step 1: Gathering supplies Now is a good time to order and collect some of the things you will need for this project. The "brain" of Walbot is a Microcontroller by Atmel called the Atmega168, it is very fast, easy to use and cheap, so that is what I will be using in this project. If you prefer to use PIC, or other Microcontrollers thats fine, however I can't help you out with the code then! Since I did not feel like wasting my time building a prototyping board for the Atmega168, I bought the USB Arduino; it is very easy to use, supports USB, has the boot-loader already burned in, quite cheap, and has free programming software that is similar to C++. Well enough of that talk, let's get on with what you will need! note: these are only the prices I found from a quick search, if you look harder you probably will find better prices somewhere else, also the DIgiKey links might be broken or timed out, just search for the part description and whatever price matches the one listed here. Parts: Arduino USB board - $34.95 LV-EZ1 Ultrasonic Rangefinder- $25.95 2X 54:1 16mm Spur Gearmotor, FF-050- $13.80 2XPack of 4 Energizer NiMH AA Batteries- $4.85 9Volt Energizer NiMH Battery- $8.99 2X3mm Aluminum Bearing Block- $3.50 2X 3xAA battery holder (DigiKey part # SBH-331AS-ND - $0.98 2.1 x 5.5 x 9mm Right angle DC Power Plug - $0.95 2X Noise Suppression Capacitors - $0.50 L298 double full H-Bridge - FREE SAMPLE! 12"X12" sheet of 1/4" Lexan polycarbonate - $16.36 3X Aluminum 1" 8-32 standoffs - $0.45 4X 2-56 X 1/4 BUTTON CAP SCREW - $0.37 BOX of 100 4-40 X 3/8 BUTTON CAP SCREWS - $5.40 3X 8-32 X 3/8 BUTTON CAP SCREWS - $0.29 Neoprene Foam Tire - 3"D x 0.75"W (pair) - $5.36 Mounting Hub - 3mm (pair)- $8.00 9Volt battery clip (DigiKey part # 234K-ND) Break Away Headers - $2.95 2 red 2 green and 1 yellow 3mm LED - $2.20 total 4X 1N5818 SCHOTTKY Diode (DigiKey part # 1N5818-E3/1GI-ND) - $0.15 2X 47k and 2X 2.2k and 1X 10k resistirs (digikey part #'s P47KBACT-ND and P2.2KBACT-ND and P10KBACT-ND) - $0.34 Ping Pong ball or other small low friction sphere for a caster- Free???? Custom order Arduino circuit shield see step 4 Optional / If your a complete beginner: 22AWG High Strand Count Silicone Wire Combo Pack - $16.80 Polarized Connectors to make things look neat, you will need crimp pins, 4X 2 pin header and housing, 4 pin header and housing - $6.45 Velcro for sticking things to base Tools these are the suggested tools to have for this project, you could either buy borrow or use something else you have for the same purpose. Bandsaw for cutting the Lexan base and various parts. Drill Press for drilling straight holes in Lexan base. Tap and Die set for tapping holes in the Lexan base. Good soldering iron for soldering various parts on the robot. Digital Multimeter for debugging electrical components. Wire strippers Needle-nose pliers for gripping and crimping the connectors Step 2: Making the Base Alright, now that you have gathered all the necessary parts required to build Walbot it's time to get started. First of all, I must warn you that the use of various power tools will be necessary, I will not go into the proper use of operating them safely as I assume you already know how to do this; I take no responsibility for any stupid mistakes, like cutting off your finger on the bandsaw, that you make. You have been warned! To start off, I have done most of the work for you! YAY. That would include a couple months of resaerch and design for this project, which should be done for any robot you plan to build your self after this. I made a scale 3D model of Walbot in a free program called SketchUp by Google (thank you Google), you can download my model of walbot from Google 3D warehouse here (note: there might be some differences in the motor type and some of the components are missing like the circuit shield on top of the Arduino, wires... I will update the model when I have time). Step 1: Download the Word document of the cutting and drilling guide here, and print it out. Once it is printed make sure that it is 6" wide by 5.5" long. Now cut off the extra bottom half of unprinted on paper so that you have a template thats about 8 1/2" by 6", and using some kind of adhesive or semipermanent glue or double stick tape, mount both the templates on the Lexan sheet. Step 2: Cut out the Lexan base with the bandsaw, following the template line as closely as possible. To make it easier, cut little relief slit along the perimeter to free up the area you are working on without having to worry about the blade binding up. When your finished, you can use some sand paper to smooth out the edges if your cuts did'nt come out perfect. Step 3: Over at the drill press, use a #29 drill to make the holes for the 8-32 standoffs, and a #43 drill to make the holes for the 4-40 screw size motor bearing blocks and standoffs for the Arduino. When drilling be sure to use a little WD-40 or water as a lubricant to keep the polycarbonate (Lexan) cool. Optional: it is not on the template, but to make things neater, if you have a large 1" forstner bit or other big drill bit, it is useful to drill a hole right where the two lines cross on the TOP layer. This allows an area to channel wires from the top layer to the bottom layer. I did it on mine and that is what you will see in the picture, but it is not necessary. Step 4: Using the 4-40 tap you bought in the set, carefully tap the holes that you drilled with the #43 drill. Then using the 8-32 tap do the same for the 3 holes you drilled for the standoffs with the #29 drill. If you do not know how to thread materials with a tap, learn how to here. I use a cordless drill, but it is not recommended if you are just a beginner. Step 5: Using goo gone or other adhesive remover, remove the drilling and cutting templates and wash the lexan free of all fingerprints and grease. Step 3: Assemble the robot Now it is time to put together the robot, using the stuff we bought earlier and the bases you made last step. Step 1: Screw the 8-32 one inch standoffs onto the 3 holes that you drilled and threaded. In the picture I temporarily put caps on the ends of the standoffs because they are too long, but I recommend that you cut them off with like a Dremel tool. Step 2: Place the top Lexan base on the standoffs, and using the 8-32 screws you got, attach the top to the standoffs. Note: trying to thread metal screws into plastic can be hard, to make it easier, rub a little paraffin (candle) wax on the threads and they should go in smoothly. Step 3: Now would be a good time to solder leads and capacitors to the motors, go here to find out how to solder capacitors to the motors. Step 4: Attach the bearing blocks to the motors using the 2-56 screws you got. Make sure to use the 2 horizontal holes so that the wheels will be aligned parallel to each other (if you put the screws vertically the gearhead can wiggle back and forth just a little bit, but enough that it could make it not go straight). Step 5: There should be enough room to stand the bearing blocks up vertically and slide/wiggle them into place between the top and bottom layers. Now mount them in place by inserting and screwing in all the 4-40 cap screws into their respective holes. Step 6: Now take the LV-MAX Sonar module and solder 4 wires onto it, through the AN, RX, +5, and GND holes. Now find or make a 90 degree mounting bracket for it. I used a leftover piece of Lexan, cut a strip 1" by 2", heated it in a little oven until it was pliable and bent a 90 degree angle in the middle. Then you can either drill some more holes in the bracket, corresponding to the mounting holes in the Sonar module, to mount it; or you can just use some double sided sticky foam; or use Velcro to mount it to the bracket, and the bracket to the robot base. Step 7: For my Walbot I used old Cpasella wheels and had custom hubs made for them on a lathe. So that means if you get the wheels and hubs from the parts list, your robot will look a little different. If you can find/make lighter wheels with a 3mm bore, I encourage you to do so. Anyway, take the wheel and mount the hub to it with the screws they provide, and then attach that to the 3mm motor shaft using superglue or epoxy. Step 8: Mount the Arduino board to the top base using the 4-40 screws. If you can get some short 4-40 standoffs that would be best to use, if not just use some washers or a small straw section to raise it off the top base a few millimeters. Step 9: Attach the 9Volt battery and 2 AA battery holders to their respective places using Velcro. I use Velcro because it is strong yet still allows you to remove them when they need to charge up. The 9Volt should be mounted on the top level in front of the Arduino. The 2 AA battery holders should go behind the motors ( just look at the 3D model in SketchUp to see where everything goes). A quick note on the batteries, make sure that you use 1.2volt AA rechargeable cells (most rechargeable NiMH are 1.2V), if you use standard 1.5volt alkalies that could dammage the motors because they are not rated for 9 volts (6batteries * 1.5 volts =9 where as 6*1.2= 7.2 volts) Step 10: Time to add the "third wheel" AKA caster AKA half of a ping pong ball or other slick-surfaced sphere thats about the same size as a ping pong ball. Take either of the two things mentioned above and split it in two, you can use your favorite splitting tool be it hacksaw or guillotine... Now all thats left is to fill it with something like hot glue (thats what I used) and stick it to the bottom layer base. You can make out in the picture where I put mine, it doesn't matter really just as long as it provides support for the other two wheels. Step 11: Pat your self on the back, you're doing a good job, and you're more than half way through. On to the electronics!   For more detail: Make a wall avoiding Robot! ### PUPPET CONTROLLER using arduino Three kinds of motion:  Human, Mechanical,  Animation.  Blend them together to build a puppet controller for the real and virtual world. Or, Pacman - three ways. This Instructable includes: - Using an adjustable resistor as input to the Arduino Micro-controller - Controlling two servo motors from the Arduino -Controlling animation on the computer from the Arduino Here are the basic steps: - Servo control with Arduino and potentiometer - Replace potentiometer with a flexible sensor - Create animation on the computer screen - Setup communication between the computer and Arduino - Mount everything in a usable way and test it out! Here is a good book for learning arduino: Programming Arduino Getting Started with Sketches Here is an arduino starter kit on amazon: Starter Kit for Newsite Uno R3 - Bundle of 6 Items: Newsite Uno R3, Breadboard, Holder, Jumper Wires, USB Cable and 9V Battery Connector Step 1: Servo Code for Arduino Basic setup to controll a motor with Arduino based on input from a sensor. Parts: 2 servo motors Arduino board ( i have a screw shield on it, but that is not critical) Potentiometer (this one is 0 to 100Kohm) Jumper wires Pipe cleaners (for show). 1 - Wire the servo motors.  These are special motors, you can input an angle and the motor will do it.  The servos have three wires: Power (red, 5V)  - Ground (black)   - Yellow (communication - angle info goes in here). In this setup: Red goes the Arduino 5V,  Black goes to Arduino Ground, Yellow will go         to specific input/ouput pins on the Arduino. Servo 1: Yellow -----  Pin 9 Servo 2: Yellow   -----pin 10 2 - Wire the potentiometer This has three leads. Lead 1 ----- 5V Lead 2 ----- Pin 0 Lead 3 ------ Ground 3 - Code - The code below is from the Arduino example for servo motor control.  It includes the servo library, which makes it easy to communicate to the servo. This also maps (scales) the input from the pot into an angle (in radians) for the servo motor.  We want the two motors to go in opposite directions.  To do this I've translated the the low pot values to the high angle values. You'll lnotice there are some references to 'serial'  - this stuff lets you send data from the Arduino over the USB to the computer.  You can then view the values, this is useful. NOTE: The instructables editor drops the line to include the servo motor. It should be like this: #include < Servo.h >; //use servo library Step 2: Add a flex sensor The pot works well, but it is not much fun. So you can swap it out for different sensor.  I'm using a flex sensor from instructables.  The sensor changes resistance as it is bent.   It is from [##REF##]. The flex sensor is hooked up like this: 5V---------- | Pin 0----- 100K ------ One end of flex sensor--------- |                                                                    | |                                                                  Flex Sensor |                                                                    | Ground-------------------other end of flex sensor----- The resistor value depends on the resistance of the sensor.  It should be in the same ballpark as the max resistance of the sensor.  You'll also have to tweak the code mapping the input values to the servo angle. Look for this line of code: val = map(val, 40, 350, 90, 179); // scale it to use it with the serv Replace potentiometer with the flex sensor -Adjust Analog input values so everything works right with the flex sensor.  It is okay to guess a little -Here's the updated code ////////// Arduino Code /////////////// // Controlling a servo position using a potentiometer (variable resistor) // by Michal Rinott //MPC - added serial output 'n stuff // With flex sensor // -Tweak Val to Angle Map Here is the wiring: Wiring - Flex Sensor |------Arduino Gnd Flex Sensor |------Analog 0 100K |------Analog 0 100K |------Arduino 5V | Yellow ------ Digi 9 (PWM) Top servo | Red -----------5V | Brown -------Gnd | Yellow ------ Digi 10 (PWM) Bottom servo | Red -----------5V | Brown ------ #include Servo myservo; // create servo object to control a servo Servo otherServo ; int potpin = 0; // analog pin used to connect the potentiometer int val; // variable to read the value from the analog pin int valComp; void setup(){ myservo.attach(9); // attaches the servo on pin 9 to the servo object otherServo.attach(10); Serial.begin(9600);} void loop() { val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) Serial.println(val); valComp = analogRead(potpin); Serial.println(val); val = map(val, 40, 350, 90, 179); // scale it to use it with the servo (value between 0 and 180) valComp = map(valComp, 350, 40, 0, 90); //other servo does oposite myservo.write(val); // sets the servo position according to the scaled value delay(15); otherServo.write(valComp); delay(25); // waits for the servo to get there} Step 3: Mouth on computer screen Now lets make a 'virtual' version.  This will show an animated 'mouth' on the computer screen.  For now I just want to get something working, so this code uses the X value from the mouse to determine the angle of the mouth opening.  Latter we'll jam the value form the flex sensor in here. This uses Processing (from www.processing.org) //PROCESSING CODE //pacman moouth opens/close with X input from mouse float x = 0; float val = 0; void setup(){ size(200,200); background(100); smooth();} void draw(){ background(100); //clear last image val = mouseX; x = map(val,0,200,0.01,0.3); //translate values input to useful values println(x); arc(100,100,50,50,(x)*PI,PI+(1-x)*PI); //draw packman, using radians... p21}   For more detail: PUPPET CONTROLLER ### How to Build an Arduino Powered Chess Playing Robot using arduino Judging by the sheer number of chess related Instructables, I think it's safe to say the community enjoys the game.  It can be difficult, however, to find someone who plays on the same level you do.  To solve this dilemma, and to increase my playing skills, I built this arduino powered chess playing robot. The board works like any other xy table, with a few key differences.  First, the x axis has an extra servo attached to it, which raises and lowers a magnet.  The magnet is attracted to pieces on the chess board above, allowing them to move.  Second, embedded in the board are 64 magnetically activated reed switches, allowing the arduino to know the location of each piece. What I love about this project is its adaptability.  If you decide you're done with it as a chess board, it can instantly convert into a CNC mill by modifying a few pieces.  I'll talk more about this possibility at the end. All in all, though I learned a lot from this project and had fun building it, the board was not as successful as I had hoped.  The magnets were way too powerful, so extra pieces would almost always drawn in when they shouldn't have. However, with a few thoughtful changes I think this could have been a better, more functional project.  Until I build another, better board, though, I think this Instructable still serves as a pretty good guide to make your own chess robot. Step 1: Parts and Materials 1 Arduino Mega This is the most expensive item in the project.  It'll be dealing with the inputs from each chess square to let the computer know where you've moved.  We're using the mega here due to its speed and number of inputs.  Adafruit $65 1 Mux Shield The mux shield (short for multiplexer) gives us even more inputs for our arduino mega.  We'll need 64 inputs in total, one for each square.  Sparkfun $25 Motor Shield The motor shield will be controlling our stepper motors and servo.  You'll need to solder it together.  Adafruit $19.50 1 Large chess board with pieces This one is a little more self explanatory.  We want a large chess board here because the pieces need to be able to move in between each other with disrupting others.  Make sure you measure the diameter of the bottoms of the pieces.  We'll need that in a moment.  I'm not sure where mine is from, but you can pick them up from a flea market for a bargain.  The playable area of my board is 24". 64 NO Reed Switches Reed switches are magnetically activated switches.  They'll help us find the location of moved pieces.  NO stands for normally open, that is, the circuit is disconnected   Digikey ≈$30 16 10K 1/4 Watt Resistors These are the pull up resistors for the built in digital pins.  The mux shield, luckily, has integrated pull downs, so we don't need to worry about those. Digikey ≈ $2 Roughly 90 feet of 30AWG Wire This is the hookup wire for all of our sensors. Radioshack ≈ $16 Neodymium Magnets to fit your pieces This is where the measurements from the bottoms of your chess pieces come in handy.  You'll need disc magnets to fit underneath each piece.  For proper strength, they should be about 1/8" think.  A great source for these is K&J Magnetics.  ≈ $55 1 Large Neodymium Magnet Note: This was Waaaay too powerful.  It would draw in pieces it shouldn't have.  You'd be better off going with some smaller ceramic magnets, like you'd find at Staples or another office supply store. 2 Pairs of 24" Drawer Bearings The size of your bearings will depend on the playable area of your chess board.  These allow for the stepper motors to move back and forth underneath the board. Amazon ≈ $30 2 Stepper Motors Stepper motors can move in very precise increments.  In the late 90s they were in just about every piece of tech you could find.  The best place to get these are in old dot-matrix printers.  You can them at the flea market for next to nothing! 2 Vex Rack and Gear Sets The rack gears allow the stepper motors to travel on the drawer bearings.  See the Step 4 for a more detailed explanation.  Vex Store $40 1 Standard Hobby Servo This servo will be raising and lowering the powerful magnet below the board. You can find them at a hobby shop for ≈ $10, or Amazon ≈ $12 1 2' x 2' Perf Board The perf board is super thin and will be the mounting surface for all of our reed switches.  The price will vary greatly on this one, but I got mine from Home Depot for ≈ $5 1 2' x 2' x 1/2" MDF Board Similar to the perf board, I got this from Home Depot for  ≈ $5 Various lengths of scrap 1"x2" wood This wood forms the bridge between the X-Axis drawer bearings.  Go behind any hardware store and you'll see dumpsters full of this stuff for totally free! 5 Minute Epoxy This stuff is a godsend.  It's used for just about everything in this project, from mounting motors to attaching the rack gears.  I'm in love -- and  I picked mine up from Radio Shack for $3 1 Wood Saw You probably already have this one, but if you don't, I picked mine up at Ace Hardware for $10 a couple of years ago. Step 2: Design and Code Explanation That parts list is a bit scary if you're not sure what everything is going to do, so here's how many of the pieces will be used. You can see in the images below that each stepper motor can move freely about its axis thanks to the drawer bearings.  On the Y Axis, each rail is connected with the wooden structure, so that the X Axis may sit atop it. Also on the X Axis is the servo that raises and lowers the powerful magnet, so that it may position itself before moving pieces. Feel free to download the sketchup file and mess around if you're not sure of anything. Another interesting element of this design is how to code talks with the arduino and motors.  We need to address each square as a set of coordinates so that we may find slope and distance, however the traditional method of labeling squares A1, A2, etc. doesn't work particularly well in code.  Standard (x,y) coordinates are much friendlier.  Those coordinates, however, need to be in the form of a single number.  What I ended up doing is assigning each square to a number, as you can see in image #3.  Those numbers don't really work as coordinates on an 8x8 chess board, however, because we use a base 10 number system. To solve that issue, we take the base 10 number of each square and convert it to base 8 using the modulus operator in C.  27, for example, is 33 in base 8, with the first digit being the x coordinate and the second the y.  If you count over three squares and up three squares, voila! You end up on square 27.  This converted coordinate system ends up looking like image #4. Step 3: Mounting the Drawer Bearings (Y Axis) The drawer bearings are what allow the axes to move in their respective direction.  The mounting instructions may vary slightly depending on the brand, but usually it's as simple as driving a couple of screws. The only reason I've made this its own step is that aligning the bearings perfectly is key.  Should you fail to do this, and they both point slightly outwards, they'll stop at some arbitrary point and refuse to move once you connect them.  Save yourself a lot of trouble and use something you know is square as a reference for alignment.  The corner of a book is perfect. Step 4: Building the Motor Mount (Y Axis) The stepper motors we'll be using have fantastic torque, but are circular.  This means mounting them to our bearings later on will be nearly impossible, unless we build a square mount.  To build one, find a hole saw with a similar diameter to your motor.  You'll want to use a drill press rather than a portable drill for this, so I borrowed my school's. Once you've cut the hole, slice the circle in half to get two mounts.  This chipped the tips of my semicircle, so I used some 220 grit sandpaper to clean up the edge. My steppers came with mounting screw holes, which line up well with the wooden frame.  I used the smallest screws I could find.  Mine fit so well that it wasn't necessary, but you might consider adding a bit of epoxy to strengthen the bond. Step 5: Installing the Rack Gears (Y Axis) The rack gears are what allow the motor to latch onto a surface to pull itself along.  Your physics teacher probably defined them as a way to convert rotational energy to linear. Again, we use the epoxy to attach the gears onto the MDF.  In addition to heavily applying epoxy to the board itself, make sure some is spread on the side of the drawer bearing, that way there is stability in two dimensions.  Do your best to prevent epoxy from getting in places it shouldn't be -- you may gum up your motor. It works out that the rack gears extend a little bit off of each end.  This is a good thing -- it enables the gear to travel the full length of the board without running off.  The stepper motor will be offset just enough that if the gears only covered the board's length the whole motor assembly would get stuck at one end. Also install the circular gears onto your motor at this time.  Mine had a set-screw, but you may wish to use some JB weld to hold your gear in place.  If you go that route, the joint needs to fully cure before you try to use it, or you risk the gear popping off! Step 6: Wiring and Mounting the Motor (Y Axis) The leads that come attached to the stepper motors are very short.  Because the Arduino is mounted off the board, the wires need to be at least the length of one side.  That made mine about 2' 5" long.  Heat shrink tubing is your friend here -- we're using enough power that it might arc if you're not careful. If your stepper motor has 5 wires, you're all set.  If there are 6, however, it means you have to connect your center taps.  Jason Babcock has a great tutorial on reverse-engineering your motors.  In my case, however, the wires were the same color. After extending the wires, the center taps go into the center of one of your motor hubs.  The wires from one coil go to one terminal on the motor shield, and from the other coil to the other terminal.  At this time we also hook up our 24v 1A power supply to the motor shield.  If you get the polarity wrong on this, your motor shield is toast. After trimming the motor mounting block to about 4 inches, it's time to attach it to our bearings.  Mix up the epoxy, and liberally apply it to the area of the bearing the block will touch. Also, if you have any pets, be sure to animal-proof the room you're working in.  Cats seem to have an affinity for knocking over things that are drying.   For more detail: How to Build an Arduino Powered Chess Playing Robot ### AlarmingTweet Using Arduino This project will add tweeting capabilities to the GE 45142 Choice-Alert Wireless Control Center Alarm system. The alarm system allows you to connect up to 16 different sensors across 4 zones and with the addition of the Arduino powered Alarming Tweet you can enable it to keep you informed of it's status anytime anywhere. Originally I was thinking about building a motion detecting sensor system from scratch for the Adafruit Make it Tweet contest, but after thinking about what I would need to assemble to build it I figured there must be an easier solution. I started looking around for pre-built home security sensors etc... when I stumbled upon the GE Choice-Alert Wireless alarm system. I figured why not let it do all the heavy lifting of monitoring the sensors then I only need to figure out a way to make it tweet. Since the LEDs indicate the status of the sensors and alerts all I really needed was a way to monitor them and then send the results to Twitter. If this sounds interesting keep reading to find out how to build one yourself. Before we get started lets go over the material we will need: 1 x GE 45142 Choice-Alert Wireless Control Center with Door or Window Sensor Kit from Amazon, Lowes or Home Depot ($30 -$40) - Comes with a single magnetic sensor for doors/windows many other sensors can be added ($15-$25 each) 1 x Arduino UNO from Adafruit ($30) 1 x Arduino Ethernet Shield from Adafruit ($45) 1 x 9V regulated DC wall-power adapter from Adafruit ($7) 1 x Arduino Project Enclosure from Sparkfun ($12) 1 x Right Angle Male Header strip from Sparkfun ($2) Length of Cat 5 cable Heat shrink tubing Happy building, willnue Step 1: Open the Control Center case Remove the 4 screws holding the Control Center case together then remove the 2 screws holding the circuit board onto the case. Be careful not to pull of the antenna or speaker wires. We are interested in the LED leads protruding from the bottom of the circuit board.   Step 2: Prepare the Control Center From my testing it appears the Control Center sends roughly 3.3 volts to each LED continuously on the anode and then sinks the current on the cathode when it wants to light up the LED. To read the state of the LED we will connect a wire to the anode and monitor it using an Analog pin on the Arduino. When the LED is not lit we will read about 3.3v and when it is lit we will read little < 0.5v or no voltage as the current sinks through the LED. Once the case is opened we need to solder 7 wires onto the Control Center circuit board. 1 wire for each of the 6 LEDS and 1 for  ground. For the LEDs we are going to solder the wires onto the pin of each LED that is farthest away from the edge of the circuit board. Be careful not to bridge the connection between the two pins when soldering. For the ground we will need to flip the board over and solder it to the outer pin of the barrel jack. Try to keep the wires as short as possible and route them along the edge of the board to the side with the antenna. After soldering, drill a hole through the back of the case and feed the cable through as shown. It's helpful to write down which wire is connected to which LED. Note: The white residue on the board was present from the factory.   Step 3: Connect the Arduino Slide some heat shrink tubing over the cable then break off a row of 6 right angle headers and solder the 6 LED wires to them. Once soldered cover the wires with hot glue for insulation then add and shrink some additional tubing to cover. This will provide a good solid connecter for plugging into the Arduino. Be careful when shrinking over the hot glue as it will remelt if it gets too hot. Repeat the same process for the ground wire with a single header then slide the heat shrink tubing up the cable shrink everything together. Since the Arduino project enclosure doesn't really allow for much to be added above and beyond the Ethernet shield we need to make a few modifications to it. We need to remove the 6 female header block from the analog pins and also clip off one of the GND pins. Once completed plug in the Control Center cable and stack the Ethernet shield on top.   Step 4: Close up the cases Insert the Arduino and Ethernet shield into the enclosure and mark the location for the cable to exit on the top cover then cut out a space for the cable to run through when the lid closes. Once done add the lid to the enclosure. The Control center should now rest on top of the Arduino enclosure at roughly a 45 degree angle and still be solid to handle. If the cable isn't providing enough support you may want to hot glue the two together. Step 5: Configure ThingTweet Unfortunately since Twitter has switched to OAuth authentication getting an Arduino to send tweets directly to Twitter from an Ethernet shield has become much more difficult than in the past. For the time being it seems the easiest way to circumvent the issue is to use a proxy between the Arduino and Twitter. The good news is using a proxy allows for better control on the Twitter side and simplifies the code required on the Arduino quite a bit. For my project I chose to use ThingTweet from ThingSpeak as the proxy between my Arduino and Twitter, mostly because I already had a ThingSpeak account and enjoy the service. Getting the Arduino to send it's first tweet took me only a few minutes to implement with ThingTweet. To get set up yourself check out the great Update Twitter with ThingTweet and Arduino + Ethernet Shield tutorial the ThingSpeak team created, which also includes a sample Arduino sketch. Note: The code in the next step is based on ThingTweet, but it should be easily updated for any Twitter proxy.   For more detail: AlarmingTweet Using Arduino   ### Arduino ArduRoller balance bot Caveat Emptor: (I don't want to put you off building one but I also don't want you to be disappointed.)  This Instructable is now 2 years old.  Many of the parts it uses are out of date (there's no drop-in replacement for the now-discontinued gyro, for example) and I've had reports that the code is hard to compile.  If you're not comfortable with the principles behind the electronics, code and the math's involved in PID control then you probably shouldn't attempt to build one.  Also, it's a tricky project to debug once built so it's really not a good first project.  If you're not happy to spend 2 days watching your bot list, jiggle, zoom across the room and fall over before you get it to balance then steer clear! This instructable shows how I built my ArduRoller balance bot. It balances quite well on the spot and responds to most knocks pretty quickly but sometimes giving it a more gentle push sends it gliding across the room at a constant speed. I'm still working on that. There's a video of the bot in action at http://www.flickr.com/photos/fasaxc/5944650602/. Step 1: Parts Here are the parts I used: 1 x Arduino Uno 1 x Sparkfun Ardumoto motor driver shield 1 x Sparkfun BlueSmirf Bluetooth modem 1 x 150 degree/s gyro 1 x 1.7g Accelerometer 2 x Arduino header kits 2 x screw terminals 2 x 24:1 gear motor 1 x set of 70mm wheels 2 x JST connectors 2 x LiPo batteries 1 x basic LiPo charger 3 x Multi-turn 10k potentiometers 1 x SPST switch (Radioshack) 1 x Laser-cut bamboo chassis via Ponoko  (link should allow you to make one from my shared design) 1 x LED 1 x Normally-open push switch 1 x packet of Sugru to make the bumber Assorted M2-04 machine screws (6mm - 16mm) (found on Amazon) M2-04 nuts to match machine screws above Assorted straight and right-angle break-away headers Assorted jumper wires Solid core wire Stranded core wire Instamorph (aka Polymorph) low-melt-point thermoplastic Notes: Chassis: the motors didn't quite fit the mounts I made so I had to sand them down and rebuild them with instamorph.  I think the sensor bundle suffers from too much vibration, it might have been better to make it more solid rather than sticking out as it does. Accelerometer: I originally tried building the bot with only an accelerometer for tilt sensing and no gyro.  It turns out that approach is a non-starter -- the accelerometer gets overwhelmed by the acceleration due to the motors so it can't be used to estimate tilt while the bot is accelerating.  OTOH, using only a gyro would make the bot susceptible to drift over time so you really need both. Gyro: I used a 150 degree/s rate gyro.  From looking at the telemetry from my bot, I'm pretty sure it sometimes clip if you give the bot a knocks so if I was starting over I'd probably look for a 300 degree/s model. Wheels: the wheels are a little fragile, after a few knocks I noticed cracks around the axle so I strengthened them with instamorph. Motors: I also tried sparkfun's 100:1 gear motors but they weren't fast enough.  The 24:1 versions have plenty of torque and speed. Bluetooth: I use the Bluetooth modem for telemetry right now but I'm also planning to use it for remote control from my Android phone.  If you omit it then the robot will still work but tuning it will be harder. Pots: I added 3 10k multi-turn pots to the design to allow me to easily tweak internal values.  Using 3 might have been overkill since I tend to tweak only one thing at once. Instamorph:  Amazing stuff.  It's a tough, white plastic (resembling solid nylon) at room temperature but if you heat it in boiling water it turns into a pliable goo that's really easy to work with your hands.  A heat gun is great for working with it too, allowing you to melt small areas.   Step 2: Overall design This step covers the overall design of the bot.  I'll try to explain what each of the parts is for: The brain of the system is the Arduino Uno, which contains an AVR microcontroller running at 16MHz. 1000 times per second, the microcontroller reads the current state of the gyroscope and accelerometer; updates its internal model of the bot and from that model decides how fast to run the motors to best balance the bot.  (The code is all shared on my Github repo .) The gyro is a rate gyro, which means that its output is proportional to the current rate of rotation.  To estimate the current tilt, the microcontroller has to sum the incoming values, which it reads using an analog to digital converter. Unfortunately, no gyro or ADC is perfect, resulting in errors in the summation that tend to grow over time.  If the bot used only a gyro to try to balance then its idea of "up" would slowly drift over time and it'd eventually fall over. To counteract the gyro's tendency to drift, the bot uses a 2D accelerometer to measure the direction of gravity.  When summing the gyro values it adds in a tiny fraction of the accelerometer estimate into the calculation.  Just enough to balance out the drift.  It can't add too much because the accelerometer is a very noisy sensor - it picks up vibration from the wheels and the acceleration of the motors. The gyro and accelerometer are mounted on the axis of rotation of the wheels to get the best signal. Once the microcontroller has decided how fast to run the motors it uses pulse width modulation to vary their speed and drives them through the Ardumoto shield.  The shield is necessary because the motors draw far more current than the microcontroller can supply on its own. The BlueSMIRF module provides serial-over-Bluetooth, allowing the bot to communicate in both directions with another Bluetooth-enabled device.  I use my Android phone to relay the serial data to the console over the Android Debug Bridge.  I'm also planning to send signals the other way to use my phone as a remote control.   Step 3: Chassis I designed the chassis using Inkscape on Linux and used Ponoko for laser cutting.  The SVG version is in my Github repository and I've published it on Ponoko . I was pretty pleased with how it turned out given it was my first try at using Ponoko.  The only part that didn't work so well was the motor mount, which I had to sand down and augment with Instamorph. Using Ponoko, the wood grain runs left-to-right so some parts need to be placed sideways.  The laser cutter is incredibly precise and does a great job on screw holes. Be sure to read Ponoko's design rules if you intend to modify the chassis design.  There are gotchas like needing to put "nodes" in push-fit slots to take account of material differences and the fact that the laser removes 0.2mm around your line.   Step 4: [Update] Bumper The bot can hit the ground quite hard when it falls over so I recently added a bumper made of Sugru.  I laid out some masking tape horizontally below where I wanted to put the bumper, just as a guide.  Then I rolled a sausage of Sugru and applied it in the gap.  I used my fingers and a clay cleanup tool to shape it and burnish it smooth. For more detail: Arduino ArduRoller balance bot   ### LASER Maze - Halloween Haunted House using arduino The LASER Maze was our Processing and Arduino powered garage haunted house for 2011. A monitor sits outside of the garage, displaying "PRESS START." After the button is pressed, an intro video plays that instructs you to dodge the lasers and get your candy in the back of the garage. Whenever you break a laser beam, an alarm sounds, a police light flashes, and a point is added to your score. When you make it back out, you press the stop button to see your final time and score. We kept all of the lasers very low to the ground to avoid everyone's eyes. Future versions may turn the lasers off for a short time when they are broken for an added layer of safety. We also made a couple of flashing signs out of red and white blinking bicycle lights. The house is at the end of a cul-de-sac, so we had to advertise to attract more attention. Here is Alice in Wonderland with her pirate and gremlin friends navigating the maze. Step 1: Parts List The parts list: a garage a laptop Arduino Duemilanove with USB cord 4 green Lasers ($7.54 each at Amazon) 4 CDS cells ($0.50 each at Electronic Goldmine) 4 1K resistors 3 push buttons (arcade style buttons) 1 breadboard 1 servo 1 surge protector with switch 1 red beacon light 1 1000W fog machine phone cord long enough to run to your sensors (cheap at the thrift store) You will also need electrical tape, cardboard TP tubes, soldering iron with soldier, velum paper or some other semi transparent paper, and possibly some other small items. Step 2: Overview - How it all Works he 4 green lasers are lined along one side of the garage, all wired in parallel to 3 D cell batteries. They are not connected to the Arduino in any way. On the opposite side of the garage, there are 4 CDS cells(Light Dependent Resisters) inside of cardboard tubes. The CDS cells detect the laser light, and the tube helps filter out other unwanted light from strobe lights. The Arduino is programmed to watch the CDS cells, and the stop, start, and reset buttons. The Arduino sends 4 signals back to the Processing code on the laptop: start, stop, alarm, or reset. The Arduino also powers a servo that turns on a spinning red light when the alarm is set off. The Processing code accepts the signals from the Arduino, and displays the state of the game on the monitor outside. The Processing code has 5 different states: PRESS START > Intro Video > 3, 2, 1, GO > Active Game (show time and score) > Display Final Score. The Processing code starts and stops the game, and increments the score as it receives the signals from the Arduino. The music playing in the background is just shuffling on the computer, it is not connected to Processing or Arduino. Step 3: The Floorplan The garage was laid out so that guests would have to cross the laser beams as many times as possible. Only 4 laser pointers were used, but the trick-or-treaters had to dodge laser beams 16 times. The yellow lines in the picture show where we built cardboard or caution tape walls. The caution tape made a clear path for people while still allowing the lasers to pass through to the sensors on the opposite wall. The air mask in the picture is an air compressor with a blower attachment pointing through the mouth of a skull mask. The blower handle was tied to a string and run through some pulleys so we could scare kids from a distance while they collected their candy. Step 4: The Processing Code The Processing code accepts 4 serial commands from the Arduino, and displays the state of the game on the monitor based on those commands. The basic flow of the program through the 5 states is: For more detail: LASER Maze - Halloween Haunted House ### USB Biofeedback Game Controller using arduino Building upon our last tutorial, which taught you how to build a muscle sensor, we've decided to give you a project that really showcases the power of our muscle (EMG) sensors. Advancer Technologies’ “USB Biofeedback Game Controller” harnesses the power of electromyography to allow players to directly control video games with their muscles. At the core of this plug-in-play controller is the powerful yet low-cost Arduino UNO microcontroller, a favorite among hobbyist and students, acting as a HID keyboard interface. Integrated with the Arduino UNO are four of our Muscle (EMG) Sensors, allowing four muscles to act independently or in combination with each other to control over four buttons. In our setup, we elected to use a six button setup with the left forearm controlling the B button (RUN/ATTACK), the right forearm controlling the A button (JUMP), the left bicep controlling the LEFT button, the right bicep controlling the RIGHT button, and combinations for UP and DOWN. This tutorial will teach you to build a USB Biofeedback Game Controller. Use it to play any computer game (that uses keyboard inputs) using your muscles as the controller. Check out our previous Instructable to learn how to build your own Muscle Sensor or Drop by our webstore to purchase muscle sensors, kits, cables and electrodes Muscle Sensor Kit (now also on SparkFun) Muscle Sensor Electrodes Note: This sensor is not intended for use in the diagnosis of disease or other conditions, or in the cure, mitigation treatment, or prevention of disease, in a man or other animals. About Advancer Technologies Advancer Technologies is a company devoted to developing innovative game-changing biomedical and biomechanical technologies and applied sciences. Additionally, Advancer Technologies promotes all forms of interest and learning into biomedical technologies. To help cultivate and educate future great minds and concepts in the field, they frequently post informative instructions on some of their technologies. For more information, please visit www.AdvancerTechnologies.com . Step 1: Materials Basics 1 x Arduino Uno R2 (needs the atmega8u2 USB chip which is only available on newer Arduino MCUs) 1 x Arduino Project Enclosure 1 x USB cable for your Arduino 4 x Advancer Technologies Muscle Sensor 1 x +/-5V Power Supply 1 x 12V Power Supply (Wall wart)  1 x Muscle Sensor Electrodes Misc. Jumper cables or solid core wire 3 x 1" length pieces of 24-30 AWG wire (1/8" stripped off each end) 3 x 2" length pieces of 24-30 AWG wire (1/8" stripped off each end) 3 x 3" length pieces of 24-30 AWG wire (1/8" stripped off each end) 3 x 4" length pieces of 24-30 AWG wire (1/8" stripped off each end) 3 x 3 position Female Receptacle  1 x 3 position Female Housing 3 x Crimps for Female Housing Plastic board (ABS) 1 pack x 3/8" 4-40 Screws (91772A108) 2 packs x 4-40 Nuts Tools Soldering Iron Scissors or Tin Snips Crimping tool Screw driver Drill with 1/8" bit Sandpaper Dremel tool or other cutting tool Software Arduino Processing Step 2: Constructing the plastic insert First we will need to create a insert to attach the Power Supply board and three of the Muscle Sensors. This insert will fit inside the project enclosure and rest on top of the Arduino UNO and the last muscle sensor. If you're using relatively thin plastic board material, you can probably use a set of heavy duty scissors or tin snips to cut out the insert. The dimensions (in inches) are shown in the drawing above and are approximate. You might need to do some sanding for a better fit. After you construct the insert, try sliding it into the bottom of the enclosure and putting the top on. If it doesn't fit properly, get the sand paper out and sand down the parts that are interfering. Step 3: Preparing the bottom of the project enclosure Next we'll prepare the Arduino project enclosure. First, trim down the two middle supports on the bottom of the enclosure. Leave enough height so that they will still go through your Arduino mounting holes but not go past the Arduino headers. (Pic 1) Next, place one of the muscle sensors in the bottom left of the enclosure by sliding the bottom left support through the muscle sensor's mounting hole (the one near the female headers). Straighten the sensor by rotating it around the support such that its sides are parallel with the enclosures. Gently and such that you don't jostle the sensor board, slide your plastic insert onto the enclosure and hold it above the sensor. Now, look down the rectangular cutout on your insert and verify the three male headers of your sensor are directly below. If not, remove the insert, adjust the sensor position and repeat until it is in position. Once it is in position, mark the location of the muscle sensor's second mounting pin, remove the sensor, and drill the hole. Note: If you don't get the hole in exactly the right position, it's OK you can just widen the cutout more to compensate. Step 4: Preparing the top of the project enclosure Next, you'll need to modify the top portion of the enclosure as well. Using a Dremel tool or some other cutting tool, completely cut off the reinforcement wall near the front of the enclosure (see picture). Additionally, completely cut off the two middle supports that complement the supports you cut on the bottom portion of the enclosure. These both need to be removed to give us some more head room for the muscle sensors and plastic insert Step 5: Soldering the power supply connectors We now need to create a way to connect the Power Supply board to each of the sensors. Grab your power supply board, the four sets of wire lengths, and the female housing and receptacles. On the Power Supply board, there is a grid of through holes in a 3 col x 4 row pattern. Solder the three 3" wires to the holes in row 1, solder the three 2" wires to the holes in row 2, solder the three 1" wires to row 3, and solder the 4" wires to the holes in row 4. Next, grab your 3 female receptacles and bend all the solder tabs so that they're at a 90 degree angle. For the 1"-3" wire sets, solder the female receptacles (with the ports facing downward) such that the wire soldered to the +5V column is soldered to the right solder tab, the GND wire is soldered to the middle solder tab, and the -5V wire is soldered to the left solder tab. For reinforcement, dab a glob of hot glue on the joints. Using a crimping tool (you can also choose to solder instead of crimping), crimp the crimp tips to each of the 4" wires with the tabs pointing upward. Now insert each of the wires' crimp tips into the female housing, again following the +5V right, GND middle, -5V left order. Your power supply board should be ready to go. double check each solder and crimp to make sure they'll good and solid. Step 6: Mounting the muscle sensors and power supply board Now it is time to mount your sensors using the 4-40 screws and nuts. Grab three of your sensors and the power supply board and put a screw into each mounting hole. Thread a nut on each screw but leave it slightly loose. These nuts will be used as standoffs. Next, place each sensor's mounting screw into each corresponding mounting hole. Remember to keep the muscle sensors' female headers on the same side as the shelf's offset. Thread another nut onto each screw until they are nice and tight. Tighten more with a screw driver and a wrench, holding the second nut secure. Next, follow this same process for the power supply board. Make sure the power jack is facing the front side of the shelf. For the last muscle sensor, insert a screw up through the bottom of the enclosure and secure with a nut. Then slide the muscle sensor down the support column and insert the screw into the sensor's mounting hole and secure with a nut. Check to make sure you can fit the female housing through the gap between the sensors and down into the rectangular cutout and onto the male headers of the sensor below. If the gap is too tight, remove one of the top sensors and sand one of its mounting holes on the shelf until the gap is wide enough. For the remainder of these instructions we're going to refer to the sensors as follows: Sensor 1 = Closest to Power Supply Sensor 2 = Middle Sensor 3 = End Sensor 4 = Bottom Step 7: Connecting the power supply to the muscle sensors By this time, your muscle sensors and power supply should be mounted and your Arduino should be in the project enclosure. Now you should be ready to start connecting everything together and setup your electrodes. First you'll want to give all your sensors power. Insert the plastic insert into the project enclosure and then connect each female receptacle and housing to the corresponding sensors. (Hint... the 1" wire goes to the sensor closest to the power supply, the 2" wire goes to the middle sensor on the insert, the 3" wire to the last sensor on the insert, and the 4" wire goes through the rectangular cutout to the sensor on bottom). MAKE SURE THE CORRECT VOLTAGES ARE CONNECTED TO THE CORRESPONDING SENSOR PINS (+Vs = +5V, GND = GND, -Vs = -5V). IF NOT, YOU CAN POTENTIALLY BURN OUT YOUR SENSOR BOARD. DOUBLE CHECK.... BETTER SAFE THAN SORRY! For more detail: USB Biofeedback Game Controller ### Sugru + Servos = Robot using arduino Build a robot using a bag of Sugru and 5 mini-servo motors. Motivation:Build a robot using very few parts and very cheap servo motors. Steps: Parts list  Build Wire Program Play! Outcomes of this project: Robot with 5 joints Arduino Code which is expandable Control and wiring setup Step 1: Parts Parts used: 5 mini hobby servo motors -- 9 Gram Micro-servos about 8 packets of Sugru -- or one big puch Arduino Uno - with a Screw Shield Battery pack -  4 AA bats Servo proto-shield   -- from 'Wendell' Robot Controller  -- from Giant Crane Game Step 2: Build -- Bottom of Robot The bottom servo will twist the whole robot side-to-side. The next servo is the waist -- it will bend. Use Sugru as glue and supports -- pack Sugru around the servo arms. NOTE: Pay attention to the positions of the servo arms as you build. To determine servo arm/horn position do this: What joint is the servo? Snap on the servo arm -- DO NOT ADD SCREW Turn the servo arm all the way to one side -- this is either 0 or 180 deg Then pull of the servo arm Re-align the servo arm so it is how you would want it to be when turned all the way, and stick it on  (ex -  body twisted all the way to the right) Now -- Turn the servo arm all the way to the other side -- hopefully it will be in the opposite side (ex - body twisted all the way to the left) If it is good, then add the screw If it is not where you had expected, pull of the arm and re-position halfway to the ideal position Turn the servo all the way to the other side If the servo is now in an okay spot at both extremes -- add the screw. Now -- it should be like this: 0deg = all the way to one side;  90deg = in the middle; 180deg = all the way to the other side Step 3: Build -- Arms and Head Using 3 servo motors you can get: Head back and forth Both arms up and down More servos will give you more motions; but it gets big and heavy very fast. But for now - No jumping jacks are 'YMCA' Steps: Position and attach servo arms Cover the servo arms in Sugru Use Sugru to stick the motor bodies together Add some more Sugru for support Cut down the servo arms for the 'neck' Step 4: Build -- Bracket An L-Bracket is used to connect the top and bottom sets of servos. My go-to for light brackets is metal plumbers strap. Cut about 5 inches of strap Bend a 90deg angle towards the middle Layout the servos and bracket to make sure it will all fit together Trim or bend bracket to adjust Press Sugru onto both sides of the bracket Assemble the parts as shown in photos Step 5: Let it dry Lay out the robot so that the servos are in the correct positions.  This is a little tricky.  Check on it every 10min or so until it starts to set-up, tweak as needed. Letting it cure overnight worked well. Step 6: Photo shoot Here is what it might look like at this point. Step 7: Wire it up to Arduino There are many ways you could wire the servos up to the Arduino.  I'll list exactly what I did here.  The important thing is that your Arduino code matches the actual pin connections. I am using a servo adaptor board made in another instructable -- here. It brings the digital pins on one side, then the power supply; and ground is last. *This is from the Arduino code.  Read 'servoHead.attach(11);' as -- connect the communication  wire (orange) from the servo that controls the head to digital pin 11 on the Arduino board. SERVO PIN ASSIGNMENTS // attach servos // servoHead.attach(11); servoArmR.attach(10); servoArmL.attach(9); servoBend.attach(6); servoTwist.attach(5); On the servo connectors:  orange - communication; Red = power; Brown = ground. Servo power is supplied by a 6Volt battery pack -- this should be able to power the arduino too, but for now the USB is fine. 'Negative' side of battery pack should be connected to the arduino ground. The controller is also from an old project ---   here. Here is the wiring to the buttons on the controller and to the Arduino - Wire the  Buttons - Arduino Analog/Digital:Blue - Up (joystick) - A0 / D14 Blue/white - Down (joystick) - A1 / D15 Orange - Left (joystick) - A2 / D16 Orange/white - Right (joystick) - A3 / D17 Green - Left button (arms) - A4 / D18 Green/White - Right button (head) -A5 / D19 Brown - Ground (Arduino) - Ground Brown/White - 5V (Arduino) - 5V (note: the analog pins on the Arduino can be used as digital pins)   For more detail: Sugru + Servos = Robot ### Designing and Building a 2m Low Pass Filter I've been playing with the DRA818V modules that have been making quite a stir in the amateur radio world at the moment. I haven't gotten one on a spectrum analyzer yet, but I have reason to believe that it will require a low pass filter to be RF legal. I'll write more about that once I get a look at it, but figured I'd first built myself a low pass filter in case I need it (if not for these modules, but some other VHF project in the future). My process for building a low pass filter went as follows: Select the type of filter and cutoff frequency desired Look up normalized coefficients in the ARRL Handbook Divide these coefficients by the cutoff frequency Convert the inductances into turns on some core and capacitors into the nearest values Build the filter. Since I wanted this filter for 2m, the highest frequency I'm interested in passing is 148MHz, so I selected a cutoff frequency of 150MHz. In hind-sight, this was a poor choice, since a -3dB point only 2MHz above the band caused for a lousy insertion loss. A better choice would have been 10% higher than the top of the band, so 148MHz * 1.10 = 162MHz I decided to build a 5 pole T configuration Chebyshev filter with 0.1dB of ripple. Looking this filter up in a random copy of the ARRL Handbook (1981, but any recent one will do), it gives the component values needed for a 50 ohm filter at 1MHz. I'm also building this for 50 ohms, so all I need to convert is the frequency by dividing by 162MHz. For more detail: Designing and Building a 2m Low Pass Filter ### Wireless Power Outlets RF from Raspberry Pi Thanks LifeHacker and HackADay for featuring my post. If anyone has questions please leave a comment below and I’ll be happy to help! Have you ever wanted to wirelessly control power outlets from your phone? You could buy a Belkin WeMo Switch for over $40 for 1 outlet or build your own with 5 outlets for under $35 if you already own a Raspberry Pi. Hopefully this post will guide you in the right direction. Steps: Connect wires to Rf transmitter and receiver chips. If you use different gpio pins the programs CodeSend and RFSniffer will not work. If you would like to use different pins check out Ninjablocks 433Utils Run: git clone https://github.com/Timl88/rfoutlet.git /var/www/rfoutlet Use RFSniffer to find RF codes for your devices Run: sudo /var/www/rfoutlet/RFSniffer Record all 6 digit codes for on/off for each outlet Update toggle.php file with your codes Run: sudo nano /var/www/rfoutlet/toggle.php Change permission of codesend program so sudo isn’t required: Run: sudo chown root.root /var/www/rfoutlet/codesend Run: sudo chmod 4755 /var/www/rfoutlet/codesend For more detail: Wireless Power Outlets RF from Raspberry Pi      ### Airmonica - a free-air musical instrument improvise + harmonize + customize The airmonica is a easy-to-learn tweakable musical instrument that you can use to perform harmonic musical ditties by accompanying a tri-tone arpeggiator. There are endless opportunities to expand the airmonica in any way that will make it your your own custom instrument. The airmonica consists of three parts: 1. a wii compatible nunchuck as the instrument interface 2. an arduino micro-controller board as the brain 3. a ginsing shield as the synthesizer In addition to this instructable, you can visit the project webpage at http://www.engeldinger.com/services/latest-project/airmonica Step 1: Airmonica parts a stack to hack The airmonica consists of 4 basic parts, all of which are easily acquired and require little or no modification. Aside from preparing the nunchuck and installing the software the airmonica can be assembled by just pushing it together. All of the parts in the airmonica can be reused on future projects, and together provide a great prototyping environment for experiments in human interface, computing, and complex waveform synthesis. Here's what you'll need: 1. A Wii compatible nunhuck The nunchuck shown here is an inexpensive 3rd party controller (NYKO Kama). This was chosen because its about half the price of an official Nintendo controller, its clear, has cool flashing lights, and most importantly, can be taken apart with a screwdriver and  can put back together later. You can get one for about $10 on Amazon: http://www.amazon.com/Nyko-Kama-Wii-Nintendo/dp/B001PAAE7I/ref=dp_cp_ob_vg_title_0 2. An Arduino Uno microcontroller ( blue as pictured ) The Arduino Uno is a complete programmable development kit that allows you to run C/C++ code to control is various inputs and outputs. If you don't have one already you should really get one - its a great way to learn about hardware, software, and embedded applications. It is very affordable and has great support. You can pick one up for about $22 and then download the development environment from the Arduino support page: http://www.amazon.com/Arduino-A000046-UNO-board/dp/B004CG4CN4/ref=sr_1_cc_1?s=aps&ie=UTF8&qid=1331048877&sr=1-1-catcorr http://www.arduino.cc/ 3. A GinSing synthesizer shield ( yellow as pictured ) The GinSing is synthesizer board (shield) that plugs onto the Arduino and contains a digital synthesizer chip and an amplifier you plug directly into a speaker (or stereo via 3.5mm jack). For this project the Ginsing is used to create the mellow polyphonic tones you hear produced, but is capable of wide range of sound related applications like synthetic speech, waveform synthesis,  and more. The GinSing is available in either kit ($35)  or assembled ($45) form from their website: http://www.ginsingsound.com 4. (Optional) proto board ( red & green as pictured ) One thing you may find helpful is an Arduino compatible prototyping shield. In the picture you can see that the nunchuck is connected to the proto board, which not only makes it easier to connect, it also allows you to use the metal pins on nunchuck cable rather than having to cut the cable. If you don't use you such a board you would just insert the wires into the connector on top of the GinSing board instead (not pictured). The board pictured here is from SparkFun, and an nice because it can be use on other projects that may require switches and LEDs as well: http://www.sparkfun.com/products/7914 Step 2: Prepare the nunchuck grip it and rip it ( or snip it or clip it ) To connect the nunchuck to the circuit boards, you will need to expose bare wire or lead pins.  In the case of the NYKO Kama controller used here, simply unscrew the connector and slowly pull the wire leads from the connector with pliers, leaving metal tabs that can be inserted into the header pins or proto shield. You can also put the controller back together by reversing the procedure to regain use of the controller at a later time in this case. Although not used in this project, there are several non-invasive slide-in connectors that expose the contacts of the connector to the circuit board, such as the WiiChuck adapter board available from SparkFun: http://www.sparkfun.com/products/9281 Step 3: Connect it all together get to together, man 1. build the shield stack The Arduino, GinSing, and optional ProtoShield can be stacked on top of each other to connect them. Although you could run wires between the boards, they are designed to seat to each other. Start by placing the GinSing board on top of the Arduino board by aligning the pins on the GinSing to the headers on the Arduino. Note that when placed properly the headphone jack faces way from the USB connector on the Arduino. Depending on your Arduino, you may have extra slots on your headers that have no pins on the GinSing board - this is fine as they are not needed. Be observant when seating the boards together to avoid bent pins; they should fit nicely together but visual alignment is a good precaution. The ProtoShield can be placed on the GinSing board if you are using one. In the picture below you can see that small wires are used to connect the breadboard rails to the header pins, thus allowing the nunchuck pins to be placed into the corresponding rails. If you are not using a ProtoShield you can skip this step and use the GinSing board header to connect to the nunchuck instead. 2. connect the nunchuck to the stack The disassembled nunchuck will have either 4 or 5 wires. You need to connect 4 wires, so depending on your controller you may have one you do not need to connect. In the picture below you can see that the Kama nunchuck has 5 wires, but only 4 are connected to the header. Although the color coding of the wires may be different for various controllers. its standard for the power to be red, and the ground to be black, making it easy to find out what the others may be. On the Kama controller, the color coding is: signal               nunchuck           header pin ------------          -------------       ----------------------------------------- power               red                 5V    ( power header   - pin 5 ) ground             black              GND ( power header   - pin 6  ) SCL (clock)     green              A5     ( analog header  - pin 6 ) SCA (data)      yellow             A4     ( analog header  - pin 5 ) If you find that your controller does not have this coding, you can experiment with the SCL and SCA lines (analog header pins 5/6) when you are ready; swapping these lines will not damage the airmonica. You may also check the comments on this instructable; it may be possible that others have posted the color coding for the nunchuck you are using. 3. connect to speaker or sound system The GinSing shield can be connected either directly to a speaker using two contact leads on the board, or through a 3.5 mm stereo jack to either headphones or a stereo system (recommended) using an iPod like connector (typically 3.5mm to RCA ). A thumb wheel on the edge of the board is the volume control. It is recommended to you first set the volume to its lowest setting (fully clockwise) to avoid damaging your ears and bring up the volume once you confirm the airmonica is operating; you'll see an amber light on the GinSing board glowing as the airmonica starts doing its thing, which is your cue to bring up the volume.   For more detail: Airmonica - a free-air musical instrument ### Bag movement alarm for theft prevention In short: I developed a portable, battery powered device that sounds an alarm when your bag or purse is moved. Once armed, can only be turned off by your secret code. The device is built off an Arduino compatible Trinket Pro, using an off-the-shelf project box with PCB. ---------------------------------------------------------------------- Problem I had: When I go to a happy-hour or a cocktail party, I often have my computer bag with me. But I do not want to carry it around with me, so I put it down somewhere, hoping that no one takes it. I may check on it periodically, or stand so that my bag is in my view, but I am still concerned someone may take it. Or I may be traveling, taking a nap at an airport or when waiting for train and be concerned that it might disappear while I am sleeping. Or any number of circumstances in my life where I need to protect my bag from being stolen. Solution I built: I built a small, portable alarm to warn when my bag has been moved. It is 9V battery operated, but without an on/off switch, otherwise the potential thief could just hit the off button. As a result, I have an 'arm' button, and then you have 20 seconds to but the bag/purse + device stationary. After being armed, if the bag/device is moved for more than 5 seconds and above a threshold level, it sounds an alarm until the correct code is entered. The secret code uses a 4 button interface, but the code can be any length. Genesis / special motivation: My parents were recently traveling abroad, and their bag (with their camera) was stolen while they slept. I decided to build this for them for a Christmas present, so that they would not have to go through that again. I was thus forced to build this over the course of December, which was great motivation. ---------------------------------------------------------------------- If you want more info on how I made this: I also blogged about making this (and the challenges I faced along the way) on my personal blog at MakerSelf.com. ---------------------------------------------------------------------- Improvements are coming! Improvements are coming! I have been blown away by the interest in this project. Thanks to all the helpful comments I have received here and other inputs I have received, I intend on making an improved version of this project. Right now, I am thinking about adding a rechargeable battery and RF/Bluetooth. If you would like to be updated when that project is done feel free to sign up for updates (I can't embed a form here, so that is a direct link to a form to sign up to get updates). I don't intend on sending out very many updates: I am fairly lazy and hate email! Putting this up publicly and having a signup is in part to give me motivation to complete the improvements: if there is a lot of interest, I will find the time! Step 1: Gather your components Obtain or purchase the following components: Core components: A Trinket Pro as the brains of the show. You can get one from Adafruit or Hackaday. An accelerometer to tell when the device is moving. You can use a variety, but I used the GY-521 available from Amazon or Deal Extreme (or many other sources). The GY-521 is a bit overkill, as it also includes a gyro that I did not use in the product, but it was relatively affordable compared to commonly available accelerometers. A speaker/peizo to act as an alarm. You can use various depending on your preference for sound, but I used this one from RadioShack. I chose it based on the loud sound but low current consumption, and that it takes a broad range of voltages (3V-28V) so I wouldn't need to be too fussy about battery voltage. Four buttons to input a code One button to turn the device on, paired with a power circuit that allows the device to be turned on by hardware (the button), but off by software (by putting a pin to low) Two LEDs: one green LED to tell status, and one yellow LED as a low battery warning Other components include: Project box. I used a project box with an integrated PCB and battery compartment, available from Amazon. Piece of perf board (doesn't need to be very big, just enough to cover one end of the project box) 2x P-Channel MOSFET transistor. From Mouser here. These are TO-92 packages, so fairly small. The max current is below what I anticipate would ever be needed to power all the components. 2x N-Channel MOSFET transistor. From Mouser here. 2x 330 ohm resistor (for current limiting on the LEDs). This does not have to be the exact resistance value, but in the general ballpark. 12x 10k ohm resistor (for ground ties, battery monitor pin voltage divider, etc.). The ground ties don't have to be exactly 10k, but just high enough, and the voltage divider just needs to be two the same value. I also tried 1k for these and it worked just fine. 1x 47k ohm resistor (for current limiting for the battery monitor pin). Also doesn't need to be exact. 1x 100nF capacitor (for dealing with any spikes on the battery monitor pin) 1x 6 pin female header 2x 12pin male headers (for the Trinket Pro, and may come with your Trinket Pro) 1x 9V battery clip 1x 9V battery Hook up wire (multi color if you want to keep things straight for yourself) Some thin foam padding (e.g. from envelope padding). This is optional, to make the battery fit more snug. Step 2: Gather your tools To complete this project you will need: Soldering iron and solder Hot glue gun Dremel or similar saw (for cutting the perf board) File (for filing the cut perf board) Helping Hands and tweezers, for helping to hold and place the components Wire snips Wire stripper Step 3: Plan how to lay out the components on the PCB I had prototyped this on a breadboard, so to make this an actual project I had to think about how to lay out the PCB. The PCB I used is the board that came with the project box, which you can see in the photo of the project box and components. I put the schematic, fritzing wiring diagram, and the diagram of the layout on the PCB in the pictures. For the Fritzing wiring diagram: I have used orange to indicate 9V rail (stripped indicates that it is only sometimes on), and red to indicate 5V rail. Ground is consistent as black. Yellow connects to the LEDs, Cyan to the push buttons, purple is the input to the battery monitor pin, blue is the SCL and SDA for the accelerometer, and green are the two switching pins (to turn the power circuit on and the speaker on. For the layout on the PCB: I laid all the components out on the board by drawing it out on a piece of paper (just made it easier). The end result is in the picture, and some comments to explain how it works: The two headers for the Trinket Pro are marked in the light blue boxes, with the USB port for the Trinket Pro pointed to the left. The headers I used on the Trinket Pro had enough space so I could run wires underneath it (you can see the gold, green, pink, red wires all underneath the board. These components and wires are actually placed on the OTHER side of the board, with the soldering on this side. For the GY-521, I actually soldered on a header, and then put the GY-521 into the header. I had enough head room (barely) in the project box to do this and it made it easier to fit the wires underneath the GY-521. The grey lines are passive components, and are marked as what they are (e.g. 10k is a 10k ohm resistor). The black, red and orange squares are ground, +5V and +9V rails. You will need to solder all connections in this square together. The transistors are in an arrow head pattern, allowing the drain of the N-Channel MOSFETS to go directly to the gate of the P-Channel MOSFET. The top of the arrow head is the common source (+9V) for the two P-Channel MOSFETs. With the TO-92 packages, the P and N MOSFET pairs should either face each other or have their backs to each other. The left ones should face each other (rounded part towards rounded part) and the right ones should have backs to each other (flat part towards flat part). Confirm the pin layout for your transistors. The five buttons and the two LEDs go on a piece of perf board that would replace the end piece of the project box was removable (see the small black rectangular piece in the project box picture above. Where those connections are (buttons and LEDs) are marked on the diagram above. Additional external connections are the battery + and - from the battery clip, and the speaker would just hang loose and be stuffed in on top of the Trinket Pro when closing up the box.   For More Detail: Bag movement alarm for theft prevention ### Arduino Thermostat with TC74 sensor Hello all! This is a quick guide on how to use an Arduino© to control whether a cooling fan and a heater is turned on depending on the detected temperature from a TC74 Arduino sensor. This is for a final project for an Electronics class I am currently taking, though I came into this project with pragmatism in mind, because of the hot summers and cold winters (ok, 60 degrees indoors is cold for me, but that's probably because I'm Californian). Working on this project should give good hands-on practice in working with the Arduino, soldering, and general circuitry, as well as coding for the Arduino and workin gon the logic needed for the coding. Why adjust the fan and/or heater if the Arduino can do it for you?  (Ok, this is probably easy enough to do, but making it technologized (not a word) is just much cooler (no pun intended). Also, there is a video at the end of this Instructables if you'd like everything described verbally. Best of luck! Step 1 Materials. You'll need... * An Arduino© microcontroller, made by Arduino (with USB connector) * A Fan (This project used the following one: http://www.amazon.com/Lasko-Personal-Inches-White-2002W/dp/B000QR6VXW/ref=sr_1_1?s=home-garden&ie=UTF8&qid=1333608671&sr=1-1) * A Heater (This project used the following heater: http://www.amazon.com/Pelonis-Heater-fan-Heat-Settings/dp/B000PAQHLG/ref=sr_1_32?s=home-garden&ie=UTF8&qid=1333608582&sr=1-32 ) * TC74 Temperature Sensor * Wires * Relays,  Relays here were solid-state relays, with a smaller current (2 Amp) Crydom D2W202F for the Fan and a large current 25 Amps NTE Electronics Relay for the heater, which requires up to 1500W. * A breadboard * Heat-shrink tubes * Two wall outlets for use * Two optional (10,000 ohm) potentiometers * A computer with Arduino software * Code Tools * Soldering iron * Wire cutter and wire stripper * Crimper * Screwdriver or alternative * Heat gun (optional) Safety warning:  Live wires may be dangerous, especially when either the fan or heater is plugged in.  Please either use the heat-shrink tubes to cover these up or better yet, box the whole contraption. Remove these ads by Signing Up Step 1: Starting off Unpack the fan and heater. We'll start with the fan, as this poses less fire hazard (the heater pulls a lot of current). We wish to make a closed current loop through the solid-state relay, 120 V AC and the fan motor itself.  Basically, we want to be able to put in zero volts somewhere such that the fan is told to turn off and when we give in 5 V somewhere, then the fan turns on. After this is done, we can test the fan to make sure that it's talking to the Arduino. Use any digital output pin you want, but I chose pin 13. For an easy pin 13 on/off program... Go to Files -> Basics  -> Examples -> Blink when your Arduino software window is open.  (This is conveniently pointed at pin 13.)  Don't forget to plug in the fan into a 120 V AC plug or the equivalent. Hardware wise, follow these steps. 1.  Unpackage the fan. 2.  Make a cut across half of the wire to expose one end. 3.  Solder the two ends of this wire to the two ends on the solid-state relay's AC side. 4.  Heat-shrink tubing should cover this connection. 5.  Hook up the two other leads (+ and - 3 to 28 V DC) to the Arduino at pin 13 and ground, respectively. 6.  Upload code and watch your fan work! Step 2: Setting up the heater Set up the heater in a similar fashion. 1.  Cut to half the heater's cord and pull the wire apart to create two open ends. 2.  Use the other solid state relay (heavy-duty) by screwing down the ends of crimped wires to ensure contact.  Do the same with connections to the Arduino on the 3 to 32 V side. 3.  Plug into Arduino at pin 4 and at ground. 4.  Upload code, and hopefully the heater should work!  (Use a similar code as the fan code, but switch the pin to pin 4. Note:  Make your incision close to the fan.  This will leave lots of cord length for the plug to be further away from all the wires set up.  Do similarly with the heater. Step 3: Integrating the TC74 Sensor The TC74 sensor is a temperature sensor that reads temperature in degrees Celsius with plus/minus 1 degree resolution.  It can read from -40 to 125 degrees Celsius.  The one I have in particular is the TC74A2. Usage of the TC74 can be found at this Instructables page. http://www.instructables.com/id/Arduino-Temperature-Sensor/ In short, hook up the TC74 as such.  (From the side of the inscription.) Pin on far left, nothing Second pin to Analog 4 Middle pin to ground Fourth pin to Analog 5 Far right pin to 5 V (from Arduino, may be hooked via the breadboard) TC74A2's code is 1001010, which is hexadecimal for 4a.  This will come in handy later. Step 4: TC74 Arduino code The TC74 uses the Wire library for the Arduino. The code is as follows, and can be modified to fill in other needs. #include "Wire.h" //wire library #define address 0x4a #define baudrate 9600 //baudrate for communication byte val = 0; void setup() { Wire.begin(); Serial.begin(baudrate); } void loop() { Serial.print("temperature in Celsius: "); //let's signal we're about to do something int temperature; //temperature in a byte Wire.beginTransmission(address); //start the transmission Wire.write(val); Wire.requestFrom(address, 1); if (Wire.available()) { temperature = Wire.read(); Serial.println(temperature); } else { Serial.println("---"); } delay(5000); } (Downloadable below.) Note that the code submitted by nadav at http://www.instructables.com/id/Arduino-Temperature-Sensor/step4/Code-Code-and-more-code/ is for the old version of Arduino, hence the changes of Wire.receive and Wire.send to Wire.read and Wire.write. What this program should do is, provided that you set some threshold temperatures, converts the fahrenheit temperature reading from the TC74 and sends it to the Arduino, where the Arduino determines whether the value is high or low enough to trigger the turning on of the fan and the heater.  It will then wait another 5 seconds before taking another reading and figuring out whether the reading has changed the digital state of the system. Turning on the serial monitor of the Arduino program should read out... Temperature in Celsius    __   (Current temperature from TC74) Note that we cannot control when the heater and fan turn on yet. Basic_Fan_Program.ino512 bytes For more detail: Arduino Thermostat with TC74 sensor ### DIY Amp / Watt Hour Volt Meter - Arduino Major corrections and additions made 9/9/2014 For my off-grid Ham Radio and Solar projects, I needed a way to measure volts, amps, watts, amp hours and watt hours. There's a couple of commercial products that can do this, but not with the flexibility I wanted. I designed a Arduino micro-controller based solution that is very extensible. Right now it monitors the above values of attached gear, and I'm thinking about adding web monitoring and a sd card for data collection. Well, let's get started. Step 1: Voltage Divider UPDATE 9/9/2014 ! The Arduino can accept up to 5v on a analog input. Our voltage can range as high as 20vdc in certain situations (open circuit pv voltage), so we designed a voltage divider that would provide 5v at 20v battery voltage, and less at various lower voltages. See http://en.wikipedia.org/wiki/Voltage_divider for more information on Voltage Dividers. First we visit our friendly Voltage Divider Calculator. I input 20v as the input, 5v as the output, and 3k for R2 (experiment with <10k resistors till you get a likely pair). This calculates a R1 of 9K. Try to keep the values as close to, but under 10k Ohms as possible. R1 = 9k Ohms R2 = 3k Ohms Vout = (R1 / (R1 + R2)) * Vin Vout = (9000 / (9000 + 3000)) * 20v Vout = (9000 / 12000) * 20v Vout = .75 * 20v Vout = 5v Ratio = Vin / Vout Ratio = 4 Because the Arduino has a 10-bit ADC, it outputs 0-1023 (1024 steps) for a 0-5v input. That's 0.00488v / step. With a Voltage Divider with R1 = 9k Ohm and R2 = 3k Ohm, A 12v battery would calculate as follows: 12v / Ratio = 3v on the A4 pin. 3v / .00488 = 615 (ADC Reading - round up) so A4 pin Voltage = .00488 * ADC reading (615 in this case), or 3.00 volts. Then battery voltage = A4 pin voltage * Ratio (3 * 4 = 12) The code to read that value is as follows: ADCVal = analogRead(batMonPin); // read the voltage on the divider on pin A4 pinVoltage = ADCVal * 0.00488; // Calculate the voltage on the A/D pin // A reading of 1 for the A/D = 0.00488mV // if we multiply the A/D reading by 0.00488 then // we get the voltage on the pin. batteryVoltage = pinVoltage * Ratio; // Use the Ratio calculated for the voltage divider // to calculate the battery voltage, Ratio = Vin / Vout More details at http://arduinotronics.blogspot.com/2012/04/voltage-monitor.html UPDATE: Improved voltage reading circuit and sketch at AC Volt Meter (works with DC as well). Rock solid voltage measurement, and very accurate. Step 2: Current Monitoring The next step is to track the current being consumed by a load, or produced by a source. We are using a ACS715 Hall Effect sensor to track the current being passed. Update! ACS714 Bidirectional current sensor now being deployed. This will enable a battery "gas gauge" for "AH IN - AH OUT = AMP Remaining" type monitoring. http://www.hacktronics.com/Sensors/Current-Sensor-30-to-30-Amp/flypage.tpl.html Update! ACS712 5amp sensor project at  http://arduinotronics.blogspot.com/2014/01/volt-amp-watt-hour-meter-shield.html // read the analog in value: sensorValue = analogRead(analogInPin); // convert to milli amps outputValue = (((long)sensorValue * 5000 / 1024) - 500 ) * 1000 / 133; amps = (float) outputValue / 1000; More details at http://arduinotronics.blogspot.com/2012/04/monitoring-power-consumption-with.html Step 3: Math Alert! To calculate watt (volts * amps), amp hours (amps * hours), and watt hours (watts * hours) requires tracking the time component, and performing a bit of math: float watts = amps * batteryVoltage; sample = sample + 1; msec = millis(); time = (float) msec / 1000.0; totalCharge = totalCharge + amps; averageAmps = totalCharge / sample; ampSeconds = averageAmps*time; ampHours = ampSeconds/3600; wattHours = batteryVoltage * ampHours; Step 4: Serial Output We can now output the results of the calculations to the serial port using the following code: Serial.print("Volts = " ); Serial.print(batteryVoltage); Serial.print("\t Current (amps) = "); Serial.print(amps); Serial.print("\t Power (Watts) = "); Serial.print(watts); Serial.print("\t Time (hours) = "); Serial.print(time/3600); Serial.print("\t Amp Hours (ah) = "); Serial.print(ampHours); Serial.print("\t Watt Hours (wh) = "); Serial.println(wattHours); Step 5: LCD Display Keeping a computer connected all the time is inconvenient, so I added a 4 line lcd display to the project. lcd.setCursor(0,0); lcd.print(batteryVoltage); lcd.print(" V "); lcd.print(amps); lcd.print(" A "); lcd.setCursor(0,1); lcd.print(watts); lcd.print(" W "); lcd.print(time/3600); lcd.print(" H "); lcd.setCursor(0,2); lcd.print(ampHours); lcd.print(" Ah "); lcd.print(wattHours); lcd.print(" Wh "); Step 6: Source Code All the code, schematics, and photo's along with discussion is available at http://tech.groups.yahoo.com/group/arduinohome/files/volt%20amp%20watt%20hour%20meter/ and http://forum.pololu.com/viewtopic.php?f=3&t=5415 #include /* This sketch describes how to connect a ACS715 Current Sense Carrier (http://www.pololu.com/catalog/product/1186) to the Arduino, and read current flowing through the sensor. */ LiquidCrystal lcd(7, 8, 9, 10, 11, 12); /* Vcc on carrier board to Arduino +5v GND on carrier board to Arduino GND OUT on carrier board to Arduino A0 Insert the power lugs into the loads positive lead circuit, arrow on carrier board points to load, other lug connects to power supply positive Voltage Divider 9k Ohm from + to A4 3k Ohm from A4 to Gnd */   int Vin = 20; int Vout = 5; int ratio = Vin / Vout; // Calculated from Vin / Vout int batMonPin = A4; // input pin for the voltage divider int ADCVal = 0; // variable for the A/D value float pinVoltage = 0; // variable to hold the calculated voltage float batteryVoltage = 0; int analogInPin = A0; // Analog input pin that the carrier board OUT is connected to int sensorValue = 0; // value read from the carrier board int outputValue = 0; // output in milliamps unsigned long msec = 0; float time = 0.0; int sample = 0; float totalCharge = 0.0; float averageAmps = 0.0; float ampSeconds = 0.0; float ampHours = 0.0; float wattHours = 0.0; float amps = 0.0; int R1 = 9000; // Resistance of R1 in ohms int R2 = 3000; // Resistance of R2 in ohms int ratio = 0; // Calculated from Vin / Vout void setup() { // initialize serial communications at 9600 bps: Serial.begin(9600); lcd.begin(20, 4); } void loop() { int sampleADCVal = 0; int avgADCVal = 0; int sampleAmpVal = 0; int avgSAV = 0; for (int x = 0; x < 10; x++){ // run through loop 10x // read the analog in value: sensorValue = analogRead(analogInPin); sampleAmpVal = sampleAmpVal + sensorValue; // add samples together ADCVal = analogRead(batMonPin); // read the voltage on the divider sampleADCVal = sampleADCVal + ADCVal; // add samples together delay (10); // let ADC settle before next sample } avgSAV = sampleAmpVal / 10; // convert to milli amps outputValue = (((long)avgSAV * 5000 / 1024) - 500 ) * 1000 / 133; /* sensor outputs about 100 at rest. Analog read produces a value of 0-1023, equating to 0v to 5v. "((long)sensorValue * 5000 / 1024)" is the voltage on the sensor's output in millivolts. There's a 500mv offset to subtract. The unit produces 133mv per amp of current, so divide by 0.133 to convert mv to ma */ avgADCVal = sampleADCVal / 10; //divide by 10 (number of samples) to get a steady reading pinVoltage = avgBVal * .00488; // Calculate the voltage on the A/D pin /* A reading of 1 for the A/D = 0.0048mV if we multiply the A/D reading by 0.00488 then we get the voltage on the pin. Also, depending on wiring and where voltage is being read, under heavy loads voltage displayed can be well under voltage at supply. monitor at load or supply and decide. */ batteryVoltage = pinVoltage * ratio; // Use the ratio calculated for the voltage divider // to calculate the battery voltage amps = (float) outputValue / 1000; float watts = amps * batteryVoltage; Serial.print("Volts = " ); Serial.print(batteryVoltage); Serial.print("\t Current (amps) = "); Serial.print(amps); Serial.print("\t Power (Watts) = "); Serial.print(watts); sample = sample + 1; msec = millis(); time = (float) msec / 1000.0; totalCharge = totalCharge + amps; averageAmps = totalCharge / sample; ampSeconds = averageAmps*time; ampHours = ampSeconds/3600; wattHours = batteryVoltage * ampHours; Serial.print("\t Time (hours) = "); Serial.print(time/3600); Serial.print("\t Amp Hours (ah) = "); Serial.print(ampHours); Serial.print("\t Watt Hours (wh) = "); Serial.println(wattHours); lcd.setCursor(0,0); lcd.print(batteryVoltage); lcd.print(" V "); lcd.print(amps); lcd.print(" A "); lcd.setCursor(0,1); lcd.print(watts); lcd.print(" W "); lcd.print(time/3600); lcd.print(" H "); lcd.setCursor(0,2); lcd.print(ampHours); lcd.print(" Ah "); lcd.print(wattHours); lcd.print(" Wh "); lcd.setCursor(0,3); lcd.print(ratio, 5); lcd.print(" "); lcd.print(avgBVal); // wait 10 milliseconds before the next loop // for the analog-to-digital converter to settle // after the last reading: delay(10); } wattmeter.xls9 KB watt_meter_lcd.ino4 KB For more detail: DIY Amp / Watt Hour Volt Meter - Arduino ### Hack Your Hasbro R2D2 With an IOIO Microcontroller My wife bought me a Hasbro Interactive R2D2 Astromech Droid for my birthday a few years ago after I said how much fun it would be to hack it and I've finally managed to get inside and start playing!Although the built-in voice control functions are fun and cool to play with, and our 2 year old loved to dance to the "Hey R2, Dance Program" Cantina Song, there isn't much actual practical functionality to it.  So, this is the first step in making the toy into a customizable remote control sentry robot.  This is an easy and educational first microcontroller project that's great for a parents and kids or classrooms. Since the release of Android's Accessory Development Kit (ADK) last summer, Android devices can now natively act as a USB host to microcontrollers such as Arduino and IOIO boards.  After I disassembled it and pulled out the stock PCBs, I played around with Arduino and was able to get the wheel motors and the dome moving.  Being more of a tinkerer than a programmer, I didn't have the expertise to build the necessary iOS or Android App to remote control the motors.  The added complication of building sketches for the Arduino led me to the IOIO board for now, which allows direct control from the Android device via USB or bluetooth without having to program and reprogram the microcontroller when I add sensors and eventually the dome motor control. I found Simon Monk's new book, "Making Android Accessories with IOIO", and decided to use his method and open-source sample code to tackle the first step of the process:  remote controlling R2 from a smartphone! This is the beginning of an effort to build myRobot, an open-source robotics control platform utilizing Android and eventually iOS devices as "heads", to build telepresence robots out of almost anything!  After R2 and other basic two-wheeled platforms are completed, Roomba support will be next, followed by Arduino support.  Stay tuned! Parts List: Android Controller Device (I'm using a Samsung Nexus S) Hasbro Interactive R2D2 Astromech Droid IOIO for Android Microcontroller, sku: DEV-10748 Motor Driver 1A Dual TB6612FNG, sku: ROB-09457 Barrel Jack to 2-pin JST Cable, sku: TOL-08734 JST Right Angle Connector, sku: PRT-08612 Break Away Female Headers, sku: PRT-00115 8 x AAA battery holder 9V to Barrel Jack Adapter, sku: PRT-09518 Bluetooth USB Adapter - most generic ones should work Jumper Wires Electrical Tape All of the parts except the Android phone and R2D2 itself can be purchased from Sparkfun, home of the IOIO, for less than $100 after shipping and taxes. Tools: Soldering Iron Dremel P1 Phillips screwdriver Drill with 3/8" bit The emotional capacity to disassemble our beloved R2 Note: Version 2 of the IOIO will likely be coming out over the next few months, which if it looks like the promo image, will hopefully negate the need to solder on the female headers and JST adapter. Step 1: Disassemble R2! The Hasbro R2D2 is fairly straightforward to take apart, basically remove every screw you see on the back and in the battery compartment. I found this extensive video guide on youtube if you run into any problems.The most difficult part is removing the dome base, as it is fairly securely attached with double-sided tape.  Gently pry the front and back body pieces apart, and then gently pry the dome base out of the front body piece. I did unsolder the wires rather than cutting, leaving the wires from each leg motor intact, as well as all of the dome sensors for future use. I'm one of those guys that always has either extra parts laying around or not enough screws because they rolled away, so I used the magnet from R2's front casing to hold onto everything as I went. Step 2: Prepare the IOIO and Motor Driver Boards The IOIO and Motor Driver boards both come without headers, so if you're planning to play around, rather than solder your leads directly, I'd suggest soldering on male headers.  You can just solder the ones you need if you want, but I preferred to just get it all done at once.Sparkfun has "Breakaway" female headers in strips of 40 for $1.50 each.  Unfortunately they're not really "Breakaway", they're a solid run of 40, so to use the "Breakaway" feature you have to use a knife or a Dremel.  Sparkfun also sells Swiss Machine Pin style snap-off female headers that are more expensive at $3.95 for a strip of 30, but easier to prepare. I went with the "Breakaway" and mark the length I want then use a Dremel to cut through the next header, filing down the edge flat with the end of the cutting wheel. I tried using a PanaVise to hold the board, but it's easier to just flip over the IOIO with the headers in position flat on your workspace.  As for soldering, this was my first foray into soldering PCBs, and I was surprised how easy the pins were to solder in and how quickly it went, especially since I finally invested in a good soldering station, a Hakko FX-888 - highly recommended!  I'd suggest reading up a bit if you're a novice, I used MightyOhm.com's "Soldering is Easy" comic book which is excellent. Aside from the headers, to deliver more than 5V to the IOIO, you have to solder on a JST connector to the bottom, then make a JST-->9V cable to connect to the battery or use a JST-->Barrel connector cable with a Barrel connector -->9V cable. Step 3: Prepare the Battery There are 2 sets of 4 batteries in the stock R2, 4 x AA for running the controllers and 4 x D for driving the motors.  The IOIO takes 5-15V and 4 rechargeable D cells would give me 4.8V, and I wanted to make sure that the voltage will be able to power an Android phone off of the IOIO USB port eventually, so I opted for an 8 x AA battery holder, for 9.6V that fits perfectly into the compartment. I drilled a 3/8" hole through to the back of the compartment and threaded the female barrel connector through. With 5V-15V in through the JST connector, the IOIO delivers either 5V or 3.3V out through the pins and 5V out through USB to power a smartphone device. Although the IOIO can theoretically supply 1.5A at 5V, my brother-in-law fried an IOIO running fairly small motors directly off an IOIO, so I decided to splice into my battery output and run a direct 9.2V wire to the Motor Driver. Note:  The increased voltage overdrives R2's motors a bit, so he's faster, but it could eventually burn them out - more testing required.   For more detail: Hack Your Hasbro R2D2 With an IOIO Microcontroller ### Arduino PCR (thermal cycler) for under $85 This tutorial will show you how to make a thermal cycler from scratch for about $85. In short, PCR (polymerase chain reaction) amplifies bits of DNA, creating millions of copies of a target sequence. You can use it to test a DNA sample for a specific gene, for instance, to check for genetic modification in food and for hereditary gene testing. During PCR, a mixture of DNA, primer and DNA polymerase is cycled between three different temperature settings, over and over again. This project uses an arduino to control two high-power resistors to heat up the sample, a computer fan to cool down, and a thermocouple to keep track of the temperature. The design supports two samples at a time, though it could probably be extended to support more. The parts are all off-the shelf, and the assembly should take a few hours. You will need access to a shop (at the very least a ban saw and drill press). This project is still a work in progress by Stacey Kuznetsov (stace@cmu.edu) and Matt Mancuso (mcmancuso@gmail.com). Please email us if you have any questions or feedback! Also, huge thanks to Rich Pell, James Lata and the ATX Hackerspace for materials & feedback. Step 1: More on PCR To run PCR, you need DNA, primers that match the sequence you're trying to replicate and polymerase. PCR consists of 3 steps that are cycled over and over again: Denaturation (~94C) At this step, DNA 'breaks apart', splitting from a double helix into single strands Annealing (~60C) Primers bond to the single-stranded DNA Extension (~72C) Polymerase compliments the DNA, synthesizing strands that are of the target sequence Each of these phases can be 20-30 seconds long and repeated 30+ times, depending on the protocol. Most protocols also suggest having a longer initial denaturation step and a longer final extension step. A simple tutorial: http://www.dnalc.org/resources/animations/pcr.html There's also a bunch of related resources here: http://www.lab-manual.com/lm_209.htm The results of PCR can be visualized using gel electrophoresis. DNA samples are loaded into a gel, and a high voltage is applied across it. Because DNA is negatively charged, it will travel through the gel at different speeds depending on its size. This process will effectively separate out the pieces you want, and you can see them by staining the gel. Here's a good tutorial and if you're trying to DIY it, the Macgyver Project is a pretty good resource. PCR can be performed using 3 water baths (each kept at one of the three temperature settings). A human could physically move the samples from one bath to the next 30+ times. PCR machines were developed to automate the process, but most lab-quality ones cost thousands of dollars. But they don't need to! Today there is a growing number of open source PCR projects, among them OpenPCR (600$), LavaAmp ($200), and the Coffee Cup PCR (350$). Step 2: Materials Here's what you need: 2 Wiremound resistors, 150 ohms/50 Watts each (10$ total) Arctic Silver Thermal Epoxy (14$) Solid state relay, such as 25A  AC/DC SSR ($8.50) Aluminum block, final dimensions ~64mm x 64mm x 26mm. check ebay (free - $5) Arduino board, we used the mini ($20) MAX31855 breakout (I used this one for $11, but the Adafruit one might be more reliable for $17.50) Thermocouple wire ($10) 60mm fan ($4) 12V transistor (TIP120 should be fine, $0.70) 12DC, 0.5A power supply ($1) Regular power cable Plywood (if you want to make a case) A few different length bolts and nuts (if you're making the case) we used 6x1" and 2x2" #6 bolts w matching nuts You'll also be using: Some wires Breadboard (small one) Wire cutters/strippers Electric tape Soldering iron/solder Screw driver Bansaw & drill press Laser cutter (if you want to make a case) Wood glue (if you want to make a case) Step 3: The aluminum block We chose aluminum to house our samples because it's a really good thermal conductor and also relatively easy to acquire and work with. We machined the center of the block so that the resistors can fit in to 'sandwich' the samples. The outside of the block is cut like a heatsink to allow for faster cool-down. The images below have our rough dimensions (in mm). Matt was really precise cutting it, but I don't think it has to be super exact. Step 4: The circuit overview The circuit consists of 1) a solid state relay that drives the heater resistors; 2) a fan, powered by the 12 DC supply and controlled by the arduino through an NPN transistor; and 3) a thermocouple with a MAX31855 breakout When hooking up the electronics for the first time, I suggest breadboard, not solder. If you end up making a case, you'll have to disconnect and re-connect a few things to make them fit! Step 5: The circuit- resistors Split and strip the the power adapter as shown in the first image. Hook up the resistors as follows: Black wire -> pin 1 (AC pin) on the relay White wire-> one of the resistors. Connect the second resistor in series. Connect the second resistors to pin 2 (AC pin) on the relay. Connect arduino to the relay Arduino pin 7 -> pin 3 (+DC pin) on the relay Arduino GND -> pin 4 (-DC pin) on the relay Cover all connections w electrical tape!!! ---- some math --- With 2 150ohm resistors in series, the total resistance should be 300 ohms. So with the U.S. outlet voltage being 120V, the current should be 0.4Amps, which makes the wattage 48Watts. The resistors are rated for 50 Watts, so this should be OK, but please double check the math, especially if your outlet runs on 230V (you'll need different resistors with higher Wattage). For more detail: Arduino PCR (thermal cycler) for under $85 ### SPEAKR (Singing Portable Electronic Arduino Kite - Remix!) Nature has a way of speaking to us in a way that soothes and revitalizes. Sounds of the wind in various places create low volume tones that we barely hear. They have a certain beauty and randomness to them that are unique to nature.  We've all heard the wind rustling the leaves, hitting our cars, and, even in its most raw form, moving up against our ears on the beach and in open fields, but have we ever really gotten a chance to hear what the wind would sound like if we analyzed it electronically? The Powerhouse Pirates have done just that.  We modified a simple kite to hold an accelerometer and programmed an Arduino to play tones based on the accelerometer's input. The result is the SPEAKR! (Singing Portable Electronic Arduino Kite - Remix!). If the virtual world had wind, this is what it would sound like.  And the best part is that it's cheap to build and easy to adapt!  We're going to show you how... Step 1: What you'll need.... This project is based on the open source platform Arduino.  The advantage here is that most (if not all) of the components can be swapped out with cheap alternatives. 1) Arduino Uno (Adafruit Link) and Arduino Software Most Arduinos or Arduino alternatives will work here.2) Protoshield (or breadboard) (Adafruit Link) The only thing used here is one circuit to the speaker and its corresponding resistor.  We liked using the protoshield because it attaches right to our Arduino UNO. 3) 9V Battery 2.1mm plug (Adafruit Link) This makes life easier.  You can also use a wall adaptor, but then you have to bring your wall outside. 4) 1 100 ohm resistor (Amazon Link) You only need one of these, and the actual resistance governs how loud your speaker is (so go for 1k or less). (We purchased all of the above materials from our friends at Adafruit in their Arduino Starter Pack for $65 http://www.adafruit.com/products/68. If you've never used an Arduino before, it has a ton of replay value, so we'd recommend taking the plunge for a starter kit similar to this one.) 5) 8ohm speaker (Amazon Link) This is where creativity comes in.  Notice that though the speaker itself is less than a dollar, the shipping puts the total cost at about 14 bucks.  We had a little fun here- we disassembled a talking greeting card and found one of these bad boys inside.  The cards are available at most dollar stores. Radio Shack sells these speakers cheaply, as well. 6) Accelerometer - MMA7361 (Amazon Link) Here's another point where we encourage getting creative.  We used a MMA7361 - available off Amazon and Ebay for relatively cheap, but chances are if you dig deep you can find a similar model online for under 5 dollars.  Wiring and documentation may be a bit different, but what's the fun in a project if it's not challenging? 7) 200 ft of 22 gauge wire (or 8 pieces of 22 gauge wire at 25 ft) (Radio Shack Link) 24 gague wire works, as well. 20 is starting to get a bit on the thick side.  The thinner the wire, the easier it is to fly the kite. There is a tradeoff with the length of wire, as the signal degrades over long distance. 8) Misc odds and ends a) Computer b) Soldering Kit c) Colored electrical tape (for marking wires- colored sharpies will work as well) d) Bubble wrap 3"x2" (for protection in the event of a not-so-smooth landing) e) Duct tape (to make the world go round) f) 9V battery (power the Arduino) g) Wire stripper (for electrical entertainment) h) Scissors (because cutting with our teeth is annoying) i) PC Board or breadboard (hold the accelerometer in place on the kite) j) Optional: female headers if you don't want to solder your accelerometer to your breadboard k) A windy day (or a car will work in a pinch) …And last but not least, a kite of your choice!  We bought ours for $5 at Five Below. The bigger the kite, the better it will support weight, but some larger kites are more difficult to fly (and more painful to watch crash if you're not experienced). Step 2: Assemble the Arduinooooo! 1. Build your Arduino Uno, if you did not purchase it pre-built. 2. Solder the Protoshield together. 3. Properly attach the Protoshield to the Arduino Uno. Step 3: Cut and Label Wires 1. Cut the 200 ft of wire into eight 25 lines of wire -- our lines were 20ft each. 2. Strip the ends of the wire with a wire stripper. 3. Label the ends with tape - we found that colored electrical tape worked best. 4. Twist the wires together to get a rope-like structure. Step 4: Assemble Accelerometer and Wires 1. Solder female headers to PC board. 2. Solder wires to the PC board. 3. Solder the wires to the headers. 4. Cut the PC board (it's pretty big otherwise). 5. Snap in the accelerometer.Be sure to write down which wires are going to which ports!Note: You can solder the accelerometer directly to the PC board, but we chose to use female headers instead so we could re-use the accelerometer for our other projects. For more detail: SPEAKR (Singing Portable Electronic Arduino Kite - Remix!) ### Send and Receive MIDI with Arduino This instructable will show you how to use an Arduino to send and receive a variety of MIDI messages so you can start building your own MIDI controllers and instruments.  First I'll talk a little bit about MIDI protocol, if you're just looking for sample code skip ahead to steps 5-9. If you know absolutely nothing about MIDI note, velocity, and pitchbend or are confused about what MIDI does and why you would want to use it, check out my What is MIDI? instructable. Step 1: Bytes and Bits To understand MIDI communication, you have to understand a little about bytes and bits.  A byte is a packet of data used to store information.  In MIDI protocol, each byte is made up of 8 bits; bits can only equal to 0 or 1.  A sample byte is given below: 11010111 Each 1 or 0 in this byte is a bit.  The leftmost bit is called the most significant bit (or MSB) and the rightmost bit is called the least significant bit (or LSB). Bytes of the form above are binary numbers because they are expressed using only 1's and 0's.  We can convert this number to base ten as well: 11010111 in binary (base 2) = 215 in decimal (base 10) If you need help converting numbers from binary to decimal or vice versa check out Wolfram Alpha.  Type in a binary number followed with "from binary to decimal" to get the decimal equivalent.  Wolfram Alpha is also great for converting to and from hexadecimal. Wikipedia is a good resource for more information about bytes and binary. Step 2: A Bit About MIDI Protocol A really basic overview of MIDI terms and concepts is given here. MIDI messages are comprised of two components: commands and data bytes.  The command byte tells the MIDI instrument what type of message is being sent and the subsequent data byte(s) store the actual data.  For example a command byte might tell a MIDI instrument that it going to send information about pitchbend, and the data byte describes how much pitchbend. MIDI data bytes range from 0 to 127.  Convert these numbers to binary and we see they range from 00000000 to 01111111, the important thing to notice here is that they always start with a 0 as the most significant bit (MSB).  MIDI command bytes range from 128 to 255, or 1000000 to 11111111 in binary.  Unlike data bytes, MIDI command bytes always start with a 1 as the MSB.  This MSB is how a MIDI instrument differentiates between a command byte and a data byte. MIDI commands are further broken down by the following system: The first half of the MIDI command byte (the three bits following the MSB) sets the type of command.  More info about the meaning on each of these commands is here. 10000000 = note off 10010000 = note on 10100000 = aftertouch 10110000 = continuous controller 11000000 = patch change 11010000 = channel pressure 11100000 = pitch bend 11110000 = non-musical commands The last half of the command byte sets the MIDI channel.  All the bytes listed above would be in channel 0, command bytes ending in 0001 would be for MIDI channel 1, and so on. All MIDI messages start with a command byte, some messages contain one data byte, others contain two or more (see image above).  For example, a note on command byte is followed by two data bytes: note and velocity. I'm going to explain how to use note on, note off, velocity, and pitchbend in this instructable, since these are the most commonly used commands.  I'm sure you will be able to infer how to set up the others by the end of this. Step 3: Send MIDI Messages with Arduino- Hardware Parts List: MIDI connector Digikey CP-2350-ND 220Ohm 1/4watt resistor Digikey CF14JT220RCT-ND Following the schematic above, solder a 220Ohm resistor to MIDI pin 4.  Connect ground to MIDI pin 2 and 5V to MIDI pin 5.  If the pin numbering is unclear, refer to the pictures above. Step 4: Plug in MIDI Out Connect the MIDI socket to a MIDI cable and plug the other end of the cable into your MIDI instrument of choice.  I used a MIDI to USB cable and connected to my computer. Step 5: Software Solution: Serial to MIDI Application You can bypass the MIDI adapter setup from the last two steps by using the Ardiuno's USB connection to send Serial messages to your computer, then run an app like Hairless MIDI to convert this the Serial messages to MIDI and route them to other applications on your computer (Ableton, Garageband, etc). The only difference in the code is that you will need to set the baud rate of your Serial connection to something that Hairless MIDI will accept, so be sure that the number in this line in the Arduino's setup() function: Serial.begin(31250); is the same number specified under Hairless MIDI >> Preferences >> Baud Rate (I used 9600, see the image above, I had to replace line Serial.begin(31250) with Serial.begin(9600) in all the example Arduino sketches in this instructable). Normally when you create MIDI with a MIDI connector you need to set the baud rate to 31250, but if you're connecting via USB to a Serial to MIDI application, you can use whatever baud rate you like. To use Hairless MIDI you will need to select your board (something like usbmodemfd121) from the Serial Port menu and select the MIDI channel that you would like to send or receive MIDI to/from. Make sure you have the same MIDI channel selected in the preferences of whatever other MIDI applications you are running on your computer. Another thing to be aware of is that you cannot program the Arduino while it is connected to Hairless MIDI, because the port is occupied (see the error in the second image). A quick way to bypass this without needing to quit Hairless MIDI each time you want to change your code is to select a different Serial Port from the Hairless MIDI interface, upload your new Arduino code, and then set the Serial Port in Hairless MIDI back to the correct one. Step 6: Basic Note On, Note Off with Arduino This code sends MIDI messages out Arduino digital pin 1 using note on and note off commands. As I explained in step 3, the MIDI commands for note on and note off are as follows: noteON = 10010000 = 144 noteOFF = 10000000 = 128 Both of these commands are followed by two more bytes to make a complete MIDI message, the first is note and the second is velocity (for more info about what "note" and "velocity" mean check out my introductory MIDI instructable).  Note and velocity can range from 0 to 127.  In this example I used notes ranging from 50 to 69 (D3 to A4): for (int note=50;note<70;note++){} and I set the velocity to 100: int velocity = 100; So when the function MIDImessage() is called in the loop() of the arduino sketch, it sends the three bytes: Serial.write(command); Serial.write(MIDInote); Serial.write(MIDIvelocity); if the "command" in the MIDImessage() function is noteON then the note will start, if it is noteOFF the note will stop.   For more detail: Send and Receive MIDI with Arduino ### Make Your Hat With Full Of Stars Using Arduino Top hats are cool; just like bow ties.  Not only are they stylish, but they give you a lot of room for incorporating techno goodness.  I recently had cause to buy a tuxedo, which necessitated a kilt, and then a top hat.  You know how it goes.  To the tux I added silver buttons, the kilt was exemplary on its own, so only the top hat needed some flash.  I decided that since my head is generally in the stars, I should try filling my hat with stars.  Initially I was going to use an Arduino and some 1W white LEDs hanging off the PWM lines, and feeding the light through fiber optic lines, to create a twinkling effect.  By the time I started work on the project I realized that I wanted colors, and that 1W LEDs were going to drain my LiPo battery pretty darn fast.  Multiple color LEDs on a single Arduino is a bit of a problem, though.  There are only six PWM channels, so I would max out at two RGB LEDs.  Fortunately I had a few sample Total Control Lighting control chips from Cool Neon in my kit, and with a little hacking they are perfect light sources for this project.  Each TCL chip is a latching, addressable, three-channel PWM controller; so I can control a near infinite number of RGB LEDs from a single Arduino.  Hat space is limited though, so I settled on four; that provided sufficient variety.  The end result of my project is a super-stealth techno-mage top hat that looks amazing when it is turned on, and completely normal when it is turned off.  I can wear it to Dicken's Chrismas Fair and nobody will notice, or to That Thing In The Desert where everyone will notice; one hat for all occasions. I built this project on-site at Burning Man, with only the tools and parts I had in my travel kit.  You should be able to complete this project in two days, accounting for glue drying, using easily available parts for less than $200. tl;dr This article will walk you through every step necessary for adding multi-color dynamic fiber optic lighting to your hat, or any other project to which you want to give a star field effect. Step 1: Parts Almost everything used to make this project is 'off the shelf'.  While something may not already be in your toolkit, there isn't anything here that will be hard to find or for which you won't be clever enough to make a substitution.  :) - Top Hat (Amazon) ($79) - Optical fibers (I used 156 x .03" fibers I had in my kit, cut to around 12") (ebay) (3x1' = $24) - 4x Cool Neon TCL controller chips (Not on their website, but $2 w/LED if you call them directly) (4x$2 = $8) - 4x 8mm RGB common anode LEDs.  (Got mine from Cool Neon, paired with the TCL controller chips) - 2000mAh Lithium Polymer rechargeable battery (Cool Neon / Seeed Studios) ($12) - LiPo Rider recharging module (Cool Neon / Seeed Studios) ($9.50) - Seeeduino (Cool Neon / Seeed Studios) ($27) - 40-pin IDE cable (junk drawer) - bits of velcro (Home Despot) - 1/4" heat-shrink tubing (Fry's) - 2x short USB to USB-mini cables - 3"x2" piece of cardboard Cost of major parts (including hat):  $159.50 Step 2: Tools Everything here should be fairly standard.  The one item here that will probably need to be substituted out is the hypodermic needle.  Threading the fiber optics is a lot easier with a needle that has a dimple in the point, but any large needle should do, with a little extra care. - Computer with Arduino IDE installed, and internet access to download libraries and code. - Wire strippers - Needle nose pliers - Soldering iron - adjustable clamp stand - 28 gauge hypodermic needle (Any thick craft needle will do, but the hollow tip of a hypodermic needle makes it easier to lead the optic fiber back through the hole) - small paintbrush - flush-cut wire cutters - heat gun - electrical tape - wood glue (Home Despot) - Liquid Electrical Tape (Home Despot) - solder - masking tape - zip ties Step 3: Secure the optical fibers to the LEDs It's a bit easier to do this step before the LEDs have been attached to the TCL chips. - Cut four 2" pieces of 1/4" shrink tubing. - Fit the shrink wrap over the light emitting end of the LEDs.  You may need to stretch it out just a little more with the needle nose pliers. I suggest doing the following steps one LED at a time: - Pack the open end of the shrink wrap with optical fibers. - Using the .03" fibers that I had on hand, this came out to around 40 fibers per LED. - Heat shrink the tubing around the fibers, and very carefully around the LED as well. - For extra strength, wrap some electrical tape around the shrink wrap and LED. -I bound the shrink wrap with zip ties over the LED and the fibers, to provide extra support. Step 4: Wire up the TCL chips The key to this project is the TCL controller modules.  Without them, I'd be limited to six monochrome LEDs, or two RGB LEDs, because the 'standard' Arduino only has six PWM pins.  By daisy chaining TCL modules, I can hang a spectacularly large number of RGB LEDs off a mere two pins, leaving me plenty of other input and output pins. TCL controller modules are four connectors on the front, and four on the back, for communication:  Ground, Clock, Data, +5V These are daisy chained from chip to chip, simply matching the corresponding connections.  The order is reversed on the back, but I think the pictures below will be better than a thousand words of explanation. When bought in quantity they come in a perforated block. I left the chips in a solid four chip strip to minimize footprint. - Cut a four-conductor strip off a spare IDE cable.  I used an old 40-pin cable, because they have wire than the newer 80-pin cables. - Cut this into one six inch segment, and three two inch segments. - Strip the ends of all segments back about 1/8 of an inch. - Solder the six inch segment to the chip side of the TCL module you are designating to be #1 in the series. - On the reverse side, solder one end of each of the two inch strips to modules number 1, 2 and 3. - Back to the front, solder the free ends of the two inch strips to modules 2, 3 and 4 on the corresponding pins. Now that you have the TCL chips daisy chained, with a six inch control lead, we are ready for the LEDs.  I mounted my LEDs alternating front, back, front, back; to make running the optical fibers evenly a bit easier. - Align the cathode pin with the hole marked +5, and the rest of the pins line up. - Push the leads through the hole as far as you can, solder and cut them. Step 5: Wire the TCL chips to the controller Let's wire up the kit and test it out.  I soldered my wiring to the Seeeduino, but you can temporarily use the shield connectors to test. - Split the ribbon into four separate wires, about two inches from the free end. Working the wires left to right, as connected to the chip-side of TCL module #1 - connect wire 1, GND, to GND on the Seeeduino - connect wire 2, clock, to pin 13 on the Seeeduino - connect wire 3, data, to pin 11 on the Seeeduino - connect wire 4, +5, to +5 on the Seeeduino At this point, we should be ready to program and test. - Download the TCL library and install it into your IDE. - Download the TopHat sketch, and open it in your IDE. - Use the IDE to download the TopHat sketch to your Seeeduino. Once it finishes downloading, the sketch should automatically start, and you will notice that the fiber optic bundles are color cycling. Step 6: Tying the electronics together The power supply for this project is pretty simple.  I taped a LiPo Rider charging module to a 2000mAh Lithium Polymer battery, with a piece of cardboard as an insulator so the solder points on the bottom of the LiPo Rider can not damage the battery casing. The LiPo Rider is a nifty module.  It does USB pass-thru, so you can power and program your Arduino/Seeeduino without disengaging the LiPo Rider.  While you are working on your project, the LiPo rider is charging your battery.  The LiPo Rider will also accept power from solar cells, for charging.  For complete details, check out the LiPo Rider wiki page. - Cut a piece of cardboard to the size of the LiPo Rider, sandwich between the LiPo Rider and the 2000mAh battery, and secure with electrical tape. - Connect the Lithium Polymer battery connector to the BATT terminal on the LiPo Rider - Connect the LiPo Rider and Seeeduino together using a short USB cable - Flip the LiPo Rider switch to the on position, to verify that your Seeeduino and LEDs are receiving power.  Once tested, flip the switch off to conserve power.   For more detail: Make Your Hat With Full Of Stars Using Arduino ### HandSight: A Glove for the Blind to Feel Shapes and Navigate Obstacles HandSight is a prototype glove to aid the blind. It can sense the lightness or darkness of a surface with tactile feedback from a vibration motor for each individual finger. It can also sense distance from physical objects or obstructions and indicate direction and distance with the same vibration feedback. It supports additional modes, and the possibilities are nearly endless. The glove can connect over Bluetooth to switch modes and visualize the sensor readings. This instructable was made as part of the final project requirement in the CS graduate course "Tangible Interactive Computing" at the University of Maryland, College Park taught by Professor Jon Froehlich. The course focused on exploring the materiality of interactive computing and, in the words of Hiroshii Ishii, sought to "seamlessly couple the dual worlds of bits and atoms." Please see http://cmsc838f-f12.wikispaces.com/ for more details. See our Wiki class page for the project here (where we talk about some of our challenges and limitations): http://cmsc838f-f12.wikispaces.com/HandSigh Remove these ads by Signing Up Step 1: List of Materials - Arduino Pro Mini-328 (5v, 3.3v may work but not tested) (x1) - IR Reflectance Sensor - QRE1113 (x4) - Vibration Motor ROB-08449 (x4) - Ultrasonic Range Finder (x2) http://www.amazon.com/Ultrasonic-Module-HC-SR04-Distance-Arduino/dp/B004U8TOE6/ref=sr_1_1?ie=UTF8&qid=1355861471&sr=8-1&keywords=Ultrasonic+Range+Finder - Bluetooth Mate Silver WRL-10393 (x1) - 68 ohm Resistor (x1) - 9v Battery and Battery Case with Switch (x1) - FTDI cable (for programming) (x1) - Double Sided Sticky Tape, or other adhesive to hold the ultrasonic sensors in place - Wire, electrical tape, and soldering materials. Rainbow ribbon cable is recommended for easy wiring of the fingertip sensors. - Glove that you don’t mind repurposing permanently - Extra cloth that matches the glove - Velcro, Sewing Materials - Windows Phone to run our visualization and control app, or any device that supports the Bluetooth Serial Port Protocol (SPP) if you want to develop your own appAll electronic components available on sparkfun unless otherwise noted Step 2: 3D Printing Holders for the sensors can be found here:http://www.thingiverse.com/thing:38133 http://www.thingiverse.com/thing:38134We printed with MakerBot Replicator 2. Download STL files, open in a program called ReplicatorG. Put on platform/center. Generate Gcode.Material PLA Settings used: infill% 10 layer height 0.27 mm number of shells 1 feedrate 41 m/s travel feedrate 56 print temp 226 plastic diameter 1.75 mm extruder nozzle diameter 0.4mm (in the actual gcode we changed platform temp to 060, which worked well for PLA) Print four sets of the fingertip case, and two of the ultrasonic slot. ultra_sonic_holder.stl ultra_sonic_holder.stl45 KB avrcase2.stl avrcase2.stl424 KB Step 3: Assembling the IR Sensor Package for Each Finger Thread wire through the holes, place sensor next to them so that pin 1 is in bottom left. Carefully solder the wires to the pins, and check to make sure there aren’t any short circuits. Add the vibration motor into its hole, and solder wires to the leads so that they are the same length as the IR sensor wires. Repeat this process for the other three sensor assemblies. We used a rainbow ribbon cable for this process so that the wires stayed compact and so that it was easy to identify which wire was which. Step 4: Attaching Fingertip Assemblies to the Glove Cut a hole the size of the face of the 3D printed assembly into each of the four fingertips (not the thumb. Also cut a small slit on top of each finger of the glove large enough to pass through all six wires. You should reinforce the cut areas by either sewing tight stitches around them or by melting them depending on the glove’s material. Now thread the wires through the hole in the fingertip and out the hole on top of the knuckles. Repeat for the other three sensor packages. Step 5: Attaching Ultrasonic Sensors to the Glove Sew the two ultrasonic sensor supports to the top of the glove, far enough back so that they won’t bend with the fingers. They should be angled slightly away from each other so that their field of view is widened (5-10 degrees). Place double sided sticky tape or some other adhesive on the plastic between the slots, and attach the two ultrasonic sensors with their power and communication pins facing up and their audio sensors facing forward. Either solder wires to the pins, or use a less permanent solution as we did (see image). For more detail: HandSight: A Glove for the Blind to Feel Shapes and Navigate Obstacles ### Paint Pulse: Digital Water Marbling Paint Pulse is a project which seeks to build upon the water marbling crafts of Ebru and Suminagashi with digital behavioral additions. The idea is to design intricate, flowing patterns of paint directly on the surface of water which you can capture on the surface of paper. Expert crafters can hold an intricate mastery over the art and produce incredible results.  Our goal was to add additional digital elements to the craft which would afford new means of expression without fundamentally altering the interaction. Thus experts would be able to retain their mastery while exploring new possibilities for the art. This was made as part of the digital craft research we do in our project studio as part of the Digital World and Image Group by Colton Spross, Andrew Quitmeyer, and Adam Rafinski. In our lab we explore modes of digital intervention in performance, space, and craft in order to create novel interactions between people and their environments. This thorough instructable will give you the knowledge necessary to make your own digital ebru art-studio, and will as well teach you many different skills for rapid prototyping and physical computing. Things you will get to learn in this instructable include: Make cheap, powerful electromagnets How to make magnetic, floating paint How to salvage a thin, gorgeous backlight How to vacuum-form your own paint-resistant tray Programming Arduinos connected to H-Bridges (Build your own motor controllers for the electromagnets) Hack ethernet jacks and cables for routing numerous signals over long, hard-wired distances Step 1: Materials Paint Suminagashi - After a whole bunch of experimentation, the easiest to use colors that we have discovered are: Japanese Suminagashi marbling inks You can use just regular water, and regular paper and the inks float and absorb readily and easily! Other Inks Ebru - formulated after the traditional Ebru style of painting, need the inks to float in the special Methocel solution instead of just water. These are much trickier to get working! Food coloring -  floats well, but when you dip it in the water, it doesn't bond to the paper, and just runs off! Annoying! Ferrofluid FerroTec EFH1 is the best I have found, it's is a special mixture that if put in a correct substrate, you can get really good display that doesn't adhere to the glass (like in these cells) You can also find other ferrofluid online for a little cheaper, but note that they all behave differently! Painting Tray Pyrex Baking Tray $16 Since you are working with Ferrofluid, you need a container that is preferabbly clear (so it can be backlit), and won't let the ferrofluid stain it dark. You can just use a large pyrex baking container, but not ordinary plastic trays because the Ferrofluid will permanently stain it. PET-G Vacuum Formed into a tray 24"X24" $16 It was really hard to find a large tray made of glass, (the only ones we could find were for auto-claving biochemical stuff and cost around 400 dollars). So instead we built our custom tray from a special type of plastic called PET-G Dipping Buttons Ikea Galej candle holders $4 24X12 Black Acrylic (1/4")  $18 Sensing and Actuation Arduino Uno (or whatever you are comfortable with, the Uno has just BARELY enough ports to do this project) Breadboard Wires Electromagnetic Stylus and Rake Nails (Colton - what are the dimensions) LED's 10k Resistors Electromagnetic Wire  Electrical Tape Stuffing (foam or cotton, non-combustible/flamable) H-Bridge Chips TI SN754410 $2 Ethernet Jacks x4 (snap open a home depot coupler to get 2 jacks for 2 dollars instead of 1 jack for ~7 dollars at radioshack) Ethernet Cable (14") Tools Hot Glue Gun Soldering Iron Solder Laser Cutter (Optional) Vacuum Former (optional) LDF (for tray, optional) Table Saw (for tray, optional) 3D Printer (optional) Ceiling with rails to hang the connections, or something else that can hang over the paint area to hold the cables Paper Water color paper works nice Some Ebru techniques need paper that's been treated with alum, these Suminagashi inks that we found shouldn't need any treatment for the paper Computer paper has been working fine for us (though the colors seem less brilliant on some paper stocks than others)   For more detail: Paint Pulse: Digital Water Marbling ### Traffic Signal / Stop Light Wiring with Arduino Controller I always wanted an old traffic signal and finally got one recently.  However, it was very simply wired so that all the lights were fixed on.  What fun is that?  I also wanted to try out an Arduino controller and thought this would be a nice simple project to incorporate it into. This Instructable will show you how to wire up an old traffic signal with an Arduino controller to function like a real traffic light.  I used a pretty simple program and controls.  Given the power of the Arduino controller, there are a lot of ways you can customize this. Step 2: The plan Below is a wiring diagram for the traffic signal.  Hopefully this is pretty clear what gets wired to what. Above is a photo of the Arduino Uno and the relay module with the wiring between the two attached.  I only had male to male jumpers, so I used a Molex connector and my mad soldering skills to make a connector (second photo).  It is probably easier to use male to female jumpers to connect everything or find a 6 pin jumper to use.  The Arduino has all female sockets and the relay module has all male pins. If you have not used an Arduino before, see this Instructable by randofo: http://www.instructables.com/id/Intro-to-Arduino/ Download and start the Arduino programming software if you have not already.  Connect the Arduino to your computer with a USB B cable. Copy and paste the code the below and upload it to the Arduino.  One the code uploads it should start running immediately on the Arduino.  You should see the indicator lights going on and off on the relay unit and hear the relay switches tripping. You can make this more simple or complicated if you want.  I have it set up to cycle through 25 normal cycles, switch to blinking red for a few minutes, do 25 more normal cycles, switch to blinking yellow for a few minutes, and then repeat. //Fzumrk's traffic controller code // name your pins: int red = 12; int yellow = 11; int green = 10; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(red, OUTPUT); pinMode(yellow, OUTPUT); pinMode(green, OUTPUT); } int  var = 0; //defines and sets initial value for variables used below int var1 = 0; //defines and sets initial value for variables used below // the loop routine runs over and over again forever: void loop() { // sets initial value for pins so that lights start as "off" digitalWrite(green, HIGH); digitalWrite(yellow, HIGH); digitalWrite(red, HIGH); while(var < 25){ // repeats normal cycle 25 times digitalWrite(green, LOW);   // turns the green light on delay(20000);               // holds the green light on for 20 seconds digitalWrite(green, HIGH);    // turns the green light off delay(600);               // slight pause between lights digitalWrite(yellow, LOW);  //turns the yellow light on delay(4000); //holds the yellow light for 4 seconds (watch out for that red-light camera!) digitalWrite(yellow, HIGH); //turns the yellow light off delay(600);  //slight pause between lights digitalWrite(red, LOW);  //turns the red light on delay(20000);  //holds the red light on for 20 seconds digitalWrite(red, HIGH);  //turns the red light off delay(600);  //slight pause between lights var++;}  //adds 1 to variable "var" for repeat count // after 25 cycles above, the light switches to "power outage mode", flashing red delay(600); //slight delay var1=0; //resets variable "var1" to 0 while(var1 < 120) { // repeats power outage cycle 120 times - 2 minutes digitalWrite(red, LOW); delay(600); digitalWrite(red, HIGH); delay(400); var1++;} var = 0; //switches back to normal cycle after "power outage" cycle is done while(var < 25){ // back to normal light cycle for 25 cycles digitalWrite(green, LOW);   // turn the LED on (HIGH is the voltage level) delay(20000);               // wait for a second digitalWrite(green, HIGH);    // turn the LED off by making the voltage LOW delay(600);               // wait for a second digitalWrite(yellow, LOW); delay(4000); digitalWrite(yellow, HIGH); delay(600); digitalWrite(red, LOW); delay(20000); digitalWrite(red, HIGH); delay(600); var++;} delay(600); //switches to "late night cycle" flashing yellow for 2 minutes, similar to flashing red above var1=0; while(var1 < 120) { digitalWrite(yellow, LOW); delay(600); digitalWrite(yellow, HIGH); delay(400); var1++;} var = 0; //goes back to normal cycle at top and repeats forever } Major Components in ProjectObviously you will need an old traffic signal.  I got mine on Craigslist for $40.  It is one of the newer plastic cased ones, but it looks fine from a distance.  I would kind of like an old metal one, but I’ll have to upgrade later I guess. The brains of this thing are going to be an Arduino Uno connected to a relay module. Arduino Uno http://www.amazon.com/Arduino-UNO-board-DIP-ATmega328P/dp/B006H06TVG/ref=sr_1_1?ie=UTF8&qid=1362360128&sr=8-1&keywords=arduino+uno SainSmart 4-Channel 5V Relay Module http://www.amazon.com/SainSmart-4-Channel-Relay-Module-Arduino/dp/B0057OC5O8/ref=sr_1_2?ie=UTF8&qid=1362350898&sr=8-2&keywords=RELAY+MODULE (Note:  This relay is pretty loud.  I can hear it click from across the room.  If anyone has suggestions for something similar that is not as noisy, let me know.) You will need a power supply (transformer, wall wart, AC/DC adapter) for the Arduino.  I used a 12V 750mA wall wart that I had from some other piece of electronics that had died.  Most 7V to 12 V transformers should work.  You can pick one up at Goodwill for about $2.  Stay away from Radio Shack, they wanted $20-$30 for wall warts!  I am sure someone who knows more about the Arduinos can chime in as to what kind of amperage range you should stay in.  Here’s one from Amazon that should work fine: http://www.amazon.com/Wall-Adapter-Power-Supply-650mA/dp/B003XZSZWO/ref=pd_bxgy_pc_img_y You will also need some male to female jumpers to connect the Arduino to the relay module (note, I did not have these but wish I did): http://www.amazon.com/Jumper-Wires-Premium-200mm–Female/dp/B008MRZSH8/ref=sr_1_1?s=electronics&ie=UTF8&qid=1362360630&sr=1-1&keywords=jumper+wire+male+to+female Note:  If you do not want to mess with the Arduino, there are a couple ready to go traffic signal controllers available online.  I could have gone this route, but I was really wanting to try out the Arduino: http://www.ecrater.com/p/12018399/micro-3-traffic-light-signal-controller http://trafficlightwizard.com/3colorsequencerkitforrotationofflashinglight.aspx A lamp or appliance cord with ground wire Other materials you will need will depend on the starting state of your traffic signal.  I used some 16 ga wire (for the internal line voltage wiring), solder, sheet metal screws (for securing the Arduino and relay module, and attaching ground wires to the frame), wire nuts (for connecting line voltage wires), epoxy (to secure transformer), heat shrink tubing (to insulate transformer connections). Tools: You will need a USB B cable to connect the Arduino to your computer to program it.  If you have a USB printer you should already have one of these. Wire cutters Wire strippers mini flat head screwdriver for relay connections Other tools you will need will again depend on the initial state of your traffic signal.  I used the following: Cordless drill (for drilling holes in the case) Soldering Iron (for wire connections and heat shrink tubing) Dremel tool with milling bit (cut off some the plastic in the case to make mounting the new components easier) Eye and hearing protection if you are using power tools. Software: You will need the Arduino programming software to upload the code to the Arduino: http://arduino.cc/en/main/software For more detail: Traffic Signal Wiring with Arduino Controller ### Raspbmc Mediabox Steampunk style I wanted to have my personlal, nice looking Mediabox with a big display and remote control. I' ve been playing around with the Raspberry for a while so I decided this would be the platform of choice for this project. I' m actually a fan of Steampunk so I decided to use a Steampunkish style for the box. Features: Raspbmc user interface accessible via a 7" inbuilt display control via any IR remote control via web interface control via smartphone / tablett app audio output via Cinch Samba, FTP support Step 1: Needed Parts and Tools Parts Here is a list of the basic parts I used for building the MediaBox: Raspberry Pi Model B: 30..35€ a small SD card (256MB or so) USB stick for the operating system (2GB) USB hub with power supply 7" Display set from Pollin 39,95€ Edimax WLAN stick: 7,99€ Flirc IR remote control USB dongle: 19,00€ Speedlink Vigo USB soundcard: 11,95 wooden box from the art supply store (W240mm x H180mm x D145mm) small wooden bar (about 100mm x 5mm x 5mm) brass spray junction box with 3 spaces Velcro tape All together the whole thing will cost you about 130€. Tools For cutting the holes in the wooden box I used a Dremel. If you don' t have one you can use a coping saw. Also you will need: sandpaper for smoothing the edges wood glue for the wooden bars holding the display in place wood drills for the supply cable Step 2: Mounting the display The display set comes in three parts: the actual display, the main board and the control panel. All three parts of are connected quite easily by plugging the flat cables in the appropriate plugs according to the manual. For mounting the display to the wooden box you have to cut a rectangle. I used a Dremel with a straight edge guide (Dremel 678) here. Surely one can also use a coping saw. Don' t cut the rectangle to big because you have to smoothen the edges with sandpaper afterwards.   For more detail: Raspbmc Mediabox Steampunk style ### Earth Globe Rotating With Arduino Or Raspberry Pi Controlled Stepper Motor using arduino This instructable describes how to upgrade your globe to a motorized version. It looks amazingly better on the shelf when it is slowly rotating, and any demonstration with your kids (to explain the day/night cycle or the seasons) will gain in interest. No need to rotate the globe by hand while painfully holding the flash light with your teeth. The instructions correspond to the various parts I had at my disposal so they may have to be adapted to yours. The needed parts are: a globe, the one I used is this one ($30) http://www.amazon.com/Elenco-11-Desktop-Political... a stepper motor + driver. This one is great because it is geared down conveniently for the kind of torque/speed we want ($6) http://www.amazon.com/gp/product/B00DUSYEWY an arduino or raspberry Pi (see link bellow) some axle + wheel from a lego box or such. The axle I use is ~1/4" diameter and was a left over part from a kit, http://www.amazon.com/Thames-Kosmos-665068-Solar-M... various tools, such as a saw or knife, a drill, glue (hot glue is optional),... but you do want a very strong epoxy JB-Weld that sets in 4 minutes (explanations in step 4), such as this one http://www.amazon.com/J-B-Weld-8276-KWIK/dp/B0006O... I will not describe the operation of the motor since it is very well done in this instructable: http://www.instructables.com/id/BYJ48-Stepper-Moto... you might want to check it out first since some of the steps bellow are better carried out if the motor is powered and rotating. Step 1: Flush the globe axis with the rotating plate This globe, rests onto a plate that can be taken out. Take it out. The large axis that protrudes has to be cut so that the plate will be flush with it when resting on its position. After you cut the axis (leaving 2-3mm of protrusion), place the plate back on its stand. It should rotate freely. If not, shave the small plastic fibers (left over from the cut) with a knife. Step 2: Drill the base of the arm for your wheel axle The globe axis that we just cut is actually hollow on this globe. But the hole is not circular and to small anyway for the wheel axle I have. Find a drill bit with a diameter that corresponds to the wheel axle you have. If you have another one, slightly smaller, use it first. You want the drill to be well guided by the existing hole, and using the smaller drill bit may help you in this task. Also, be careful to not damage the plastic part by going to fast. The most important part is to stay on axis. Do not drill if you are forced to be off axis. Prefer to drill from the top by bending slightly the globe arm away, it might actually guide you since the top part of the arm is precisely on the rotation axis. Step 3: Glue the wheel in the plate Set the wheel on its axle. then fit the axle into the hole through the plate. It should rotate freely, without much play. At that point, you can glue the wheel in the plate. I used hot glue, just in case I would want to take the wheel back out, but a few drops of epoxy would do it.   For more detail: Earth Globe Rotating With Arduino Or Raspberry Pi Controlled Stepper Motor using arduino ### Arduino Powered 3-zone thermostat I was looking at all those swoopy-zoomy internet connected and controllable thermostats. "Self," I told myself, "we should make one of those." He didn't seem all that excited about that - I mean, what do we know about hardware, firmware, electronics or HVAC? Well, now's as good as any to figure it out. So without further ado, here's my Instructable on my endeavors building a functioning 3-zone thermostat. (internet connectedness coming later) Step 1: Procure components This build requires lots of different things I didn't have, and as such I had to move forward by using the internet! I researched (a LOT of research) all the different components people are using and have success within the realm of what I was trying to do. That meant I needed a bunch (or at least some) of the following: Arduino Uno - I know there's a way to build your own, but I'm trying to keep things simple - at least initially. Besides, I need to be able to program the ATMega chip, right? Temperature Sensors - DS18B20 Temperature Sensors was what I decided on. There was another one that also could handle humidity, but again we're erring on the side of simpler. 16x2 Character LCD display - Hitachi compatible. LCD Keypad Arduino shield miscellaneous wire leads, connectors, and resistors. Once all my parts arrived, I started looking at hooking things together on a small, local scale. Step 2: Start programming the Arduino I am not new to programming, so moving into the programming space of the Arduino was not some imposing task. I went through a handful of tutorials (turning on LED's and such) to get the syntax and some of the conventions down, and I was off. The first thing I did was document what I wanted to do IN THE CODE. After that, I ran a thumbnail sketch of the program I wanted to develop - that is, I set up the inputs and outputs, sketched out some functions which I could use to open and close the dampers, turn the furnace on or off, those kinds of things. Great, I had my initial program sketched out. Of course it wasn't ready, wouldn't compile, anything like that. During this process, I was getting pretty frustrated with the poor development environment of the Arduino IDE. A quick search later, I had found an add on for SublimeText called 'Stino'. Stino did everything I wanted it to and was a much more mature dev environment. I switched over immediately. Step 3: Pull the program together The first step in making the program actually work was to get the temp sensors working. They are at the heart of the thermostat, and without them, the furnace doesn't know when to turn on or off. Time to introduce a couple of libraries. The temperature sensor is pretty cool in that it uses a single wire to send data back to the Arduino. What's more, each sensor has an address, a unique number which identifies the sensor. This is really exciting because it means you can have multiple sensors sending their inputs into the same pin on the Arduino (a big deal when you start to look at what it takes to plug in the 16x2 LCD screen. Pin space is at a premium!). In order to do this, we'll call on a couple of libraries that already exist - no need to reinvent the wheel. The two libraries are OneWire and DallasTemperature. Both are freely available and will come in useful as we move forward. Being unfamiliar with either one of these libraries, I again referred to the interwebs and found a pretty interesting tutorial on just that thing. All I had to do was modify it to fit my needs. In going through the hacktronics tutorial, it was mentioned that the DS18B20 Temp sensors are addressable - that is, that they are represented by a specific address. This is what allows for multiple sensors to ride into the Arduino on the same pin. So as we go forward, we have to find those temperature sensor addresses. Hacktronics offers another tutorial which outlines how to find those addresses, as well. OneWire library DallasTemperature library Code so far: (a lot of stuff is commented out because there are still a lot of suppositions and unknowns, but I THINK this is how the code will eventually play out. We'll see) /* This is the application that I will be using to control the furnace. The concept is this: I have 3 zones I will be monitoring. Each zone will have at least one zone damper which will be controlled by the arduino application. Each zone will have a single thermometer which will report back to the controller. Depending on the thermometer reading and the thermostat setting, the dampers will open or shut and the central furnace will be turned on. Once an acceptable temperature has been reached in all zones, the furnace will turn off. In addition to general heating cycles, the system will be programmable. At this time, however, the programming cycle will be handled here, not via the thermostat. IMPORTANT TEST CASES: (to be added as I think of them/come across them * Need to ensure that the furnace is always off if all 3 dampers are closed. */ #include //This is a library needed for the LCD display #include //This is a library needed for the thermometer readings #include //This is a temperature library #include // Connections: // rs (LCD pin 4) to Arduino pin 12 // rw (LCD pin 5) to Arduino pin 11 // enable (LCD pin 6) to Arduino pin 10 // LCD pin 15 to Arduino pin 13 // LCD pins d4, d5, d6, d7 to Arduino pins 5, 4, 3, 2 LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); const int backlight = 13; //controls backlight #define THERM_BUS 6 // all temperature readings come in via this single pin. OneWire oneWire(THERM_BUS); DallasTemperature sensors(&oneWire); DeviceAddress zone1Therm = {0x28, 0x48, 0x39, 0x11, 0x04, 0x00, 0x00, 0x94}; // START PROGRAMMING // Times are 6 AM, 8 AM, 3PM, and 9PM int* PROGRAMMED_VALUES[7]; int SUNDAY_VALUES[4] = {67, 67, 67, 60}; int MONDAY_VALUES[4] = {67, 67, 67, 60}; int TUESDAY_VALUES[4] = {67, 67, 67, 60}; int WEDNESDAY_VALUES[4] = {67, 67, 67, 60}; int THURSDAY_VALUES[4] = {67, 67, 67, 60}; int FRIDAY_VALUES[4] = {67, 67, 67, 60}; int SATURDAY_VALUES[4] = {67, 67, 67, 60}; //END PROGRAMMING float zone1Temp = 0; float zone2Temp = 0; float zone3Temp = 0; boolean isOverrideHeld = false; boolean isOverridden = false; boolean furnaceState = false; //with furnaceState, false means it's currently off, true means its currently on. int overrideValue = 0; const int furnacePin = 1; void setup() { Serial.begin(9600); // This connects the arduino to the RPi sensors.begin(); sensors.setResolution(zone1Therm, 10); //SETUP OUTPUTS pinMode(furnacePin, OUTPUT); //SETTING UP THE WEEKLY PROGRAM PROGRAMMED_VALUES[0] = SUNDAY_VALUES; PROGRAMMED_VALUES[1] = MONDAY_VALUES; PROGRAMMED_VALUES[2] = TUESDAY_VALUES; PROGRAMMED_VALUES[3] = WEDNESDAY_VALUES; PROGRAMMED_VALUES[4] = THURSDAY_VALUES; PROGRAMMED_VALUES[5] = FRIDAY_VALUES; PROGRAMMED_VALUES[6] = SATURDAY_VALUES; } // this runs the continual loop void loop() { delay(1000); log("000", "Getting Temperature"); sensors.requestTemperatures(); zone1Temp = getTemperature(zone1Therm); log("001", (String)(int)zone1Temp); // if(c1 || c2 || c3) { // if(!furnaceState) { // startFurnace(); // } // TODO - DETERMINE THE CORRECT PINS FOR THE DAMPERS. WILL THE DAMPERS BE DIGITAL OR ANALOG? // if(c1) { // openDamper(1); // } // if(c2) { // openDamper(2); // } // if(c3) { // openDamper(3); // } // } // else { // if(furnaceState){ // stopFurnace(); // } // } // if(!c1) { // closeDamper(damper1Pin); // } // if(!c2) { // closeDamper(damper2Pin); // } // if(!c3) { // closeDamper(damper3Pin); // } } float getTemperature(DeviceAddress deviceAddress) { float tempC = sensors.getTempC(deviceAddress); //Serial.println(tempC); if(tempC == -127){ Serial.println("ERROR getting temperature."); } return DallasTemperature::toFahrenheit(tempC); } //convenience function. Handles all the boilerplate for writing to the LCDScreen void toScreen(String line1Value, String line2Value) { lcd.begin(16,2); lcd.clear(); lcd.setCursor(0,0); lcd.print(line1Value); lcd.setCursor(0,1); lcd.print(line2Value); } int getTime() { return -1; } void openDamper(int damper) { // if(damper == damper1Pin || damper == damper2Pin || damper == damper3Pin) { // digitalWrite(damper, HIGH); // } else { // log("Problem opening damper. Damper not found. Was expecting 1, 2, or 3. Got " + damper); // } } void closeDamper(int damper) { // if(damper == damper1Pin || damper == damper2Pin || damper == damper3Pin) { // digitalWrite(damper, LOW); // } else { // log("Problem closing damper. Damper not found. Was expecting 1, 2, or 3. Got " + damper); // } } //function for logging messages to the console. //Eventually plan to write to logfile on RPi void log(String code, String message) { Serial.println(code + ": " + message); } void recordData(String type, String object, String value) { // TODO - output to RPi database } void startFurnace(){ //Send appropriate signal to the furnace to start up if(furnaceState != 0) { digitalWrite(furnacePin, HIGH); } } void stopFurnace(){ //Send appropriate signal to the furnace to stop if(furnaceState == 1){ digitalWrite(furnacePin, LOW); } } Step 4: First steps in getting things working So now I have my breadboard, a temperature sensor, an Arduino, and have the program set up so I can test out and see if my temperature sensor is reading correctly. Now to wire everything up and see what happens!   For more detail: Arduino Powered 3-zone thermostat ### Intermediate Arduino: Inputs and Outputs using arduino Continuing from my Intro to Arduino post, this Instructable will go over some slightly more advanced topics with Arduino, specifically relating to controlling and managing many inputs and outputs. The next class covers how to connect the Arduino's inputs and outputs to MIDI. Parts List: (1x) Arduino Uno Amazon or you can pick one up at a local Radioshack (1x) usb cable Amazon (1x) breadboard Amazon (1x) jumper wires Amazon (8x) red LEDs Digikey C503B-RCN-CW0Z0AA1-ND (8x) 220Ohm resistors Digikey CF14JT220RCT-ND (1x) 10kOhm resistor Digikey CF14JT10K0CT-ND (1x) tact button Digikey 450-1650-ND (1x) 595 shift register Digikey 296-1600-5-ND (1x) red LED dot matrix Adafruit 454 Step 1: Blink without Delay() So far we've been using the delay() function to pause the Arduino sketch momentarily so that a little time can pass between two Arduino commands. In the LED blink sketch, we used delay() to set the amount of time the Arduino was lit and the amount of time it was turned off: digitalWrite(ledPin, HIGH);//turn LED on delay(1000);// wait for 1000 milliseconds (one second) digitalWrite(ledPin, LOW);//turn LED off delay(1000);//wait one second Sometimes using delay() is not a great option because the Arduino can't perform any secondary tasks while the delay is happening. Imagine we wanted to blink an LED and detect a button press at the same time using delay(): loop(){ digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); boolean buttonState = digitalRead(7); } In the code above, we are only measuring the button once every two seconds, so it may take up to two seconds before a button press is detected, and very brief presses might not ever get detected at all. millis() gives us control over when events happen without putting pauses in the sketch. Each time we call millis() in an Arduino sketch, it returns the number of milliseconds since the Arduino was turned on. Run the following code to see how millis() works: //recording time with Arduino millis() void setup() { Serial.begin(9600); } void loop() { unsigned long currentMillis = millis(); Serial.println(currentMillis); } Here's how to use millis() to blink an LED without using delay(). //blink led without delay() int ledPin = 7; int ledState = LOW;//current state of the LED unsigned long timeOfLastLedEvent = 0;//the last time the LED was updated int intervalON = 1000;//how long we want the LED to stay on int intervalOFF = 500;//how long we want the LED to stay off void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, ledState); } void loop() { unsigned long currentMillis = millis(); if (ledState == LOW){//if the LED is already off if (currentMillis - timeOfLastLedEvent > intervalOFF){//and enough time has passed digitalWrite(ledPin, HIGH);//turn it on ledState = HIGH;//store its current state timeOfLastLedEvent = currentMillis;//update the time of this new event } } else {//if the LED is already on if (currentMillis - timeOfLastLedEvent > intervalON){ digitalWrite(ledPin, LOW); ledState = LOW; timeOfLastLedEvent = currentMillis; } } } The sketch above introduces a few new things: unsigned long is another data type (so far we've seen int and boolean). Unsigned long is like int, but larger, I'll explain... Each data type requires a certain amount of space in the Arduino's memory, and the amount of space that the Arduino frees up for a given variable dictates the min and max values that the variable can store. For example, int's can range from -32,768 to 32,767, if you tried to do something like this: int myVariable = 100,000; You would end up with a very strange bug in your code. This may seem like an arbitrary range, but it comes from the fact that int's require 16 bits of space in the Arduino's memory, and with 16 bits of binary you can store numbers from 0 to (2^16-1) = 65535. But people decided that int should be able to store negative numbers too, so one of the bits in the 16 bit number is used to store the sign (positive or negative) and the remaining 15 bits store the value : 2^15 = 32768. Including 0, we end up with the range -32,768 to 32,767. Another data type called an insigned int does not store sign, so it gets the 0 to 65535 range that I calculated before, but you cannot store a negative number in an insigned int. When we need to use numbers larger than 65535 or less than -32768, we use a data type called long. Long is allocated 32 bits of space in the Arduino's memory. 2^32 = 4,294,967,296, center this around zero to get a range of : -2,147,483,648 to 2,147,483,647. Unsigned long's, like unsigned int's are always positive, so they range from 0 to 4,294,967,295. There is no larger data type for storing numbers than long, so if you need to store a number larger than 4,294,967,295, you'll have to come up with a different way to store it (maybe the first 9 bits in one number and the last nine in another?). This limitation has some interesting consequences for the millis() function. Since millis returns unsigned longs, and it's constantly counting up in milliseconds, millis() will actually reset back to zero once it reaches: 4,294,967,295 ms = 4,294,967seconds = 49.71 days If you use millis() and you plan on keeping you project running for extended periods of time without ever turning it off or resetting, you should be mindful of this. One more comment about data types: We could have been using long's or unsigned long's this whole time when we declare pin numbers or other variables in the example sketches so far, but generally it's a good idea to use the smallest data type possible for a variable, that way you have plenty of extra space in the Arduino's memory for other things. In Arduino, longs are rarely used, but millis() is a good example of when they come in handy. Getting back to the sketch, the general idea is to store the last time you toggled the LED on or off and compare that with the current time returned by millis(). Once the difference between those two times is greater than some interval, you know it's time to toggle the LED again. To do this I've set up some new storage variables:   int ledState = LOW;//current state of the LED unsigned long timeOfLastLedEvent = 0;//the last time the LED was updated int intervalON = 1000;//how long we want the LED to stay on int intervalOFF = 500;//how long we want the LED to stay off   In the loop() there's a bunch of logic that checks to see if enough time has passed, and if so, toggles the LED, updates the variable "timeOfLastLedEvent", and toggles the stored state of the LED. The logic is repeated twice, once for the case that the LED is HIGH, and once for the case that the LED is low, I'll repeat the LOW case below: if (currentMillis - timeOfLastLedEvent > intervalOFF){//and enough time has passed digitalWrite(ledPin, HIGH);//turn it on ledState = HIGH;//store its current state timeOfLastLedEvent = currentMillis;//update the time of this new event } currentMillis is an unsigned long representing the current time that is updated each time the Arduino's loop() function starts. (currentMillis - timeOfLastLedEvent) gives the time sine the LED's state was last changed, we compare this against the intervalOFF to see if it's time to turn off the LED, if it's not the Arduino will keep updating currentMillis and re-checking until it's time. Step 2: Arduino Button Debouncing Continuing from the button debouncing I introduced in my last Instructable, we can use millis() to debounce buttons without using delay(): //Button Press Detection - debounce with millis() int buttonPin = 7; boolean currentState = LOW;//stroage for current measured button state boolean lastState = LOW;//storage for last measured button state boolean debouncedState = LOW;//debounced button state int debounceInterval = 20;//wait 20 ms for button pin to settle unsigned long timeOfLastButtonEvent = 0;//store the last time the button state changed void setup(){ pinMode(buttonPin, INPUT);//this time we will set the pin as INPUT Serial.begin(9600);//initialize Serial connection } void loop(){ currentState = digitalRead(buttonPin); unsigned long currentTime = millis(); if (currentState != lastState){ timeOfLastButtonEvent = currentTime; } if (currentTime - timeOfLastButtonEvent > debounceInterval){//if enough time has passed if (currentState != debouncedState){//if the current state is still different than our last stored debounced state debouncedState = currentState;//update the debounced state //trigger an event if (debouncedState == HIGH){ Serial.println("pressed"); } else { Serial.println("released"); } } } lastState = currentState; } In this code, I've added some new storage variables: boolean debouncedState = LOW; int debounceInterval = 20; unsigned long timeOfLastButtonEvent = 0; debouncedState stores the current debounced state of the button, this is the state we are absolutely sure the button is in. By contrast, currentState and lastState store the current and last measurements we made of the button, but they do not tell us the state of the button with certainty because they may be affected by button chatter. debounceInterval is the amount of ms to wait for the button pin to settle before we know for sure what state it is in. I'm my last example I'd been using 1ms, here I'm using 20ms. timeOfLastButtonEvent is similar to timeOfLastLedEvent in the last sketch, it gives a time to compare with currentTime so that we can count how many seconds have passed since first detecting a button press. We reset timeOfLastButtonEvent each time currentState does not equal lastState: if (currentState != lastState){ timeOfLastButtonEvent = currentTime; } Once enough time has passed without needing to reset timeOfLastButtonEvent, we know the button has settled into a debounced state: currentTime - timeOfLastButtonEvent > debounceInterval Then we can update the current stored debounce state if it has changed, and if so, trigger an event according to the new debounce state: if (currentState != debouncedState){ debouncedState = currentState; if (debouncedState == HIGH){ Serial.println("pressed"); } else { Serial.println("released"); } } Step 3: Shift Registers So far we've seen how we can use the Arduino to control many digital inputs and outputs at once, but sometimes we will want to control more components than the Arduino has pins for. In this case, we can use an external integrated circuit (also called a "chip") to expand the Arduino's inputs and outputs. Shift registers are chips which use logic gates to control many inputs or outputs at once. They are inherently digital, like the digital pins on the Arduino - this means that they can only read or write 0V and 5V (LOW or HIGH). If you are looking for something to expand your analog inputs then you'll want a demultiplexer like the 4051 (read more about how to use that here). In this Instructable we'll be looking at the 74HC595 shift register (called the "595"), it's very popular because it can expand 3 Arduino digital outputs into 8 outputs. The 595 has 8 output pins labeled Q0-Q7 (sometimes also called Qa-Qh), it cannot read data from these pins, they can only be used as outputs (if you are looking for a shift register with 8 input pins, check out the 74HC165, tutorial here). The 595 is controlled by three connections, they are called the data pin, latch pin, and clock pin. Refer to the flow diagram above to see how to control the output pins (repeated below): first, the latch pin (labeled "latch clock" in the second diagram above) is set LOW to disable the output pins (labeled "parallel data outputs"), this way the output pins won't change as we are sending in new data to the 595 next, new data is sent to the 595 by pulsing the clock pin("shift clock") and sending each of 8 output states through the data pin("serial data input") one by one. Arduino has a handy function in its library called shiftOut that takes care of this for you, I'll explain how to use this in the next step. finally, set the latch pin HIGH. This sends your new data to all the output pins at once (called parallel output). Step 4: 595 and ShiftOut Next we'll take a look at the 595's data sheet to find the right pins to connect to. This first image above shows the 595 pin connections. There are 16 pins on the 595, labelled 1-16. Notice the half circle marking on one side of the chip, the #1 pin is always located on the left side of this chip. The rest of the pins are numbered around the chip going in the counterclockwise direction. The second image shows the pin name, ordered by pin number, with a short description. Pins 1-7 and 15 are the outputs Q0-Q7, leave those pins unconnected for now. Pin 8 is a ground pin, connect this to Arduino ground. Pin 9 is a serial data output, this is used to connect to other 595's for daisy chaining. Daisy chaining allows you to drive 16 or more outputs using just three of the Arduino's digital pins. It is a bit outside the scope of this tutorial, but you can read more about it here. Since we will not use pin 9, we can leave it unconnected (also called "floating"). Pin 10 is the master reset, when this pin goes LOW, it causes the shift register to reset - losing any data we might have stored previously. We do not want this functionality right now, so connect the reset to 5V to prevent resetting from happening. Pin 11 is the clock input or "clock pin", connect this to Arduino digital pin 7. Pin 12 is the storage register clock input or "latch pin", connect this to Arduino digital pin 6. Pin 13 is the output enable pin, when it is LOW it allows the 595 to send data to its outputs, we want this, connect this pin to ground. Pin 14 is the serial data input, connect this to Arduino digital pin 5. Pin 16 is the power supply to the chip, connect this to 5V. Your circuit should look like image 3. Now connect an LED and a resistor to ground to each of the 595's eight outputs pins. Your circuit should now look like image 4. Now setting an output pin of the 595 HIGH will turn on the corresponding LED, and setting it LOW will turn the LED off. Upload the following code: //set 595 state int clockPin = 7; int latchPin = 6; int dataPin = 5; byte numberToDisplay = 154; void setup() { //all connections to 595 are outputs pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { //first set latch pin low so we can shift in data without disrupting the outputs digitalWrite(latchPin, LOW); // shift out bits of data shiftOut(dataPin, clockPin, LSBFIRST, numberToDisplay); //set latch pin high to send data to output pins digitalWrite(latchPin, HIGH); } This code introduces a new data type called byte, byte is like int, but since bytes only require 8 bits of memory, they only store numbers between 0 and 255 (2^8 = 256). The rest of the code is straightforward, except for the line: shiftOut(dataPin, clockPin, LSBFIRST, numberToDisplay); In this line, the Arduino uses the data and clock pins of the 595 to send the number 154 (the current value of numberToDisplay) into the shift register. The number 154 contains the states of all 8 pins of the 595: 154 converted to binary is 10011010 If you look at the states of your LEDs, you'll see that the LED connected to Q0 is on, Q1 and Q2 are off, Q3 and Q4 are on, Q5 is off, Q6 is on, and Q7 is off. So the LEDs follow the same pattern as the binary number, a 1 represents an on LED and a 0 represents an off LED. Now try other numbers, the number 15 is binary is 00001111, you can find other decimal to binary conversions on google by typing a # then the phrase "to binary" (the number it spits out will start with 0b, ignore that part and grab the last 8 digits). Remember that we can only send binary numbers with 8 digits in them (8-bit) to the shift register because it only has 8 output pins, so the value of numberToDisplay must be between 0 and 255. Now try changing the parameter LSBFIRST to MSBFIRST, you should see the order of the LEDs reverse, this variable sets the direction that we send the binary number into the 595: LSBFIRST means "least significant bit first" and MSBFIRST means "most significant bit first". To make it a little more interesting, try the following: int clockPin = 7; int latchPin = 6; int dataPin = 5; void setup() { //all connections to 595 are outputs pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { for (byte numberToDisplay=0;numberToDisplay<256; numberToDisplay++){ digitalWrite(latchPin, LOW); // shift out bits of data shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay); //set latch pin high to send data to output pins digitalWrite(latchPin, HIGH); delay(500); } } Now you've turned your LEDs into a binary counter:   For more detail: Intermediate Arduino: Inputs and Outputs using arduino ### Universal Remote Laser Tag Using Arduino Blast away your friends for hours on end with this custom laser tag system. Who needs to pay to play in an arena when you can make your very own game? Best of all, no special equipment is required, because the "guns" are regular universal TV remotes! Step 1: Parts and Materials This list includes enough parts to make two complete laser tag vests: (2x) Safety vest (2x) Arduino Micro (RadioShack #: 276-258) (6x) IR receiver (RadioShack #: 276-640) (2x) piezo transducer (RadioShack #: 273-073) (6x) red LED (RadioShack #: 55050629) web only (6x) 360 ohm resistor (RadioShack #: 55049382) web only (6x) 100 ohm resistor (RadioShack #: 271-1311) (2x) 1K ohm resistor (RadioShack #: 271-1321) (10x) 0.1uF capacitor (RadioShack #: 55047557) web only (2x) micro lever switch (RadioShack #: 275-016) (2x) SPST slide switch (RadioShack #: 275-401) (2x) 9V battery (RadioShack #: 23-2211) (2x) 9V battery snap (RadioShack #: 270-324) coroplast sheets (old political signs) thread sticky-back velcro tape Step 2: Design Overview My main goals when designing the system were to keep it low cost and easily customized.   For more detail: Universal Remote Laser Tag ### Arduino, Sensors, and MIDI Now that you're up to speed on using Arduino's inputs and outputs, this Instructable will give you everything you need to get started using sensors to trigger MIDI notes from Arduino. This post is the last installment in a series of workshops I led at Women's Audio Mission. The first two classes are Intro to Arduino and Working with Arduino Inputs and Outputs. Parts List: (1x) Arduino Uno Amazon or you can pick one up at a local Radioshack (1x) usb cable Amazon (1x) breadboard Amazon (1x) jumper wires Amazon (1x) 220Ohm resistors Digikey CF14JT220RCT-ND (1x) led Digikey C503B-RCN-CW0Z0AA1-ND (1x) 10kOhm resistor Digikey CF14JT10K0CT-ND (1x) tact button Digikey 450-1650-ND (1x) tilt switch Adafruit 173 (1x) 10kOhm potentiometer Digikey PDB181-K420K-103B-ND (1x) light sensitive resistor Digikey PDV-P8103-ND (1x) 33kOhm resistor Digikey 33KQBK-ND (1x) 1MOhm resistor Digikey 1.0MQBK-ND (1x) piezo sensor Sparkfun SEN-10293 Step 1: Serial to MIDI converter In this class we'll be using the Ardiuno's USB connection to send Serial messages to you computer, then we'll run an app like Hairless MIDI to convert this the Serial messages to MIDI and route them to other applications on your computer (Ableton, Garageband, etc). I chose this software solution because it is easiest and cheapest to setup for an entire class, you could also use a 5 pin MIDI plug and a MIDI cable to plug directly into other MIDI instruments. There are a few things you will need to be aware of with this setup: Be sure that the baud rate you specify in Serial.begin() in your Arduino sketch is the same number selected under Hairless MIDI >> Preferences >> Baud Rate (I used 9600 so I used the command Serial.begin(9600) in all example Arduino sketches, see the first two images above). If you choose to wire up a 5 pin MIDI plug you have to set the baud rate to 31250, but if you're connecting via USB to a Serial to MIDI application, you can use whatever baud rate you like. To use Hairless MIDI you will need to select your board (something like usbmodemfd121) from the Serial Port menu and select the MIDI channel that you would like to send or receive MIDI to/from. Make sure you have the same MIDI channel selected in the preferences of whatever other MIDI applications you are running on your computer. I sent my MIDI to IAC Driver Bus 1, and then setup Garage Band or Ableton to receive MIDI on this same channel. If you do not see any MIDI output options in Hairless MIDI, scroll down to the FAQ and troubleshoot your setup. You cannot program the Arduino while it is connected to Hairless MIDI, because the two applications are competing for the same port (see the error in the second image). A quick way to bypass this without needing to quit Hairless MIDI each time you want to change your code is to select a different Serial Port from the Hairless MIDI interface, upload your new Arduino code, and then set the Serial Port in Hairless MIDI back to the correct one. Step 2: MIDI Protocol MIDI messages are comprised of two components: commands and data bytes. The command byte tells the MIDI instrument what type of message is being sent and on which MIDI channel, and the subsequent data byte(s) store the actual data. For example: a command byte might tell a MIDI instrument that it has information about a note, and the following data bytes will describe which note and how loud. A command byte could also tell a MIDI instrument that it going to send information about pitchbend, then the following data bytes would describe how much pitchbend. A command byte and the data bytes following it make up one "MIDI message". A byte is a data type (other data types we've seen so far are int, boolean, and long). Bytes store positive integers between 0 and 255. MIDI messages are made up of a series of bytes, and they can be decoded based on their value to understand what they mean. Here is a list of common command bytes in their decimal (base ten) form: Note Off = 128 Note On = 144 Pitchbend = 224 Command bytes are always greater than 127 and data bytes are always between 0 and 127, in fact, that's how a MIDI instrument can tell the difference between a command byte and a data byte. Here's how we would send a MIDI message to turn on Middle C with high volume: 144, 60, 127 The first number, 144, is the command byte, it tells the MIDI instrument that this MIDI message is a Note On message. The second number, 60, is a data byte. The first data byte in a Note On MIDI message is "note" - this Note On command turns on MIDI note 60 (Middle C, you can find a list of note/MIDI conversions here). The last number is also a data byte, the second data byte in a Note On MIDI message is "velocity", which is used to control the loudness of a note. Since data bytes are between 0 and 127, 127 is the max volume for a note. Each MIDI note starts with a Note On message and ends with a Note Off message. Some percussive instruments will sound like they've turned off if you hold them for a long time, but the won't actually be off until you send a note off message. It's important to remember to turn a note off before you try to turn it on again to avoid inconsistent results. There are two ways to turn a MIDI note off, this first is using a Note Off command: 128, 60, 0 This command will turn note 60 off, it starts with the command byte for Note off, sets note = 60, and velocity = 0 (velocity is usually not very noticeable for Note Off, whatever number you want to pick is fine). You can also turn a note off by sending a Note On message with velocity = 0: 144, 60, 0 This is a more common approach in MIDI (from my experience) so it's how we'll be dealing with Note Off in this class. If you're interested in learning more about MIDI protocol, binary, and bits, check out this article and this table. Step 3: Generating MIDI with Arduino Upload the following code onto the Arduino, it turns MIDI note 60 (middle C) on, waits for 300ms, then turns it off and waits for another 200ms. byte noteON = 144;//note on command void setup() { Serial.begin(9600); } void loop() { MIDImessage(noteON, 60, 100);//turn note on delay(300);//hold note for 300ms MIDImessage(noteON, 60, 0);//turn note off (note on with velocity 0) delay(200);//wait 200ms until triggering next note } //send MIDI message void MIDImessage(byte command, byte data1, byte data2) { Serial.write(command); Serial.write(data1); Serial.write(data2); } In this sketch I created a helper function called MIDImessage that accepts a command the two data bytes and sends them out the Arduino's USB connection using Serial.write(). Serial.write is like Serial.print, but it converts whatever's inside it to binary before sending it out. Try rewriting the sketch to play a series of notes, cycling through MIDI notes 50-79, turning each note on and then off: byte noteON = 144;//note on command void setup() { Serial.begin(9600); } void loop() { for (byte note=50;note<80;note++) {//from note 50 (D3) to note 79 (G5) MIDImessage(noteON, note, 100);//turn note on delay(300);//hold note for 300ms MIDImessage(noteON, note, 0);//turn note off (note on with velocity 0) delay(200);//wait 200ms until triggering next note } } //send MIDI message void MIDImessage(byte command, byte data1, byte data2) { Serial.write(command); Serial.write(data1); Serial.write(data2); } Step 4: Arduino Analog Inputs and MIDI Let's wire up a potentiometer to analog pin 0 and use the data from it to control the pitch of a MIDI note: byte noteON = 144;//note on command int potPin = A0; void setup() { Serial.begin(9600); } void loop() { int potVal = analogRead(potPin);//read data from potentiometer //we have to scale the potentiometer data to fit between 0 and 127 (this is the range of MIDI notes) byte note = map(potVal, 0, 1023, 0, 127); MIDImessage(noteON, note, 100);//turn note on delay(300);//hold note for 300ms MIDImessage(noteON, note, 0);//turn note off (note on with velocity 0) delay(200);//wait 200ms until triggering next note } //send MIDI message void MIDImessage(byte command, byte data1, byte data2) { Serial.write(command); Serial.write(data1); Serial.write(data2); } Now try using the potentiometer to control the velocity of a MIDI note: byte noteON = 144;//note on command int potPin = A0; void setup() { Serial.begin(9600); } void loop() { int potVal = analogRead(potPin);//read data from potentiometer //we have to scale the potentiometer data to fit between 0 and 127 (this is the range of MIDI notes) byte velocity = map(potVal, 0, 1023, 0, 127); byte note = 60; MIDImessage(noteON, note, velocity);//turn note on delay(300);//hold note for 300ms MIDImessage(noteON, note, 0);//turn note off (note on with velocity 0) delay(200);//wait 200ms until triggering next note } //send MIDI message void MIDImessage(byte command, byte data1, byte data2) { Serial.write(command); Serial.write(data1); Serial.write(data2); } This will sound different depending on what type of instrument you have your MIDI hooked up to, but generally it should sound louder. The sound may also be sharper, as if you were striking a key hard, or blowing into a wind instrument with a lot of force. Step 5: Trigger a MIDI note with a button Using the simple button debounce code from the first class (you could also use this debounce code that uses millis() to keep time), wire up a button to digital pin 7 and use it to trigger a MIDI note: byte noteON = 144;//note on command int buttonPin = 7; boolean currentState = LOW;//stroage for current button state boolean lastState = LOW;//storage for last button state void setup(){ pinMode(buttonPin, INPUT);//this time we will set the pin as INPUT Serial.begin(9600);//initialize Serial connection } void loop(){ currentState = digitalRead(buttonPin); if (currentState == HIGH && lastState == LOW){//if button has just been pressed MIDImessage(noteON, 60, 127);//turn note 60 on with 127 velocity delay(2);//crude form of button debouncing } else if(currentState == LOW && lastState == HIGH){ MIDImessage(noteON, 60, 0);//turn note 60 off delay(2);//crude form of button debouncing } lastState = currentState; } //send MIDI message void MIDImessage(byte command, byte data1, byte data2) { Serial.write(command); Serial.write(data1); Serial.write(data2); } In this sketch, each time the button is pressed we send a Note On message, and each time the button is released, we send a Note Off message. Now try adding in the potentiometer (connected to A0) to control the pitch of the note: byte noteON = 144;//note on command byte note;//storage for currently playing note int buttonPin = 7; int potPin = A0; boolean currentState = LOW;//stroage for current button state boolean lastState = LOW;//storage for last button state void setup(){ pinMode(buttonPin, INPUT);//this time we will set the pin as INPUT Serial.begin(9600);//initialize Serial connection } void loop(){ currentState = digitalRead(buttonPin); if (currentState == HIGH && lastState == LOW){//if button has just been pressed int currentPotVal = analogRead(potPin); note = map(currentPotVal, 0, 1023, 0, 127); MIDImessage(noteON, note, 127);//turn note on with 127 velocity delay(2);//crude form of button debouncing } else if(currentState == LOW && lastState == HIGH){ MIDImessage(noteON, note, 0);//turn note off delay(2);//crude form of button debouncing } lastState = currentState; } //send MIDI message void MIDImessage(byte command, byte data1, byte data2) { Serial.write(command); Serial.write(data1); Serial.write(data2); } Now we can add a few more notes into the mix, this sketch plays a three note phrase on each button press. You can change the base note with the potentiometer: byte noteON = 144;//note on command byte note;//storage for currently playing note int buttonPin = 7; int potPin = A0; boolean currentState = LOW;//stroage for current button state boolean lastState = LOW;//storage for last button state void setup(){ pinMode(buttonPin, INPUT);//this time we will set the pin as INPUT Serial.begin(9600);//initialize Serial connection } void loop(){ currentState = digitalRead(buttonPin); if (currentState == HIGH && lastState == LOW){//if button has just been pressed int currentPotVal = analogRead(potPin); note = map(currentPotVal, 0, 1023, 0, 127); int noteLength = 200; byte noteVelocity = 127; MIDImessage(noteON, note, noteVelocity);//base note delay(noteLength); MIDImessage(noteON, note, 0);//turn note off MIDImessage(noteON, note+7, noteVelocity);//fifth delay(noteLength); MIDImessage(noteON, note+7, 0);//turn note off MIDImessage(noteON, note+12, noteVelocity);//octave delay(noteLength); MIDImessage(noteON, note+12, 0); } lastState = currentState; } //send MIDI message void MIDImessage(byte command, byte data1, byte data2) { Serial.write(command); Serial.write(data1); Serial.write(data2); } Finally, we can use a while loop to continue the arpeggio as long as we press the button. While loops are basically loopable if statements. If the argument inside the while loop's parentheses evaluated to true, then the commands inside the while loop are executed. At the end of the while loop, the Arduino checks to see if the argument inside the while loops's parentheses is true again. If it is still true, the while loop executes all the commands in the culy braces again, this continues forever until the argument inside the while loop's parentheses evaluates to false. In the example below, I use the while loop to keep playing the three note phrase for as long as digitalRead(buttonPin) == HIGH. byte noteON = 144;//note on command byte note;//storage for currently playing note int buttonPin = 7; int potPin = A0; boolean currentState = LOW;//stroage for current button state boolean lastState = LOW;//storage for last button state void setup(){ pinMode(buttonPin, INPUT);//this time we will set the pin as INPUT Serial.begin(9600);//initialize Serial connection } void loop(){ currentState = digitalRead(buttonPin); if (currentState == HIGH && lastState == LOW){//if button has just been pressed int currentPotVal = analogRead(potPin); note = map(currentPotVal, 0, 1023, 0, 127); int noteLength = 200; byte noteVelocity = 127; while(digitalRead(buttonPin) == HIGH){//as long as the button is pressed, repeat the arpeggio MIDImessage(noteON, note, noteVelocity);//base note delay(noteLength); MIDImessage(noteON, note, 0);//turn note off MIDImessage(noteON, note+7, noteVelocity);//fifth delay(noteLength); MIDImessage(noteON, note+7, 0);//turn note off MIDImessage(noteON, note+12, noteVelocity);//octave delay(noteLength); MIDImessage(noteON, note+12, 0); } } lastState = currentState; } //send MIDI message void MIDImessage(byte command, byte data1, byte data2) { Serial.write(command); Serial.write(data1); Serial.write(data2); } Step 6: Arduino and Tilt Switch A tilt switch is a mechanical switch that is open when you hold it in one direction and closed when you flip it upsidedown. It has a tiny metal ball on the inside of it that can roll around, when you hold it in a certain orientation, the ball creates an electrical connection between two sides of the switch. The tilt switch has two leads coming out of it, you can pull the push button out of your circuit and replace it with a tilt switch, orientation of the switch in the circuit (long vs short lead) doesn't matter. Step 7: Arduino and Light Sensitive Resistors A light sensitive resistor (LSR) is a type of variable resistor that responds to light. The LSRs I got for this class have a range of 16-33kOhms of resistance, so in total darkness they have a resistance of 33kOhms and in light they have a resistance of 16kOhms. The circuit that measures the LSR requires another regular resistor, the resistor acts as a benchmark to determine how the LSR is changing. Whenever you're measuring variable resistance of a component (flex sensor, pressure sensors, and many others) you want to pair it with a regular resistor that has a resistance that is about equal to the max resistance of your variable resistance component. Since I'm using a 16-33kOhm LSR, I'll use a 33kOhm resistor in my circuit. The circuit looks like this: 5V -> 33kOhm resistor -> light sensitive resistor -> Ground (see image above) and the Arduino analog pin (I'm using A0) connects to the junction between the LSR and the resistor. The LSR has no polarity, so orientation of the component in the circuit does not matter. Run the following code to get a sense of the range of the LSR: int analogPin = A0;//junction between LSR and resistor attached to pin A0 void setup(){ Serial.begin(9600); } void loop(){ int lsr = analogRead(analogPin); Serial.println(lsr); } I found that my resistor readings ranged from about 0 in full light to about 900 in darkness. Now map this to note, notice where I threw in the 0-900 range byte noteON = 144;//note on command int analogPin = A0; void setup() { Serial.begin(9600); } void loop() { int analogVal = analogRead(analogPin);//read data //we have to scale the lsr data to fit between 0 and 127 (this is the range of MIDI notes) byte note = map(analogVal, 0, 900, 0, 127);//use the 0-900 range I measured MIDImessage(noteON, note, 100);//turn note on delay(300);//hold note for 300ms MIDImessage(noteON, note, 0);//turn note off (note on with velocity 0) delay(200);//wait 200ms until triggering next note } //send MIDI message void MIDImessage(byte command, byte data1, byte data2) { Serial.write(command); Serial.write(data1); Serial.write(data2); } This setup creates notes with higher pitch in darkness and low pitch in light. If I wanted to reverse the relation ship between light and pitch I would just reverse my range in the map function: byte note = map(analogVal, 900, 0, 0, 127); Notice how I've reversed my range from 0-900 to 900-0, this makes more light create higher pitched notes and low light create low pitched notes. This sketch is spanning a lot of notes right now, if I wanted to narrow the scope of notes I can play with the circuit, I can use the following line: byte note = map(analogVal, 900, 0, 40, 90); Now the full range of resistor light sensitivity will return a range of notes between 40 and 90. Step 8: Arduino and Pressure Sensor I made a few pressure sensors from conductive foam, copper tape, stranded wire, and electrical tape. As the conductive foam is compressed it becomes less resistive, making it a pressure sensitive variable resistor. Any variable resistor can be wire up according to the schematic from the previous step. I used a multimeter to measure the max resistance of my pressure sensors at about 1MOhm, so I wired up a 1MOhm resistor in series with the pressure sensor (I used the exact same schematic as the light sensitive resistor, replacing the light sensitive resistor with the pressure sensor, and the 33kOhm resistor with the 1MOhm resistor). Then I used the code from the last step to measure the range of readings form the pressure sensors at about 50-500. From there you can run the same code to change the pitch of a note with the pressure sensor, but change the line that maps the sensor measurement to note to account for the range 50-500: byte note = map(analogVal, 50, 500, 0, 127); Step 9: Arduino and Flex sensor Flex sensors are another type of variable resistor, they can be wired up in exactly the same way as the light sensitive and pressure sensitive resistors. The flex sensors I used in class have a resistance between 10kOhm-20kOhm, so they should be paired with a resistor on approximately the same value. The code from the light sensitive resistor step will work with a flex sensor, but remember to adjust the 0, 900 in the line: byte note = map(analogVal, 0, 900, 0, 127); to whatever range you measure for your flex sensor.   For more detail: Arduino, Sensors, and MIDI ### Beginner Arduino The Arduino is a pocket-sized computer (also called a "microcontroller") that you can program and use to control circuits. It interacts with the outside word through sensors, leds, motors, speakers... even the internet; this makes it a flexible platform for lots of creative projects. Some popular uses include: - programmable light displays that respond to music or human interaction - robots that use information from sensors to navigate or perform other tasks - unique, customizable controllers and interfaces for music, gaming, and more - connecting real world objects to the internet (twitter is especially popular) - anything interactive - automating and prototyping There are tons of amazing Arduino Projects posted online, here are some of my favorites: Twitter Mood Light by RandomMatrix, a light that changes color depending on what kinds of emotional words are trending on Twitter Nebulophone Synth by Bleep Labs: Singing Plant by Mads Hobye: Polargraph Drawing Machine by Sandy Noble: Flame-Throwing Jack-O-Lantern by Randy Sarafan and Noah Weinstein: Rain-sensitive light up umbrella by snl017 There are quite a few microcontrollers on the market today, but the Arduino stands apart from the rest becuase of the active online community around it. If you search on google or youtube, you will find tons of great project ideas and information to get you started. Even though you might not have any experience programming or working with a microcontroller, the Arduino is simple to get up and running, and it's a fun way to learn about electronics through experimentation. This Instructable was written for an Intro to Arduino class I'm teaching at Women's Audio Mission this month. I'll be posting Instructables on more advanced Arduino topics and on building customizable MIDI controllers with Arduino in the next few weeks as the class continues. More info about Arduino can be found on the Arduino reference page. For this class you will need: (1x) Arduino Uno Amazon or you can pick one up at a local Radioshack (1x) usb cable Amazon (1x) breadboard Amazon (1x) jumper wires Amazon (4x) red LEDs Digikey C503B-RCN-CW0Z0AA1-ND (4x) 220Ohm resistors Digikey CF14JT220RCT-ND (1x) 10kOhm resistor Digikey CF14JT10K0CT-ND (1x) tact button Digikey 450-1650-ND (1x) 10kOhm potentiometer Digikey PDB181-K420K-103B-ND (1x) RGB LED (common cathode) Digikey WP154A4SUREQBFZGC Tips on ordering stuff: Digikey is usually the cheapest place you can get components and they ship really fast, but sometimes it's difficult to find what you're looking for because they have so much stuff. If Digikey gives you too much trouble try Jameco, you'll pay a few cents more per component, but it's a lot easier to navigate their inventory. If you need stuff right away, you can find components, breadboards, cables, and Arduinos at your local Radioshack, but you will usually pay a bit more. Adafruit and Sparkfun are good online store for finding cool sensors or other Arduino accessories and they usually have tutorials and sample code for their more complicated parts. Amazon is also a good place to check, right now they have Arduino Unos for $22, which is the cheapest I've ever seen them. In this Instructable I'll be using 123D circuits to demonstrate and simulate the circuits, the embedded circuit simulations work best with the Chrome browser. Step 1: What is Arduino First we'll take a look at all the parts of the Arduino. The Arduino is essentially a tiny computer that can connect to electrical circuits. The Arduino Uno is powered by an Atmega 328P chip, it is the biggest chip on the board (see the image note on the image above). This chip is able to execute programs stored in its (very limited) memory. We can load programs onto the chip via USB using the Arduino IDE (download this if you haven't already). The USB port also provides power to the Arduino. Alternatively, we could power a programmed board using the power jack, in that case we do not need a USB connection. The Arduino has a few rows of pins that we can plug wires into. The power pins are labeled in the image above. The Arduino has both a 3.3V or 5V supply; in this class we will use the 5V supply, but you might find some chips or components that require 3.3V to run, in that case the 3.3V supply will be useful. You will also find some pins labeled "GND" on the Arduino, these are ground pins (ground is the same thing as 0V). Electrical current always flows from some positive voltage to ground, so these pins are useful for completing circuits, we will use them often. The Arduino has 14 digital pins, labeled 0-14, that connect to circuits to turn them on or off, or to measure buttons and other 2-state circuits (a button is two state because it is either pressed or not pressed, as opposed to a dial, which has a range of possible states). These pins can act as either inputs or outputs, meaning they can control a circuit or measure it. Next to the power connections are the Analog input pins, labeled A0-A5. These pins are used to make analog measurements of sensors or other components. Analog inputs are especially good for measuring things with a range of possible values. For example, an analog input pin will let us measure the amount of flex of a flex sensor, or the amount that a dial has been turned. You can use an analog input to measure a digital component (like a button) or even act like a digital output, they are basically digital pins with extra powers. Step 2: How to Use a BreadBoard Breadboards let us make temporary electrical connections between components so that we can test circuits before we permanently solder them together. This whole class will be done on a breadboard so we can reuse components and make quick changes to a circuit. Breadboards have rows of holes that you can plug wires or other electrical components into. Some of these holes are electrically connected to each other through metal strips on the underside of the breadboard. Here's how the connections work: One each side of the breadboard, two rows of holes are connected across the entire length of the board (images 1 and 2 above). Generally, you will connect these long "rails" to 0V (also called "ground") and whatever voltage you are using for power (in this class we will use 5V from the Arduino), so that those connections are available everywhere on the board. In this case, the first thing you want to do is wire up these connections to your Arduino as shown in image 4, notice how I connected ground to the row labelled "-" and 5V to the row labelled "+", your breadboard may or may not be labelled. Note: sometimes these side strips will only extend halfway across a longer breadboard, use wires to complete the connection (image 5). The rest of the holes in the breadboard are grouped into rows of five in the center of the breadboard (image 3). This is where you will connect electrical components to each other to form circuits. Step 3: Turn on LED with 5V As I explained before, electrical current flows from high voltage to low voltage. In this class we'll be powering everything off of 5V from the Arduino, so current will flow from 5V out of the Arduino, through our circuit, and back into the Arduino's "ground" pin. The first thing we'll power up is an LED. The circuit that turns on an LED involves two components: a resistor and an LED. The schematic representation of the circuit is shown in image 4 above. The resistor is represented by a rectangular box (you might also see it represented by a zigzag line). The LED is represented by a triangle with a line, and usually some arrows pointing outward that represent light coming out of the component. So why do we need the resistor in this circuit? This resistor is called a current limiting resistor, this means the resistor limits the amount of electrical current that flows through the LED. Every LED is rated for a certain amount of current, if you go over that amount you will probably damage the LED. Using Ohms Law, we can calculate the value of the current limiting resistor we should use with our LED. Ohms Law is very simple, it says that there is a linear relationship between current and voltage in a resistor: increasing the voltage across a resistor will increase the current that flows through it. Specifically it says: V = I * R where V = voltage across the resistor I = current through the resistor R = resistance - this is what we want to calculate so if we know the values of V and I, we can calculate the correct R for our circuit First we need to calculate the voltage across the resistor. In the circuit shown in image 4, a total of 5V is applied to the circuit. Most of the 3mm or 5mm LEDs you will use require 3V to light up, so the remaining 2V (5V - 3V = 2V) is applied across the resistor. Next we calculate the current going through the resistor. Most 3mm or 5mm LEDs run at full brightness at about 20mA of current; going over this could damage the LED, and going under this will make the LED glow dimmer (but does no harm). Assuming we want to run our LED at 20mA, we know that the same amount of current must run through the resistor since the components are wired together in series. This leaves us with: 2V = 20mA * R 2V = 0.02A * R R = 100 Ohms So 100 Ohms is the absolute minimum resistance we need to make sure that we do not damage the LED. To be safe, it's a good idea to use something a little higher, just in case your LED has slightly different ratings that what I've used here. I like to use 220Ohms because I always seems to have a lot of those around. If you know the ratings of your LED (you can find it on the LED's datasheet) and you want to do this calculation yourself, you can also try using an online calculator. Next we'll wire up the LED on the breadboard. Plug the resistor and the LED into the central part of the breadboard so that the longer lead of the LED is electrically connected to one of the resistor's leads (image 3). Then connect the remaining end of the resistor to 5V and the remaining end of the LED to ground. You should see the LED light up. Some things to try: Notice how the LED's leads are not the same length, this is because LEDs need to be in a circuit in a specific orientation in a circuit. Current always flows through LEDS from the long lead to the short lead (in the schematic representation, current flows in the same direction that the triangle points, here is a nice graphic of that). Try flipping the orientation of your LED - you should find that the LED will not light if it is placed in the circuit backwards. Resistors, on the other hand, do not have an orientation, you'll notice that their leads are the same length (their schematic representation shows this symmetry as well). Flipping the orientation of a resistor in a circuit will have no effect on the circuit - try it. Now try swapping the position of the LED and the resistor in the circuit (image 5). You should find that this also does not effect the circuit. It does not matter if the current limiting resistor is on one side of the LED or the other, it will still be effective in protecting the LED against excess current   For more detail: Beginner Arduino ### Sugarcube MIDI Controller Using Arduino This project is a portable, Arduino-powered, grid-based MIDI controller that boots up into a variety of apps to do lots of things with sound. It has 16 backlit buttons, used as both inputs and outputs to give the controller some visual feedback. 2 potentiometers give analog control, depending on the app the pots are assigned to tempo, MIDI velocity, pitch, and scrolling (making the available grid space larger than 4x4). An x/y accelerometer and an x/y gyroscope add some playful, gestural control to the device; most of the apps implement a "shake to erase" control and several respond to tilt in various ways. It boots up into 7 different apps (described below), though it has the potential to boot up into 16 total. This device is primarily a MIDI controller, but I've also written an app that allows you to pull the button and analog data into MaxMSP and to control audio. This controller was inspired by both the monome and tenori-on. When I was in college, I built a large touchscreen display, based on the Arduinome monome-Arduino clone schematics and code, that worked with all the open source monome applications written in MaxMSP. There are a ton of people building their own monome-type devices using these buttons from Sparkfun and the Arduinome code, as well as a few variations on the theme. With this project, I was interested in making a device that was a little more self-contained and relatively cheap to make (lots of buttons = lots of $). In keeping more with the concept of the tenori-on, this controller does all its app processing itself, it does not rely on a computer to process button presses/analog controls into MIDI. This means you can plug it directly into a synth or any device that understands MIDI and you're good to go, no computer required. It runs off a beefy LiPo battery that keeps it running for days on a charge, so it's fairly portable as well. In keeping with the monome side of things, it's totally open source and can be adapted to your particular audio setup/needs. All the Arduino code is up on github (click the cloud-shaped button to download), along with a MaxMSP patch that decodes data from the controller into something usable in Max. An overview of the apps I've written so far: Pixel Tilt - One pixel moves across a 2D keyboard with tilt, triggering MIDI as it moves. Control velocity and basenote with pots. Flin - Music Box app based on monome. Speed and velocity of notes controlled by y tilt. Paging across 16 "lanes" with pot. Shake to erase. Serial Communication with MaxMSP - Pull data from buttons and analog controls into MaxMSP and use Max to send LED states. Supports 5 bit analog controls for x/y accelerometer and 2 pots. This is great if you want to run audio processing applications with the controller. Download Serial Demo app (SerialDemo.maxpat, included with the Arduino files, click the cloud-shaped button here) to parse data in Max. Beat slicer (shown above) app is included with the Arduino files as well. Arpeggiator - Plays a two, three, or four note arpeggio, similar to this app I wrote for monome. One pot controls the speed of the arpeggio, another controls velocity. Notes within the arpeggio can be shifted up or down by one semitone via button controls. The whole arpeggio is transposed via x tilt. Press the leftmost note in the arpeggio to play the notes in ascending order, press the rightmost note in the arpeggio to play the notes in descending order, and press a middle note in the arpeggio to play the notes in a random order. Shake to erase. Boiing - Bouncing pixels that generate polyrhythms, based on this tenori-on app. Bounce direction based on y tilt. Speed and MIDI velocity (loudness) controlled by pots. Shake to erase. Step Sequencer - Four note 16 step sequencer. Pots control tempo and paging across sequence. Shake to erase. MIDI Keyboard - Simple MIDI keypad. Control velocity and basenote with pots, pitchbend with x tilt. Parts List: SPARKFUN: (1x) Button Pad 4x4 - LED Compatible Sparkfun COM-07835 (1x) Button Pad 4x4 - Breakout PCB Sparkfun COM-08033 (1x) Arduino Uno Sparkfun DEV-11021 (1x) Accelerometer/Gyro 5 Degrees of Freedom Sparkfun SEN-11072 I put a 3-axis accelerometer and 2 axis gyroscope in this controller to give it some gestural control, but so far I haven't actually used the gyro in any apps, and I've only got the x and y axis of the accelerometer wired up. That means you could sub in a simpler/cheaper part like this. DIGIKEY: (16x) White 5mm LED (3mm is fine too) Digikey C513A-WSN-CV0Y0151-ND (2x) 74HC595 shift register Digikey 296-1600-5-ND (1x) 74HC165 shift register Digikey 296-8251-5-ND (3x) 16 pin IC socket Digikey A100206-ND (16x) 1N4148 Diode Digikey 1N4148FS-ND (4x) current limiting resistors (value will depend on LEDs, sample calculation included in step 5) (4x) 10kOhm 1/4watt resistors Digikey CF14JT10K0CT-ND (1x) 220Ohm 1/4watt resistor Digikey CF14JT220RCT-ND (1x) 5-Pin MIDI Jack Digikey CP-2350-ND (optional - explained in step 27) (1x) USB type B female jack Digikey 732-2734-ND (optional - explained in step 27) (2x) 10kOhm linear taper potentiometer Digikey 987-1308-ND JAMECO: (1x) 16 conductor ribbon cable Jameco 28RC16-10VP (1x) 16 pin right angle connector Jameco 746285-3 (6x) male header pins Jameco 103393 RADIOSHACK: (1x) Midi Cable Radioshack 42-2149 (optional - explained in step 27) (1x) Size N Panel-Mount Coaxial DC Power Jack with switch Radioshack 274-1576 (1x) Size N Coaxial DC Power Plug Radioshack 274-1573 (1x) SPST Toggle Switch Radioshack 275-634 AMAZON: (1x) Li-Ion 7.4V Tenergy 2200mAh Rechargeable Battery module with PCB Amazon (1x) Tenergy Universal Smart Charger for Li-Ion/Polymer battery Pack (3.7V-14.8V 1-4 cells) Amazon (1x) MIDI to USB cable Amazon (optional - explained in step 27) NEWARK: (2x) Aluminum knobs Newark 74M6717 ADDITIONAL MATERIALS: 22 Gauge Wire, various colors Jameco #9313-0-R electrical tape Radioshack 64-2373 wire cutters wire strippers solder wood/acrylic/project enclosure (I used this 6"x6"x2" bamboo box The Container Store) glue/epoxy double sided foam tape Amazon Step 1: Schematic and Overview All schematics for this project are shown above. Detailed overviews of the 74HC595, 74HC165, and power connections are given later in this Instructable. All the Arduino pin connections are listed below: Analog 0 - Gyroscope Y (Y4.5) 1 - Potentiometer 1 2 - Gyroscope X (X4.5) 3 - Accelerometer Y (YAcc) 4 - Accelerometer X (XAcc) 5 - Potentiometer 2 Digital 0 - serial in - this must remain unconnected 1 - serial out - this is hooked up to the MIDI output 2 - 74HC165 data pin (Q7) 3 - 74HC165 clock pin (CP) 4 - 74HC165 latch pin (PL) 5 - 74HC595 clock pin (SH_CP) 6 - 74HC595 latch pin (ST_CP) 7 - 74HC595 data pin (DS) no connections to digital pins 8-13 Step 2: Solder LEDs to Sparkfun PCB Thread the leads of 16 LEDs (5mm or 3mm are fine, I used 5mm) through LED holes in the Sparkfun PCB. These boards are compatible with 4-lead RGB LEDs, so there are four available holes on each button pad. You can use the two center holes for single color LEDs (see figure 3). Be sure that the flat edge of the LED (the cathode) lines up with the flat marking on the PCB. Solder the LED leads and cut away the excess wire. Step 3: Solder Diodes to Sparkfun PCB Solder 16 diodes to Sparkfun PCB. Be sure to line up black marking on diode (cathode) with the stripe on the PCB. Step 4: Ribbon Cable Cut about 1ft of 16 conductor ribbon cable. Separate and strip the ends of all 16 wires on one side and solder to Sparkfun PCB. The following list gives all the colored conductors in order with the name of the PCB hole they should be soldered to, if you do this correctly none of the wires should cross. Note that since I'm only using a single color LED, I'll wire up only the "blue" anode. Connections: one side of ribbon cable Brown SWT-GND1 Red LED-GND1 Orange SWT-GND2 Yellow LED-GND2 Green SWT-GND3 Blue LED-GND3 Purple SWT-GND4 Grey LED-GND4 White BLUE4 Black SWITCH4 Brown BLUE3 Red SWITCH3 Orange BLUE2 Yellow SWITCH2 Green BLUE1 Blue SWITCH1 other side of ribbon cable Step 5: Clamp Socket Use a bench vice to clamp the16 pin socket on the ribbon cable. If you do not have a bench vice do not use pliers do this, you will clamp the socket on sideways and mess up the connections. You're better off using a hammer to tap the clamp shut, just make sure you are always applying pressure evenly across the socket. Be sure the clamp the socket on the ribbon cable in the same orientation indicated in the images above. Step 6: Multiplexing with Arduino and 74HC595 Two 74HC595s (wired in parallel) will be driving all the LEDs in the project as well as providing power to all of the buttons. The 74HC595 is an 8 bit serial in parallel out shift register. I've written a detailed tutorial about multiplexing with the 74HC595, and you can find more info about this chip on its datasheet. Please note that the 74HC595 drawn in the schematic is not a pin diagram, I have rearranged the order of the pins to make the circuit diagram more clear. The pin diagram for the chip is shown in fig 4. The 74HC595 has the following pins (the technical name may be one of several things depending on which data sheet you are reading): Position Common Name Technical Name 1 parallel output 2 QB or Q1 2 parallel output 3 QC or Q2 3 parallel output 4 QD or Q3 4 parallel output 5 QE or Q4 5 parallel output 6 QF or Q5 6 parallel output 7 QG or Q6 7 parallel output 8 QH or Q7 8 ground GND 9 serial data output QH' or Q7' or Q7S 10 master reset (active low) MR(with a line on top) or SRCLR(with a line on top) 11 clock pin SH_CP or SRCLK 12 latch pin ST_CP or RCLK 13 output enable (active low) OE(with a line on top) 14 data pin DS or SER 15 parallel output 1 QA or Q0 16 5 volts supply VCC The connections between the 74HC595 and the sparkfun board are shown in the schematic and repeated below: 74HC595 Sparkfun Breakout Board Q0 BLUE 4 and SWITCH 4 Q1 BLUE 3 and SWITCH 3 Q2 BLUE 2 and SWITCH 2 Q3 BLUE 1 and SWITCH 1 Q4 LED GND 4 (via current limiting resistor) Q5 LED GND 3 (via current limiting resistor) Q6 LED GND 2 (via current limiting resistor) Q7 LED GND 1 (via current limiting resistor) The remaining pins have the following connections to the Arduino (also shown in schematic): 74HC595 Arduino Vcc 5V GND GND DS Digital Pin 7 OE(line on top) GND ST_CP Digital Pin 6 SH_CP Digital Pin 5 MR(line on top) 5V Q7' no connection Step 7: Header Pins Solder two rows of eight header pins to the protoboard. This is where the ribbon cable socket will attach to the board. Step 8: Current Limiting Resistors The 74HC595 will be driving the LEDs in the sparkfun board. However, this chip only outputs 0 or 5V and it can output as much as 70mA. This means we must use current limiting resistors to prevent damaging the LEDs. From the specs of the LEDs I used: max forward current: 30mA forward voltage: 3.2V Calculate the resistance needed to achieve these max ratings from V = IR: resistance = (5V-3.2V) / (0.03A) = 60 ohms I used 68 ohm resistors so that I was not running at the absolute maximum, but also ensuring that I wouldn't lose too much brightness. (I made a mistake a grabbed the 100KOhm resistors when I made this project, I fixed it later, but the stripes of 100Ohm resistors should be blue, grey, black, gold, ignore the colors in the images). These are the sample calculations for the specific LEDs I used, you'll need to do you own calculations based on the specs of your LEDs. If you are unsure of what to do, use 220ohm or higher resistors; using too much resistance will make the LEDs less bright, but they will not be damaged. Solder four resistors to the protoboard as shown in the images. Connect the leads of the resistors to their adjacent header pins with solder (figure 2). Step 9: 74HC595 socket Solder an 8-pin socket to the protoboard as shown in the images above. Step 10: Connections to LEDs As shown in figure 6, the output pins (Q0-Q7) are located on pins 1-7 and 15. This image was taken from the datasheet of the 74HC595. Connect the resistors to pins 4-7 with jumper wires as shown in figures 1 and 2. Connect pins 1-3 and 15 to the header pins according to the schematic (note the wiring in the image is incorrect, but the schematic is correct). The pins connections to the 74HC595 should be as follows: Pin 15 - Blue 4 Pin 1 - Blue 3 Pin 2 - Blue 2 Pin 3 - Blue 1 Pin 4 - LED GND 4 Pin 5 - LED GND 3 Pin 6 - LED GND 2 Pin 7 - LED GND 1 Be sure to get these pin connections correct- do this part slowly and refer to the schematic often. Make sure to electrically join all these connections with solder on the underside of the board (figs 2 and 4)   For more detail: Sugarcube MIDI Controller ### Build a Controllable Coffee Roaster from an Air Popcorn Popper I have a passion for coffee.  I also have a passion for electrical engineering.  Why not combine them? This Instructable describes how I transformed a hot air popcorn popper into a completely controllable coffee roaster!  Follow these instructions to re-purpose and hack your West Bend Poppery Popcorn Popper into this coffee roaster! ----------------------------------------------------------------------------------------------- The extraction of the complex aromatic and flavor characteristics of a coffee bean is dictated by a roaster’s ability to control a variety of variables that act on a green coffee bean while it is roasting.  Not only must one understand certain audible and visual cues from the beans during the course of the roast, but the roasting apparatus must also react to changes to the fan speed and heater power in order to change the temperature inside of the roasting chamber.  At the same time, the roast logging software must be displaying a graphical summary of the temperature in the chamber versus time, also known as the roasting profile. This feat often necessitates the purchase of an expensive programmable roaster; but, a modified popcorn popper can rival the functionality of a high-end programmable roaster if adapted with internal temperature sensors, a reactive control system, and the ability for the software to save roasting profiles for later use.  This modified popcorn popper will automatically control the temperature and total roast time based on industry roasting profiles; component costs will remain under $360; and a taste comparison between beans roasted in a modified and unmodified roaster will be completed by an experienced coffee taster. Upon submission of this Instructable, the roaster has the capabilities of controlling both the power to the heater coil and the speed of the universal AC/DC motor that is used to blow air over the heating coil.  This air is blown into the roasting chamber where thermocouples are sensing and sending temperature information to a microcontroller which is interfaced with a roast logging software called Artisan.  This roast logging software displays the temperature versus time inside of the roasting chamber while also providing functionality to the roaster user to adjust the percentage of power going to the heater coil and the percentage of speed that the fan is spinning. Step 1: Identifying Design Goals Before getting into the hands-on work of the project, I had to identify the features of the coffee roaster that I wanted to implement into the popcorn popper. Initial Goals: - Heater control and fan control to adjust the temperature inside of the chamber. - Interface with a computer to log the roasting profile. - Manually control the heater power and fan speed using the computer roasting program - Ability to save roasting profiles to use for another roast. - Remain under $500 in total component cost Future Work: - PID Control of the Roaster - Chaff Collection Why did I choose the West Bend Poppery I? The Poppery I is a 1500 Watt model.  The Poppery II  is a 1200 Watt model.  The Poppery I uses a universal AC/DC motor, while the Poppery II used a DC brush motor with a bridge rectifier (to convert the AC to DC).  Having the 300 extra Watts will allow this popper to reach higher temperatures and the induction motor of the Poppery I is easier to control with the components chosen for this project! Step 2: Materials List Electronic Components: West Bend Poppery I - 1500 Watt Model! - http://www.ebay.com/sch/i.html?_odkw=west+bend+poppery&_osacat=0&_from=R40&_trksid=p2045573.m570.l1313.TR5.TRC2.A0.H0.Xwest+bend+poppery+1500&_nkw=west+bend+poppery+1500&_sacat=0 Crydom D2425-10 Solid State Relay - http://www.mouser.com/ProductDetail/Crydom/D2425-10/?qs=8ehJfnwBfpTEixK6L1K8TA== Crydom D2425 Solid State Relay - http://www.mouser.com/ProductDetail/Crydom/D2425/?qs=mNyg5qXQ/sfvtoMGKU2zkw== Arduino Uno Microcontroller (w/ Serial-USB Cable and DC Power Supply) - https://www.sparkfun.com/products/11021 K-Type Thermocouple - Glass Braided - https://www.sparkfun.com/products/251 K-Type Thermocouple - Flexible Probe - http://www.coleparmer.com/buy/product/62346-type-k-high-temperature-flexible-thermocouple-probe-12-l-050797b-k.html TC4 Roasting Thermocouple Shield - (Kit or Pre-Built) - http://www.mlgp-llc.com/arduino/public/arduino-pcb.html Zero Cross Detector - http://www.mlgp-llc.com/arduino/public/arduino-pcb.html Terminal Block - 8 Total Connections - http://www.mouser.com/ProductDetail/Molex/38770-0108/?qs=sGAEpiMZZMsntO7gZZwOWPQYrd2HcEMKYz4jKNxRsbk%3d 12'' jumper wires: https://www.sparkfun.com/products/10372 Electronic Accessories: Hookup Wire Wire Connectors Wire Terminal (Ring) Soldering Iron Solder Electrical Tape Enclosure Components: Wooden Project Box Antique Glass Chimney (I found mine in an antique store.  This may be difficult to find.) Computer Components: A computer or laptop that is running Windows or MacOS Step 3: Solder the TC4 Arduino Shield If you bought the TC4 pre-built, then you can skip this step!  If you bought it as a kit, then keep reading! I'm not going to go into how to solder the shield in this Instructable.  Please refer to the links below for tutorials on how to solder through-hole and surface mount components. The kits require both through-hole and surface mount soldering of components. Basic Soldering How-To: http://learn.adafruit.com/adafruit-guide-excellent-soldering/tools  Surface Mount How-To:   http://learn.adafruit.com/adafruit-guide-excellent-soldering/surface-mount You can test the continuity of your solder jobs by following this tutorial: http://learn.adafruit.com/multimeters/continuity The kit is provided with instructions on the best way to solder the shield.  The toughest components to solder at the surface mount components, but you can still use a normal soldering iron to solder these in.  There are many tutorials online about how to solder surface mount components. Once you finish soldering the TC4 shield, we can move on to test the shield! Step 4: Artisan Roast Logging Software Setup Now we need to test to make sure that the Arduino/TC4 combination has connectivity to your computer and the Artisan Roast Logging Application.  You can find the main page for the Artisan Roast Logger here: https://code.google.com/p/artisan/ There are a variety of roast logging software applications available for free download, but Artisan is currently the only one piece of software that can be configured with the Zero Cross Detector for phase angle control of the popper's motor (specifics will be covered in a later step, so don't worry!).  Here are the steps that I followed to download all of the necessary software components for both the logging application and the Arduino sketch. Step 1: If you don't already have the Arduino IDE installed, follow through Lesson 1: http://www.ladyada.net/learn/arduino/index.html Step 2: Part 1 Now that the Arduino IDE software and USB driver is installed, the aArtisan TC4 "Sketch" file and Arduino TC4 standard library files need to be loaded. This is the software that runs in the Arduino and passes data from the TC4 board to the Artisan application.  Download and extract all of the files from the following: aArtisanQ_PID_4_3.zip for the Arduino, and download TC4-StdLib-REL-300.zip. Part 2 You will need to copy all the library folders in the TC4-StdLib-REL-300 folder (7 total) to the Arduino software Libraries folder location "C:/Program Files/Arduino/Libraries". Part 3 Now that the libraries are in place we can now load the aArtisanQ_PID Arduino sketch. Run the Arduino application and make sure the Arduino is selected to what model you have (Arduino Uno in the example) You can compile and then upload the sketch, as shown in the attached PDF. ---------------------------------------------------------------------- Part 4 Now you can download the Artisan application itself: https://code.google.com/p/artisan/downloads/list At the time of writing of this step, the most recent release was: artisan-win-0.7.4.zip Download this recent version of Artisan, extract the files, and then open up the application! ---------------------------------------------------------------------- This is all you need to do for now.  I'll cover the configuration of your first roast later in this Instructable. ArduinoTC4ArtisanSetup_Doc.pdf1 MB Step 5: Baseline Coffee Roast (without any control components) In order to better compare an unmodified popcorn popper to the final, controlled popper, I decided to do some roasting! I recommend reading Kenneth Davids' "Home Coffee Roasting" book: http://www.amazon.com/Coffee-Roasting-Revised-Updated-Edition/dp/0312312199 I purchased my green coffee beans from Sweet Marias. I used 4 oz. of green beans. 4 US Ounces = ~113 grams = ~0.5 cup of green coffee beans. Since I'll be using these beans for tasting, I roasted each batch for 7 minutes, which was between the first and second cracks.  Once the coffee beans are a dark shade of brown, or whenever you stop hearing the first cracking noises, you should stop the roast and pour the freshly roasted beans out.  It is important to have a cookie sheet, colander, or anything that will help to cool down the freshly roasted beans.  This is an incredibly important process.  In warmer environments, you can use a squirt bottle with water to "quench" the roast. For more specifics on how to roast with an unmodified popcorn popper, visit Sweet Marias' website to learn more!:https://www.sweetmarias.com/airpop/airpopmethod.php Build a Controllable Coffee Roaster from an Air Popcorn Popper - Step #5(516x290) 18 KB Step 6: Current and Voltage Measurements The designer of the TC4 shield recommends using 25A solid state relays.  I wanted to test the current draw of the heater and the voltage drop across the heater just to confirm it for my own satisfaction. *** THE FOLLOWING REQUIRES THAT YOU WORK WITH LINE VOLTAGE (120 VAC) - YOU MUST TAKE CARE WHEN TAKING MEASUREMENTS WHEN THE POPPER IS PLUGGED IN.  ALWAYS UN-PLUG THE POPPER WHEN YOU ARE NOT USING IT! *** I have included photos of the dis-assembly.  Make sure your popper is unplugged! Begin by removing the bottom plastic housing by removing the screws on the bottom. There will be one more metal plate.  Remove the two screws from that plate and then the inner wiring will now be exposed. The two, exposed metal wires, that are going down into the popper, supply the current to the heater. Current Draw Measuring current requires that your DMM be connected in series with the current flow to the heating coil.  If you place your leads in parallel, as you would when measuring voltage drop, you will create a massive short circuit, you'll blow the fuse in your DMM, and the heat may vaporize the wire.  Be Careful not to measure current like you would measure voltage drop! To measure the current draw, remove one of the heater wires from the screw terminal.  Place one of your multimeter leads or alligator clip onto the heater wire that you disconnected.  Place the other multimeter lead or alligator clip on the other wire.  Plug the popper in and turn the switch on.  I measured about 12 Amps of current. Voltage Drop The voltage from a 120V outlet is already, RMS voltage.  Therefore I measured about 108VAC across the heater.  It fluctuated between 108.3 and 108.5, but those fluctuations are due to the inherent transients in the voltage output from a 120VAC outlet. Resistance You could also measure the voltage and resistance across the heater and then apply Ohm's Law to calculate the current draw.  Learn more about Ohm's Law here: http://en.wikipedia.org/wiki/Ohm's_law Through my measurements, I concluded that I will need a relay that can switch at least 12A! Step 7: Choose and Purchase the Solid State Relays (+Theory) From Wikipedia: A solid state relay (SSR) is an electronic switching device in which a small control signal controls a larger load current or voltage. Why Use a Solid State Relay? Solid state relays are popular because they contain no moving parts - which are found in an electromechanical relay.  This means that there is no bouncing or arcing of contacts when the relay switches current to the load.  This gives them a much longer lifespan.  They contain two silicon-controlled rectifiers, in "inverse-parallel", which switch the load current.  When the input signal from, say an Arduino, is applied, a small amount of current flows from the AC mains through the optical isolator and into the gate of the forward biased silicon-controlled rectifier.  This, in turn, turns on the SCR and allows load current to flow for that half of the AC cycle.  When the polarity of the AC mains reverses, the first SCR turns off and the second one conducts load current for the next half of the AC cycle.  This process repeats until the input voltage is stopped. ---------------------------------------------------------- The heater and the AC motor need to be controlled by different methods.  Since these are AC loads, we are looking for a solid state relay that uses dual power SCRs (Silicon Controlled Rectifiers) that will allow for more precise switching as the AC waveform crosses the x-axis. Heater The heater will be controlled by Integral Cycle Control (also known as Burst Fire Control). Universal AC/DC Motor The fan will be controlled by Phase Angle Control. Other Parameters The SSRs also need to be easily driven by the digital output pins of the Arduino.  The relays described below are reated for 3-32VDC control voltage at 25A. ---------------------------------------------------------- Since I measured 12A draw from the heater, and the only SSR options (from Crydom) are 10A and 25A, I chose the 25A relay. --------------------------------------------------------- You will need the following Solid State Relays: D2425 (Crydom) - http://yourduino.com/sunshop2/index.php?l=product_detail&p=348 This solid state relay is a zero-crossing relay, meaning that it only turns on and off at the zero crossing.  This type of relay is very common for heater loads, which is what we'll be connecting it in line with! D2425-10 (Crydom) - http://www.crydom.com/en/products/catalog/s_1.pdf This solid state relay, denoted with the suffix, "-10", utilizes Instant-On Switching.  This means that the The SSR output is activated immediately after applying control voltage.  Consequently, this relay can turn on anywhere along the AC sinusoidal voltage curve. The typical response time is thus less than 1 ms.  This SSR is particularly suitable in applications where a fast response time or phase angle control is desired.  This is the relay that will be in line with the Fan.   For more detail: Build a Controllable Coffee Roaster from an Air Popcorn Popper ### Sound Reactive LED Strip Using Arduino THERE MAY BE 9 STEPS BUT I PROMISE THIS ONE IS QUICK AND EASY!  In this Instructable I will be showing you how to create a light reactive LED system. In this clip, I used a single color LED strip, but you you can use a single LED, multiple LEDs wired together, single color or RGB LED strip, it just depends on what you are trying to build. The set up is fairly simple, the component list is fairly basic so if you are a tinkerer you should already have the majority of the materials laying around. If not, I will post links to the components I used so you can order parts and get to work! In the following link you will see the entire setup. Obviously you may arrange it anyway you would like, I just kept everything close and compact for the sake of an easy video. Step 1: Components For this project you will need the following: 1) LED  ~$20 (with shipping) - For this project I used a solid blue LED strip which I purchased on amazon. These 5 meter SMD 5050 strips can run around $70 in retail stores so I though I would be taking a chance purchasing something priced under $20, but I was not disappointed in the least. I'm sure there are better quality lights out there, but if you plan on cutting these up and have no real game plan you wont feel any guilt putting these through the ringer. 2) Mini breadboard  $5 3) Arduino Uno  $30 4) Solid core wire  $2.50 - For anything involving breadboarding, do yourself a favor and stay away from any stranded wire. It will just end up getting frayed and hard to manage. Solid core is the way to go. I also like to choose at least two different colors for my wire to keep grounds and powers visibly separate. It makes troubleshooting and wiring easier in the long run when dealing with a lot of components. 5) USB A to B cable  $4 - This will be used to upload your Arduino LED code to the Arduino Uno board 6) Wire cutter/stripper $5 7) Parallax Sound Impact Sensor $10 8) Wall Adapter Power Supply - 9VDC 650mA $6 Total cost will be a bout $80 but keep in mind, all of these components are completely reusable. You can recycle them into a multitude of projects in the future so try not to worry about the cost. Think of it as building up your technical tool box :) Step 2: Breadboard Basics Breadboards are incredibly helpful when building circuits. They help you keep all of your components organized and laid out in a logical fashion. They also make it easy to confirm that the right wires are making the connections to the proper component leads. If you have never worked with a breadboard before, I'll explain the internal connection layout with the diagram above: The on either side of the breadboard there are two columns, denoted by the blue and red highlights. These columns allow the user to have a common power and ground for components no matter where they are placed on the board. Whether your component is placed at A1 or J30, a common power and ground connection will only be a short distance away. All of the holes are connected vertically, so if you connected your ground (or power if you felt so inclined) to the left  or right most blue column, your common ground would extend from that column from position 1 all the way down to 30. However, the left and right sides are not connected, so If you wanted both blue columns grounded you would need to make two separate connections on either side. Rows A-E and F-J are where your components will be placed. This part of the board is also split between the left and right side about the center of the board. If a wire is placed in A1, that charge will carry through E1 and stop at the center divide. If a wire is placed in F1 that charge will carry through J1. You do not have to start out at position 1 every time either. If you place a connection at C1 for example, A1, B1, D1 and E1 would all have the same charge. TL; DR The first two and last two blue and red columns share a connection vertically. A-E share a connection horizontally F-J share a connection horizontally A-E connections and F-J connections are not bridged across the center. Step 3: Parallax Sound Impact Sensor The basic idea behind this component is that it picks up sounds that cross a certain decibel level. At the very top (opposite side of the pins) of the module is a microphone that listens for ambient sounds. This module has a dial (look for the blue and white) which allows the user to fine tune the sensitivity of the microphone, so that way you can have the microphone register very subtle quiet noises or you can decrease the sensitivity to the point where it only listens for louder than average sounds loud claps, shouts, etc. Play around with this dial and experiment with the sensitivity to get the your desired effect. Once the microphone picks up a sound that is above the sensitivity threshold, the sensor sends a high (1) signal from the SIG line to whatever component you are trying to connect. Step 4: Arduino and Pulse-Wave Modulation An Arduino Uno is perfect for this project because it can handle the load of the LED strip, you can write multiple programs depending on what particular behavior you would like to see from your LEDs and besides the standard General Purpose Input/Output (GPIO) pins, it also has Pulse-Width Modulation (PWM) pins. PWM pins are great for powering components such as LEDs and electronic motors and although the pulse wave forms may look a bit jumpy (from the pulsating ons and offs) it actually allows you to control aspects such as brightness (when it comes to LEDs) and speed (when it comes to motors) in a very deliberate. smooth fashion, while efficiently utilizing your power. Here is a nice explanation of Pulse-Wave Modulation from the awesome people of MAKE (makezine.com)   For more detail: Sound Reactive LED Strip ### Creative diorama lighting with the Arduino and TLC5940 I became interested in model railroading a few years ago. It's a hobby that requires skills in precision painting, model building, scenery design, wood working, electrical engineering and about a dozen other skills that I’m forgetting right now. It is an excellent creative outlet. Realism can be a part of the hobby, like laying out a train line complete with all the scenery with historical accuracy. You can also choose to just build a fantasy land complete with cities, realistic grass, unicorns and Godzilla-like monsters fighting Transformers for rule over the land. Regardless, you will be assembling and painting a variety of buildings to enhance the world you are creating. I’m writing about adding some realism to the town: lighting. You can light a building by just plugging in a bunch of little model light bulbs and light everything in a uniform way. Towns don’t work like that though. People move from room to room, lights go on and off, street lights flicker, restaurants change the lighting through the night. We’re going to look at how to use an Arduino, a few TLC5940's and diorama skills to script the LEDs of a part of a town to create realistic lighting. Step 1: Tools This looks like a long and expensive list of tools. You may have many of these tools already or those that can do the job just as easily. Tools you'll need: A hammar A small nail A multimeter Needle nose pliers Calipers like Neiko 01407A Stanless Steel 6-Inch Digital Caliper with Extra-Large LCD Screen and Instant SAE-Metric Conversion or be really good with a ruler. A model file set, such as Tamiya Basic File Set or a tool to make very fine notches. Wire cutters work but easier to make a mistake. Modelers probably already have something like this. Wire strippers. I use these: Irwin Industrial Tools 2078300 8-Inch Self-Adjusting Wire Stripper with ProTouch Grips Note: The description says it is good to 24 AWG, but it works well down to 28 AWG stranded. Wire cutters similar to Xuron 170-II Micro-Shear Flush Cutter as you will want something with a small nose. Soldering iron with temperature control Ventilation Table top vices like these: PanaVise Model 201 "Junior" Miniature Vise PanaVise 301 Standard PanaVise PanaVise 209 Vacuum Base Pv Jr. Note: I regret this and would rather have 2 of the model 201's. The vacuum base is not great on wood and it doesn't have the weight to keep it steady. Optional: A decade box when you need that one odd resistor that you don't have on hand: Elenco 1% 1 Watt Resistor Substitution Box An oscilloscope. A circuit board holder such as: PanaVise 315 Circuit Board Holder You can remove the vice in the 301 and replace it with the board holder. You need a vice to crimp a few ribbon cables. Helping hands or something similar. Bamboo skewers. Step 2: Parts Some of these parts are optional and you have alternatives. I used three retailers: Amazon, Mouser and Jameco. All three delivered within 2 days thanks to Amazon Prime, Priority Mail and really fast customer fulfillment. The list is ordered by who fullfilled my order: Amazon: microtivity IL336 4.8mm Wide Angle White Straw Hat LED w/ Resistors (Pack of 100) microtivity IL614 5mm Diffused RGB Controllable LED, Common Anode (Kit, Pack of 30) microtivity IM414 Double-sided Prototyping Board (4x6cm, Pack of 5) POW3U PowerBoard-3U with Power Rails, 1 Sided PCB, 3.94 x 6.30 in (100 x 160 mm) A lot of male to male, male to female and female to female jumper wires. The Dupont connectors were the best since they are square and can mash up against each other. A note on Microtivity: Every part worked fine. The straw hats have a very wide angle and are great for building lighting. The RGB and white both draw 20mA according to their data sheets and that made it much easier to share the TLC5940's with both types. My regret was that I went with the prototyping board instead of a solder breadboard or strip board because of the time spent soldering bridges and buses. You will improve your soldering skills though. Mouser: 2 or more TLC5940NT 10 10uF 25v radial caps cut tape 10 10K ohm 5% 1/4w resistor PN 660-CF1/4CT52R103J cut tape 10 2k OHM 5% 1/4w resistor PN 660-CFS1/4CT52r2027 cut tape Note: The 2K resistor is based on a formula in the TLC5940NT's data sheet Jameco: 10 .1uF 25v cap 20% PN 151116 Several 16 pin female IDC sockets PN 119467. Several 16 pin male header w/shroud straight PN 68180 mates with the above 16 pin female connector. 1 Cable Ribbon 16 Conductor Rainbow 28AWG 10 Feet Flat PN 28RC16-10VP A large solderless breadboard such as PN WBU-208-R A couple small breadboards such as PN WBU-301-R with power bus Several Connector Unshrouded Header 40 Position 2.54mm Solder Straight Thru-Hole PN 7000-1X40SG-R Part 7 is just a 40 pin single row snappable header. You will need 64 pins per node board, which I'll describe in future step. You'll need two 40 pin headers per node board. Also, it is easy to miscount the number of pins you need when snapping them off so get a couple of extra headers for mistakes. Note: Some of the parts above say "have 10 of this or that." Some vendors have minimum orders or parts like resistors and capacitors. Other stuff: Thick white paper or cardboard that can hold a little weight. Common white glue Evergreen Scale Models: Channel 5/16" (7.9mm) PN 268 or something similar. Various other parts to make your diorama look realistic. Model buildings or similar structures, like lego. Foam sheets, see picture. You can find them in most kid's craft stores. An Arduino Uno R3 Step 3: Overview of lighting the buildings The above ground setup will be just two buildings to demonstrate building lighting. Below ground is the controller board. A bridge will connect the controller board to each node via one or more ribbon cables. The nodes connect to the LEDs in the buildings. The LEDs are strung together on the channels to create a LED strip. Make a strip by measuring the windows you want to light. Draw lines on the strip to show room dividers and LED locations. Use the hammer and nail to punch holes for the LED leads. Create notches in the strip for the leads to bend into (see picture) using a file or something similar. Having LEDs off center from a window gives the effect of normal lighting. Test that the strip works before proceeding. Each LED on the strip is covered with a separate paper box. Use thick white paper or cardboard to make the box. Use the foam to cover the box to make it mostly light tight. Make sure to connect the LEDs to a Node before glueing the box to the windows. Test again that the LEDs work. Note: Light bleed can be a challenge. Your wrapper on the LEDs should be as light tight as you can make them so they only light the window. Also, the light can bleed through other windows too. Model makers use different manufacturing methods that impact lighting. First, some walls are very thin and the LED will bleed through the wall itself. Paint around the windows or better still, glue some white or black foam around the windows. Do not use other colored foam as it will change the color of the light. Some manufacturers make the models with walls that are not square. Foam and sandpaper works really well in these corners. I use a bright flashlight to see all the places where light bleeds from my corners and other joints. It is easy to patch those locations using the foam or other materials. Step 4: Overview of the controller code The code manages LED clusters of either white or RGB. The bar or nightclub demonstrates a mix of both. The RGB LEDs follow a sine wave. The code originally calculated the value for the "lead" LED and then iterated it down to the other RGBs. The calculations were amazingly slow. Improving the speed required pre-calculating the entire sine wave and statically storing it in an array. The code runs significantly faster as a result and allows us to whip through all the LEDs. The LEDs are clustered in the code. The RGBs are one cluster. One set of windows are another and so on. Each LED has start and end time fields that indicate how many milliseconds to wait before performing an action such as changing the color, turn on or turn off. The loop() function will iterate through each LED cluster and you may notice slight delays as the code has to iterate through all the LEDs and then perform an update to set their state. A small delay is one of those bugs that's a feature. It adds some variability to the duration of the LEDs, making the lighting a little more realistic. Note that all times are hard-coded. You could change this so the lights run for a random period. Please be careful with the white LEDs and the brightness settings you choose. The TLC5940 has steps that go from 0 (off) to 4096 (leaves spots in your eyes). I have lowered the default LED brightness to something very low to see the LED work after foolishly setting the LEDs to their maximum and having a hard time seeing anything but spots afterwards. You will have to set the LEDs to a higher value once installed in the model because windows and other items may diffuse or block the light. Step 5: Write the code First, you need the TLC5940 Aduino Library. The installation directions are out of date. Download the library and unzip into a temporary directory. Then open the Arduino editor and go to Sketch ->Import Library and add the library. The editor will do the rest. Edit the tlc_config.h file to modify the number of TLC5940's you are using. This project runs thee TLCs so the line reads #define NUM_TLCS 3 The code is pretty straightforward from here and is commented. I have some comments at the end too. LEDController.ino #include "Arduino.h" #include #include #include "LedController.h" // Root List for all LEDs List *lightList = NULL; // various values for iterating through the RGBs int rgbIndex = 0; int rgbLastStart = 0; boolean firstRGBIndex; int maxRGB = 252; // Handy for steping through all the LEDs // Each LED will flash, which helps find missing or incorrect connections void diag() { for(uint8_t x= 0; x < 40; x++) { if ( x > 0) { Tlc.set(x-1,0); } Tlc.set(x,1000); while(Tlc.update()); delay(500); } } /* Pause for 5 seconds so that you can pull up any diagnostic you may need. Initialize the TLC chain. Create the complete light list */ void setup() { delay(5000); Tlc.init(); Tlc.clear(); lightList = createList(); addNode(lightList, createRGBCluster1()); addNode(lightList, createLEDCluster1a()); addNode(lightList, createLEDCluster2()); } /* Increment the RGB value so it slowly moves through the list of color transitions. Keep the current time so you know when to turn on and off lights. Run through the list. */ void loop() { //diag(); rgbIndex = rgbLastStart + 1; firstRGBIndex = true; long time = millis(); iterateList(time,lightList); /* The update finishes asynchronously on the TLC's. You must wait till everything updates or your lights will display incorrect values. */ while(Tlc.update()); } /* Single link list. Most of the following functions create a node of some type and attach it to the end of a list. This system creates lists of lists for each LED array. This exposed some memory challenges as the list is using some statically allocated values and shares some of those values. Pointers would have been a wiser choice. */ List* createList(void) { List *list = (List*)malloc(sizeof(List)); list->head = NULL; list->tail = NULL; return list; } List* addNode(List* list, Node* node) { if (list != NULL && node != NULL) { if (list->head == NULL) { list->head = node; list->tail = list->head; } else { list->tail->next = node; list->tail = node; } } } Node* createNode(NodeType type, uint8_t pin) { Node *result = (Node*)malloc(sizeof(Node)); result->next = NULL; result->type = type; switch(type) { case LIST: result->value = createList(); break; case LED_RGB: result->value = createRGB(pin); break; case LED_NORMAL: result->value = createLED(pin); break; } return result; } Node* createRGBNode(List* list, uint8_t pin, Runtimes runtimes, RGB *useSettings) { Node *results = createNode(LED_RGB, pin); RGB* rgb = (RGB*)results->value; configureRGB(rgb, runtimes, useSettings); addNode(list, results); return results; } void configureRGB(RGB* rgb, Runtimes runtimes, RGB *useSettings) { if ( useSettings != NULL) { rgb->useSettings = useSettings; rgb->color = useSettings->color; rgb->runtimes = useSettings->runtimes; } else { rgb->runtimes = runtimes; } } RGB* createRGB(uint8_t pin) { RGB *result = (RGB*)malloc(sizeof(RGB)); result->pin = pin; result->color.r = 0; result->color.g = 0; result->color.b = 0; result->useSettings = NULL; return result; } Node* createLEDNode(List* list, uint8_t pin, Runtimes runtimes, uint8_t level) { Node *results = createNode(LED_NORMAL, pin); LED* led = (LED*)results->value; led->level = level; led->runtimes = runtimes; addNode(list, results); return results; } LED* createLED(uint8_t pin) { LED *result = (LED*)malloc(sizeof(LED)); result->pin = pin; result->level=0; result->runtimes.startTime=0; result->runtimes.runTime=0; result->runtimes.on=false; return result; } void setRGBLed(RGB *led) { Tlc.set(led->pin,led->color.r); Tlc.set(led->pin+1,led->color.g); Tlc.set(led->pin+2,led->color.b); } /* iterate through the list and determine the correct way to execute each node. */ void iterateList(long time, List* list) { if(list != NULL) { Node* node = list->head; while(node != NULL) { executeNode(time, node); node = node->next; } } } void executeNode(long time, Node* node) { if(node != NULL) { switch(node->type) { case LIST: iterateList(time, (List*)node->value); break; case LED_RGB: setRGB(time,(RGB*)node->value); break; case LED_NORMAL: setLED(time,(LED*)node->value); break; default: Tlc.set(1,200); Tlc.update(); break; } } else { } } /* Horrible cheating going on here. There is only one RGB list so we're going to keep some extra state and apply it to just this rgb list. blech. However, this array runs much faster by iterating through precalculated values than trying to calculate and display those values. */ void setRGB(long time, RGB* rgb) { if (rgb != NULL) { boolean cycle = time > rgb->runtimes.startTime + rgb->runtimes.wait; if ( cycle ) { if ( rgb->useSettings != NULL ) { rgb->color = rgb->useSettings->color; rgb->runtimes = rgb->useSettings->runtimes; } else { if ( firstRGBIndex ) { firstRGBIndex = false; rgbLastStart++; if ( rgbLastStart > maxRGB) { rgbLastStart = 0; } rgbIndex = rgbLastStart; } rgb->color = rgbPattern[rgbIndex++]; if ( rgbIndex > maxRGB) { rgbIndex = 0; } } rgb->runtimes.startTime = time; } setRGBLed(rgb); } } void setLED(long time, LED* led) { if (led != NULL) { long execWindow = led->runtimes.startTime + led->runtimes.runTime; if(led->runtimes.runTime == -1 || (time > led->runtimes.startTime && time < execWindow)) { led->runtimes.on = true; Tlc.set(led->pin, led->level); } else if ( time > execWindow && led->runtimes.on == true ) { led->runtimes.startTime = time + led->runtimes.wait; led->runtimes.on = false; Tlc.set(led->pin, 0); } } } /* The various LED array factory methods */ Node* createRGBCluster1(void) { int i = 0; int wait = 50; Runtimes rt = (Runtimes) { 0, 0, wait, false }; Node* rgbList = createNode(LIST, 0); List* rgbCluster1 = (List*)rgbList->value; Node* a = createRGBNode( rgbCluster1, i, rt, NULL); Node* b = createRGBNode( rgbCluster1, i+=3, rt, NULL); Node* c = createRGBNode( rgbCluster1, i+=3, rt, NULL); Node* d = createRGBNode( rgbCluster1, i+=3, rt, NULL); Node* e = createRGBNode( rgbCluster1, i+=3, rt, NULL); // Let them share values which creates a kind of cool looking // fountain effect. createRGBNode( rgbCluster1, i+=3, rt, (RGB*)e->value); createRGBNode( rgbCluster1, i+=3, rt, (RGB*)d->value); createRGBNode( rgbCluster1, i+=3, rt, (RGB*)c->value); createRGBNode( rgbCluster1, i+=3, rt, (RGB*)b->value); createRGBNode( rgbCluster1, i+=3, rt, (RGB*)a->value); return rgbList; } Node* createLEDCluster1a(void) { int i = 30; Node* ledList = createNode(LIST, 0); List* ledCluster = (List*)ledList->value; createLEDNode( ledCluster, i++, (Runtimes) { -1, -1, -1, true }, 300); createLEDNode( ledCluster, i++, (Runtimes) { -1, -1, -1, true }, 300); createLEDNode( ledCluster, i++, (Runtimes) { -1, -1, -1, true }, 300); createLEDNode( ledCluster, i++, (Runtimes) { -1, -1, -1, true }, 300); createLEDNode( ledCluster, i++, (Runtimes) { -1, -1, -1, true }, 300); createLEDNode( ledCluster, i++, (Runtimes) { -1, -1, -1, true }, 300); return ledList; } Node* createLEDCluster2(void) { int i = 36; Node* ledList = createNode(LIST, 0); List* ledCluster = (List*)ledList->value; createLEDNode( ledCluster, i++, (Runtimes) { 10000, 30000, 25000, true }, 3000); createLEDNode( ledCluster, i++, (Runtimes) { 10000, 30000, 25000, true }, 3000); createLEDNode( ledCluster, i++, (Runtimes) { 3000, 90000, 45000, true }, 3000); createLEDNode( ledCluster, i++, (Runtimes) { 3000, 90000, 45000, true }, 3000); return ledList; } /* This is some old code that did the sine wave calculation. It works but is very slow. I wrote some code to capture the values and write them out the serial console instead and then copied the values into the header void setRGBFreq(RGB *led, uint8_t i, uint8_t max) { float frequency = .3; led->r = sin(frequency*(i) + 0) * 127 + 128; led->g = sin(frequency*(i) + 2) * 127 + 128; led->b = sin(frequency*(i) + 4) * 127 + 128; uint8_t total = led->r + led->g + led->b; if ( total > max ) { led->r -= led->r/total * 100.0; led->g -= led->g/total * 100.0; led->b -= led->b/total * 100.0; } //printList(led); }*/ For more detail: Creative diorama lighting with the Arduino and TLC5940 ### LilyPad Arduino Sensor Demo Mat This tutorial shows you how to create a sensor demo mat for the LilyPad Arduino. I wanted a place where I could experiment with the different sensors, but also something that I could use to show examples of what can be done without constantly uploading code. Step 1: Step 1: Supplies To complete this project I used the following: 1 x LilyPad 328 Main Board 1 x ProtoSnap - LilyPad Development Board which includes the following: 1 x LilyPad Simple Board 1 x LilyPad Button 1 x LilyPad Slide Switch 5 x LilyPad White LED 1 x LilyPad RGB tri-color LED 1 x LilyPad Light Sensor 1 x LilyPad Temp Sensor 1 x LilyPad Buzzer 1 x LilyPad Vibe board 1 x LilyPad FTDI Basic 2 x Conductive Thread Bobbin 1 x Needle Set 7 x sewable snaps 1 x Piece of fabric big enough to hold all of the sensors 1 x Fabric Marking pen (I used a Dritz Mark B Gone marking pen which can be found online, at many craft stores, or even stores like Wal-mart) Although I had the LilyPad Development Board, I decided to use the LilyPad SImple Board so I could use the extra pins as switches. Step 2: Step 2: The Circuit Diagram Before beginning any project it is good to take the time to think everything through. I put images of the different sensors and components into lucidchart.com and played around with the placement of the sensors to find an arrangement that wouldn’t just work, but one I also found to be aesthetically pleasing. Step 3: Step 2: Sensor Placement Based on the diagram, I arranged all of the sensors and switches onto the fabric. I used the marking pen to indicate where each pin and component would be placed. A dot inside the pin hole was enough to let me know where each component would go. Step 4: Step 4: Draw the Circuits I removed the sensors and used the marking pen to draw the circuit onto the fabric. I used a ruler to make sure all of my lines were straight. The nice thing about a pen like a Dritz Mark B Gone is that the ink disappears when it gets wet which allows you to erase your lines with a damp rag if you need to make changes. When I had the lines drawn, I again placed the sensors on the mat to make sure that everything lined up the way I wanted it to. I ended up changing the position of the RGB light slightly so the lines were less likely to make contact with the other pins on the LilyPad. I wanted the lines to be part of the final piece so, once I was satisfied with the diagram, I traced the lines with a permanent marker. If I did it over, I would probably color code the lines so that it can be better used to explain how the circuit works. Step 5: Step 5: Clean off the Marking Pen I soaked the fabric in water and then let it dry overnight to remove the blue marking pen marks from the fabric before I started sewing. Step 6: Step 6: Stitch on the Sensors and Other Components (optional) To ensure that the sensors stayed put while I sewed the circuits, I did a quick stitch with plain thread to hold the components in place.   For more detail: LilyPad Arduino Sensor Demo Mat ### Brushless Gimbal with Arduino This is a Spring 2014 Electronics project at Pomona College created by Andreas Biekert and Jonah Grubb. Thanks to Professor Dwight Whitaker, Tony Grigsby and the Pomona Physics Department. Our goal with this project was to create a 2 axis brushless gimbal controlled solely by an Arduino Uno with input from an accelerometer/gyro. A gimbal is a camera stabilization system that uses motors to correct unwanted camera motion. The goal is to create perfectly steady footage, although smoothing out any bumps is a reasonable first benchmark. "Brushless" refers to brushless motors which we will explain more about later. All the other gimbal projects we found are controlled using fabricated gimbal control boards so we wanted to approach the project from a more fundamental level. Our hope was to create brushless gimbal control without this kind of board, but rather using the more general purpose Arduino Uno. We're going to have to be upfront; we never got the gimbal we were looking for. However, we did learn a lot about how the device should work, so we have written our thoughts on improvements and directions to pursue with the project. We hope this is at least a good resource for a starting point. Let us know if you have any questions or suggestions for improvement. Between learning how to control the brushless motors and interfacing with the accelerometer we consulted quite a few sources for this project. We will be referencing material and using photos from this project, which served as our foundation for brushless motor control. Our code is heavily based on both the aforementioned motor control project and this I2C library with sample code for an MPU6050 chip. A big thanks to both of these projects for giving us direction in our efforts! There are several ways to go about getting the parts for this kind of project. Naturally, one of the principle components is the Arduino Uno. We bought a frame and brushless motor set on Amazon: Frame and Brushless Motors. It's probably possible to machine or print your own frame, but we were more interested in the electronics portion of this project, so we went with the quicker route of simply buying the frame ready-made. We also bought our accelerometer off Amazon: Accelerometer/gyro. The GY-521 breakout board is significantly cheaper than any other MPU6050 models we found, but it worked just fine for our project. However, we did manage to break one and had to order another one. We still aren't sure if its failure was our fault. We used two Mauser 511-L298 h-bridges (with heat sinks) to control the motors---more on that later. These are able to handle the higher voltages and currents needed to drive the motors so they can move the frame and camera. Some other small components we used were two 2.2k resistors, three 0.1 microFarad capacitors, and a lot of wiring :) Step 1: Brushless Motor Control (Part 1 - Concepts and Theory) Brushless DC motors are ideal for this project because they are efficient, precise, and have plenty of torque; the trick is actually controlling them. The most common hobby route is to buy programmable electronic speed controllers which can take throttle inputs and convert that to rotational speed in the brushless motors. However, these can cost $20 for the cheapest ones, so we decided to save costs and figure out how to control the motors without them. Unlike brushed DC motors, which work by simply reversing the current in loops of wire in a permanent magnetic field via a commutator, brushless motors have no physical connection between the wire coils on the stator and the rotor. The most common brushless motors are known as three phase brushless motors. This means that they have three distinct sets of coils, often labelled A, B, and C. Surrounding these are permanent magnets with alternating orientations. Our motors have twelve coils or electromagnets (3 sets of 4) and fourteen permanent magnets on the rotor. The idea is that we change the polarity of our electromagnets in a cycle and the permanent magnets follow the changing magnetic field. In the simplest form, we have three electromagnets (A, B, and C) and the rotor is just a single NS permanent magnet. If we have coil A creating a north magnetic field and coil B creating a south field and coil C off, the magnet will turn to align itself as closely as it can to the generated magnetic field. We can then rotate the polarities of our electromagnets by one position (A off, B North, and C South) and the magnet will follow. In this manner, we have a set of commutation phases that when we run them in order cause the rotor to turn, and we can reverse this cycle to run it in the opposite direction. Watch these two videos for a clean and clear explanation with diagrams. We did some research and found that sending Sine waves that are 120 degrees out of phase through the three sets of electromagnets, we can create a dynamic magnetic field that drives motor rotation. Introducing a sinusoidal signal smooths out the motion of the motor considerably by changing the polarity of the electromagnets gradually. This site was very useful in taking that theory and turning it into Arduino software. The trick to this approach is running our PWM signal from our Arduino through an H Bridge to allow negative polarity of one of the coils since PWM signals only output High (1) and Low (0). One of the biggest challenges of brushless motors is that to properly control them you need information of where the rotor is in reference to the stator coils. That way the controller knows exactly where in the commutation cycle to begin or to jump to. We were hoping that the accelerometer may be able to give this feedback, which seemed to work with moderate success. More sophisticated methods include attaching hall effect sensors to detect the position of the rotor or even using the "back emf" induced in the coils. Step 2: Implementing Brushless Motor Control Introducing the h-bridge to control the motors allows us the bi-directional motion that the gimbal requires, and also allows for very smooth stepping of the motor's position. The H bridge essentially flips the sign on one of the electromagnets so that we can have a high, a middle and a low voltage. As mentioned in the introduction, we used L298 h-bridges, which have 15 pins. We wired each of them as seen in the image above. Here is the data sheet. Pin 1: Ground Pin 2: Motor Pin 1 Pin 3: Motor Pin 2 Pin 4: External Supply Voltage (put a 0.1 microFarad capacitor to ground) Pin 5: Arduino PWM Digital Output (pin 3 or 9) Pin 6: +5V from Arduino (put a 0.1 microFarad capacitor to ground) Pin 7: Arduino PWM Digital Output (pin 5 or 10) Pin 8: GND Pin 9: +5V from Arduino Pin 10: Arduino PWM Digital Output (pin 6 or 11) Pin 11: +5V from Arduino Pin 12: Not Connected Pin 13: Motor Pin 3 Pin 14: Not Connected Pin 15: GND Our source describes a clever scheme of approximating a sinusoidal signal to the motors. They construct an array of 48 values between 0 and 255 which represent the values of the sine function at equal increments. They begin each electromagnet state A, B, and C 16 values apart from one another, which divides the period of the function into thirds or, in other words, phase shifts the states by 120 degrees. Then, they simply increment each state's value in the array so that the states cycle through the sine wave with each loop of the program. The result is very smooth rotation in the motor, although it is somewhat speed limited by the physical ability of the motor to keep up with the Arduino signals. We use the same PWM sine-array scheme as our source, which allows to increment though a numerical approximation of the sine function over a given number of steps in the period. In our case, we doubled the number of values in the array from 48 to 96 so that we could more precisely control the motor. This is because our gimbal application does not need the motor to make full rotations, well, ever; we only need to adjust the camera's position against the motion of the base. Quick observations suggest our scheme allows the motor to step in 0.2 degree steps at a time. It's important to note that this is mostly a makeshift way of controlling brushless motors. At any given moment, we want one electromagnet high current, one low, and one in a high-impedence state, which approximates to neither high or low. In our case, the "high-impedence" state actually lets current run off to ground, which generates a significant amount of heat in the motor. A definite place for improvement is to keep the motors from getting hot in the case of long-term (e.g. over a minute or two) operation. Another hazard with our implementation is in the case that the motor physically misses or overshoots one of the steps, which can happen given the significant weight of the frame and camera relative to the motor's torque. In this case, our program is unaware that the motor isn't in sync with the signals, and cycles through the sine wave once before "catching" the motor and resuming normally. Step 3: Using the Accelerometer and Gyro The accelerometer allows the Arduino to understand the position of our camera at any given time in reference to gravity and detects axial accelerations. The gyro detects changes in angle. With this data we created a servo (a feedback loop that approaches a given set point) to keep the gimbal at a fixed position. We used the MPU 6050 6-DOF (Degree of Freedom) Accelerometer and Gyro mounted on the GY 521 breakout board. We wired the accelerometer to the Arduino as seen in the picture above. Unfortunately there is no data sheet for this breakout board. This is what we found in the comments on Amazon: VCC: +3.3V From Arduino (attach 0.1 microFarad capacitor to ground) GND: GND SCL: A5 on Arduino Uno (With 2.2k pull up resistor to Arduino +5V) SDA: A4 on Arduino Uno (With 2.2k pull up resistor to Arduino +5V) XDA: Not connected XCL: Not connected ADO: GND INT: Digital Pin 2 on Arduino We searched around and found some Arduino sketches that give you the raw data. However, this is pretty noisy and not particularly useful, especially in servo-ing. The MPU 6050 has a built in Digital Motion Processor (DMP); however, instructions on using it are not provided. Some brilliant person at MIT (thanks Jeff Rowberg!) reverse engineered the chip and figured out how to activate the DMP and get the clean and steady data from that. We used his code which allowed us to receive the data in several different forms including Euler Angles, Quaternions or Yaw Pitch and Roll (YPR). For more detail: Brushless Gimbal with Arduino ### Motion Sensing Digital Camera & Alarm using Arduino Welcome to my instructable on how to make an Arduino-controlled motion sensing camera and alarm! The motivation behind this project, which I worked on in my electronics class at Pomona College, was the need to keep away varmints (particularly raccoons) that were digging up my parents' yard. Although a simple motion sensing alarm would probably do the trick, I decided to add a camera to the circuit so that I could actually capture the critters in action! I have yet to field test the device, but the results so far are promising. One really great thing about this project is that it builds upon the work of several other cool instructables: · Hacking A Keychain Digital Camera for Arduino Control by smb http://www.instructables.com/id/Hacking-A-Keychai... · Cat Repelling PIR motion sensor (covert) speaker box alarm by briannaw http://www.instructables.com/id/Cat-Repelling-PIR... · PIR Alarm Motion Sensor (with Encasing) by chuck4747 http://www.instructables.com/id/PIR-Alarm-Arduino... So without further ado, let's build it! Step 1: Supplies and Tools 1) An Arduino uno (http://arduino.cc/en/Main/arduinoBoardUno) 2) Arduino software (http://arduino.cc/en/Main/Software) 3) standard usb cable for your Arduino to communicate with the software 4) A 9V battery with an adapter (http://playground.arduino.cc/Learning/9VBatteryAdapter) 5) Digital Concepts “Key Chain” digital camera (costs about $5.50). Can order them from Amazon at http://www.amazon.com/Digital-Concepts-Key-Chain-... o IMPORTANT: you will need the software installation disk that comes with the camera so that you can install PhoTags express, which allows you to upload your images to a PC (note that you must have Windows 2000/MEXP/Vista 32-bit). 6) Passive infrared sensor (PIR). There are a variety of sensors out there so feel free to choose the one that suits you. For your convenience, I have listed two common models that are compatible with this instructable: o Here is a datasheet for a sensor very similar to the one I used. The output prong is located between the positive and negative/ground, just like the sensor I used. https://www.futurlec.com/PIR_Module.shtml o Another model can be found at Sparkfun (https://www.sparkfun.com/products/8630). Note that the negative/ground prong for this model is in between the positive and output (called “alarm” in the datasheet). 7) A super bright white LED. I used http://www.mpja.com/8mm-Super-Bright-White-100000... but there are plenty to be found on Sparkfun as well. 8) One other LED of your choosing. I used this to trouble-shoot my prototype and did not include it in my finished product. 9) A small piezo buzzer (https://www.sparkfun.com/products/7950) 10) One AA battery (1.5V) and battery holder. I strongly recommend a single battery holder. You can order one from Mouser Electronics (here are the results for a search I performed: http://www.mouser.com/Power/Battery-Holders-Clips-... o If you use a multi-battery holder instead, make sure that you can easily solder an extra wire or two to one of the sockets (Step 4 shows exactly what you need to solder). Battery holders with external solder tabs are ideal. 11) Two relays. I used 8-pin dual in-line package (DIP) relays. A really great example is provided here: http://www.alliedelec.com/search/productdetail.as... o the configuration of the relay will depend on the model, so be sure to reference your relay’s data sheet to understand how it should be wired up. If you don’t know how relays work, I highly recommend you check out this instructable: http://www.instructables.com/id/How-Electronic-Sw... o If you’re stuck without a datasheet (like I was), there is a simple way to determine how to hook your relays up (which is explained later in this instructable). 12) two DIP 14-pin or 16-pin sockets (https://www.sparkfun.com/products/7939). I used 16 pin sockets but you’ll only need 14 for your 8-pin DIP relays. 13) One 56 ohm resistor (for use with the 8mm super bright white LED; be sure to check your LED’s typical/continuous forward current and forward voltage so you can calculate the ideal resistance for yourself!) 14) One 10K pull-up resistor (for your PIR sensor) 15) At least 4 arduino stack-able header pins (https://www.sparkfun.com/products/7937) . You’ll need two 6 pin and two 8 pin sockets. I say at least because if you make a mistake during the final soldering process, you'll need backups. 16) 1-2 additional stack-able header pins for your PIR sensor, to place your sensor on your circuit board. These are not required if wires are already attached to the input-ground-output prongs (such as https://www.sparkfun.com/products/8630). 17) Proto-board (for finished product) 18) Optional, but incredibly helpful: breadboard for testing out your circuit before soldering 19) Jumper wire kit (https://www.sparkfun.com/products/124) 20) A few feet of insulated wire, ideally in several colors 21) Wire connectors (you may need them if your battery holder does not have solder tabs; see Step 4 for details) 22) Plastic ties to keep soldered wires in place 23) Optional: electrical tape in several colors (depends on how many colors of insulated wire you have) Tools · tiny Philips-head and flat-head screw drivers · wire cutter and wire strippers · two multimeters · soldering iron and solder · solder stand (makes life much easier if you don’t have an extra pair of hands to help you) Step 2: Taking Apart the Keychain Digital Camera This step is based on step 2 of smb’s instructable at http://www.instructables.com/id/Hacking-A-Keychain... I took most of my pictures after throwing away the parts I didn’t need, so while the pictures above are helpful (especially once you’re looking at the camera’s circuit board), I recommend you check out smb’s photographed instructions to fill in the gaps as you dissect your camera. First, you will need to open up the battery compartment at the bottom of the camera to remove the AAA battery (it should be in there if your camera is new). Once the battery has been removed, you’ll need to use a flat-headed screwdriver to pry open the front cover of the camera (as demonstrated in the aforementioned instructable). Like the author of that instructable, I found it easiest to dig under the bottom-right portion first. The cover is a bit stubborn, but with a little persistence you’ll get it open in no time. Once the cover is open, you will see a screw near the bottom, below the LCD display. Use your Philips screwdriver to unscrew it. Once you have done this, return to the camera’s battery compartment to remove the tape (you may have to scratch away some of it with one of your screwdrivers). Once the tape is removed, you will be able to open both halves of the camera (which the screw and tape had been holding together). My first picture demonstrates what both halves of the camera should look like with all the components attached, minus a screw or too (Unlike the camera in smb’s instructable, my camera only needed one screw since its positive battery holder was soldered). Unscrew the remaining screw from the top left/center part of the circuit board (see fourth image), and from the positive battery compartment if present. With all the screws removed, you should be able to remove your circuit board from the camera frame. Don’t panic if some pieces fall out! The "on" button, shutter button, viewfinder and LCD display will probably come off. This is perfectly fine because you won’t be using any of them again. One other piece that may become detached is the circular metal piece (labeled in the first image). Although it will not fall off (it is wired into the circuit board), it may detach from the foam tape. If this happens, you may want to apply a fresh layer of double-sided tape to secure the piece. This circular piece seems to generate the “beep” that you hear whenever you press the power button or shutter, because once the piece became detached, my camera stopped beeping, even after I reattached the piece with new foam tape. The beep is certainly not necessary, but you don't want a loose piece getting in your way, especially since you will need to solder some wires to the circuit board. Two other pieces that may break away from repeated handling are the positive and negative ends of the batter holder. If you plan on keeping the camera frame in your final product, you’ll need these pieces and will have to solder them back on if they fall off. However, if you choose to abandon the frame (as I did), you will have to remove the positive and negative ends of the camera holder, so if they fall out, you’re ahead of the game! Step 3: Soldering Prep This step can be tricky, especially if you have not soldered before (there are some good soldering instructables out there if you are new to soldering). The reason for this is that the four connections that you will be soldering to are fairly small and close to other conducting parts of the circuit. Thus, to prevent short-circuiting your camera, you will need to be extra careful not to let the solder leak into other conducting parts of the circuit board. On the bright side, there are only four connections you need to solder, so if you’re nervous, just take a deep breath. Now, let’s get to it! It may take a while for your soldering iron to warm up, so go ahead and turn it on before reading further.   For more detail: Motion Sensing Digital Camera & Alarm using Arduino ### Smartphone controlled Arduino tank using Annikken Andee Hi guys, I am Robin, one of the developers of Annikken Andee. Just a few weeks back we were invited to be a part of Arduino Day Singapore 2014. On the day of the event, we showcased a missile-firing lego-crushing smartphone controlled Tank built using our Annikken Andee. It was a big hit with our audience and many of them has enquired on the making of the Tank. We wanted to share our Tank making knowledge to the Instructables community. So to get you in the seat of a POTENTIAL TANK COMMANDER, I am going to give a step by step guide on creating the Andee Battle Tank, or ABT in short. Please like our Facebook page and view Video Highlights of ABT and Arduino Day Singapore 2014! Step 1: What do you need? Our ABT is built using the following parts. You can source from them from Amazon, Pololu, Aliexpress etc. 1 x Arduino Uno 1 x Pololu Zumo Robot 1 x Annikken Andee 1 x WLToys V959-19 Missile Launcher (Amazon) (Aliexpress) 1 x Smartphone (Android 4.0 and above) (note: if you are using iOS, u will need to the get Annikken Andee for iOS) You might/will also need to the followings to get the job done 2.54mm Row Male Pin header 2.54mm Row Female Pin header thin insulated wire Insulated Tape Double sided Tape / Blu-tack / Something Sticky Some Soldering and Desoldering work 4 x AA Batteries Step 2: Assemble the Zumo Chassis The base of the ABT is built using Pololu Zumo Tank kit. It is designed for Arduino/Leonardo and therefore fits Annikken Andee perfectly well. What I like best is that entire set up (Zumo Shield, Andee and Arduino) can be powered by 4 x AA Battery found below the chassis. This means that i do not need to mount an external battery pack to power the ABT. In This Guide I will not be mentioning much about the assembly of the Zumo Chassis as user Qtechknow has already made a comprehensive guide on Zumo Tank Assembly. You can also visit Pololu Official page for the documentation. Just don't arm the metal plate that comes with the Zumo Kit, ABT uses speed as its defence, not armor =) Female header for The Turret After the Assembly, Solder the 2.54 mm Female Pin Header to the pin 2 and ground hole on the Zumo Shield. We will be using Pin 2 of the Arduino to fire the missile. Step 3: "Hack" Annikken Andee Coincidentally, Zumo Shield and Annikken Andee both uses Pin 8 to communicate with Arduino! (Great minds think alike?) This poses a problem for Arduino as he is unable to differentiate the source of the communication (Andee or Zumo?). To get around this problem, we are going to do a little hack Modify Annikken Andee Wait, what is Annikken Andee? Annikken Andee is a bluetooth shield that allow easy communcation between your smart phone and your Arduino. As it comes with Andee Arduino library and free downloadable Andee App for your smart phone, you do not need to develop the App. You can create the UI all via your arduino codes. What we are doing here is to reroute the communication from pin 8 to 4. You can also try pin 1,2,3,5,6,7 if you want. But because i like pin 4, i am going to use pin 4. Step 1) Desolder R30 R30 is a 0 Ohm resistor that you can find on the underside of Annikken Andee. Taking it out severs the connection between the leg of pin 8 and Annikken Andee. Step 2) Connect Annikken Andee to Pin 4. Using a piece of short wire, short-circuit the copper base which previously house the 0 Ohm resistor of R30 to the leg of pin 4. This way the communication between Andee to Arduino will done via pin 4, and not pin 8. Check out the picture above for reference. Step 4: Turret (Missile Launcher) WLToy's V959-19 missile turret is a rare find indeed. It was meant for their quadcopter to shoot projectiles at unsuspecting target. It can hold up to 6 missile at any time and its missile travel at up to 100 km/h. A direct hit from the missile can instantly decimate a T34 at its strongest point. With lacking of online documentation of this fearsome weapon, The follows are my understanding based on trial and error. The Yellow and White wires is connected to the DC motor behind the turret. As the motor rotates, it will trigger the mechanism to release a missile.The Red and Black wires will short-circuit every time the missile's release mechanism is triggered. However for simplicity sake, we are not using this 2 wires for the project. The missile launcher's wires originally uses 1.25mm pitch header, which obviously doesn't fit the 2.54mm Pin header Arduino uses. Therefore we need to carefully cut the 1.25mm header connected to Yellow and Whie wires and replace it with 1x2 2.54mm male Pin Header. Just remember to insulate the exposed copper and solder with insulated tape! What to do with the Red and Black Wires? Since we are not using the Red and Black wire pair, tuck these 2 wires somewhere below the turret. We might still need them in another project. Who knows? =P For more detail: Smartphone controlled Arduino tank using Annikken Andee ### Hack an old iPod using an Android and an Arduino This tutorial shows you how to use an Arduino to turn that old dusty music player into a Bluetooth controlled docking station. Even if it has a cracked screen or a dead battery it can still be used. The following instructions will show you how use an Arduino and a couple of cheap parts to set up a MuseHack station NO SOLDERING REQUIRED!!! This project can be built for under $25 which includes buying an Arduino. Just leave the old Ipod plugged into the stereo and your music will start to play when you walk in the door. The Arduino acts as a liaison between the iPod and your Droid. Features Include: Auto Connect - If set, your phone will automatically connect to your MuseHack Station Auto Play - Walk in the door and your music will start playing Auto Pause - Leave your house and the music pauses for you In-Call Pause - Automatically pauses when a call is in session Alarm - Wake up to your own music blasting through the stereo Since the iPod device is connected directly to your stereo, it eliminates any error that can occur when streaming the music to a separate device. iPod, iPad, and iPhone are trademarks of Apple Inc., registered in the U.S. and other countries. Step 1: Cut To The Chase If you want to just get after it, you can download the code and wire it according to the above image. The wire colors correspond to the cable suggested by this tutorial. +5V Pin 23 Red (No Stripe) GND Pin 16 Black (No Stripe) Rx Pin 13 Brown (With Stripe) Tx Pin 12 Purple (No Stripe) ACC Pin 21 Red (With Stripe)   Here is the app: Full Version: http://play.google.com/store/apps/details?id=com.e... Lite Version: http://play.google.com/store/apps/details?id=com.e...   The Bluetooth pairing pin is 1234 For Arduino Uno - The digital pins 0 and 1 (Rx and Tx) must be clear when uploading the sketch. This is really all you need to complete this project. The rest of this tutorial just rambles on a bit. MuseHack.ino70 KB Step 2: What you will need To start, you will need a fully functional Android powered device and at least a semi functional iPod, iPad or iPhone that uses the 30 pin connector. Having music on it helps The ebay links provided are the cheapest of these items I could find and may be outdated but can point you in the right direction. For reliability I have also provided a few amazon links. 30 pin iPod/iPhone/iPad Device Android Device Arduino (Uno, Mega, or any Arduino compatible board) http://www.amazon.com/Development-Board-ATmega328P... http://www.ebay.com/itm/UNO-R3-Development-Board-M... 30 pin iPod dock extender cable (MUST BE ABLE TO PROVIDE AUDIO/VIDEO, NOT JUST DATA AND POWER) If you get the one used in this tutorial it will make your life a bit easier as the wire colors will match http://www.amazon.com/Connector-Extender-Extension... http://www.ebay.com/itm/30-PIN-Dock-Extender-Exten... HC-05/HC-06 Bluethooth Serial breakout board (AKA JY-MCU) http://www.amazon.com/Innogear-Wireless-Bluetooth-... http://www.ebay.com/itm/Wireless-Bluetooth-RF-Tran... 2k Ohm (2 Qty), 4.68k Ohm (2 Qty), 500k Ohm (1 Qty) Resistors Link is for a whole mess of resistors of which include the above http://www.ebay.com/itm/400-Pcs-1-4W-1-20-Kinds-Ea... MuseHack App for Android Full Version: http://play.google.com/store/apps/details?id=com.e... Lite Version: http://play.google.com/store/apps/details?id=com.e... Breadboard http://www.ebay.com/itm/Mini-Nickel-Plating-Breadb... http://www.ebay.com/itm/170-400-700-830Tie-Points-... http://www.amazon.com/BB400-Solderless-Plug--Bread... Jumper wires http://www.ebay.com/itm/Male-to-Male-Solderless-Fl... http://www.amazon.com/40pcs-2-54mm-Breadboard-Jump...     Tools Wire Strippers/Cutters This is really the only tool that is required. Not Required but may be helpful: Arduino/breadboard mounting plate or project box Radioshack actually has a decent selection of project boxes The box used in the tutorial is about 4 x 6 x 2 in. Electrical tape Binder clip Soldering iron Multimeter Step 3: Communication Both the iPod and the HC-05/06 Bluetooth module use serial communication to talk to the Arduino. The Atmel MCUs used on the Arduino come with a UART (Universal Asynchronous Receiver/Transmitter) built in. The UART is a peice of hardware that will take bytes of data and sequentially transmit them in single bits. The receiving UART will reassemble the bytes. For more on UART/USART http://en.wikipedia.org/wiki/Universal_asynchronou... If you are using an Arduino with only one serial port (ie. Uno, Leonardo), the SoftwareSerial library will be used. If you are using the Mega, multiple serial ports are supported and there is no need for the SoftwareSerial library. The Arduino code will adapt if using a board with multiple serial ports. This will be covered later in the code section. Step 4: The HC-05/HC-06 Bluetooth Module From here on out I will be referring to this Bluetooth device as the HC-05. You will not have to worry about the details of the HC-05 for building this project since the factory settings are used. Just plug and play. The main difference between the HC-05 and HC-06 is its ability to be set from the slave role to the master role. All HC-XX modules, where XX is an even number, come from the factory in the slave role and cannot be changed. On the other hand, all modules, where XX is an odd number, can be set to the master role using AT commands. The HC-06 and other even numbered modules also have a limited number of AT commands available for setting preferences compared to their odd numbered counterparts. For more information on Bluetooth technology, the Bluetooth website is very informative: http://www.bluetooth.com/Pages/Basics.aspx Step 5: The iPod Devices The iPod is a versatile little mp3 player and can be used with many different accessories. Those 30 pin connectors hold pins for Docking stations, firewires, USB and more. In this case we are using the Serial Rx and Tx pins.   That dock extender cable is used because it has connections for those pins as opposed to the normal usb connection which only has +USB data -USB data VCC and GND. The connector is a JAE DD1 30 pin connector. This project will use the following 5 pins: +5V - Pin 23 GND - Pin 16 Rx - Pin 13 Tx - Pin 12 Acc - Pin 21 The Acc pin is pulled low through a resistor, and depending on the resistance, the iPod will know what type of accessory it is attached to and how to communicate accordingly. For more detail: Hack an old iPod using an Android and an Arduino ### Bass Master 3000 Carnival Game using arduino The Bass Master 3000 is a game that I built for a work carnival along with a small and very talented team of co-workers. I've seen this type of game on the net, but I wanted to kick it up a notch with some Arduino powered sensors that would trigger lights and sound when someone wins. What fun is a carnival without lots of noise and lights? The trick was finding the right kind of sensors for the job. I accomplished this very successfully by using Piezoelectric Sensors to detect impact to a piece of felt. The sensors would not go off with basic back-and-forth motion such as wind or light movement. They required an actual "hit" to be triggered. Two sensors were all that we needed to get reliable coverage for an entire piece of weighted felt. Potentiometers were used to adjust sensitivity. It works like this: Using a kids fishing pole with a small rubber ball attached, a player must cast the ball into the fish mouth. If they hit anywhere other than the red mouth, nothing happens. When they do hit the red, lights and bells go off. As an added bonus, a webcam is mounted at the top of the frame. When someone wins, it captures a candid photo. A nearby display has an auto-updating slideshow displaying all winners for the day. My team consisted of someone to build the frame, someone to paint the tarp, someone to work on the web slideshow, someone to work on the sensors, lights, and bells (me), and someone to help with everything else! This was relatively easy to build and would be great for any work event or birthday party. It was a huge hit at our carnival! We always had a line of kids and adults waiting try their hand at being the best Bass Master! This Instructable will show you how to build you own. Oh, and I decided to enter this in the Epilog Challenge Contest because I could really use a laser cutter! The question isn't "What would I do if I won the laser cutter?", it is "What wouldn't I do if I won a laser cutter?". I would immediately put it to use making laser-cut kits for people to build along with my Instructables. If you think this is worthy, please vote for me in the Epilog and other contests I have it entered in. Step 1: Gather The Materials For this project you will need the following: One Arduino Yún (Radio Shack, Amazon) You can also use a regular Arduino, but the webcam / slideshow features will not be available. Two 1 M ohm Potentiometers (Radio Shack, Amazon) Any type will work. I bought a bulk pack from Amazon because they were dirt cheap and PCB mountable. Two 1 M ohm Resistors Two Piezo Elements (Radio Shack, Amazon) One 6x9' Blue Tarp Exact size is not important. Use whatever works for you. One large piece of red felt Size will depend on mouth opening for fish 1/2" Copper Pipe Length will depend on width of red felt Duct Tape 30awg or similar size small wire (for piezo sensors) Kids Fishing Rod Rubber Ball (like those from vending machines) Optional Items: PVC Frame (will need PVC cutter). The frame shown in these pictures cost ~ $40 to build. It was cut and assembled in about an hour. Red / Blue Flashing Lights Warehouse Bell with 5v DC Power Supply Webcam Step 2: Assemble The Circuit You can see from my picture that I created a DIY Arduino shield for this project. You certainly don't need to, but I knew I would be assembling and disassembling the electronics for this as we moved it around the building and outside. It was a simple circuit to assemble and having the shield make it a snap to connect and disconnect as needed. I'm not good with Fritzing, but the wiring for this is pretty straight forward. First connect a 1 M ohm resistor between positive and negative on the piezo element. I soldered the resistor directly to my piezo as shown in the picture, but you may choose to mount on PCB or breadboard. Connect the negative end of each piezo to ground Connect the positive end of Piezo 1 to A0 Connect the positive end of Piezo 2 to A3 Connect one side of each Potentiometer to ground Connect the other side of Potentiometer 1 to +5v Connect the other side of Potentiometer 2 to +5v Connect the center pole of Potentiometer 1 to A1 Connect the center pole of Potentiometer 2 to A2 Connect the positive side of DC control to Digital Pin 3 Connect the negative side of DC control to ground Assuming you won't be using a computer to run this, connect an external 5V power source to Vin and Ground Once done, attach your sensors to the felt using duct tape as shown in photo. This is where you should use the small wire (30awg or similar) so the weight of the wire does not affect the sensors. Step 3: The Arduino Code The source code for this project can be found here: https://github.com/siliconghost/BassMaster3000 There are three components to this: The Arduino webcam drivers The Arduino Sketch (Webcam.ino) The Angular JS Slide Show (in folder Yun_AngularSlideshow) Part 1 - Arduino Webcam Drivers In order to take pictures with a webcam, you must first prep your Arduino as described in this article. Go through the exercise of installing the fswebcam driver and test to see if you can capture an image. Once you have done this, move on to the next step. Part 2 - Arduino Sketch The Arduino Sketch is where the bulk of the action takes place. The code on GitHub is commented pretty well and should be self explanatory. In essence, here is what happens: Upon starting up and entering loop(), the values from each potentiometer are read. The piezo sensor values are then also read. If the piezo sensor values are greater than or equal to the potentiometer values a positive "hit" is assumed. This causes the built in LED (pin 13) to light If picture taking is enabled, a filename will be generated based on timestamp, a picture is taken and written to the micro SD card, and then copied to /www/pictures/ The picture filename is then appended to a file called "picturesList.txt" under /www/slideshow/ Sensor values are reset to 0 after this process If the piezo sensor values are less than the potentiometer values, nothing happens, so we set the built in LED (pin 13) to low (off), and the acPin to Low so it will turn off whatever devices are on. Debugging on the Yun can be a challenge so I added a "debugEnabled" option which can be set to true for easy troubleshooting. This will write to a text file just as it would to a serial monitor. The name a location of the text file can be adjusted in the sketch. Just don't forget to turn it off because this file will grow pretty large fast. Part 3 - Slideshow The Angular JS Slide Show consists of just three files that very simply rotate through all images found in "picturesList.txt". It will automatically reload the file as new pictures are added. Once you have this up and running, all you have to do is point your browser to http://arduno.local/slideshow/index.html to begin the show. Step 4: Lights & Sound The lights and sound for this game are controlled by a single digital pin on the Arduino. When this pin is raised "HIGH", it outputs 5v. That in turn drives a solid state relay (in the silver junction box) to turn on whatever I have plugged into it. In this case, I have the bell and red/blue lights plugged in. one of these is very simple and out of scope for this Instructable. Just google "Solid State Relay" to find one that can be driven off 5V and can handle the load you are trying to drive and you will be fine. Be careful working with AC. Step 5: Build The Bass To paint your bass, find a decent picture on the net that you would like to use (If you search for "Bass Master Carnival" you should find several). From here you can either take your best shot at recreating the image by hand, or do something a little easier like hanging the tarp on a wall and using a projector to display the image for easy tracing. After it is all traced out, apply the paint. We used basic acrylic paint with pretty good luck, but be sure to cover it with some type of clear enamel coating when done. If you don't, you will find that the paint easily flakes off the tarp when hit (we learned this the hard way). The mouth should be roughly 17" in diameter. You don't want to go smaller than this. The game is actually pretty hard even at this size! When done and dry, cut the mouth out. I found that starting to cut with a razor blade, followed by scissors for the majority of the cut works best. Now cut a piece of felt, rectangle in shape with at least 3" of overlap on the left and right sides. The top and bottom should have about 8" of overlap so it can be folded and height adjusted as needed (as you can see from my photo) Measure and cut your 1/2" copper pipe to the width of your felt. Either sew, pin, or duct tape the pipe in place. The weight of the pipe helps make the sensors more reliable across the entire surface of the felt. If using outdoors, you may want to add several "U" shaped cuts to accommodate wind as seen in my picture.   For more detail: Bass Master 3000 Carnival Game using arduino ### Build your own 4x4x4 RGB LED Cube using arduino LED Cubes are awesome. The first one I created was a 8x8x8 blue led cube. It still works like a charm. But being able to display every colour in the spectrum is much more spectacular. Let's start with a small and simple 4x4x4 RGB LED Cube. Step 1: Watch part 1 of the video series! As you might have noticed, part 1 concentrates on the cube itself and the case. No electronics yet. The video should already give you plenty of details. But I will give you a short list of parts that you will need to build the cube itself. Step 2: Order the parts for the cube! Ebay: RGB LEDs Common Anode: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Silvered Copper Wire (Bridge Wire):http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Solder: http://rover.ebay.com/rover/1/711-53200-19255-0/1?...   Ribbon Cable: http://rover.ebay.com/rover/1/711-53200-19255-0/1?...   Amazon.de: RGB LEDs Common Anode: http://amzn.to/1cjetjZ http://amzn.to/1lHSJ48 Silvered Copper Wire (Bridge Wire): http://amzn.to/1cjeHaH Solder: http://amzn.to/1lHSJ48 Ribbon Cable: http://amzn.to/1m8P3JA   Amazon.com: RGB LEDs Common Anode: http://amzn.to/1vwIcu9 http://amzn.to/1nU75Sf Silvered Copper Wire (Bridge Wire): http://amzn.to/ZcMqwN Solder: http://amzn.to/1nU7dkE Ribbon Cable: http://amzn.to/1nU7fsD   Step 3: You finished the cube and case! Congrats on your finished cube and case. It should now look a little bit like mine in the picture. Go ahead and test all connections with a power supply. If everything works fine you can go ahead and build the electronics in the next steps. Step 4: Watch part 2 of the video series! The video gives you plenty of info on how to build the controller for the cube. In the next step I will give you the schematic for the circuit and the part list. Step 5: Order the parts for the controller and solder it! Ebay: DC Jack:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Switch: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Potentiometer (10k):http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Arduino Nano: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... TLC5940: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Resistor Kit:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Power Supply (5V, 2A): http://rover.ebay.com/rover/1/711-53200-19255-0/1?... IRF9540N P-Channel MOSFET:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Capacitor Kit:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Prototyping PCB: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Amazon.de: DC Jack: http://amzn.to/1Ed1hrt Switch: http://amzn.to/1vi1UsA Potentiometer (10k): http://amzn.to/1nRws1J Arduino Nano: http://amzn.to/1d4H1w1 TLC5940: http://amzn.to/1rVmQZC Resistor Kit: http://amzn.to/1gt9XPf Power Supply (5V, 2A): http://amzn.to/1rUJuQN Capacitor Kit: http://amzn.to/1yE71u3 Prototyping PCB: http://amzn.to/1rVpcI9 Amazon.com: DC Jack: http://amzn.to/1vBQHEL Switch: http://amzn.to/1nU8jwB Potentiometer (10k): http://amzn.to/1Ed2MGb   Arduino Nano: http://amzn.to/1nU8pEE TLC5940: http://amzn.to/1vwNnKw Resistor Kit: http://amzn.to/1CJXHUf Power Supply (5V, 2A): http://amzn.to/1x9Je0G Capacitor Kit: http://amzn.to/Z0KcQP Prototyping PCB: http://amzn.to/1rUMJb0   For more detail: Build your own 4x4x4 RGB LED Cube using arduino ### DIY FPV RC Tank V2 [2km RANGE upgrade!] using Arduino Lets build An FPV tank that could be controlled within 2 kilometers! With the help of my best friend ASCAS I was able to borrow his old parts for this updated version. Ok So Roverbot version 2 is a highly educational Arduino based ATV-drone. It's simple to make, easy to program and is a great starter project for hobbyists! The bot is very fast and agile, not to mention of it carrying two powerful motors! It can surely outrun humans regardless of the terrain you're on! This RoverBot is still a soft prototype even after months of thinking, well maybe its because of funds or other projects we have but anyways. With this progress we hope to 3D design and print a Water resistant cover and upgrade to metal gears . What is FPV? Fpv stands for First Person View. Usually we get to see FPV while playing video games specifically for racing games. Fpv is used in military purposes to spy, guard or monitor an area, Even us hobbyist use them for our quadcopters to take aerial photos or just to have fun. Awesome as it sounds it is quite expensive building a quadcopter so we decided to make something smaller and cheaper that runs on land. How Do You Control It? RoverBot is based on the famous Arduino development board. Since Arduino supports a wide variety of shields and modules (RC/ WiFi/ Bluetooth), you can choose any type of communication. For this set up we will be using special parts that will give it the capability of long range control, we will be using 2.4Ghz Transmitter, receiver modules to take control over the bot. In the previous version we used Bluetooth which was not really a good combination with FPV since Bluetooth is only good for about 20 meters, but now with my parts and ASCAS' parts we are able to achieve more range. You can watch the video on the last step Step 1: Tools & Materials I got mos of my parts from local hobby shops, that includes all the Tamiya products and my Arduino Uno clone, the rest were bought online and were given to me by ASCAS. Please canvas for cheaper prices. Compared to where I buy Tamiya products, Pololu retails Tamiya kits that costs 2x more. If you live in the Philippines then you are lucky enough to have "Lil's Hobby Shop" (located @ SM Megamall & Glorietta 2). Parts & Matterials: - Arduino UNO R3 Clone - Pololu Dual VNH5019 Motor Shield (2x30A) -Male Pin headers -4x Standoff - Extra M3 screw and nut - 2.4 Ghz Transmitter Module (Planes/Cars)....... READ step 13 for more info about thid -2.4 Ghz Receiver module at least 2ch - 2x Tamiya Plasma Dash Motors/ Hyper dash 3 - Tamiya Twin Motor Gearbox Set (stock motors included) - 2x Tamiya Universal Plate Set - Tamiya Track & Wheel Set - 3 cell 1500mAh LiPo Battery - FPV CAMERA with pan and tilt -5.8Ghz 200mW FPV Transmitter and receiver 50$! - Super Glue Bottle - Sugru Sachet/ Hot Glue Tools: - Leatherman - Screwdriver Set - Dremel Rotary Tool Step 2: Assemble The Twin Gearbox Time to unbox the gearbox! Simply follow the instruction inside and you will be fine HUGE REMINDER: USE THE "58:1" GEAR RATIO! Tips & Reminders: - Grease the gears after assembling the gearbox. (not before) - Don't forget the metal spacers, or the gearbox will screech. - Go for the 58:1 gear ratio, it's faster than the 204:1 gear ratio. Step 3: Upgrade motors? Why not! The gearbox includes stock motors which are pretty slow if you ask me. So I decided to use my old Hyper dash motors for this project instead of using my friends Plasma dash which consumes more energy. So far Plasma Dash Motors are still the fastest in Tamiya's 4WD mini motor series. The motors may be pricey but, you'll get the most out of your money. It's a carbon brushed motor that spins 29,000 rpm (@3v) and 36,000rpm (@7v). The motors are designed to operate with a 3v power source, increasing the voltage would result to a higher rpm rate but would wear out the c.brushes a lot quicker. It would be ideal to stick with a 3v-6v output. With the Pololu 2x30 Motor Driver and a 2 cell LiPo battery, the Arduino's program must be set to a max speed of 320/400, you'll soon find out what this means in the coding step/ page. Step 4: Motor drivers! I've been into robotics for a long time now and so far the best motor driver you could get is from pololu "Pololu Dual VNH5019" When it comes to power and efficiency this is the best but when it comes to price this is not really your friend. Another choice is making an L298 motor driver. 1 L298 is for 1 motor that is the best idea for using high curent motors. I will show you guys how made my own version of this Step 5: Assemble The Track Set Get wild! maximize your space do as you wish for track configuration Step 6: Screw in the Standoffs and attach the FPV be creative position your stand offs and FPV parts in place and apply small amount of hot glue to set everything in place. Attach the top deck and drill some necessary holes for the FPV Antenna and standoff holes, after that screw in some M3 screws. Step 7: Put the top deck My purpose for adding the top deck is so that we can have more space since the FPV parts consumed a lot of space at the bottom. leaving no space for the arduino uno clone and motor driver. Step 8: Mount The Arduino & Motor Driver Simply screw or glue the Arduino in place on the top deck then stack the motor driver above it. Step 9: Get your 2.4Ghz Receiver It time to connect the Rx module to the arduino Using channel 1 and 2 Connect 1 to A0 and 2 to A1 Supply the receiver With 5V and the ground from the arduino pins. Step 10: Connect your motors and battery Solder some wires on the motor then connect it to the motor driver according to channel For the battery you will need to DIY your own connector by using a male JST plug and male deans plug look at the picture to better understand how I made mine Step 11: Battery! Get your battery and plan out where to put it when its done. When you have an idea where to place it Make a male adapter for the batteries plug . With the 3S 12V Li-po you will supply the FPV cam and the motor driver and arduino so you will need to make a connector for the motor driver supply line and for the FPV supply line.   For more detail: DIY FPV RC Tank V2 [2km RANGE upgrade!] using Arduino ### DIY GPS Tracked Bike Lock using Arduino Having just purchased a half decent bicycle, and living in a city with a bike theft rate almost as high as New York, I wanted to have some peace of mind that if a thief with an angle grinder were to cut through my U-lock I could still catch them. My main design constraints were as follows: The device has to be Arduino based so that if I run into trouble I can easily search the forums for help Whatever I make has to be able to fit into a small bag that goes under my seat The battery must last for a very long time, at least a few weeks. I don't want to have to plan my bike rides around my lock being charged or not. This project is pretty cheap, especially if you compare it to the cost of replacing your stolen bike! I've outlined the cost of all the components used in my design below. I was able to use some old parts I had lying around and hopefully you will too. If I had bought everything needed brand new this would have cost about $225. Components Arduino Uno ($24.95) https://www.sparkfun.com/products/11021 Arduino GSM Sheild ($99.95) http://www.amazon.com/Arduino-GSM-Shield-Integrate... Adafruit Ultimate GPS Breakout ($39.95) http://www.adafruit.com/product/746 Arduino Prototyping Shield http://www.adafruit.com/products/51 >1.5A PNP Transistor, I used the TIP127 just because it's what our local electronics store had. I'll go over precautions for using different transistors later. ($1.00) http://ca.mouser.com/ProductDetail/STMicroelectron... 2.7K Resistor ($1.00/pack) 7.4V 2S Li-Po Battery Pack ($10) http://www.hobbyking.com/hobbyking/store/__37346__... Retractable Cable Lock ($12.42) http://www.amazon.com/Master-Lock-4605D-3-Foot-Ret... GSM SIM Card ($10 + 30cents/sms) This is the rate on Rogers in Canada. Just make sure you are on a GSM carrier. Under Seat Bag ($14) for vancouverites MEC has a great one that fits everything snugly. I suggest you try fitting everything in the bag before you take the tags off. http://www.mec.ca/product/5024-801/mec-shell-seat-... Wire Solder 5 Minute Fast Set Epoxy ($5) Zap Straps ($2) Tools 2S Li-Po Battery Charger Soldering Iron Wire Strippers Philips Head Screwdriver Flat head screwdriver (or some other good prying tool) Digital Multimeter Step 1: PNP Transistor Circuit The transistor is a device that is used for switching. A very small input can enable a very large current output. In the case of the TIP127, it can handle 5 amps and has a gain of 1000. Roughly this means that if you were to need to drive 5 amps your effective input would need to be 5/1000 amps. http://www.electronics-tutorials.ws/transistor/tra... The PNP transistor is "off" when you connect the base to the positive side of your circuit and on when it is connected to ground. The way it is used in the bike lock is pretty clever I think, the steel cable of the lock will connect the positive side of the circuit to the base of the transistor. When the lock is cut, the connection is broken and the path of least resistance will be to ground. When the base is grounded like this power is supplied to the Arduino This is the clever part of this design. It means that we will only be using full power power during the small amount of time it takes to lockup your bike. The rest of the time it will only be using the small amount of power used to supply the transistor. Test out your transistor circuit on a breadboard before soldering to your Arduino prototyping shield. While testing your circuit use a switch in place of the retractable lock in the next step. With the TIP127 hook the circuit as per the schematic above. If you want to use a different transistor than the TIP127 the only thing that will change is the value for R1. Step 2: Modifying the Retractable Lock We need the retractable lock to serve as an electrical connection from the positive side of the battery to the base of the transistor. This way when the lock is cut, the electrical connection is cut as well and the Arduino will boot up. Assuming that you have the lock that I recommended in the intro, the first thing is to remove the screw that connects the two halves of the plastic case. The use a wedge to pry open the edges and separate the two halves. At this point it is a good idea to take a picture of the inside of the lock so that if any pieces fall out you can put them back later. I forgot to do this which resulted in a lot of wasted time studying the mechanism. Time to get out the soldering iron. Make one connection for a wire on the brass ending of the steel cable. It is located on the spool the the cable wraps on when inside the lock. Make the second connection on the spring that holds the pin that the cable makes contact with when you insert it into the lock. Use your DMM to check for conductivity when the cable is inserted into it's hole and that there is no conductivity when it's lose. A lose cable is the same effect as cutting the lock. Make one hole in the plastic case near your spring connection. The other hole should be made halfway between the centre of the spool at the bottom and the outer edge of the spool. I found that making a connection in the centre of the spool would twist the wire so much that it would break. Congratulations if you've made it this far the hardest part it over! Lastly just run your two wires through the holes you've made and close up the case. If you're finding that the screw is not enough to hold the two halves together anymore a generous coating of epoxy resin is recommended. Also, depending on what type of bag you will use for the electronics it may be useful to put the screw through a zap strap so that you have a way of securing it to the bag. Put some epoxy on the zap strap as well. Just don't be too generous or you may gum up some of the important mechanisms of the lock. During this step I managed to glue the retracting mechanism of my lock so be very careful. Clamp your lock together and leave it for at least an hour. Step 3: Add GPS The ultimate GPS breakout from adafruit works well in this application. Hooking it up couldn't be easier. Find a good place for it on your pro to shield and then just connect the Vin to 5V, GND to GND, Rx to digital 9, and Tx to digital 8. This is all you need to get the GPS working however adafruit has nicely broken out Vbat so you can supply 3.3V to the GPS's internal clock when the power is off. This will give you quicker startup times. I used one of my LiPo cells to supply this with 3.7V. This can in theory discharge both LiPo's unevenly and be dangerous, however considering the power used it very small I think the uneven discharge rate will not be a problem. And so far so good, if i have a spectacular problem with respect to this I will be sure to post it here.   For more detail: DIY GPS Tracked Bike Lock using Arduino ### Laser Cut Sphere-O-Bot using Arduino The Sphere-O-Bot is a simple 2 axis CNC machine that can draw on most spherical surfaces. You can use it to decorate ping pong balls or eggs.This design is based on the 3D printable Sphere-O-Bot. By building your Sphere-O-Bot using a laser cutter, you can achieve a clean look while also reducing the production time of your parts. This design also features an electronics bay for your wires, micro-controller, and motor drivers. The Sphere-O-Bot described in this tutorial was designed for a workshop in which kids get to build their own motor controllers. For more projects by the Maker Corps interns at the Children's Museum of Houston, visit our site: kidmakers.org If you like this project, please consider voting for me in the epilog challenge. My internship at the Children's Museum of Houston will end in a couple of weeks and so will my unlimited laser cutter access. Having a laser cutter of my own will allow me to keep developing more instructables for you. Thanks. Step 1: Materials You will need: 1/4'' plywood Access to a laser cutter and 3D printer 9 6-32 screws/nuts 8 M3 screws Micro sized servo motor 2 NEMA 17 stepper motors Arduino Uno or comparable board Polulu A4988 stepper motor drivers Marker (Sharpies work well) 8mm threaded rod Wire Soldering iron Small spherical objects (ping pong balls, eggs, etc...) A metal spring Optional: AC switch Limit Switch Step 2: Laser Cut & 3D Print Download the design file here and cut it out of the 1/4'' wood using a laser cutter.You could probably also cut these out of plexiglass except for the curved part, since it would not be flexible enough. The 3D printable files can also be found under the same Thingiverse post. The printable files are actually borrowed from this 3D printable Sphere-O-Bot design. Disclaimer: It's ok if the renders/pictures in this Instructable don't exactly match the design file on thingiverse. That just means that I've been doing some design changes to help things fit better. Step 3: Assemble the Frame Using the 6-32 screws/nuts, join the curved part to the bottom piece. I found that if you insert the screws into the large piece and loosely attach the nuts, you can then bend it around the bottom piece and secure it with ease. Keep in mind that since the wood was originally flat so it will try to fight back against bending. Now all you need to do to finish the frame is to secure the top and front panels of the electronics bay. BUT WAIT!!! You haven't installed the electronics yet. Your life will be easier if you don't attach the last two pieces of the frame until after taking care of the electronics. Step 4: Marker Gantry UPDATE: After realizing that the original design suffered from severe jitter, I re-designed the marker gantry to make it more sturdy. Check out this short animation to see how it works and how it is assembled. The micro sized servo is attached using M2 screws and the rest of the screws are M3. The hinge that I used can be found here, but feel free to replace it with any other hinge of a similar size. If you can't find a hinge, you could probably just glue a flexible piece of plastic between the two main wooden pieces of the marker holder. The file for the new holder design is titled holderV2 in the Thingiverse post.   For more detail: Laser Cut Sphere-O-Bot using Arduino ### Arduino Powered Autonomous Vehicle A few months back I started playing around with Arduino micro controllers as a learning exercise (and for fun); this project is the culmination of that. The goal of the project was to create a vehicle that can autonomously navigate through a series of waypoints (GPS coordinates) while avoiding any obstacles it encounters along the way. The project uses an assortment of electronic sensors and components, and pulled together the knowledge I had learned and synthesized from many sources along the way. In the attached video you can see a short clip of the car on its way, in this run it navigated through five GPS waypoints on a course on my neighborhood streets totaling about 300 meters. Step 1: Component List & Project Cost The main components were the following: A basic radio controlled (RC) vehicle. Can be a basic one like I used which are available in the $15 range. If you want to spend a bit more, get one with proportional steering and four wheel drive. The one I used was similar to this one from Amazon.com (though it came from Wal-Mart and at a lower price at the time). An Arduino Uno micro controller. Amazon.com $24 A motor shield to control the two electric motors and allow for a separate motor power supply. Adafruit Motor Shield v2 $19.95. A GPS for navigation. Adafruit Ultimate GPS Shield $49.95 (or breakout for $39.95) A magnetometer for compass navigation. Adafruit HMC5883 Magnetometer $9.95 An HC-SR04 ultrasonic distance sensor for object avoidance. Amazon.com $6.00 An LCD display to display vehicle status and information. Yourduino.com $5.75 (I later upgraded to a 4-line LCD for about $12) An infrared sensor & remote. Optional, added some convenience but not required for the project. I already had these components from a previous kit from Yourduino.com And of course an Arduino sketch (a C++ program) to control everything (code attached in this Instructable) Additionally, the project used the following smaller components and accessories: A thin wood board as a mounting platform; acrylic or other would have worked (and probably looked better!), but this is what I was able to find at local hobby shops Breadboard(s) for making connections. I used a long narrow breadboard for the main connections, and a very small breadboard (that originally came with a proto-shield) so that I could mount the magnetometer as far from the other electronics as possible Jumper wires Surgu for mounting the ultrasonic sensor. Amazon.com $12 The following tools were used: Soldering iron & solder Drill The rough project cost is around $120 - 150 depending on what components you may already have. A note on project cost: other than the mounting board, almost all of the other components are re-usable; either things you already have that you can use for this project, or things that we can eventually disassemble from this project and re-use elsewhere. Step 2: Vehicle Chassis and Mounting Platform I had seen posts on the internet about hacking inexpensive radio controlled (RC) cars and directly connecting an Arduino to the existing circuit board. I happened to have such a car around that my 3 year old no longer played with; it was a $15 Wal-Mart RC car. Unfortunately, my early soldering skills left a lot to be desired and I burned through a couple the delicate surface mount components, so I ended up with a partially functioning vehicle. Plan B: I ripped out the car's entire control board and purchased an Adafruit Motor Shield (v2). Problem solved. Now I had full control over the vehicle's motors...though they were pretty basic. The car was controlled by two DC motors: one controlled the drive, and using the pulse wave modulation (PWM) of the motor controller I was able to control the speed across a range of speeds; the other controlled the steering. This inexpensive RC car did not have proportional steering; the left and right wheels are joined, and there is a spring in the middle that holds the wheels in neutral (center) position when the DC motor is not engaged. When the motor is engaged, it goes to a full/hard turn left or right. That allowed me to turn the vehicle, but provides limitations later when I want more sophisticated navigation. For a future enhancement I will try to replace the DC motor with a servo for full proportional steering control. I used a thin board as a mounting surface on which I attached the breadboards, Arduino, LCD, etc. I placed the battery supplies beneath the board and passed the cables through holes I drilled. In the first photo above, you see (1) the LCD, (2) the main breadboard, (3) the small breadboard for the magnetometer, (4) the Arduino (you are seeing the GPS Shield as you look down), and (5) the magnetometer sitting up high on its pole mounted perch. Step 3: Program Logic The Arduino is controlled through a C++ program ("sketch"). The main action happens in the Arduino sketch loop() function which runs repeatedly. The basic program control logic is: Check to see if the kill switch was pressed (if enable in the configuration). Process any new GPS information and update the course and distance to the target. Move on to the next waypoint if we have reached the current destination. Read compass to get current bearing and decide the desired direction to turn the car Move the vehicle and check for any obstacles we need to avoid. Update LCD display The code to handle each of these is in separate functions. Fully documented source code is attached. RC_Car_Test_2014_07_20_001.ino22 KB waypointClass.h436 bytes Step 4: LCD Display The LCD provides invaluable insight what the vehicle is doing, critical for debugging and tuning the code. It also looks cool! While running, the main screen shows the following information: Row 1: 1. tH = Target Heading, the course to the current waypoint; 2. cH = Current Heading, the direction the vehicle is actually facing Row 2: 3. Err = Error (in degrees) between the target heading and compass heading; this is a signed value indicating which direction (left or right) the vehicle needs to turn to intercept the target heading; 4. Dist = Distance (meters) to the current waypoint; you will notice the small inline bar graph showing the remaining distance to this waypoint. Row 3: 5. Snr = Sonar distance, i.e. the distance to any objects in front of the vehicle. Also has an line bar graph from 0 to the maximum detectable distance; 6. Spd = Speed of vehicle (0-255) Row 4: 7. Mem = Memory (in bytes) of free memory; the Arduino Uno only has 2k so I had to watch this closely; 8. WPT n OF x; shows where the vehicle is in the list of waypoints. Step 5: Object Avoidance To drive autonomously, the vehicle needs to be able to check for and avoid obstacles it encounters as it drives. I handle this with a "ping" ultrasonic sensor and some computer logic. The sensor is a basic ultrasonic sensor. I combined that with the Arduino NewPing library, which is a big improvement over the original Ping library (among other things, it only requires a single shared pin for both send & receive). The sensor is pretty basic, and has a very narrow field of view. For this project, I am only using a single sensor with a fixed position (not a sweeping "radar" type implementation). I mounted the sensor to the front bumper of the vehicle with some Surgu. This was my first time using the product, and it works very well. I only used a single 3.5g packet, and that was sufficient for this purpose. The sensor has a tendency to return the occasional odd or random value...not sure why. In his excellent series of articles, Miguel Grinberg offers a simple solution: use a moving average. I adopted his MovingAverage class to the project with good results. The checkSonar() routine continually takes new measurements, adding each new measurement to the moving average; the average is then used for program logic. If an object is detected, the following logic is applied: Slow down If the vehicle is going straight (not turning), turn in the direction closest to our waypoint (technically, closest to the course to our waypoint). If the vehicle is already turning, then turn in the opposite direction to try to avoid the object. If we get within a definable distance (TOO_CLOSE) of the object, stop, backup, and try again. Once we have a clear path ahead, normal navigation resumes.   For more detail: Arduino Powered Autonomous Vehicle ### Simple Basement Security System using Arduino In this project I will show you how to build a very simple security system for all kinds of rooms. It might be simple but still effective. It is based around an Attiny85 and uses a reed switch and a key switch as inputs to see whether an intruder has accessed the room. A buzzer will then notify you or other persons. Let's build it Step 1: Watch the video! The video gives you all information to build this simple security system. But I will cover the most important steps again. Step 2: Order your parts! As always, you can't build stuff without the correct parts. Here is my material list with example sellers for your convenience: Ebay: 1x Arduino Uno (as programmer for Attiny85):http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Attiny85:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Reed Switch:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Key Switch:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x IC Socket: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x 12V Buzzer:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x BC547 NPN Transistor: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 4x 10kΩ, 1x 1kΩ, 1x 640Ω Resistor (1/4W):http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 2x 10µF Capacitor: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 2x 0,1µF(100nF) Capacitor:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Push Button:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x LM7805 (5V linear regulator):http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x DC Jack:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x PCB (striped) :http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Male Headers:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Female Headers:http://rover.ebay.com/rover/1/711-53200-19255-0/1?... 1x Red LED 5mm: http://rover.ebay.com/rover/1/711-53200-19255-0/1?... Amazon.de: 1x Arduino Uno (as programmer for Attiny85): http://amzn.to/1tZNXjZ 1x Attiny85: http://amzn.to/1qKReWK 1x Reed Switch: http://amzn.to/1oO2b5Q 1x Key Switch: http://amzn.to/1oO2jCh 1x IC Socket: http://amzn.to/1tZPcQ0 1x 12V Buzzer: http://amzn.to/1qKSkSx 1x BC547 NPN Transistor: http://amzn.to/1tZPWVq 4x 10kΩ, 1x 1kΩ, 1x 640Ω Resistor (1/4W): http://amzn.to/1A2KZzi 2x 10µF Capacitor: http://amzn.to/1tZRcrz 2x 0,1µF(100nF) Capacitor: http://amzn.to/PD2jZj 1x Push Button: http://amzn.to/1qKUxgG 1x LM7805 (5V linear regulator): http://amzn.to/1qKUGAC 1x DC Jack: http://amzn.to/1oO2b5Q 1x PCB (striped) : http://amzn.to/1qKV2Hy 1x Male Headers: http://amzn.to/1qKVg1p 1x Female Headers: http://amzn.to/1tZTmHV 1x Red LED 5mm: http://amzn.to/1qKVuWm Amazon.com: 1x Arduino Uno (as programmer for Attiny85): http://amzn.to/1BGO7iD 1x Attiny85: http://amzn.to/ZixmOf 1x Reed Switch: http://amzn.to/1BGOBVM 1x Key Switch: http://amzn.to/1EgGOCf 1x IC Socket: http://amzn.to/1EgGTG0 1x 12V Buzzer: http://amzn.to/1oIFpu8 1x BC547 NPN Transistor: http://amzn.to/1EgHLdT 4x 10kΩ, 1x 1kΩ, 1x 640Ω Resistor (1/4W):http://amzn.to/1upkTo4 2x 10µF Capacitor: http://amzn.to/ZizN3p 2x 0,1µF(100nF) Capacitor:http://amzn.to/1yFH4KK 1x Push Button: http://amzn.to/1EgI7kI 1x LM7805 (5V linear regulator):http://amzn.to/1n69hVK 1x DC Jack: http://amzn.to/1rYWQNd 1x PCB (striped) : http://amzn.to/1vElUHb 1x Male Headers: http://amzn.to/ZiC1Qm 1x Female Headers: http://amzn.to/Z4IZId 1x Red LED 5mm: http://amzn.to/1yFI9lN Step 3: Build the circuit and connect the external parts! Here you can find the schematic for the circuit. I also uploaded my layout for the stripped PCB. If you build it exactly according to my layout then the chances are higher that everything will work in the end. And don't forget to make interruptions in the copper traces! Those are the yellow dots in the second layout. If you managed to finish the circuit then go ahead and connect the external parts like the reed switch or the key switch to the main PCB. Use my picture of the PCB as a reference.   For more detail: Simple Basement Security System using Arduino ### NFC Ring Lock Box using Arduino Hi everybody! Welcome to my first instructable! I apologize in advance for my poor level in English. In this step-by-step guide I am going to teach you how to build a simple and very cheap NFC Ring Lock Box ! Step 1: What you'll need Ok first, the idea was to create a box locked from the inside. Many different designs were described and easy to make with Instructables but I decided to create mine. It had to be the cheapest possible and be able to fit in the top of the box. Also to not take too much storage space. Cheap Box. I used an unfinished wooden box because you can paint and decorate it however you want. There are many wooden boxes here. But it was too expensive for me so I went here. Inside system lock. Mine. Switch. Rocker Battery and its MicroUSB/USB cable. Mine. It has to be a 5V battery that can be charged and deliver power simultaneously. Arduino Nano and its MiniUSB/USB cable. Very cheap. Servo SG90. Very cheap. PN532 Elechouse NFC. Best One NFC RING to unlock the box. Official Micro USB Female to USB Female Adapter. Like this one. And for sure you'll also need some Basics Tools: 3 Hands, Screwdriver, Driller, Soldering kit ... Step 2: Connect the NFC reader/writter and the Servo SG90 motor to the Arduino Nano If you received the same SERVO as me, the 3 pins are stuck together. You must detach them from themselves before continuing. Connect the red wire to the 5V of the Arduino Nano. Connect the black to the ground GND. Connect the white wire to the Digital 3. For the PN532 you can read this but I will tell you everything you need to know to make it work ;) First you need to put your PN532 into the I2C mode. Solder the 4 pin connector. VCC connect to 3.3V, ground to ground, and Analog 5/SCL and Analog 4/SDA. Just look at the picture. Step 3: Software First you need to download the software to use the Arduino Nano. And then the libraries files to put in your Library folder in your Arduino folder. You can find help here and here. And finaly download my sketch called "Nairod785" for this project. The only thing you need to change is this line: if (ringUid=="47d6b2b62880" || ringUid=="47c9b2b62880"){ change it with the Uid of your NFC tags, NFC Ring... You can get the Uid of your NFC Ring by running on the Arduino the example sketch in the PN532 folder called ISO14443A_uid. Note: Each tag, so each side of the ring has a different uid, that's why you must scan both of them and then enter the 2 UID. Upload the sketch to the Arduino Nano and test it. Nairod785.ino1 KB libraries.rar29 KB   Step 4: Prepare the Box I did some wood burning as you can see. I used my pen to draw the different shapes and my soldering kit to burn the wood a little. Drilled 2 holes for the "external interface" : power ON/OFF and micro USB female to charge the battery and to have access to the arduino in case we need to change the sketch or debug the box. Paint it and it is almost finished! Fix the internal lock system.   For more detail: NFC Ring Lock Box using Arduino ### Hacking my RC Car using Arduino and Android Smart Phone Have an old toy car? I hacked mine using Arduino and an H bridge circuit to control the motors, used my Sony Z1 Android phone to control it with the recent 1Sheeld I got from Kickstarter. I thought to use the Gyroscope sensor in to drive it but after experimenting, I used the gravity sensor instead, will explain in details why later in step 5. Step 1: Required stuff Required components: 1- Android smartphone / tablet ( x1) 2- Arduino uno ( x1) $26 3- 1Sheeld ( x1) $60 4-Cheap RC car ( x1) (you can get it from a toy store) 5- Connectors male female (x4) $5.45 per 40 set 6- H bridge ( x1) $9.51 7-- Mediabridge USB cable (x1) $7.99 8- Male Dc Plug (x1) $2 Required tools: 1- Screwdriver 2- Wire cutter Step 2: Prepare RC car Here, you can find the steps for dis-assembly of the RC car: 1- Remove the bottom base screw of the RC car. 2- Remove the upper part. 3- Cut the wires from the original car PCB. 4- Remove the motor casing. 5- Cut the motor wires (as they are too short in my case). 6- Solder new ones (cut the jumper from the female side to prepare the wire for soldering). Step 3: Connect H bridge 1- Connect the H bridge board with the motors. Connect the motors terminal in H bridge where every motor take two exit Front motor Ch 1 to yellow cable. Ch 2 to orange cable. Rear motor Ch 3 to Purple cable. Ch 4 to blue cable. 2- Connect the battery Connect the positive pole of the car battery to the H bridge where indicated on board "red cable". Connect the negative pole of the car battery to H bridge where indicated on board "black cable". 3- Connect the male power plugs Red with red and black with black. Step 4: Arduino,1Sheeld and H bridge 1-Connect 1Sheeld on top of your Arduino board. 2-Connect the H bridge with 1Sheeld Connect IN 1 in h bridge "yellow cable in picture " to pin 6 in 1Sheeld. Connect IN 2 in h bridge "orange cable in picture" to pin 11 in 1Sheeld. Connect IN 3 in h bridge "Purple cable in picture "to pin 9 in 1Sheeld. Connect IN 4 in h bridge "blue cable in picture" to pin 10 in 1Sheeld.   For more detail: Hacking my RC Car using Arduino and Android Smart Phone ### 4x4x4 LED Cube (Arduino Uno) In this tutorial I'll show you how to make a 4x4x4 LED cube for around $15.00. The cube has 64 green LEDs which make up it's 4 layers(positives) and 16 columns(negatives). These are all wired to a Arduino Uno. An Arduino is a single-board microcontroller, intended to make the application of interactive objects or environments more accessible. The hardware consists of an open-source hardware board designed around an 8-bit Atmel AVR microcontroller, or a 32-bit Atmel ARM. I programed code(sketches) for the Arduino Uno to controll the individual LEDs to display patterns for this captivating desktop light show. Step 1: What You Will Need: Parts/ Materials: 64 Diffused LEDs $2.00 4 100 OHM Resistors $1.00 Pin Header $0.50 Slide Switch $1.00 Wire $0.75 Craft Wire $0.25 Perf Board $2.00 Project Box $6.00 9V Power Supply $1.00 Total Cost: $14.50 Tools/ Adhesives: Arduino Uno Drill 1/16" Drill Bit 5/16" Drill Bit Knife Straight Edge Needle Nose Pliers Soldering Iron Solder Hot Glue Gun Step 2: Making The LED Jig First, Start by printing out my 4x4x4 LED Cube Template and paste it to a cardboard box. Make sure that the printing settings are set to actual size and landscape orientation. Next, punch out all 16 LED holes(grey dashed circles) using a pencil. Insert a LED into the individual holes to test the fit. 4x4x4 LED Cube Template.pdf21 KB Step 3: Making The LED Cube Take the 64 LEDs and test them to ensure that they all work using a button cell battery. This may sound tedious but in the end this will safe-guard your your project! Next, insert 16 LEDs into the holes and bend the leads to the direction of the arrows using needle nose pliers. The red arrows represent the positives(anodes) likewise the blue arrows represent the negatives(cathodes). Solder all of the positive leads together and trim off the access of the leads. Now, you might have noticed that there are two gaps in the layer of the positive leads. This can be solved by straightening a length of craft wire by pulling both ends of the wire with pliers and trimming two 1" sections that are then soldered in place. After the hole positive layer is soldered together, flip the box over and start pushing the tips of the LEDs out of the holes in the jig. Make sure to do this evenly to avoid bending or damaging the layers structure. Now your first LED layer is finished! Follow this step three more times to end up with four layers. Next, take the four LED layers and solder the negative leads together by stacking the individual layers on the top of each other. Start by soldering the leads in the center, then work out to the leads on the edge. The 4x4x4 LED cube is starting to take shape! Straghten another length of craft wire and cut and bend four sections that will later connect the four layers to the perf board. Finally, solder them in place. Step 4: Installing The LED Cube Start by marking an outline of a square with a Sharpie that is slightly smaller than the interior sides of project box on the perf board. Use a straight edge and a knife to score the outline along the lines, then break off the access material by placing the perf board in a vise or on the edge of a table, then apply pressure till the scored sides snap off. Next, drill 20 holes with a 1/16" drill bit for the leads on the top of the project box. An easy way of doing this is by marking the holes where the leads poke out of the perf board and then taping the board to the top of the project box. Next mark the 20 holes on the top of the box through the board with a sharpened pencil. Take the perf board off and drill where the markings are on the project box. Then glue the perf board inside of the box with some hot glue. Make sure that all 20 holes line up with the holes on the perf board. Next install the LED cube by carefully inserting each lead through the holes on the project box. Finally, solder the leads in place, then trim off the access wire. Step 5: Wiring The Circuit First, snap the pin header in to 3 pieces that fit the Arduino Unos digital and analog plug-ins. Strip and start soldering wires to the 16 digital leads(columns) on the perf board. For the 4 analog leads(layers), solder 100 OHM resisters to the leads then solder wires to each resisters lead. Next strip and solder the opposite ends of the wires to the 3 pin headers. The wiring is setup to resemble a graph with a 3rd dimension. For the columns, there are two axes X and Y. In addition, the layers serve as the Z axis. If you look straight down from the top of the LED cube it looks like the 1st quadrant on a graph except that the origin is (1,1) on the cube. Likewise each LED can be named using the fundamental graphing technique. Lets try an example; look at the demonstrational picture and find A(1,4). "A" means that it is on the first layer and "(1,4)" is X=1,Y=4 on the graph. Connection Setup: Columns [(x,y)-Pin] (1,1)-13 (1,2)-12 (1,3)-11 (1,4)-10 (2,1)-9 (2,2)-8 (2,3)-7 (2,4)-6 (3,1)-5 (3-2)-4 (3-3)-3 (3,4)-2 (4,1)-1 (4,2)-0 (4,3)-A5 (4,4)-A4 Layers [Layer-Pin] a-A0 b-A1 c-A2 d-A3 For more detail: 4x4x4 LED Cube (Arduino Uno) ### DIY navigation device for blind people using Arduino and Android smart phone In this project you can cover your eyes and let your smartphone navigate you to avoid obstacles, the application is mainly a DIY navigation device for blind people. I knew that 1Sheeld is about to launch a new text to speech shield, and so I contacted them to let me use it in this project and they accepted since I'm one of the early Kickstarter backers :D By using 1sheeld I made the text to speech part by only 1 line of code! All you need to get started 1. Any Arduino board (here i used UNO) 2. 1sheeld 3. Ultrasonic sensor (I used two for better navigation) 4. Male-female arduino jumbers or wires 5. Your belt 6. Any smart phone that runs Android V2.3 and above. Download 1sheeld application to your android smart phone from here Download 1sheeld library from here and put it in the libraries folder in your Arduino folder. Step 1: Wiring and electronics setup 1. Connect your 1sheeld to your arduino board 2. Connect your ultrasonics as shown in figure VCC ==> to the 5V in your 1sheeld GND ==> to your GND in 1sheeld ECHO ==> to any i/o pin here i used 11 and 13 for the two ultrasonics Trigger ==> to any i/o pin here i used 10 and 12 for the two ultrasonics If you have the 5 pin ultrasonic make the same wiring and put the out pin on SC. (OUT ==> to your GND on 1sheeld) Step 2: Belt setup I needed to put the Arduino and 1Sheeld in a cover, I couldn't find any plastic box so I got this laser cut case from Fablab Egypt. You can make a case with a laser cutter like this one also. I used wires to mount the case and sensors to my belt.   For more detail: DIY navigation device for blind people using Arduino and Android smart phone ### Word Clock in German using Arduino While in Germany last year, I saw a world clock in a store similar to this one in a store that was priced at 900€. I read several instructables online on how to create a World Clock so I decided to give it a shot. I want to thank the following Instructables that I used as a starting point to create mine: drj113's The Wordclock Grew Up! - An excellent tutorial that was the wiring foundation for my clock's PCB. Cello62's My Arduino World Clock - Beautiful world clock that I based my design off of. I also want to thank Dee for all the input and advice along the way. This is my first complete Arduino project so please feel free to leave comments or feedback for improving the build. I'll also provide some comments on things I would do differently in the next version. You can easily follow these steps and make an English (or any other language) version as well. The steps will all be the same, you'll just need to create an English template in Step 2. Step 1: Ordering Materials The following list of materials are specific to this project- beyond the standard tools for electronics projects (like solder, a soldering iron, 22 gauge wire). I ordered almost all of the materials from Amazon and Mouser with the exception of the laser-cut lettering board. The laser-cutting board was the part I spent the most time researching as many instructable offer varying alternative methods (such as using printed transparencies). I ended up going with Ponoko.com which allows you to upload a vector template file and select your material, dimension and color. They're a little pricey but their customer service was great when I had questions and it shipped quickly even though I didn't order it expedited. Here's the rest of the materials specific to this project that I had to order: Hardware: Laser-cut Lettering in Acrylic Board from Ponoko (link) - $30 laser-cutting + $20 shipping IKEA Ribba Frame 20"x20" (link) - $19.99 Custom cut frame mat (local framing store) - $22.00 2 x Rubber Foam Weatherseal (link) - $5.14 Electronics: Arduino Uno R3 (link) - $25 SainSmart Tiny RTC I2C DS1307 AT24C32 24C32 memory Real Time Clock Module for Arduino (link) - $6.20 5 Meter Flexible LED Light Strip with 300xSMD3528 and Adhesive Back, 12 Volt (link) - $11.77 110VAC to 12VDC 24W LED Power Adapter (link) - $9.99 3 x Addicore 74HC595 8-bit Shift Register 16-pin (link) - $5.10 3 x Darlington Transistor Arrays ULN2803A 18-pin (link) - $3.06 Component Sockets for 74HC595 Shift Registers & ULN2803A Transistor Arrays (link & link) - $2.22 Prototype Stripe Board (link) - $2.00 Overall, the hardware total was close $100 and the electronics total was around $66. Still under the original. Step 2: Designing the Laser-cut Board To build the template, I tested out the layout of the lettering. I then downloaded the free open source vector editing software InkScape (Win/Linux/Mac link) and the vector template provided by Ponoko.com to create the my design. They have How-To videos that explain how to create a template. A quick note about fonts- I google searched "stencil fonts" and after browsing and testing out several, I ended up deciding upon the free "Stardos Stencil" on Google Fonts (link). Make sure you choose a font that will maintain shape after cutting; specifically that interior parts of letters with closed loops (letters like Q, R, O, P, A, D, B) will persist and not break off. The attaced .svg file was my final version that I uploaded to their site. After uploading, I then selected the following options: Material: Acrylic Color: Black Size: 15"x15" Depth: 9mm* *Regarding the Depth, I select 9mm, but in the future would probably select 5.6mm which is $13 cheaper. Once the laser-cut acrylic board arrived, I punched out all the lettering but left the protective paper on. I kept the paper on through the entire build to ensure the acrylic would not get scratched or damaged. P2 inkscape_Clockv3.svg204 KB Step 3: Building the LED Light Array With the laser-cut board ready, I then proceeded with building the LED lighting array. I used a piece of cardboard cut to the same size as the laser-cut board as the base to attach the LED light strips. I lined up the laser-cut board with the cardboard and punched tiny holes with a pen into the cardboard through the letter holes. I used those holes punched as temporary markers and then wrote the corresponding letter over the punched hole on the cardboard. This was to ensure the LED lights would line up appropriately with the laser-cut board. Using the LED spool I purchased from Amazon, I cut sections of the the LED strip to size. The LED strips come with built-in resistors on each strip section so you don't need to add resistors. The downside to these LED strips is they are extremely difficult to solder. I found some videos on YouTube that explain best practices for soldering to LED strips- short version is you want to heat up the contact on the LED strip and wire and then apply the solder. Sounds easy but it's a lot of work. After soldering wire to the LED strips, I punched a hole through the cardboard and ran the wires through the back. I then pulled back the adhesive backing to the LED strip and stuck it in place to the cardboard. You will want to run all the LED strips to a single positive voltage wire (or rail). You'll turn on the LED lights by grounding the circuits you want turned on (aka "sinking current") but I'll go into this in more detail in the next step. Next, I sectioned off the LED lights with weather stripping from Home Depot (thanks to my brother, Robby, for this idea). This ensures that light will not bleed over to other letters. It was way more effective and easy to work with than cardboard strips that I was going to try. **IMPORTANT NOTE ABOUT LED VOLTAGE: The LED lights I purchased are extremely bright and require 12V. The Arduino only outputs 5V by default, like when powered by USB. That being said, you can get 12V output from the Arduino by using a 12V adapter. You'll get 12V from the VIN port on the Arduino and will also get 5V through the 5V ports (which is very helpful). If you can, try to buy 5V LED strips if possible because 12V is extremely bright.   For more detail: Word Clock in German using Arduino ### Smart Homer Web-enabled TV remote using Arduino Smart Homer, a Web-enabled TV remote puppet Smart Homer is a Web-enabled puppet that turns on your TV when Simpsons is on. As Homer is too lazy to browse the Web himself, a script in the cloud checks the online TV program for him. If Simpsons is on, the script triggers the Arduino Web service in Homer's belly to activate his infrared eyes. No brain involved. This project by @tamberg was built at the 24-hour SRG Hackdays with the kind help of Gianni and @urbmc. Homer even got a trophy, just by switching on a TV! Video Here's a short video (electronics not yet embedded, eyes triggered with Curl). Material Homer puppet (e.g. http://www.amazon.com/Simpsons-Homer-Simpson-Plush-Stuffed/dp/B00CQ3ELR2/ from Amazon) Arduino Uno (e.g. https://www.adafruit.com/products/50 from Adafruit) AB USB cable (e.g. https://www.adafruit.com/products/62 from Adafruit) Ethernet shield (e.g. https://www.adafruit.com/products/201 from Adafruit) RJ45 cable (e.g. https://www.adafruit.com/products/995 from Adafruit) IR sensor (e.g. https://www.adafruit.com/products/157 from Adafruit) IR LED (e.g. https://www.adafruit.com/products/387 from Adafruit) Button (e.g. https://www.adafruit.com/products/1119 from Adafruit) Jumper wires M-M (e.g. https://www.adafruit.com/products/759 from Adafruit) Jumper wires F-M (e.g. https://www.adafruit.com/products/825 from Adafruit) Tiny breadboard (e.g. https://www.adafruit.com/products/65 from Adafruit) A 180 Ohm, 220 Ohm and 1k Ohm resistor and an LED (e.g. from Pusterla) Thread and a needle TV with IR remote Tools Scissors (A second Arduino Uno, USB cable and breadboard comes in handy for testing. The Ethernet cable should be long enough to reach the sofa in front of your TV.) Step 1: Recording your TV remote's IR signal From the detailed Adafruit tutorial https://learn.adafruit.com/ir-sensor we learn that TV remotes use vendor specific IR signal encodings. There is a library at https://github.com/shirriff/Arduino-IRremote covering some vendors. But you still need to know what to send. Lacking this information in our case, we resorted to recording the IR signal with Adafruit's handy example which you can download at https://raw.githubusercontent.com/adafruit/Raw-IR-... Set up the Arduino, breadboard, IR sensor, 1k Ohm resistor and a (non-IR) LED as shown. Upload the rawirdecodestruct.ino example to the Arduino and open the serial console. Point the TV remote to the IR sensor, shortly press a channel key and watch the console. After a few seconds, a large output appears. Copy the part that looks like code to the clipboard (or a text file) for the next step. Step 2: Testing the IR LED with your TV Once you copied the output of the IR receiver sketch, download and open this Adafruit Arduino sketch: https://raw.githubusercontent.com/adafruit/Nikon-I... Build the circuit as shown in the Fritzing diagram, using the IR LED, a 220 Ohm resistor and a button. If you've got a second Arduino and breadboard you can leave the previous IR receiver setup untouched and use it to test this IR sender. Replace the implementation of sendCanonCode by pasting the code you got from the receiver. You might also have to adapt the delayMicroseconds in the pulseIR function. We replaced 10 by 9 in both places, but left everything else. In the main loop, we replaced delay(3 * 1000) by delay(100). The timing is quite critical. Play around with the sender by pointing the IR LED towards your TV's IR receiver and pressing the button. If it works, the channel for the key you previously recorded should switch on. Many TVs have a timeout where they change the channel from e.g. 2 to 22. Try to find a safe timespan that switches the TV on, but does not go too far. A human does this intuitively when the desired result appears on the TV, but Homer is not that smart. We used a for loop to repeat the signal for the desired timespan. (This step is easy, but it took a lot of attempts to get the timing right. We even plotted times in Excel to find out why the IR signal did not work. Another huge impact is the resistor. We accidentally used 1k Ohm instead of 220 Ohm which made the LED very weak.) Step 3: Augmenting Homer's eyes with IR LEDs Pierce the infrared LED's legs through Homer's eyes. Take care not to break the legs. The puppet used here had a thick skin behind the eyes. Cut open Homer's back and use your finger to "plug" a F-M jumper cable onto the LEDs legs. It is hard to remember which leg is GND, but you can test this easily by swapping the cables on the breadboard. Repeat the test from the last step to make sure your wiring works. We hooked up just one of the LEDs and kept the other as a backup. Step 4: Testing remote access to the Arduino The Arduino in Homer's belly acts as a Web server. This allows us to send push notifications (or rather: trigger a Webhook) with a simple HTTP PUT request. To enable remote access without the hassle of port forwarding, we use Yaler.net, a relay service (disclosure: I'm a founder). Follow the steps in https://yaler.net/arduino to install the YalerEthernetServer library and get a free account. To see if Yaler works in your network, open File > Examples > YalerEthernetServer > YalerWebService in your Arduino IDE. Add the Ethernet shield to your Arduino (remove the breadboard for a second), replace RELAY_DOMAIN with your relay domain and access the Arduino at http://RELAY_DOMAIN.try.yaler.net/. You should see Hello in your browser. (Note that this works from the public Web, not just in your local network. This is necessary for the cloud script to trigger your Arduino. If you still prefer using port forwarding, and know how to set up your router, just uncomment the respective lines in the code.) Step 5: Testing Homer's REST API with Curl Once access to Homer's belly works with the Yaler example, try the final code, available at https://bitbucket.org/tamberg/srghack/src/tip/2014... (Don't forget to port over your TV-specific IR command and set your RELAY_DOMAIN.) Connect the jumper wires of the IR sender breadboard circuit to the Ethernet shield, as before. Place Homer in front of your TV, at a distance and orientation that works for the IR signal. Make sure he's connected to your LAN with the Ethernet cable. On your computer, open a terminal and run Curl (http://curl.haxx.se/) with this command: $ curl -vX PUT http://RELAY_DOMAIN.try.yaler.net/ir?key=2 (Make sure to use your Arduino's relay domain.) If Homer's response is 200, the TV should eventually switch on, just as if you pressed the button. If you get a 504, Homer might be busy. Wait, and try again. Step 6: Embedding the Arduino into Homer's belly Now it's time to integrate the electronics into Homer's belly. Remove some of the stuffing material and insert the Arduino, Ethernet shield and breadboard. Don't forget to connect Homer's eyes to the breadboard and make sure they work as expected. Cut a hole into Homer's butt for the USB and Ethernet cable. Then cover the back with some stuffing and sew Homer's back together with a few stitches. Take care not to break the IR LEDs when dressing him up again. Step 7: Setting up a TV program search RSS feed SRF provides a online TV program (in German) with a neat search feature. Visit http://tvprogramm.srf.ch/q and enter Simpsons into the Suche nach text field. Click the button labelled Suchabo bestellen to "order" a search. On the second page, select per RSS-Feed and click the Abonnieren button. This immediately provides you with an RSS feed. E.g. for all upcoming episodes of the Simpsons, the link is http://tvprogramm.srf.ch/feed/q/query/simpsons. The RSS feed contains starting times and channel info. Unfortunately, there's no public feed (or other notification mechanism) to get a trigger when the emission really starts. That means we'll have to do some time keeping by hand.   For more detail: Smart Homer Web-enabled TV remote using Arduino ### Pimp My Zoomobil using Arduino I recently put together the Playmobil Zoomobil for my kids. As I was busy snapping all the pieces together, I became more and more convinced that this cart had been made to have lights. It's hard for me to believe the original product designers at Playmobil created this without lights in mind. A lot of the Playmobil vehicles are like this, but the Zoomobil is a perfect example of what I mean: all the places which would be lights on a real car are actually made from clear plastic, as opposed to decals or opaque plastic, and even had spaces behind or within them. Why would Playmobil do this if they weren't actually thinking about putting an LED there? So, I decided to dress it up a little. And, while I was at it, I thought I'd also add a motor, a servo and remote control to move it around. And, no, I didn't take my kids' toy away from them: I bought my own. This was my first project using an Arduino, really my first electronics project ever, so be nice in the comments. The finished product is pictured above. Read on to find out how I did it. Step 1: Parts List Most of the following parts can be found very easily on Amazon or Adafruit as well as many other electronics parts websites: other than the Zoomobil itself all the parts are "off the shelf" and almost certainly could be replaced by other, equivalent parts. If you want to modify a Zoomobil, buy it wherever you can find it since it's been discontinued by Playmobil. Playmobil Zoomobil (search EBay/Amazon: "Playmobil 4855" or "Playmobil Zoomobil" or "Zoomobile") Arduino Uno and breadboard for planning, prototyping, programming and debugging Arduino Nano to use in final product Tamya Single Gearbox 4-Speed 2 x hubs and wheels which fit the Tamya axle L293D HBridge IC SG90R Servo Colored LEDs w/resistors Capacitors Mini Remote Control IR Sensor 2 x 3-AA switched battery holders Solderable circuit board, cut down to approx. 6.5cm x 4cm (Frys) 3 x screw-down, bread-board-ready power connectors, although, if I did it again, I'd probably replace the two battery inputs with barrel connector sockets. (Amazon/Adafruit) Female headers to socket the Nano, the LED connectors and the IR Sensor 3-pin male header (for the Servo) Dremel tool with cutting disks IC Chip Socket for the H-Bridge (if desired) Sheet aluminum and cutters Solder/soldering gun Hot glue gun Assorted screws, nuts, bolts, standoffs, wire, pliers, screwdrivers, wire-strippers, wire cutters, etc. Miscellaneous plastic pieces from other projects Step 2: Body/Chassis Prep The first thing I had to do was modify some of the click-tabs which held the body to the chassis. I left the tab itself, but used a knife to shave off the small piece at the end which click-locked the tab into place. This allowed the two pieces to stay together, but without locking. It's a real pain to pull the two pieces apart if you don't do this. They actually stay together fairly well even without the lock pieces. I also hot-glued the clear plastic of the headlights-piece and the red plastic of the taillights-piece into place. The pieces kept falling out as I played with the body of the cart and were in constant danger of loss or damage. Step 3: The Motor and Gearbox So, let's get started with the motor and gearbox. The most easily-available gearbox I could find was the Tamya "Single Gearbox (4-Speed)". It's really cheap (about $7) and easy to order over Amazon as well as many other places. It allows you to assemble the gearbox in 4 different ways, varying from slow-but-powerful to super-fast-but-weak. I originally used the slowest setting (the "A" option in the instructions), but eventually removed and rebuilt it in the next-faster configuration ("B"): the cart didn't need all that power, and at the slowest speed it wouldn't impress anyone. That change tripled the top speed, which was enough for this cart. The biggest problem I faced with this gearbox was that the axle comes out of the middle of the gearbox. In order for the wheels to fit into the wheel wells in the Zoomobil easily, I needed a gearbox where the axle is at the bottom of the gearbox; this would allow me to secure the gearbox to the bottom of the chassis, and extend the axle out the sides. At the time I wasn't able to find a gearbox like this (although since then I've been made aware of one: Tamya Universal Gearbox Assembly. I can't actually say how well this would work, but it looks like it would). In order to use the 4-speed Tamya gearbox, I considered a number of different configurations, including set the gearbox above the back of the cart, with its wheels driving the the Zoomobil's wheels by friction, set the gearbox with the motor "in the air" above the back of the mobile, attach the gearbox to the underside of the chassis, making the cart look "jacked up", as well as a number of others. None of these configurations worked for me. In the end, it was clear that, in order to get the axle in the right place, I had to cut a gearbox-shaped hole in the bottom of the cart's chassis and set the gearbox into it. I cut the bottom of the chassis using my trusty Dremel cutter. I used sheet metal (to secure it from below) and narrow, long screws (from above) to "suspend" the gearbox in the correct place, so that the wheels fit into the wheel-well of the vehicle. The sheet metal below the gearbox had the added benefit of protecting the motor and gears. I couldn't figure out any easy way to attach the original wheel hubs to the new axle. So, instead I used some hubs and wheels which were made for the Tamya gearbox. I didn't like that the hubs' rubber wheels didn't match the front wheels of the cart, though, so I popped them off and replaced them with the rubber from the original cart's wheels. The fit was a little sloppy at first, but never caused any problems. I thought also about painting the hubs white, to match the front (original) hubs, but never got around to it. All this left about 1mm clearance under the cart. As long as the cart is only driven on hard surfaces, this isn't a problem. One other very important point. In my prototype circuit, with my full-sized Arduino Uno and breadboard, whenever I got the motor up to a higher speed, the circuit would "freeze" in a particular state. In essence, it shut down or reset the Arduino. After some research on-line, I realized this was actually a rather well-known problem: motor noise. At higher speeds, the cheap motor's brushes were feeding so much electronic noise back into the circuit that it was shutting down the Arduino. The solution was to solder a set of very low-value capacitors across the motor terminals and housing. I followed these instructions at Beam-Wiki and my troubles went away. I needed to use the 3-capacitor solution.   For more detail: Pimp My Zoomobil using Arduino ### Arduino-Based Blue Box (Phone Phreaking) History and Story In the 1950s, 1960s, 1970s, 1980s and even up into the 1990s phone phreaking was an amazingly cool way to explore an unknown world of phone switching networks. To "phreak" a telephone switch, can be done by using frequencies, or tones to manipulate the switching hardware. In doing so, taking control of the hardware was simple and gave the "phone phreak" the power of an inward-operator. Blue Box "The blue box is an electronic device that simulates a telephone operator's dialing console. It functions by replicating the tones used to switch long-distance calls and using them to route the user's own call, bypassing the normal switching mechanism. The most typical use of a blue box was to place free telephone calls. The blue box no longer works in most western nations, as modern switching systems are now digital and no longer use the in-band signaling which the blue box emulates. Instead, signaling occurs on an out-of-band channel which cannot be accessed from the line the caller is using (called Common Channel Interoffice Signaling (CCIS)). The blue box got its name because the first such device confiscated in 1961 by Bell System security was in a blue chassis." - ProjectMF.org Around the mid 1950s, Bell decided to publish an article on In-Band Signal Frequency Signalling (I swear they knew the whole time what would happen!) which "leaked" these frequency specifications. This led to hardware hacking enthusiasts and hobbyists, just like you and me, into creating their own multi-frequency tone synthesis devices called blue boxes. The frequencies are played at the same volume and for specific durations. For example, to dial a "1" as an inward operator, we would use 900Hz + 700Hz sine waves played for 66ms. If we stored digits we would play them for 66ms with 66ms pauses in between. The * and # keys are referred to as "KP" and "ST" respectively. And the only single frequency tone used is for seizing the trunk which is 2600Hz (this is what the original hacker quarterly "2600" magazine is actually named after). This is often referred to as "supervisory signalling," or "seizing the trunk." As time went on, the older switching technologies started to fade out and the new packet-switched networks of today became more prevalent. This led to the decline (sometimes people say "death") of phone phreaking. In-band signalling (sending signals through the mouth piece of the phone handset) was good for gone. That is, until a brilliant phone phreak and hacker named PhiberOptik (Mark Abene) had the great idea of emulating the phone switches of old by hacking the open source Linux Asterisk PBX. In doing so, he made the Zaptel mechanism (used in older versions) recognize single and multiple frequency tones. He gave the presentation at H.O.P.E. (Hackers on Planet Earth) in 2006 and the Asterisks patches were then released on his website Project.MF.org Since then, there has also been a resurgence of antique telephone hardware into what is known as the Collector's Network. These invaluable resources empower anyone who ever wanted to phone phreak, explore, and control phone switching equipment but never got the chance to, the opportunity. Let's Get Started! I have come to you Instructables.com for the chance of spreading the word that phone phreaking is, in fact, alive and well! So, with this history and brief introduction in our belts, we can now move on to making our own blue box to phreak with. Step 1: Arduino IDE and Library Setup The advent of the Arduino put power into the hands of the same type of folks who originally designed the first blue boxes. We can write our own micro-controller code, use easily obtainable Radio Shack parts to design unique hardware and much, much more. There are many ways we can design our blue boxes and this article will only cover a simple few of them. Tone Library First is the Tone library - square wave - synthesis device. This device can be made using the Arduino Micro ATMega32u4 based chip with the Arduino (external) Tone library. The library needs to be modified to work with the ATMega32u4 chip and a modified version can be downloaded on my website here. This library and chip have only been tested with the Arduino IDE version 1.0.5 Now that we have the library and chip, we now need a simple schematic that we can use with a keypad. Keypad Library The Arduino Keypad library can be found here. All libraries need to be in the Arduino "libraries" directory located in the base of your IDE installation. e.g. C:\Users\trevelyn412\Documents\Arduino\libraries Most of the time this is as simple as extracting the library from a zip file, but check your library's documentation if advanced instructions for installation are required. TMRpcm Library Finally, the TMRpcm library is used by schematic 2 for playing WAV files from our second blue box. The author of this library was kind enough to help me via email as I was having difficulty with the non-existent SeeedStudio v3 SD card Shield documentation. It plays mono files at 32khz and below (I use 22khz) at 8 bit. There are however a lot of advanced functions and code optimizations that we can do by editing the pcmConfig.h header file, such as allowing a larger buffer space as we uncomment and change the line, #define buffSize 128 //must be an even number Also, by storing a single frequency WAV file onto the SD card, we need to lower it's actual cycles by 25. This means in Audacity, generate a tone for 2575hz rather than 2600 for supervisory signalling. The sounds I have created are all in the directory "sounds" located at the root of the micro SD card. There are several notes by the Arduino community for storing files and accessing them via Arduino libraries located here. These are very important to follow by. Hardware Required In these tutorials I use the following parts, Simple 10k Ohm resistors Momentary push-buttons LED lit toggle power switches Arduino UNO && Arduino Micro SeeedStudio v3 SD Card Shield BLUE Advantus Super Stacker Crayon Boxes Blue LEDs 100k Potentiometers for volume 2.2uF non-polarized capacitor (optional) 9V batteries (one schematic uses 2 in parallel Rotary dial mechanism from old phone Velleman 4x4 keypad 150 Ohm telephone receiver speaker part #SD150(ph) (for optimal output) And anything else is optional. The LEDs are optional and hardware with LEDs like the power switches are also optional. Changing the schematic for accommodate for these should be very easy. Arduino Experience This tutorial assumes very basic knowledge of the code used by the Arduino and how to set up a basic project using a bread board. I do, however go into instructions on how to manage these projects into boxes of their own, but that requires soldering and solder experience, in most cases. Step 2: 1st Schematic I will be showing you how to construct the two boxes that I have personally made using the Tone synthesis library and the Arduino UNO / SeeedStudio SD Shield - TMRpcm WAV file player versions. For two of these tutorials I will be using the Velleman 4x4 keypad. This is a very study keypad which comes with a pin-out diagram on the back of the package for easily hooking it up to the Ardiuno. In the image above is the simplest schematic in this series. It uses only a 4x4 keypad, a single supervisory signalling button, a volume knob (potentiometer), and a stylish LED-lit power button. The momentary pushbutton requires the pin 10 also have a 10k Ohm resistance to ground. The other side of the switch goes directly to the 5V pin as we can see form the simple schematic. Developing this hardware layout is simple, but debugging can take hours. It's best to use a simple bread-board for those unfamiliar with schematic diagrams or electronics.   For more detail: Arduino-Based Blue Box (Phone Phreaking) ### Home Automation: Drapes using Arduino Hate having to manually open and close your drapes? Hate getting back from work/school and your room is dark and dreary? Do you want curtains that open and close themselves? Then you need Dr. Drape! Dr. Drape is an easy DIY project using an Arduino and servo to open and close your drapes at the tap of a button or on an automated schedule. The code included in this tutorial responds to your button press to open or close the drapes, as well as opens them at 10 am Monday - Friday. Difficulty is easy, and anyone with some Arduino experience should be able to follow! This is my first instructable, so let me know if I should make any changes. Otherwise grab your soldering iron and C programming book, we're gonna move some drapes! Step 1: Before you begin... Attached are some pictures of my window before I began. There is a few inches of space between the wall and the curtain to fit the Arduino, motor, and pulley system so that they do not stick out. On the left side we are just going to mount a pulley that will hold the cord, while the right will have the wheel, motor, and Arduino. Parts Primary Arduino Uno: http://www.amazon.com/Arduino-UNO-board-DIP-ATmega... Arduino Power Supply: http://www.amazon.com/gp/product/B00BWA48AA/ref=oh... Arduino Programming Cable (if you don't have one): http://www.amazon.com/gp/product/B001TH7GUA/ref=oh... Servo: https://www.hobbyking.com/hobbyking/store/__25456_... Other Parts Cord to pull curtain (at least 2x the width of your window) A button Command Strips for attaching stuff to the walls Pulley for side opposite the Arduino Connecting wires Screws Tools 3D Printer (I used this to print the mount, in the likely even you don't have access to one you would have to find a workaround) Soldering Iron Screwdrivers/other basic tools Step 2: Continuous Rotation Servo Having the benefit of hindsight, you should probably order a servo that has continuous rotation out of the box. I forgot to check when ordering, so the servo I ordered did not. However, it is possible to modify the servo so it can rotate 360 freely. The tutorial I followed to do this is here: http://flitetest.com/articles/easy-9g-continuous-r... For the servo listed in the parts list here, I had to cut out a plastic block that prevented the servo from over-rotating as well as cut off the potentiometer and solder on two 2.2k ohm resistors. At this point, the servo was no longer "centered" around 90 being neutral, 0 being left, and 180 being right. I had to go through and test lots of different options, and had to use Servo.writeMicroseconds() instead of just Servo.write(). My values I found were 700 for left, 1424 for neutral, and 2300 for right. After making these modifications to the servo, the resistors stick out of the side of the servo body, for which I recommend you cut a hole in the plastic body to fit these through. For the 3D printed mount I made, I also made a hole for the 3-wire servo connect to thread through the side. This way, I could leave just 1 side of the servo exposed on the mount. Step 3: The Servo Wheel The wheel I attached to the servo I just found lying around in a parts bin, so I cannot tell you what it actually is. Just make sure your wheel is small enough that the torque of your servo can still handle the curtain. I would also recommend you have a hole in the middle of it so you can attack your servo arm before attaching the arms to the servo (like in the pictures above). Step 4: (Optional) Prototyping the circuit Before actually mounting everything together, it can be a good idea to make sure that all your electronics work. Here is a picture of me testing my button. You should test your board with the servo as well. You can pick through the code attached at the end of the tutorial to find out how to operate the servo and detect button presses.   Read more: Home Automation: Drapes using Arduino ### Meter Clock: Keeping “Current” Time I’ve seen a few meter clocks in my travels of the web, and I love the idea. A few days ago, I decided that I must have one of my own. Such began the “How to do it” pondering cycle. I had seen builds where the face plate of the meter is replaced. This works, but I wanted to try and find a way to do it without modifying the meter, if possible. After some more ponderation, I came up with what I think is a serviceable idea. I came across this style of milliamp meter on Amazon. They’re not quite 0-60 mA, but the 0-100 mA (a 0-20mA meter for the hours) is close enough. And they were cheap. So yay. Part of my requirements were that the clock run off of an Arduino Pro Mini I had lying around, and with minimal additional parts. In order to drive the meters with some degree of precision, I would use the PWM pins to vary the effective voltage across a resistor in series with the meter. This would, by the grace of Ohm’s Law, induce a current that, based on the PWM duty cycle, would be scaled in such a way as to move the needle on the meter to the corresponding hour, minute, or second. One minor issue came up in the form of the max current the GPIO pins on the ATMega328 chip can source/sink. The pins can source/sink a maximum of 40mA, a bit far from the 60mA needed for the minutes and seconds meters. Enter the transistor. Using a simple NPN transistor switch circuit, I was able to provide the current for the minute and second meters from the 5V supply. The PWM signals switch the respective transistors on and off, effectively varying the voltage across the resistors in series with the meters. The resistor between 5V and the meter is actually 2 1/4 watt 100 Ohm resistors in parallel for an effective resistance of 50 Ohms. The two in parallel was necessary as 5V x 0.06A = 0.3W (more than 0.25 that a single 1/4W resistor can handle safely).   For more detail: Meter Clock: Keeping “Current” Time ### Programmable Temperature Controller + Hot Plate Heating things up is one of the most performed tasks in a lab. Quite a lot of times it is not enough to simply hold something at a certain temperature, but the rate at which something is heated and for how long is just as important. Especially when you try to develop catalysts for chemical processes, the temperature program and exact temperature control is crucial and you probably do not want to stay in the lab for 16 hours to manually adapt your temperature program. Unfortunately, programmable temperature controllers that can automate processes are really expensive. So I decided to build a highly customizable controller that is able to run temperature ramps and read multiple different temperature programs from a SD card. It also provides a logging function on the SD card that allows you to evaluate the resulting temperature profile after running a program. It is a great hack for your heating devices, since it can be easily connected to almost any heating apparatus you can think of, as long as it allows you to also connect a thermocouple. So If you have ever thought about building the perfect electric kiln (there are multiple really good explanations online) or hot plate (take a look at the steps 6 and 7), now is your time. Overall the controller should cost you about $45 and the hot plate about $55. You should easily be able to build this as a weekend project. Step 1: Things you need Programmable temperature controller: Electronics: Solid state relays (5V control voltage, 16 A load current) LCD (e.g. on amazon.com) SD card board MAX 6675 controller board (e.g. on olimex.com) Atmega 328 chip & socket 5 x 10 kΩ Resistors 4 x 1 kΩ Resistors 4 x 560 Ω Resistors 1 µF Capacitor 100 pF Capacitor 2 x 22pF Capacitor 16 MHz quartz oscillator LM7805 5V linear voltage regulator Rotary encoder Mechanical 110 V switches 10 A fuse and fuse holder For the casing: 4 mm ply wood Wood glue Laser cutter Primer Paint Hot plate: Metal case as support (e.g. an old computer power supply) Small plastic case Aluminum plate 20x20x1 cm 2 Cartridge Heaters (1/4’’ or 6 mm) (e.g. on amazon.com or from China on ebay.com) Type K thermocouple (1/4’’ or 6 mm) Steel thread rod (¼ ‘’ or 3/8’’) and nuts Locking screws Lead Copper paste Tools Long (ca. 30 cm) drill for the heating cartridge and thermocouple Tap & die for Locking screw and steel thread rod Drill press Step 2: Building the case part 1 You can of course use any casing you want, but I decided to laser cut a custom one. I uploaded the files to this step (the three different file types all include the same design. I just wanted to offer you options depending on which file type works best for you). You can see in the first image where every piece goes. Start by glueing the LCD distance holder to the back of the front-top panel. While the wood glue sets, attach the side panels to the back and the top panel. A corner clamp is certainly helpful to do so. Than add the front-bottom and front-top piece. For more detail: Programmable Temperature Controller + Hot Plate ### RaspWristRadio – Wearable Personal FM Radio Station Parts List Raspberry Pi Model B Adafruit LCD Keypad Pi Plate Adafruit PowerBoost 500 3.7v 1200mAh Lipo Battery Wrist Mount USB Sound Card 3.5mm Microphone Software NOOBS\Raspbian PiFM Adafruit LCD Keypad Library RaspWristRadio Python Script For more detail: RaspWristRadio – Wearable Personal FM Radio Station ### Open source BLE door lock Using Arduino Ever been looking for your keys, and wanted to call them, before you realize that they are hideously analog pieces of metal? Or wanted to let someone into your house when you’re not at home, without having to lend them your keys? Lockitron was the solution that descended from hardware heaven – a device that fits over the lock on your door and that is controlled via an app. It raised $2.2M on Kickstarter but missed its original shipping deadline by 1.5 years, leaving its backers in a deadlock (pun!). Are you one of them? Stop glaring at your empty mailbox and channel all your frustration into making your own awesome smartphone connected lock – The Bean Lock. Tweaking the deadbolt The Bean Lock is built around an electronic wireless deadbolt for a standard door. Almost any electronic deadbolt should work but some might need a bit of extra oomph. The deadbolt we picked uses a motor to slide it in and out of position, with a small switch that indicates when it’s locked. We will use the LightBlue Bean to control the deadbolt motor because hey, it’s what we make, and because it’s pretty darn awesome. To connect the Bean to the electronic deadbolt you will need to cut almost all wires and electronics from the lock – the only electronics that you need to keep are the motor, position switch and the battery pack. The Bean cannot operate at the same voltage as the motor, so we need to use a voltage regulator to step down battery voltage for the Bean to 3.3V. We also need a motor controller board to control the electronic deadbolt motor. What you'll need: A LightBlue Bean An electronic deadbolt An H-Bridge motor driver A 3.3V linear voltage regulator A ceramic capacitor (0.1uF) An electrolytic decoupling capacitor (10uF) Code To open the lock, we will use the iOS app LightBlue. It has a section called the Sandbox, that lets you control the Beanwithout having to program your own iOS app. When the Bean receives a serial message, it checks the bytes received against the keycode saved inside the sketch. If the keycode matches the buttons pressed in the sandbox, the Bean Lock will unlock or lock. Get the code from GitHub. A few wires and lines of codes later and boom, you have a lock that you can open using your smartphone! Good job. We are proud of you. Security flaws The Bean Lock would be a terrible lock if it were hackable enough to let people right into your home. Until you can be sure this is secure, we wouldn’t recommend you replace your home’s standard deadbolt with the Bean Lock. The Bean was designed to be very easy to program, but in the case of a lock, you may not want your neighbors having the same access as you have. To avoid this, we have added pincode protection to the latest firmware release. It will prevent anyone without the pincode from reprogramming your Bean. If you want to be even safer, you can keep the BLE module from reprogramming the on-board Arduino by cutting the trace linking the reset line on the Arduino to the BLE module. Without the reset line, the LBM313 module can’t reset the Arduino chip for reprogramming. Optionally, you could solder a switch to this line, so only someone with physical access to the inside of the lock is able to reprogram the Bean. Another suggestion is to add shared-key encryption. If you are using something small, like a 5-digit pin instead of a 128-bit key, an attacker could decide to brute-force your lock by trying every combination, one after the other. If you include a lockout – turn off the lock for 60 seconds after 3 incorrect codes are entered, for example – brute-forcing the lock’s combo would be too time-consuming to be practical. What’s next? This is only a prototype and not a secure solution yet. But we are sure that it can be developed further to work just as well as commercially available smartphone controlled locks, like the Lockitron. For a more thorough description on how to build this, check out our Make Magazine blog post. Make sure to post in the BeanTalk forum if you have any questions, ideas or contributions you want to share. We love reading what you’re up to!   For more detail: Open source BLE door lock ### Beach Buddy: 3-in-1 Solar Phone Charger, Boombox, and Sunburn Timer Calculator Imagine the ideal beach trip. The sun is shining, the skies are blue, the water is warm, and the humidity is low. You and your friends have everything you need to soak up the sun, sand and surf: a cooler filled with drinks and snacks, sunblock, flip flops, the coolest new swimwear, and the newest beach tech: the beach blanket/towel with corner pockets to fill with sand so it won't blow away; the sun shade with privacy screens and sand-fillable anchors for ultimate beach sheltering, even the spiked drink holders that keep your frosty beverages upright and sand-free. But what's a summer day without a summer soundtrack? Good thing you've got your tunes on...your...very expensive...and very vulnerable to the elements...phone...hmm. Well, you do have that waterproof phone case with speakers, but it's bulky, ugly, and doesn't have a hole through which you could connect the little solar charging panel you bought (for when that fickle phone battery goes dead). Huh. Well, while you're musing on what to do, don't forget the pain-relieving aloe gel in your cooler, for those inevitable sunburns. You're not keeping track of the time since you applied your sunscreen, admit it. You're just gonna burn. Might as well have the aspirin and Lidocaine easily accessible anyway. Enter the Beach Buddy. It's an all-in-one, water- and sand-resistant, solar charger, audio speaker system, and sunburn timer calculator. This Instructable harnesses the power of Arduino, a UV sensor, and simple mathematics to make one nifty gadget sure to boost your outdoor summer fun - and minimize your indoor summer recovery! ---------------------------------------------------------------- For my Digital Multimedia class' final project, we were instructed to develop "a proposal for a new product, new iteration, a “masterful and well-crafted kluge”, etc. of technology and interface" in the categories of apparel/fashion, toys, tools, furnishings, and/or art. My mind instantly flew to something having to do with sun protection, because of the horrible sunburn I suffered on the first day of class - even though I'd applied sunscreen before going to the beach that day. What had happened? Had my sunscreen expired? Not at all - it wasn't as evenly applied as I'd thought, for one thing, but also I was in direct sun for far longer than my SPF was meant to be. The World Health Organization has well-documented explanations for the UV Index, and the Skin Cancer Foundation goes into detail about both sunscreen sun protection factors (SPF) and the Fitzpatrick scale, a Harvard-developed system for classifying skin tones. BUT WHAT DOES IT ALL MEAN?! And who has time for the WHO, the UV, the SCF, and the FPS?! It all boils down to a simple formula. Once you know your Fitzpatrick scale type, you can calculate how long you can stay in the Sun without sunscreen before sunburn. Then divide that number by the current UV Index rating. Then multiply that quotient by your SPF rating - and your product is your allowed time in the sun before SPF reapplication is necessary. So, in equation form: (Skin type time to burn ÷ UV Index) x SPF rating = time before reapplication of sunscreen. The Beach Buddy does all this math for you with a few button pushes. Simply tell it your Skin Type and the SPF, and it'll read the UV index and spit out your timer calculation! SO NOW, without further ado, let's get started on the Beach Buddy! Step 1: Gather Materials Note: the list below is rather exhaustive, and includes every last tool and supply I needed to make this project. Also note, my preferred supplier is Adafruit Industries, as it is a female-run company in a male-dominated field. Feel free to search for similar or equivalent products from alternate suppliers! Materials - Project-Specific 4x 10k ohm resistors 10mm insulated standoffs (2 packs) 2.1 mm DC Barrel plug > Alligator Clips 9V Battery > 5.5mm/2.1mm plug Acrylic sheet (thin) Analog UV Light Sensor 4x Breadboard-friendly momentary pushbuttons Cable: 3.5mm Stereo Plug > Pigtail 3x Cable: JST-PH Battery Extension Enclosure F/M jumper wires (1 pack) LCD screen, 16x2 characters 2x Lithium ion polymer battery – 3.7v 2500mAh M2 screws, nuts, and washers (1 pack each) M3 screws, nuts, and washers (1 pack each) Mini adhesive-backed cable clips (1 pack) MintyBoost Charger Kit Nylon spacer (M2) (2 packs) 4x Panel-mount momentary push buttons PCB with connecting pads Solar Charger Kit Solar panel 3x SPST Rocker Switch Stereo Audio Amplifier Stereo enclosed speaker set Velcro strip Wrapping wire (30AWG) Optional: rub-on letters Materials - Standard 22AWG Wire, 3 colors each of stranded and solid Breadboard Cable Ties Desoldering braid Heat shrink tubing Low-tack (painter's) tape M/M jumper wires Solder Tools Acrylic cutter Arduino w/ USB cable Calipers Center punch Cork-backed ruler Dremel with cut-off-wheel attachment Drill Flush cutters Glue gun with glue sticks Heat gun Needlenose pliers Precision needle file set Precision screwdriver set File set Soldering iron Step drill bits Tabletop vice Third-helping-hand Wire stripper Download the attached .zip archive for the above list in 1) product-linked spreadsheet, 2) product-linked webpage, and 3) unlinked printable PDF form. beach buddy - supply list.zip65 KB Step 2: Assembly - Charger If you're using parts from Adafruit, you're in luck! Both the "solar charger" and "boom box" portion of this Instructable are derived from Adafruit tutorials. (If you've chosen other suppliers, the process should be similar.) Assembling the Charger First, read through the Solar Charging Handbag tutorial HERE. This is HUGELY IMPORTANT TO DO. While the solar charger procedures require very little modification, the MintyBoost charger should not be fully assembled. Notes below! You'll be following this tutorial up until the "Mint Tin Enclosure" stage. Now, follow the steps HERE to assemble the solar charger. Bend the huge capacitor over before soldering it to the board, so it'll lay flat inside the enclosure (as described here, and depicted in the first image above). I followed Method 2 (stripping and soldering the wires together) to attach the solar panel to the charging cable. I cut the alligator clips off the DC-to-alligator-clip cable, and installed the DC barrel jack to the solar panel. I chose not to install a thermistor or charge LEDs as mentioned in the PDF below; however, doing so would not negatively affect the Beach Buddy. Simply plan a spot for LEDs to be mounted on the project enclosure. Next, follow the steps HERE to mostly assemble the MintyBoost charger. DON'T SOLDER ON THE MINTYBOOST BATTERY HOLDER OR USB PORT. Solder on the JST battery cable that came with the solar charger instead of the battery holder (as mentioned here, and depicted in the second image above). Lay down the tall capacitors and boost converter before soldering, too, as mentioned in the link/shown in the image above. Ignore the instructions for incorporating the mint tin/housing the MintyBoost charger, since we'll be placing our device inside a larger enclosure. Do, however, hang on to the double-sided tape included with the kit! We'll need it to attach the MintyBoost circuit board to the project enclosure. From Adafruit: "Plug the MintyBoost into the LOAD port on the solar charger, and plug a lithium polymer battery into the BATT port. Test [with a multimeter] that your MintyBoost is putting out 5 volts, then unplug the MintyBoost and solder on the USB jack as instructed. All your cables and circuits should be detachable at this point. You should have something very similar to the third image above on your work surface, only with a USB jack attached to the Mintyboost board. Test your work! Plug your cell phone charger cord into the USB jack, the battery, Mintyboost, and solar panel into their proper ports on the solar charger, and take the assembly outside. You should see your phone's battery icon change to indicate it is in the process of charging. YAY you've completed approximately 1/6th of the Beach Buddy! Images (abc) borrowed from the Adafruit Learning System under a Attribution-Sharealike Creative Commons License. Download the attached .zip archive for the Adafruit tutorials in PDF form. beach buddy - adafruit tutorials.zip10 MB   For more detail: Beach Buddy: 3-in-1 Solar Phone Charger, Boombox, and Sunburn Timer Calculator ### Super Mega Ultra Pi Boy 64 Thingy Build Getting Started! I had recently bought an original Gameboy DMG from Good Will for a whopping $5.00, condition unknown.  Taking a gamble, I purchased it and took it home to find that it had severe damage caused by a battery that exploded and leaked all over the mainboard. I had also recently started looking on eBay for the elusive Gameboy Light.  It’s a system I have always wanted but could never allow myself to buy since they are pretty expensive on eBay.  The Gameboy Light is the Gameboy Pocket with an Indiglo light and was only released overseas in Japan.   I had bought a Raspberry Pi a while back and really didn’t know what I wanted to do with it.  At that moment, like a Reese’s Peanut Butter cup, it dawned on me – could the Raspberry Pi be used with a Gameboy? The Raspberry Pi is a small ARM based computer that fits in the palm of a normal adult hand.  The great thing about the Pi is that it has several ways to connect I/O for video, audio, network, USB as well as a direct I/O set of pins called the GPIO pins. After doing some research, I came to the conclusion that this project might actually be conceivable.  Everything I needed was there, it was a matter of getting things together and working out the hardware as well as software side of things.  That’s where this guide comes in.  It’s my attempt to pass on what I’ve learned as well as taking you through the various steps I took to make it a reality.  First off, the parts… The Parts List Hardware Pi Model B 3.5″ LCD Backup Screen Controller PCB 3 Watt Audio Amplifier Rear Buttons Power Switch Female to Male Micro USB Cable Broken Gameboy DMG (please don’t sacrifice a perfectly good working one) Software Retropie (Emulation) Retrogame Program (map GPIO to keys) Tools Tri-Wing Screwdriver for Gameboy Case Dremel Soldering Iron Solder Wire Cutters Electrical Tape Hot Glue Gun Electrical Wire Exacto Knife Patience… The Case The first thing that had to be done was to see if the Pi would even fit into the case.  I found that the Pi sits almost perfectly on the back case of the Gameboy.  The width of the Pi fits snug down the center of the case, but in order for it to fit, some modifications had to be done to the case itself. Using a Dremel, I cut out a most of the battery compartment as well as some posts that on the case for the LCD that would no longer be needed.  Doing so, the Pi sits flush with the back of the DMG case:   More detail: Super Mega Ultra Pi Boy 64 Thingy Build ### Reverse Engineer a Cheap Wireless Soil Moisture Sensor At the Maker Faire this year I got lots of questions about soil moisture sensors, which I knew little about. So I started seriously researching the subject. I found a few different soil sensors, learned about their principles, and also learned about how to make my own. In this blog post, I will talk about a cheap wireless soil moisture sensor I found on Amazon.com for about $10, and how to use an Arduino or Raspberry Pi to decode the signal from the sensor, so you can use it directly in your own garden projects. What is this? A soil moisture sensor (or meter) measures the water content in soil. With it, you can easily tell when the soil needs more water or when it’s over-watered. The simplest soil sensor doesn’t even need battery. For example, this Rapitest Soil Meter, which I bought a few years ago, consists of simply a probe and a volt meter panel. The way it works is by using the Galvanic cell principle — essentially how a lemon battery or potato battery works. The probe is made of two electrodes of different metals. In the left picture below, the tip (dark silver color) is made of one type of metal (likely zinc), and the rest of the probe is made of another type of metal (likely copper, steel, or aluminum). When the probe is inserted into soil, it generates a small amount of voltage (typically a few hundred milli-volts to a couple of volts). The more water in the soil, the higher the generated voltage. This meter is pretty easy to use manually; but to automate the reading you need a microcontroller to read the value. Resistive Soil Moisture Sensor Another type of simple soil sensor is a resistive sensor (picture on the right above). It’s made of two exposed electrodes, and uses the fact that the more water the soil contains, the lower the resistance between the two electrodes. The resistance can be measured using a simple voltage dividier and an analog pin. While it’s very simple to construct, resistive sensors are not extremely reliable, because the exposed electrodes can degrade and get oxidized over time.   More detail: Reverse Engineer a Cheap Wireless Soil Moisture Sensor ### Cutting Mylar Solder Stencils from ExpressPCB and EagleCAD Files In this post I’ll be going over how to cut out solder stencils for both ExpressPCB and EagleCAD designs on a laser cutter. I recently had a need to create some stencils from both of these programs and spent quite a bit of time at the Dallas Makerspace working with their laser cutter to get the settings just right. I’ll be cutting some designs that are mostly 0603/0805 package sizes, so don’t expect ultra-tight pitch stencils from this technique! What You’ll Need ExpressPCB or EagleCAD Software (If you’re doing any sort of serious PCB fabrication, or design really, then please stick to EagleCAD/Altium/OrCAD) ViewMate Gerber Viewing Software PDF Printing Software (such as PDFCreator) SketchUp, AutoCAD, or some other program that can view and edit .dxf files Laser Cutter – The one at the space is a Full Spectrum 120W CO2 model. Mylar Sheets (I used 5 mil sheets purchased via Amazon) The technique that I chose to cut these stencils is to use two sheets stacked on each other to create the stencil. The first sheet is your actual stencil, and the second is a sacrificial sheet which will catch the melted pads of the first sheet and allow you to pull them off cleanly when you separate them. The trick here is to expose the mylar to just enough heat so that the first sheet cuts clear through, but the second doesn’t. You also don’t want to apply too much heat since that will cause small sections of the mylar to melt. Exporting Files From PCB Design Software The first step in the process is to export your design from your CAD software. If using EagleCAD, use the cam file here to export your top and bottom cream layers (aptly named tcream and bcream) just as if you were exporting gerbers for manufacturing. If using ExpressPCB, use the “Export DXF Mechanical Drawing” option under the File menu.   For more detail: Cutting Mylar Solder Stencils from ExpressPCB and EagleCAD Files ### ISS Overhead The ISS Overhead is an ambient display that glows whenever the International Space Station is flying overhead. It is designed to act as an occasional reminder that there are people living and working in space! This project should take you somewhere between 2 hours to an afternoon to complete. It assumes you know how to solder, and are somewhat familiar with Electric Imp. If you haven't worked with Electric Imp before, I recommend you get a basic familiarity by working through Electric Imp's Getting Started Guide before completing this project. Let's get started! Step 1: Tools & Components Components: For this project, you are going to need the following components: 1x ISS Overhead Enclosure - http://www.ponoko.com/design-your-own/products/iss-overhead-v2-11701 1x April Breakout Board - http://www.adafruit.com/products/1130 1x Imp Card - http://www.adafruit.com/products/1129 1x DC Barrel Jack - http://www.adafruit.com/products/610 1x 5V 2A Power Supply - http://www.adafruit.com/products/276 9x NeoPixels - https://www.adafruit.com/products/1376 Total Cost: About $85 + Shipping Tools: You are also going to need the following tools and supplies: Soldering Iron, Solder, Wire Wire Strippers / Cutters Hobby Knife (optional, but helpful) Double Sided Foam Tape - http://www.amazon.com/Scotch-Mounting-5-Inch-75-I... Plastic Cement - http://www.amazon.com/Cement-For-Plastic-Value-Pa... Vellum Paper (optional) - http://www.amazon.com/Strathmore-Translucent-Vellum-inkjet-printers/dp/B000KNHRTE/ Step 2: Inlay the Clear ISS Insert The first thing we're going to do is inlay the clear acrylic ISS: Pop the ISS out of the black acrylic front piece. Use a hobby knife (or other fine object) so carefully push the clear ISS out of the acrylic* Lay the clear ISS into the black front piece, and spread some glue around the edges. * The ISS pieces are somewhat breakable, so be gentle. If you break the first one, don't worry - that's why we printed two of them! Step 3: Place and Solder the Electronics The next thing we're going to do is place our electronic components and solder them! Don't worry, there isn't anything too tricky in here. DC Barrel Jack: Screw the DC barrel jack on the back piece of the enblosure Solder two red wires to the lead connected to the back piece of the DC barrel jack Solder two black wires to the other two leads, then solder those two leads together. Placing the imp: Add a piece of double sided foam tape to the back of the April Board. Use the side panel with a slot in it to guide where the April board should be placed Remove the other side of the double sided tape, and affix the April Board.     For more detail: ISS Overhead ### Mini Pong arcade using Arduino Duinocade is a very small arcade cabinet (14cm / 5,5inch height). The software and parts of the circuit diagram based on the open source handheld Gamebunio, which based on the famous Arduino platform. The Gamebuino and also our Duinocade uses the known Nokia 5110 lcd as screen. At the moment the Gamedunio is an Indiegogo campain and will be official available in July. But some games for example Pong are finished by the Gamebunio community until now.... I've hacked not only the Gamebuino but also an Arcadie Dual gamedock for the case. It is much smaller as the Arcadie gamedocks of my other projects and also cheaper. The electronic is realized on a breadboard. In the future we will create a pcb layout and perhaps also a DIY kit. In contrast to the Gamebuino we don't have a lithium battery and an USB port. The Duinocade is powered by an external (wall) power supply. The electronic fits in the slot for the iPhone. We don't have to made mechanical modifications of the case except one additional hole for the power socket. We've mounted only an 3,3V power supply, the ATMEGA328 microcontroller, SD card socket and the Nokia LCD on this breadboard. Please visit my website for more information. Step 1: Tools & materials Tools: soldering iron electronic side cutter flat nose pliers simple drilling machine Materials: 1x Arcadie Dual gamedock 1x breadboard 160 x 100 mm 1x ATMEL ATMEGA328 microcontroller 1x 16MHz crystal 2x 15pF disc capacitor 2x 100nF disc capacitor 1x 220uF/25V electrolytic capacitor 1x 10uF/10V electrolytic capacitor 1x 10K resistor 1x 470 Ohm resistor 1x BC547C transistor 1x Nokia5110 lcd 1x Loudspeaker > 50 Ohm 1x push button for THT mounting 1x MCP1702-3302E/TO 1x 2x3 pole header 1x 8 pole ribbon cable & header tin-solder hookup wire double-sided adhesive tape Step 2: Disassemble the Arcadie enclosure Remove the both screws (behinde the stickers) at the right and left side of the enclosure Cut the cable between joystick unit and rear cover Remove the rear cover Remove the joystick unit Open the rear cover Remove all electronic and mechanical parts inside the rear cover drill an 7mm hole to the rear cover Step 3: Remove all the stickers outside remove the stickers outside the main enclosure, of the backside from rear cover and from the joystick unit. I'm using a label removing spray based on citric acid.   For more detail: Mini Pong arcade using Arduino ### Arduino Solar Charge Controller (PWM) In my previous instructable, I described the details of energy monitoring of an off-grid solar system. I have also won the 123D circuits competition for that. You can see this ARDUINO ENERGY METER. Please vote for me..... In solar power systems, the charge controller is the heart of the system which was designed to protect the rechargeable battery. In this instructable, I will explain the PWM charge controller. In India, most of the people are living in rural areas where the national grid transmission line is not reached till now. The existing electric grids are not capable of supplying the electricity needed to those poor renewable energy sources ( photo voltaic panels and wind-generators) are the best option I think. I know better about the pain of village life as I am also from that area. So I designed this DIY solar charge controller to help others as well as for my home. You can't believe it, my homemade solar lighting system helps a lot during the recent Cyclone Phailin. Solar power has the advantage of being less maintenance and pollution free but its main drawbacks are high fabrication cost and low energy conversion efficiency. Since solar panels still have relatively low conversion efficiency, the overall system cost can be reduced using an efficient solar charge controller which can extract the maximum possible power from the panel. What is a Charge Controller? A solar charge controller regulates the voltage and current coming from your solar panels which is placed between a solar panel and a battery. It is used to maintain the proper charging voltage on the batteries. As the input voltage from the solar panel rises, the charge controller regulates the charge to the batteries preventing any overcharging. Types of Charge controller : 1. ON-OFF 2. PWM 3. MPPT The most basic charge controller(ON/OFF type) simply monitors the battery voltage and opens the circuit, stopping the charging, when the battery voltage rises to a certain level. Among the 3 charge controllers, MPPT has the highest efficiency but it is costly and needs complex circuits and algorithms. As a beginner hobbyist like me, I think the PWM charge controller is best for us which is treated as the first significant advance in solar battery charging. What is PWM: Pulse Width Modulation (PWM) is the most effective means to achieve constant voltage battery charging by adjusting the duty ratio of the switches ( MOSFET ). In the PWM charge controller, the current from the solar panel tapers according to the battery’s condition and recharging needs. When a battery voltage reaches the regulation set point, the PWM algorithm slowly reduces the charging current to avoid heating and gassing the battery, yet the charging continues to return the maximum amount of energy to the battery in the shortest time. Advantages of PWM charge controller : 1. Higher charging efficiency 2. Longer battery life 3. Reduce battery overheatingvb 4. Minimizes stress on the battery 5. Ability to desulfate a battery. This charge controller(6/12/24v and 5A) can be used for : 1. Charging the batteries used in solar home system 2. Solar lantern in rural area 3. Cell phone charging I think I have described a lot about the background of the charge controller.let starts to make the controller. Like my earlier instructables I used ARDUINO as the micro controller which include on-chip PWM and ADC. Step 1: Parts Required : 1. ARDUINO UNO ( Amazon ) 2. 16x2 CHARACTER LCD ( Amazon ) 3. MOSFETS (IRF9530, IRF540 or equivalent) 4.TRANSISTORS(2N3904 or equivalent NPN transistors ) 5. RESISTORS (Amazon / 10k ,4.7k,1k,330ohm) 6. CAPACITOR( Amazon / 100uF,35v) 7. DIODE( IN4007 ) 8. ZENER DIODE 11v (1N4741A) 9. LEDS( Amazon / Red and Green) 10. FUSES ( 5A) AND FUSE HOLDER ( Amazon ) 11. BREAD BOARD ( Amazon ) 12.PERFORATED BOARD ( Amazon ) 13. JUMPER WIRES ( Amazon ) 14. PROJECT BOX 15.6 PIN SCREW TERMINAL 16. SCOTCH MOUNTING SQUARES ( Amazon ) Tools : 1. DRILL ( Amazon ) 2. GLUE GUN ( Amazon ) 3.HOBBY KNIFE ( Amazon ) 4. SOLDERING IRON ( Amazon ) Step 2: Charge Controller Circuit I divide the entire charge controller circuit in to 6 sections for better understanding 1.Voltage sensing 2. PWM signal generation 3. MOSFET switching and driver 4.Filter and protection 5. Display and Indication 6. LOAD On/OFF Step 3: Voltage Sensors The main sensors in the charge controller is voltage sensors which can easily implemented by using a voltage divider circuit.We have to sense voltage coming from solar panel and the battery voltage. As the ARDUINO analog pin input voltage is restricted to 5V, I designed the voltage divider in such a way that the output voltage from it should be less than 5V.I used a 5W (Voc=10v)solar panel and a 6v and5.5Ah SLA battery for storing the power .So I have to step down both the voltage to lower than 5V.I used R1=10k and R2 =4.7K in sensing both the voltages(solar panel voltage and battery voltage). The value of R1 and R2 can be lower one but the problem is that when resistance is low higher current flow through it as a result large amount of power (P = I^2R) dissipated in the form of heat. So different resistance value can be chosen but care should be taken to minimize the power loss across the resistance. I have designed this charge controller for my requirement(6V battery and 5w,6V solar panel),for higher voltage you have to change the divider resistors value.For choosing the right resistors you can also use a online calculator In code I have named the variable "solar_volt " for voltage from the solar panel and "bat_volt "for battery voltage. Vout=R2/(R1+R2)*V let panel voltage = 9V during bright sunlight R1=10k and R2=4.7 k solar_volt =4.7/(10+4.7)*9.0=2.877v let the battery voltage is 7V bat_volt = 4.7/(10+4.7)*7.0=2.238v Both the voltages from voltage dividers are lower than 5v and suitable for ARDUINO analog pin ADC Calibration : lets take a example : actual volt/divider output= 3.127 2.43 V is eqv to 520 ADC 1 is eqv to .004673V Use this method to calibrate the sensor. ARDUINO CODE : for(int i=0;i<150;i++) { sample1+=analogRead(A0); //read the input voltage from solar panel sample2+=analogRead(A1); // read the battery voltage delay(2); } sample1=sample1/150; sample2=sample2/150; solar_volt=(sample1*4.673* 3.127)/1000; bat_volt=(sample2*4.673* 3.127)/1000; For ADC calibration refer my previous instructables where I have explained in depth . Step 4: Pwm Signal Generation : PWM (pulse width modulation) is a tecnique by which we simply control a digital output signal by switching it on and off very quickly, by varying the width of the on/off duration, it will give the effect of varying the output voltage. Vout = Ton/(Ton+Toff)*Vin Time period (T)=Ton+Toff So Vout=Ton/T*Vin Where Ton/(Ton+Toff) *100 or Ton /T *100 is called Duty Cycle See the above examples graph (I have taken from Arduino website) for better understanding. PWM enables a digital output to provide a range of different power levels, similar to that of an analog output. The best example is fading a LED with different light intensity.This can be done by arduino, using the analogWrite() function. As Analog output pin is 8bit we can get maximum 2^8=256 or a range of values between 0 to 255. Sending the value 255, to the LED input produces 100% duty-cycle, which results in full power on a PWM pin. Sending the minimum value 0, to the LED input produces 0% duty-cycle, which results in no power on a PWM pin. In Arduino there are 6 PWM pins (3,5,6,9,10 and 11) I used pin 6 (timer 0) for generating the PWM signal. Arduino Clock has maximum frequency of 16MHz,this can be reduce by using the prescaler. By default Arduino PWM pin have prescaler = 64. So in pin -6 ,I will get a PWM of frequency 976.5625 Hz by default.But this frequency is quite high for battery charging.So I decided to reduce this frequency to a lower one( 61.035Hz ) by choosing the prescaler value 1024. Note : I used this frequency because I found that maximum PWM charge controller available in the market have frequency 25/50/100Hz. I don't have much expertise in this field.If any one have good expertise in battery charging ,please comments about the right frequency selection for PWM .So that I will modify my code. How to change the Arduino PWM frequncy : You can adjust the PWM frequency by changing a register value.The register associated with this is TCCR0B. By selecting three Clock Select Bits of TCCR0B register we can set the proper prescaler. Are you thinking it is difficult ? No its very very simple just place the single line code given bellow in your program's void setup() part.Everything is done.I check this by testing the fade example code given in Arduino IDE,it will generate 61Hz. TCCR0B = TCCR0B & 0b11111000 | 0x05 ; // prescaling 1024 For more details to set the PWM frequency click here Step 5: How to Choose MOSFETs: In my charge controller I used two MOSFETs one is for controlling the power flow from solar panel to battery and other is to drive the load.When I started working with MOSFET ,little bit confused how to select a right one.After reading so many forum I found that it is so easy.I think any one can choose the MOSFET by using few guidelines.These are the few important parameters which you will need during choosing a right MOSFET. Note : I designed the charge controller as per my requirement ,you have to choose the MOSFETs according to your system requirement.The charge controller rating is mostly depends on MOSFET rating.So choose carefully. 1. N or p channel : when a MOSFET is connected to ground and the load is connected to supply voltage, it is considered to be a low-side switch. In a low-side switch, an n-channel device is used.In my charge controller I used IRF 540 for driving the load. A high-side switch is used when the MOSFET is connected to the supply voltage and the load is connected to ground. A p-channel MOSFET is usually used in this topology .I used IRF 9530 as the main switching MOSFET for PWM. See the schematics how load is connected in both the cases. 2. Drain Source Voltage Vds : When the MOSFET is turned off, the whole supply voltage will be measurable across it, so this rating should be larger than your supply voltage to provide sufficient protection so that the MOSFET does not fail. The maximum voltage a MOSFET can handle varies with temperature. 3.Continuous Drain Current Ids : This is the amount of current the MOSFET can handle.You need to simply select the device that can handle the maximum amount of current including surges or "peaks".Current rating also decreases with rise in temperature. So keep sufficient margin in Ids.It is better to take current rating @ 125deg Cel. 4. RDS(on) : When a MOSFET is "on," it acts as a variable resistor determined by the RDS(on) that changes with temperature with a power dissipation calculated by Iload2 x RDS(on). So choose a MOSFET with smaller value of RDS(on). 5. Thermal Loss: It can be found from datasheets : the maximum junction temperature and the thermal resistance from junction-to-ambient for the package. The device's junction temperature is equal to the maximum ambient temperature plus the product of the thermal resistance and the power dissipation (Junction Temperature = Maximum Ambient Temperature + (Thermal Resistance x Power Dissipation) ). 6. Gate Threshold Voltage VGS(th) : This is the minimum voltage required between the gate and source terminals to turn the MOSFET on. It will need more than this to turn it fully on. 7. Switching Loss : Charging and discharging the gate capacitance(Cgs) contributes to the switching losses. This loss also depends on the switching frequency.Losses increased with higher switching frequency and gate to source capacitance. Apart from this , there are several other parameters you have to consider for a good design.For us I think it is sufficient. For more details on how to choose a right MOSFET click here Power MOSFET has limitations operation in terms of voltage, current and power dissipation. The power MOSFET current rating is related with the heat dissipated in the devices. This rating will be take in consideration for designing appropriate circuit to protect power MOSFET against high voltage and current, thus cause heat generation. I used a p-channel MOSFET (IRF9530) for switching between solar panel and battery and a n-channel MOSFET (IRF540) for load. For higher rated system you have to choose the MOSFET accordingly. Step 6: MOSFET Drivers What is a MOSFET driver : A gate driver is a power amplifier that accepts a low-power input from a micro controller and produces a high-current drive input for the gate of a high-power MOSFET. why you need a MOSFET driver : MOSFETs have a large stray capacitance between the gate and the other terminals,which must be charged or discharged each time the MOSFET is switched on or off. As a transistor requires a particular gate voltage in order to switch on, the gate capacitor must be charged to at least the required gate voltage for the transistor to be switched on. Similarly, to switch the transistor off, this charge must be dissipated, i.e. the gate capacitor must be discharged. When a transistor is switched on or off, it does not immediately switch from a non-conducting to a conducting state; and may transiently support both a high voltage and conduct a high current. Consequently, when gate current is applied to a transistor to cause it to switch, a certain amount of heat is generated which can, in some cases, be enough to destroy the transistor. Therefore, it is necessary to keep the switching time as short as possible, so as to minimize switching loss Therefore the circuit that drives the gate terminal should be capable of supplying a reasonable current so the stray capacitance can be charged up as quickly as possible. The best way to do this is to use a dedicated MOSFET driver . There are dedicated chip available in the market for MOSFET driving but it is costly.I used a simple MOSFET driver by using a NPN general purpose transistor.I used 2N3904 but you can use any general purpose transistors like 2N2222 or BC547 etc. Step 7: Filter and Protection : Filter : The capacitor(C1) used after the solar panel at the input side is used as filter which removes any unwanted ripple/noise signal. I used a 100uF, 35V. Optional : You can also put a capacitor in the load side also.For a better voltage sensor you can use a 0.1uF ceramic capacitor across the R2 and R6. Protection : Protections are provided in the charge controller to protect against extreme and abnormal operating condition. In commercial charge controller there are so many protection.But in my charge controller all are not included. Following protection are used : Over Voltage Protection: During lightening and thundering over voltage occurs in the system.To protect the system a zener diode is used. I used a 11V zener diode as my solar panel open circuit voltage is 10v. When the voltage is more than 11v ,it will provide the ground path to the surges. Protection to over current : Two fuses F1 and F2 are used for over current protection.One is at the incoming side i.e after the solar panel and other is before the load. I forgot to show in the first schematics. Refer my updated schematics where I put the fuses. PV panel reverse current : During night battery voltage is higher in compare to solar panel voltage(0 V).So power can be flow in the reverse direction .This avoided by using a diode(D1) after the solar panel. Auto Load Disconnection : To avoid deep discharging of battery ,auto load disconnection scheme is implemented through the software.When the battery voltage is falls below a certain voltage (6.2V)load is automatically disconnected. Overcharge protection : Over charge protection is given to improve the battery life and prevent from overheating .When the battery voltage is greater than the fully charged voltage(7.2v) ,it is disconnected from the solar panel to avoid further charging.This is also implemented through the software. Step 8: Display and Indication System status display on LCD: A 16X2 char LCD is used for monitoring solar panel voltage and battery voltage.It also show the % of charge. When the battery condition is dead it will display :"BATTERY IS DEAD!!" and when battery is discharged it will display "BAT DISCHARGED.." LED indication on system condition : 2 LEDS (RED,GREEN) are used for indicating the system condition RED LED will glow when battery is discharged ( < 6.2 V) GREEN LED will glow when fully charged (> =7.2 V) and will blink during charging. When battery voltage is less than 6.2V but greater than 6V RED LED will glow indicating battery is discharged and GREEN LED will blink indicating battery is charging. LCD -> Arduino 1. VSS -> Arduino GND 2. VDD -> Arduino +5v 3. VO -> Arduino GND pin + Resistor or Potentiometer 4. RS -> Arduino pin 12 5. RW -> Arduino pin 11 6. E -> Arduino pin 10 7. D0 -> Arduino - Not Connected 8. D1 -> Arduino - Not Connected 9. D2 -> Arduino - Not Connected 10. D3 -> Arduino - Not Connected 11. D4 -> Arduino pin 5 12. D5 -> Arduino pin 4 13. D6 -> Arduino pin 3 14. D7 -> Arduino pin 2 15. A -> Arduino Pin 13 + Resistor (Backlight power) 16. K -> Arduino GND (Backlight ground) If you need more information about LCD interfacing click here Step 9: How the Charge Controller Works : Lets starts to understand the schematics given above: Power is coming from the solar panel through the diode(D1). A zener diode (D2) is placed at the input terminal to suppress the over voltage. Capacitor C1 is used to remove any unwanted noise/spikes.Then the voltage divider(R1 and R2) is used to sense the solar panel voltage.The out put from the voltage divider goes to Arduino analog pin A0. The power coming from the solar panel can't goes directly to battery until the Mosfet(Q1) is On.The switching of the mosfet is done by a PWM signal from Arduino pin-6.Transistor T1 and associated resistance R4 is used for driving the Mosfet(Q1).The resistor R3 is used as a pull up resistor for gate.When the Mosfet is On power goes to battery and charging process starts. The second voltage divider circuit (R5 and R6) is used for sensing the battery voltage.The output of voltage divider goes to Arduino analog pin A1. The second Mosfet Q2 is used to drive the load and second transistor T2 is used for driving the Mosfet. During night load will automatically turned on by turning the MosfetQ2 on and will removed when battery voltage is low or day time. Fuses F1 and F2 are used for over current protection. LED1(RED) and LED2(GREEN) are hooked to digital pin 7 and 8 of the Arduino for indication.The resistor R7 and R8 are used for limiting the current goes to LEDs. If you want to use a relay instead of MOSFET Q2 you can.The schematics -2 is given for relay connection. How Software Works : At first the charge controller will check the solar panel voltage and compare it with battery voltage ,If it is greater then the Arduino will starts sending pulse width modulation(PWM) signals to the mosfet(Q1) in order to charge the battery .When the solar panel voltage was below the battery voltage ,this pwm signals will not send by Arduino . Then next the micro controller will check the battery voltage ,if the battery voltage was below 6.96 v volts then the battery will be charged in boost mode ,that mean the battery will be charged with maximum amperage ,this boost mode of charging will be done by sending pulse width modulation signals with 95% duty cycle . when the battery voltage reaches above 6.96V the charging mode will turn as absorption mode from boost mode ,this was done by changing the duty cycle from 95 % to 10%.This absorption mode will keep the battery fully charged. A pulse will be send to the load mosfet(Q2) to enable the load during night ,if the battery was too low and reaches to 6.2v volts then in order to prevent deep discharge of the battery ,the load will disconnected. The arduino code can be Download from my GitHub Account ARDUINO-SOLAR-CHARGE-CONTROLLER-V-1 Step 10: Solder the Circuit After testing the circuit on a bread board,solder everything on a perforated board. * clean the copper part of board * place the components suitably * Hold it by using a vice * solder one by one as per schematics * trim the long legs of all components * solder 6 wires for terminal connections.(2 for solar panel input,2 for battery and 2 for load) Step 11: Make the Final Product (CHARGE CONTROLLER) After making the controller on a perforated board place everything in a project box.I did not have any project box,so used a plastic box found in my kitchen. 1 . Mark the size of LCD by a marker or pencil 2. Cut it by a hobby knife. I used my leatherman ES4 which was given by Instructables. 3. Make 2 holes by a drill just below the LCD for inserting 2 LEDS.I used my DREMEL 3000 for drilling. 4 . Hold the 6 pin connector and mark the screw holes ,drill on the marked portion. 5.Drill a big hole for mounting the fuse.solder two wires for connection with the controller. 6. Drill few holes on the side wall of the project box for ventilation. 7. Place the LCD,LEDs, and connector in their place. Then glue it by a hot glue gun.I used my DREMEL glue gun. 8. Put the ARDUINO and Controller inside the box side by side. 9. Put a 9V battery just side to the Arduino for powering it.I used SCOTCH mounting squares for holding. 10.Connect the jumper wires appropriately and test it Note : put heat shrink or any other insulation tap at all the bare conductors. Congratulation !!! now the charge controller is ready for charging the battery. I request viewers to give suggestion for improvement.If you find any mistake please raise it in comment section so that I will rectify it.Any one can modify my code,but please send a copy to me also. I have described the two major part of the off grid solar system(energy meter,charge controller),only one thing left i.e inverter part.In future if possible I will write on it.just follow me for further updates. Soure: Arduino Solar Charge Controller (PWM) ### DSLogic – Multifunction Instruments For Everyone What is DSLogic? Most of electronic instruments are designed in professional fashion. They are dedicated, traditional, well functioned, and most importantly, expensive. They are usually only available and affordable to academic and industry. Individuals, however, are not lucky enough to get the best electronic instruments as they want. This is how we are inspired to make DSLogic. After extensive research on the principles of professional electronic instruments, such as Logic Analyzer, Oscilloscope, DAQ, etc., we realized that many of them have the same core circuit unit – the sampling and storage circuit. DSLogic consists of DSLogic-Core and extension modules. DSLogic-Core is a re-configurable circuit board based on FPGA technology with maximum 200MHz sampling rate and 64Mbit on-board memory. DSLogic-Core can work alone as a fully functional logic analyzer, along with various extension modules.DSLogic can also work as oscilloscope, data acquisition system, protocol analyzer and even RF analyzer. Traditional electronic instruments are limited to capture electronic signals. However we believe people need a more creative tool to discover the world, so we also made a special wireless extension module and corresponding wireless probe that is compatible with Arduino board. All you need to do is to connect the probe to existing Arduino sensors, and then DSLogic would automatically capture the sensor data, and visualize them on your computer at real-time without any additional efforts. With this functionality, you will be able to use the Arduino probe to discover the real world, including: physical inputs, such as temperature, humidity, light, sound, magnetic; abstract physical variables, such as distance, speed, accelerometer, force; and even biological signals, such as heartbeat, emg, brainwave, etc Why DSLogic? Fully functional and low cost USB-based logic analyzer There are already many USB-based logic analyzers in the market, such as professional LAP-C (162000+) from Zeroplus, well-designed Logic16 from Saleae, and low-cost Open Workbench Logic Sniffer from Dangerous Prototypes. However, they are either lack of functions or with high cost. DSLogic is DIFFERENT! You will know DSLogic through the comparison of Sample depth, Sample bandwidth and Price, the most important parameter of logic analyzer. *The price of LAP-C(162000+) was captured from Amazon: http://goo.gl/6GqvZa Check out the complete comparison between DSLogic and other logic analyzers as followed.  With the same features that LAP-C(162000+) supports, DSLogic is more than 90% cheaper. Open Source and Extensible We've benefited tremendously from the open source community, so in return, we would like to benefit other people as well.DSLogic is a completely open sourced product. All of our design files(software/firmware source code, schematic diagrams, board designs, and bill of materials) will be open source.   For more detail: DSLogic – Multifunction Instruments For Everyone ### Interactive Stereoscopic Installations: visual rupture with the Diplopiascope What is it? This is an ongoing project that i've been working on to see the potential of interactive stereoscopic installations in examining the perceptual process. I use a setup that i've called a Diplopiascope to investigate this. The Diplopiascope has gone through a few changes but basically it is a stereoscopic viewer that allows the viewer to control the images they are being shown through an analog device. How does it work? Stereopsis is the perception of depth through an object being seen with both eyes. Due to the horizontal separation of the eyes, two slightly different views of the same scene are shown to each retina. This information, along with several other cues, is used by the brain to calculate depth. This effect is simulated in the Diplopiascope by presenting stereoscopic films or images to the left and right eyes via projectors or monitors. The viewer is seated and views the images simultaneously through a mirrored viewing device. I was interested to see what happens when we present different views to each eye at the same time. This is called binocular rivalry. What happens if we show the same scene at different times? What about greatly different viewpoints of the same object? What if the viewer is put in control of what they see through some physical controls? This tutorial is more a guide to making the viewing apparatus for experimentation than a physiological explanation of stereopsis itself, and it doesn't go into much detail about how to make stereoscopic films as there is already lots of great information about this online. Here are two videos of the Diplopiascope being used. The designs are slightly different but the idea is the same. The videos of the drummer used in the installation above were shot with two cameras from a fixed position. The videos were then looped and projected independently. The videos are viewed through a mirrored viewing device, the left eye being shown the footage from the left camera, the right eye the footage from the right. (In actual fact, the videos are inverted horizontally due to being seen through mirrors. To counter this,  the videos were inverted horizontally in the projector settings). Due to the videos being ever so slightly different lengths (about 100 milliseconds), when looped they become increasingly out of synch. Because of this,  while the stationary objects in the video (the drum set, wooden frame, cones, walls, etc.) are seen in crisp stereoscopic 3D, the moving objects (the drummer, people, etc.) will be seen in double. This produces a strange effect as the brain switches uncontrollably between which information it perceives, jumping randomly from the left eye to the right dominating perception. What it looks like is difficult to explain, but the moving objects take on a very strange phantom-like presence in the realness of their solid stereoscopic surroundings. While the majority of the field of view remains fixed in pleasant 3D, the figure of the drummer seems to jump in and out of time frames and consciousness itself. The speed and direction of the videos are controlled by the viewer through an analog device connected to the PCs via arduinos. There are two speakers, one from each PC, and the audio matches the videos and is also controlled by the dials. The video above shows a slightly different version of the installation. The principle behind the viewing method remains the same, but one difference is the actual videos being show. In the first example, the videos were shot stereoscopically from a fixed position. In this case, the videos were shot using a mobile camera rig (detailed later). The rig is designed so that it can break apart and come together again seamlessly. By filming along two long pathways of shrine gates, I wanted to see what happened if the left camera (left eye) went down one path and the right camera (right eye) down the other. The left and the right pathways in the video are very similar, but not identical. Would our brains be able to compensate for the little differences in the scenes we see? Would we perceive a unified view of one solid pathway, or would it just give us a headache? Again the speed and direction of the videos are controlled by dials so the viewer can adjust the images they are being shown. By doing this they are able to play around with uniting and rupturing their visual perception. Step 1: Project parts Major Components in Project Hardware To make the films: Identical camcorders/ videocameras (x 2). I used JVC Everio camcorders that I bought in Japan from an online discount shop for around 14000 Yen ($140) each. Analogue inputs: I used 2 potentiometers for these projects but other sensors could be more interesting. I attached dials to the tops. Arduino Uno (x 2) Displays: Identical monitors or projectors (x 2). These can be very expensive so it’s always best to borrow them. Laptop (x 2). It is possible to use only one macbook with a Matrox DualHead2Go to send output to 2 displays but it starts to get a bit messy with two arduinos running on one macbook or two analog signals going to one arduino. Max/MSP starts to get a bit heavy too. Viewing device: 2 mirrors set at 90 degrees. I used cheap circular ones from the 100 Yen shop. Software Arduino (free) Max/MSP (free 30 day trial available from the website) SleepLess (This is for display purposes only. It allows you to close the macbook lid but continue to run the programs). I was using two different macbooks and had to use different SleepLess versions on each. I used version 2.8.3 on the Lion 10.7.5 and version 2.6.2 on the Leopard 10.5.8. There are various disclaimers on the SleepLess download about the risk of overheating, so it's probably best to have a look at those. I ran the PCs for 8 hour stretches over a week or so without a problem. Step 2: Making the stereoscopic films There are a number of different ways to make stereoscopic films, but because my interest is in showing slightly different images to each eye, rather than just a finished stereoscopic film, there is no need to use an expensive stereoscopic camera. I found these cheap JVC camcorders did the job just fine. I built a simple frame out of 1cm MDF board with holes drilled through the bottoms to attach the cameras with bolts. They were fixed with the centre of the lenses 7cm apart to reproduce the distance of the eyes (the binocular parallax). This is the basic frame and can be used for simple projects. If you want to experiment further with divergence and convergence of the images then you may want to be able to separate the cameras at one point, while continuing to record, and then bring them back together again seamlessly. In this way I hoped to further simulate binocular rivalry. To do this I cut the rig in half down the middle and built in some steps that can be pulled apart and brought back together again with the aid of metal guides made out of brackets. I attached iphones to the backs of each half of the rig. By running a spirit level app on the iphone it is possible to keep both cameras pretty much level while they are split and filming independently. As mentioned in the intro, I made a few different pairs of stereo videos to see what was interesting. However you decide to shoot the videos (from a fixed position, moving around holding the rig, splitting the rig, etc), once they are recorded you should transfer the files to the PCs: the data from the left camera goes to the PC that will show the information to the left eye, the data from the right camera goes to the PC that will show the information to the right eye. If you want to use some videos I made using the split-rig idea as a test, they are available to download here. There are two videos in the folder. "L3 show.mp4" is the data from the left camera, "R3 show.mp4" is from the right. Remember that you need to take into account horizontal inversion because you are seeing the images through mirrors. To counter this, you must either put the data from the left camera onto the right PC and the data from the right camera onto the left PC (and view the videos in an inverted state), or invert the videos either on the PCs, monitors or projectors. There are many great designs for stereoscopic camera rigs that can be found online. This was the cheapest, simplest, and most practical that I could think of. I'm sure there are far better designs for mobile filming so if anyone has any advice i'd love to get your feedback. Step 3: Making the viewer The viewer is a very simple device made of two mirrors set at an angle of 90 degrees to each other. When looked at straight-on, you are able to look in two totally different directions without discomfort. There are many ways to make the device. I wanted something simple that wouldn't distract the viewer from the videos. I used two 90 degree brackets welded together to make the main part of the frame. I then attached the mirrors using a combination of industrial strength double sided tape and hot glue. I used threaded rods and bolts to secure the device either below or above. I used 4 threaded bolts to prevent any wobbling from back to front or side to side. Much simpler viewers can be made using two rectangular mirrors placed together at 90 degrees. In fact, there are many ways of viewing stereoscopic images using lenses, anaglyph/ polarised glasses, or HMDs. I like using mirrors as there is no "black box"; the mechanism is transparent and doesn't distract from experience itself. Step 4: Making the analog input devices Now we are going to make the dials to control the video speed and directional playback. I made two controls, one for each hand, to control the information going to each eye. I used two cheap potentiometers (pots) from the electronics shop and attached dials to the tops. The pots have 3 pins. Attach and solder lengths of jump wire to each pin. The left pin (when the pins are pointed away from you) goes to the arduino 5V, and the right pin goes to arduino ground (GND). The central pin is the output and this goes to the analog input pin of your choice on the arduino.  For the Max/MSP patch that comes later I used analog pin 19 (A5). If you use a different pin on the arduino then you will need to go into the patch and change the settings. This is a good reference for connecting analog reads. The photographs above are best not used as references when working out which pot pin goes to which arduino pin because there are several different colours of wire soldered together (I ran out of wire).  For display purposes, you can either thread the wires through the table (or whatever you are using) before connecting them and attach the arduinos underneath with screws, keeping them hidden from view, or simply leave them out on top. I fixed the pots by cutting out circular holes in the wood at positions comfortable to reach with both hands while seated. Hot glue is good to hold them in place. This is the part of the project that interests me the most: where physical interaction on behalf of the viewer generates a change in perception. This is the first time i've used arduino to convert analog input to digital output, and the analog device is very crude, but I think there are lots of interesting possibilities. If anyone has any good ideas for others sensors that might be interesting i'd be really grateful for feedback. I thought about maybe using an accelerometer to make a device that requires movements more appropriate to the content of the video. In the case of the drummer, for example, could accelerometers attached to drum sticks work as the analog input? Step 5: Setting up the Arduino and making it talk with Max/MSP After wiring up the arduino with the analogue device, as described in the previous step, it's time to move onto the software. We are going to use Max/MSP to receive the analog signal and convert it to digital to control the video playback. To do this, we need to upload an arduino code and a Max patch. Get the software First, make sure you have downloaded and installed the arduino software and have a version of Max/MSP (you can get a free 30 day trial). I'm using Max6 but 5 works too, below that i'm not sure but I don't see why not. There are many different ways to get the arduino and Max talking to each other. I found that the simplest is called "ArduinoMax_InOut_forDummies". Maxuino seems like a great open source project with a healthy forum community but I couldn't get it to run smoothly. Any advice here would be much appreciated! Download the arduino code and Max patch in the "diplopiascope.zip" folder here. (The original file that my patch is based on is available for download at the bottom of the Arduino Playground page). There are 3 files in the folder: 1. "arduinoMaxinOutforDummies.ino": this is the arduino code to make it talk to Max. 2. "diplopia.maxpat": this is the the max patch that we will use to receive the signal from the arduino and control the video playback. It is based on the original ArduinoMax_InOut_forDummies patch. 3. "ArduinoMaxinOutDummyCom01.maxpat": this is the setup for the max patch and needs to stay in the folder along with the "diplopia.maxpat" file for the patch to work. The Max patch that I developed uses a max external to give smoother values from the analog input. This needs to be downloaded from here and then installed as described in the "info.txt file" in the folder. All of the above steps need to be done on both PCs. Upload the arduino code Connect the arduinos to the corresponding PCs via USB cables. Open the "diplopiascope" folder and upload the arduino code "arduinoMaxInOutforDummies.ino" onto each arduino. The message "done uploading" should be displayed in the arduino window.   For more detail: Interactive Stereoscopic Installations: visual rupture with the Diplopiascope ### DinoCalc Version 1.0 (Arduino Pro Mini Protoboard Version) Latest Release:  http://code.google.com/p/dinocalc/ Development:      https://github.com/WeaselJones/DinoCalc This is a calculator without a LCD that tells you if your math answer is right or wrong, without giving you the answer.  This instructable will show you how to make this simple math checking calculator using "off-the-shelf" items. [UPDATE:  A TUTORIAL SHOWING HOW TO CREATE YOUR OWN CUSTOM INLAY GRAPHIC IS NOW INCLUDED! ALONG WITH A NEW GRAPHIC FOR GIRLS TO USE INSTEAD OF THE DINOSAUR.  CHECK OUT APPENDIX A AND B AT THE END OF THIS INSTRUCABLE!] When I was younger I had a calculator that did not have a LCD display but instead had two LED lights, one green and one red.  You would enter a math problem with what you thought the correct answer was.  If your math problem was for example, 12 + 12, you would enter on the keypad:  12+12 = 24, and then press the "?" key.  If your answer was right then the green LED would light up, if your answer was wrong, the red LED would light up. This is my salute to that toy from my childhood, as well as a great way for me to engineer and program a neat little project that my preschool son can actually use to check his simple math. This first version will document the prototype that I have built. My first objective was to create a calculator capable of just adding and subtracting using off the shelf items. I plan on starting with an Arduino Pro Mini for the developmental and prototype stage and  I will then move on to a final version that has a lower cost and device count (ATmega328P on a custom PCB). The way the calculator will work is: 1) User enters: a Number, (for example, 12) then a math operator, (let's pick addition, +) then a Second Number, (let's add 13 to our first number) then press the equal sign, (=) then the user enters what he (or she) believes the answer to be, (let's guess 22) then press "?" to see if you're right or wrong! 2) Microprocessor then calculates the correct answer. In our case, 12 + 13 = 25. So the Calculated correct answer is 25.  This answer is just stored in memory and not shared with the user. 3) Microprocessor compares the calculated answer to the user's guessed answer. If they are not equal then the microprocessor turns on the red LED. If they are equal then the microprocessor turns on green LED. We guessed 22, so 22 is not equal to 25 so the RED LED LIGHTS UP! Notes and Limitations: 1) Only one math operation is currently supported (ie, 12+12 or 12 - 12 will work, but 12+12+12 or 12+12-12 will not) 2) Negative numbers will work (ie, -12 + -12 or -12 - -12 will work) 3) Large numbers will work (ie, 123456789 + 8765 will work) 4) Decimal Numbers will work (ie, 12.1 +12.2 will work) 5) I made this for my preschool son, so right now the only math operators currently supported is addition and subtraction.  Multiplication and Division will be easy to add in the near future. 6)  The last limitation is your imagination.  Just because I did something one way, don't be afraid to change it to work for you! TIP:  TO COMPLETE THIS PROJECT THE BUILDER WILL NEED TO HAVE EXPERIENCE WITH SOLDERING AND USING THE ARDUINO IDE. THERE ARE MANY TUTORIALS ON USING THE ARDUINO IDE ON INSTRUCTABLES AND AT HTTP://ARDUINO.CC.  IF YOUR EXPERIENCE IS LIMITED, I RECOMMEND BUILDING THIS PROJECT FIRST ON A BREADBOARD, AS SHOWN IN THE OPTIONAL STEP 5, SO THAT THE BUILDER CAN BECOME MORE FAMILIAR WITH THE DINOCALC SOFTWARE AND PROGRAMMING OF THE ARDUINO PRO MINI. AND WHILE THIS PROJECT ISN'T COMPLICATED TO SOLDER YOU MIGHT NOT WANT THIS TO BE YOUR FIRST SOLDERING EXPERIENCE.  IF YOU'VE NEVER SOLDERED BEFORE THERE ARE MANY "LEARN HOW TO SOLDER KITS" THAT YOU CAN PRACTICE AND LEARN ON FIRST.  SUCH AS:  Elenco AmeriKit Learn to Solder Kit. Step 1: "How do you eat an Elephant?" TIP:  Even a small project can be overwhelming and risks not being finished if you try and do too much at once.  Instead, establish some goals and guidelines and work to meet them one step at a time.  You'll feel better after each achievement and it helps to prevent your project from winding up in some storage box unfinished. We've all heard the question about eating an elephant one time or another and we know the answer, "One bite at a time". I have often been guilty of starting a project and then placing the unfinished project into a box or on a shelf to collect dust because either I hit a "road block" or just overwhelmed myself with trying to do too much at once.  I often try to eat the Elephant in one bite. This time I decided to try a different approach (plus I promised my wife I'd actually finish something this time). So first I set a series of goals for my project and I decided to stick to them.  I then divided all my goals into two main groups: Software and Hardware.   When I found time to work on my project I'd focus on one goal and try not to get distracted.  If I came up with an idea that belonged with another goal, I'd write it down so I could revisit my idea when I was working on that particular goal.  If it was an idea that would be nice to have but really belonged in a future version (ie, custom etched PCB board, low power mode, battery recharging, etc) I would write it down in my notebook under "Future Objectives".  This way I didn't overwhelm myself by making my project so large that it would never stop growing and never get finished.  My notebook held my project together. I highly recommend you too keep a notebook to jot down your experiments, references, and even your failures.  I've learned a lot, even from my failures. Success consists of going from failure to failure without loss of enthusiasm. --Winston Churchill HARDWARE 1)  Needs to be able to be set up on a breadboard for the software development phase I started with a keypad, Arduino Uno, and some LED's.  I used this breadboard setup until my code was finished. 2)  What is used during development needs to be easily translated into a prototype product I needed something smaller then the Uno and the Arduino Pro Mini fit the bill.  I could use my program I developed on the Uno and the Arduino Pro Mini would be small enough to fit in the "Sparkfun" enclosure I was looking at.  I thought about custom etched PCB with just a low powered ATMega328P but decided to stick with my original goals of using "off the shelf" items and save the custom PCB for a future version. 3)  Needs to be easy to hold and operate by 4 yr old fingers I searched many different enclosures and was about to settle on using the "Sparkfun" enclosure when I can across the Hammond enclosure with battery holder.  It was exactly what I envisioned. 4)  Needs to be appealing in appearance so the 4 yr old wants to use it My son loves hot wheels, lizards, and dinosaurs.  So I searched around until I found a dinosaur face that would scale easily to the front of the hand held enclosure.  Image was found at:  http://www.arthursclipart.org/dinosaurs/dinosaurs/page_02.htm SOFTWARE 1)  Needs to be able to detect button presses from a keypad First goal, I needed to be able to tell which button was being pressed. 2)  Needs to be able to input the button presses into variables I then needed to have my program store my button presses.  I needed to be able to use numbers larger than just single digits. 3)  Needs to be able to perform addition or subtraction (multiplication and division can come later, since my son is only 4 yrs old) Having my program know when to add or subtract became a challenge.  And this then became a major challenge when I decided to include negative numbers. If I hadn't broke my software code development into "smaller" bites, this could have been the "road block" that would have killed this project.  I did add decimal numbers to the programming so that when I do add division it will already be there. 4)  Needs to be able to calculate the correct answer and then compare it to the guessed answer the User inputs This goal led to my discovery about the limitation of floating number math which was solved by comparing the absolute value of the difference between the correct answer and the guessed answer. 5)  Needs to be able to respond to the user with either a correct or incorrect response. Light the Red LED for wrong; Green LED for right. So now that you know the approach I took, lets get started on building your DinoCalc! Step 2: Bill of Materials Here is a list of what is needed to put together your calculator with "off the shelf items". No etching required (I'm saving that for a future version). I looked up part numbers for this project on Mouser.com and Sparkfun.com.  You'll need parts on both lists.  At least half of the components I used came from an electronic spare parts bin I've been building up ever since I started my hobby.  If you also have a parts bin, then just adjust both lists to your situation. TIP:  Part of the fun of doing a project like this is making it yours! If you can't find everything or if you think, "Hey, what was this guy thinking?  Part XYZ will work better!"  Then please feel free to use different parts or even different suppliers. If you hate AVR then just modify the project and software code so you can use your favorite microprocessor, like a PICAXE.  I'm releasing all my source files and it won't hurt my feelings if you change things. But please do make sure to share what you came up with!  DinoCalc Hardware version 1.0 Bill of Material (Arduino Pro Mini Protoboard Version) ------------------------------------------------------- MOUSER.COM ------------------------------------------------------- Item No.   Qty   Description                                                              Part Number --    ---   -------------------------------------                                     ---------------- 1)     1    9v Alkaline Battery                                                    658-6LR61XWA 2)     1    CARBON FILM RESISTOR - 330 OHMS                   291-330-RC 3)     1    CARBON FILM RESISTOR - 270 OHMS                   291-270-RC 4)     1    SPST ON-OFF SLIDE SWITCH                                 112-R13-602A 5)     1    LED - THROUGH HOLE GREEN DIFFUSED             78-TLHG5400 6)     1    LED - THROUGH HOLE RED DIFFUSED                  78-TLHR5400 7)     2    5MM LED PANEL MOUNTING                                   696-SSH-LX5091 8)     1    4X4 MATRIX MEMBRANE KEYPAD                           619-27899 9)     1    PROTOTYPE BOARD FOR 1553DBKBAT ENC        854-PR1553DBAT 10)   1    HAND HELD ENC WITH BATT COMPARTMENT      546-1553DBKBAT You can also find this Bill of Material on the mouser.com website under the DinoCalc version 1.0 project at the following link: http://www.mouser.com/ProjectManager/ProjectDetail.aspx?AccessID=0904c64079 ---------------------------------------------------- SPARKFUN.COM ---------------------------------------------------- The following is a list of parts needed for this project on sparkfun.com. Item No.  Qty   Description                                                 Part Number --    ---   -------------------------------------                        ---------------- 1)     1    Arduino Pro Mini 328 - 5V/16MHz               DEV-11113 2)     1    FTDI Basic Breakout - 5V                            DEV-09716  (Optional) 3)     1    Female Headers                                          PRT-00115  (Recommened) 4)     1    Break Away Headers - Straight                   PRT-00116 5)     1    Break Away Male Headers - Right Angle    PRT-00553 6)     1    Solderless Headers - 10-pin Straight          PRT-10527  (Optional) 7)     1    Jumper Wire - PTH Black White                 PRT-08672  (Optional) 8)     1    Jumper Wire - 0.1", 3-pin, 6"                       PRT-10368  (Optional) 9)     1    Hook-up Wire - Red                                     PRT-08023  (Optional) 10)    1    Hook-up Wire - Black                                 PRT-08022  (Optional) Notes: Item #2:  This is needed only if you don't already have a way to program the Arduino Pro Mini. DEV-09718 5V FTDI Cable will also work and you won't need to find a USB Cable. Item #3:  This is recommended so that you don't make the Arduino Pro Mini a permanent installation in your calculator.  You want to reuse it for a later project. Item #6:  This can be used in place of soldering headers to the Arduino Pro Mini Programming Header. Items #7 and #8:  These are recommended only if you don't already have some old jumper wires laying around (such as from old CD-ROM kits or old computer boards). Items #9 and #10:  Hook-up Wire is needed only if you don't already have a source of 22 AWG wire for the wiring on the protoboard. You can find this Bill of Material in a Wish List on Sparkfun.com at: https://www.sparkfun.com/wish_lists/56143 ---------------------------------------------------- AMAZON.COM ---------------------------------------------------- This was the adhesive paper purchased to place over the keypad and on the enclosure face. Item No.   Qty   Description --    ---   ------------------------------------- 1)     1    Avery Sticker Project Paper, White, 8.5 x 11 Inches, Pack of 15 (03383) found at link:  http://www.amazon.com/gp/product/B0000C0CJQ/ref=oh_details_o04_s00_i00 ---------------------------------------------------- MISCELLANEOUS ---------------------------------------------------- These are standard items you probably have on hand already: 1)  Soldering Iron 2)  Solder 3)  Heat Shrink or Electrical Tape 4)  Color Printer for printing the enclosure overlay Step 3: Preparing the Arduino Pro Mini For the Prototype version I chose the Arduino Pro Mini 5V/16MHz.  While I developed the code for the calculator with my Arduino Uno and a breadboard, I knew that the Arduino Uno would be too cumbersome to place inside a hand held enclosure.  The Arduino Pro Mini is small and ideal for a small enclosure and compatible with the Arduino Uno, so I knew my code would need little or no modification to work with it. The Arduino Pro Mini comes without any headers so you will need to add some yourself.  First take your male pins and separate two 12 pin sections.  These will be soldered on the sides as shown.  I used my breadboard to keep the pins lined up during soldering. For the programming header you can either solder six right angle male pins, or follow the tip below and use solderless headers for programming. TIP:  INSTEAD OF SOLDERING A HEADER TO THE PROGRAMMING HEADER, USE "SOLDERLESS HEADERS", SUCH AS THE SPARKFUN PART PRT-10527.  THESE HEADERS ALLOW YOU TO PROGRAM YOUR ARDUINO PRO MINI AND ARE REMOVABLE AND REUSABLE WHEN YOUR PROGRAMMING IS DONE. Step 4: Programming the Arduino Pro Mini Now it's time to program the Arduino Pro Mini. FIRST: Download the "keypad.h" library from the Arduino Playground: http://arduino.cc/playground/uploads/Code/keypad.zip Place the KEYPAD folder into your libraries folder of the Arduino IDE. This library makes using a matrix type keypad easier to program. TIP:  TO LEARN MORE ABOUT THE KEYPAD LIBRARY, VISIT http://playground.arduino.cc/Code/Keypad SECOND: Download the DinoCalc-Release-1v0.zip Package either by clicking on the download below or at http://code.google.com/p/dinocalc/ Extract the zip file and inside you'll find two folders:  Hardware and Software.  Right now we're interested in the Software folder. In the Software folder is another folder named DinoCalc.  This folder can be copied to your Arduino "sketchbook" location. This folder contains the source code (DinoCalc.ino) and a hex file.  The hex file is for advanced users that might be using a different AVR programmer. TIP:  If you aren't sure where your "sketchbook" location is, then open the Arduino IDE and look under File/Preferences.  You'll see where the sketchbook location is on your computer. THIRD: Read the Sparkfun Tutorial to become familiar with your Arduino Pro Mini, especially if you are new to "Arduino".  Even though the tutorial mentions the 3.3V version, it is still applicable to the 5V  version.  Just make sure you use the 5V FTDI programmer and select the 5V version of the Arduino Pro in the Arduino IDE when you are programming.  Also, use the latest Arduino IDE.  You don't need to download the older version shown in the tutorial. ARDUINO PRO MINI TUTORIAL Make sure when attaching the FTDI that the GRN label on the FTDI programmer lines up with the GRN label on the Arduino Pro Mini and that the BLK label matches the BLK label..  As long at the FTDI programmer is attached, the Arduino Pro Mini can be powered from the FTDI programmer. FOURTH: Open the DinoCalc.ino file with the Arduino IDE. Press the Upload button on the IDE and after a few flashing TX RX lights your Arduino Pro Mini will be programmed! If you have any errors, make sure you placed the keypad library in the proper place and then go back and check the Sparkfun tutorial and make sure you have everything connected right.  Also, make sure you've selected the Arduino Pro Mini 5V/16MHz under the IDE Tools/Boards Menu, and that you've selected the proper COMM port for your FTDI programmer under the Tools/Serial Port menu. Step 5: Testing on Breadboard (optional) This step shows the Arduino Pro Mini setup on a breadboard.  It isn't needed to complete the project but can be used if you wish to modify the program for your own application or if you wish to program and test the Arduino Pro Mini before installing it into the enclosure. I used an eight pin male straight header to connect the ribbon cable from the keypad to the breadboard.  The connections were as follows: Arduino D 2 ---> 4x4 keypad pin 1 Arduino D 3 ---> 4x4 keypad pin 2 Arduino D 4 ---> 4x4 keypad pin 3 Arduino D 5 ---> 4x4 keypad pin 4 Arduino D 6 ---> 4x4 keypad pin 5 Arduino D 7 ---> 4x4 keypad pin 6 Arduino D 8 ---> 4x4 keypad pin 7 Arduino D 9 ---> 4x4 keypad pin 8 Arduino D10 ---> (long leg)RED LED(short leg) ---> 330 ohm resistor ---> GND Arduino D11 ---> (long leg)GRN LED(short leg) ---> 270 ohm resistor ---> GND The Arduino Pro Mini can be provided power from the FTDI programmer or after you've programmed the Arduino Pro Mini you can hook up a 9V battery for StandAlone Power . Standalone Power: 9V POSITIVE ---> Arduino Pro Mini RAW 9V NEGATIVE---> Arduino Pro Mini GND Using the breadboard setup shown, this is how I worked on the software until it performed the way I expected. If you are using the 4x4 membrane keypad without the sticker overlay, you can change the keypad array in the program to match the numbers on the face of the keypad.  Just remember A is plus, B is minus, C is ?, D is equals, # is decimal point, and * is C.  Also don't forget to change the code back before you apply your sticker overlay and place the Arduino Pro Mini into an enclosure. In the program change lines 203-207 from: char keys[ROWS][COLS] = {{'7','8','9','+'}, //Sticker will be applied over keypad to {'4','5','6','-'}, //match the layout I want and to provide {'1','2','3','?'}, //a custom graphic (eg dinosaur, bird, etc) {'C','0','.','='}};// change this to: char keys[ROWS][COLS] = {{'1','2','3','+'}, //Sticker will be applied over keypad to {'4','5','6','-'}, //match the layout I want and to provide {'7','8','9','?'}, //a custom graphic (eg dinosaur, bird, etc) {'C','0','.','='}};// TIP:  TO LEARN MORE ABOUT THE KEYPAD LIBRARY, VISIT http://playground.arduino.cc/Code/Keypad Step 6: Protoboard Layout It is now time to start placing your components onto the Protoboard that fits inside of the enclosure. In the Hardware folder from the DinoCalc-Release-1v0.zip package that you have already downloaded, there is a folder called, EagleCad files.  Inside is a schematic called, DinoCalc_1v0_Schematic.pdf.  Also under Hardware is the folder Hardware Layouts.  Inside is a pdf called Hardware Layout Version 1v0.pdf.   You might want to print out a copy of these files and have them handy as you add components. IMPORTANT!:  I am showing part placement on my graphic with the copper bottom of the Protoboard shown facing up.  This is to help show how everything is connected.  The copper side will be on the bottom since you will be soldering on the copper side, and the parts will be placed on the fiberglass side, as shown in the photos. TIP:  Under the Hardware folder is another folder called Datasheets.  If you wish to modify the layout that I have, there is an Actual Sized PCB layout on the BPS-MAR-PR1553DB-001.pdf datasheet.  Just remember not to scale the pdf when you print it. Step 7: Protoboard Layout (Keypad Connector) Break away 8 pins from your right angle male headers.  This will be used to connect the keypad to the Arduino Pro Mini.  Notice how the header is placed on the "two-hole" pattern.  This allows the Arduino Pro Mini to be soldered right next to the keypad connector. Look close, you can see the pins for the right angle header right before soldering. Step 8: Protoboard Layout (Female Headers) If you want your Arduino Pro Mini to be removable (which I highly recommend) then break away two twelve holed female headers and install one next to the Keypad Connector you just soldered.  Line it up so that pin 2 on the Arduino Pro Mini lines up to the first pin on the keypad.  Then place the other female header parallel and six holes away from the first female header. If your Arduino Pro Mini will be permanently soldered into place, then wait to do it at the very end since there will be several wires under the Arduino Pro Mini. TIP:  Seperating female headers almost always results in one pin being sacrificed.  I would cut through the 13th pin and then carefully shave off the extra plastic to give me 12 perfect female pins.  You can also use the Arduino Pro Mini to help line up the female headers while soldering.  Test fit the headers onto the Arduino Pro Mini and then line up the Arduino's digital pins 2 through 9 with the keypad connector.  Once soldering is complete you can remove the Arduino Pro Mini from the female headers so that you can solder in the wiring for the next step. Step 9: Protoboard Layout (Battery Connections) TIP:  If you haven't already, you might want to print out the Hardware Layout Version 1v0 pdf and have it next to you when making these connections. FIRST: Take a scrap piece of bare wire, such as one snipped from a LED or capacitor, and solder across a row of the contacts, as shown. SECOND: Next, solder the 9V battery connector's black wire to one of the holes next to the piece of wire you just soldered.  These holes will form the Ground Bus and will be used to connect all of the grounds (LED, Arduino Pro Mini, Battery). THIRD: Solder a two pin right angle male header, and attach the positive wire of the 9V battery connector to one side as shown.  This male header is where the SPST switch will enable or break the power from the 9V battery.  Connect the other side of the male header with a wire to where the RAW pin on the Arduino Pro Mini will be.  Optional:  A diode can be place between the positive wire of the 9V battery connector and the SPST switch header.  This would help protect your circuit from a battery being inserted backwards.  I chose not to use a diode here since I'd be the only one changing out the 9V battery and the connector will only fit one way onto the 9V battery. FOURTH: Solder a wire from next to the female header where the GND on the Arduino Pro Mini will be (this wire will be underneath the Arduino Pro Mini) and solder it to the Ground Bus. FIFTH: Solder in place a three pin right angle male header as shown for the LED lights. WAIT A MINUTE, you said THREE PIN and you show FOUR pin, WHAT's UP???  You are 100% right, I am showing a four pin header with one pin snipped off.  What I used for a cable was from an old CDROM kit.  It has a four pin connector with only three wires.  Only three wires will be needed to connector your LED lights.  If you only use a three pin connector with three wires, then feel free to modify what I am showing to just a three pin right angle connector. SIXTH: Solder the LED connector's ground to the Ground Bus.   For more detail: DinoCalc Version 1.0 ### FuzzBot The FuzzBot is an awesome, fast, fully autonomous small Arduino robot that everyone loves!!!  It uses the compact Pololu ZumoBot Chassis kit for a great drive system, and uses a Parallax Ping sensor to sense proximity, to make the FuzzBot fully autonomous.  I like to think of it as a cheap & hackable "mini Roomba" because it uses a Swiffer Duster on the back to pick up any unwanted dirt off of the floor.  I programmed the Arduino code using the simple Pololu ZumoBot library, and used the Ping library to interface with the Ping sensor.  The FuzzBot also has a pan/tilt servo for the Ping sensor, and can be used with the Servo Arduino library. The FuzzBot was also featured on the MAKE Blog! What did you make? I made the FuzzBot, a fully autonomous mini Arduino robot that cleans your floors!  It uses a Parallax Ping Sensor on the front of the FuzzBot to detect if an obstacle is in its way, and if it is, the FuzzBot quickly turns and travels the other direction.  It also uses the Pololu ZumoBot Chassis for the drive system.  I like to think of it as a 'Mini Roomba' because it has a Swiffer Duster on the back, to pick up any dust off of your floors. How did you make it? I made the FuzzBot with my soldering iron, laptop (for the Arduino programming), an Allen wrench, and some screwdrivers.  Once I assembled the ZumoBot Chassis Kit, I then used some extra wire to attach the servo to the chassis.  After that, I secured the Ping Ultrasonic Sensor to the servo with some hot glue, and soldered wire to the pins on of the Ping sensor to connect with the Arduino.  I then programmed the Arduino Leonardo with open source Arduino libraries from both Arduino.cc and the Pololu website.  I combined the two with some of my programming skills, and after about ten different sketches of Arduino code, it finally worked! Where did you make it? I made it in my hackerspace (Qtechknow Labs), and at my desk.  I used the soldering irons, glue guns, and pliers from the hackerspace to make the FuzzBot, and I programmed the main Arduino microcontroller with my laptop at my desk. What did you learn? I learned that everything doesn't work the first time, and all about motors.  I had to go through over ten revisions of the code, and solder a ton!  I had some problems of the orientation of the plastic pieces on the Pololu ZumoBot Chassis, which I described in this Instructable. Step 1: Parts and Tools Major Components in Project Parts: Arduino Leonardo (SparkFun, $25) microB USB Cable for Arduino Programming (SparkFun, $5) ZumoBot Chassis Kit for Arduino (Pololu, $43) 100:1 Micro Metal Gear Motors (2, Pololu, $16 each) Ping Sensor (Parallax, $30) Servo – Small (SparkFun, $9) AA – Rechargeable with Wall Charger (4 Batteries, Amazon, $18) Swiffer Duster Refills (Amazon, $8 for a pack of 10) Male Headers (we’ll only need 3 pins to connect the Servo to the ZumoBot PCB, SparkFun, $1.50) Tools: Wire, no thicker than 22AWG (SparkFun, $2.50) Wire Strippers Soldering Iron Solder Vice or Third Hand (for Soldering) Laptop Pliers Hot Glue Hot Glue Gun 3mm Allen Wrench Small Phillips Screwdriver Step 2: Chassis To assemble your ZumoBot chassis kit, download the PDF below.  This is Pololu's instructional guide and it's a PDF so that you can easily read it on your tablet or smartphone!  However, if you would like to have more pictures to help you along the way, in the next few steps I'll show you how to make the main chassis! Take out all of your parts and tools, which were shown in the last step.  Here is what is included in the ZumoBot Chassis: two silicone tracks two drive and two idler sprockets a 1/16″ acrylic mounting plate battery sockets mounting hardware And here is what is in the Zumo Shield Kit: Zumo Shield PCB Jumper Connectors (4) Jumper Wires for Motors (3) Pushbuttons (2) Right Angle Switch Male Headers (40) Female Headers (2) Mounting Plates (2) Screws for Mounting Plates (2) You will need the tools from the last step also. Step 3: Soldering the Zumo Shield Take out the Zumo Shield PCB and all of the electronic components (switch, buttons, headers, etc.) that go with it.  Plug in your soldering iron, and if you have a variable temperature iron, set the temperature to be between 350C - 400C (660F - 750F).  Grab a small length of your solder (hopefully lead free!!!), and put the Zumo Shield into a vice or third hand. If you don't know how to solder, that's okay!  Head over to this awesome tutorialto learn! Put the two pushbuttons into the corresponding holes, and flip the PCB over. Solder the four total copper holes. Snip the leads with your diagonal cutters. Put the switch on the PCB into the copper holes corresponding, and flip the PCB over. Solder the three copper holes. Snip the leads with your diagonal cutters. Put the BLANK into the copper holes corresponding, and flip the PCB over. Solder the BLANK total copper holes. Snip the leads with your diagonal cutters. Using your pliers, snip off one 10 pin male header, 8 pin male headers (2), and one 6 pin male header from the male header strip.  Now, put the male headers into the Arduino Leonardo pin headers. Flip the Arduino Leonardo over, and put it into the Zumo Shield PCB (the pins that the Arduino Leonardo go into are outlined with a white line). Flip the whole package (Leonardo & Zumo Shield) over, and solder all of the copper holes with a male header sticking out of it. Snip all of the leads with your diagonal cutters. Take the Arduino Leonardo off of the Zumo Shield PCB, and you should see that the male headers (now soldered on!!!) are aligned well. Using your pliers, snip off one 4 pin male header, one 3 pin male header, and one 2 pin male header from the male header strip. Put these male header segments into the jumper holes (in the middle of the PCB).  These will let us select if we want the onboard buzzer, battery monitor, and 3-axis compass to be connected to the Arduino or not. Flip the PCB over, and solder the copper holes. Snip the leads with your diagonal cutters. Yay!!!  You are now done with the through-hole soldering needed to complete the chassis.  Head on over to the next step to find out how to arrange the motors in the chassis! Step 4: Arranging the Motors Next, we're going to arrange the motors, so that our Arduino can control them.  You'll need to use your soldering iron just a small bit. First, get the battery holder out.  It's the black box that looks like it can hold 4xAAs. Take two jumper wires out of the paper wrapping. Cut them both in half with your diagonal cutters. Next, bend the one end of each small wire segment into a loop, but don't close the loop. Wrap the loop of the wire around the leads of the 100:1 micro metal gear motors. Solder the junction between a jumper wire and the motor lead. Repeat the process four times, for the four joints. Place each motor into the battery holder, aligned like the picture above.  Make sure that the positive side is always outwards.  You can tell what side is the + by looking at the black plastic on the motor casing. Bend the leads upwards, once you know that the motors are aligned properly. Take the two smaller mounting plates out (NOT the full size plate), and take the paper covering off of the acrylic (on both sides). First, put the smaller one up towards the motors. Next, put the larger one down below the smaller one.  These should line up perfectly. To test if you got the orientation correct, try putting the Zumo Shield on top of them.  The through-hole soldering joints from before should perfectly fit into the mounting plates. Put the Zumo Shield on top of the motors, face up.  You shouldn't have to bend the motor leads too much, to fit it into the copper holes. Make sure that the mounting plates line up with the shield, and then solder them. If you haven't found that you made any mistakes (make sure the mounting plates are aligned correctly!), snip the leads with your diagonal cutters. Now you are finished with arranging the motors!  The chassis should now start to look like a robot a little!!! Step 5: Screws and Nuts Next, we need to put some screws and nuts to make our FuzzBot complete.  Here are the steps: Take the two small (the smallest) nuts, and flip the ZumoBot Chassis over.  Insert the nut into the hole on the outside of the battery pack on the bottom Next, insert a large (the largest) screw into the top of the Zumo Shield, lined up with the nut on the bottom. Using a small Phillips screwdriver, screw the screw into the nut, on the bottom. Repeat the same process to the other hole on the other side. Next, unscrew the large (largest) nut from the idler sprocket. Bend the PCB up just a little, and drop the nut into the holder, where the wheel will go. Repeat this process twice, for both sides. Open up the battery case. Take another two small nuts (again, the smallest) and put them into the two holes in the battery case (the ones that actually go through) Put two small (smallest) screws into the two holes, on the other side. Using a small Phillips screwdriver, screw the screw into the nut, on the bottom.  You may want to hold the nuts in with your two fingers. Almost there!!!  All you need to do is add on the wheels to finish your ZumoBot Chassis for Arduino. Step 6: The Wheels Yay!!!!!  The wheels are finally here!  Use these steps to put the wheels and tracks on your ZumoBot Chassis. Separate the wheels from each other. Next, put a circular hole wheel, then a washer on the idler sprocket. Thumb-tighten each idler sprocket onto the large nut, already in the wheel mounting hole at the back. With your 3mm Allen Wrench/hex screw, tighten the idler sprocket on the nut.  Make SURE that you do not tighten the idler sprocket too much, for doing this can cause the washer to bend. To the same to both sides. Take out the half-circle wheels. Make sure that the Pololu logo is facing outwards, and then press down on a table to level the wheel.  Do the same on both sides. Add the tracks to both sides. You are now finished making the ZumoBot Chassis Kit for Arduino!!! Step 7: Servo Pan/Tilt Hack Let's start on the servo hack.  In this step we'll make a base for the Ping sensor, that we can rotate. Take out your small servo, and put it on top of the front of the ZumoBot Chassis, with the Arduino Leonardo plugged in upside-down. Try and center the servo, too. Next, take your extra wire and cut four segments, two long (~4in.), and two short (~2in.).  Take all of the plastic insulation off of them. Use your pliers to bend the long wires into a mountain shape. Put one end of the wire into the GND (square pads) on the edge, through the hole of the servo, and then into the GND (square pads) on the front of the Zumo Shield. On the back of the PCB, bend the leads outwards, so that they don't fall out. Repeat this process to the other side of the servo. Put the 3 pin male header into the servo's header pins. Wrap the servo through the wire that we just put in, around the jumpers, and around the capacitor. Put the Arduino Leonardo into the Zumo Shield, and then wrap the rest of the servo cable around the Arduino. Put the male header in the servo cable into D5, 5V, and GND on the Zumo Shield.  Make sure that you are putting these in the right pins!!!!! Solder all of the pins on the Zumo Shield.  Yes, you will eventually burn the plastic trying to reach the soldering joints, and it isn't bad.  It just is bad after you burn >0.5in.  :D Trim the leads with your diagonal cutters. Put the "X" shaped servo head onto the servo, and put the screw that came with the servo on top of it.  With your small Phillips screwdriver, screw it in. You are now only one step away from ultimate awesomeness!!!  Check out how to attach the Ping sensor next! Step 8: Ping Sensor Hack In this next step, we're going to put the Parallax Ping ultrasonic sensor on the servo, and attach it to our Arduino. Take out the Ping sensor, and remove the foam (if there is any). Bend the leads outwards. Turn the servo as far as it can go clockwise.  If it won't go any further, leave it (I accidentally broke mine because I turned it too much). Put the Ping sensor into the second hole on the mid-left segment of the servo head. Cut some more wire, this time three long wires (~5-6in.). Strip off ~.05in. off of each end of each wire. Tin the tip of each wire, on one side. Reheat the solder, and solder each wire to a Ping sensor pin. Solder the Ping sensor pins:  5V to 5V, GND to GND, SIG to D4.  These pins should be right below the servo pins. Trim the leads with your diagonal cutters. Heat up your hot glue gun. When ready, hot glue the front of the servo head to the Ping sensor on both the top and bottom. Also, hot glue the Ping sensor to the back of the servo head. Cut even more wire, this time two long wires (~4in.) Strip all of the plastic insulation off of the wires. Next, put a ton of hot glue on the back of the battery pack, and put the ends of the wires in there. Keep the wires there for about half a minute, and then release. Take your Swiffer Duster Refill out. Poke the two wires from the back of the FuzzBot onto the end of the Swiffer Duster.  Make sure to poke it through where there is medium thickness, not thick fabric, and not fluff, but in between. Twist the wires twice. Bend the wires down under the main fluff, so that it won't poke someone when they try to pick it up. You are finally finished with assembling your FuzzBot!!!!  Onto the coding...   For more detail: FuzzBot ### Qtechknow Robot Obstacle Course using Arduino Have you ever thought of controlling your FuzzBot wirelessly? Do you want to make a real - life video game? Do you want to learn about the tech behind NFC and RFID? - the Qtechknow Robot Obstacle Course How - To Guide is for you! Please cast your vote for me (at the upper right hand corner, the orange ribbon) in the RC Contest, Tech Contest, and the Microcontroller Contest! What does it do, how does it work?! Thanks to Matt for the awesome Hackaday article + interview! The Qtechknow Robot Obstacle uses the FuzzBot Design, with the Pololu ZumoBot Chassis Kit, SparkFun NFC Shield, XBee Series 1 Wireless Modules, and Adafruit NeoPixel Sticks and Rings. There are 3 main parts of the Obstacle Course: The Hacked FuzzBot, with an XBee Module, NeoPixel Stick, and hacked NFC shield The Controller, with an XBee Module, NeoPixel Ring, and Joystick NFC Tags, placed around the obstacle course The Robot Obstacle Course has been featured at many Maker Faires - SLO Mini Maker Faire, Maker Faire Bay Area, and the White House Maker Faire! It has won Editor's Choice twice at the the Bay Area Maker Faire, and has the Maker of Merit award at the White House Maker Faire! Here is the timeline of the complete project, from first prototype to completed project: Mini Maker Faire SLO: Instead of RFID, I had plates (real dinner plates!) with a force sensor underneath (to detect the presence of a robot above!) with long wires that connected to a central Arduino. Problem: Force sensors didn't work, robot would get stuck on the side of the plates, and XBee communication didn't work Maker Faire Bay Area: Added RFID which solved the problem of the the plates, and added a few more lines of code to work with the XBees. Problem: RFID didn't consistently read all of the time, because 1) RFID antennae was too far away from the tags and 2) I didn't know, but the RFID Serial pins were connected to the motor pins! Maker Faire White House: Cut the RFID shield in two, and put the antennae at the bottom of the bot, made the box shorter, and rewired the RFID UART pins. Works perfect now! Let's get started! Step 1: Parts and Tools * All parts are from SparkFun Electronics, except for the ZumoBot Kits / Motors, which are available at Pololu, and the rechargeable batteries, which are available at Amazon. All tools used in this project are easily reuseable in many other projects, and a majority of the more expensive parts can be reused again in other projects (i.e. Arduinos, XBees, XBee Explorer Regulated). A SparkFun wishlist that includes all parts except the ZumoBot Kits / Motors, is available here: https://www.sparkfun.com/wish_lists/90202 ($189) A SparkFun wishlist that includes all tools except the Rechargeable Batteries, is available here: https://www.sparkfun.com/wish_lists/90204 ($42) Parts for Robot: Arduino UNO R3 SMD ($30) ZumoBot Chassis Kit ($43 unassembled) + 2 x 75:1 HP Gear Motors ($16 each) // or // ZumoBot Assembled ($100) NeoPixel Stick - 8 x LEDs ($6) SparkFun NFC Shield ($20) with NFC Module ($30) XBee Series 1 Module - Trace / PCB Antennae (802.15.4) ($23) XBee Explorer Regulated ($10) Stackable Header Kit ($1.50) 6 - Pin Right Angle Female Header ($1) Right Angle Male Headers ($2) Female Headers ($1.50) Parts for Controller: Arduino UNO R3 SMD ($30) NeoPixel Ring - 16 x LEDs ($10) Joystick ($4) Joystick Breakout Board ($2) SparkFun XBee Shield ($25) XBee Series 1 Module - Trace / PCB Antennae (802.15.4) ($23) 3D Printed Enclosure (make your own or print at Shapeways) Parts for Obstacle Course: 15 x NFC Tags (MiFare 1K, 13.56 MHz) ($3 each) Tools: Tool Kit - Beginner** ($22, includes soldering iron and basic tools to complete this project) Rechargeable AA Batteries ($22, Amazon) SparkFun Cerberus USB Cable ($6) XBee Explorer USB ($25) ** solder at your own risk Step 2: Assembling the Chassis Kit To assemble your ZumoBot chassis kit, download the PDF below. This is Pololu's instructional guide and it's a PDF so that you can easily read it on your tablet or smartphone! However, if you would like to have more pictures to help you along the way, in the next few steps I'll show you how to make the main chassis! Take out all of your parts and tools, which were shown in the last step. Here is what is included in the ZumoBot Chassis: two silicone tracks two drive and two idler sprockets a 1/16″ acrylic mounting plate battery sockets mounting hardware And here is what is in the Zumo Shield Kit: Zumo Shield PCB Jumper Connectors (4) Jumper Wires for Motors (3) Pushbuttons (2) Right Angle Switch Male Headers (40) Female Headers (2) Mounting Plates (2) Screws for Mounting Plates (2) You will need the tools from the last step also. ZumoBot Assembly Guide.pdf2 MB For more detail: Qtechknow Robot Obstacle Course using Arduino ### Making the TFF: a dress that gets excited when tweeted The idea of this dress comes from a series of tweets with online friends @shineslike and @arduinogirl.  @shineslike and I had taken a half day Arduino workshop given by @arduinogirl at the MCN 2011 conference. I was immediately inspired creatively by the sensory and interactive opportunities. Over the next few months I struggled with the electronics learning curve, but my ever supportive online friends really made it a blast.  Acquaintances 'IRL' (in real life), online we had become TFFs —Twitter Friends Forever. These online connections happen quietly in fiber-optical pulses, dimensions accessed through my iPhone.  The TFF brings the excitement and interaction back into the physical world.  When the wearer receives a tweet, the vintage-inspired dress flutters its wings and sings like a bird. Surely, this celebratory display will attract tweets—and moreTFFs. It was debuted at the 2012 Museums and the Web conference where I was united IRL with my TFFs This dress aspires to be an homage to the many fulfilling friendships that have been able to hatch and grow online. Step 1: What's in this Instructable? The TFF project breaks down into different streams of work including sewing, mechanics, electronics, and programming. Dress - Reviewed resources for designing clothes from Built by Wendy-Dresses and Pattern Magic books. Vintage-inspired KAS fabric Bird songs - From the start I just wanted to cannibalize greeting cards with bird sounds. I love these songs. Wings - Looked at many a costume designer videos on YouTube. These wings are not be huge, just a little flutter and hopefully not costume-like Tweet sensor - to activates the dress Arduino Code - to pull it all together Step 2: Designing the Dress I had never designed a dress from scratch before, so this was a laborious and iterative (though satisfying) process. For guidance and inspiration I referred to the very accessible Built by Wendy-Dresses and the very beautiful, but difficult to understand, Pattern Magic. The key is to do all your testing and iterating with cheap fabric called muslin. I recommend starting with a dress pattern model. For example, I started with a simple dress pattern from the Built by Wendy book.  Trace that model and sew it in muslin. Try it on, play with it! Modify the design with pins and rubberbands, by cut and re-sew it. Turn on music, dance in front of a mirror, cut it more (don't cut yourself.) When you've got something you like in the muslin, then trace it back to paper, marking folds, seams and match ups. Use a ruler and only trace half of each element (if the dress is intended to be symmetrical.) Then, cut that pattern on a fold in muslin, re-sew it and see if it works. (or play with it, dance with it and repeat.) I'm sure an experienced designer could simplify this step, but I must have looped through this step 4 or 5 times to iterate the design. When evaluating your progress, take into consideration the differences between your quality of your final fabric and the muslin. In the case of the TFF, the vintage canvas fabric is vastly different from the diaphanous muslin. Have fun at this stage--make it what you want! Step 3: Sewing the Dress Once you've had your fun and are completely happy with the muslin, trace the final paper pattern, it's time for the moment of truth: cutting into the expensive fabric. I picked particularly pricy threads making this a bit of a scary transition. Preparing the pleated top With such busy fabric, my design called for the pleating of the bodice (the shirt part of the dress) to provide extra texture and abstract the figurative graphic pattern which would be visible on other parts of the dress. Using the paper pattern I defined how much fabric height I would need for the bodice and cut it a width of it (with patterned fabric it's important to always cut the same direction.) I folded 1/2 inch overlaps and pressed with an iron creating the pleats. Beware: I had seriously underestimated how much fabric this treatment would require and had to sew widths together just for my small top. I almost ran out of fabric! With the pleats ironed in place, I used fusable interfacing to hold the seams in place for sewing. Cutting/Sewing With the pleats, you can't really cut on the fold, so I folded the final paper pattern and cut a new final full sized pattern of the top front in paper.  Otherwise treat the pleated fabric as you would any fabric in the sewing--really thick barely manageable fabric. Some problemsolving had to happen along the way to make up for this very thick fabric. For example, the shoulder seams would have never laid flat down using regular seams.  Instead, I tucked the pleated front into the back pieces (like a coin going into a slot) and hand sewed these parts together to obscure the construction. Indeed many little issues needed to be solved at this step since the muslin hadn't needed to deal with finished seams. Putting it together in the right order can be complicated, but that's part of the fun. Step 4: Adding Bird Songs Those little singing greeting cards can be pretty useful for projects.  They have power, an amplified speaker and can simply be activated by hijacking the switch used in the card. You can just find one you like and cut the gut out for your project. For the TFF, I found wonderful high-quality bird song cards at PadBlocks. Since they were $8.00 each, I first experimented with the cheapest cheesiest Easter singing card from the drug store (always experiment with the cheapest thing possible!) I soldered to the + and -. Touching the wires closes the circuit and makes the bird sing. I attached the speaker card under the waist of the dress with speaker facing out and fed the wires to the back opening of the dress.   For more detail: Making the TFF: a dress that gets excited when tweeted ### 3D Printed Arduino Controlled Eggbot/Spherepot First off this project was a combination of of two great online resources. I had been looking into building an eggbot for a while and since I had a lot of ping pong balls on hand after one of my other videos the time was right for making my SphereBot that could write on ping pong balls. After doing some research online I found that there were already some brilliant designs out there.   The 3D printed design came from Glasswalker's page on thingverse (http://www.thingiverse.com/thing:20398) and the Arduino schematic and setup came from a page on Pleasant Software's blog (http://pleasantsoftware.com/developer/3d/spherebot/). I simply put these two designs and will document my building experience of a (mostly) 3D printed SphereBot in this instructable. Step 1: Materials Major Components in Project This is what I used to build the SphereBot. I substituted wood in for the two side pieces but those parts can also be 3D printed as well. Sorry I forgot to stage a nice materials picture at the beginning… Materials: – foot threaded rod – Bolts that fit the threaded rod – A sheet of thin craft wood (if you aren’t 3D printing the sides) – Sharpie – Hobby King 5v stepper motor – Ardunio uno – Bread Board – 2x Polulu A4983 stepper motor drivers – 2x CanaKit stepper motors (http://www.amazon.com/dp/B004G51AZ4) – Jumper wires – 12V DC power supply – Skateboard Bearing – Computer with arduino firmware – USB cable (to connect the arduino to the computer) – Super glue – Nerf Darts -Ping Pong Balls (or eggs) – M3 machine bolts, washers and nuts – A Never Give Up Attitude! Tools: - Dremel (to cut the threaded rod) - Drill (if you use wooden side pieces) Step 2: 3D Printing the Parts Once you download the files from Glasswalkers thingverse: (http://www.thingiverse.com/thing:20398) It is just a matter of configuring your printer settings and fabricating the parts. I used a replicator 2 and blue PLA. However settings for 3D printers vary a lot across the board even for the same model so do some experimenting before you print all of the parts. For the record these are the settings that I used. I used makerware medium settings as follows: -infill: 15% -Layer height: .25 -Number of shells: 1 -Feed rate: 80 -Travel feed rate: 150 -Print temperature: 230 Step 3: Hardware Assembly The first step is cutting the threaded rod. I cut mine into three foot long sections and then used the left overs for the part that connects to the nerf dart. Once the threaded rod was cut I assembled the pen arm that holds the stepper motor and attached it to the middle plate for the stepper motor. Then I centered the wooden sides around the pen arm. Finally I glued in the skateboard bearing in place and added the spring to keep pressure on the ping pong balls. Overall the assembly is pretty straight forward once you have the parts from the 3D printer. The most important thing to to make sure that the stepper motor that will turn the ping pong ball is centered with the spring loaded piece of the threaded rod that rests on the skateboard bearing so it can turn freely with the stepper motor (if you are using 3D printed sies this isn't really a problem...). Step 4: Configuring The Arduino This circuit diagram comes directly from Pleasant Software's blog (http://pleasantsoftware.com/developer/3d/spherebot/). I had to do some experimenting to figure out which wires were which on my stepper motors but there are plenty of tutorials for how to do that online. On my bread board there is a third motor driver that is not being used (I forgot to remove it for the picture). Anyway if you follow the blog this part should be pretty straight forward. Just make sure that you have a 12V DC power supply connected to the positive and negative rails. For more detail: 3D Printed Arduino Controlled Eggbot/Spherepot ### Your Image on an Arduino! - TFT LCD Screen Guide Have you ever heard of TFT LCD screens?  They are great ways to display information from your Arduino, or display pictures.  The Arduino team just released an official TFT LCD screen with their new Robot at Maker Faire 2013.  It's very easy to get started with!!  This tutorial will show you how to get the LCD up and running, load information from the SD card, and make a few simple projects. The TFT LCD screen is a great way to detach your computer, and have the Arduino relay information that you need to know onto the LCD.  A great part of the LCD is that it has a built in microSD card socket.  You can store images on the microSD card socket, and even some text!If you like this Instructable, please vote for me in the Arduino contest by clicking the orange ribbon in the upper right hand corner, then vote!!! Step 1: Parts & Tools Major Components in Project To make the project, you will need the following: Parts: Arduino UNO (Amazon, $22) Arduino TFT LCD Screen (Arduino Store, ~$28) ArduSensor Pot (Qtechknow, $8) Half Sized Breadboard (Amazon, $5.50) microSD Card 2GB (optional, Amazon, ~$6) Jumper Wires Tools: USB-B Cable Laptop microSD Card Adapter & USB SD card reader Step 2: TFT LCD Basics TFT LCD Screens (Thin-film-transistor liquid crystal display) are great graphical displays to display information.  They are a variant of a liquid crystal display (LCD) which uses TFT technology to improve image qualities such as addressability and contrast.  They are used often in video games, smartphones, cell phones, and sometimes even TV's.  Now, with the technology and accessibility today, you can use one with your Arduino! LCDs, or liquid crystal displays, are easy to use with your Arduino.  They are a very simple ways of telling the user data from the Arduino.  Standard 16x2 character LCDs are found in grocery stores, when the display tells you what you bought as the cashier scans each item, and how much it costs. Step 3: Displaying Instructables Logo For the first example, let's put the Instructables Logo on our TFT display!  Download the zip file below, and put it onto a microSD Card (2GB).  You will probably a microSD to SD Card adapter.  There is no special software needed, just copy and paste it onto the card. Next, open up the Arduino IDE.  You'll need Arduino 1.0.5 or better to run the sketches.  Open up the InstructablesTFT example. Hook up the circuit above from the Arduino TFT LCD to your Arduino UNO. Then, upload the sketch.  After you open the Serial Monitor, the LCD should have the Instructables Logo on it! Step 4: Sensor Readings Let's try another example.  This time, we'll be mimicking the Serial Monitor on our TFT LCD.  Keep the same circuit, and then upload the new code below. This sketch will gather the reading from the ArduSensor Pot, and then relay it onto the TFT LCD screen 10 times per second.  This is a great way to display data without a computer.   For more detail: Your Image on an Arduino! - TFT LCD Screen Guide ### Arduino-controlled RGB LED Infinity Mirror Update 11/22/2013: Thanks to everyone who voted for this project in theMicrocontroller Contest! It was one of three first-prize winners. Update 9/17/2013: Thanks to everyone who voted for this project in the Arduino contest (I was one of ten "second prize" winners)! If you want to try this project with an addressable LED strip instead of an analog strip, check out the Rainbow Jarproject (also an Arduino contest winner). This is my take on a combination of two classic projects: RGB LED control with an Arduino, and an Infinity Mirror. It's an RGB LED infinity mirror that lets you toggle between an adjustable-speed color-fade mode and a direct-control mode where you individually set the red, green, and blue LED brightness levels. The primary inspiration for this particular project comes from this infinity mirror Instructable andAdafruit's RGB LED Strip tutorial, but there are many more quality resources out there on both projects. I've done my best to gear this project towards newbies by providing an exact list of materials I used and the exact procedure that I followed. One recurring theme I've noticed in comment sections for other infinity mirrors is a lack of links to specific parts (e.g. exactly what type of LEDs or LED strips were used, what power supply, where to buy the mirrors, the enclosure...). Clearly, if you know what you're doing and want to spend more (or less) money to design a slightly different mirror, you can adjust your materials as needed, use a different Arduino board, etc. You can skip the Arduino entirely and make a pretty simple, cheap infinity mirror if you want (just search Instructables for "infinity mirror" and you'll find a few), or go crazy and spend hundreds if not thousands of dollars (search YouTube for "infinity mirror table" and you'll get the idea). So, on to the materials list. Remember that this is an exact list of parts that I used, but I gradually cobbled together the supplies for this project over a long period of time. I didn't sit down, compare vendors (e.g. Adafruit vs. Sparkfun) and find the absolute cheapest way to build this. So, feel free to shop around to bring down the cost (and post links in the comments if you find a better/cheaper version of a certain part!). Quantities are just 1 (one) unless otherwise noted, prices are rounded to the nearest dollar as of September 2013. Materials: Electronics Arduino UNO R3 with mini breadboard and jumper wires. I have the Getting Started with Arduino Kit from Maker Shed ($65). (Optional): Arduino/breadboard holder. The Maker Shed kit didn't come with one - I 3D printed this cool minimalist design I found on Thingiverse. 1 meter RGB LED strip ($25). This is an analog strip, which means you can only control the color of the whole strip at once. SparkFun also carries a digital RGB LED strip which has individually addressable LEDs (if you wanted to send pulses of light down the strip one LED at a time, or have some other pattern), but it's more expensive ($45) and you'll need completely different Arduino code. Both strips can be cut to length to fit your mirror. Four 10K potentiometers ($1 each). Three N-channel MOSFETs ($1 each). SPDT power switch ($1.50). 22 AWG hookup wire (black), 100 feet ($8). This is only required if you pref to color-code your V+ and ground connections with red and black respectively. Otherwise you can just use the multi-colored jumper wires that come with most Arduino kits. 100 feet is also WAY more than you'll need for this project, but you can never have too much hookup wire! You can get a smaller 25' roll from SparkFun. 22 AWG hookup wire (red), 100 feet ($8). Same note as above, with smaller roll here. Barrel jack breadboard adapter ($1). 12V/5A DC power supply ($25). This is a big place to potentially save money. The RGB LED strip I used requires 12V, and according to the datasheet, draws 60mA for every 3-LED segment (the smallest unit the strip can be cut into). So at 60 LEDs for the whole strip, that's an absolute maximum of 1.2A at full brightness. I had a 12V charger laying around from some old long-forgotten device, but it was only rated at 0.5A and couldn't light the whole strip. So, I went ahead and bought a beefy supply because I figured it would be useful for future projects anyway. Adafruit and SparkFun both carry smaller, cheaper 12V supplies (1A and 600mA respectively) that might suit your needs just fine depending on the size of your mirror and how many LEDs it will use. You could also scavenge something like an old laptop charger, but be sure to check the output voltage and current specs (usually printed on the label). Materials: Building the Mirror Major Components in Project Important: there are three main parts that need to fit together to build this: the regular mirror, the frame, and the one-way mirror. First, it’s easiest if you can find a cardboard/paper mache lid and a regular mirror that will fit snugly inside it  – the parts I bought didn’t fit together perfectly, so I had to use a workaround (see Step 6). Second, cutting acrylic can be a pain depending on the tools you have available, so plan accordingly (see Steps 9 and 10). There’s also an important consideration regarding the LED strip, which can’t be cut to any length – it has to be cut in multiples of 3-LED segments, which are just shy of 2″ long – so you want the inside perimeter of your mirror frame to be a multiple of that length. So, I’ll link to the parts I used to build my mirror, but you can still follow these directions to build a mirror of a different size or shape. 9″ diameter circular mirror. I bought this kit of 7 mirrors ($14) with the intent of also making some smaller infinity mirrors. Kit of 8″, 9″, and 10″ diameter round paper mache boxes ($9). Important – I bought these hoping that the 9″ diameter mirror would fit snugly inside either the 9″ lid or the box itself (and because I couldn’t find individual boxes for sale on Amazon). It didn’t. The 9″ lid was just too small, and the 10″ box was too big. So, I made it work by cutting out the top of the 9″ lid, and just using the rim. This will make sense if you skip ahead and look at the pictures in Step 6. Point being,ideally you should use a mirror that fits snugly inside a paper mache lid or box. 1/8″ thick 12″x12″ sheet of clear cast acrylic (plexiglass). Available on Amazon($8) and McMaster-Carr ($9). Acrylic is super easy to cut if you have access to a laser cutter. I don’t, so I tried using a jigsaw (Step 9) and a score-and-snap method (Step 10). Both worked reasonably well but resulted in some jagged edges, and in hindsight would have worked much better for a rectangular mirror instead of a round one. If you want to build a slightly smaller mirror, McMaster sells pre-cut 6″ diameter circles. I didn’t shop around much for larger pre-cut circles but you might be able to find them. Mirrored window tint. I ordered this stuff from Amazon ($27) but you can easily find this in hardware stores. Probably hard to find in small quantities, so plan on having plenty left over. Black paint. I picked up a can of generic black spray paint ($3) at A.C. Moore. Optional: if you want to get really fancy, you might be able to order a custom-sized one way mirror, instead of putting mirrored window tint onto a piece of plexiglass. This will probably give you a higher optical quality in your final product, but I didn’t look into it. Tools Soldering iron. I have this variable temperature one from SparkFun ($45). Youmight be able to get away without one, depending on how your LED strip arrives. The SparkFun product page says "You will need to solder on your own wires.", but my strip arrived with all four wires already soldered on. Even so, pushing the ends of the (stranded) wires into a breadboard can be a pain, so I recommend soldering on small segments of solid-core wire to make that easier. Lead-free solder ($8). Wire strippers ($5), if you don't already have a pair that can strip 22 AWG. Again, you can squeeze by without these if necessary, but I'm betting most people reading this have wire strippers. Mini needle nose pliers ($2) if, like me, you're clumsy and hate handling tiny breadboard components with your fingers. Power drill (see Step 6 - you can probably just get away with a sharp knife) Super glue Electrical tape Got all that? Time to start building! Step 1: How does an infinity mirror work? Ok, almost time to start building. First, I want to pre-emptively address another common comment: how do these things actually work? Not surprisingly, there is no magic involved. The secret is that the infinity mirror actually contains two mirrors with different  transmissivity and reflectivity. For all practical intents and purposes, mirrors that we deal with in everyday life are 100% reflective (technically a tiny amount of light will also be absorbed, but we can ignore that for now). That's the regular mirror at the "back" of the infinity mirror (on the left in the diagram above). The tinted window film, however (on the right in the diagram above), only reflects about half of the light that hits it*. This means that, when you sandwich an LED between the two mirrors, some of the light escapes through the front mirror and into your eye. The rest is bounced back off the rear mirror, then into the front mirror again, and this process continues off to infinity - thus the name. But, since a little bit of light escapes each time, each successive illusionary LED that you see will look a little bit dimmer, until they gradually disappear - you can't actually see infinitely many LEDs. Note that this does not work because the window tint "only lets light through in one direction", which is a common misconception. In order for the illusion to work properly, the side of the front mirror the observer is on (the outside world) must be much darker than the side with the LEDs (inside the infinity mirror). This is the same effect that you see in crime dramas/movies where someone is held in an interrogation room that has a mirror on the wall, but there are people on the other side of that mirror observing as though it's just a window. That only works if the interrogation room is well-lit and the observation room is dark. *The exact percentages of reflectivity/transmissivity might vary depending on what kind you buy - different levels of reflectivity and transmissivity are actually regulated in different states for use in car windows, Google it if you're curious. Step 2: Building the Circuit It's probably a good idea to build, test, and debug your circuit before you build the mirror. Otherwise, it would be quite sad if you get a nice, fancy mirror built only to throw the switch and find out something doesn't work. So, first let's assemble the circuit and test the LED strip. If you're new to circuits and don't understand what's going on, you can either (a) just blindly follow the directions, or (b) look ahead to the next step for an explanation of how the circuit works. If you have experience working with breadboards, you can go ahead and assemble the circuit based on the third breadboard diagram above, or directly from the circuit diagram. For newbies I broke it into three steps, hopefully to make things less overwhelming - corresponding to the first three diagrams above: 1) Populate the breadboard with the three MOSFETs, four potentiometers, SPDT switch, and barrel jack adapter. I made these parts "transparent" in the figure above so you can see exactly where their pins go*. 2) Add wires to connect to your power and ground rails. I've color-coded these with red and black here, but remember that you can use whatever colors you want if you just have a multi-colored jumper wire kit and no red and black hookup wire. Notice how one of the breadboard rails is connected to the +12V supply from the barrel jack (which feeds power to the Arduino through Vin), and one is connected to the Arduino's +5V power pin, but they share a common ground. Whatever else you do, don't short the +12V and +5V supplies together! 3) Add wires to connect to the Arduino's inputs and outputs, and wires that you will connect to your LED strip (if your strip came with pre-soldered wires, use those)**. Again, I've color-coded the respective red, green, and blue wires here but your ability to do that will depend on what wire you have available. * I started making this diagram in Fritzing, but got frustrated with the enormous amount of space components like MOSFETs and potentiometers take up in breadboard view mode (they give a quasi-3D view instead of a "top-down" view, so take up way more space than they do in real life and obscure other things on the breadboard). So, I took a screenshot of the Arduino and breadboard and drew over them in Powerpoint. ** If your LED strip did come with pre-soldered wires, be careful about the color coding. SparkFun's product page notes that the blue and green wires are switched, which can be irritating but won't cause any harm. My strip came with a black wire connected to V+, and getting the polarity reversed on the LED strip could be bad news. I guess I understand not wanting to use two red wires (one for V+ and one for the red LEDs) but I wish they'd use something other than black for V+. Step 3: How Does the Circuit Work? This is a rough explanation of how the circuit works and what the components are for. Seasoned veterans can skip this step, but read on if you're curious. I don't have time to write a whole introductory chapter on circuits so I've tried to provide relevant links when possible. The barrel jack adapter provides a +12V supply to the breadboard. This is required to power the LED strips, and also powers the Arduino through its Vin pin. Technically, the Arduino's built-in barrel plug will accept a +12V supply, which you can then access through the Vin pin, but the LEDs draw a lot of current - more than you want running through the Arduino board. This way, the current "splits up" - the Arduino only draws what it needs, and the high current goes straight to the LEDs through the breadboard. Special thanks to theAdafruit support forums for helping me figure this out. The SPDT switch just acts as a toggle to select which "mode" the program is in. The details of the code are explained in the next step, but essentially it just switches between a "color fade" mode that rotates through different colors, and a direct-control mode where you control individual red, green, and blue LED brightness. The middle pin of the switch is connected to one of the Arduino's digital input pins, and the outer two pins are connected to +5V and ground. So, depending on which way the switch is flipped, the program reads a digital HIGH or LOW using the digitalRead() function and acts accordingly (note: SPDT stands for "single-pole double-throw", the Wikipedia page on switches has a nice table summarizing the different types of switches, with diagrams). The potentiometers are your "controls" depending on which mode the program is in. In individual-control mode, the three potentiometers control brightness of the red, green, and blue LEDs respectively. In color-fade mode, a single potentiometer controls the speed of the fading. The potentiometers have three pins. Like the switch, one pin is connected to +5V, and one pin to ground. However, unlike the switch, rotating the potentiometer makes the voltage on the middle pin vary continuously between 0V and 5V, instead of just toggling between the two. So, the middle pins of the potentiometers are connected to the Arduino's analog inputs. Then, using the analogRead() function, the Arduino converts that voltage to a number between 0 and 1023 for use in the program (see next step). The MOSFETs are probably the trickiest part to understand for a newcomer to electronics. These are required to drive "high power" devices like motors, solenoids and LED strips, which frequently require more current than the Arduino can supply. The Wikipedia page on these is actually rather dense, so I'll try to give a simplified explanation here. The MOSFET has three pins, called the "gate" (G), "drain" (D), and "source" (S). In its simplest form, the MOSFET acts like a valve that lets current flow from the drain to the source. The "gate" controls this valve (think of opening and closing a valve to a garden hose), except that control is electrical instead of mechanical. A voltage applied to the gate from one of the Arduino's output pins turns the MOSFET "on" - allowing high current to flow from the drain to the source, without actually drawing any current from the Arduino. If the voltage to the gate from the Arduino is zero, the MOSFET shuts off and stops current from flowing. This way you can control even enormous motors and lights with a tiny little Arduino, as long as you have an external power supply big enough to handle it. I should also mention pulse width modulation (PWM). This is a common technique used to control LED brightness with an Arduino. In short, the Arduino's output pins are digital, so they can only output a HIGH or a LOW (5V or 0V). They can't continuously vary their voltage to adjust something like LED brightness or motor speed. Instead, what they can do is send out very rapid pulses (roughly 500 times per second with the Arduino), much faster than the human eye can see. Each pulse consists of a HIGH segment and a LOW segment, and the relative ratio between the two determines the "brightness" that we actually see. A pulse that is 0% high and 100% low will just look like "off". 100% high and 0% low will be "full brightness", and 50% high/50% low will be about half-brightness. You get the idea. In this circuit, a PWM signal is sent to the MOSFETs, which then controls the high current going through the LEDs, allowing a "fading" effect and adjustable brightness. Step 4: Arduino Code Copy and paste the Arduino code below into a new sketch. I won't write my own tutorial here, so if you don't know how to create/upload a sketch, check out the official Arduino - Getting Started page. If you want to learn more about a specific command, just Google it (e.g. "Arduino analogWrite") and the official help page should pop right up. Caveat: this probably isn't the most efficient code! Particularly, I'm not sure of a nicer way to continuously monitor the fade-speed potentiometer without copying and pasting the same line of code over and over, or if there's a way to break out of a for loop if you flip the toggle switch (right now, if you switch to individual-control mode while in color-fade mode, the switch won't occur until it finishes the current fade cycle). So, I'll throw that out there as a challenge to anyone who's reading this and wants to post better code. Clearly I'm a mechanical engineer at heart and not a programmer. // Arduino code to control and RGB LED strip // Uses a toggle switch to switch between color-fade mode // and individual RGB control mode // adapted from http://learn.adafruit.com/rgb-led-strips/example-code const int RED = 9;    // define digital output pins for individual red, const int GREEN = 10;  //green and blue channels const int BLUE = 11; const int POT1 = 0;    // define analog input pins for three potentiometers const int POT2 = 1; const int POT3 = 2; const int POT4 = 3; const int BUTTON = 2;  // define digital input pin for the switch int val = 0; // stores the state of the switch input pin int FADESPEED = 0;  // initiate fade speed set by potentiometer int r = 0;  // initialize the red, green and blue values int g = 0; int b = 0; void setup(){ pinMode(RED, OUTPUT);    // define digital pins as outputs and inputs as needed pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); pinMode(BUTTON, INPUT); } void loop(){ val = digitalRead(BUTTON);   // read the input value from the toggle switch if (val == HIGH){ // code for RGB color fade FADESPEED = analogRead(POT4)/10;   // set the fade speed by reading analog input from 4th potentiometer // analogRead will output a number between 0 and 1023, and "delay" // is in milliseconds, so the biggest delay you'll get here is about // 1/10 of a second. Divide by a different number to change the max // fade time. // fade from blue to violet for (r = 0; r < 256; r++) { analogWrite(RED, r); FADESPEED = analogRead(POT4)/10;  // check the fade speed continuously, otherwise // it won't update until it's gone through a complete cycle. // Probably not the most efficient way to do this... delay(FADESPEED); } // fade from violet to red for (b = 255; b > 0; b--) { analogWrite(BLUE, b); FADESPEED = analogRead(POT4)/10; delay(FADESPEED); } // fade from red to yellow for (g = 0; g < 256; g++) { analogWrite(GREEN, g); FADESPEED = analogRead(POT4)/10; delay(FADESPEED); } // fade from yellow to green for (r = 255; r > 0; r--) { analogWrite(RED, r); FADESPEED = analogRead(POT4)/10; delay(FADESPEED); } // fade from green to teal for (b = 0; b < 256; b++) { analogWrite(BLUE, b); FADESPEED = analogRead(POT4)/10; delay(FADESPEED); } // fade from teal to blue for (g = 255; g > 0; g--) { analogWrite(GREEN, g); FADESPEED = analogRead(POT4)/10; delay(FADESPEED); } } else { // code for individual RGB control with potentiometers r = analogRead(POT3)/4;  // read values from the 3 potentiometers and divide by 4 to set brightness g = analogRead(POT2)/4;  // note that analog read is 10-bit (0-1023), analog write is an 8-bit PWM b = analogRead(POT1)/4;  // signal so you need to divide this value by 4. analogWrite(RED, r);     // write analog values to red, green and blue output pins analogWrite(GREEN, g); analogWrite(BLUE, b); } }   For more detail: Arduino-controlled RGB LED Infinity Mirror ### Bluetooth Weather Lamp This was a 2 hour project I whipped up in order to learn how to use a new Bluetooth LE 4.0 module I picked up at redbearlab.com, called a BLE Mini. I've since thought of several much simpler ways (and more dependable) to accomplish the same thing, such as simply lighting 3 LEDs behind weather icon cut-out masks instead of the whole servo thing... but again, I wanted to learn to run the servo too. So there it is. Step 1: The Dirty Bits Major Components in Project Before we dig in, a parts list, for those who like lists: 1. One Arduino “Whatever” (Uno, Mega, Leonardo, Lovitz, etc). 2. One small bread board (included in above kit) 3. One BLE Mini Bluetooth module from redbearlab.com 4. One Philips 12 volt 3 watt LED porcelain bulb 5. One small servo 6. One 12 volt power supply (at least 1 amp) 6. One lamp with shade 7. Assorted: aluminum sheet (soda can), wire, cardboard, tape, blade/scissors, zip ties 8. Lastly, you’ll need an iPhone and an Apple developer account, or some other method of communicating with the Bluetooth module. Red Bear Lab has an example app on the app store called "BLE Arduino". You can control the servo from here, but you'll likely want to modify and build your own version of the code which pulls in weather for your area. If this is too much to take on for some, I totally understand. You can just as well turn this project into a clever shadow clock or other indicator (insert imagination here). I'd release the app I've modified onto the app store, but honestly, I'm afraid it would get poor reviews. ;) Step 2: Down to the Wires I'll apologize now for the poor manor in which I describe the wiring and connections. Eventually I'll learn to use some nice schematic software. Also, my wire color choices are horrible, but this was a fast prototype. I know ground should be cauliflower blue... From my count, you'll need 9 wires. Mouse over each in the picture for a description of where they are going to end up. Step 3: Blue Teeth, Like Violet Beauregarde. Huh? I don't get the title either. Moving on. Plug the BLE Mini module into the bread board (or solder it somewhere nice if you're fancy at heart). Connect the 4 wires as shown in the picture, please. This Bluetooth module will be responsible for getting info from your iPhone and telling the Arduino what to do (like Dorothy told Sophia what to do). Notice it has an "RX" and a "TX" pin. These should be connected to the opposite pins on the Arduino (i.e. RX connects to TX and TX to RX). The other two wires are for power. Simple. Step 4: Servo Me a Drinko Now this title, I get. The servo will be responsible for rotating the weather icon mask in front of the LED light source. The Arduino program (pasted at end of Instructable) is always listening to the Bluetooth module. When your iPhone app sends it new commands, the servo moves to a new position. Step 5: Porcelain Wrapped in Aluminum... mmmm... I'll chalk this one up to poor part selection (and a rushed lunch hour). Ideally, you'll find a nice high brightness single LED, but I had to make do. If I let all three LEDs shine on, I'd get triple silhouettes being projected into my lamp shade. Not desired. I already see double typically, so that would make sixal... what? I bend a piece of aluminum to fit over two of the LEDs so just one does the shadow casting magic. I thought to redirect the other two to illuminate the back side of the lamp shade, but alas... I am lazy. WARNING: Don't use paper or plastic. While they are LEDs, they do get very hot while running, including the porcelain enclosure. Step 6: Let There Be Light! The 12 volt LED bulb has two pins, which happen to fit perfectly into the bread board holes! Happy day! Plug 'er in and connect the "GND" and "VIn" wires from Arduino to it. The bulb is reversible, so the polarity doesn't matter (nice touch, Philips). Point the light out the side of the bread board (or your fancy pants custom PCB, if that's what you're into, fancy pants). WARNING: Select two rows on the bread board which DO NOT connect to any other components! If you inject 12 volts into the bluetooth module or servo, you'll fry them! Step 7: Make Yourself a Breadboard Sandwich Take your two slices of whole grain technology and smoosh them together, back to back. The Arduino Uno sits beautifully on the small breadboard. A couple of zip ties will hold them nicely. Step 8: Stick a servo on that sucker! I found that my mini servo fit perfectly and snug between the pins of the Arduino, so I zip tied it there. The servo shaft should protrude past the edge of the bread board so that the shadow mask disc will clear everything comfortably. Step 9: Get Crafty Sketch yourself a few weathery icons and cut them out from cardboard or card stock. They should be about an inch wide each. Cut out a disc about 3-4 inches wide and attach the masks to it (or save some hassle and just cut them out of the disc to begin with). Mark the center of the disc and attach a servo arm to it. My servo came with a bunch of the them. Attach the disc to the servo and align it so the LED bulb can shine through the mask icons.   For more detail: Bluetooth Weather Lamp ### DIY Skee Ball Machine The skee ball machine is a wonderful thing. The simple experience of rolling a ball into a target is so freakishly satisfying that I used to play as much as I could as a kid at the local amusement park/mini-golf course. The sound of the rolling ball on the ramp, the pop as it launched in the air, and the bouncing as you hoped it would hit the 50 or even the 100. So when the idea for doing a bigger project came up, I jumped at the chance to make a DIY version. I was amazingly lucky to get a lot of help from the folks at Because We Can who did the design and fabrication of the machine on a Shopbot. Note: this version was made for Maker Faire and as such has a few loose ends. It survived Maker Faire (mostly), but needs some more work to be bullet-proof. Step 1: Get Stuff Major Components in Project Electronics Digital Distance sensors Arduino Uno breadboard laptop 100mm arcade button wires stereo Software Arduino Processing Illustrator (or other vector graphics program) Display 32″ HDTV HDTV mount Cabinet 7 sheets of 3/4″ plywood gorilla tape netting wood screws paint Tools ShopBot Cordless Drill Other Balls. These are balls from the ice ball game and were bought on eBay (search for “ice balls skee”) for $10 each Step 2: The four main pieces These are the four main pieces of the skee ball machine. These can be easily taken apart so that the whole thing can be moved in a 10' U-Haul truck. The ramp slots onto the cabinet and doesn't use any fasteners to be attached. The Revit files for the skee ball machine are attached. With this design, the pieces were cut out of 3/4" ply on a ShopBot. The assembly is straightfoward as it's a tab-and-slot design. Step 3: The playfield The pieces for the playfield are straightforward. Most of the pieces fit together as in the picture above. The kicker at the end of the playfield is made up of several s-shaped pieces of cut plywood all glued together. The ramp itself is covered with cork and the front end of the ramp has a metal bracket to protect against wayward throws.   For more detail: DIY Skee Ball Machine ### LED Shoulder Pads For this project, I was inspired by my best friend. She had been wanting some disco-fabulous armor-inspired wearable technology for music festivals and costume parties for some time. I took a pair of construction/gardening knee-pads and turned them into glitterific shoulder pads that shine bright with 50 LEDs that are Arduino controlled! This project was super fun to make! SO SPARKLY! Step 1: Materials and Tools Major Components in Project All of the components I used were purchased from Radioshack, or the Hardware store Electronics: 60-Ft. UL-Recognized Hookup Wire (20 AWG) (Radioshack Part no. 278-1225) x1 9V Battery Clip (Radioshack Part no. 270-324) x1 12V Battery Clip (Radioshack Part no. 270-405) x1 Arduino Micro (Radioshack Part no. 276-258) x1 Solder (Radioshack Part no. 64-009) x1 Grid Style PCB with 371 Holes (Radioshack Part no. 276-149) x1 Dual-General Purpose IC PC Board (Radioshack Part no. 276-159) x1 NTE30043 Blue Super-bright LED Indicator (Radioshack Part no. 55050631) x24 NTE30045 White Super-bright LED Indicator (Radioshack Part no. 55050633) x24 SPST 3-Amp “Soft-Feel” Push On-Push Off Switch (Radioshack Part no. 275-1565) x1 Momentary Switch (Radioshack Part no. 275-609) x1 +5V Fixed Voltage Regulator/Transistor (Radioshack Part no. 276-1770) x2 Enercell® 23A 12V Alkaline Battery for Remote Controls (Radioshack Part no. 23-336) x1 Enercell® “9V” Alkaline Batteries (4-Pack) (Radioshack Part no. 23-866) x1 500-Piece 1/4-Watt Carbon-Film Resistor Assortment (Radioshack Part no. 271-312) x1 Materials: Bon 12-309 Superlight Molded Rubber Foam Waterproof Knee Pads TEKTON 6235 Assorted Cable Ties, 200-Piece Scrap Denim Fabric Krylon K02329000 Fusion For Plastic Aerosol Spray Paint, 12-Ounce, Patriotic Blue 3M 77 Super Multipurpose Adhesive Aerosol, Clear 16.75 Oz. Aerosol Can Clear Gloss Spray Lacquer Sulyn 4 oz. Glitter Jar – Royal Velcro Reusable Self-Gripping Ties, 0.5 Inches x 8 Inches, Black/Gray, 50 Ties per Pack (90924) 50 – 1 Inch Heavy Welded Dee Rings Tools: Sewing Machine Soldering Iron Wire Snips/Strippers Drill and various bits Step 2: Straps and Foam In an effort to prep the knee pads to transform them into shoulder pads, I took off the straps and foam. This was a little tricky, and took a little bit of wrestling - but I was able to get it off without ripping the foam apart. If you need to, use a pair of scissors to cut the foam away from the pegs holding it in place. Step 3: Make it Shiny! (part 1 of 3) I put down some waxed butcher paper on the shop floor, so I wouldn't turn it blue with my overspray. After I had the paper taped down, I set my shoulder pads on top of it, and went to town with the paint. The trick to getting good results with spray paint is distance, motion and time. Hold the can more than 6 inches away from whatever it is your painting. Move the nozzle and can constantly while applying paint in zig-zag sweeping motions. Allow the paint adequate time to dry. This will vary depending on the type of paint you use - read the directions on the back of the can - this paint took a full 24 hours to dry. Step 4: Make it Shiny! (part 2 of 3) After the spray paint dried, I began to coat it with Spray adhesive and adhere the glitter to it. I coated the shoulder pads quickly with two even coats of adhesive, applied sequentially. Give the Super 77 about 5 minutes to get really tacky. The fun part was unloading an entire canister of blue glitter onto the shoulder pads. I was certain that I had purchased too much - but sure enough, I ended up using the entire jar of glitter! I had to pick up some of the glitter that fell off the pads and throw it back on, it all stuck eventually. :)   For more detail: LED Shoulder Pads ### Homemade Arduino Friendly Pulse Sensor I saw the Open Hardware Pulse Sensor at thought I'd try to make it at home.  Took me awhile, but here's my bumbling process. Step 1: Pulse Sensor -- Overview I've been working on re-making the the Open Hardware Pulse Sensor so it'd be "easy" to send off to OSHPark and make at home. I'm not sure but I think I started this project in March (2013) and I've just now finished it. The bit of encouragement I needed was when hackaday.com put it up as their "Fail of the Week."  I thought I was going to be mature about it.  But those four red letters started eating at me, so I gave it another go.  Weirdly, I got it working. I do want to take a moment and thank hackaday.com. I know not everyone is happy with them right now, but I firmly believe in their "Fail of the Week" article.  It seems like we are all quick to cover projects that work, but that mentality leaves many committing the same mistakes over and over, without realizing there are thousands making that same mistake themselves.  Excellent foresight and innovation, hackaday.com. Hats off. Back to it, I believe there were three problems: 1. I had mixed up the op-amps again.  In my defense, I've got 5 different ICs flying about in the same package as the op-amp. 2. The Arduino I'd been plugging into was sitting on a surface that provided enough conductivity to create noise between the 3.3v pin on the underside and A0, which I was using for the op-amp in. 3. Every time I touched the sensor the exposed vias were shorted through my own conductivity.  Stupid mineral water. Anyway, after finishing it and getting it to work, I thought I'd share what information I had gathered. Here's a video I put together about the fail and problem fixing. Step 2: Pulse Sensor -- Full Disclosure As I've stated elsewhere, I'm not an engineer, I'm a pure hack.  So, follow these instructions knowing I've probably made a mistake or missed something dire. Also, if you watched the video from the previous step you'll know we're up against:0402 passives.  That's a 0402 on Frankie's nose.  I ask you not be scared, they are small, but aren't many of them. Step 3: Pulse Sensor -- Parts Alright, the bill-of-materials (BOM): Op-amp:   .29  (Digi-Key) Light Photo Sensor: 1.23 (Digi-Key) LED:   .79   (Digi-Key) 0603 Schottky Diode: .50 (Digi-Key) Passives:  ~2.50 - Resistors: 1 x 470k, 1 x 12k, 2 x 100k, 1 x 10k, 1 x 3.3Meg - Capacitors: 3 x 4.7uF, 2 x 2.2uF OSHPark Boards: $.67 (minimum 3 boards, costing $2.00. 3/2.00 = ~.67) I figured the total for one board should be around $5.98.  Of course, they get a lot cheaper if you buy your passives in bulk. Step 4: Pulse Sensor -- Tools These are the tools I used: 1. Clothes-iron 2. Solder at least .022" 3. Flux 4. A soldering iron with a "precision" tip 5. Tacky-putty 6. Precision tweezers 7. Hakko FX-888 Solder Iron Really, any comparable tools will do. Use my motto, buy cheap and make do. Step 5: Pulse Sensor -- Soldering the Front It's not as hard as you'd think. The light sensor is the hardest bit, so take your time.  I put a little bit of solder on each pad with my soldering-iron, then, cover the soldered pads in flux.  Next, I attempt to align the light-sensor with the pads as close as possible.  After, I put the board with the backside on an over-turned clothes iron.  Let the iron heat up until the solder reflows and the sensor is attached. Make sure to watch for solder reflow.  As soon as the sensor stops moving, count to 5 (Mississippily) and pull the board off. This prevents damage to the adherence of the copper traces to the fiberglass board; meaning, not overheating the board will help keep the delicate traces from pulling away when you go to solder the back. The guide is: Very hot and very fast over kinda warm and fairly slow. Step 6: Pulse Sensor -- Soldering the Back Flip the sensor and lock it to your surface with tacky-putty to solder the LED, passives, and op-amp.  I won't detail this, since my video shows the entire process. A few notes though. 1. Make sure the main LED is face down in the hole, like shown in the above image.  Notice the "L" shape points to the right. 2. The small little diode is tricky, since the pads are under it.  Put some solder on the places where the diode will go, then, flux the mother out of the soldered pads.  Next, place the diode on the pads with the rosin-flux holding it down.  Tap the solder under the diode and see if it will suck the diode down onto the pad. 3. Make sure the diode is facing the correct direction.  Either match the 2 lines on the diode with the white line on the board.  Or just know the 2 lines on the diode should face to the left, given the above picture as reference. 4. I'd use the drag-to-solder method on everything but the 0603 diode and the light-sensor (which we used the clothes-iron for). Yell if you have questions or gripes   For more detail: Homemade Arduino Friendly Pulse Sensor ### How to Create an Arduino Compatible Bluetooth 4.0 Module I had been looking for a cheap alternative to some of the Arduino Bluetooth devices I'd seen, which in my opinion are overpriced. Redbear's Mini: $39.95 (Note: This is a uC and BLE combo). Redbear's Uno Shield: $29.95 BLEDuino: $19.95 (if part of Kickstarter) Bluegiga Shield: $69.95 After seeing these, I thought I'd try to make one; this is my bumbling process for making an Arduino Bluetooth 4.0 device at home: Updated efforts: http://letsmakerobots.com/node/39795 GitHub: https://github.com/Ladvien/HM-10 Step 1: How to Create an Arduino Compatible Bluetooth 4.0 Module This guide is intended to show how to interface one of these HM-10 Bluetooth Low Energy modules to an Arduino. I started working with these little Bluetooth modules in attempt to add Bluetooth 4.0 to my robot projects. Step 2: Arduino BT 4.0 Module -- Overview There are a few bits of information I'd like to offer upfront.  First, I'm a homeless outreach worker; I'm not an engineer of any sort.  So, there will be mistakes in my design. Second, although I was able to interface these BT 4.0 modules with an Arduino, I've not fully interfaced them with a PC or  mobile device.  This is due to the BT 4.0 software stacks being very different than earlier versions of Bluetooth (<3.0). Still, I've shown that is possible to make this bridge using the Lightblue app for iOS. It's also one reason I write.  I'm too cheap to pay to develop an iOS app to interface with these modules and I don't own an Android device with BT 4.0.  So, I'm hoping someone in the crowd will let me know when they've finished the software needed. :) I will state that Jellybean 4.3 offers a Bluetooth 4.0 API. Now, price is a big concern with me, so I'll givet the breakdown up front: The bill-of-materials (BOM): 1.HM-10 x 1 2.BS1138 x 1 3.0603 LEDs x 3 (best if assorted colors) 4.0805 Resistors 10k x 4 5.0805 Resistors 220 x  3 6.(OPTIONAL) SOT-23-5 LDO Voltage Regulator (it doesn't make sense to use this, but I put the option on the board just in case. I'll explain). This should bring your total just under $10 USD.  And the boards I purchased from OSHPark, which come out to be less than $2 a piece.  Therefore, I figure around $12 for a BT 4.0 module. I felt this price was better than some of the options available: Redbear's Mini: $39.95 (Note: This is a uC and BLE combo). Redbear's Uno Shield: $29.95 BLEDuino: $19.95 (if part of Kickstarter) Bluegiga Shield: $69.95 Step 3: Arduino BT 4.0 Module -- Order the Parts Alright, if I've not scared you away then the first thing to do is select a layout. I designed two different layouts, a Xbee footprint and a full breakout, which will fit nicely into a breadboard. Xbee ($5.15) for 3 boards. Breadboard breakout ($6.35) for 3 boards. Order the components listed The bill-of-materials (BOM): 1. HM-10 x 1 2. BS1138 x 1 3. 0603 LEDs x 3 (best if assorted colors) 4. 0805 Resistors 10k x 4 5. 0805 Resistors 220 x  3 6. (OPTIONAL) SOT-23-5 LDO Voltage Regulator (it doesn't make sense to use this, but I put the option on the board just in case. I'll explain). The total time on the boards is ~16 days. Step 4: Arduino BT 4.0 Module -- Soldering A few notes on soldering the SMD pieces: DON'T BE SCARED.  It's really not that hard. 1. There are three musts to SMD, at least from my perspective: a small iron tip,precision tweezers, thread-like solder (at least .022" solder wire). 2. Other important soldering tools: A wet sponge and brass-ball will keep your fine soldering tip fine.  Sponge the solder tip, then run it through the brass-ball after each component to prevent build-up. 3. To speak blasphemy: Flux is ok, but I find the tweezers often take place of the flux. 4. Practice using both hands during soldering. Tweezers in one and solder-iron in the other. 5. The drag-to-solder method will be what you use on this board. 6. Patience. 7. Have a cup of wine.  Alcohol reduces performance on most skills, except, skills that involve fine motor control, there is a marked 20% improvement.  Though, this relationship is curve-linear.   One glass is good, two glasses and you'll smoke something. 8. Honor the age old tradition: Don't solder in your boxers. Here is a video of me soldering the first iteration of the breakout board.   For more detail: How to Create an Arduino Compatible Bluetooth 4.0 Module ### DIY Robotic Hand Controlled by a Glove and Arduino This project idea came to me when I was sitting on a bed on a hotel room on vacation. I thought: "It'd be really neat to have a robotic hand that I can control with my own hand!" Upon returning home, I embarked upon a journey to design and create the project. I hope you enjoy! The basic components of the hand and glove are the hand itself, the servos, the Arduino, the glove, and the flex sensors. The glove is mounted with flex sensors: variable resistors that change their value when bent. They're attached to one side of a voltage divider with resistors of a constant value on the other side. The Arduino reads the voltage change when the sensors are bent, and triggers the servos to move a proportional amount. The servos pull strings that act as tendons, allowing the fingers to move. Here's a video of it in action (http://m.youtube.com/watch?v=qMtHEOxHDGo): The hand itself comes from an open-source, 3D-printable download. It's part of a project called InMoov: http://inmoov.blogspot.com (http://www.inmoov.fr) This guide will show you all the steps required to build your own robotic hand and control glove! Step 1: Gather the Materials Major Components in Project In total, this project will cost about $100-150, depending on where you get some of the parts. Here’s the parts list: 5x MG946R Servos (or equivalent – MG995 or MG996 should work too. I’ve had a bit of trouble with the range of motion, so servos that support more degrees of rotation would be better) – I got mine from hobbyking.com, but for a less expensive option I’d go with eBay (they come directly from China, so shipping may take longer). 5x 4.5 inch flex sensors – I got mine here:http://microcontrollershop.com/product_info.php?products_id=3802 1x Arduino Uno or equivalent (they’re also much cheaper on eBay) 5x 22k resistors 1x 6.0-7.2V battery (for the servos) – I used this: http://www.all-battery.com/Tenergy7.2V3000mAhRCCarNiMHBatteryPackwithCharger-91103.aspx 1x small breadboard 1x battery connector – something like this: http://www.radioshack.com/product/index.jsp?productId=2103292 Breadboard jumpers/hookup wire 1x small blank PCB – I used something like this, only square: http://www.radioshack.com/product/index.jsp?productId=12516741 1x right hand glove (should be sturdy and fit well) 1x 8mm diameter 55mm long bolt 1x 8mm diameter 60mm long bolt 1x 8mm diameter 80mm long bolt 14x 3mm diameter about 20mm long screws 20x 4mm diameter screws (any length between 7mm and 30mm is fine) Approx. 5 meters of string (should have a high-ish breaking strength) – I used this: http://www.amazon.com/gp/product/B004YWKPCS/ref=oh_details_o01_s00_i00?ie=UTF8&psc=1 Hot glue Super glue Sandpaper (I used 431 grit) – a Dremel tool with a sanding head would also work Needle and thread A power drill A soldering iron Access to a 3D printer …And you’re ready to start! Step 2: Print the Hand The hand is part of an open-source project called InMoov. It's a 3D-printable robot, and this is just the hand and forearm assembly. From this page on Thingiverse (http://www.thingiverse.com/thing:17773), download and print the following parts: robpart1.stl* robpart4V2.stl robpart5V2.stl Auriculaire3.stl Index3.stl Majeure3.stl ringfinger3.stl WristsmallV3.stl thumb5.stl Wristlarge.stl *robpart1.stl seems to have been removed, but I've attached the file. And from this page (http://www.thingiverse.com/thing:65274): RobCableFrontV1.stl RobRingV3.stl (note - I had to drill these a bit myself to get them to fit my servos) RobCableBackV2.stl RobServoBedV4.stl robpart3V3.stl robpart4V3.stl (these two are covers for the forearm - they're not necessary for strictly functionality) In total, the parts take about 13-15 hours to print depending on the resolution you use. I used a MakerBot Replicator 2X - I'd recommend printing the finger parts in standard or high resolution to avoid unwanted friction. I also included rafts with all the parts, as they make the prints more consistent, especially when using ABS plastic. Step 3: Making the Sensor Circuit The flex sensors require a circuit in order for them to be compatible with Arduino. It's a voltage divider: the flex sensors are variable resistors, and when paired with resistors of a static value, change in resistance (in this case bending the sensor) can be sensed through the change in voltage between the resistors. This can be measured by the Arduino through its analog inputs. The schematic is attached (red is positive voltage, black is negative, and blue goes to the Arduino). The resistors in the photo are 22K. I color-coded the wires I used in the same way as the schematic, so you can see more easily. The main GND wire, which is connected to all the individual GND wires from the sensors, gets plugged into the Arduino's GND. The +5V from the Arduino goes to the main positive voltage wire, and each blue wire gets plugged into a separate analog input pin. I soldered the circuit onto a small PCB from RadioShack, one that could be easily mounted onto the glove. I was able to solder the wires to the sensors relatively easily also, and used heat shrink to make sure there were no shorts. I then wrapped the area where the wires are connected to the sensors with electrical tape to stabilize the sensors. Near the bottom, where the leads are attached, the sensors are a bit weaker and the tape ensures that they won't bend too far and won't get damaged. Step 4: Sew the Glove Now it's time to mount the sensors and their circuit onto the glove itself. First, drill a tiny hole in the plastic of the sensors (at the top, once the resistive material has ended). Be sure not to hit the resistive material! Then, put on the glove and pull it tightly to your hand. On each finger, with a pencil or pen, make small lines over the tops of each joint/knuckle. This will tell you where to sew the sensors. Sew each sensor tip to the area of each finger just above where each of your fingernails would be (use the hole you just drilled). Then, for each sensor, make loose loops around them with thread at both joints in each finger. Once each sensor is in place and slides under the loops of thread nicely, sew the PCB onto the wrist part of the glove tightly. REMEMBER: for each step in this process, be sure you're not sewing the glove itself closed. That's quite a hassle.   For more detail: DIY Robotic Hand Controlled by a Glove and Arduino ### BARC Jeep - An XBOX Controlled Power Wheels Make a power wheels jeep that is controlled by an XBOX controller. This particular build is using Power Wheels® Jeep® Hurricane with Monster Traction™ but should be usable across many different types of power wheels with small adjustments. I wanted to do this project so I could drive my kids around. They are 2 and 3. We take the jeep out a few times a week. It's great for going to the park or just walking around the neighborhood. It works kind of like a stroller as far as containing and protecting them, but obviously way awesomer. This project has also been built with expansion in mind. Because the motor controller boards have feedback, and there's plenty of room left on the Arduino microcontroller, it will be easy to add things such as proximity sensors and driver profiles. That way, when I give it to my little boy to drive himself, I can set the driver profile to be gentler as well as activate proximity sensors so he can't ram a tree. Also, in essence this entire build is a fairly simple way to get a robot off the ground. My project was particular to the power wheels because I'd been dreaming of sitting on my porch with my controller and driving my kids in the yard, but really the setup could apply to anything with motor driven wheels and a steerable front end. (motor size etc taken into consideration of course). I hope you enjoy reading about my project as much as I did making it. And if you do decide to tackle this Instructable and build your own, please contact me for any questions. I want to keep improving this so as many people can take that old Power Wheels and make it into the coolest thing on the block. Now let' s make it! Things you will need: Working 12 Volt Power Wheels with Battery (check Amazon or Craigslist if you don't have one) Arduino Uno R3 USB Host Shield Pololu Simple High-Power Motor Controller 18v25 Pololu Jrk 12v12 USB Motor Controller with Feedback Concentric LACT4P-12V-5 Linear Actuator with Feedback: 4" Stroke, 12V, 1.7"/s Microsoft Xbox 360™ Wireless Gaming Receiver for Windows® Xbox 360 Wireless Controller 12"x12"x.25" sheet of aluminum (available at hardware store) 4' of shelf track (or whatever generic type can be found) Assorted nuts and bolts for making steering drive connections A piece of perfboard to make the breakout board Connection headers USB cord that fits Arduino to be hacked 3 strand wire for signal and power transmission to actuator Various wire bits for jumping on breakout board and other places Tools / Supplies: * Soldering Iron (i like this one) * Solder * Wire Strippers * A saw or cutting wheel to cut metal (i used an end grinder with a cutting wheel) * Wrenches / Screwdrivers * Drill - (a drill press is good for the steering plates, but a drill will work) Overview: Connect the Arduino to the USB Host shield, then connect that to the Wireless gaming receiver. Drive the linear actuator with the Pololu Jrk Motor Controller Drive the motors already in the Power Wheels with the Pololu Simple High-Power Motor Controller Connect both motor controllers to the Arduino so they are controlled by the Xbox controller. Remove the steering mechanism currently in the Power Wheels Build a custom steering mechanism that is controlled with the linear actuator. Sounds easy, right! Step 1: Get the Xbox Controller Communicating to the Arduino The first thing is get the Xbox controller communicating with the Arduino via theUSB Host Shield. All of the pics included in this Instructable show an Arduino Mega, but in reality, an Uno is all that is needed for the USB Host Shield and only 2 digital outs. Plug the USB Host Shield onto the Arduino. For now, power the Arduino with you're computer. Next plug the Xbox 360™ Wireless Gaming Receiver for Windows®. Once these connections are made load code shown below into the Arduino which allows the Arduino to perform steering operations based on input from the controller. There's plenty of notation to help understand what's going on. Arduino Code // ***************************** // *    RC Power Wheels Jeep   * // ***************************** /* OVERVIEW A 12v dual-motor Power Wheels Jeep Hurricane will have drive and steering remotely-controlled via Arduino. HARDWARE Power Wheels Jeep Hurricane Arduino UNO R3 Circuits@Home USB Host Shield 2.0          http://www.circuitsathome.com/products-page/arduino-shields/usb-host-shield-2-0-for-arduino Pololu Simple Motor Controller 18v25       http://www.pololu.com/catalog/product/1381/resources Pololu JRK Motor Controller 12v12          http://www.pololu.com/catalog/product/1393/resources Pololu Generic Linear Actuator 4" .6"/s    http://www.pololu.com/catalog/product/2333 Xbox 360 Wireless USB Adapter Xbox 360 Wireless Controller HARDWARE CONFIGURATION * +-------+         +---------------+  USB    +-----------------+ * |Arduino+-------->|USB Host Shield+-------->|XBOX USB Receiver|****/>      // Xbox 360 Wireless Receiver //Create USB instance? USB SHIELD USB Usb; // Create an instance of the Xbox Receiver inputs called XboxRCV XBOXRECV XboxRCV(&Usb);  // USB SHIELD // These next constants are bytes part of the Pololu Protocol const byte pololuCommandByte = 170; const byte smcDeviceNumber = 13; const byte smcSpeedDataByte3 = 0; const byte smcFWDbyte = 5; const byte smcREVbyte = 6; const byte jrkDeviceNumber = 11; char smcSpeed;  // Final speed long int leftStickX; // Xbox Left Analog Stick value void setup(){ Serial.begin(9600);    // Serial baud rate to 9600 // Halt program until shield is connected // USB.Init will return -1 for shield disconnected and 0 if connected if (Usb.Init() == -1) {    // If USB shield did not initialise for whatever reason... while(1); //halt as long as shield is reported disconnected } } void loop(){ Usb.Task(); // Let's process the Xbox input if(XboxRCV.Xbox360Connected[0]) { // START button sends exitSafeStart command to SMC if(XboxRCV.getButtonClick(START,0)){ // ******************************* // *        exitSafeStart        * // ******************************* // Required to allow motors connected to SMC to move // Must be called when controller restarts and after any error // Pololu Protocol: 0xAA (170) | device number | 0x03 (3) Serial.write(pololuCommandByte); Serial.write(smcDeviceNumber); Serial.write(3); } /* The Xbox triggers provide values from 0 - 255. The SMC will accept a low resolution speed value as a percentage, 0% - 100% (High resolution is a 2-byte int). The next two lines maps the controller to output a negative value for L2 (Reverse) and positive for R2 (Forward). These two values are then summed to provide the final speed and direction. This is so that both triggers can be held simultaneosly without causing the values to oscillate between Forward and Reverse */ char XboxL2 = map((XboxRCV.getButtonPress(L2,0)), 0, 255, 0, -100); char XboxR2 = map((XboxRCV.getButtonPress(R2,0)), 0, 255, 0, 100); // Sum the mapped inputs together to give a final speed and direction smcSpeed = XboxL2 + XboxR2; /* The sample code for the Xbox controller gave a deadzone of -7500 to 7500. This code maintains that dead zone for now (I would like to make it adjustable while the sketch is running). */ leftStickX = map(XboxRCV.getAnalogHat(LeftHatX,0), -32768, 32767, 0, 3880);  // Analog stick moved // Set the dead band in the left analog stick. Would like this to be adjustable if ((leftStickX >= 1500) && (leftStickX <= 1983)){ leftStickX = 1400; } } // If no triggers/sticks are moving, then center and zero else { leftStickX = 1400; smcSpeed = 0; } // ************* RESERVED "HEARTBEAT" ********** // "Heartbeat" will send a serial command every x seconds as a "keep-alive" to the SMC and JRK // controllers. It will also prevent duplicate commands from flooding the serial buffer (ideal // for Xbee implementation). // ******************************* // *      SEND SERIAL COMMANDS   * // ******************************* /* Reserved for serial commands sent to motor controllers to adjust option parameters. Also to process the response from those commands if applicable. */ // THIS SECTION SENDS THE SPEED AND DIRECTION COMMANDS TO THE SMC // ******************************* // *        setMotorSpeed        * // ******************************* /* http://www.pololu.com/docs/0J44/6.2.1 The Pololu SMC can use a full resolution speed value (-3200 to 3200), however, this is not needed (yet) since the Xbox controller analog triggers only output 0 to 255. The below tables are copied straight from the manual linked above. We'll be using a low resolution speed value expressed in percentage (0 to 100). "Alternate Interpretation: The allowed values for the second speed data byte are 0–100, so you can ignore the first speed data byte (always set it to 0), and consider the second data byte to simply be the speed percentage. For example, to drive the motor at 53% speed, you would use byte1=0 and byte2=53." Motor Forward Command Byte Data Byte 1 Data Byte 2 Data Byte 3 Data Byte 4 Pololu Alternate Use 0xAA (170) device number 0x05 (5) 0 (always)      speed % Motor Reverse (data byte 2 changes) Command Byte Data Byte 1 Data Byte 2 Data Byte 3 Data Byte 4 Pololu Alternate Use 0xAA (170) device number 0x06 (6) 0 (always)      speed % */ // smcSpeed should be a number from -100 to 100 // First send the Pololu SMC command byte Serial.write(pololuCommandByte); // Next, send the SMC device number Serial.write(smcDeviceNumber); // Here, let's determine the speed and direction. if (smcSpeed < 0)  // Let's reverse since the speed is negative { Serial.write(6);  // motor reverse command smcSpeed = -smcSpeed;  // make smcSpeed positive b/c the command can only read positive numbers } else { Serial.write(5);  // motor forward command } Serial.write(smcSpeedDataByte3);  // Always zero (for now) because of the protocol being used // Now let's send the actual speed Serial.write(smcSpeed); delay(1);  // For stability // NEXT SECTION SENDS THE POSITION TO THE LINEAR ACTUATOR VIA THE JRK // ******************************* // *          setJRKPos          * // ******************************* /* http://www.pololu.com/docs/0J38/4.e Pololu protocol, hex: 0xAA, device number, 0x40 + target low 5 bits, target high 7 bits Here is some example C code that will generate the correct serial bytes, given an integer “target" that holds the desired target (0 - 4095) and an array called serialBytes: 1 serialBytes[0] = 0xC0 + (target & 0x1F); // Command byte holds the lower 5 bits of target. 2 serialBytes[1] = (target >> 5) & 0x7F;   // Data byte holds the upper 7 bits of target. */ Serial.write(pololuCommandByte); Serial.write(jrkDeviceNumber); Serial.write(0x40 + (leftStickX & 0x1F)); Serial.write((leftStickX >> 5) & 0x7F); delay(1);  // For stability } Step 2: Load Profiles onto the Motor Controllers Each motor controller requires a specific profile. These will specify the power and speed at which the motors are engaged when they receive a signal from the Arduino. You can copy them from below, or you can get the settings from my github entry. The Pololu USB Software Development Kit is needed to program these controllers. Here's a link on how to download and use that SDK so you can use the code below. The SDK works for both motor controllers. Here is the profile for the Pololu Simple High-Power Motor Controller 18v25: SerialUsb None false false false false true 250 5500 6000 25000 Binary 13 0 Disabled false true 9600 None false 0 None false 0 None Floating false 0 None Floating false 0 0 true 16 100 3200 100 200 2000 0 3200 100 200 2000 0 500 2 0 */ And here is the profile for the Pololu Jrk 12v12 USB Motor Controller with Feedback: INITIALIZED 0 INPUT_MODE SERIAL INPUT_MINIMUM 0 INPUT_MAXIMUM 4095 OUTPUT_MINIMUM 0 OUTPUT_NEUTRAL 2048 OUTPUT_MAXIMUM 4095 INPUT_INVERT 0 INPUT_SCALING_DEGREE 0 INPUT_POWER_WITH_AUX 0 INPUT_ANALOG_SAMPLES_EXPONENT 5 INPUT_DISCONNECT_MINIMUM 0 INPUT_DISCONNECT_MAXIMUM 4095 INPUT_NEUTRAL_MAXIMUM 2049 INPUT_NEUTRAL_MINIMUM 2046 SERIAL_MODE UART_FIXED_BAUD_RATE SERIAL_FIXED_BAUD_RATE 9600 SERIAL_TIMEOUT 2 SERIAL_ENABLE_CRC 0 SERIAL_NEVER_SUSPEND 0 SERIAL_DEVICE_NUMBER 11 FEEDBACK_MODE ANALOG FEEDBACK_MINIMUM 1450 FEEDBACK_MAXIMUM 3880 FEEDBACK_INVERT 0 FEEDBACK_POWER_WITH_AUX 1 FEEDBACK_DEAD_ZONE 12 FEEDBACK_ANALOG_SAMPLES_EXPONENT 4 FEEDBACK_DISCONNECT_MINIMUM 40 FEEDBACK_DISCONNECT_MAXIMUM 3900 PROPORTIONAL_MULTIPLIER 35 PROPORTIONAL_EXPONENT 0 INTEGRAL_MULTIPLIER 0 INTEGRAL_EXPONENT 0 DERIVATIVE_MULTIPLIER 60 DERIVATIVE_EXPONENT 0 PID_PERIOD 10 PID_INTEGRAL_LIMIT 1000 PID_RESET_INTEGRAL 1 MOTOR_PWM_FREQUENCY 0 MOTOR_INVERT 1 MOTOR_MAX_DUTY_CYCLE_WHILE_FEEDBACK_OUT_OF_RANGE 600 MOTOR_MAX_ACCELERATION_FORWARD 600 MOTOR_MAX_ACCELERATION_REVERSE 600 MOTOR_MAX_DUTY_CYCLE_FORWARD 600 MOTOR_MAX_DUTY_CYCLE_REVERSE 600 MOTOR_MAX_CURRENT_FORWARD 0 MOTOR_MAX_CURRENT_REVERSE 0 MOTOR_CURRENT_CALIBRATION_FORWARD 37 MOTOR_CURRENT_CALIBRATION_REVERSE 37 MOTOR_BRAKE_DURATION_FORWARD 0 MOTOR_BRAKE_DURATION_REVERSE 0 MOTOR_COAST_WHEN_OFF 1 ERROR_ENABLE 102 ERROR_LATCH 98 */ For more detail: BARC Jeep - An XBOX Controlled Power Wheels ### Make A Multitouch Music Controller Using Arduino This project is an Arduino-powered infrared touchscreen / coffee-table interface that I've been using to control various music and graphics applications on my computer. This is an old project that I've recently had time to go back and document/fix up; this project is a little more special to me than most because it was my first Arduino/electronics project, and while I was doing research for it I ended up on Instructables for the very first time. I've been using this controller primarily to drive music and graphics applications running in MaxMSP. The touchscreen uses infrared (IR) sensing to detect fingers and other objects on the screen. An IR laser at each corner shines IR light across the surface of the screen. When a finger or other object touches the surface, it causes the IR light to scatter in many directions. Some of this light is directed down into the screen, towards an array of 64 IR sensors. By scanning through the sensors, you can determine the x and y position of the touch event(s) and use this to control a variety of apps. An array of 64 LEDs underneath the display provides visual feedback for the interface via rear projection. The LED array operates completely independently from the sensor array - this means the LEDs may be used in more ways that just displaying the current touch positions. This interface is a controller, it does not run apps that are stored in its memory (though that is possible). Instead, it connects to a computer via USB and sends a series of touch messages to control applications running on the computer (similar to how a computer keyboard sends keystrokes to a computer). The computer processes the input data and determines the configuration of the output display, then it sends a series of LED messages back to the interface (similar to how the computer drives an LCD display). This way, the controller is very simple and does not need to handle any processing outside of the basic tasks of getting the states of its inputs (IR sensors) and setting the states of its outputs (LEDs); the computer is doing all the heavy lifting in this scenario. As I said before, this device relies on IR sensing as input information, I found out by accident that it does some cool stuff when you put it outside while the intensity of sunlight is changing rapidly (sunrise/sunset). I had some fun trying to find interesting ways of transforming seemingly random noise from the inputs into sound/lights: Although the project was done a while ago, I've taken it apart recently to refinish the wood and fix a few things that were bugging me. I've still written this Instructable as if I was building it from scratch, but it will be obvious at times that this is, in fact, a finished project. Hot tip: the schematic and firmware used in this project is a modified version of the Arduinome project, which is a modified version of the Monome project. If you run into problems during any stage of this project, you might find what you are looking for in one of those forums. Safety note: this project uses laser diodes strong enough to permanently damage your eyes (or the eyes of those around you), do not use lasers if you don't know how to handle them properly. PARTS LIST: Various Sources (x4) 25 milliwatt 780nm laser diodes with 89 degree line lens Aixis AIX-780-25-8 - really important note here, even though these lasers are labelled "3.2V," they are actually 5V, this took me a really long time to figure out. (x1) rosco black projection screen (a ~2' by 2' piece at least) Rose Brand (x1) Arduino Uno (I used a Duemilanova, but an Uno should work too) Sparkfun DEV-11021 (x1) 20"x20" phenolic sheet (for installing LEDs and IR sensors) (x1) wood 2x4 (for enclosure- I used some redwood that was laying around (x1) 1mm aluminum sheet (for light-tight partitions underneath screens) enough to make 14 20" x 2.5" pieces - I used black anodized aluminum, but regular un-anodized aluminum should work fine too. (x1) 20"x20"x¼” glass pane Digikey (x64) 800nm IR phototransistors Digikey 511-1357-ND (x64) white wide angle LEDs Digikey C535A-WJN-CS0V0231-ND - I found that the quality control on these LEDs is not so great, and they each turned out to be slightly different shades of white. I thought the effect actually looked pretty cool, but if that's not what you're into, I'd try to find some other wide angle LEDs. (x1) MAX7219 LED driver Digikey MAX7219CNG -ND (x1) 24 pin socket Digikey 3M5466-ND (x1) 10uf capacitor Digikey P828-ND (x1) 0.1uf capacitor Digikey 490-5401-ND (x1) 74HC595 shift register Digikey 296-1600-5-ND (x1) 16 pin socket Digikey A100206-ND (x10) 10kOhm 1/4 watt resistors Digikey CF14JT10K0CT-ND (x1) 1/4 watt 7219 resistor (value determined here depending on your LEDs) Amazon (x2) usb cable male type A to male type b Amazon  (x1) usb adapter female type a to female type b Amazon (x1) perfboard with copper Amazon (x1) polycrylic clear coat Amazon (x1) silicon adhesive Amazon (x1) black electrical tape Amazon Jameco (x1) 16 pin ribbon cable Jameco 643532 (x1) 16 pin crimp socket Jameco 1578111 (I didn't actually use this but I wish I had) (x5) male header pins Jameco 103393 (x1) 22 gauge solid core wire Jameco 36792 Tools: screwdriver hot glue gun drill table saw wood mill/router aluminum mill aluminum sheet cutter bandsaw soldering iron infrared/nightvision camera (optional, but useful) Step 1: LLP (Laser Light Plane) Infrared (IR) multitouch is an inexpensive alternative to the capacitive multitouch found in smartphones and tablets. There are a few popular techniques for building an IR multitouch system, all of which are outlined very nicely at the nuigroup wiki. I used a technique called Laser Light Plane (LLP) for my touchscreen; the diagram above gives an overview of how it works. Several lasers positioned on top of the screen create a very thin layer or infrared (IR) light that completely covers the screen's surface. When a finger touches the screen, it breaks this plane of light and scatters some of the IR light into the screen. I partitioned the underside of the screen with pieces of aluminum sheet and placed one IR sensor in each partition. By measuring each of the sensors, you can determine the x and y coordinates of the touch event. I also added a white LED to each partition, so that the screen could be used as a projection surface. The diffuser material on the bottom of the screen (light grey) helps the LED more evenly distribute light across the surface of the screen. This is what LLP looks like with red lasers, IR will work the same, but it is not visible to the human eye: I won't get into the specifics of every IR multitouch technique here (again, check nuigroup for that info), but I'll say a few things about why I chose LLP: zero force - no downward pressure on the screen is necessary to register a touch. glass - I wanted to use glass as my screen surface (looks/feels nicer, less scratch prone than acrylic), but some IR multitouch methods (total internal reflection) require acrylic. thin - many IR multitouch techniques us a camera to do the finger tracking, this means that the camera must be positioned so that it has an unobstructed view of the entire screen. Usually this means making the enclosure of the multitouch surface very deep so that the camera is sufficiently far away. By contrast, my method of using an array with LLP can be scaled down to thicknesses of less than an inch. scalable - the unit piece of this touchscreen - the cell containing one LED and one IR sensor - can be repeated many times to make larger or denser arrays. Some downsides to LLP: - anything that breaks the surface of the screen will trigger the sensors - sleeves, elbows... sometimes that is annoying. It could be a good thing though, you can use regular objects to trigger the touch. - the downfall of all IR touchscreens is that they are sensitive to IR light. This screen only works at night or in a room with no windows, and the light in the room can only be fluorescent - no incandescent bulbs. Another good resource for LLP information is at the nuigroup llp page. Image source: parts of the above image are taken from nuigroup Step 2: Schematic My schematic is a modified version of the Arduinome schematic found here. A little info about why I based this off Arduinome... When I was first researching online for ideas I knew I wanted to make some kind of LED array / coffee table / control surface Searching for more Arduino / grid controllers, I found monome and Arduinome. It was (and still is) the best solution for this type of project because once you build the interface, you have access to all the MaxMSP applications that people post on the monome site - and there's some really creative and amazing apps there - so you're getting a lot of value out of the work you put in. Because these apps are written in MaxMSP, they're open source, so if you want to, you can edit them and learn more about how they work. Aaand if you ever end up writing your own applications, you can post them and see what other people do with them, which is always kind of fun. The most notable modification I've made form the original Arduinome schematic is that I've replaced all the buttons, and their corresponding diodes, with IR phototransistors (since the transistors have an inherent polarity, diodes are not necessary). I've also replaced the 74HC164 with a 74HC595. On paper these chips are not too different, but I found that one of the pins on the 164 was dropping in voltage slightly in the Arduinome schematic. This is not a huge deal when you're controlling buttons because they are 2-state devices, but it was causing one row of my sensors to be significantly less sensitive than the rest. I tried to troubleshoot this and could not find a way, so I replaced it with the 595 and had much better results. I also simplified the circuit by removing the 74hc165 and using 8 pins on the Arduino instead. I had to change the Arduinome firmware to account for these changes, you'll find that in a later step.   For more detail: Make A Multitouch Music Controller Using Arduino   ### Make A Worms in Space Board Game Using Arduino Story: NASA has taken worms to the ISS on their own special capsule. There was an accident aboard the station and the worm astronauts have to navigate to the escape capsule to return to Earth. The airlock to the escape capsule has been damaged but can be reached from the other side of the ship. The human astronauts are helping their wormy comrades reach the capsule by using a series of warning lights in each quadrant of the station. Goal: To motivate a worm, through its natural sensation of visible light, to navigate from a starting point to an intended location. Gameplay: The worm starts in Quadrant 1 of the game board. The worm moves through each quadrant by incrementally triggering door switches until it reaches Quadrant 4. Quadrant 4 will be filled with some of the worm’s favorite foods, like coffee grounds or apple peels, so it can be rewarded for all of its efforts. The player is able to toggle LEDs on/off in order to motivate the worm to trigger the next door and to keep the worm from curling up in a dark corner of the game board. Designers: Hello, our names are Eric Hamilton and Katie Staples. We made this project for our Cybiotic Interaction Design Class taught by Andrew Quitmeyer at Georgia Tech. For more information, here is the course website: http://lmc.gatech.edu/~aquitmeyer3/cybiotic/  Step 1: Supplies 4pcs MG90S Gear Micro Servo for RC Helicopter Plane Boat Car + Horns microtivity IL726 1-watt Ultra-bright White LED (Pack of 12) Cast Acrylic Sheet - Thickness: .118", Size: 12" x 24", Color: Light Blue Transparent 1/4 inch x 55 yds Copper Foil Tape 12x12" Color Correction Gels (Red and Blue) Step 2: Planning We began our research by using worms in combination with Disney's Touche project. We decided to simplify our project by using the natural conductivity of the worms to complete simple circuits that control servo-powered doors. We did this by using a 5v outage on the Arduino connected to a strip of copper tape with another strip nearby connected to an analog input. Disney Touche Technology:  Touché is a new sensing technology that proposes a novel Swept Frequency Capacitive Sensing technique that can not only detect a touch event, but simultaneously recognize complex configurations of the human hands and body during touch interaction. This allows to significantly enhances touch interaction in a broad range of applications, from enhancing conventional touch screens to designing interaction scenarios for unique use contexts and materials. http://www.disneyresearch.com/project/touche-touch-and-gesture-sensing-for-the-real-world/ Step 3: Construction Using a laser cutter and the included illustrator file, we cut the acrylic board into two levels. The base of each level is 10" x10" and they are separated by the larger 3" x 1" pieces. The piece with the center hole goes on top to allow for the mounting of the servos. The 2" x 1" pieces are used for the doors and permanent dividing walls. The side walls are the 10" x 1" pieces. The file makes a few spare parts too.   For more detail: Make A Worms in Space Board Game Using Arduino   ### Make A Low Cost LED Grid Using Arduino There are a number of great Instructables on LED grids out there.  This is a low cost version - not quite as polished, but easy to make. This project uses a couple of sheets of foam core, a fluorescent fixture cover from the local home store, a cut up strip of WS2812b LEDs, and an Arduino.  All fairly inexpensive if you know where to get them (info below). Major Components in Project Parts: LEDs - this project uses 25 LEDs, and there are a few choices here.  For this one, a strip of WS2812b LEDs was used.  There were 30 per meter in the strip I ordered, which makes soldering easier since they are farther apart.  The 60/meter strips would also work.  The 144/meter would not work since they only have one set of solder pads between each LED to allow them to be so close, and for this project, we are soldering wires between them all and need soldering pads on both sides.  You could also use the WS2801 based strands, and those are typically pre-wired, making the project even easier.  The other Instructables cover those pretty well, so this one will not go into more detail on those.  Use non-waterproof or silicone jacketed (the jacket can be slid or cut off) strips.  Avoid the epoxy waterproofed ones since you will need to clean that off of each end of each LED - doable, but unnecessary work if you order the other kind. Foam Core - 2 sheets, 20"x30", like these, though that link is 5x more than you need. Plastic cover - this is from the local home store and is used to cover fluorescent bulb fixtures.  It's called an acrylic lighting panel, and the style is cracked ice.  There are other possibilities here - the main thing is there is enough frosting to diffuse the LED light.  Since the lighting panels are about 24"x 48", you can make two of these projects with one of them. Wire - each LED will have wires to connect to the next one - three wires between each.  Hobby servo wire is nice to use since it's already three wires and color coded nicely. An Arduino Uno will do.  Clone Arduinos are are available for about $10 each - a key for the low cost goal of this project.  There are also smaller versions of Arduinos that would also work well for this project in that same price range.  Older Arduinos will work fine too. Recommended - a power jack to supply 5 volts to the system.  You can use the Arduino power and regulator if most of the LEDs are not on at the same time, but if they will all be on, the external 5 volts supply will avoid overheating the Arduino regulator.  This jac will match your power supply - for me, it was a 2.1mm ID, 5.5 mm OD panel mount jack. Step 1: Making the Grid Cut (12) 2" strips off the 20" end of one piece of foam core.  Cut the second piece of foam core into a 20"x20" piece for the back. On the strips, cut a 1/4" wide, 1" + 1/16" deep slot on the end, and at 4", 8", 12", and 16" (see the pictures).  They are all cut the same and will fit into each other.  This is easy if you have a band saw, but you can use a hand saw or an X-Acto knife and some patience. On 4 of them, cut a notch on the tops to run the wires.  On 4 others, cut notches on the bottom left of two of them and the bottom right of the other two.  The remaining 4 are the sides and need no notches (the pictures show each of the 4 types). Don't glue them all down yet since you will need to run the wires!  I used hot melt glue.  I glued the sides in first - added the strips in the one direction that is captured by the sides, but did not glue them yet.  Then I noticed you can remove them by flexing them slightly, and removed them while gluing down the LEDs.  Once all the LEDS are set, you can add glue as needed, but you may not actually need much more - depends how rigid you want it to be. Cut the plastic lighting panel to 20"x20".  It is very brittle, so the special scoring tool they sell may help - otherwise a box cutter may work, but be sure to have the panel on a flat surface.   For more detail: Make A Low Cost LED Grid Using Arduino   ### Aqua Garduino Mini @hydroFishAqua82 Arduino Powered Micro Aquaponic System with Pi Camera and Twitter Feed We are creating an automated aquaponic system with mobile updates via Twitter. Sensors and motors will be controlled from an Arduino while the entire system, including mobile updates, will be orchestrated by a Raspberry Pi. Tweets include pictures, sensor data, and system-critical updates. Original system schematics have changed a little but not much. We only used (2) relays and the LCD was attached to the Arduino, and the pH sensor didn't make it into the system as of our due date.   Step 1: Major Components in Project Parts List First assemble all parts that are needed to create the system. With discounts and using items we already owned or had access to the project cost us ~$260. However, if you purchase all of the parts new and use this links below, you will be looking at a project that costs ~$450. Arduino Inventors Kit refill pack https://www.sparkfun.com/products/11479 4.7K Ohm resistors (2) http://www.amazon.com/E-Projects-4-7k-Resistors-Wa… Raspberry Pi http://www.adafruit.com/products/998?gclid=CIizqL… Arduino Mega http://www.adafruit.com/products/998?gclid=CIizqL… Pi camera http://www.adafruit.com/products/998?gclid=CIizqL… brita filter http://www.adafruit.com/products/998?gclid=CIizqL… perilite http://www.adafruit.com/products/998?gclid=CIizqL… water pump http://www.adafruit.com/products/998?gclid=CIizqL… air pump http://www.adafruit.com/products/998?gclid=CIizqL… tubing for air pump http://www.adafruit.com/products/998?gclid=CIizqL… tubing for water pump (2) http://www.adafruit.com/products/998?gclid=CIizqL… CFL light bulbs http://www.adafruit.com/products/998?gclid=CIizqL… electrical wire (2) http://www.adafruit.com/products/998?gclid=CIizqL… glass dropper bottle http://www.adafruit.com/products/998?gclid=CIizqL… zip it wall board anchor (2) http://www.adafruit.com/products/998?gclid=CIizqL… 5 volt DC stepper motor with driver board http://www.adafruit.com/products/998?gclid=CIizqL… net pots (10 pack) http://www.adafruit.com/products/998?gclid=CIizqL… plants (6) http://www.adafruit.com/products/998?gclid=CIizqL… tetra – neon (5) http://www.adafruit.com/products/998?gclid=CIizqL… fish food http://www.adafruit.com/products/998?gclid=CIizqL… 15 Amp outlet http://www.adafruit.com/products/998?gclid=CIizqL… adehesive Velcro http://www.adafruit.com/products/998?gclid=CIizqL… wirenuts (bag of 25) http://www.adafruit.com/products/998?gclid=CIizqL… usb outlet (2) http://www.adafruit.com/products/998?gclid=CIizqL… pH circuit for Arduino http://www.adafruit.com/products/998?gclid=CIizqL… Aquarium Hydroponic PH controller meter Electrode Probe BNC Connectorhttp://www.adafruit.com/products/998?gclid=CIizqL… BNC Connector – Right Angle http://www.adafruit.com/products/998?gclid=CIizqL… One Wire Digital Temperature Sensor – DS18B20http://www.adafruit.com/products/998?gclid=CIizqL… 365buying DS18B20 Temperature Sensor – Waterproof Digital Thermal Probe Sensor DS18B20 http://www.adafruit.com/products/998?gclid=CIizqL… AC power plug http://www.adafruit.com/products/998?gclid=CIizqL… 4 wire (8 feet) AWG 18 http://www.adafruit.com/products/998?gclid=CIizqL… water conditioner http://www.adafruit.com/products/998?gclid=CIizqL… Cutequeen 30cm LED Car Flexible Waterproof Light Strip White (pack of 4)http://www.adafruit.com/products/998?gclid=CIizqL… LCD 16×2 http://www.adafruit.com/products/998?gclid=CIizqL… Electrical Red Black RL1-3 3 Pin SPST Rocker Switchhttp://www.adafruit.com/products/998?gclid=CIizqL… 2×4 lumber http://www.adafruit.com/products/998?gclid=CIizqL…  Step 2: Schematic of System Find our code on github!: https://github.com/vermiculus/garduino Step 3: System Skeleton Our system is built around a brita filter. The bottom will support the fish, and on top we will put the plants. We built a frame around the filter it to attach lights and wires. The bottom is made out of plywood, and we attached four poles in drill holes in the corners of the 2x4 that come together high above the filter to hang the lights from. In the bottom of the frame we left an open space to use for wire storage so that we have a place for the microcontroller boards and the alike to go.   For more detail: Aqua Garduino Mini @hydroFishAqua82 ### RGB LED Color Selector / Picker / Chooser One Challenge with working with RGB LEDs is getting the right Red, Green and Blue values to match a color you are trying to display.  You can start with web colors, and then sometimes need to adjust them since the LEDs don't look quite the same as they do on monitors. So, this is a quick project to allow you to set the RGB values with a simple hand-held gadget - maybe useful when working offline with these LEDs. This project shows a WS2812b digitally addressable LED, but could be adapted for other LED types. Parts: An Arduino - clones can be found for $10 An Adafruit LCD Shield - this shield has a 16x2 LED display, and 5 push buttons that we will use for changing the red, green, and blue color values.  Adafruit also has a shield where the backlight color is an RGB LED - might be worth trying! An LED - this one uses a single WS2812b LED from a 30 LED/meter strip of LEDs - we had this left over from another project.  Adafruit sells them individually on carrier boards too. Some solid core wire - I used some 20 gauge wire since it was rigid and held the LED nicely. Step 1: Construction Build the LED Shield per the instructions that come with it (online).  Test it our with your Arduino. Now, we will solder the LED to the board.  Since the LCD Shield is intended to be on the top of the stack of shields, the pins are not brought out in header sockets.  But the pins are there to mechanically support the shield, so you can carefully solder wires to the tops of those pins.  See the pictures for details. We will solder digital pin 6 to the data in line - that has to be connected to the input end of the arrow on the LED since they have a direction on the data line.  The other two wires are the +5v, and Gnd - those can be soldered on either end of the LED. The LED is very bright, so one idea is to put a piece of white paper over it.  Or perhaps aim it down and run it over a white surface. For more detail:  RGB LED Color Selector / Picker / Chooser   ### Light Painters Palette aka Light Box Today I'm going to show you how I made my "light painters palette" aka light box. If your into electronics and photography than this is probably something you are going to like. Supplies: -Arduino (I'm using a arduino pro mini which requires a ftdi basic to program, But an uno or leaonardo... would work just fine) -Tri Color LED Breakout Kit -Rocker Switch -A Battery Holder for 4 AA's -2 Toggle Switches -2 10k Resistors -3 10k Potentiometers -3 Knobs (Red, Green, and Blue) -IR Receiver (Almost any 38 kHz variety will work) -IR Remote, mine came from a LED strip that burnt out. But any NEC remote works with some software adjustments (You could just buy one of these, have to check the remote codes) -Enclosure of some sort, I used this one -Some hookup wire -4 little nut and bolt combo's that fit the Tri-Color LED Kit board -LED bevel (doesn't even really fit the IR receiver, but oh well) Building Supplies: Drill and an assortment of bits Soldering Iron Flux and Solder Wire cutters and strippers Dremmel tool or jewelers saw Double sided tape Step 1: Hardware To build it just drill a bunch of holes in the lid to your enclosure, mount the parts with their included hardware. Be careful not to space the potentiometers to close or they might not fit, my was too close for comfort. I mean that was totally planned. I'd suggest orienting the microcontroller so the analog inputs are on the side of the potentiometers, and the digital inputs are on the side of the switches. Use the double sided tape to secure the battery holder to the bottom of the enclosure. The power switch seemed to fit nice on the side. Give enough wire between the battery and power switch to the lid so you can open it easily. I also tried to make sure to wire the components through the bottom of the Arduino so if I needed to probe around I had some room. I used a spare piece of protoboard for a power and ground rail, however that's not necessary. You could just solder a huge ball of wire ends together. Flash the microcontroller with the software I've got here, drop in some batteries, close up the lid and your done! The Potentiometers have three solder points, one side to 5V, one side to Gnd, the center to an analog input. If the sides are backwards then just flip the last two values in the mapping function after the analogRead functions in the software. This will reverse the clockwise vs counter-clockwise brightening/dimming relationship. I'd suggest a clockwise turn makes the LED's brighter. The switches are SPDT, so one side goes to 5V, one side has a wire to the digital input and a 10K to Gnd. The 10k is a pulldown resistor which just makes sure the switch stays in determinate state all the time. The IR Receiver has 5V, GND and Data lines from right to left (check your data sheet to be sure, I've burnt a couple of these for sure). The data line can connect to any digital input pin. The LED's breakout kit has a 5V, Gnd, and data lines for each of the three colors. Be sure to wire these to a PWM pin, maybe not pin 5 and or 6 because I think they mess with the delay function and you might not be able to turn that LED all the way off. What ever is closest to the mounting spot. The batteries get wired to the Raw and Gnd inputs. Send the positive lead through the power switch first. Make sure however you wire it that it matches the software parameters!! For more detail:  Light Painters Palette aka Light Box ### Arduino-Controlled Chemical Foam Spewing Pumpkin If the thought of dozens of tricker-or-treaters in gross-out costumes knocking down your door makes you want to spew, have we got the pumpkin for you! Every time the Arduino-Controlled Chemical Foam Spewing Pumpkin encounters a trick-or-treater at your doorstep, it spews burning chemical foam all over your front lawn. Now you can convey how much trick-or-treaters make you want to vomit, without doing any real vomiting yourself. So grab some antacid to settle your stomach, and dive deep into these helpful instructions to build your own. Step 1: Materials Major Components in Project (x1) Large round pumpkin (x1) Square Nalgene 1000 ml bottle (x2) Square Nalgene 250 ml bottles (x1) 5′ of 3/8″ rubber tubing (x1) 100g potassium iodide mixed in a 2M solution (x2) 500 ml 35% hydrogen peroxide solution (x1) dish soap (economy style, not natural stuff) (x1) food coloring (x2) 5/8″ rubber grommets (x2) brass check valves for liquid (x2) 3/8″ barbs (5′) rubber 3/8″ hose (x1) Teflon tape (x4) small diameter hose clamps (x2) self-priming pumps (x1) PCB (x2) 5V SPST relays (x1) 10K resistor (x1) Arduino (x1) M-type connector (x1) 9V battery clip (x1) 9V battery (x1) 22AWG red and black solid-core wire (x1) 9V / 2.5A wall wart (x1) 3′ floor switch material (x1) Halloween Door Mat (x1) Assorted alligator clips (x1) Assorted zip ties How to make Chemical Foam The chemical foam is made from mixing a few simple ingredients: Hydrogen Peroxide (the stuff you put on scrapes and cuts is 3%, the one we're using is 35%) Potassium Iodide (mixed in a 2M solution) Dish Soap (not the eco-friendly kind - get regular stuff like Palmolive) Food Coloring When you mix the ingredients above in the correct proportions, you get foam, potentially lots of it.  Be safe when working with these chemicals and use common sense.  35% Hydrogen Peroxide is a powerful oxidizer and should be handled with rubber gloves, goggles, and long sleeves.  Always use best chemical practices when making chemical foam. Step 2: Drill holes in mixing chamber Drill two 5/8" holes into the 1000ml square nalgene container that will serve as the mixing chamber. The check flow valves are attached directly to the mixing chamber and thread themsleves in as they are twisted into position with a wrench. This part is a little tricky, as a safety precaution we capped the ends of the MIP threaded check valve with a compression fitting - a brass nut of sorts that was just small enough to fit through the mouth of the bottle and screwed into place.  We used a piece of metal tapped onto the nut to hold the compression fitting in place as the check valve was screwed in so that it threaded itself on. Wrap the check valves with teflon tape and screw on the brass barbs. For more detail: Arduino-Controlled Chemical Foam Spewing Pumpkin ### Make a WiFi Weather Station With Arduino As open-source hardware users and makers, we love playing with new chips, boards and tools. And there is one chip which is quite popular these days: the CC3000 WiFi chip from TI. This chip comes with many promises: cheap (around $10), easy to use, low-power … It was featured in many articles around the web, but somehow it was quite hard to use with Arduino as there was no breakout board or library available. Luckily, Adafruit solved that for us with a nice breakout board and a working library for Arduino. In this article, I will show you how to use this chip for home automation purposes. Remember that weather station project? We are going to do the same: measure the temperature and the humidity. But this time we won’t display the information on an LCD screen. Instead, we will transmit the data wirelessly via WiFi to your computer and display it there. Excited ? Let’s get started! Hardware requirements The whole project is based on the Arduino platform, so of course you will need an Arduino board. I really recommend using the Arduino Uno board for this project, as it is the only board that is currently compatible with the CC3000 library at the time this article was written. Then, you need the famous CC3000 chip. There are also many alternatives to do that. What I recommend is using the Adafruit CC3000 breakout board, which is the only one I tested that worked without problem. It is nice and compact, has voltage regulators onboard, as well as an onboard antenna. I tried the official TI CC3000 board, but it never worked properly, and you have the use level shifters as well (the CC3000 works with 3.3V, and the Arduino Uno with 5V). The other alternative is to make your own breakout board, there are many PCB layout available online. You also need a DHT temperature & humidity sensor. I used the DHT11 sensor, but this project would also work fine with a DHT22, you would just have one line of code to change. You will also need a 10K Ohm resistor to be used with the DHT sensor.   For more detail: Make a WiFi Weather Station With Arduino ### How to Program the Vexplorer Using Arduino This instructable will be about using arduino to control the revell vexplorer. Later you can add as many sensors you want. If you don't have most of the parts already this will cost you about $200 dollars. Most of the electronic bits you can find at radioshack and vexplorer at amazon, also arduino at the maker store. Check out my new project on sending a balloon into space!! http://www.instructables.com/id/My-Space-Balloon-Project-Stratohab-Success-High/ vexplorer arduino Step 1: The H-Bridge This link listed below will show you all of the step in constucting the H-Bridge. A breadboard will be sufficient if you have trouble soldering. Leave the motor leads and also switch leads open which we will be using later. Depending on how many of the vexplorer motors you will be using multiple h-bridges will be required. H-Bridge Step 2: Combining the Vexplorer The vexplorer has 4 motors, but for this instructable will only be using 2. The motors that go to the wheel assemblies. Take the right motor's positive and ground and attach the positive to one positive and ground from the h-bridge. Same with the ground. (See the first picture for details.) Then attach the wires that would normally go to the switch, to digital pin 13 and ground on arduino. Simply when we let the voltage go the motor will turn right and off for the motor to turn left. You can experiment by switching the polarity and getting different results. To power each h-bridge you can use the aux ports of the reciver. For powering the left motor you can use another h-bridge and follow the steps again. This is same with the arm and claw motors of the vexplorer.   For more detail: How to Program the Vexplorer Using Arduino ### Tilt Sensing Bracelet using Arduino A bracelet decorated with six conductive fabric petals and a thread of beads with a metal bead at the end, makes for a simple six point tilt detection. It is also designed so that the metal bead will make contact with two petals if it lies in between. and then of course it will make no contact when it is in the air due to throw or tipped upside-down. This was really fun to make and the best part about it was that it worked straight away, with no mistakes made on my part. It is simple, but takes some patience to accomplish. The application really only visualized the input, I have not thought of any further uses for this. Yet. The feedback bracelet is connected to the tilt bracelet directly via wire, but this could also be wireless. When the bead makes contact with a conductive petal it closes the circuit for the corresponding LED, which turns it on. Check out instructables dot come for more and how to make your own! Step 1: Materials and Tools MATERIALS: Conductive thread from http://members.shaw.ca/ubik/thread/use.html also see http://cnmat.berkeley.edu/resource/conductive_thread Neoprene from www.sedochemicals.com Stretch conductive fabric from http://www.lessemf.com also see http://cnmat.berkeley.edu/resource/stretch_conductive_fabric Fusible interfacing from local fabric store or also see http://www.shoppellon.com Regular thread Regular beads One metal bead or small pendant Two sets of poppers (could also use Velcro to close bracelet) Male and female headers from Sparkfun http://www.sparkfun.com/ Arduino USB board from Sparkfun http://www.sparkfun.com/ Solderable Perfboard with copper line pattern from All Electronics http://www.allelectronics.com/ Ribbon cable with min. 8 wires 6 x 10 or 20K resistors Aleene's Flexible Stretchable Fabric Glue from http://www.amazon.com/Aleenes-Flexible-Stretchable-Fabric-Glue/dp/B0001DSCQ0 Arduino software free for download from http://www.arduino.cc/ Processing software free for download from http://processing.org/ TOOLS: - Fabric scissors - Sewing needle - Iron - Fabric pen that disappears over time - Pen and paper - Ruler - Soldering station (iron, helping hands, solder) - Knife for cutting perfboard - File for filing edges - Wire cutters and strippers - Pliers Step 2: Stencil and Preparation Print out the stencil (see illustration) and trace it to a piece of neoprene. Trace the flower petal pattern to stretch conductive fabric that has fusible interfacing adhered to one side. Cut out the neoprene and conductive fabric pieces. Punch the poppers into the neoprene as shown in illustration. Make sure the active sides are facing the right ways. You could also use Velcro as a fastener. Major Components in ProjectArduino For more detail: Tilt Sensing Bracelet using Arduino ### Twitter garage door using the GE Choice ALERT system & Arduino You know that feeling of driving away from your house almost getting to work and saying "Now Did close the garage door?" .  I hate that feeling and seeked out to resolve it in the smiplest/cheapest way I could.  The starting point was of course Arduino.  This project ended up being simpler than I could of imagined but it was not my best effort (as it was my first real project making something useful with the Arduino). Step 0: Sync the garage door monitor to the base station.  Unplug everything then. Step 1: The first thing to do is unscrew the two screws in the back and the one under the battery cover.  Then you can pry the back off (Be careful as getting the battery contacts out is reallyyyy sorta a pain. Step 2: Flip over and find the LED for zone 1 (labeled 1!).  Then turn it back to the PCB side and find the contacts.  I soldered one wire for where I found the ground was (Green) and another red wire for the -.  I found which was which by trial and error using my arduino. NOTE: Soldering there's wires are hard, i dunno if it was my crappy soldering iron or what but it was hard to heat up the metal already on the PCB and get my wires soldered to it on a solid way.  If you are enterprising enough you can solder two wires to each of the zone alarms and have this tweet you when say someone is detected by their wireless motion sensor, or the door sensor goes off etc... Step 3.  I used a dremel to edge out some of the plastic on the battery cover so the wires could come out from the PCB into the battery area.  This is where I also attached a (superficial perhaps) board to connect more wires to that ultimately lead to the screw terminals attached to the arduino.  The idea of the board was make sure there was slack in the system so the wires don't get yanked out of the delicate soldering on the LED pins on the PCB of the alarm base station. Step 4:  Drilling out the battery cover.  This is simple drill I used and made the holes so the wires could pop out of it... Step 5: Mark where the screw terminal should go in the project box and drill the holes, then on the other side solder in the screw terminal with the wires that will goto the arduino/ethernet controller. Step 6:  Finally put in the arduino and ethernet controller shield into the project box and connect the wires to ground respectively and analog 0.  Then close the box up. #if defined(ARDUINO) && ARDUINO > 18 // Arduino 0019 or later #include #endif #include //#include Only needed in Arduino 0022 or earlier #include byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192, 168, 0, 23 }; Twitter twitter("read on how to set this"); char msg[] = "Garage Door is OPEN"; char msgStartup[] = "Garage door monitor is online!"; boolean failed=false; boolean blinkTime=false; boolean doorOpen=false; int alertcounter=0; int resetcounter=0; int diodePin=0; int val; int randomValue; void setup() { delay(1000); Ethernet.begin(mac, ip); Serial.begin(9600); pinMode(13, OUTPUT); Serial.println("connecting ..."); sendStartupTweet(); } void sendStartupTweet() { if (twitter.post(msgStartup)) { int status = twitter.wait(); if (status == 200) { Serial.println("OK."); } else { Serial.print("failed : code "); Serial.println(status); failed=true; } } else { Serial.println("connection failed. Startup"); failed=true; } Major Components in ProjectFirst a list of stuff used: 1. Project Enclosure for the Arduino + Ethernet shield from amazon. 2.  Arduino, in my case the old Diecimila.  You all know and love the arduino, found online about 23$ 3.  Arduino Ethernet shield ~ 40$ 4.  GE Choice Alert wireless-control center 5.  GE Choice-Alert wireless garage door sensor 6.  Screw Terminal For more detail: Twitter garage door using the GE Choice ALERT system & Arduino ### Analog VU meter and Clock using Arduino This project brings back the old time Analog VU Meter, with the added functionality of a neat looking clock! When you turn off your music the meters automatically swing into to clock mode. Behind it all is the popular and easy to use Arduino. This is my submission for the Make-to-Learn Youth Contest: What did you make? I made an old style analog VU meter and Clock using 2 analog panel meters, an Arduino, a real time clock, and other simple components. How it works: The unit plugs into a standard 3.5mm speaker jack. The Arduino reads the sound levels and converts it into electric pulses (PWM) to control the analog meters. When no sound is detected, the unit automatically changes to Clock mode and displays the time which is read from the real time clock circuit. How did you make it? I got the idea to make an analog VU meter from seeing them used in older audio receivers and amplifiers. I was always intrigued by the effect of a needle “dancing” to the beat of music. With my basic knowledge of electronics and the Arduino platform, I decided that I could make one myself. After searching around the internet to see if anyone had done anything similar, I found that many people create Clocks with analog panel meters. Well, why not include both functions? Where did you make it? I made this at home by myself. I like to listen to music a lot and I am always tinkering and playing with electronics. I thought that this would be a fun project to compliment my speaker system which I also built myself. What did you learn? I learned a lot from this project. The hardest thing to get right was the programming. I have never worked with analog panel meters before, so getting them to display time and sound accurately was challenging. For example: It was hard to get both meters to point exactly straight up at 6:30. I also learned that connecting the Arduino directly to an audio source can distort the audio. To fix this, I added some resistors and the distortion went away.   Step 2: Meter lights This step is completely optional, but I decided to put some lighting inside my meters. First, I took the covers off the meters and drilled two small holes for the LEDs. Then I simply hot glued the LEDs into place. Be careful when drilling and hot gluing because the inside of the meters are relatively fragile. It is better to use diffused LEDs for this application, but I did not have any diffused white LEDs around. So, I diffused some clear LEDs by using some sandpaper. Don't forget resistors! Step 3: Assembly The assembly is pretty straight forward. See the pictures for more details. Note: If you only want to use it as a clock, you do not need the audio cable or the potentiometer. Wiring goes as follows: - USB red wire (5v) to VCC - USB black wire to GND - 3.5mm Audio left channel to 10K resistor to Analog 1 - 3.5mm Audio right channel to 10K resistor to Analog 2 - 3.5mm Audio ground to GND - Potentiometer to Analog 0 (follow potentiometer wiring) - Buttons - Left/Down to Digital 2  (follow button wiring) - Right/Up to Digital 3 - DS1307 RTC  - SDA to Analog 4 - SCL to Analog 5 - Left Analog Meter to Digital 5 (PWM) - Right Analog Meter to Digital 6 (PWM) Major Components in Project Materials Shopping List: – 2, 5v Analog panel meters (Amazon) or (Amazon) – Arduino (I used the pro mini) (Amazon) – DS1307 Real time clock (Amazon) – Protoboard (Amazon) – 10K potentiometer (DigiKey) – 2 tactile switches (DigiKey) – 4 10K resistors (DigiKey) – 4 white LEDs (optional) (DigiKey) – USB cable (DigiKey) – 3.5mm cable (DigiKey) Total cost is around $47. It will be less if you have some of these parts already. For more detail: Analog VU meter and Clock using Arduino ### Quiz Game Controller using "Lights and Sounds Buzzers" and Arduino Jeopardy style quiz games are favorites for creating excitement and educational instruction at the same time.  Teachers, summer camp counselors, and even industry educators find this type of game to help generate interest and involvement from the participants. The idea behind the game is simple, but sometimes finding a device that will perform the "first to respond" lockout function can be problematic.  Here is YAQGC (Yet Another Quiz Game Controller :) based on some pretty neat lighted buzzers and an Arduino put in to a project box. While the "Lights and Sounds Buttons" from Learning Resources were designed as "stand alone" devices, a few modifications allows them to be connected to and controlled by an Arduino controller.  The "Lights and Sounds Buzzers" make a professional looking and fun implementation of a Quiz Game controller. The buzzers are modified to plug into a base unit and provide "button press" signals and accept an "activation" signal. The control box houses the Arduino Uno, the reset button, and four LEDs. While the button modifications are a little tedious, intermediate soldering skills and patience will produce a nice looking and fun to use Quiz Game Controller. In addition to capturing the first to respond "winner", the controller also captures 2nd, 3rd, and 4th place in order of button press.  The order is indicated on the control box LEDs.  Of course the beauty of having a programmable controller is tuning it to just the way you want it.  Other game modes are possible, including "Wheel of Fortune" modes, although this version of the Arduino program only implements the "Jeopardy" style game. Let's get started! YouTube demo of completed system Background and instructions on www.projectnotions.com   Step 2: Button Modifications Overview The button is modified to accomplish three functions: * First, to bring to the control box a line when the button is pressed. * Second, to bring a line from the control box to the button to turn on the lights and sound. * Third, provide a relay that allows the sound to be turned off. Because there are 4 things we want to do (ground, button press, activate lights, activate sound) and we only have 3 wires, we have to combing two functions using one wire. We accomplish this by taking advantage that the logic on the button does it’s own management of the lights and sounds function. When the “activate” line goes high for about 20ms the button logic activates the light and sound. By connecting a compact relay to this same line we can control the sound in an independent way. Here are the states we manage on the “activate” line. -   Low - The button is off. If it was previously activated, it will turn itself off after about 2.5 to 3 seconds. High Pulse - We drive the activate button high for 20ms, and then drive it low again. The button logic will turn on the lights and sound for 2.5 to 3 seconds, but because we connected the speaker through the relay, the relay will only stay on for 20ms. So, we don’t really hear any sound because the relay has disconnected the speaker from the circuit.- -   High Solid - We drive the activate button high for about 2.5 seconds. The relay keeps the speaker connected to the circuit for the entire duration of the button’s “activation time.” and we both see the lights AND heard the sound. The button schematic is below. With these modifications we can program the Arduino to mange the lights and sounds independently. Our initial program turned both lights and sounds on for the first cycle, and then just turned the lights on over and over again until the reset button was pressed or until the timeout expired. It is somewhat of a tight fit in the button and we chose a 2.5mm stereo phone jack for the connector to minimize the space required. The four main changes are: Cut the pc board trace to separate the “button press” signal from the “activation line.” Drill a hole, countersink it, and mount the phone jack. Mount the compact relay. Cut and solder the necessary wires. Step by step instructions: 1. Collect the parts 4x Lights and Sounds Buzzers 4x Submini phone Jacks 4x Reed relays Hookup wire 2. Disassemble the buttons Remove the four feet from the bottom (A small flathead screwdriver might help.) Remove the four screws Remove the battery compartment cover Repeat for each button   Major Components in Project Components Here are the required parts: – (quantity) Description – (1) Set of “Lights and Sounds Buzzers” by Learning Resources – (4) Mini Reed Relays (Radio Shack 275-0232 or similar) – (1) Arduino Uno – (1) Project Box – (4) LEDs, one each in Red, Blue, Green, Yellow (with included resistor or similar) – (5) resistors, 2.2K (RS 275-1301 or similar)  (or any value you have from 220 to 2.2K should work) – (8) 2.5mm stereo mini phone jacks – (1) Reset Button, Normally Open, Momentary Contact (RS 275-609 or similar) – (2) 3 feet 2.5mm Male To 2.5mm Male – Stereo – (2) 6 feet 2.5mm Male To 2.5mm Male – Stereo – (1) Project Box – hookup wire Tools include: – Soldering iron – screwdrivers (phillips and flat head) – Dremel type tool for cutting and countersinking holes – (computer to load the Arduino code) For more detail: Quiz Game Controller using "Lights and Sounds Buzzers" and Arduino ### Audio Input to Arduino The easiest way to connect an audio signal to your arduino, is to build a simple 3 components (2 resistors plus cap) circuitry shown on the first drawings on right side. Disadvantage: there is no amplifier, and consequently sensitivity would be low, hardly enough to work with headphones jack output.  For low level signals, like output of electret microphone, amplifier is necessary. Here is the kit, which included board, electronic components and NE5532 Operational Amplifier IC: Super Ear Amplifier Kit Other option, from SparkFun Electronics: Breakout Board for Electret Microphone Note: I don’t recommend to replace NE5532 OPA with popular  LM358 or LM324 due their pure frequency response above > 10 kHz. Configuring AtMega328 ADC to take input samples faster: void setup() {    ADCSRA = 0×87; // freq = 1/128, 125 kHz. 13 cycles x 8     usec =  104 usec. // ADCSRA = 0×86; // freq = 1/64,   250 kHz. 13 cycles x 4     usec =   52 usec. // ADCSRA = 0×85; // freq = 1/32,   500 kHz. 13 cycles x 2     usec =   26 usec. // ADCSRA = 0×84; // freq = 1/16 ,    1 MHz. 13 cycles x 1      usec =   13 usec. // ADCSRA = 0×83; // freq = 1/8,       2 MHz. 13 cycles x 0.5   usec =  6.5 usec. // ADCSRA = 0×82; // freq = 1/4,       4 MHz. 13 cycles x 0.25 usec = 3.25 usec. ADMUX    = 0×40;                          // Select  Analog Input 0 ADCSRA |= (1<= FFT_SIZE ) { n_sampl = 0; process = 1; } } Don’t like to solder all this components from the drawings above? Here is easy way around, if you, by chance, have a spare USB speakers. Something like this: Major Components in ProjectArduino For more detail: Audio Input to Arduino ### ARDUINO Laser 3D Tracking or Range Finder The idea of using triangulation for distance measurements is well known since Pythagorean time, when his brilliant formula become available for mathematicians. What is new in this design, is lasers power control via “blooming” effect of CMOS camera. Here this “negative” effect was put to work instead of ADC. No need high price “no-blooming” camera! (More information on this link: http://dpanswers.com/content/tech_defects.php ) There are few others design approach, that I was trying to make in hardware/software, and some of them not fully implemented yet ( project just started ). Power Control Loop (PCL) allows to get stable  readings of the reflected back light beams, doesn’t matter what is reflectivity of the object’s surface, how well illuminated background and what distance range !!! edited: / (Regarding stability measurements in varying illumination conditions, right now there is a resistor for manual adjustment comparator trigger level, depends on average  “black-fixed” video. Gonna get rid off it shortly)./ Probably, someone could “hack” a camera, and redesign build-in AGC to provide stable, “fixed-white” level of video signal. But it would be extremely difficult to do with this SMD components, lack of documentation and too complicated for average hobbyist. Plus after that camera is not “in use” anymore for it’s main purpose. Arduino has low size of RAM memory and 8-bit low power microprocessor, so full image processing could not be done. Instead, “build-in” 1-bit comparator forms visual map, where each cell stores time stamp, when events was captured. As video frame created from top to bottom line by line, line number corresponds to Y coordinate, and time of events on this line – X consequently. At this stage project is more like test bench, than final solution -);. Right now I’m looking for optical zooming devices, to cover long / short distances automatically. Green lasers, I’m sure ‘d bring better resolution, just have to find couple of them for affordable price. Approximate range with low cost CMOS camera and w/o optical zoom: 0.2 – 10 meters. Accuracy would greatly depends on lasers base/spacing. Lasers base also defines minimum size of the tracking object in Z coordinate.  NTSC camera: Velleman CAMCOLMBLAHU MINI COLOR CMOS CAMERA WITH AUDIO + POWER ADAPTER has viewing angle 52 degrees. Forget about pixels resolution for a moment, we are in analog television world -);   Math to calculate the distance (I call it Z coordinate) is pretty simple:   D =  B / tan ( phi ),  where D is distance, B is lasers base, and phi is an angle what camera reports.  Phi = 52 degree / 832 = 0.0625 degree per coordinate difference.(See below where 832 comes from).  D = B / tan (( X1 – X2 ) * 0.0625).  For example, B = 6 cm, X1 = 500, X2 = 512, than: D = 0.06 / tan ( ( 512 – 500) * 0.0625) = 4.58 meters. ( http://en.wikipedia.org/wiki/Tangent_(trigonometric_function) Major Components in ProjectArduino   For more detail: ARDUINO Laser 3D Tracking or Range Finder ### Audio VU meter with Extra wide Dynamic Range 69 dB using Arduino O’K, after having some fun with stereo version of the VU meter I described in my previous blog-post, now it’s time to do a serious stuff. Studio grade VU meter !!! 24 steps, equally spaced every 3 dB, covering Extra wide Dynamic Range from -63  up to  +6 dB.  Single (mono) channel this time, no messing around, absolute precision at the stake. Plus, it keeps absolutely Top-Flat linear frequency response from 40 Hz up to 20 kHz(*). I’m not going into details of RGB LEDs Display, which has no modification since “Tears of Rainbow” project, only plates installed in one line, form a single GIGANTIC bar-graph. There are some minor changes in mixing colors data tables, but they intuitively understandable.  The most important feature in this project is autoscaling. As you, probably know, Arduino has 10 bits ADC. Only it can’t process negative half-wave, and for this reason it has only 9 bits available for AC measurements.  According to DSP theory, maximum dynamic range is: DR = 1.77 + 6.02 x B = 1.77 + 6.02 x 9 = 55.95 dB. As input audio waveform represents anything but perfect peak-to-peak 5V sine-wave, real dynamic range would be lower. How much? In first, there is a hardware limits.  OPA (NE5532), which is: very low noise !!!  high output-drive capability;  high unity-gain and maximum-output-swing bandwidths;  low distortion;  high slew rate;  input-protection diodes, and output short-circuit protection but, unfortunately,  isn’t rail-to-rail type. Test results show, that compression  become noticeable (~1 dB) when not scaled magnitude approaches level about 50 dB. That is in good agreement with observed on oscilloscope not distorted deviation peak-to-peak 2.5 V. Or only half of full range of 5V. And as theory says, half is one bit less, and real DR = 1.77 + 6.02 x 8 = 49.93  (~50 dB). In second, audio data is processed on “block” structure basis. It means, having average of the block 50 dB, doesn’t mean that there was no spikes in the sampling pull, that obviously would be clipped and introduce error in the measurements results.  This phenomenon is defined as Crest Factor. Different sources estimate crest factor of musical content between 10 – 20 dB.  So, taking direct approach, Arduino with OPA mentioned above as front-end could accurately cover only:              50 – 20 = 30 dB.  To get wider dynamic range, I have to scale input amplifier gain, and this is exactly what I did, building amplifier in two stages and selecting one cascade (by-passing second one) or two cascades using internal ADC multiplexer. As there is no switching IC in analog signal path involved, gain is defined with high stability, could be one time precisely measured – calibrated via coefficient stored in EEPROM (nice feature to add). On the right side there are electrical drawings of “slightly” modified kit,  where stereo amplifier was converted into 2 stage mono version. First stage, with gain about  G1 = 1 + 10 k / 1 k = 11  is necessary to “bump-up” line-level signal, to create DC bias required for correct operation of the ADC, and also served as buffer to lower signal source impedance, as it seen by ADC input.  I set a gain of the second stage amplifier at 40 dB:  20 x Log_10 ( G2 ),     where    G2 = 1 + 100 k / 1 k = 101. IMHO, setting gain limit for only 30 db per stage as it follows from paragraph above, is overkill, and would be justified for “real-time” radio broadcasting or audio processing for storage media, when high fidelity of audio program must be preserved. For visual display “clipping” of bursts in signal is not noticeable at all due high refresh rate of display, 78 Hz. Human just can’t see, if LED lights-up with such speed.  For steady AC amplitude measurements (micro Voltmeter mode) this is not a problem at all, and headroom as small as 3 dB would be sufficient, leaving wide 47 dB per stage. Major Components in ProjectArduino LED For more detail: Audio VU meter with Extra wide Dynamic Range 69 dB using Arduino ### Spectrum Analyzer, Arduino project with FFT algorithm The basic idea was to create color organ / spectrum analyzer on arduino board, trying to minimize quantity of external components, like analog filters, LED display drivers, etc. Spend a lot of time in search on internet I was able to find only two ! project ,  which implemented FFT in order to solve a problem. One of them is: http://elm-chan.org/works/akilcd/report_e.html in a few days it will celebrate 6-th anniversary.  The obstacle, at least for me, was to compile / adapt his software for Arduino IDE platform, as it written in assembly and C.  So, I’ve moved on, and was lucky to discover an excellent chunk of code dated back to 1989! They didn’t have floating point co-processor or “blue deep” around at that time, so mathematical skills were in high demand. FFT algorithm could find application in wide variety of projects, for example, musical note recognition, voice recognition, sound localization etc. It could be done in Arduino, or in combination with PC. In this project all functionality implemented in Arduino.  Sampling, FFT processing and visualization of music, everything done by single arduino Uno board alone!.  The same time, after each stage data could be extracted via serial link to PC. To use the the data provided by Arduino in different application on PC (like interactivity / processing),  you can just pull data over serial link, as it was done for debugging purposes with “f” command.  After FFT-processing input data array x, generated output array fx with  32 elements, “bins”, each representing a range of frequencies. The width of a bin equals: D = 1 / T, where T is input array sampling timing, in our case T = 14.6 millisecond. D = 1 / (14.6 * 10^-3) = ~ 70 Hz. So, the value of fx[0] is amplitude DC offset up to 35 Hz; fx[1] is amplitude in a range   35 <—> 105 Hz; fx[2] is amplitude in a range 105 <—> 175 Hz; fx[3] is amplitude in a range 175 <—> 245 Hz; fx[4] is amplitude in a range 245 <—> 315 Hz; ……………………………………………………….. fx[31] is amplitude in a range 2135 <—> 2170 Hz; Upper limits could be extended up to 76 kHz.(*) Sum up first 10 fx bins, I’m getting 35 <—> 735 Hz frequency range for red LED’s, from 11-th to 20-th consequently provides me 735 <—> 1435 Hz  for green LED’s, and from 21-st to 31-st 1435 <—> 2170 Hz range for blue LED’s. Now hardware part. I was considering two way to build display, using PWM or BarGraph. In my opinion, PWM is not quite suited with LED, due nonlinearity in their current-brightness response. Probably, PWM approach would be O’K with incandescent lights. BarGraph design gives better impression, when higher sound volume   highlighted bigger area. Just imagine, how beautiful Fireworks are! I’ve used Christmas LEDs, that left over since last holiday  This is why I put 3 of them in each string, and have to use ULN2003 with 12V power source. Basically, all you need is 12 Leds ( 4 – red, 4 – green and 4 blue ) and 12 resistors, connect led+resistor between output of arduino board  and ground. For sound input I used a kit MK136 ( 2 mic’s + amplifier IC NE5532 ), powered up from arduino board +5V. Why kit? It provides a board and components. Next, you can easily reconfigure input circuitry for different sound sources as: Major Components in ProjectArduino For more detail: Spectrum Analyzer, Arduino project with FFT algorithm ### Practical AVR Microcontrollers by Alan Trevennor E-Book Book Description If you've heard of Arduino or even used it in your own projects, you probably know that the AVR microcontroller is the brain of the Arduino. In Practical AVR Microcontrollers, you'll learn how to use the AVR microcontroller to make your own nifty projects and gadgets. You'll start off with the basics in part one: setting up your development environment and learning how the "naked" AVR differs from the Arduino. Then you'll gain experience by building a few simple gizmos and learning how everything can be interconnected. Book Details Publisher: Apress By: Alan Trevennor ISBN: 978-1-4302-4446-2 Year: 2012 Pages: 416 Language: English File size: 18.6 MB File format: PDF Link to Purchase E-Book: Buy: Practical AVR Microcontrollers by Alan Trevennor E-Book Online Book Read: Practical AVR Microcontrollers Purchase Alan Trevennor E-Book ### iOS Sensor Apps with Arduino by Alasdair Allan E-Book Book Description Turn your iPhone or iPad into the hub of a distributed sensor network with the help of an Arduino microcontroller. With this concise guide, you'll learn how to connect an external sensor to an iOS device and have them talk to each other through Arduino. You'll also build an iOS application that will parse the sensor values it receives and plot the resulting measurements, all in real-time. iOS processes data from its own onboard sensors, and now you can extend its reach with this simple, low-cost project. If you're an Objective-C programmer who likes to experiment, this book explains the basics of Arduino and other hardware components you need - and lets you have fun in the process. Book Details Publisher: O'Reilly Media By: Alasdair Allan ISBN: 978-1-44930-848-3 Year: 2011 Pages: 128 Language: English File size: 43.5 MB File format: PDF Link to Purchase E-Book: Buy: iOS Sensor Apps with Arduino by Alasdair Allan E-Book Purchase Arduino by Emily Gertz E-Book ### Programming Your Home by Mike Riley E-Book Book Description Open locked doors using your smartphone. Assemble a bird feeder that posts Twitter tweets to tell you when the birds are feeding or when bird seed runs low. Have your home speak to you when you receive email, notify you when visitors arrive, and more. You'll learn how to use Android smartphones, Arduinos, X10 controllers and a wide array of sensors, servos, programming languages, web frameworks, and mobile SDKs. Programming Your Home is written for smartphone programmers, web developers, technology tinkerers, and anyone who enjoys building cutting-edge, do-it-yourself electronic projects. This book will give you the inspiration and understanding to construct amazing automation capabilities that will transform your residence into the smartest home in your neighborhood! Book Details Publisher: The Pragmatic Programmers By: Mike Riley ISBN: 978-1-9343-5690-6 Year: 2012 Pages: 240 Language: English File size: 9.2 MB File format: PDF Paper Book Buy: Programming Your Home by Mike Riley E-Book Online Book Read: Programming Your Home Purchase Mike Riley E-Book ### Atmospheric Monitoring with Arduino by Patrick Di Justo, Emily Gertz E-Book Book Description Makers around the globe are building low-cost devices to monitor the environment, and with this hands-on guide, so can you. Through succinct tutorials, illustrations, and clear step-by-step instructions, you'll learn how to create gadgets for examining the quality of our atmosphere, using Arduino and several inexpensive sensors. Detect harmful gases, dust particles such as smoke and smog, and upper atmospheric haze—substances and conditions that are often invisible to your senses. You'll also discover how to use the scientific method to help you learn even more from your atmospheric tests. Book Details Publisher: O'Reilly Media By: Patrick Di Justo, Emily Gertz ISBN: 978-1-44933-814-5 Year: 2012 Pages: 90 Language: English File size: 3.9 MB File format: PDF Paper Book Buy: Atmospheric Monitoring with Arduino by Patrick Di Justo, Emily Gertz E-Book Online Book Read: Atmospheric Monitoring with Arduino Purchase Emily Gertz E-Book ### Raspberry Pi Home Automation with Arduino by Andrew K. Dennis E-Book Book Description Low-cost and high-performing, with a massively diverse range of uses and applications, the Raspberry Pi is set to revolutionize the way we think about computing and programming. By combining the Raspberry Pi with an Arduino board you'll be able to revolutionize the way you interact with your home and become part of a rapidly growing group of hobbyists and enthusiasts. This essential reference will guide you through a series of exciting projects that will allow you to automate your very own home. With easy-to-follow, step-by-step examples, diagrams, and explanations you will not only find it incredibly productive but also highly engaging and informative. Book Details Publisher: Packt Publishing By: Andrew K. Dennis ISBN: 978-1-84969-586-2 Year: 2013 Pages: 176 Language: English File size: 6.3 MB File format: PDF Paper Book Buy: Raspberry Pi Home Automation with Arduino by Andrew K. Dennis E-Book Online Book Read: Raspberry Pi Home Automation with Arduino Purchase Andrew K. Dennis E-Book ### Arduino Adventures by James Floyd Kelly, Harold Timmis E-Book Arduino Adventures: Escape from Gemini Station provides a fun introduction to the Arduino microcontroller by putting you (the reader) into the action of a science fiction adventure story. You'll find yourself following along as Cade and Elle explore Gemini Station - an orbiting museum dedicated to preserving and sharing technology throughout the centuries. Trouble ensues. The station is evacuated, including Cade and Elle's class that was visiting the station on a field trip. Cade and Elle don't make it aboard their shuttle and are trapped on the station along with a friendly artificial intelligence named Andrew who wants to help them get off the damaged station. Book Details Publisher: Apress By: James Floyd Kelly, Harold Timmis ISBN: 978-1-4302-4605-3 Year: 2013 Pages: 332 Language: English File size: 16.9 MB File format: PDF Paper Book Buy: Arduino Adventures by James Floyd Kelly, Harold Timmis E-Book Online Book Read: Arduino Adventures Purchase Harold Timmis E-Book ### Professional Android Open Accessory Programming with Arduino E-Book Book Description Android Open Accessory is a new, simple, and secure protocol for connecting any microcontroller-empowered device to an Android smartphone or tablet. This Wrox guide shows Android programmers how to use AOA with Arduino, the microcontroller platform, to control such systems as lighting, air conditioning, and entertainment systems from Android devices. Furthermore, it teaches the circuit-building skills needed to create games and practical products that also take advantage of Android technology. Book Details Publisher: Wrox By: Andreas Goransson, David Cuartielles Ruiz ISBN: 978-1-1184-5476-3 Year: 2013 Pages: 408 Language: English File size: 27.2 MB File format: PDF Paper Book Buy: Professional Android Open Accessory Programming with Arduino E-Book Purchase Arduino E-Book ### Arduino Wearables by Tony Olsson E-Book Book Description You've probably seen LED-decorated t-shirts and hats, and maybe even other electronic gadgets embedded in clothing, but with Arduino Wearables you can learn to make your own wearable electronic creations. This book is an introduction to wearable computing, prototyping, and smart materials using the Arduino platform. Every chapter takes you all the way from idea to finished project. Even if you have no experience with Arduino, this book will get you set up with all the materials, software, and hardware you need; you'll complete simple projects first, and then build on your growing expertise to make more complex projects. Book Details Publisher: Apress By: Tony Olsson ISBN: 978-1-4302-4359-5 Year: 2012 Pages: 336 Language: English File size: 9.6 MB File format: PDF Paper Book Buy: Arduino Wearables by Tony Olsson E-Book Online Book Read: Arduino Wearables Purchase Tony Olsson E-Book ### Practical Arduino Engineering by Harold Timmis E-Book Book Description Arduino boards have impressed both hackers and professional engineers. Whether you're a hobbyist or a professional, it isn't just a breadboard and a hazy idea that keeps you going. It's essential to institute a proper design, device instrumentation and, indeed, test your project thoroughly before committing to a particular prototype. Each and every chapter exemplifies this process and demonstrates how you can profit from the implementation solid engineering principles - regardless of whether you just play in your basement or you want to publicize and sell your devices. Book Details Publisher: Apress By: Harold Timmis ISBN: 978-1-4302-3885-0 Year: 2011 Pages: 328 Language: English File size: 9.2 MB File format: PDF Paper Book Buy: Practical Arduino Engineering by Harold Timmis E-Book Online Book Read: Practical Arduino Engineering Purchase Harold Timmis E-Book ### The Arduino Starter Kit with Arduino Book The Official Arduino Starter Kit is here! This kit walks you through the basics of using the Arduino in a hands-on way. You'll learn through building several creative projects. The kit includes a selection of the most common and useful electronic components with a 170-page book of 15 projects. Starting the basics of electronics, to more complex projects, the kit will help you control the physical world with sensor and actuators. The projects in the kit are: Purchase Arduino Starter Kit with Book - 01 : GET TO KNOW YOUR TOOLS an introduction to the concepts you'll need to use this kit - 02 : SPACESHIP INTERFACE design to control panel for your startship - 03 : LOVE-O-METER measure how hot-blooded you are - 04 : COLOR MIXING LAMP produce any color with a lamp that uses light as an input - 05 : MOOD CUE clue people in to how you're doing - 06 : LIGHT THEREMIN create a musical instrument you play by waving your hands - 07 : KEYBOARD INSTRUMENT play music and make some noise with this keyboard - 08 : DIGITAL HOURGLASS a light-up hourglass that can stop you from working too much - 09 : MOTORIZED PINWHEEL a color wheel that will have your head spinning - 10 : ZOETROPE create a mechanical animation you can play forward or reverse - 11 : CRYSTAL BALL a mystical tour to answer all your tough question - 12 : KNOCK LOCK tap out the secret code to open the door - 13 : TOUCHY-FEEL LAMP a lamp that responds to your touch - 14 : TWEAK THE ARDUINO LOGO control your personal computer from your Arduino - 15 : HACKING BUTTONS create a master control for all your devices! Once you've mastered this knowledge, you'll have a palette of software and circuits that you can use to create something beautiful, and make someone smile with what you invent. Then build it, hack it and share it. Because Arduino is you! Link to Purchase Kit and Book: The Arduino Starter Kit by Arduino E-Book Purchase Arduino Starter Kit with Book Arduino Starter Kit Items List: Once you’ve mastered this knowledge, you’ll have a palette of software and circuits that you can use to create something beautiful, and make someone smile with what you invent. Then build it, hack it and share it. Because Arduino is you! 1 Arduino Projects Book (170 pages) 1 Arduino UNO board rev.3 1 USB cable 1 Breadboard 1 Easy-to-assemble wooden base 1 9v battery snap 70 Solid core jumper wires 2 Stranded jumper wires 6 Photoresistor [VT90N2 LDR] 3 Potentiometer 10kilohm 10 Pushbuttons 1 Temperature sensor [TMP36] 1 Tilt sensor 1 alphanumeric LCD (16x2 characters) 1 LED (bright white) 1 LED (RGB) 8 LEDs (red) 8 LEDs (green) 8 LEDs (yellow) 3 LEDs (blue) 1 Small DC motor 6/9V 1 Small servo motor 1 Piezo capsule [PKM17EPP-4001-B0] 1 H-bridge motor driver [L293D] 2 Optocouplers [4N35] 5 Transistor [BC547] 2 Mosfet transistors [IRF520] 5 Capacitors 100nF 3 Capacitors 100uF 5 Capacitor 100pF 5 Diodes [1N4007] 3 Transparent gels (red, green, blue) 1 Male pins strip (40x1) 20 Resistors 220 ohm 5 Resistors 560 ohm 5 Resistors 1 kilohm 5 Resistors 4.7 kilohm 20 Resistors 10 kilohm 5 Resistors 1 megohm 5 Resistors 10 megohm Purchase Arduino Starter Kit with Book ### Pro Arduino by Rick Anderson E-Book So, you've created a few projects with Arduino, and now it's time to kick it up a notch. Where do you go next? With Pro Arduino, you'll learn about new tools, techniques, and frameworks to make even more ground-breaking, eye-popping projects. You'll discover how to make Arduino-based gadgets and robots interact with your mobile phone and with Unity3D. You'll learn all about the changes in Arduino 1.0, you'll create amazing output with openFrameworks, and you'll learn how to make games with the Gameduino. You'll also learn advanced topics, such as modifying the Arduino to work with non-standard Atmel chips and Microchip's PIC32. Rick Anderson, an experienced Arduino developer and instructor, and Dan Cervo, an experienced Arduino gadgeteer, will give you a guided tour of advanced Arduino capabilities. If it can be done with an Arduino, you'll learn about it here. What you’ll learn How to modify the Arduino to work with other chips How to simulate sensors for testing and debugging How to set up advanced XBee networks How to write Arduino libraries and share them with the Arduino community How to get started with the Android accessory development kit How to create games with hardware or with Gameduino How to connect your Android phone to an Arduino sensor network Who this book is for Arduino fans, technogeeks, and electronic artists who want to take their skills to the next level. Link to Purchase E-Book: Pro Arduino by Rick Anderson E-Book Purchase Pro Arduino by Rick Anderson E-Book ### Environmental Monitoring with Arduino by Emily Gertz E-Book After the devastating tsunami in 2011, DYIers in Japan built their own devices to detect radiation levels, then posted their finding on the Internet. Right now, thousands of people worldwide are tracking environmental conditions with monitoring devices they’ve built themselves. You can do it too! This inspiring guide shows you how to use Arduino to create gadgets for measuring noise, weather, electromagnetic interference (EMI), water purity, and more. You’ll also learn how to collect and share your own data, and you can experiment by creating your own variations of the gadgets covered in the book. If you’re new to DIY electronics, the first chapter offers a primer on electronic circuits and Arduino programming. Use a special microphone and amplifier to build a reliable noise monitor Create a gadget to detect energy vampires: devices that use electricity when they’re “off” Examine water purity with a water conductivity device Measure weather basics such as temperature, humidity, and dew point Build your own Geiger counter to gauge background radiation Extend Arduino with an Ethernet shield—and put your data on the Internet Share your weather and radiation data online through Pachube   Link to Purchase E-Book: Environmental Monitoring with Arduino by Emily Gertz E-Book Purchase Arduino by Emily Gertz E-Book ### Make Arduino Bots and Gadgets by Tero Karvinen E-Book Want to build your own robots, turn your ideas into prototypes, control devices with a computer, or make your own cell phone applications? It's a snap with this book and the Arduino open source electronic prototyping platform. Get started with six fun projects and achieve impressive results quickly. Gain the know-how and experience to invent your own cool gadgets. With Arduino, building your own embedded gadgets is easy, even for beginners. Embedded systems are everywhere--inside cars, children's toys, and mobile phones. This book will teach you the basics of embedded systems and help you build your first gadget in just a few days. Each learn-as-you-build project that follows will add to your knowledge and skills. Experiment with Arduino, the popular microcontroller board Build robots and electronic projects with easy-to-follow instructions Turn your ideas into working physical prototypes Use Android phones as remote controls in your projects Work with an uncomplicated programming language created for artists, designers, and hobbyists Get everyone involved, with projects that even beginners can build. Table of Contents: Chapter 1 Introduction Chapter 2 Arduino: The Brains of an Embedded System Chapter 3 Stalker Guard Chapter 4 Insect Robot Chapter 5 Interactive Painting Chapter 6 Boxing Clock Chapter 7 Remote for a Smart Home Chapter 8 Soccer Robot Appendix tBlue Library for Android Book Details Publisher: O'Reilly Media By: Tero Karvinen, Kimmo Karvinen ISBN: 978-1-4493-8971-0 Year: 2011 Pages: 296 Language: English File size: 55.7 MB File format: PDF Paper Book Buy: Make Arduino Bots and Gadgets by Tero Karvinen E-Book ### Beginning Arduino Programming by Brian Evans E-Book Beginning Arduino Programming allows you to quickly and intuitively develop your programming skills through sketching in code. This clear introduction provides you with an understanding of the basic framework for developing Arduino code, including the structure, syntax, functions, and libraries needed to create future projects. You will also learn how to program your Arduino interface board to sense the physical world, to control light, movement, and sound, and to create objects with interesting behavior. With Beginning Arduino Programming, you'll get the knowledge you need to master the fundamental aspects of writing code on the Arduino platform, even if you have never before written code. It will have you ready to take the next step: to explore new project ideas, new kinds of hardware, contribute back to the open source community, and even take on more programming languages. What you’ll learn Start programming quickly with Arduino sketches. Write code that interacts with devices, such as LEDs, sensors, and motors. Work with loops, functions, randomness, and delays in your Arduino projects. Develop a style of writing code that reflects your individuality. Use many of the Arduino libraries to control even more devices. Read from RFID readers, write data to SD memory cards, and connect to the Internet using Ethernet. Who this book is for This book is for all Arduino board users who want to learn to program the Arduino board, regardless of hardware version or which devices are connected to the board. You do not need to have programmed before, but if you have, then you'll learn how to apply core coding features in the Arduino context. Table of Contents Getting Started Sketching in Code Working With Variables Making Decisions Digital Ins and Outs Analog in, Analog out Functions, Time, and Interrupts Arrays for Arduino Writing New Functions for Arduino Arduino Libraries Arduino Hardware 10 Where to Go from Here? Appendix A: Common Circuits Appendix B: Arduino Math Book Details Publisher: Apress By: Brian Evans ISBN: 978-1-4302-3777-8 Year: 2011 Pages: 272 Language: English File size: 36.9 MB File format: PDF Paper Book Buy: Beginning Arduino Programming by Brian Evans E-Book Purchase Brian Evans E-Book ### Building Wireless Sensor Networks: with ZigBee, XBee, Arduino, and Processing by Robert Faludi E-Book Get ready to create distributed sensor systems and intelligent interactive devices using the ZigBee wireless networking protocol and Series 2 XBee radios. By the time you're halfway through this fast-paced, hands-on guide, you'll have built a series of useful projects, including a complete ZigBee wireless network that delivers remotely sensed data. Radio networking is creating revolutions in volcano monitoring, performance art, clean energy, and consumer electronics. As you follow the examples in each chapter, you'll learn how to tackle inspiring projects of your own. This practical guide is ideal for inventors, hackers, crafters, students, hobbyists, and scientists. Investigate an assortment of practical and intriguing project ideas Prep your ZigBee toolbox with an extensive shopping list of parts and programs Create a simple, working ZigBee network with XBee radios in less than two hours -- for under $100 Use the Arduino open source electronics prototyping platform to build a series of increasingly complex projects Get familiar with XBee's API mode for creating sensor networks Build fully scalable sensing and actuation systems with inexpensive components Learn about power management, source routing, and other XBee technical nuances Make gateways that connect with neighboring networks, including the Internet Table of Contents: Chapter 1 Getting Ready Chapter 2 Up and Running Chapter 3 Build a Better Doorbell Chapter 4 Ins and Outs Chapter 5 API and a Sensor Network Chapter 6 Sleeping, Then Changing the World Chapter 7 Over the Borders Chapter 8 More to Love Appendix Resource Guide Link to Purchase E-Book: Building Wireless Sensor Networks: with ZigBee, XBee, Arduino, and Processing by Robert Faludi E-Book Purchase Building Wireless Sensor Networks ### Arduino Internals by Dale Wheat E-Book Arduino Internals guides you to the heart of the Arduino board. Author Dale Wheat shares his intimate knowledge of the Arduino board—its secrets, its strengths and possible alternatives to its constituent parts are laid open to scrutiny in this book. You'll learn to build new, improved Arduino boards and peripherals, while conforming to the Arduino reference design. Arduino Internals begins by reviewing the current Arduino hardware and software landscape. In particular, it offers a clear analysis of how the ATmega8 board works and when and where to use its derivatives. The chapter on the "hardware heart" is vital for the rest of the book and should be studied in some detail. Furthermore, Arduino Internals offers important information about the CPU running the Arduino board, the memory contained within it and the peripherals mounted on it. To be able to write software that runs optimally on what is a fairly small embedded board, one must understand how the different parts interact. Later in the book, you'll learn how to replace certain parts with more powerful alternatives and how to design Arduino peripherals and shields. Since Arduino Internals addresses both sides of the Arduino hardware-software boundary, the author analyzes the compiler toolchain and again provides suggestions on how to replace it with something more suitable for your own purposes. You'll also learn about how libraries enable you to change the way Arduino and software interact, and how to write your own library implementing algorithms you've devised yourself. Arduino Internals also suggests alternative programming environments, since many Arduino hackers have a background language other than C or Java. Of course, it is possible to optimize the way in which hardware and software interact—an entire chapter is dedicated to this field. Arduino Internals doesn't just focus on the different parts of Arduino architecture, but also on the ways in which example projects can take advantage of the new and improved Arduino board. Wheat employs example projects to exemplify the hacks and algorithms taught throughout the book. Arduino projects straddling the hardware-software boundary often require collaboration between people of different talents and skills which cannot be taken for granted. For this reason, Arduino Internals contains a whole chapter dedicated to collaboration and open source cooperation to make those tools and skills explicit. One of the crowning achievements of an Arduino hacker is to design a shield or peripheral residing on the Arduino board, which is the focus of the following chapter. A later chapter takes specialization further by examining Arduino protocols and communications, a field immediately relevant to shields and the communication between peripherals and the board. Finally, Arduino Internals integrates different skills and design techniques by presenting several projects that challenge you to put your newly-acquired skills to the test! Please note: the print version of this title is black & white; the eBook is full color. What you’ll learn To understand the internal heart of your Arduino board How to replace parts of the Arduino board with new, more powerful elements How to build a new Arduino board How to build your own peripherals and shields How to optimize your own code and existing libraries to run on your own Arduino device Who this book is for This book is geared towards intermediate-level Arduino hackers and makers, embedded system designers who want to know what Arduino is about, hardware designers who would like to change Arduino to suit their own requirements, and developers who would like to write optimized Arduino software. Table of Contents Hardware Software Atmel AVR Supporting Hardware Arduino Software Optimizations Hardware and Software Combined Example Projects Project Management Hardware Design Software Design Networking Tabletop Robot Project   Link to Purchase E-Book: Arduino Internals by Dale Wheat E-Book Purchase Dale Wheat E-Book ### Arduino and Kinect Projects Design, Build, Blow Their Minds by Enrique Ramos Melgar E-Book If you've done some Arduino tinkering and wondered how you could incorporate the Kinect—or the other way around—then this book is for you. The authors of Arduino and Kinect Projects will show you how to create 10 amazing, creative projects, from simple to complex. You'll also find out how to incorporate Processing in your project design—a language very similar to the Arduino language. The ten projects are carefully designed to build on your skills at every step. Starting with the Arduino and Kinect equivalent of "Hello, World," the authors will take you through a diverse range of projects that showcase the huge range of possibilities that open up when Kinect and Arduino are combined. Gesture-based Remote Control. Control devices and home appliances with hand gestures. Kinect-networked Puppet. Play with a physical puppet remotely using your whole body. Mood Lamps. Build your own set of responsive, gesture controllable LED lamps. Drawing Robot. Control a drawing robot using a Kinect-based tangible table. Remote-controlled Vehicle. Use your body gestures to control a smart vehicle. Biometric Station. Use the Kinect for biometric recognition and checking Body Mass Indexes. 3D Modeling Interface. Learn how to use the Arduino LilyPad to build a wearable 3D modelling interface. 360º Scanner. Build a turntable scanner and scan any object 360º using only one Kinect. Delta Robot. Build and control your own fast and accurate parallel robot. What you’ll learn Arduino and Kinect basics Interfacing Kinect and Arduino through Processing Communicating: Serial and communication over networks Interacting with the physical world: Sensors and actuators Volumetric Scanning Step-by-step instructions on a variety of Arduino/Kinect projects Who this book is for Intermediate to experienced gadget hackers who want to learn how to combine Arduino with Kinect, or who want inspiration for innovation. Table of Contents 1. Arduino Basics 2. Kinect Basics 3. Interfacing Arduino and Kinect through Processing 4. Hello World: LED-me 5. Gesture-based Remote Control 6. Kinect-networked Puppet 7. Mood Lamps 8. Drawing Robot 9. Remote-controlled Vehicles 10. Biometric Station 11. 3D Modeling Interface 12. 360º Scanner 13. Delta Robot Book Details Publisher: Apress By: Enrique Ramos Melgar, Ciriaco Castro Diez ISBN: 978-1-4302-4167-6 Year: 2012 Pages: 416 Language: English File size: 83.1 MB File format: PDF Paper Book Buy: Arduino and Kinect Projects Design, Build, Blow Their Minds by Enrique Ramos Melgar E-Book Purchase Arduino and Kinect Projects Design ### Arduino Robotics by John-David Warren E-Book Book Description This book will show you how to use your Arduino to control a variety of different robots, while providing step-by-step instructions on the entire robot building process. You'll learn Arduino basics as well as the characteristics of different types of motors used in robotics. You also discover controller methods and failsafe methods, and learn how to apply them to your project. The book starts with basic robots and moves into more complex projects, including a GPS-enabled robot, a robotic lawn mower, a fighting bot, and even a DIY Segway-clone. Introduction to the Arduino and other components needed for robotics Learn how to build motor controllers Build bots from simple line-following and bump-sensor bots to more complex robots that can mow your lawn, do battle, or even take you for a ride Please note: the print version of this title is black & white; the eBook is full color. What you’ll learn Basics of motor-control Basics of PCB design and fabrication R/C control and decoding Autonomous sensor guidance Frame building from various materials Instructions for a variety of robot designs Who this book is for Electronics and robotics hobbyists and DIY builders. Table of Contents The Basics Arduino for Robotics Let’s Get Moving Linus the Line-Bot Wally the Wall-Bot Making PCBs The Bug-Bot Explorer-Bot RoboBoat Lawn-Bot 400 The Seg-Bot The Battle-Bot Alternate Control Link to Purchase E-Book: Arduino Robotics by John-David Warren E-Book Purchase John-David Warren E-Book ### Beginning C for Arduino by Jack Purdum E-Book Book Description Beginning C for Arduino is written for those who have no prior experience with microcontrollers or programming but would like to experiment and learn both. This book introduces you to the C programming language, reinforcing each programming structure with a simple demonstration of how you can use C to control the Arduino family of microcontrollers. Author Jack Purdum uses an engaging style to teach good programming techniques using examples that have been honed during his 25 years of university teaching. Beginning C for Arduino will teach you: The C programming language How to use C to control a microcontroller and related hardware How to extend C by creating your own library routines During the course of the book, you will learn the basics of programming, such as working with data types, making decisions, and writing control loops. You'll then progress onto some of the trickier aspects of C programming, such as using pointers effectively, working with the C preprocessor, and tackling file I/O. Each chapter ends with a series of exercises and review questions to test your knowledge and reinforce what you have learned. What you’ll learn The syntax of the C programming language as defined for the Arduino Tried and true coding practices (applicable to any programming language) How to design, code, and debug programs that drive Arduino microcontrollers How to extend the functionality of C How to integrate low cost, off-the-shelf, hardware shields into your own projects Who this book is for The book is aimed at a complete novice with no programming background. It assumes no prior programming or hardware design experience and is written for creative and curious people who would like to blend a software and hardware learning experience into a single, enjoyable endeavor. Table of Contents Introduction to Arduino Microcontrollers Arduino C Data Types  Decision Making in C Program Loops Functions in C Storage Classes and Scope Introduction to Pointers Using Pointers Effectively I/O Operations The C Preprocessor Arduino Libraries Appendix A - Suppliers Appendix B - Hardware Components Book Details Publisher: Apress By: Jack Purdum ISBN: 978-1-4302-4776-0 Year: 2012 Pages: 280 Language: English File size: 29 MB File format: PDF Paper Book Buy: Beginning C for Arduino by Jack Purdum E-Book ### Arduino A Quick-Start Guide by Maik Schmidt E-Book Book Description Arduino is an open-source platform that makes DIY electronics projects easier than ever. Readers with no electronics experience can create their first gadgets within a few minutes. This book is up-to-date for the new Arduino Uno board, with step-by-step instructions for building a universal remote, a motion-sensing game controller, and many other fun, useful projects. See "some photos": http://www.flickr.com/photos/50804036@N06/sets/72157624195730498/ of projects built by our readers over on Flickr. (And if you have photos of your project, please send them to support@pragprog.com). With this Quick-Start Guide you'll be creating your first gadgets within a few minutes, following the step-by-step instructions and photos throughout the book. You'll build your own motion-sensing game controller with a three-axis accelerometer, connect the Arduino to the Internet and program both client and server applications, and create a universal remote with an Arduino and a few cheap parts. Plus, you'll build your own burglar alarm that emails you whenever someone's moving in your living room, integrate Nintendo's Wii Nunchuk into your projects, make binary dice, learn how to solder, and more. Sidebars throughout the book point you to exciting real-world projects using the Arduino, plenty of exercises will extend your skills, and "What If It Doesn't Work" sections help you troubleshoot common problems. With Arduino: A Quick-Start Guide, beginners can quickly join the worldwide community of hobbyists and professionals who use the Arduino to prototype and develop fun, useful inventions. Table of Contents: Preface Chapter 1: Introduction Chapter 2: The Arduino Way Chapter 3: The Arduino Platform Chapter 4: Really Getting Started with Arduino Chapter 5: Advanced Input and Output Chapter 6: Talking to the Cloud Chapter 7: TroubleshootingThe BreadboardReading Resistors and Capacitors Arduino Quick ReferenceReading Schematic Diagrams  Online Book Read:                        Arduino Link to Purchase E-Book: Arduino A Quick-Start Guide by Maik Schmidt E-Book Purchase Maik Schmidt E-Book ### Beginning Arduino by Michael McRoberts E-Book Book Description In Beginning Arduino, you will learn all about the popular Arduino microcontroller by working your way through an amazing set of 50 cool projects. You'll progress from a complete beginner regarding Arduino programming and electronics knowledge to intermediate skills and the confidence to create your own amazing Arduino projects. Absolutely no experience in programming or electronics required! Rather than requiring you to wade through pages of theory before you start making things, this book has a hands-on approach. You will dive into making projects right from the start, learning how to use various electronic components and how to program the Arduino to control or communicate with those components. Each project is designed to build upon the knowledge learned in earlier projects and to further your knowledge in programming as well as skills with electronics. By the end of the book you will be able create your own projects confidently and with creativity. Please note: the print version of this title is black & white; the eBook is full color. You can download the color diagrams in the book from http://www.apress.com/9781430232407 What you’ll learn Controlling LEDs Displaying text and graphics on LCD displays Making a line-following robot Using touch screens Using digital pressure sensors Reading and writing data to SD cards Connecting your Arduino to the Internet Who this book is for Electronics enthusiasts who are new to the Arduino as well as artists and hobbyists who want to learn this very popular platform for physical computing and electronic art. Table of Contents Introduction Light 'Em Up LED Effects Simple Sounders and Sensors Driving a DC Motor Binary Counters LED Displays Liquid Crystal Displays Servos Steppers and Robots Pressure Sensors Touch Screens Temperature Sensors Ultrasonic Rangefinders Reading and Writing to an SD Card Making an RFID Reader Communicating over Ethernet   Link to Purchase E-Book: Beginning Arduino by Michael McRoberts E-Book ### Getting Started with Arduino by Massimo Banzi E-Book Book Description Arduino is the open-source electronics prototyping platform that’s taken the design and hobbyist world by storm. This thorough introduction, updated for Arduino 1.0, gives you lots of ideas for projects and helps you work with them right away. From getting organized to putting the final touches on your prototype, all the information you need is here! Inside, you’ll learn about: Interaction design and physical computing The Arduino hardware and software development environment Basics of electricity and electronics Prototyping on a solderless breadboard Drawing a schematic diagram Getting started with Arduino is a snap. To use the introductory examples in this guide, all you need an Arduino Uno or earlier model, along with USB A-B cable and an LED. The easy-to-use Arduino development environment is free to download. Join hundreds of thousands of hobbyists who have discovered this incredible (and educational) platform. Written by the co-founder of the Arduino project, Getting Started with Arduino gets you in on all the fun! Table of Contents Chapter 1 Introduction Chapter 2 The Arduino Way Chapter 3 The Arduino Platform Chapter 4 Really Getting Started with Arduino Chapter 5 Advanced Input and Output Chapter 6 Talking to the Cloud Chapter 7 Troubleshooting Appendix The Breadboard Appendix Reading Resistors and Capacitors Appendix Arduino Quick Reference   Book Details Publisher: O'Reilly Media By: Massimo Banzi ISBN: 978-1-4493-0987-9 Year: 2011 Pages: 130 Language: English File size: 6.8 MB File format: PDF Paper Book Buy: Getting Started with Arduino by Massimo Banzi E-Book Online Book Read: Getting Started with Arduino, 2nd Edition Purchase Massimo Banzi E-Book ### Arduino Cookbook by Michael Margolis E-Book Book Description: Want to create devices that interact with the physical world? This cookbook is perfect for anyone who wants to experiment with the popular Arduino microcontroller and programming environment. You’ll find more than 200 tips and techniques for building a variety of objects and prototypes such as toys, detectors, robots, and interactive clothing that can sense and respond to touch, sound, position, heat, and light. You don’t need to have mastered Arduino or programming to get started. Updated for the Arduino 1.0 release, the recipes in this second edition include practical examples and guidance to help you begin, expand, and enhance your projects right away—whether you’re an artist, designer, hobbyist, student, or engineer. Get up to speed on the Arduino board and essential software concepts quickly Learn basic techniques for reading digital and analog signals Use Arduino with a variety of popular input devices and sensors Drive visual displays, generate sound, and control several types of motors Interact with devices that use remote controls, including TVs and appliances Learn techniques for handling time delays and time measurement Apply advanced coding and memory handling techniques Table of Contents: Chapter 1. Getting Started Chapter 2. Making the Sketch Do Your Bidding Chapter 3. Using Mathematical Operators Chapter 4. Serial Communications Chapter 5. Simple Digital and Analog Input Chapter 6. Getting Input from Sensors Chapter 7. Visual Output Chapter 8. Physical Output Chapter 9. Audio Output Chapter 10. Remotely Controlling External Devices Chapter 11. Using Displays Chapter 12. Using Time and Dates Chapter 13. Communicating Using I2C and SPI Chapter 14. Wireless Communication Chapter 15. Ethernet and Networking Chapter 16. Using, Modifying, and Creating Libraries Chapter 17. Advanced Coding and Memory Handling Chapter 18. Using the Controller Chip Hardware Appendix A. Electronic Components Appendix B. Using Schematic Diagrams and Data Sheets Appendix C. Building and Connecting the Circuit Appendix D. Tips on Troubleshooting Software Problems Appendix E. Tips on Troubleshooting Hardware Problems Book Details Publisher: O'Reilly Media By: Michael Margolis ISBN: 978-0-596-80247-9 Year: 2011 Pages: 662 Language: English File size: 7.48 MB File format: PDF Paper Book Buy: Arduino Cookbook by Michael Margolis E-Book Online Book Read: Arduino Cookbook Purchase Michael Margolis E-Book ### 30 Arduino Projects for the Evil Genius by Simon Monk E-Book Introduction A hands-on guide to creating fun devices with the Arduino microcontroller system Includes 30 step-by-step projects with clear instructions, illustrations, photographs, and diagrams Arduino is the open-source physical computing platform that's rapidly becoming the microcontroller of choice for home electronics enthusiasts Assumes no prior knowledge of programming or electronics Compatible with Windows, Mac, and Linux Table of Contents Introduction; Chapter 1. Quickstart; Chapter 2. A Tour of Arduino; Chapter 3. LED Projects; Chapter 4. More LED Projects; Chapter 5. Sensor Projects; Chapter 6. Light Projects; Chapter 7. Sound Projects; Chapter 8. Power Projects; Chapter 9. Miscellaneous Projects; Chapter 10. Your Projects; Appendix: Components and Supplies Link to Purchase E-Book: 30 Arduino Projects for the Evil Genius by Simon Monk E-Book [ Purchase Simon Monk E-Book ### Programming Arduino Getting Started with Sketches by Simon Monk E-Book Introduction An introductory Arduino programming guide for artists and hobbyists Leads readers from basic through to advanced C programming concepts Fast-paced tutorials for developing working Sketches (the name given to Arduino programs) Fills the gap in the market left by the many books that concentrate mainly on the hardware side of using Arduino Filled with dozens of examples that can be used as-is or modified'all code available for download Table of Contents Introduction Ch. 1. This Is Arduino Ch 2. Getting Started Ch 3. C Language Basics Ch 4. Functions Ch 5. Arrays and Strings Ch 6. Input and Output Ch 7. The Standard Ch 8. Data Storage Ch 9. LCD Displays Ch 10. Arduino Ethernet Programming Ch 11. C++ and Libraries Index   Link to Purchase E-Book: Programming Arduino Getting Started with Sketches by Simon Monk E-Book Purchase Simon Monk E-Book ### Arduino + Android Projects for the Evil Genius: Control Arduino with Your Smartphone or Tablet by Simon Monk E-Book Introduction Reveals how to create Arduino devices and control them with Android smartphones and tablets, with added insights into the realm of "Evil Genius Arduino" for those seeking more advanced and unconventional projects. Features several home automation devices for controlling home heating and lighting, locking and unlocking doors, and more Includes the author's exclusive sound-based link for enabling communication between Arduino and Android Explains the theory behind the projects and gives readers the information they need to create their own projects Table of Contents Part One: Android Peripherals 1. Bluetooth Robot 2. Android Geiger Counter 3. Android Light Show 4. TV Remote 5. Temperature Logger 6. Ultrasonic Range Finder Part Two: Home Automation 7. Home Automation Controller 8. Power Control 9. Smart Thermostat 10. RFID Door Lock 11. Signaling Flags 12. Delay Timer Link to Purchase E-Book: Arduino + Android Projects for the Evil Genius: Control Arduino with Your Smartphone or Tablet by Simon Monk E-Book Purchase Simon Monk E-Book ### Arduino Robot Bonanza by Gordon McComb E-Book Introduction Bestselling robotics author shows how to build fun, affordable robots with Arduino Guides readers through the construction of seven robots that roll, walk, talk, crawl, slither'and even sling insults All projects are built using wildly popular Arduino microcontroller platform Features illustrated, step-by-step instructions and assembly plans Includes tips for adding options, alternatives, and customizations Table of Contents Ch 1. Ins and Outs of the Arduino Microcontroller Ch 2. Arduino as a Robot Brain Ch 3. Connecting Things to the Arduino Ch 4. Enhancing Your Robot with Sensors Ch 5. Expanding the Arduino Ch 6. Layout and Design Ch 7. The TestBot Test Platform Ch 8. Mini Kissing Bug Ch 9. Animatronic Parrot Ch 10. Your Robot Avatar Ch 11. Slithering Snake Ch 12. 18-Servo WalkerBot Ch 13. PC-based Autonomous Robot Ch 14. Crash Course in Electronics Ch 15. Learning the Arduino Programming Language Ch 16. Setting Up Your Robotics Laboratory Link to Purchase E-Book: Arduino Robot Bonanza by Gordon McComb E-Book Purchase Gordon McComb E-Book ### 30 Arduino Projects for the Evil Genius: Second Edition by Simon Monk E-Book Introduction The bestselling project-based book for Arduino'updated for Arduino Uno and Leonardo Covers the Arduino 1.0 development environment which includes new features, a new extension, toolbar icons, and modifications to the programming language Includes the latest information on the Arduino Uno and Arduino Leonardo boards Features new programming code, streamlined and improved project instructions, and clearer breadboard diagrams Expanded and updated part codes lists include Mouser, Digikey, and Newark Table of Contents: Introduction Ch 1. Quick Start Ch 2. A Tour of Arduino Ch 3. LED Projects Ch 4. More LED Projects Ch 5. Sensor Projects Ch 6. Light Projects Ch 7. Sound Projects Ch 8. Power Projects Ch 9. Miscellaneous Projects Ch 10. USB Projects with the Leonardo Ch 11. Design and Build Your Own Projects Appendix: Components and Supplies Link to Purchase E-Book: 30 Arduino Projects for the Evil Genius: Second Edition by Simon Monk E-Book ### Arduino A Quick-Start Guide E-Book Book Description Arduino is an open-source platform that makes DIY electronics projects easier than ever. Readers with no electronics experience can create their first gadgets within a few minutes. This book is up-to-date for the new Arduino Uno board, with step-by-step instructions for building a universal remote, a motion-sensing game controller, and many other fun, useful projects. Book Details Publisher: The Pragmatic Programmers By: Maik Schmidt ISBN: 978-1-93435-666-1 Year: 2011 Pages: 296 Language: English File size: 11.2 MB File format: PDF eBook Download: Arduino Paper Book Buy: Arduino Online Book Read: Arduino   For more detail: Arduino A Quick-Start Guide E-Book Purchase Arduino A Quick-Start Guide E-Book ### Combo Blocks using an Arduino Project by CU Boulder Thinks That Think students: Michelle Bourgeois, Charles Dietrich, and Ben Link Imagine having a safe in which the combo is any small object of your choosing.  Perhaps it's your favorite coffee mug, or a bat man figurine.  This project is based on this idea, using the weight and placement of your "key" object(s) to determine the combination for a safe. This safe uses an array of force sensors to determine the unique weight distribution of your key object(s).  The Arduino is set up to lock and unlock the safe door when objects are placed on the platform, and an LED indicates whether the door is locked (red) or unlocked (green). For this prototype, we used stacks of Alphabet Blocks as our key to open the safe.  This project utilizes a laser cutter, some soldering, and a cabinet in which we constructed ourselves, but you could modify any box you wish to use. Note: There is a variation of this project which uses homemade sensors.  You will see additional materials and steps for this variation.  These sensors were taken from the "DIY Force Sensitive Resistor" Instructable. Materials: 1 box with a door 1 Arduino Uno 1 12x12" 1/4" thick, color acrylic sheet 1 12x12" 1/8" thick, color acrylic sheet (detail work) 2? 12x12" 1/8" thick, clear acrylic sheets 1 servo 4 small pressure sensors  (www.sparkfun.com/products/9673 ) 4 1" long, 1/4" diameter dowels (cut from shelving pegs) 1 push button 1 tri-colored LED 1 potentiometer 4 1 kOhm ? resistors 9V battery and casing solid wire scraps of wood and wood glue (or latch) double-sided tape hot glue and glue gun Additional Materials (for homemade sensors): 1 3x4" one-sided copper plated PCB (http://www.jpmsupply.com/servlet/the-196/Copper-Clad-Circuit-Board/Detail ) 1/4" thick, conductive foam Aleene's Original Tacky Glue (http://www.amazon.com/Aleenes-Original-Tacky-Glue-4-oz/dp/B00195OGKA ) composite wire Step 1: Build the Safe 1. Obtain or build a box with a door .  We built our own box out of spare shelving and 2.5" screws.  Two hinges where attached to the door and the left interior of the box.  Each side was then sanded to be smooth and each facing was covered with piping and white caps over the screws.  It measures one cubic foot. 2. Attach the locking servo with duct tape or other means. 3. Build a latch that fits the servo lock.  We made ours out of small scraps of wood and used wood glue to bond it to the interior of the door. 4. Drill a hole in the top of the box to allow wiring to the servo and light sensor. Step 2: Build the Sensor Block Our sensor block was made using a laser cutter to cut pieces of clear acrylic. Holes allowed the wiring from the Arduino to reach the hole in the safe for the servo. The pieces were bonded together using an acrylic bond. The sensor block was bonded to a 12x12" piece of clear acrylic with a square cut out to use as its base. Major Components in Project1 box with a door 1 Arduino Uno 1 12×12″ 1/4″ thick, color acrylic sheet   For more detail: Combo Blocks using an Arduino ### Arduino Touch Screen Room Control Hey everyone, I finally finished my touch panel for my bedroom wall and am here to show you how i made it. Unfortunately its not installed in my wall yet as I might be moving and don't want to make anymore holes in my walls, but its coming with me and has already proven itself very useful in the state it is in. Overview - Infrared control of TV * Power Toggle * Volume Control * Mute * Input - RF controlled outlets * power on or off for 2 outlets - Local internet control using a Netduino Parts----------------------------------------------------------------------------- 1x Arduino mega 1x Touch screen and touch screen shield 1x Netduino 1x pack Shop Basic  3pk indoor wireless remote control 4x 2n3904 transistors 1x Infrared led 1x switch (kills RF transmitters battery, saves battery power) -------------------------------------------------------------------------------------- Step 1: The Build The build was not too difficult so I won't go into that much detail. RF - wall outlet transmitter i used 4 x 2n3904 transistors to simulate pressing the buttons for the RF transmitter. The remote still works as normal, just has a hole in the back with some wires now. In addition to running a ground wire from the RF transmitter i also added a kill switch to the battery. They are a pain to order online (12v, 23amp battery) and they don't last that long. Netduino The netduino has 5 wires connecting the digital pins (out) to the arduino's analog pins (in) to simply trigger 4 of the buttons on the RF transmitter as well as the TV power toggle by reading in the voltage. Arduino Mega with touch screen Besides the 5 pins in the analog from the netduino, I wired in 6 wires out, 4 to trigger the RF transmitter's buttons, 1 for a ground, and another for the infrared led. Bolted that sucker to the front of this nice wooden box and called it done :) The box will be behind a wall so only the touch screen will show anyway. Three wires poke out of the box to hook everything up, a USB cable for power, an ethernet cable, and the IR led (which will be installed higher above the device). Step 2: The Menu Here's a quick overview of the menu: Main Menu (1st image) From here you can choose between the "TV" menu, the "Settings" menu or toggle the power of my two wall outlets. The network toggle is just to prevent errors when the netduino powers on. Plus it keeps my friends from messing with my room. TV Menu (2nd image) One of the initial reasons for this touch screen was to power on/off my TV when leaving and entering the room, i plan on placing the screen above my light switch so when I am rushing to leave i don't have to search for the remote. Major Components in Project1x Arduino mega 1x Touch screen and touch screen shield 1x Netduino   For more detail: Arduino Touch Screen Room Control ### Bug-Catching Spider in Web using Arduino Part 2 This project is a collaboration between  idesigner4 and bhasudha(me), students in the Fall 2012 course Things That Think (CSCI 7000) at The University of Colorado - Boulder. The story of our bug-catching spider automaton goes like this: A giant evil spider resides in a big web. One day an unfortunate lady bug gets trapped in the web and the scary spider pounces on it. We came up with the idea for this six-week project together and discussed implementation possibilities at length, particularly with respect to moving the spider and detecting the bug. For example, although we ended up using IR sensing for bug detection, we considered several other possibilities including touch sensors and image processing. At that point, the highly modular and reusable nature of the project components allowed us to build separately, and we are posting our Instructable as a two-part series. Part 1, described in this Instructable, shows how to build the following elements: * The frame to which everything is attached * The spider web and associated lighting * The spider mover, which is an XY table beneath the web Part 2  shows how to build the remaining elements: * The bug detector * The bug * The spider Readers who would like to build this project should be aware of the following limitations: The XY table moves nicely under human power, but not with the servos, and we think this outcome is a result of the materials not being sufficiently rigid. It's possible that adding another servo to move the lower slider from both sides would be helpful, too. Here are some alternative Instructables XY tables to try: Low Cost Hobby Servo XY Table Internet Arduino-Controlled T-Slot XY Table DIY CNC Router Our intent was to be able to display the web in any position, such as leaning against a wall. For this reason, we used strong magnets on both the spider and the mover. Although this idea worked well with models during pretesting, the final spider clings too tightly to the web and doesn't move well. For this reason, we would recommend a different spider / mover magnetic connection, as well as stronger servos to help overcome drag. The spider's orientation is fixed. We had discussed using a rotating arm on the spider mover, with the pivot point toward the front of the spider, but did not build it due to time limitations. This arm would have allowed the spider to turn as it moved forward along an arc traced out by the spider mover. Step 1: Bug sensing mechanism Here is a short video demonstrating how the bug sensing works. The overall mechanism is as follows: The Arduino controller code interfaces with the IR grid and the motor. The IR grid identifies the position of the bug (the x,y coordinate) (as shown in the top right corner of the video). This X,Y coordinate is then passed to the controller which then decides how much to move the motor along X and Y to reach the bug. The controller code remembers its current position in the grid (current position of the spider) while calculating steps to move in X and Y. The motor and the IR grid are synchronized for timing, by the controller code. Step 2: Materials Needed nfrared grid - 10 x 10: 2 x Acrylic base (38 cm x 7 cm  3mm thick ) 2 x Small Basswood (40 cm x 2.5 cm 1/8 inch thick) 2 x Big Basswood (38 cm x 8 cm  1/4inch thick) 4 x Solderless Breadboards (830 Tie Points. Board Size: 2.14" x 6.5". Around $7.99 each) Variable length and colored Jumper wires (22 GA Solid Tinned Copper wire kit contains 4 colors. Around $13.51) 20 x 10K ohm Resistors(Available in packs of 5 or more) 1 x Mini Breadboard ( 170 tie points. Board Size 1.4" x 1.6". Around $3.99 ) 20 x IR detectors(Also Known as Infrared Photo transistors Around $0.50 each for 10 plus units ordered) 1 x Arduino Mega (ATmega1280) 6 x wire connectors ( optional component. easy to identify the output wires) 6 x small  metal clips to hold acrylic to the frame Bug: 1 x Printed circuit Board (417 holes. Around $2.49) 8 x IR Emitter ( pack of 25 costs around $7.95) Red and Black variable length Jumper wires Foam sheets(1/4 inch thick) 8 x 220 ohm Resistor (Available in pack of 5. Around $1.19) Fabric paints ( colors of personal choice) 1 x Spring (Flexibility of the spring depends on the size of the bug) Spider: 2 x Ball Magnets (1/4 inch diameter. Available in local hardware shop) 1 x rod magnet (any rod shaped . Example: magnetic construction kits) Basswood ( 1/8 inch thickness) Foam (1/4 inch thick. Used as a support inside the spider body) 4 x small disc magnets magnets (1/4 inch X 1/16inch neodymium disc magnets) Thick metal wire (~18 Gauge. Strong enough to support spider legs) Springs (choice of spring depends on the weight of the spider legs) Black Pipe cleaners (pack of 25 around $1.19) Decorative fabric ( Any decorative fabric that appeals to individual aesthetic preference) 2 x  blue beads for eyes ( Any color that feels good to our imagination) Machines & Tools: Laser cutter Devcon weld it - All purpose glue Wire snipper Cellophane Tapes Soldering kit Snap knife to cut foam Drill Major Components in Project20 x IR detectors 1 x Arduino Mega (ATmega1280) 6 x small  metal clips   For more detail: Bug-Catching Spider in Web, Part 2 ### Arduino R/C Lawnmower What this is: This instructable will show you how to make your Arduino into an R/C interface that you can use for just about anything requiring remote control. I will also show you how I built an R/C lawnmower using my Arduino, a cheap R/C transmitter and receiver pair, and a couple of electric-wheelchair motors from Ebay.  I have used this interface to control anything from basic LED's to Bipolar stepper motors, mini-robots, lifeless R/C cars from the thrift store, and even a 100lb lawnmower (all with appropriate motor controllers). It is very flexible and easy to change and very simple to set up. See a slightly different version of the Lawnbot400 in my new book "Arduino Robotics" , as well as a DIY Segway and several other bots. Check it out in MAKE magazine in the April 2010 issue (#22) or here: UPDATE 3-24-10 New wheel-barrow bucket mounted on top with hinges so it can dump its contents. UPDATE 3-10-10: NEW CODE And new video of the Lawnbot400 moving a bunch of dirt from my truck to the flower beds across the yard, also I updated the code again. I added some new code to the project that is safer, including a manual kill-switch and a Failsafe switch. To implement the Failsafe, I used another Atmega168 (or an Arduino), to control a normally-open 60amp power relay. The relay disconnects the power to the motor-controller unless receiving a "good" signal from the 2nd microcontroller. This signal is updated 2 times every second and is either ON or OFF. If the bot gets out of range, it loses power to the motors. If I flip the kill-switch on the Transmitter, it loses power to the motors. This is also a handy way to disable it remotely if anything were to go near it that wasn't supposed to. The updated code for both microcontrollers is on the CODE page. In addition to the failsafe, I changed the way the code reads the PPM signals to make it more reliable. Also, I realized that I was only able to run the bot at 80% speed with the old code, so now it is quite a bit faster and has more power (it can carry me across the yard @ 155lb). Check out this new video of me riding the Lawnbot400, my wife driving it over a bunch of branches, then me making do some wheelies. Don't worry, the mower was turned off this time since the grass didn't need cutting, we were just having fun. Disclaimer: DANGER!!! This is a VERY dangerous piece of equipment if not handled appropriately. Since all the electronics have been home-built and the Arduino code is new, you MUST be very careful while operating anything heavy with this code. I have had 1 or 2 times during testing - and before adding a secondary failsafe - that the main Arduino jammed up and I temporarily lost control of the mower for a few seconds!!!! Though I have added several filters to discard unwanted signals and I rarely have any issues, an un-manned lawnmower IS STILL A POTENTIAL DEATH TRAP and I assume no responsibility for anything that happens as a result of your use of this code or this tutorial. This is meant as a guide for people who not only have the ability to build such a contraption, but the responsibiltity to operate it safely as well. Any suggestions or ideas on how to make this a safer project is always gladly accepted. Having said that, it's also awesome. Background: Most R/C equipment comes packaged for a single specific use, which makes it easy to use but is very limited in what you can do with it. So using the Arduino as an interpreter between the R/C system and the motor driver, I can use any motor controller that I want (depending on the size of the motor and power required), reprogramming the Arduino to supply the required signals. What I ended up with: After successfully hacking a few R/C cars from the thrift store, I got bored driving them around the driveway and I was having a hard time convincing my wife that there was any usefulness in the revived toy car. So I decided it was time to make my biggest chore at home, a whole lot easier and actually put my Arduino to work, and thats how I ended up building an R/C lawnmower. While designing the lawnmower, I thought it would be cool to learn about the electronics that made it move, so I designed and built my own motor speed controller (or H-bridge) to power the lawnmower. I looked around at every H-bridge design I could find before deciding to go with a Mosfet h-bridge that uses both N-channel and P-channel Mosfets. I built several different motor driver boards for this project, the first two were on Radio-Shack perf-board and the next 4 were designed using EagleCad and etched to a piece of copper-clad PCB, using the toner-transfer method. The most recent board is the one I use to mow the lawn as it has the ability to stay cool even while operating for long periods of time (30-40 mins straight) at 10-20amps and 24vdc. FWIW, I had to burn up a lot of Mosfets to find this out. If you want to see any of my other motor controllers, go to www.rediculouslygoodlooking.com and check out the Mosfet shield. Here is what I bought already assembled: FM R/C transmitter and receiver pair from ebay = $40 Arduino = $30 I already had a used push-mower = $60 Here is what I bought and assembled into the Lawnbot400 (as I call it): (2) electric-wheelchair motors from ebay = $40 ea (2) 12v marine deep cycle batteries - Walmart - $60 ea new (used batteries might work) 36" pieces of 2" angle-iron (2) and 1" square-tubing (2) from Home Depot = $8 ea 36" pieces of 1" angle-iron (2) and 1" flat steel bar (2) from Home Depot = $5 ea (a lot) of nuts, bolts, washers, lock washers 3/8" or 1/2" with drill bit = $20 (2) caster wheels from Harbor Freight Tools = $14 ea (2) drive wheels from Harbor Freight Tools = $8 ea (36") 5/8" threaded rod with several 5/8" nuts and washers from Home Depot = $8 (2) sprockets from Allelectronics = $5 ea #25 roller chain and a few universal links from Allelectronics = $10 for 3' sprockets from Electronics Goldmine = $1.50 ea (24) mosfets from Digikey = $1 ea (there were quite a few small parts for building the H-bridge, they are listed later on) Step 1: Setting up 1. Get R/C transmitter and receiver (I have tested FM and AM systems and they both work) 2. Upload code to Arduino (it is on the last page) 3. Make sure you are getting a good signal You will need an R/C radio transmitter(Tx) and receiver(Rx) pair, which is the most expensive part of the project, but can be used for every future project you might have involving R/C.  I went with a 6-channel FM system, but  I have tested a 27mHz AM transmitter/receiver and it works just as well. The beauty of the Arduino is that if you want to adjust the deadband or the motor-speed at turn-on, (unlike commercial ESC's) it is all easy changed in the Arduino IDE. Once you have your radio, all you need to do is upload the code to your Arduino, plug in the 2 channels that you want to use from your radio receiver into Digital pins 2 and 3 of the Arduino (these are the 2 external interrupt pins on the Arduino) and you are ready to control whatever you want. If you don't have a batter pack for the receiver, you can run jumper wires from the Arduino +5v and GND to the R/C receiever for power, you only need to supply a single channel with GND and +5v (it is not necessary to power every channel). Upload the code using the Aruino IDE (I am using version 0016 on Ubuntu). I started by controlling 3 LED's with 1 channel on a breadboard. I wired a red LED to be Forward (digital pin 9), a yellow LED for Reverse(digital pin 5), and a green LED for Neutral (digital pin 12). This allows you to adjust the code to fit the needs of your radio system. You will have smooth 0-100% PWM control of both LED's and the neutral light will turn on when the control stick is centered. If needed, you can widen the deadband for Neutral, but doing so will increase the speed at turn-on (which starts at 0%, so that would likely be desirable). See pictures. Major Components in ProjectArduino push-mower (2) electric-wheelchair motors (2) 12v marine deep cycle batteries 36″ pieces of 2″ angle-iron (2) and 1″ square-tubing (2) from Home Depo (2) caster wheels from Harbor Freight Tools (2) drive wheels from Harbor Freight Tools (36″) 5/8″ threaded rod with several 5/8″ nuts and washers (2) sprockets   For more detail: Arduino R/C Lawnmower ### Plantduino Greenhouse using an Arduino This summer I wanted to combine my two loves of plant science and engineering. Thus I am constructing my very own greenhouse in my backyard. I am an undergrad, and as any former student knows, this means I move around constantly, and I am not always around to take care of my vegetable garden. I love my plants but since I am moving back to school in July, and my family is unreliable, I need a way to make sure that they are taken care of. Enter Arduino! I have constructed an automated watering and temperature system. This includes sensors that will turn the systems on only when needed. This is essential when the ever-changing New England weather demands some intelligence in watering and heating patterns. This is my first project using an Arduino so I am using wonderful articles from MAKE and Instructables as very helpful templates. Already the Instructables, MAKE, and Ladyada blogs have been ridiculously helpful so, worry not biology nerds, you too can show the engineers just how awesome we are! Step 1: Plant Science 101 One facet of this project is to grow my own vegetables and do some scientific experiments. Warning! Science... Sources: Much of this information/ images came from Northeastern Univesity Professor Donald Cheney's Plant Science lecture and the textbook Botany which is linked in the more information section. Greenhouses There are a lot of reasons that I am building a greenhouse. Greenhouses are a really cool way to grow larger and healthier plants faster and artificially extend the growing season. Greenhouses work by using a transparent airtight cover to trap in light and moisture to create a mini- ecosystem that is separate from the environment around the greenhouse. Heat is generated both from the sun’s rays that penetrate the greenhouse but do not escape as well as the trapped heat given off by the plants during their biological processes such as photosynthesis. This results in a very fascinating microclimate. This general idea of a layer of material trapping in heat and increasing the climate below is why sometimes global warming is called “the greenhouse effect” by people who like to oversimplify complicated climate phenomena. Greenhouses can be made of glass or plastic. They create a controlled microclimate that makes experiments and procedures such as grafting or tissue cultures easier to perform. Plant Anatomy and Physiology Vascular Plants (plants that have stems and roots) develop mostly from seeds (a lot of nonvascular plants like mosses and ferns develop from spores which work a little differently).  A seed consists of three types of tissues. The epidermal tissue is the outer layer for protection against the elements. This is usually embodied in the hard seed coat (Think the hard shell around sunflower seeds). The middle layer is called the ground tissue. The ground tissue is where photosynthesis takes place. The vascular tissue is in the very middle of the plant body and is where nutrients and water are conducted and stored.  The roots are the first thing to grow out of the seed. The roots are made up of the same tissues except on the tips of the root is a number of epidermal cells called the root cap that are made to die and be ripped apart as the root burrows through the ground. The roots provide water and nutrients to the plant. Sometimes nutrients can be stored in the roots such as in the case of root vegetables like carrots or turnips. The stem of the plant grows from what is called the coteledon in the seed. Longitudal growth is initiated by the apical meristem which is the primary growth bud. Lateral meristems are responsible for making the plant larger in diameter. There are two structures called the auxillary buds that grow on both sides of the main meristem. In case the axial bud is cut off for some reason the surrounding auxillary buds take over and grow the plant in a new direction. This is how pruners reroute tree growth by cutting off certain branches. NOTE ABOUT WEEDING: This anatomical knowledge is very useful when you are weeding- particularly with grass. Grass is a special category of plants called a monocot. With grass the meristem is on the bottom of the grass blade which is why it grows even if it is cut. So do not just rip out the grass blade but make sure you get at the root system too. Gardening: Plant Nutrients Even though most plants grow well with just old fasion dirt and water there are a lot of other things that they need to grow and produce good fruits. These are broken up into two catagories: Macronutrients which take up more then .5% of a plant's dry mass and Micronutrients which are only present in trace amounts. Some macronutrients that are essential for all plants are Nitrogen, Magnesium, and Sulfur . Sulfur is in proteins and vitamins. Magnesium is in the chloraphyll which are involved in photosynthesis.  All of these are found in the soil. Plants are also about 45% Carbon which comes from the CO2 in the air and 45% Oxygen which comes from water and air. Some micronutrients that plants need are Boron, Chlorine, Manganese, Iron, Copper, and Zinc. All of those are naturally occuring in soil but the most important one is Iron. Iron deficiencies lead to a yellowing of the leaves. Fertilizers usually provide all the minerals needed for a plant to survive. The ratio of Nitrogen, Phosphorus, and Potassium are listed in that order on most fertilizer bags in ration form. For example: 10:20:10= ratio of N:P:K. Photosynthesis Photosynthesis is how plants turn sunlight into sugars. The chemical equation is 6CO2 +6H2O --> sunlight--> C6H12O6 +6O2. Photosynthesis happens in two stages: The dark and the light. First is the light stage where , as the name implies, the sunlight is needed. What happens is electrons are taken from the water molecule and excited in photosystem 2. Then the electrons are transported down what is called the electron transport chain. This chain is nothing more then a series of oxidation and reduction reactions that progressively bring the electrons down into a less excited state. Once the electrons hit photosystem 1 they are excited again and go down another smaller electron transport chain. While the electrons are moving from a more excited state to a less excited state they are also turning a substance called NADP+ (Nicotinamide adenine dinucleotide phosphate) into NADPH. This is used in the dark stage, also known as the calvin cycle. The Calvin Cycle is a series of modifications starting with a reaction with starting material RuBP (Ribulose bisphosphate) and Carbon dioxide using a series of enzymes and redox reactions. It is called a cycle because after the sugar is produced the starting material RuBP is again synthesized. For every round of the carbon cycle there is 1 sugar derivative output and 3ATP (the source of our life's energy). So it takes 6 rounds of the Calvin Cycle to create one glucose molecule. There are a lot of plants that utilize different variations of this cycle. pH Part of my experimentation is to come up with a low tec pH monitor for the soil. pH measures relative acidity by taking the log of the concentration of hydrogen molecules present. pH is measured on a 14 point scale with 1 being very acidic and 14 being very basic. Water is neutral or 7. I measured the acidity of my soil with an at home pH kit that I bough on amazon for $5. The acidity of my soil was about 6.5 which is perfect for the types of plants I am growing (strawberries, peas, basil, broccoli). If there is a problem with your plants and the fertilizer is fine I would suggest checking the pH. Step 2: Build a Garden/ Plant Seeds My garden is in  a raised bed. Raised beds are when you plant your garden in a wooden frame that is above ground level. The nice thing about raised beds is that they are easier to maintain because they can block weeds. Also, you fill it with whatever soil you have instead of the soil that you are blessed to be living on. In the case of my New England house, the infamously horrible soil makes a raised bed the obvious choice. Building a Raised Bed To build a raised bed, dig out a patch of land the size you want your garden to be. Then build a wooden frame that fits the perimeter of your garden. A cool trick is to put some burlap or pebbles on the bottom-most layer of your garden. This way the grass won't grow back up through your garden. Putting down a bottom layer is not necessary and I did not do that in my garden. However, if you have the time, it will save you a lot of work later. I have provided a link to a more step by step format for more specific details. I am doing this because the making of the garden was done the previous year before the greenhouse project. Here is a great website for these steps: http://www.thisoldhouse.com/toh/how-to/intro/0,,1615067,00.html  (this provides instructions for a slightly more elaborate garden than I built). Soil The mixture of soil that I use is a mixture of garden soil and peat moss. I also mix in some miracle grow potting soil. Dump a large lump of each soil into the garden and then mix it up with a large shovel or trowel. After it is mixed, spread it out over your garden evenly. This would be a good time to test the pH of your soil mixture. It should be between 6.5-7.5. You can test this by purchasing a pH soil tester. I bought the Luster Leaf 1612 Rapitest pH Soil Tester from Amazon for about $5. It is not the most precise way to measure pH, but it gives you a nice range. Also, this test has a chart with what to add if your soil is too basic or acidic. Seed Planting Planting seeds is very easy. In all cases, read the back of the packet your seeds came in. There should be a chart with depth and spacing requirements for that particular plant. Absolutely follow those spacing requirements or you are going to have  a lot of trouble down the road. Also, only plant one or two seeds per spot. I made the mistake of planting a bunch of strawberry seeds in one plot (the seeds were so small!!!) and I have about 10 tiny strawberry plants that can't get any bigger because they are entangled in each other and there are not enough resources for them all.  Right after you plant them, make sure the soil is thoroughly moist. Watering is important and for most plants, should be daily. However, the plants are delicate, especially when they are developing stem systems, so water carefully. Step 3: Build a Greenhouse: Step 1 materials -two 10 foot long, ½ inch diameter PVC pipes -three 40 inch long, ½ inch diameter PVC pipes -Roughly twenty-five 6 inch long Zipties -at least 9 by 12 feet painters clear painter’s plastic tarp 3mm thick -Waterproofing Tape -Duct Tape -Industrial VelCro  Tools: Hacksaw Scissors Staple Gun Measuring Tape Step 4: Build a Greenhouse: Step 2 Build the Frame 1) First we measured my garden which is about 1 square meter (tiny I know). Then we used complex integration and approximation to measure the arc length of the frame. Just kidding. We just used a tape measure to approximate and then just used the 10 foot measurement that the PVC came in. 2) We used the hacksaw to cut the ends of the PVC pipe at an angle so that they could be easily stuck into the ground. To do this, start about 3 inches from the bottom of the pipe and cut away from yourself at an angle. 3) Stick both ends of the pipe into the ground at opposite sides so that it makes a nice arc. We placed one arc behind and one in front of the garden. We measured three inches to the left and then another three inches away from the garden corners. 4) Next we placed one 40 inch PVC across the top in the center of the arc. We duct taped the ends to the arc. Major Components in Project 1. perfboard 2. ribbon cable 3. 16 by 2 lcd 4. 10k potentiometer or patience and a resistor 5. female barrel jack 6. 7805 power regulator 7. (2) 10uF capacitors 8. Atmega 328 with arduino bootloader preloaded onto the chip   For more detail: Plantduino Greenhouse using an Arduino ### Motion Triggered Fog Machine using an Arduino Fog machines can be unruly beasts. Especially the non-professional models you buy for halloween. With low duty cycles, causing massive amounts of fog when you don't need it, and no fog when you do. Wouldn't it be nice to have fog only when people come up to your house? Yeah, I thought so too. Here we are going to make a motion triggered fog machine that will turn on when ever someone comes up to your door. Step 1: The Parts Here is what you are going to need to complete this Instructable. Everything linked here is the exact same part I used but you can always substitute comparable parts. *A Relay ($4.99) I used a 12vDC/125vAC relay from RadioShack. (I'm sure you can find a similar one somewhere else for cheaper) You can use what ever you like as long as the reed switch is rated for current up to 120vAC. Although this one says the coil requires 12vdc you should be able to get away with using a 9v battery. http://www.radioshack.com/product/index.jsp?productId=2062482&filterName=Category http://www.newark.com/nte-electronics/r73-5d10-12/power-relay-spdt-12vdc-10a-pc-board/dp/02H7519 (This one should work exactly the same) http://www.newark.com/jsp/search/productdetail.jsp?sku=94C2790 (Your 9v batteries probably wont last long in the 12v relay so you may want to try a 6v one) *A Distance Sensor ($13) This is the HC-SR04 Distance Sensor. We will use it as a digital tripwire. This one is cheaper than the "Ping" sensor and just as easy to use. I will provide the appropriate libraries later on so you don't unnecessarily rip out your hair. http://www.amazon.com/gp/product/B004U8TOE6 *A Transistor ($0.25) You are going to need something to control the 9v power supply. If you decide to use a 5v relay you should still use a transistor to protect your Arduino from the relay. http://www.newark.com/fairchild-semiconductor/2n7052/bipolar-transistor-npn-100v/dp/18C9246?Ntt=2N7052 *A Diode ($0.04) The diode is to keep you from ruining your transistor. Admittedly I didn't use a diode for my first version of this and it worked fine but after reading more it started looking like a better idea. http://www.newark.com/vishay-general-semiconductor/1n4003-e3-54/standard-diode-1a-200v-do-204al/dp/05R5981 *A Resistor ($0.03) The resistor is for a little added protection for your Arduino from the 9v battery and the relay. I used a 220OHM resistor. http://www.newark.com/multicomp/mccfr0w4j0221a50/resistor-carbon-film-220ohm-250mw/dp/58K5029?Ntt=58K5029 *A Battery Connector ($2.99 for 5) You need to connect to your battery some how dont you? http://www.radioshack.com/product/index.jsp?productId=2062219 *A Project Box ($2.69) I used a 2x3'' project box from radio shack but you should probably look elsewhere to get a better price. http://www.radioshack.com/product/index.jsp?productId=2062279 *Shrink Tubing You want your wires to stay neat and tidy dont you? *Copper Clad PerfBoard To put your project on. I cut mine to about 1 1/2'' x 1 3/4'' http://www.radioshack.com/product/index.jsp?productId=2102843&filterName=Price&filterValue=under+%243.99 *Stranded Hookup wire You need stranded wire to go from the remote to the project box. Use stranded wire for this because it can handle the constant movement this wire will endure. It also must be able to handle the AC current. http://www.radioshack.com/product/index.jsp?productId=2049745 *Solid Core Hookup Wire This wire is used for hooking up your circuitry and for connecting to the Arduino. http://www.radioshack.com/product/index.jsp?productId=2036274 *A Fog Machine WITH A REMOTE! (I paid $30 for mine but you may find them at better prices depending what time of year it is) You need to make sure you get a fog machine with a corded remote with a switch or else trying to follow this intractable could get tricky. (if you like tricky then go ahead and get one with a different style remote) We are going to modify the remote so the whole fog machine will not be turned off completely and it will not need to heat up again every time you want fog. (This is the one I bought but they are sold out for now so I have another one listed aswell)http://www.partycity.com/product/fog+machine+400+with+remote.do?sortby=ourPicks&size=all&from=Search&navSet=fog http://www.halloweensuperstore.us/Foggie_400_Watt_Fog_Machine_W_Remote_p/v-915.htm -------TOOLS------ *Soldering Iron Do I really need to go into why you need this? http://www.sparkfun.com/products/9672 *Multi-Meeter To Check continuity and for shorts. http://www.sparkfun.com/products/9141 *A Dremel You are going to use it to cut holes in your project box http://tinyurl.com/43mbpyt And I suppose thats it. Oh and an Arduino! http://www.amazon.com/Arduino-A000046-UNO-board/dp/B004CG4CN4/ref=sr_1_1?ie=UTF8&qid=1320257804&sr=8-1 Step 2: Schematic Follow the schematic and everything will turn out fine ^_^ Step 3: The Relay Our relay is a little different than the one used in the schematic. Our coil pins are right next to each other. Check the data sheet for your specific relay to make sure you are connecting to the right pins. Tack down one pin of the relay then you can continue to solder on the other components. Major Components in ProjectA Relay A Distance Sensor A Transistor An Arduino   For more detail: Motion Triggered Fog Machine using an Arduino ### Turn your Arduino into the best gift of all Please vote for me in the Holiday Gift contest and the Make it Glow contest! First, this started out as a gift, and not an instructable. So please excuse some hand waving here and there as I do not have any pictures of the etching and drilling portions. Second, this is for my dear dear wife. Yep, I got lucky enough to have a wife who likes to solder. We found out this summer when out of the blue she asked me if she could solder my RockSat PC board. We also are huge fans of snow flakes. We even had a snow flake themed wedding! Finally, this our 6th year of marriage, so what could be better than a 6 pointed snow flake! Ok, so get ready, get set, Lets make one together! Step 1: Get ready! Lets gather our supplies. Software: Eagle CAD (if you design your own) Paint.Net (Photoshop or Gimp will work) Arduino IDE Windows Paint Parts Arduino or Arduino clone LED's. I was quite pleased with Microtivity LED's. Resistors 0.1 male headers Supplies Used Avery label paper Copper clad board Water Etchant (I used Ferric Chloride) Tools Soldering iron Clothes iron Something to cut the PCB (I used a bandsaw) Something to drill the PCB (I used a drill press) Scissors Step 2: Design snowflake NOTE!! If you like my original design you can skip this step and go straight to etching. I would like to guilt trip you a tad and remind you that every snow flake is unique. Copying violates that, but if you can live with it, so can I :) Ok, so this process is more something that a graphics artist would be familiar with. For simplicity sake I spliced together a video that shows the process. In short... Export PCB in eagle to clipboard Open paint.net and insert Find and open snowflake in Paint.Net Resize snow flake appropriately Create a new image with 3 layers, the black flake, traces in black, traces in white. Layers should go flake, white traces, black traces. Use a blur function to widen the white layer. Use magic wand to select widened traces. Use paint bucket to thicken up those traces. Save as bitmap! multi.pdf212 KB FlattenedPDF.pdf163 KB ArduFlake.sch74 KB ArduFlake.brd739 KB Major Components in Project Arduino LED’s Resistors 0.1 male headers For more detail: Turn your Arduino into the best gift of all ### Interfacing a Digital Micrometer to a Microcontroller We had a project that required connection to a digital micrometer with a data output jack. The idea was to connect a microcontroller to the micrometer, to read the measurements and make decisions based on the readings. The micrometers that we used are made by Mitutoyo, and have a funky 52 character data stream in reverse bit order. The microcontroller we chose is the Arduino, and we used a 4D systems uVGA-II to take serial output from the Arduino and display it on a VGA monitor. Parts available from Hacktronics. Email me if you want a kit. Step 1: Mitutoyo Cable Schematic This is a diagram showing how the Mitutoyo cable is wired. There is a red "data" button on the micrometer end of the cable that we were not using in this application, so we decided to use it as a "menu" button. Step 2: Connecting the cable to the Arduino The Arduino connects to the Mitutoyo cable with a few components. A 2x5 shrouded header that mates to the female plug on the cable, a PN2222A transistor, and two 10k Ohm resistors. One resistor is used with the PN2222A to protect the micrometer (or caliper) from excessive voltage, the other to bias the "menu" button to +5vdc. Step 3: Reading the Mitutoyo output The heavy lifting part of the code, that reads the data stream, reassembles it in correct order and prints a measurement is as follows:// get data from mic// { digitalWrite(req, HIGH); // generate set request for( i = 0; i < 13; i++ ) { k = 0; for (j = 0; j < 4; j++) { while( digitalRead(clk) == LOW) { } // hold until clock is high while( digitalRead(clk) == HIGH) { } // hold until clock is low bitWrite(k, j, (digitalRead(dat) & 0x1)); // read data bits, and reverse order ) } // extract data mydata[i] = k; //      sign = mydata[4]; //      decimal = mydata[11]; //      units = mydata[12]; } // assemble measurement from bytes char buf[7]; for(int lp=0;lp<6;lp++) buf[lp]=mydata[lp+5]+'0'; buf[6]=0; num=atol(buf); //assembled measurement, no decimal place added // Serial.println(num); Digimatic interface.pdf164 KB Major Components in ProjectMitutoyo 293-335 Coolant Proof LCD Micrometer, Friction Thimble, 0-1″/0-25.4mm Range, 0.001mm/0.00005″ Graduation, +/-0.00005″ Accuracy, SPC Output Mitutoyo 05CZA662, Digimatic Cable, 40″, With Data Switch for Coolant Proof Micrometers µVGA-II(SGC) PICASO QVGA/VGA/WVGA Graphics Controller Arduino Mega or compatible Protoshield recommended 2 PN2222A transistors four 10k Ohm resistors 2×5 shrouded header one momentary pushbutton For more detail: Interfacing a Digital Micrometer to a Microcontroller ### Arduino Motor Shield Tutorial The Arduino Motor Shield allows you to easily control motor direction and speed using an Arduino. By allowing you to simply address Arduino pins, it makes it very simple to incorporate a motor into your project. It also allows you to be able to power a motor with a separate power supply of up to 12v. Best of all, the shield is very easy to find. Aside from being sold a number of places online, they are now stocked by most Radioshack stores. For all of these reasons, the Arduino Motor Shield if a cool little to have in your arsenal for rapid prototyping, and general experimenting. Step 1: Install The pins of the official Arduino motor shield will only align with Arduino Uno Rev. 3. In order to make it work with older versions of the Arduino, you will need to trim a few pins off the motor shield. However, this is not, at all, recommended. Insert the motor shield pins into the socket of the Arduino Uno. Step 2: Shield Features The motor shield has 2 channels, which allows for the control of two DC motors, or 1 stepper motor. It also has 6 headers for the attachment of Tinkerkit inputs, outputs, and communication lines. The use of these pins is somewhat limited, and therefor not covered in this tutorial. With an external power supply, the motor shield can safely supply up to 12V and 2A per motor channel (or 4A to a single channel). There are pins on the Arduino that are always in use by the shield. By addressing these pins you can select a motor channel to initiate, specify the motor direction (polarity), set motor speed (PWM), stop and start the motor, and monitor the current absorption of each channel . The pin breakdown is as follows: Function Channel A Channel B Direction Digital 12 Digital 13 Speed (PWM) Digital 3 Digital 11 Brake Digital 9 Digital 8 Current Sensing Analog 0 Analog 1 For more information about the technical specs, check out the motor shield's official page on the Arduino site. Step 3: Program Plug the Arduino into your computer's USB port and open the Arduino development environment. In order to get the board to do anything, you need to initialize the motor channel by toggling three parameters: First you need to set the motor direction (polarity of the power supply) by setting it either HIGH or LOW. Then you need to disengage the brake pin for the motor channel by setting it to LOW. Finally, to get the motor to start moving, you need to set the speed by sending a PWM command (analogWrite) to the appropriate pin. If you do not do all three of these things, the motor will not turn on. In the following steps are some common examples of common motor setups. Step 4: One Motor To control a motor using the Arduino Motor Shield, first plug the motor's positive (red) wire into Channel A's + terminal on the motor shield, and the motor's ground (black) wire into Channel A's - terminal on the shield. An external power supply is not always necessary, but it drastically improves the motor's performance. It is recommended that you always use one. To connect your external power supply, connect the positive (red) wire from the power supply to the "Vin" terminal, and the ground (black) wire to the "GND" terminal. Finally, upload the code to control the Motor Shield to the Arduino. Here is the code for controlling one motor:   /************************************************************* Motor Shield 1-Channel DC Motor Demo by Randy Sarafan For more information see: http://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/ *************************************************************/ void setup() {      //Setup Channel A   pinMode(12, OUTPUT); //Initiates Motor Channel A pin   pinMode(9, OUTPUT); //Initiates Brake Channel A pin    } void loop(){      //forward @ full speed   digitalWrite(12, HIGH); //Establishes forward direction of Channel A   digitalWrite(9, LOW);   //Disengage the Brake for Channel A   analogWrite(3, 255);   //Spins the motor on Channel A at full speed      delay(3000);      digitalWrite(9, HIGH); //Eengage the Brake for Channel A   delay(1000);      //backward @ half speed   digitalWrite(12, LOW); //Establishes backward direction of Channel A   digitalWrite(9, LOW);   //Disengage the Brake for Channel A   analogWrite(3, 123);   //Spins the motor on Channel A at half speed      delay(3000);      digitalWrite(9, HIGH); //Eengage the Brake for Channel A      delay(1000);    }   Step 5: Two Motors Interfacing with two motors is pretty much the same as interfacing with one motor. Simply plug the motor into Channel B. The only difference code-wise is that you need to engage a second channel to control the second motor. Here is code for controlling two motors:
/*************************************************************
Motor Shield 2-Channel DC Motor Demo
by Randy Sarafan

For more information see:
https://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/

*************************************************************/

void setup() {
  
  //Setup Channel A
  pinMode(12, OUTPUT); //Initiates Motor Channel A pin
  pinMode(9, OUTPUT); //Initiates Brake Channel A pin

  //Setup Channel B
  pinMode(13, OUTPUT); //Initiates Motor Channel A pin
  pinMode(8, OUTPUT);  //Initiates Brake Channel A pin
  
}

void loop(){

  
  //Motor A forward @ full speed
  digitalWrite(12, HIGH); //Establishes forward direction of Channel A
  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  analogWrite(3, 255);   //Spins the motor on Channel A at full speed

  //Motor B backward @ half speed
  digitalWrite(13, LOW);  //Establishes backward direction of Channel B
  digitalWrite(8, LOW);   //Disengage the Brake for Channel B
  analogWrite(11, 123);    //Spins the motor on Channel B at half speed

  
  delay(3000);

  
  digitalWrite(9, HIGH);  //Engage the Brake for Channel A
  digitalWrite(9, HIGH);  //Engage the Brake for Channel B


  delay(1000);
  
  
  //Motor A forward @ full speed
  digitalWrite(12, LOW);  //Establishes backward direction of Channel A
  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  analogWrite(3, 123);    //Spins the motor on Channel A at half speed
  
  //Motor B forward @ full speed
  digitalWrite(13, HIGH); //Establishes forward direction of Channel B
  digitalWrite(8, LOW);   //Disengage the Brake for Channel B
  analogWrite(11, 255);   //Spins the motor on Channel B at full speed
  
  
  delay(3000);
  
  
  digitalWrite(9, HIGH);  //Engage the Brake for Channel A
  digitalWrite(9, HIGH);  //Engage the Brake for Channel B
  
  
  delay(1000);
  
}


Step 6: Stepper Motor



There are a number of different types of stepper motors, but in this tutorial we will specifically be addressing bipolar stepper motors. Bipolar stepper motors typically have 4 pins, which correspond to two coils. To use a stepper, you need to power these two coils in phase with alternating polarity.

To figure out which two pins make up a single coil, insert an LED into any two pins on its socket and rotate the motor shaft. If the LED lights up, you found one coil. The other two pins should make up the other coil.

To make a bipolar motor spin:

 	Power the first coil.
 	Next power the second coil with reverse polarity.
 	Then power the first coil with reverse polarity.
 	Finally, power the second coil.

To reverse the motor direction of a bipolar stepper, simply reverse the polarity of the second coil.

Here is code to make the stepper spin in one direction:
/*************************************************************
Motor Shield Stepper Demo
by Randy Sarafan

For more information see:
https://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/

*************************************************************/

int delaylegnth = 30;

void setup() {
  
  //establish motor direction toggle pins
  pinMode(12, OUTPUT); //CH A -- HIGH = forwards and LOW = backwards???
  pinMode(13, OUTPUT); //CH B -- HIGH = forwards and LOW = backwards???
  
  //establish motor brake pins
  pinMode(9, OUTPUT); //brake (disable) CH A
  pinMode(8, OUTPUT); //brake (disable) CH B


  
  
}

void loop(){
 
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, HIGH);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
  
  delay(delaylegnth);
  
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, LOW);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
  
  delay(delaylegnth);
  
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, LOW);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
  
  delay(delaylegnth);
    
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, HIGH);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
  
  delay(delaylegnth);

}

Here is code to make the stepper spin in the opposite direction:
/*************************************************************
Motor Shield Stepper Demo
by Randy Sarafan

For more information see:
https://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/

*************************************************************/

int delaylegnth = 30;

void setup() {
  
  //establish motor direction toggle pins
  pinMode(12, OUTPUT); //CH A -- HIGH = forwards and LOW = backwards???
  pinMode(13, OUTPUT); //CH B -- HIGH = forwards and LOW = backwards???
  
  //establish motor brake pins
  pinMode(9, OUTPUT); //brake (disable) CH A
  pinMode(8, OUTPUT); //brake (disable) CH B


  
  
}

void loop(){
 
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, HIGH);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
  
  delay(delaylegnth);
  
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, HIGH);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
  
  delay(delaylegnth);
  
  digitalWrite(9, LOW);  //ENABLE CH A
  digitalWrite(8, HIGH); //DISABLE CH B

  digitalWrite(12, LOW);   //Sets direction of CH A
  analogWrite(3, 255);   //Moves CH A
  
  delay(delaylegnth);
    
  digitalWrite(9, HIGH);  //DISABLE CH A
  digitalWrite(8, LOW); //ENABLE CH B

  digitalWrite(13, LOW);   //Sets direction of CH B
  analogWrite(11, 255);   //Moves CH B
  
  delay(delaylegnth);

}

Source : Arduino Motor Shield Tutorial

### Intro to Arduino

An Arduino is an open-source microcontroller development board. In plain English, you can use the Arduino to read sensors and control things like motors and lights. This allows you to upload programs to this board which can then interact with things in the real world. With this, you can make devices which respond and react to the world at large.

For instance, you can read a humidity sensor connected to a potted plant and turn on an automatic watering system if it gets too dry. Or, you can make a stand-alone chat server which is plugged into your internet router. Or, you can have it tweet every time your cat passes through a pet door. Or, you can have it start a pot of coffee when your alarm goes off in the morning.

Basically, if there is something that is in any way controlled by electricity, the Arduino can interface with it in some manner. And even if it is not controlled by electricity, you can probably still use things which are (like motors and electromagnets), to interface with it.

The possibilities of the Arduino are almost limitless. As such, there is no way that one single tutorial can cover everything you might ever need to know. That said, I've done my best to give a basic overview of the fundamental skills and knowledge that you need to get your Arduino up and running. If nothing more, this should function as a springboard into further experimentation and learning.




Step 1: Different types of Arduinos


There are a number of different types of Arduinos to choose from. This is a brief overview of some of the more common types of Arduino boards you may encounter. For a full listing of currently support Arduino boards, check out the Arduino hardware page.

Arduino Uno

The most common version of Arduino is the Arduino Uno. This board is what most people are talking about when they refer to an Arduino. In the next step, there is a more complete rundown of its features.

Arduino NG, Diecimila, and the Duemilanove (Legacy Versions)

Legacy versions of the Arduino Uno product line consist of the NG, Diecimila, and the Duemilanove. The important thing to note about legacy boards is that they lack particular feature of the Arduino Uno. Some key differences:

 	The Diecimila and NG use an ATMEGA168 chips (as opposed to the more powerful ATMEGA328),
 	Both the Diecimila and NG have a jumper next to the USB port and require manual selection of either USB or battery power.
 	The Arduino NG requires that you hold the rest button on the board for a few seconds prior to uploading a program.

Arduino Mega 2560 

The Mega is the second most commonly encountered version of the Arduino family. The Arduino Mega is like the Arduino Uno's beefier older brother. It boasts 256 KB of memory (8 times more than the Uno). It also had 54 input and output pins, 16 of which are analog pins, and 14 of which can do PWM. However, all of the added functionality comes at the cost of a slightly larger circuit board. It may make your project more powerful, but it will also make your project larger. Check out the official Arduino Mega 2560 page for more details.

Arduino Mega ADK

This specialized version of the Arduino is basically an Arduino Mega that has been specifically designed for interfacing with Android smartphones.

Arduino LilyPad

The LilyPad was designed for wearable and e-textile applications. It is intended to be sewn to fabric and connected to other sewable components using conductive thread. This board requires the use of a special FTDI-USB TTL serial programming cable. For more information, the Arduino LilyPad page is a decent starting point.
Step 2: Arduino Uno Features


Some people think of the entire Arduino board as a microcontroller, but this is inaccurate. The Arduino board actually is a specially designed circuit board for programming and prototyping with Atmel microcontrollers.

The nice thing about the Arduino board is that it is relatively cheap, plugs straight into a computer's USB port, and it is dead-simple to setup and use (compared to other development boards).

Some of the key features of the Arduino Uno include:

 	An open source design. The advantage of it being open source is that it has a large community of people using and troubleshooting it. This makes it easy to find someone to help you debug your projects.
 	An easy USB interface . The chip on the board plugs straight into your USB port and registers on your computer as a virtual serial port. This allows you to interface with it as through it were a serial device. The benefit of this setup is that serial communication is an extremely easy (and time-tested) protocol, and USB makes connecting it to modern computers really convenient.
 	Very convenient power management and built-in voltage regulation. You can connect an external power source of up to 12v and it will regulate it to both 5v and 3.3v. It also can be powered directly off of a USB port without any external power.
 	An easy-to-find, and dirt cheap, microcontroller "brain." The ATmega328 chip retails for about $2.88 on Digikey. It has countless number of nice hardware features like timers, PWM pins, external and internal interrupts, and multiple sleep modes. Check out the official datasheet for more details.
 	A 16mhz clock. This makes it not the speediest microcontroller around, but fast enough for most applications.


 	32 KB of flash memory for storing your code.
 	13 digital pins and 6 analog pins. These pins allow you to connect external hardware to your Arduino. These pins are key for extending the computing capability of the Arduino into the real world. Simply plug your devices and sensors into the sockets that correspond to each of these pins and you are good to go.
 	An ICSP connector for bypassing the USB port and interfacing the Arduino directly as a serial device. This port is necessary to re-bootload your chip if it corrupts and can no longer talk to your computer.
 	An on-board LED attached to digital pin 13 for fast an easy debugging of code.
 	And last, but not least, a button to reset the program on the chip.

For a complete rundown of all the Arduino Uno has to offer, be sure to check out the official Arduino page.
Step 3: Arduino IDE







Before you can start doing anything with the Arduino, you need to download and install the Arduino IDE (integrated development environment). From this point on we will be referring to the Arduino IDE as the Arduino Programmer.

The Arduino Programmer is based on the Processing IDE and uses a variation of the C and C++ programming languages.

You can find the most recent version of the Arduino Programmer on this page.
Step 4: Plug it in







Connect the Arduino to your computer's USB port.

Please note that although the Arduino plugs into your computer, it is not a true USB device. The board has a special chip that allows it to show up on your computer as a virtual serial port when it is plugged into a USB port. This is why it is important to plug the board in. When the board is not plugged in, the virtual serial port that the Arduino operates upon will not be present (since all of the information about it lives on the Arduino board).

It is also good to know that every single Arduino has a unique virtual serial port address. This means that every time you plug in a different Arduino board into your computer, you will need to reconfigure the serial port that is in use.

The Arduino Uno requires a male USB A to male USB B cable.
Step 5: Settings







Before you can start doing anything in the Arduino programmer, you must set the board-type and serial port.

To set the board, go to the following:
Tools --> Boards
Select the version of board that you are using. Since I have an Arduino Uno  plugged in, I obviously selected "Arduino Uno."

To set the serial port, go to the following:
Tools --> Serial Port
Select the serial port that looks like:
/dev/tty.usbmodem [random numbers]






Step 6: Run a sketch







Arduino programs are called sketches. The Arduino programmer comes with a ton of example sketches preloaded. This is great because even if you have never programmed anything in your life, you can load one of these sketches and get the Arduino to do something.

To get the LED tied to digital pin 13 to blink on and off, let's load the blink example.

The blink example can be found here:
Files --> Examples --> Basics --> Blink
The blink example basically sets pin D13 as an output and then blinks the test LED on the Arduino board on and off every second.

Once the blink example is open, it can be installed onto the ATMEGA328 chip by pressing the upload button, which looks like an arrow pointing to the right.

Notice that the surface mount status LED connected to pin 13 on the Arduino will start to blink. You can change the rate of the blinking by changing the length of the delay and pressing the upload button again.



For more detail: Intro to Arduino

### Introduction to Arduino

An Arduino is an open-source microcontroller development board. In plain English, you can use the Arduino to read sensors and control things like motors and lights. This allows you to upload programs to this board which can then interact with things in the real world. With this, you can make devices which respond and react to the world at large.

For instance, you can read a humidity sensor connected to a potted plant and turn on an automatic watering system if it gets too dry. Or, you can make a stand-alone chat server which is plugged into your internet router. Or, you can have it tweet every time your cat passes through a pet door. Or, you can have it start a pot of coffee when your alarm goes off in the morning.

Basically, if there is something that is in any way controlled by electricity, the Arduino can interface with it in some manner. And even if it is not controlled by electricity, you can probably still use things which are (like motors and electromagnets), to interface with it.

The possibilities of the Arduino are almost limitless. As such, there is no way that one single tutorial can cover everything you might ever need to know. That said, I've done my best to give a basic overview of the fundamental skills and knowledge that you need to get your Arduino up and running. If nothing more, this should function as a springboard into further experimentation and learning.
Step 1: Different types of Arduinos
There are a number of different types of Arduinos to choose from. This is a brief overview of some of the more common types of Arduino boards you may encounter. For a full listing of currently support Arduino boards, check out the Arduino hardware page.



Arduino Uno

The most common version of Arduino is the Arduino Uno. This board is what most people are talking about when they refer to an Arduino. In the next step, there is a more complete rundown of its features.

Arduino NG, Diecimila, and the Duemilanove (Legacy Versions)

Legacy versions of the Arduino Uno product line consist of the NG, Diecimila, and the Duemilanove. The important thing to note about legacy boards is that they lack particular feature of the Arduino Uno. Some key differences:

 	The Diecimila and NG use an ATMEGA168 chips (as opposed to the more powerful ATMEGA328),
 	Both the Diecimila and NG have a jumper next to the USB port and require manual selection of either USB or battery power.
 	The Arduino NG requires that you hold the rest button on the board for a few seconds prior to uploading a program.

Arduino Mega 2560 

The Mega is the second most commonly encountered version of the Arduino family. The Arduino Mega is like the Arduino Uno's beefier older brother. It boasts 256 KB of memory (8 times more than the Uno). It also had 54 input and output pins, 16 of which are analog pins, and 14 of which can do PWM. However, all of the added functionality comes at the cost of a slightly larger circuit board. It may make your project more powerful, but it will also make your project larger. Check out the official Arduino Mega 2560 page for more details.

Arduino Mega ADK

This specialized version of the Arduino is basically an Arduino Mega that has been specifically designed for interfacing with Android smartphones.

Arduino LilyPad

The LilyPad was designed for wearable and e-textile applications. It is intended to be sewn to fabric and connected to other sewable components using conductive thread. This board requires the use of a special FTDI-USB TTL serial programming cable. For more information, the Arduino LilyPad page is a decent starting point.
Step 2: Arduino Uno Features
Some people think of the entire Arduino board as a microcontroller, but this is inaccurate. The Arduino board actually is a specially designed circuit board for programming and prototyping with Atmel microcontrollers.



The nice thing about the Arduino board is that it is relatively cheap, plugs straight into a computer's USB port, and it is dead-simple to setup and use (compared to other development boards).

Some of the key features of the Arduino Uno include:

 	An open source design. The advantage of it being open source is that it has a large community of people using and troubleshooting it. This makes it easy to find someone to help you debug your projects.
 	An easy USB interface . The chip on the board plugs straight into your USB port and registers on your computer as a virtual serial port. This allows you to interface with it as through it were a serial device. The benefit of this setup is that serial communication is an extremely easy (and time-tested) protocol, and USB makes connecting it to modern computers really convenient.
 	Very convenient power management and built-in voltage regulation. You can connect an external power source of up to 12v and it will regulate it to both 5v and 3.3v. It also can be powered directly off of a USB port without any external power.
 	An easy-to-find, and dirt cheap, microcontroller "brain." The ATmega328 chip retails for about $2.88 on Digikey. It has countless number of nice hardware features like timers, PWM pins, external and internal interrupts, and multiple sleep modes. Check out the official datasheet for more details.
 	A 16mhz clock. This makes it not the speediest microcontroller around, but fast enough for most applications.


 	32 KB of flash memory for storing your code.
 	13 digital pins and 6 analog pins. These pins allow you to connect external hardware to your Arduino. These pins are key for extending the computing capability of the Arduino into the real world. Simply plug your devices and sensors into the sockets that correspond to each of these pins and you are good to go.
 	An ICSP connector for bypassing the USB port and interfacing the Arduino directly as a serial device. This port is necessary to re-bootload your chip if it corrupts and can no longer talk to your computer.
 	An on-board LED attached to digital pin 13 for fast an easy debugging of code.
 	And last, but not least, a button to reset the program on the chip.

For a complete rundown of all the Arduino Uno has to offer, be sure to check out the official Arduino page.
Step 3: Arduino IDE
Before you can start doing anything with the Arduino, you need to download and install the Arduino IDE (integrated development environment). From this point on we will be referring to the Arduino IDE as the Arduino Programmer.

The Arduino Programmer is based on the Processing IDE and uses a variation of the C and C++ programming languages.

You can find the most recent version of the Arduino Programmer on this page.

 
Step 4: Plug it in
Connect the Arduino to your computer's USB port.

Please note that although the Arduino plugs into your computer, it is not a true USB device. The board has a special chip that allows it to show up on your computer as a virtual serial port when it is plugged into a USB port. This is why it is important to plug the board in. When the board is not plugged in, the virtual serial port that the Arduino operates upon will not be present (since all of the information about it lives on the Arduino board).

It is also good to know that every single Arduino has a unique virtual serial port address. This means that every time you plug in a different Arduino board into your computer, you will need to reconfigure the serial port that is in use.

The Arduino Uno requires a male USB A to male USB B cable.
Step 5: Settings
Before you can start doing anything in the Arduino programmer, you must set the board-type and serial port.

To set the board, go to the following:

Tools --> Boards
Select the version of board that you are using. Since I have an Arduino Uno  plugged in, I obviously selected "Arduino Uno."

To set the serial port, go to the following:
Tools --> Serial Port
Select the serial port that looks like:
/dev/tty.usbmodem [random numbers]

Step 6: Run a sketch
Arduino programs are called sketches. The Arduino programmer comes with a ton of example sketches preloaded. This is great because even if you have never programmed anything in your life, you can load one of these sketches and get the Arduino to do something.

To get the LED tied to digital pin 13 to blink on and off, let's load the blink example.

The blink example can be found here:
Files --> Examples --> Basics --> Blink
The blink example basically sets pin D13 as an output and then blinks the test LED on the Arduino board on and off every second.

Once the blink example is open, it can be installed onto the ATMEGA328 chip by pressing the upload button, which looks like an arrow pointing to the right.

Notice that the surface mount status LED connected to pin 13 on the Arduino will start to blink. You can change the rate of the blinking by changing the length of the delay and pressing the upload button again.


Step 7: Serial Monitor







			
				
			
				
				F7GOG5UH142Z8QK.LARGE 
				
			
				
			
				
				FHM9QUHH143LPL3.LARGE 
				
		


The serial monitor allows your computer to connect serially with the Arduino. This is important because it takes data that your Arduino is receiving from sensors and other devices and displays it in real-time on your computer. Having this ability is invaluable to debug your code and understand what number values the chip is actually receiving.

For instance, connect center sweep (middle pin) of a potentiometer to A0, and the outer pins, respectively, to 5v and ground. Next upload the sketch shown below:
File --> Examples --> 1.Basics --> AnalogReadSerial
Click the button to engage the serial monitor which looks like a magnifying glass.  You can now see the numbers being read by the analog pin in the serial monitor. When you turn the knob the numbers will increase and decrease.

The numbers will be between the range of 0 and 1023. The reason for this is that the analog pin is converting a voltage between 0 and 5V to a discreet number.
Step 8: Digital In







The Arduino has two different types of input pins, those being analog and digital.

To begin with, lets look at the digital input pins.

Digital input pins only have two possible states, which are on or off. These two on and off states are also referred to as:

 	HIGH or LOW
 	1 or 0
 	5V or 0V.

This input is commonly used to sense the presence of voltage when a switch is opened or closed.

Digital inputs can also be used as the basis for countless digital communication protocols. By creating a 5V (HIGH) pulse or 0V (LOW) pulse, you can create a binary signal, the basis of all computing. This is useful for talking to digital sensors like a PING ultrasonic sensor, or communicating with other devices.

For a simple example of a digital input in use, connect a switch from digital pin 2 to 5V, a 10K resistor** from digital pin 2 to ground, and run the following code:
File --> Examples --> 2.Digital --> Button
**The 10K resistor is called a pull-down resistor because it connects the digital pin to ground when the switch is not pressed. When the switch is pressed, the electrical connections in the switch has less resistance than the resistor, and the electricity no longer connects to ground. Instead, electricity flows between 5V and the digital pin. This is because electricity always chooses the path of least resistance. To learn more about this, visit the Digital Pins page.



Step 9: Analog In







Aside from the digital input pins, the Arduino also boasts a number of analog input pins.

Analog input pins take an analog signal and perform a 10-bit analog-to-digital (ADC) conversion to turn it into a number between 0 and 1023 (4.9mV steps).

This type of input is good for reading resistive sensors. These are basically sensors which provide resistance to the circuit. They are also good for reading a varying voltage signal between 0 and 5V. This is useful when interfacing with various types of analog circuitry.

If you followed the example in Step 7 for engaging the serial monitor, you have already tried using an analog input pin.



Step 10: Digital Out







A digital out pin can be set to be HIGH (5v) or LOW (0v). This allows you to turn things on and off.

Aside from turning things on and off (and making LEDs blink), this form of output is convenient for a number of applications.

Most notably, it allows you to communicate digitally. By turning the pin on and off rapidly, you are creating binary states (0 and 1), which is recognized by countless other electronic devices as a binary signal. By using this method, you can communicate using a number of different protocols.

Digital communication is an advanced topic, but to get a general idea of what can be done, check out the Interfacing With Hardware page.

If you followed the example in Step 6 for getting an LED to blink, you have already tried using a digital output pin.



Step 11: Analog Out


As mentioned earlier, the Arduino has a number of built in special functions. One of these special functions is pulse width modulation, which is the way an Arduino is able to create an analog-like output.

Pulse width modulation - or PWM for short - works by rapidly turning the PWM pin high (5V) and low (0V) to simulate an analog signal. For instance, if you were to blink an LED on and off rapidly enough (about five milliseconds each), it would seem to average the brightness and only appear to be receiving half the power. Alternately, if it were to blink on for 1 millisecond and then blink off for 9 millisecond, the LED would appear to be 1/10 as bright and only be receiving 1/10 the voltage.

PWM is key for a number of applications including making sound, controlling the brightness of lights, and controlling the speed of motors.

For a more in-depth explanation, check out secrets of PWM page.

To try out PWM yourself, connect an LED and 220 ohm resistor to digital pin 9, in series to ground. Run the following example code:
File --> Examples --> 3.Analog --> Fading

Step 12: Write Your Own Code


To write your own code, you will need to learn some basic programming language syntax. In other words, you have to learn how to properly form the code for the programmer to understand it. You can think of this kind of like understanding grammar and punctuation. You can write an entire book without proper grammar and punctuation, but no one will be abler to understand it, even if it is in English.

Some important things to keep in mind when writing your own code:

 	An Arduino program is called a sketch.


 	All code in an Arduino sketch is processed from top to bottom.


 	Arduino sketches are typically broken into five parts.


 	The sketch usually starts with a header that explains what the sketch is doing, and who wrote it.
 	Next, it usually defines global variables. Often, this is where constant names are given to the different Arduino pins.
 	After the initial variables are set, the Arduino begins the setup routine. In the setup function, we set initial conditions of variables when necessary, and run any preliminary code that we only want to run once. This is where serial communication is initiated, which is required for running the serial monitor.
 	From the setup function, we go to the loop routine. This is the main routine of the sketch. This is not only where your main code goes, but it will be executed over and over, so long as the sketch continues to run.
 	Below the loop routine, there is often other functions listed. These functions are user-defined and only activated when called in the setup and loop routine. When these functions are called, the Arduino processes all of the code in the function from top to bottom and then goes back to the next line in the sketch where it left off when the function was called. Functions are good because they allow you to run standard routines - over and over - without having to write the same lines of code over and over. You can simply call upon a function multiple times, and this will free up memory on the chip because the function routine is only written once. It also makes code easier to read. To learn how to form your own functions, check out this page.


 	All of that said, the only two parts of the sketch which are mandatory are the Setup and Loop routines.


 	Code must be written in the Arduino Language, which is roughly based on C.


 	Almost all statements written in the Arduino language must end with a ;


 	Conditionals (such as if statements and for loops) do not need a ;


 	Conditionals have their own rules and can be found under "Control Structures" on the Arduino Language page


 	Variables are storage compartments for numbers. You can pass values into and out of variables. Variables must be defined (stated in the code) before they can be used and need to have a data type associated with it. To learn some of the basic data types, review the Language Page.

Okay! So let us say we want to write code that reads a photocell connected to pin A0, and use the reading we get from the photocell to control the brightness of an LED connected to pin D9.

First, we want to open the BareMinimum sketch, which can be found at:

File --> Examples --> 1.Basic --> BareMinimum

The BareMinimum Sketch should look like this:
void setup() {
// put your setup code here, to run once:

}

void loop() {
// put your main code here, to run repeatedly:

}
Next, lets put a header on the code, so other people know about what we are making, why, and under what terms:
/*
LED Dimmer
by Genius Arduino Programmer
2012

Controls the brightness of an LED on pin D9
based on the reading of a photocell on pin A0

This code is in the Public Domain
*/

void setup() {
// put your setup code here, to run once:

}

void loop() {
// put your main code here, to run repeatedly:

}
Once that is all squared away, let us define the pin names, and establish variables:
/*
LED Dimmer
by Genius Arduino Programmer
2012

Controls the brightness of an LED on pin D9
based on the reading of a photocell on pin A0

This code is in the Public Domain
*/

// name analog pin 0 a constant name
const int analogInPin = A0;

// name digital pin 9 a constant name
const int LEDPin = 9;

//variable for reading a photocell
int photocell;

void setup() {
// put your setup code here, to run once:

}

void loop() {
// put your main code here, to run repeatedly:

}
Now that variables and pin names are set, let us write the actual code:
/*
LED Dimmer
by Genius Arduino Programmer
2012

Controls the brightness of an LED on pin D9
based on the reading of a photocell on pin A0

This code is in the Public Domain
*/

// name analog pin 0 a constant name
const int analogInPin = A0;

// name digital pin 9 a constant name
const int LEDPin = 9;

//variable for reading a photocell
int photocell;

void setup() {
//nothing here right now

}

void loop() {
//read the analog in pin and set the reading to the photocell variable
photocell = analogRead(analogInPin);

//control the LED pin using the value read by the photocell
analogWrite(LEDPin, photocell);

//pause the code for 1/10 second
//1 second = 1000
delay(100);
}
If we want to see what numbers the analog pin is actually reading from the photocell, we will need to use the serial monitor. Let's activate the serial port and output those numbers:
/*
LED Dimmer
by Genius Arduino Programmer
2012

Controls the brightness of an LED on pin D9
based on the reading of a photocell on pin A0

This code is in the Public Domain
*/

// name analog pin 0 a constant name
const int analogInPin = A0;

// name digital pin 9 a constant name
const int LEDPin = 9;

//variable for reading a photocell
int photocell;

void setup() {
Serial.begin(9600);

}

void loop() {
//read the analog in pin and set the reading to the photocell variable
photocell = analogRead(analogInPin);

//print the photocell value into the serial monitor
Serial.print("Photocell = " );
Serial.println(photocell);

//control the LED pin using the value read by the photocell
analogWrite(LEDPin, photocell);

//pause the code for 1/10 second
//1 second = 1000
delay(100);
}
For more information about formulating code, visit the Foundations Page. If you need help with the Arduino Language, then the Language Page is the place for you.

Also, the Example Sketch Page is a great place to start messing around with code. Don't be afraid to change things and experiment.
Step 13: Shields


Shields are expansion apdapter boards that plug in over top of the Arduino Uno and gives it special functions.

Since the Arduino is open hardware, anyone who has the inclination is free to make an Arduino shield for whatever task they wish to accomplish. On account of this, there are countless number of Arduino shields out in the wild. You can find an ever-growing list of Arduino shields in the Arduino playground. Keep in mind that there will be more shield in existence than you will find on listed on that page (as always, Google is your friend).

To give you a small sense of the capabilities of Arduino shields, check out these tutorials on how to use three official Arduino shields:

 	Wireless SD Shield
 	Ethernet Shield
 	Motor Shield

Step 14: Building an External Circuit







As your projects get more complex, you will want to build your own circuits to interfacewith  the Arduino. While you won't learn electronics overnight, the internet is an unbelievable resource for electronic knowledge and circuit diagrams.

To get started with electronics, visit the Basic Electronics Instructable.



Step 15: Going Beyond


From here, the only thing left to do is make some projects. There are countless awesome Arduino resources and tutorials online.

Be sure to check out the Official Arduino Page and Forum. The information listed here is invaluable and very complete. This is great resource for debugging projects.

If you need inspiration for some fun beginner projects, check out the 20 Unbelievable Arduino Projects guide.

For a vast listing or Arduino project, the Arduino Channel is a great place to start.

That's it. You're on your own.

Good luck and happy hacking!






For more detail: Introduction to Arduino

### Carduino- A simple Arduino robotics platform with its own library

This is, as the title says, an Arduino-based robotics platform, with its own library. The "standard" model comes with two back motors, two omni-wheels in the front, and a distance sensor mounted on the front. It also has breadboard space on top for adding whatever you want. It is intended to be autonomous, but one can make it remote controlled if they really want to. This instructable will teach how to build it, how to use the library, and it will include some sample projects too.

What is the library?
The library will make controlling your Carduino a little easier. This project is intended for those with little programming experience, and just want to get started with simple robotics. You don't even need to know how to use a motor shield to use it. It's as simple as saying "turn right for 1 second" or "go forward for 3 seconds, and then speed up." The library also contains example code to help you get started.

What exactly is in the library?
Step 13 contains all the important information regarding the library, and all example projects.

Why would you ever want a wooden chassis, and is it fine if I build mine differently?
Of course you can build yours differently! The library will work almost no matter what you do, so you can change the design to whatever you'd like. The only reason why I used a wooden chassis was because it was the only material for this I had, so you can feel free to use whatever else you'd like.

What can this robot do?
It can do just about anything. Even just with the parts on the standard model, there is infinite possibilities. With Arduino and the Carduino library, programming it is incredibly easy, and it can do anything you can imagine. The extra breadboard space allows you to add a variety of sensors, to make it do just what you want.

How much does it cost?
Roughly one hundred dollars, if you're starting out with nothing.  I had almost all the parts before I started, so the price was only about thirty dollars for me. Most all of the parts are very common, and you should have many of them.

Here is a terrible video of it in action:
(due to some issues with the distance sensor, I could not get object-avoidance in the video, but, I assure you, it works)
Step 1: Supplies
1 Arduino Uno http://www.sparkfun.com/products/11021
1 Breadboard http://www.sparkfun.com/products/9567
1 Arduino and breadboard holder http://www.sparkfun.com/products/10059
1 Sharp long range proximity sensor http://www.sparkfun.com/products/8958
2 Micro metal gear motors http://www.sparkfun.com/products/8910
1 Pair of 49x19mm wheels http://www.sparkfun.com/products/8899
1 Pair of motor mounting brackets http://www.sparkfun.com/products/8896
1 Pair of omni-wheels http://www.sparkfun.com/products/320
1 Arduino motor shield http://www.amazon.com/gp/product/B007BHKRVW/ref=oh_details_o00_s00_i00
1 15x10.75cm piece of wood      (check size with the Arduino and breadboard holder)
12 #4 x 3/4" Wood screws
1 9v battery
Some Wire


Step 2: Set up various things
Here some things you need to do before you begin:
Cut wood to correct size
Make Omni-wheels (instructions came with them)
Attach wheels to motors
Insert Arduino and breadboard into the holder.

Step 3: Mount Omni-wheels
Position both of them 0.5" from the front, and 0.5" from either side. Mark holes for mounting, then drill them. Use your #4 x 3/4" wood screws to mount them.

 

For more detail: Carduino- A simple Arduino robotics platform with its own library

### Self-Watering Plant using an Arduino

Plants liven up any space by adding a sense of airiness and life. That is - of course - when you don't forget to water them, and they shrivel up and die. I am very bad at remembering to water plants. That is why I built this self-watering plant to do it for me. Using a soil sensor, and an Arduino-controlled water pump, I have created a system that will never forget to do it. Instead of remembering to water my plants when the soil goes dry, I only have to remember to once and a while refill the water reservoir. In this way, I have decreased my obligation to these plants and put it off to a much later date. Perhaps further iterations of this device can be connected to a rain barrel so that I won't even have to worry about refilling my reservoir, and the entire system can be fully automated.


Step 1: Go get stuff
You will need:

(x1) 8" x 6" x 3" project enclosure (Radioshack #270-1809)
(x1) Multipurpose PC Board (Radioshack #276-150)
(x1) 5VDC SPDT micro relay (Radioshack #275-240)
(x1) 9V battery connector (Radioshack #270-324)
(x1) 9V battery holder (Radioshack #270-326)
(x1) 9V battery (Radioshack #23-853)
(x1) SPST micromini toggle switch (Radioshack #275-624)
(x1) 10K resistor (Radioshack #271-1126)
(x1) Size M coaxial DC power plug (Radioshack #274-1569)
(x1) Red and black 22AWG wire (Radioshack #278-1221)
(x1) 12AWG black wire (Radioshack #278-556)
(x1) Non-submersible electric water pump (via Amazon)
(x1) Water storage container with lid
(x2) 8-32 x 2.5" nuts and bolts
(x8) 4-40 x 1" nuts and bolts
(x1) 4-40 x 3/8" nut and bolt
(x4) 1/4" spacers
(x1) Wire nut
(x2) 3' - 5' plastic tubing
(x1) #8 Terminal Ring
(x1) House plant to water
Step 2: Trim the pump
Trim away any unnecessary plastic mounting brackets from the front of the pump that may prevent it from being flush with the case (nozzles and corresponding hardware not included).
Step 3: Drill or cut
Line up the water pump with the base of one of the 6" x 3" sides of the case.

Drill or cut a hole large enough to fit the nozzles through.
Step 4: Mark
Position the water pump, Arduino, 9V battery holder, and circuit board in the bottom of the case.

Make marks in each of their mounting holes.

The pump will probably not have a mounting hole, so just make a mark on each side such that it can easily be zip tied down.
Step 5: Drill
Drill all of the holes that you have just marked with a 1/8" drill bit.

You may need to widen the zip tie holes to 3/16".
Step 6: Drill more holes
On the 6" x 3" side of the case that has yet to be drilled, drill two centered 1/4" holes about 1-1/2" apart.
Step 7: Fasten
Zip tie the water pump securely into the case.

Major Components in Project(x1) 8″ x 6″ x 3″ project enclosure (Radioshack #270-1809)
(x1) Multipurpose PC Board (Radioshack #276-150)
(x1) 5VDC SPDT micro relay (Radioshack #275-240)
(x1) 9V battery connector (Radioshack #270-324)
(x1) 9V battery holder (Radioshack #270-326)
(x1) 9V battery (Radioshack #23-853)
(x1) SPST micromini toggle switch (Radioshack #275-624)
(x1) 10K resistor (Radioshack #271-1126)
(x1) Size M coaxial DC power plug (Radioshack #274-1569)
(x1) Red and black 22AWG wire (Radioshack #278-1221)
(x1) 12AWG black wire (Radioshack #278-556)
(x1) Non-submersible electric water pump (via Amazon)
(x1) Water storage container with lid
(x2) 8-32 x 2.5″ nuts and bolts
(x8) 4-40 x 1″ nuts and bolts
(x1) 4-40 x 3/8″ nut and bolt
(x4) 1/4″ spacers
(x1) Wire nut
(x2) 3′ – 5′ plastic tubing
(x1) #8 Terminal Ring
(x1) House plant to water

 

For more detail: Self-Watering Plant using an Arduino

### Twitter Controlled Pet Feeder using an Arduino

A great project for busy pet owners.  This Twitter-Controlled pet feeder automatically dispenses food in response to activity on your Twitter account.  The project is controlled by an Arduino and uses the Arduino Ethernet shield to receive data from Twitter.  I hacked this automatic Pet Feeder from Amazon to build this project, but you could easily modify your own motorized feeder to work.



Parts List:

(1x) Automatic Pet Feeder Amazon
(2x) 10K Ohm 1/4-Watt Carbon Film Resistor (1 package) Radioshack #271-1335
(1x) Arduino Ethernet Shield w/o PoE Module Radioshack #276-130
(4x) CdS Photoresistors 5 pack (1 package) Radioshack #276-1657
(1x) Grid-Style PC Board Radioshack #276-147
(2x) White Super-bright LED Indicator Radioshack #55050633
(1x) Male Header Pins 40 Position Jameco #160882
(4x) "D" Alkaline Batteries (1 package) Radioshack #23-865
(2x) 4.7K Ohm 1/4-Watt Carbon Film Resistor (1 package)
(2x) current limiting resistors, see the sample calculation below

from the specs of the LEDs I used:
"Continuous forward current: 30mA"
"Forward voltage: 3.6V"

using the following relationship:
V(volts) = I(amps) * R(ohms)
rearranged to:
R = V / I

we can calculate the resistance as follows:
voltage across resistor = 5V - 3.6V = 14V
1.4V / 0.03A = 47ohms

I used 100 ohm 1/4W 5% Carbon Film Resistors Radioshack #271-1311 so that the LEDs wouldn't be operating at their maximum ratings.  Check the datasheet of the LEDs you use to calculate these values.

Additional Materials:
drill
Solder Radioshack #64-013
22 Gauge Wire Radioshack #278-1224
Step 1: Open pet feeder
Unscrew 8 screws from the base of the pet feeder and carefully lift the bottom panel of the feeder open.  There are some wires which permanently attach the bottom panel to the body, be careful not to put too much strain on them.
Step 2: Unscrew pcb
Remove six small screws from control pcb.  One of the screws is hidden under a small pcb on top of the main pcb.  Once all the screws are removed, the pcbs should easily lift off the plastic enclosure.
Step 3: Schematic
The schematic is shown above, I've also attached a fritzing document for your reference.  This feeder is programmed to manually dispense food when the "set" and "volume" buttons are depressed at the same time.  By wiring light sensitive resistors across these buttons we can simulate the mechanical pushbutton action as follows:

When the photoresistors are not exposed to light their resistance will be very high and the processor in the feeder will think that the buttons aren't being pressed.  By telling the arduino to light up some LEDs near the photoresistors, the resistance will decrease low enough for the feeder's processor to think that the buttons are being depressed.
I've also attached two pushbuttons in the circuit so that I could manually turn the LEDs on for troubleshooting purposes.  These buttons are not essential to the project (but useful).
I also be diverted some power from the feeder's four D batteries to power the arduino.


twitter feeder.fz243 KB


Step 4: Drill holes in pcb
Locate the "volume" and "set" buttons on the pcb (compare with the labels on the outside of the feeder enclosure).  Remove the tape and small circular metal covering from these buttons (figure 2).  You will see two exposed traces on each button.  Each outer trace has two holes drilled in it (see figure 1).  Drill two additional holes in the pcb, one in each of the inner circular button traces (figure 3).
Step 5: Solder wires to pcb
Solder four wires to the control pcb so each of the four exposed button traces has one wire electrically connected to it.

Major Components in Project(1x) Automatic Pet Feeder Amazon
(2x) 10K Ohm 1/4-Watt Carbon Film Resistor (1 package) Radioshack #271-1335
(1x) Arduino Ethernet Shield w/o PoE Module Radioshack #276-130
(4x) CdS Photoresistors 5 pack (1 package) Radioshack #276-1657
(1x) Grid-Style PC Board Radioshack #276-147
(2x) White Super-bright LED Indicator Radioshack #55050633
(1x) Male Header Pins 40 Position Jameco #160882
(4x) “D” Alkaline Batteries (1 package) Radioshack #23-865
(2x) 4.7K Ohm 1/4-Watt Carbon Film Resistor (1 package)
(2x) current limiting resistors, see the sample calculation below

from the specs of the LEDs I used:
“Continuous forward current: 30mA”
“Forward voltage: 3.6V”

using the following relationship:
V(volts) = I(amps) * R(ohms)
rearranged to:
R = V / I

we can calculate the resistance as follows:
voltage across resistor = 5V – 3.6V = 14V
1.4V / 0.03A = 47ohms

I used 100 ohm 1/4W 5% Carbon Film Resistors Radioshack #271-1311 so that the LEDs wouldn’t be operating at their maximum ratings.  Check the datasheet of the LEDs you use to calculate these values.

 

For more detail: Twitter Controlled Pet Feeder using an Arduino

### Reginald: a UDP surveillance bot; control via the Internet using Arduino

Reginald started from the simple, yet bold idea to control a bot from anywhere in the world with a live video feed. What I wasn't expecting was for Reginald to develop into an involved, feature rich project. With my work and money, I was able to complete a project exactly to my satisfaction and more. This tutorial chronicles the entire project: from top to bottom.



Before I started my project, I had several goals that I wanted to see in Reginald:

 	Have one battery power absolutely everything (redundant technologies cause complications)
 	Implement a method where the video feed and the controls work through the same technology. This simplifies Reginald for the end user. The user will only need to connect to Reginald in one way and not two separate ways which is what I often see in most projects that implement video feeds (Again, redundant complications; saturate two separate links to one).
 	For the user to be able to interact with Reginald in real time.
 	Encrypt Reginald so no one can just simply type in the IP Address and access him
 	Have one single input/output board to saturate all the circuitry. This way: Reginald is muchcleaner in appearance, and will create a sturdy electric foundation to connect my peripherals to.
 	Have a live console bringing information to the user.
 	Code a GUI that looks good, can be controlled via key commands and is feature rich.
 	Simplicity in end user experience; so any layman could operate.
 	Most importantly: set up the network connection to allow access from anywhere.

What's the point of this?

Reginald is a very useful project for the end user. If a user is interested in checking on his or her house from school or work, that person would be able to do so from an infinite amount of angles. The user can move around the house wirelessly and greet others. If you have children you can let them know you always have your eye on them!

More importantly, the biggest use featured in this Instructable is the implementation of the UDP technology. If someone can interface any physical and/or electrical object to an Arduino, that person could be able to control this object wirelessly in real time from anywhere. This is very useful. Reginald is an example application for UDP, a highly under utilized technology among projects.

What will this Instructable provide?

This Instructable will introduce Reginald as a whole and then go into a breakdown of every component in detail.

Performing all the necessary networking to accomplish this can be very complex and involved, however this method of communication is clarified and explored through this Instructable. I saturated approximately a solid month of research and troubleshooting into a simple guide; I provide troubleshooting guidance and example tests along the way.
Step 1: Introduction/Prerequisites
This is a large project; so I believe it will provide the best clarity to break down this guide first with a large perspective and afterwards exploring each individual component of the project separately.

Instructable Breakdown:

 	First, I will discuss the prerequisite knowledge that you should have to first attempt to tackle this project. A beginner will likely have trouble following the guide.
 	Secondly, I will show a "macro" view of the project and discuss it generically so the reader understands my approach to accomplish Reginald. If the reader understands my process, it'll be easier for the reader to pick and choose components from my process that he/she desires in his/her own project. I don't assume that everyone would want to clone their own Reginald; but to customize the project with their own wants.
 	Thirdly, I will give the parts list divided among the different components of the project.
 	It is at this point that I will go into detail of each part of Reginald.

Prerequisite Knowledge that I will assume you already know:

This will save time of myself and others who are already very familiar with these topics. If I was to cater to the absolute beginner here, this Instructable would be easily, magnitudes larger. Someone who already understands the topics would have difficulty following the guide due to the size of it.

However, an absolute beginner can familiarize oneself with the given topics to research before attempting Reginald. If an individual understands these topics, that person will be able to understand the project.

Therefore, this Instructable caters to all. Given one is willing to learn.

The topics are:

 	A moderate understanding of networking

 	Internal and External IP addresses; Subnet masks; DHCP; UDP technology

 	http://www.answerbag.com/q_view/9834
 	http://en.wikipedia.org/wiki/User_Datagram_Protocol (Be sure to read the comparison between UDP and TCP)
 	http://www.ni.com/white-paper/6723/en


 	How to configure your primary router: setting static IPs, Port Forwarding
 	Basic understanding of at least what DD-WRT is


 	Basics of Arduino and Processing programming (Although not quite necessary since I'm just giving you the code)
 	Electrical Components (I will be giving schematics and guidelines, but I can't hold your hand to build the board; understand the following and you'll be fine)

 	Understanding very simple schematics
 	The practical use of transistors, capacitors, resistors, voltage regulators, DC motors, servos

 	http://www.physlink.com/education/askexperts/ae430.cfm
 	http://en.wikipedia.org/wiki/Pull-up_resistor
 	http://www.sparkfun.com/tutorials/57




 	Basics of soldering and debugging with a multimeter

 	http://www.sparkfun.com/tutorials/202
 	http://www.instructables.com/id/How-to-solder/


 	An understanding of how voltage and current work

 	http://science.howstuffworks.com/environmental/energy/question501.htm



Helpful Notes:

In this tutorial, I will be showing schematics and diagrams of the custom PCB I built to saturate all the circuits; but showing how to build the board step by step would be a fairly large instructable in itself. If you understand the above, you won't have a problem following the information that I provide.

The networking section is by far the most important, especially if you're interested in communicating with your project via the Internet; and even more so if you happen to have AT&T as your ISP. You'll see later.
Step 2: Macro view of the project
Here I will discuss the overall project so the reader understands my intentions in the design. As mentioned earlier: if the reader understands my intentions, then it will be a trivial task for the reader to choose the parts of my design he/she wishes for his/her own project.

The Macro View of Reginald

The main picture is from a large point of view of how Reginald works.

The grey box in the bottom left corner is the physical robot, located at home.
The grey box in the bottom right corner is the client program. It is a GUI that receives commands from the user and transmits the commands to Reginald. The GUI is run on a computer.

The Networking

Notice that there are two separate ways to connect to Reginald. This is because it is useful to have two different ways to make the connection dependent on the circumstances.

 	There is a direct connection from the GUI (Client) to Reginald (Server). This is under the circumstance that Reginald is very close to the User. If the User is using the GUI (Client) on a laptop, then Reginald can create its own wireless "hotspot" if you will (however it's not an actual hotspot because the user cannot connect to the internet). The user at this point can connect directly to Reginald and control him.
 	The other method of connection is much more complex, and where the knowledge of Networking is critical. For simplicity, lets assume the user is on a computer at school while Reginald is at home. Reginald at this point is utilizing the Wireless Bridge shown and is connected as a wireless device on the home network. Reginald has a specific IP address and Port within the network. The Primary Home Router is configured with a Port Forward exception that a UDP request on the corresponding Port of Reginald goes to said Reginald. The user could run the GUI (Client) program on the computer at school. At this point, the user types in the external IP address of the Primary Home Router and the Port Reginald is located into the program. The user then sends a command by interacting with the interface. The command gets sent through the internet and to the Primary Home Router. The Primary Home Router sees the specified Port and, being configured properly, sends the command wireless to the Wireless Bridge on Reginald. The Wireless Bridge hands the command to the Arduino and Reginald responds appropriately.

It's worth mentioning that the latter connection method is optional. The reader may decide to go with a simpler approach and only use the direct connection. The obvious downside to this is that the user will not be able to control Reginald from anywhere, only when Reginald's hotspot is within range of the user will the user be able to control Reginald.
Don't the Routers complicate the project and make it bulky?

I realize that using the routers on Reginald is a bulky at best; as an alternative, I could have used a wireless surveillance camera connected directly to the Primary Home Router and used a wifi sheild for the Arduino to also connect to the Primary Home Router. This would have cut out the "middle man" (Routers) of the project out and I could have made Reginald significantly smaller; in addition to this, utilizing the routers in my design is harder to implement.

Why did I use Routers?

The reason behind the routers is that one of my goals is simplicity in user experience. If the user wants to control Reginald, at home, from school, and decides to take Reginald to his/her friends house to show off: the user simply unplugs the camera, power and Arduino from the Wireless Bridge and plugs it into the Netgear Router. The user connects to the Netgear router and that's it! If I were to implement a wireless network camera and wifi shield in my design, the user would perform the following to accomplish the same scenario:  bring Reginald to friend's house; get all the networking information of the home network from friend; configure the camera to the network; access Reginald's code; change web configuration and upload new sketch to board; then connect.

Be mindful when I refer to the Routers:

This project actually uses three Routers. The first one I will refer to as the "Netgear" router located on Reginald. I won't talk about this very much, it's only used for the direct connection to Reginald if you brought him outside the home network. A simple setup.

The second and third routers talk to each other. They are what set up the communication to anywhere. I'll refer to one Router as a "Wireless Bridge" which is located on Reginald. I call it a Wireless Bridge because it is a client to the third Router: the "Primary Home Router", I may also call the third Router an "Access Point" (AP). The Primary Home Router is the Router connected to your modem at home which brings a wifi internet connection to your home. The Wireless Bridge is a client that serves the internet from the Primary Home Router to devices connect to itself (in this case: Reginald).

Later I'll be talking about how the Wireless Bridge works.

Interesting Notes:

Also notice that the camera does not interact with the Arduino at all. The camera is powered with the PCB board and connected to the Wireless Bridge or Netgear Router. The user can access the camera from anywhere at that point.

It is also important to recognize that the only thing the Battery is connected to is the PCB board. This is because the PCB distributes the power to everything else. Not all of the components require equal amounts of power. The Routers both require 12 volts; the Arduino and Peripherals all require 7 volts; and the Camera requires 5 volts. The PCB board needs to accommodate all these parts.

Major Components in ProjectChassis and misc. mechanics:

 	(1) 3/8″ Precision Shaft 2.00″  $5.25 each http://www.servocity.com/html/3_8__precision_shafting.html
 	(2) 3/8″ Precision Shaft 1.00″  $4.80 each http://www.servocity.com/html/3_8__precision_shafting.html
 	(3) 3/8″ Ultra Precision Ball Bearings $7.99 each http://www.servocity.com/html/ball_bearings.html
 	(2) 3/8″ 0.770″ Clamping Hubs $7.99 each  http://www.servocity.com/html/0_770__clamping_hubs.html
 	(2) 3/8″ 48 tooth Plain Bore Sprockets $3.40 each http://www.servocity.com/html/plain_bore_sprockets___1227_.html
 	(2) 3/8″ 20 tooth Plain Bore Sprockets $1.92 each http://www.servocity.com/html/plain_bore_sprockets___1227_.html
 	(3) 1 foot of Plastic Chain 0.1277 $5.95 each http://www.servocity.com/html/chain.html
 	(2) 15″ x 15″ x 0.25″ ABS Plastic $9.99 each http://www.servocity.com/html/abs_sheets.html
 	(4) #10 Nylon Spacer 0.375″ Diameter 0.5″ $0.22 each http://www.servocity.com/html/_10_nylon_spacer.html
 	(1) Hitec Servo Shaft Adapter to 3/8″ bore $12.99 each http://www.servocity.com/html/servo_to_shaft_couplers.html
 	(2) Hitec DDT500 Direct Drive Tilts $24.99 each http://www.servocity.com/html/ddt500_direct_drive_tilt.html
 	(2) Vertical Aluminum Mounts $6.99 each http://www.servocity.com/html/vertical_aluminum_mount.html
 	(3) Hitec HS-422 Servo $9.99 each http://www.servocity.com/html/hs-422_super_sport_.html

Drivetrain:

 	(2) Hitec HSR-1425CR Servos $16.99 http://www.servocity.com/html/hsr-1425cr__continuous_rotatio.html
 	(2) ABS Wheels 6.00″ $5.48 each http://www.servocity.com/html/abs_wheels.html
 	(2) 0.770″ Servo Hubs $4.99 each http://www.servocity.com/html/servo_hub.html
 	(2) Vertical Servo Tray $5.95 each http://www.servocity.com/html/vertical_servo_tray.html
 	(2) Caster Wheels $9.99 each (Tractor Supply Co.)

Flashlight:

 	(1) Luxeon Rebel Triple-LED Narrow Lens $5.95 each https://www.sparkfun.com/products/9733?
 	(3) LEDs – Infared 950nm $0.95 each https://www.sparkfun.com/products/9349
 	ABS sheet (included with the “Chassis and misc. mechanics” category)
 	Generic single thread speaker wire (included with the “Electronics” category)
 	(1) B.E.C. or Molex connector (included with the “Electronics” category)
 	(1) Black Poster Board $1.95 each (Walmart)

Electronics (Arduino and Custom PCB):

 	(1) Arduino Uno R3 $21.95 each http://www.amazon.com/Arduino-Rev-3-Uno-R3/dp/B006H06TVG/ref=sr_1_1?ie=UTF8&qid=1346284039&sr=8-1&keywords=Arduino+uno
 	(1) Arduino Ethernet Shield R3 $38.02 each http://www.amazon.com/Arduino-Ethernet-Shield-R3/dp/B006UT97FE/ref=sr_1_1?s=electronics&ie=UTF8&qid=1346284092&sr=1-1&keywords=arduino+ethernet+shield
 	Generic single thread speaker wire ~$5.95 (Radioshack)
 	(8) Male B.E.C Connectors $0.59 each http://www.servocity.com/html/b_e_c__connectors.html
 	(1) 7812 Voltage Regulator ~$1.95 each (Radioshack)
 	(1) 7805 Voltage Regulator ~$1.95 each (Radioshack)
 	(2) 100uF Capacitors ~$0.95 each (Radioshack)
 	(1) 220uF Capacitors ~$0.95 each (Radioshack)
 	Assorted Resistors pack of 100 ~$5.95 each (Radioshack)
 	(3) NPN Transistors ~$1.50 for all (Radioshack)
 	(5) Solderless Headers – 10 pin Straight $1.50 each https://www.sparkfun.com/products/10527
 	(1) TRA Connector(Male/Female) $5.09 each http://www.amazon.com/TRA-Connector-Male-Female-1/dp/B000RAZJD6/ref=wl_it_dp_o_pC_S_nC?ie=UTF8&colid=YA437ZEE0SWB&coliid=I3HG74IVJG9L3W
 	(1) 11.1 V 5000mAh Li-Po Tenergy $49.99 each http://www.amazon.com/5000mAh-Li-Polymer-Battery-Traxxas-Connector/dp/B0036W8JZ2/ref=wl_it_dp_o_pdT1_nS_nC?ie=UTF8&colid=YA437ZEE0SWB&coliid=I265V05YNLE8C7

Surveillance Cameras:

 	(1) Trendnet TV-501P POE Network Camera $105.00 each (No longer sold)
 	(1) Agasio A502W Wireless IP Camera $64.99 each (Optional: used for viewing Reginald from 3rd perspective) http://www.amazon.com/Agasio-A502W-Auto-Brightness-Adjustment-Nightvision/dp/B005A0NIRW/ref=wl_it_dp_o_pC_nS_nC?ie=UTF8&colid=YA437ZEE0SWB&coliid=I23I1QUF44EF7B

Ballistics:

 	(2) Dream Cheeky 908 Thunder Missile Launcher $22.05 each http://www.amazon.com/Dream-Cheeky-908-Electronic-Reference/dp/B004SAYO46/ref=wl_it_dp_o_pdT1_S_nC?ie=UTF8&colid=YA437ZEE0SWB&coliid=I3F59SJLY6CSN3

Network:

 	(2) Routers $??.??

This list doesn’t include obvious items; these include but are not limited to: Heat Shrink Wrap, Ethernet Cables, Bolts and Nuts etc.

 

For more detail: Reginald: a UDP surveillance bot; control via the Internet using Arduino

### Audio Output using an Arduino

Generate sound or output analog voltages with an Arduino. This Instructable will show you how to set up a really basic digital to analog converter so you can start generating analog waves of all shapes and sizes from a few digital pins on an Arduino. (This article is a companion to another Instructable I've written about sending audio into an Arduino, find that here)

Some ideas that come to mind:

sample based instrument- store samples on the Arduino or on an SD card and trigger playback with buttons or other types of controls. Check out my Arduino drum sampler for an idea of how to get started.
digital synthesizer- make saw, sine, triangle, pulse, or arbitrary waveshapes- check out my waveform generator to get started
MIDI to control voltage module/ MIDI synthesizer- receive MIDI messages and translate them into a voltage so you can control an analog synthesizer with MIDI, or use the MIDI data to output audio of a certain frequency
analog output- you may find yourself needing to generate analog voltages from your Arduino at some point, maybe to communicate with an analog device
effects box/digital signal processing- in combination with a microphone/audio input you can perform all kinds of digital signal manipulations and send the processed audio out to speakers. Check out my vocal effects box for an example.
audio playback device- make your own ipod. With the addition of an SD shield you could create your own Arduino mp3 player (check out the wave shield documentation for an idea of how to get started with the code). The circuits and code provided here are compatible with SD shields that communicate via SPI.

Feel free to use any of the info here to put together an amazing project for the DIY Audio Contest! We're giving away an HDTV, some DSLR cameras, and tons of other great stuff! The contest closes Nov 26.

PartsList:

(x9) 1/4 Watt 20kOhm Resistors Digikey 0KQBK-ND
(x7) 1/4 Watt 10kOhm Resistors Digiikey CF14JT10K0CT-ND
(x2) TS922IN Digikey 497-3049-5-ND I like these because they can be powered off the Arduino's 5V supply (one 924 works too, but they don't seem to be available on digikey at the moment)
(x1) 10kOhm potentiometer linear Digikey 987-1308-ND
(x1) 0.01uF capacitor Digikey 445-5252-ND
(x1) 220uF capacitor Digikey P5183-ND
(x1) 0.1uF capacitor Digikey 445-5303-ND
(x1) 1/4 Watt 3kOhm Resistor Digikey CF14JT3K00CT-ND
(x1) 1/4 Watt 10Ohm Resistor Digikey CF14JT10R0CT-ND
(x1) Arduino Uno Amazon

Additional Materials:

(1x) usb cable Amazon
(1x) breadboard (this one comes with jumper wires) Amazon
(1x) jumper wires Amazon
Step 1: Digital to Analog Converter







 

DAC stands for "digital to analog converter." Since the Arduino does not have analog out capabilities, we need to use a DAC to convert digital data (numbers/ints/bytes) to an analog waveform (oscillating voltage). A simple, easy to program, and cheap way to do this is to use something called an R2R resistor ladder. Essentially, it takes incoming digital bits (0V and 5V from Arduino), weights them, and sums them to produce a voltage between 0 and 5 volts (see the schematic in fig 2, taken from the Wikipedia resistor ladder page). You can think of a resistor ladder as a multi-leveled voltage divider.

The resistor ladder I'll be demonstrating in this tutorial is an 8-bit DAC, this means it can produce 256 (2^8) different voltage levels between 0 and 5v. I connected each of digital pins 0-7 to each of the 8 junctions in my 8 bit DAC (shown in figs 1 and 3).

I like using these resistor ladder DACs because I always have the materials around, they're cheap, and I think they're kind of fun, but they will not give you the highest quality audio. You can buy a chip that works in the exact same was as an R2R DAC (and will work with all the code in this instructable), but has internal, highly-matched resistors for better audio quality, I like this one bc it runs off a single 5V supply (you can even do stereo audio with it), but there are many more available, look for "parallel input, 8 bit, dac ic".

Alternatively, there are chips that take in serial data to perform digital to analog conversion. These chips are generally higher fidelity (definitely better quality that the resistor ladder DAC) and they only use two or three of the Arduino's output pins (as opposed to 8). Downsides are they are a little more challenging to program, more expensive, and will not work with the code in this Instructable, though I'm sure there are some other tutorials available. After a quick search on digikey, these looked good, for Arduino, try to find something that will run off a single 5V supply.

One more note - there seems to be kind of a misconception abut 8 bit audio- that it always has to sound like the sounds effects from a Mario game- but 8bit audio with this really basic DAC can actually replicate the sounds of people's voices and instruments really well, I'm always amazed at the quality of sound that can come from a bunch of resistors.
Step 2: Set Up DAC and Test





I constructed my DAC on a breadboard (figs 1-3).  The schematic is given in fig 8.  Below are a few pieces of sample code that generate the waveforms shown in figs 4-7.  In the following pieces of code I send a value between 0 and 255 to "PORTD" when I want to send data to the DAC, it looks like this:

PORTD = 125;//send data to DAC

This is called addressing the port directly.  On the Arduino, digital pins 0-7 are all on port d of the Atmel328 chip.  The PORTD command lets us tells pins 0-7 to go HIGH or LOW in one line (instead of having to use digitalWrite() eight times).  Not only is this easier to code, it's much faster for the Arduino to process and it causes the pins to all change simultaneously instead of one by one (you can only talk to one pin at a time with digitalWrite()).  Since port d has eight pins on it (digital pins 0-7) we can send it one of 2^8 = 256 possible values (0-255) to control the pins.  For example, if we wrote the following line:

PORTD = 0;

it would set pins 0-7 LOW.  With the DAC set up on pins 0-7 this will output 0V.  if we sent the following:

PORTD = 255;

it would set pins 0-7 HIGH.  This will cause the DAC to output 5V.  We can also send combinations of LOW and HIGH states to output a voltage between 0 and 5V from the DAC.   For example:

PORTD = 125;
125 = 01111101 in binary.  This sets pin 7 low (the msb is 0), pins 6-2 high (the next five bits are 1), pin 1 low (the next bit is 0), and pin 0 high (the lsb is 1).  You can read more about how this works here.  To calculate the voltage that this will output from the DAC, we use the following equation:

voltage output from DAC = [ (value sent to PORTD) / 255 ] * 5V
so for PORTD = 125:
voltage output from DAC = ( 125 / 255 ) * 5V = 2.45V

The code below sends out several voltages between 0 and 5V and holds each for a short time to demonstrate the concepts I've described above.  In the main loop() function I've written:

PORTD = 0;//send (0/255)*5 = 0V out DAC
delay(1);//wait 1ms
PORTD = 127;//send (127/255)*5 = 2.5V out DAC
delay(2);//wait 2ms
PORTD = 51;//send (51/255)*5 = 1V out DAC
delay(1);//wait 1ms
PORTD = 255;//send (255/255)*5 = 5V out DAC
delay(3);//wait 3ms

The output is shown on an oscilloscope in fig 4.  The center horizontal line across the oscilloscope represents 0V and each horizontal line represents a voltage increase/decrease of 2V.  The image notes on fig 4 show the output of each of the lines of code above, click on the image to view the image notes.

The code below outputs a ramp from 0 to 5V.  In the loop() function, the variable "a" is incremented from 0 to 255.  Each time it is incremented, the value of "a" is sent to PORTD.  This value is held for 50us before a new value of "a" is sent.  Once "a" reaches 255, it gets reset back to 0.  The time for each cycle of this ramp (also called the period) takes:

period = (duration of each step) * (number of steps)
period = 50us * 256 = 12800us = 0.0128s

so the frequency is:
frequency of ramp = 1/0.0128s = 78Hz

The output from the DAC on an oscilloscope can be seen in fig 5.
The code below outputs a sine wave centered around 2.5V, oscillating up to a max of 5V and a min of 0V.  In the loop() function, the variable "t" is incremented from 0 to 100.  Each time it is incremented, the expression:
127+127*sin(2*3.14*t/100)
is sent to PORTD.  This value is held for 50us before "t" is incremented again and a new value is sent out to PORTD.  Once "t" reaches 100, it gets reset back to 0.  The period of this sine wave should be:

period = (duration of each step) * (number of steps)
period = 50us * 100 = 5000us = 0.005s

so the frequency should be:
frequency of ramp = 1/0.005s = 200Hz
But this is not the case, the output from the DAC is shown in fig 6.  As indicated in the image notes, it does not have a frequency of 200hz, its frequency is more like 45hz.  This is because the line:
PORTD = 127+127*sin(2*3.14*t/100);
takes a very long time to calculate.  In general multiplication/division with decimal numbers and the sin() function take the Arduino a lot of time to perform.

One solution is to calculate the values of sine ahead of time and store them in the Arduino's memory.  Then when the Arduino sketch is running all the Arduino will have to do is recall these values from memory (a very easy and quick task for the Arduino).  I ran a simple Python script (below) to generate 100 values of 127+127*sin(2*3.14*t/100):

import math
for x in range(0, 100):
print str(int(127+127*math.sin(2*math.pi*x*0.01)),)+str(","),

I stored these values in an array called "sine" in the Arduino sketch below.  Then in my loop, for each value of "t" I sent an element of sine[] to PORTD:

PORTD = sine[t];

The output from this DAC for this sketch is shown in fig 7.  You can see that it outputs a sine wave of 200hz, as expected.



//Sine out with stored array
//by Amanda Ghassaei
//https://www.instructables.com/id/Arduino-Audio-Output/
//Sept 2012

/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
*/

byte sine[] = {127, 134, 142, 150, 158, 166, 173, 181, 188, 195, 201, 207, 213, 219, 224, 229, 234, 238, 241, 245, 247, 250, 251, 252, 253, 254, 253, 252, 251, 250, 247, 245, 241, 238, 234, 229, 224, 219, 213, 207, 201, 195, 188, 181, 173, 166, 158, 150, 142, 134, 127, 119, 111, 103, 95, 87, 80, 72, 65, 58, 52, 46, 40, 34, 29, 24, 19, 15, 12, 8, 6, 3, 2, 1, 0, 0, 0, 1, 2, 3, 6, 8, 12, 15, 19, 24, 29, 34, 40, 46, 52, 58, 65, 72, 80, 87, 95, 103, 111, 119,};

void setup(){
//set digital pins 0-7 as outputs
for (int i=0;i<8;i++){
pinMode(i,OUTPUT);
}
}

void loop(){
for (int t=0;t<100;t++){//increment "t"
PORTD = sine[t];//send sine wave to DAC, centered around (127/255)*5 = 2.5V
delayMicroseconds(50);//wait 50us
}
}
Step 3: DAC Buffer







Now that we have a good signal coming out Arduino, we need to protect it.  The R2R DAC is very sensitive to any loads put on it, so trying to drive speakers directly from the DAC will distort the signal heavily.  Before doing anything with the signal you need to set up some kind of buffer circuit.  I set up one of the op amps in the TS922 dual op amp package as a voltage follower to buffer my DAC from the rest of my circuit (see schematic in fig 6, be sure to power the op amp with 5V and ground).

Once this was set up I wired an LED and 220ohm resistor in series between the output of the op amp and ground.  The sketch below outputs a slow ramp out the DAC so you can actually see the LED get brighter as the ramp increases in voltage.  The period of the ramp is:

period = (duration of each step) * (number of steps)
period = 5ms * 256 = 1280ms = 1.28s
so the LED takes 1.28 seconds to ramp up from off to full brightness.



Step 4: Low Pass Filter






The purpose of a low pass filter is to smooth out the output of the DAC in order to reduce noise.  By using a low pass filter on the signal, you can smooth out the "steps" in your waveform while keeping the overall shape of the waveform intact (see fig 4).  I used a simple RC flow pass filter to achieve this: a resistor and a capacitor in series to ground.  Connect the resistor to the incoming signal and the capacitor to ground, the signal coming from the junction between these two components will be low pass filtered.  I sent this filtered signal into another buffer circuit (I wired an op amp in a voltage follower configuration) to protect the filtered signal from any loads further down in the circuit.  See the schematic in fig 5 for more info.

You can calculate the values of the capacitor and resistor you need for a low pass filter according to the following equation:

cutoff frequency = 1/ (2*pi*R*C)

Nyquist's Theroum states that for a signal with a sampling rate of x Hz, the highest frequency that can be produced is x/2 Hz.  You should set your cutoff frequency to x/2Hz (or maybe slightly lower depending on what you like).  So if you have a sampling rate of 40kHz (standard for most audio), then the maximum frequency you can reproduce is 20kHz (the upper limit of the audible spectrum), and the cutoff frequency of your low pass filter should be around 20kHz.

For a cutoff frequency of 20,000Hz and 1kOhm resistor:
20000=1/(2*3.14*1000*C)
C =~ 8nF

since 8nF capacitors are hard to come by I rounded up to 0.01uF.  This gives a cutoff frequency of about 16kHz.  You can mess around with different values and see what you like best, I tend to like heavier filtering because it removes more unwanted noise.

Step 5: Signal Amplitude
 








 

Next, I added a potentiometer to control the amplitude of my signal.  To do this I wired the output from the 2nd voltage follower to one side of a 10k potentiometer.  The I wired the other side of the pot to ground.  The signal coming out from the middle of the pot has an adjustable amplitude (between 0 and 2.5V) depending on where the pot is turned.  See the schematic (fig 7) for more info.  You can see the output of the signal before the pot and after the pot (when turned to halfway point) in fig 6.
Step 6: Amplifier
 








 

Many times when we talk about amplifiers we think about circuits which increase the amplitude of a signal.  In this case I'm talking about increasing the current of the signal so that it can drive a load (like a speaker).  In this stage of the circuit I set up both op amps on one TS922 package as parallel voltage followers.  What this means is I sent the output from the amplitude pot to the non-inverting input of both op amps.  Then I wired both op amps as voltage followers and connected their outputs to each other.  Since each op amp can source 80mA of current, combined they can source 160mA of current.
Step 7: DC Offset
 








 

Before sending a signal to speakers, you want to make sure it is oscillating around 0V (typical of audio signals).  So far, the Arduino DAC output we've been dealing with is oscillating around 2.5V.  To fix this we can use a big capacitor.  As indicated in the schematic, I used a 220uF capacitor to DC offset my signal so that it oscillates around 0V.  The output of the DC offset signal (blue) and un-offset signal (yellow) for two different amplitudes can be found in figs 2 and 3.
Step 8: Output
 








 

Finally, I wired up a 1/4" mono jack with two wires.  I connected the ground lead to the Arduino's ground and the signal lead to the negative lead of the 220uF capacitor.  The ground pin is usually the larger pin on the jack, test for continuity with the threaded portion of the jack to make sure that you have located the ground pin correctly (see fig 5).  The signal pin will be continuous with the clip that extends out from the jack (fig 5).  See the schematic for more info.
Step 9: 40kHz Sampling Rate







For those of you who are interested in producing audio at 40kHz sampling rate, here is some code that uses timer interrupts to let you do that.  Arduino timer interrupts allow you to pause what you are doing in your main loop() function and jump to a special function called an "interrupt routine."  Once this routine is done you come back to where you left off in the loop().  You set up and specify the frequency of these interrupts in the setup() part of your code.  You can learn the specifics of setting up interrupts here, but if you are only interested in 40kHz interrupts, then you can just copy parts of the code below.

To set up the interrupt you need to copy the following lines into your setup() function:

cli();//disable interrupts
//set timer0 interrupt at 40kHz
TCCR0A = 0;// set entire TCCR0A register to 0
TCCR0B = 0;// same for TCCR0B
TCNT0  = 0;//initialize counter value to 0
// set compare match register for 40khz increments
OCR0A = 49;// = (16*10^6) / (40000*8) - 1 (must be <256)
// turn on CTC mode
TCCR0A |= (1 << WGM01);
// Set CS11 bit for 8 prescaler
TCCR0B |= (1 << CS11);
// enable timer compare interrupt
TIMSK0 |= (1 << OCIE0A);
sei();//enable interrupts

the contents of the interrupt routine are encapsulated in the following function:

ISR(TIMER0_COMPA_vect){ //40kHz interrupt routine
}

You want to keep the interrupt routine as short as possible, only the necessities.  You can do all of your other tasks (checking on buttons, turning on leds, etc) in the loop().  Also keep in mind that setting up interrupts may affect other Arduino functions such as analogWrite and delay.

In the code below, I use the interrupt function to send a new value of sine[] to PORTD at a rate of 40kHz and increment the variable "t."  Figs 1 and 2 show the (unfiltered) output of the code on an oscilloscope.  We can calculate the expected frequency as follows:

frequency = (sampling frequency) / (steps per cycle)
frequency = 40,000 / 100 = 400hz

at a sampling frequency of 40kHz we expect the duration of each step to be:

duration of each sample step = 1/(sampling frequency)
duration of each sample step = 1/40,000 = 25us


Step 10: Extra Tips






This DAC uses quite a bit of the Arduino's available digital pins, including some that are normally used for serial communications and PWM, so here are a few tips that will help you deal with pin conflicts.

If you want to do serial communication: Software Serial is an Arduino library that allows you to turn any of the Arduino's pins into serial pins.  Usually when you are doing an Arduino project that requires serial communication, you avoid using digital pins 0 and 1 because they need to be free to send serial data.  I like to use them for the 8 bit DAC because pins 0-7 are all part of PORTD on the Arduino's Atmel328 chip, this allows me to address all of them in a single line of code.  PORTB only has 6 pins (digital pins 8-13) and PORTC only has 6 pins (analog pins 0-5), so you cannot construct an 8 bit DAC with these ports alone.

If you need to use the PWM pins, or otherwise need to use different pins as the DAC: If you must use the PWM pins you can use bit manipulation to free up pins 3, 5, and 6 and replace them with pins 8, 12, and 13.  Say you want to send the number 36 to PORTD.  You can use the following lines:

//define variables:
boolean bit3state;
boolean bit5state;
boolean bit6state;

//in your main loop():

bit3state = (36 & B00001000)>>3;//get the third bit of 36
bit5state = (36 & B00100000)>>5;//get the fifth bit of 36
bit6state = (36 & B01000000)>>6;//get the sixth bit of 36

//send data to portd w/o disrupting pins 3, 5, and 6
PORTD |= (36&B10010111);//set high pins high using the number 36 with zeros replacing bits 3, 5, and 6
PORTD &= (36|B01101000);//set low pins low using the number 36 with ones replacing bits 3, 5, and 6
//send data to portb w/o disrupting pins 9, 10, and 11
PORTB |= 0 | (bit3state) | (bit5state<<4) | (bit6state<<5);//set high pins
PORTB &= 255 & ~(1-bit3state) & ~((1-bit5state)<<4) & ~((1-bit6state)<<5);//set low pins

be sure to keep these PORTD and PORTB lines right next to each other in your code, you want the pins on port d and port b to switch at as close to the same time as possible.

Here is the code from the previous step, edited so that it does not use any PWM pins.  As you see in fig 1, the unfiltered output from the DAC has many discontinuities caused by the lag between sending data to port d and port b, as well as splitting up the commands for setting pins high and low.  You can get rid of most of these discontinuities with the low pass filter (fig 2).  If you wanted to use this technique you might consider increasing the cutoff frequency of your low pass filter.  If you wanted to make this really good, you could send your 5 most significant bits to port d and your 3 least significant bits to port b.  This would decrease the amplitude of some of the discontinuities, reducing the magnitude of the noise.  I'll let you figure that one out on your own.

If you run out of digital pins and need more:  Remember you can always use your analog pins as Digital I/O.  Try out the following functions, they work just like you are dealing with a regular digital pin.

digitalWrite(A0,HIGH);//set pin A0 high
digitalWrite(A0,LOW);//set pin A0 low
digitalRead(A0);//read digital data from pin A0

Otherwise, try using a multiplexer.  If you need more digital outputs, the 74HC595 allows you to turn three of the Arduino's digital pins into 8 outputs.  You can even daisy chain multiple 595's together to create many more outputs pins.  You could set up your whole DAC on one of these chips if you wanted (though it would take a few lines of code to address it and might slow you down too much for higher sampling rates).  The Arduino website is a good place to start learning about how to use the 595.

If you need more digital inputs, the 74HC165 or CD4021B let you turn three of the Arduino's digital pins into 8 inputs.  Again, the Arduino website is a good place to start learning how to use these chips.

If you want to use the info in this Instructable with the Mega or other boards:  In this Instructable I talked exclusively about the Arduino Uno with Atmel328.  The same code will run fine on any board with an Atmel328 or Atmel168 chip on it.  You can also use the same ideas with a Mega.  You should try to attach your DAC to any port that has 8 available pins, that way you can address your DAC with one line of code ("PORTD =" )  On the Uno, the only port that has 8 available pins is port d.   This picture indicates that the Mega has several ports with 8 pins: ports a, b, c, and l are the obvious choices.  If you don't care about wasting analog pins you could also use ports f or k.






 

Source: Audio Output using an Arduino

### DIY Arduino Motor Shield

Today, I'm going to show you how to make an Arduino motor shield (driver) at a low cost. It works splendidly, its posses almost all the characteristics of the original Arduino motor shield. It's almost considered as a clone. The original Arduino motor shield has the same motor driver chip (L298), the only difference with it, is the package type, my project contains the vertical version of the chip L298 (with a "N").



Structure:
It's controlled using 4 PWM pins. The connections are: 11&10 for the R-Motor and 6&5 for the L-Motor. With the help of eight fast recovery diodes (1N4937) it shows a very fast response of stopping/ braking, that's why I'm going to use it for the national SUMOBOT competition.

What Is A Motor Shield?
A motor shield is a circuit that drives different loads such as motors, lights and etc... The Arduino Board (Microcontroller) itself isn't designed to operate high current loads, that's why we use motor shields, it is a circuit that is controlled by your arduino board to drive high power accessories.

Cost:
It only cost me P363.75 (Converted: $8.87)! The prices would decrease to P262.50 (Converted: $6.40) if I sticked to the original plan, since it's for competitional purposes, I substituted  some parts with a higher rate of response.

About The Guide:
The guide includes the datasheet, schematic diagram, PCB layout, Arduino test files and etc.... All you need is an hour and the 6 step instructable.

Specs:
____________________________________________________
Voltage Range: 5- 50 volts
Current Range: 2-4 Amperes
Power: 25w @75°C
Working Temparature: -40°C to 150°C
Board Compatibility: Arduino Uno
Motor Outputs: 2 Motors (Left & Right)
Possible Robot Movements: Left, Right, Forward, Backward & etc..
PWM Pins: [12&11]  [6&5]

The PCB layout is my original design, it was created using Fritzing Software, please ask for permission if anyone is willing to modify and republish it.
Step 1: Parts & Materials
I bought my parts in ALEXAN, a local electronic store with tons of branches (Only Found In The Philippines). Everything is cheap there, the links that I gave is only an alternative for online purchases. My real price list and spending is a lot different and cheaper. If you live in the Philippines, you can buy in DEECO, Alexan, E-Gizmo or Raon.

Parts:
- L298N Motor Driver Chip
- 7806 Regulator Chip 
- 1N4937 Fast Recovery Diode
- 1 Ohm ¼ watt Resistor
- Screw Terminal Blocks
- PCB Board (Regular or Photo-positive)
- Male or Female Pins (Used to connect to Arduino)
- Heatsink (Bought or DIY)

7806 Regulator Chip = (Substitute: 7805- 7809)
1 Ohm ¼ watt Resistor = (Substitute: Up to 10 Ohms)
1N4937 Fast Recovery Diode = (Substitute: 1N4007 or 4148)
Step 2: PCB Making


In this step, I will show you the schematic diagrams, datasheets and PCB layouts. Just download the files below. If you don't know how to make a PCB, please visit my other instructable guide "DIY Customized Circuit Board (PCB Making)". I used a Photo-postive PCB board instead of the traditional toner transfer. The photo-postive PCB is a bit rare in the U.S. that's why some should stick with the toner transfer method. Also don't forget to drill holes on them :)))

In making the photo-positive PCB, it's better to stay in a dark area and have a 10W fluorescent lamp beside you, also use a kitchen timer to set a 5 minute alarm for counting the exposure time.



L298N Motor Shield PCB Layout (Artwork).pdf5 KB
L298N Datasheet.pdf599 KB


Major Components in Project– L298N Motor Driver Chip
– 7806 Regulator Chip 
– 1N4937 Fast Recovery Diode
– 1 Ohm ¼ watt Resistor
– Screw Terminal Blocks
– PCB Board (Regular or Photo-positive)
– Male or Female Pins (Used to connect to Arduino)
– Heatsink (Bought or DIY)7806 Regulator Chip = (Substitute: 7805- 7809)
1 Ohm ¼ watt Resistor = (Substitute: Up to 10 Ohms)
1N4937 Fast Recovery Diode = (Substitute: 1N4007 or 4148)




For more detail: DIY Arduino Motor Shield

### Proximity sensing mouse wheel scroller using Arduino

List of tools:

1. Exacto
2. Arduino Nano / USB chord (Mini-B)
3. Dremel / Drill
4. Paper & Pencil
5. Sharp IR Sensor (2Y0A21 F)
6. Hot glue gun
7. Solder gun / Solder
8. A small mirror

Ok so you might ask, why the heck are you doing this to a trackball?! aren't those for people from the 80s?? the one with keytars?? My response is two fold. No. 1 I have a keytar and they are MAGICAL. 2. I hated trackballs until I was forced to use one in a recording studio a few years ago, and I will never ever ever ever use a regular mouse again. These suck to get used to, but are amazingly efficient especially from a designer perspective. Not to mention they are very ergonomic. You can hate all you want, I love magical things. But if you do not like magical things, I guess you could just put it somewhere else, maybe the side of a chair? inside a normal mouse (might need a arduino mini for this or attiny)?

Here is a prototype of the sensor, I was trying to figure out where I could put it. You need to pick a good spot where the nano will fit as well as a place that you wont constantly be bumping it, this was the best place I could find. Feel free to move it wherever though. This area happen to have the least amount of electronics too, so it was a no duh spot.

Ignore that its a Arduino Uno in the prototype, I was doing just that-- making sure I could get it to work first. we will be using the Nano or Mini, depending on preference. this tutorial uses the Nano.
Arduino nano is really easy to use if you have never used it. This was my first project using one and I had no problem making the switch from an Uno to the Nano, just a little more soldering.
Step 1:
Prep-a-roo-skis

Ok, lets get some stuff ready.
1. Soldering Iron, Solder.
2. Arduino Nano
3. USB chord
4. Sharp IR sensor.

current awesome meter reading:  [ ===--------------]  not looking too good...

Go ahead and heat up your solding iron.

While that is heating lets make a stencil for where your sensor will go. What I did was first traced the outside of the IR sensor, then you find where the LEDs are and make the most amazing circles you have ever made in all of everdom. I eyeballed this but you could do some measuring or check out the datasheet to get exact measurements. I'm a pro circle drawer though so... don't feel bad if yours aren't as good as mine.

Connect it up!

make sure you have the correct length by putting the arduino inside the mouse and see if it reaches where you would like to put the sensor.

Now solder the RED wire of the IR sensor to the 5v pin,
BLACK to ground,
White to A3 (analog in 3)
(check diagram above if you aren't sure what ones these are)

Now, get your mirror out.

Look at how smart and amazing you are. d'awwwe.
Ok, your IR sensor is now connected to your arduino board, 10 points. Plug that USB in and lets get programming.

disclaimer: I know this code is nasty and hacked together. I was tired and me and "for loops" were getting in a fight, soooooo. yeah. if you want to suggest improvements--have at it.

https://gist.github.com/4493574

awesome meter: [ ====----------] getting better!
Step 2:
Ok get that mouse out.

First remove the plastic rubber stoppers from the bottom and unscrew all 4 screws. easy peasy.

Once they are unscrewed it should come apart relatively easily, just pull it apart like you're checking to see if you forget butter on your sandwich. Shuttup, my analogies are amazing. Ok, moving on.

awesome meter: [ =======-------]

Major Components in Project
1. Exacto
2. Arduino Nano / USB chord (Mini-B)
3. Dremel / Drill
4. Paper & Pencil
5. Sharp IR Sensor (2Y0A21 F)
6. Hot glue gun
7. Solder gun / Solder
8. A small mirror

Prep-a-roo-skis

Ok, lets get some stuff ready.
1. Soldering Iron, Solder.
2. Arduino Nano
3. USB chord
4. Sharp IR sensor. 

 

For more detail: Proximity sensing mouse wheel scroller using Arduino

### Big Ball Maze Game using Arduino

This project was the result of an urge to contribute something to the Creative Games section of my kids’ elementary school fair. The kids loved it for it’s simple old-school game aesthetic mixed with Wii-style and Kinect-style video game control. It’s a spin-off project of an earlier Ball & Plate experiment mentioned here in the Instructables forums.

The machine is an over-sized (1200mm (48”) diameter) version of the traditionally hand-held game where the object is to tilt a circular disc to move one or more balls though to the center of a maze. The circular board is supported by a stand with a centrally mounted gimbal, and controlled by either a wired hand-held contoller, an Android phone, or by body movements.

An Arduino microcontroller is used to monitor the player's actions and then adjust the tilt of the board to match. The wired controller uses an accelerometer module. The Android phone controller uses the in-built accelerometer and a custom app made with Processing to communicate via bluetooth with the Arduino. The body controller uses two sonar proximity sensors to detect how far the operator is from a central position to determine how much to tilt the board.

The board is tilted using two gearmotors pulling on strings attached to the underside of the board – one for front and back, and one for left and right. An accelerometer is attached to the underside of the board to provide the position feedback to the Arduino.
Step 1: The board
Cut the circular board out of a 1200mm x 1200mm (48” x 48”) sheet of 19mm (¾”) plywood using the attached design (disk.eps). The 3.175mm (1/8”) wide circular slots are cut 6.35mm (¼”) deep to locate the acrylic walls of the maze. I made it at TechShop using the ShopBot and the attached Vcarve file (disk.crv). You could do it manually using a hand-held router and a piece of string.

The outer maze wall is 57.15mm (2¼”)  wide strips of 3.175mm (1/8”) thick clear acrylic. These are screwed at regular intervals around the edge of the board with wood screws and washers, and positioned so that the lower edge is flush with the underside of the board. The inner maze walls are  44.45mm (1¾”) wide strips of the same acrylic, so that once they are bedded into the 6.35mm (¼”)  deep slots, they are the same height as the outer wall.

The inner two rings of walls have to be softened in an oven before they can be bent enough to fit the tighter radii of the slots. This can be a tricky operation. I placed the acrylic strips (one at a time) on a baking sheet and kept the oven at a low temperature and continually checked so that the acrylic didn’t get too soft. Make sure you’re wearing gloves when you get the acrylic out of the oven.

The walls need to be glued into their slots. Even if they are a snug fit, the banging of the ball eventually pops them out.

disk.eps5 MB
disk.crv695 KB


Step 2: The stand
I’ve attached the 123D project file I used to design the stand (BigBallMaze.123d)

Cut the main leg pieces out of a 1200mm x 1200mm (48” x 48”) sheet of 19mm (¾”)  plywood using the attached design (legs.eps). If you have access to a CNC router, I’ve also attached the Vcarve file (legs.crv). Cut the rectangular pieces out of 6.35mm (¼”) MDF using the attached design (quarterInchBoard.eps, quarterInchBoard.crv).

Assemble each of the four pulley shafts by sliding the pulley onto the (108mm) 4¼” x (7.94mm) 5/16” shaft, and then the 38mm (1½”) long tubing onto each side of the pulley. Add a drop of light oil so the pulley spins nicely.

Assemble the parts according to the pictures.

quarterInchBoard.eps3 MB
legs.eps5 MB
quarterInchBoard.crv503 KB
legs.crv3 MB
BigBallMaze.123d2 MB
Major Components in Project
Materials
Control Electronics
Arduino microcontroller – Uno or compatible (Sparkfun DEV-11021)
Arduino prototyping shield – (Adafruit #51)
Bluetooth module – Bluetooth Mate Gold (Sparkfun WRL-09358)
Accelerometer modules (2) – 2 axis (or 3 axis) (Sparkfun SEN-00849 and Modern Device MD0500)
Ultrasonic Rangefinders (2) – Maxbotix XL-Maxsonar EZ0 (Sparkfun SEN-09491)
Motor drivers (2) – Dual VNH2SP30 (Pololu #708)
Battery – 12V 10Ah SLA (Universal S3BATT)
Battery charger – 12V 4A 3 stage (Energizer 84028)
RJ11 cables (3) – 6 conductor, 6 foot long (Startech RJ6FT)
RJ11 jacks (6) – 6 conductor (6P6C) (Jameco #124039)
DC power cable – 16AWG speaker wire, 3’ total
Resistor – 560ohm 1/4watt
LED – any old LED
Stripboard – prototyping circuit board
Jumper wire – 22AWG multiple colors
Switch – momentary SPST
Switch – DPDT pushbutton ON-OFF

Motor Housings
Gear motors (2) – 12volt, 19:1gear ratio, 500rpm, 5kg-cm (84oz-in) torque (Pololu #1102)
Gears 60 tooth (2) – 32 pitch acetal hub gears (ServoCity #RHA32-36-60)
Gears 30 tooth (2) – 32 pitch acetal hub gears (ServoCity #RHA32-36-30)
Set Screw Hubs (2) – 6mm bore (ServoCity #3472H)
Set Screw Hubs (2) – 5/16” bore (ServoCity #3466H)
Hex key – 3/32” (ServoCity #7122A16)
Hub screws (16) – #5-40 3/8” panhead (ServoCity #90272A126)
Screws – motors (12) – M3 x 10mm panhead (ServoCity #92005A120)
Screws (8) – flat head ½”long brass wood screws
Shafts (2) – 5/16” x 90mm
Bearings (4) – 5/16” ID skateboard bearings
Non-slip tape – 300mm length

The Board
Plywood – ¾” x 1220mm (48”) x 1220mm (48”)
Acrylic strips (7) – 1220mm (48”) x 1¾” clear
Acrylic strips (3) – 1220mm (48”) x 2¼” clear
Screws (30) – small ½” long panhead with washers
Screw rings (4)

The Stand
Plywood – ¾” x 1220mm (48”) x 1220mm (48”)
MDF – ¼” x 610mm (24”) x 410mm (16”)
Shafts (4) – 5/16” x 108mm
Pulleys (4) – 5/16” shaft, 1 15/16” OD (McMaster-Carr #3434T39)
Bushings (8) – 5/16” ID x 38mm (1½”) Aluminium tube
Threaded rod (4) – 5/16”-18  x 150mm (6”)
Lock nuts (8) – 5/16”-18
Washers (8) – 5/16”
Cord – 3mm (1/8”) cord, 3700mm (12’)
Wire hooks (4) – to attach to the ends of the cord

The Shaft and Gimbal
PVC pipe – 1¼” x 10”
PVC coupling – 1½”
PVC coupling – 2”
Screws (4) – #10-32 x ¾” flathead
Lock nuts (4) – #10-32
Screws (2) – #10 x ¾” flathead wood screws

The Balls
Balls – 57mm diam Bocce Pallinos (Epco)


For more detail: Big Ball Maze Game using Arduino

### 10 Useful Arduino Projects to Complete This Year

If you are new or experienced in DIY electronics, you probably know about the Arduino. Arduino is an excellent option for microcontrollers; its products are reliable, open-source, affordable, and efficient, with high flexibility. The list shown displays the extensive variety of options available in Arduino projects. The list includes a range of project ideas; some are perfect for newcomers, while others are more challenging.







1. A Remote Control



You don't have to immediately purchase a new remote control if your current one is giving you trouble. Design your own remote control for your television, speaker, or air conditioning unit using an Arduino project. All that is required is a small amount of soldering, creating a case, and you can make an infrared remote control.



2. An Automatic Trash Can



While not necessary, having an automated trash can in your home is a fun extra to have. Converting a used trash bin into an automated model with the help of an Arduino microcontroller, an ultrasonic sensor, and a micro-servo motor is quite straightforward. This is the perfect project for novices; just glue the motor and sensor to the trash and wire them together. Be careful where you position the sensor to prevent having to reach too far down to open the lid.



3. An Air Temperature and Quality Sensor



Have you ever desired to ascertain the air temperature and quality in your house? By using only a select few monitors, individuals can easily craft their own sensor to measure both air temperature and quality. Temperature, humidity, heat index, carbon monoxide, alcohol, toluene, ammonium, acetone, and carbon dioxide monitors are necessary. Furthermore, you will need an Arduino Nano-DHT 22 MQ 135-5V power supply, a push button, and a wooden box for the project.



4. A Kitchen Timer



An Arduino kitchen timer is a great beginners project for anyone that is looking to get a bit more experience before moving onto bigger projects. The finished device will have buttons to set the time and another button to start and stop the countdown timer. Your kitchen timer will also need to be fitted with a speaker and an LCD to display the remaining time on the countdown. All of these pieces of equipment can be found in an Arduino Starter Kit.



5. A RFID Security Scanner



Enhance your home security by making your own RFID security scanner. This identification system utilizes RFID devices to transmit data across short distances. Materials needed for this task are an Arduino Uno, a SparkFun RFID Reader Breakout, and an Adafruit RFID/NFC card.



6. An Earthquake Detector



An earthquake detector is another beginner level Arduino project. For this project, you will need the following materials:




The setup from the LIS2HH12
One green LED
One red LED
One yellow LED
Three 690 ohm resistors




Remember that you will need to reset your device once you have created your project after a minor or major earthquake is detected to ensure that the LEDs are turned off.



7. A Coin Sorting Machine



With just a few materials, it is possible to make a coin sorting machine that works automatically. To make your own coin sorting machine, you just need Arduino Uno-controlled infrared sensors, an LCD screen, and cardboard. You will have to get a piece of cardboard and precisely cut out the shapes of various coins. Make sure to cut precisely because otherwise, your project may not function as anticipated.



Next, place your cardboard with the cut-out coin holes on a slope, with the IR sensors near the output path of the three coins. Next, connect the LCD to Arduino directly or using the I2C module. All you need to do after this is to program the Arduino coin counter.



8. Light Up Notification System



If you work as a delivery driver, then you will know that the process of accepting and managing new jobs can be very difficult especially because you have to pull over someone safe to view available loads online. Rather than having to manually check your phone, you can create your own Arduino notification system.



It is achievable to create a system using an Arduino Uno and an LED bulb that notifies you when a new task is ready at your home. This alert can cause the light to turn on. Place the light on your dashboard in a manner that minimizes distraction, allowing you to stay aware of possible job prospects while driving.
If you are worried about not noticing an LED light, you can always set up the device to utilize a speaker instead. Your speaker can be configured to make a distinct sound instead of being used as a light source.



9. A Security Alarm



This security alarm might not look all that sophisticated, but it can be very effective, and it makes a fun Arduino project. When the alarm is triggered, your Arduino home security alarm can be programmed to call you on your mobile phone to alter you to the intrusion. The hardware you will need for this project includes the Arduino Uno, a PIR Monition Detector Sensor and a GSM Module with Sim inserted.



10. A Weather Forecaster



You can create your own barometer to measure the atmospheric pressure, which can provide you with a pretty accurate short term weather forecast. The tools and components you will need to complete this project include:




An Arduino Nano R3
MyOctopus i2c Barometric Air Pressure Sensor BMP280
SG90 Micro-servo moto
Soldering iron




he operation of the device is uncomplicated; the servo motor acts as a pointer that shifts to show the shifting weather. A higher chance of rain is indicated when the dial moves to the left.

### WiFi enabled Motors

Revolutionizing Motor Control
Motors are a crucial component for many of your projects if you are someone who enjoys tinkering or creating things. We are used to using Arduino boards to manage them and causing chaos in order to fix a basic issue. Everyone has an idea that needs a motor, however not everyone values the necessary effort to bring it to life.



OpenMYR is our name, and we are revolutionizing motor control techniques. We have developed WiFi motors that are open-source and come equipped with all the necessary components to automate your projects. There is no tangled mess of wires, just supply power and you're good to go. Instead of programming a controller for each project idea, you can just send motor commands via WiFi.


A Wireless Motor for a Wireless World


Our idea was founded on a simple premise: developing a motor that could be operated remotely by individuals of varying levels of expertise. Arduino code shouldn't be reuploaded until it functions correctly, shields are not allowed for operating motors and connecting to networks, and breadboards are also restricted. We desired motors that could be easily inserted into a project and used right away.

Once you connect your motor for the initial time, it promptly starts emitting its own WiFi signal. You can either link to it to start operating your motor, or instruct it to connect to your network for controlling it remotely. Our offerings include basic instruments for setting up and managing, like mobile applications and the motors' integrated webpage. We offer a straightforward method for advanced users to communicate commands across a network, enabling the development of robust systems for project control.

No matter how experienced you are, our advanced technology makes it easy to motorize your projects. You can easily create a light switch that can be controlled by a smartphone app without any difficulty. It took us two days to create a robot arm that can perform complex movements in real-time.
Two Solutions for Many Projects
We are excited to present OpenMYR's range of wireless motors. We have two different options available to meet your different requirements.

Our main product is the WiFi Stepper Motor, a comprehensive solution for situations requiring power or a wide range of motion. A stepper motor is capable of rotating in both directions, clockwise and counterclockwise, with high torque. If stepper motors are given too much power, they can end up losing their position.

Read more: WiFi enabled Motors

### Spinning or Rotating LED Display using Arduino POV

Designing a Spinning/Rotating LED Display
In this project, we will demonstrate how to create a basic "Rotating LED Display" (commonly referred to as Spinning LED Display) using Arduino. The idea to start this project sparked in my mind after I noticed a product in the market that featured a clearly visible text message on a "Rotating LED Strip".



After that, I planned to make this project myself and Arduino is a good choice to build this spinning led display.

For this project, I designed PCB using Eagle CAD software. The reason to choose Eagle was to build a lightweight PCB, as there is high speed rotation involved in the project, and the PCB will be a part of the rotating module. In this circuit, “Arduino pro mini” is used because it is very small and powerful board.

Seven LED's, as well as a duo of IR LED and a Photodiode, are also utilized. IR LED and Photo diode are employed in creating a feedback system to provide the real position of the rotor to Arduino. The Arduino board is connected to a single line of LEDs. A tiny DC gear motor is employed to spin this circuit; and as the circuit rotates, the LED's display a blinking pattern representing English alphabets. The code can be adjusted to show different languages.

The operation of the Rotating LED Display is fascinating and it can be utilized for decorative purposes, enabling the creation of stunning designs and graphics with this remarkable project. This signage can be utilized in public areas such as train/bus terminals and airports as a billboard due to its cost efficiency in construction. Maintaining the gear motor and rotating assembly is essential.


Circuit Diagram
Circuit diagram is shown above. I also designed a PCB on EAGLE and the files are given below. it would be better to use etched PCB. PCB Etching process is a simple task, you can learn this from our blog. For PCB etching refers the figure given below.

Read more: Spinning or Rotating LED Display using Arduino POV

### Playing Melodies using Arduino Tone() Function

Arduino is an excellent way to simplify and speed up your microcontroller projects, thanks to its community of developers who have made almost everything look simple. There are lots of Arduino Projects out here for you to try and have fun. Some of your projects might need some sounds action to notify about something or just to impress the viewers. What if I told you that almost any theme songs that could be played on a piano can be mimicked on your Arduino with the help of a simple program and a cheap Piezo speaker?

In this tutorial we will learn how simple and easy it is to Play Melody on Piezo Buzzer or Speaker using the Arduino tone () function. At the end of this tutorial you will be able to play some famous tones of Pirates of Caribbean, Crazy Frog, Super Mario and Titanic. You will also learn how to play any piece of piano music with Arduino. Check the Video at the end.

Hardware Required:

 	Arduino (any version – UNO is used here)
 	Piezo Speaker/Buzzer or any other 8ohm speaker.
 	Breadboard
 	Connecting Wires
 	Push buttons
 	1k resistor (optional)

Understanding the Tone() function of Arduino:
Prior to comprehending the operation of a tone (), it is important to understand the functioning of a Piezo buzzer. We could have studied Piezo crystals in school; they are crystals that transform mechanical vibrations into electricity or vice versa. In this case, we use a changing electric current (frequency) to make the crystal vibrate and create sound. Therefore, in order for the Piezo buzzer to produce sound, we need to induce vibrations in the Piezo electric crystal. The frequency and quality of the sound are determined by the speed of the crystal's vibrations. Therefore, changing the current's frequency allows for control over the tone and pitch.
Okay, so how do we get a variable frequency from Arduino? This is where the tone () function comes in.  The tone () can generate a particular frequency on a specific pin. The time duration can also be mentioned if required. The syntax for tone () is

Syntax

tone(pin, frequency) 
tone(pin, frequency, duration)

Parameters

pin: the pin on which to generate the tone
frequency: the frequency of the tone in hertz - unsigned int
duration: the duration of the tone in milliseconds (optional) - unsigned long
The digital pin can have any value for pin. In this case, I have utilized pin number 8. The size of the timer in your Arduino board dictates the frequency that can be produced. The lowest frequency achievable on UNO and other typical boards is 31Hz, while the highest frequency achievable is 65535Hz. Nevertheless, we are only capable of detecting frequencies ranging from 2000Hz to 5000Hz.

The pitches.h header file:
We are now able to generate sound using the arduino tone() function. However, how can we determine the type of tone that will be produced for each frequency?

Arduino provided a chart that links individual frequencies to corresponding musical notes. This note table was initially created by Brett Hagman, upon which the tone() function was inspired. This note table will be utilized for performing our themes. If you have experience with sheet music, you should be able to understand this table. For people like me who are unfamiliar, it looks like just another block of code.
#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62
#define NOTE_C2  65
#define NOTE_CS2 69
#define NOTE_D2  73
#define NOTE_DS2 78
#define NOTE_E2  82
#define NOTE_F2  87
#define NOTE_FS2 93
#define NOTE_G2  98
#define NOTE_GS2 104
#define NOTE_A2  110
#define NOTE_AS2 117
#define NOTE_B2  123
#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 4978
Above code is given in pitches.h header file in this zip file, you just need to download and include this file in our Arduino code as given at the end this tutorial or use the code given in the zip file.

Playing Musical Notes on Arduino:
To play a decent melody using Arduino we should know what constitutes these melodies. The three main factors required to play a theme are


 	Note value
 	Note Duration
 	Tempo

We have the pitches.h header file to play any note value, now we should find out its specific note duration to play it. Tempo is nothing but how fast the melody should be played. Once you know the Note value and Note duration you can use them with the tone() like

tone (pinName, Note Value, Note Duration);
For the tones played in this tutorial I have given you the note Value and Note duration inside the “themes.h” header file using which you can play them in your projects. But if you have any specific tone in your mine and you want to play it in your project read on.... Else skip this topic and fall down to the next.

To play any specific tone you have to get the sheet music of that particular music and convert sheet music to Arduino sketch by reading the note value and note duration from it.  If you are a musical student it would be a piece of cake for you, else spent some time and break you head like I did. But at the end of the day when your tone plays on the Piezo buzzer you will find your effort worth it.
Once you have the note value and note duration, load them into the program inside the “themes.h” header file as shown below

//##############**"HE IS A PIRATE" Theme song of Pirates of caribbean**##############//
int Pirates_note[] = {
NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4,
NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, 
NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4,  
NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, 
NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4,
0, NOTE_A3, NOTE_C4, NOTE_B3, NOTE_D4, NOTE_B3, NOTE_E4, NOTE_F4,
NOTE_F4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4,
NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4,
NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_G4,
NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, 
NOTE_D4, 0, NOTE_D4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4
};
int Pirates_duration[] = {
4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8,
4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8,
8,4,8,8,8,4,4,8,8,4,4,8,8,4,4,8,4,
4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8,
8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8
};
//###########End of He is a Pirate song#############//
The above block of code shows the note value and note duration of “He is a Pirate” theme form the movie Pirates of the Caribbean. You can add your theme similarly like this.

Schematic and Hardware:
The schematic of this Arduino Tone Generator Project project is shown in the figure below:
Read more: Playing Melodies using Arduino Tone() Function

### Open source hardware GPIB USB Adapter

Greetings to all! I have observed that in the previous period, I have received some links to my GPIBUSB adapter project from this forum, so I decided to create a specific thread for it.


GPIBUSB Adapter rev3
A couple of years ago, during my last year of college, I was employed at a new university laboratory where I later pursued my master's degree. During the installation of some devices, I needed to link a group of T&M devices to a computer using GPIB. Nevertheless, I soon realized how difficult it is to get GPIB functioning properly. I discovered that there are no MATLAB bindings in the Linux GPIB drivers. If they had done it, we wouldn't have been able to make it function. Using pyvisa with Python was easy, but this project mandated the use of MATLAB. In the end, we ended up installing Windows instead (resulting in future problems with SSH, but that's a different matter).

Several months later, I reflected on the situation and decided to create my own solution. I made a board that utilized a virtual serial port to circumvent these problems. Using this method, any up-to-date software could communicate with a GPIB linked device.

This weekend, I completed the third significant revision of my GPIBUSB adapter board. Significant hardware modifications involve replacing the pull-up resistors with the correct GPIB line drivers, and replacing the FT232RL with the updated FT230X. There are several software enhancements ranging from increased reliability to extra commands.

In order to help abstract the user away from having to deal with adapter-specific commands (eg: setting the target GPIB address, etc) my friend and I started a Python library project called InstrumentKit. Here, we took things another step further and abstracted hardware-channel specific instructions away.

 

Source  : Open source hardware GPIB USB Adapter

### How to make a LED 7-segment display with or without Arduino

I will demonstrate how to create a 7 segment display using LEDs. Use Arduino in conjunction to make countdown timers, basic text displays, and additional features. I enjoy creating unique projects. I looked through all of instructables and couldn't find anything similar to this. Actually, I looked on Google but found no results. This idea crossed my mind when my actual 7-segment display wasn't functioning. Have fun!

The things you can achieve with LEDs are truly impressive!

The operational process of the project:

All anodes in a single row are joined. One row consists of 3 LEDs. View image. When voltage is provided to the row, the entire row will illuminate.

Therefore, by linking all the cathodes and utilizing Arduino, I programmed each row to switch on and off. In the image shown, Arduino is activating rows 1, 2, 4, 5, 6, 7.

Don't forget, in instrucables the pictures are shown before the explanation.

If you want to undertake this project, make sure to carefully review this entire guide before beginning to avoid any confusion! And, be sure to check out all of the photos and their corresponding boxes as well.

Here is a video showcasing my numerical display. Alpha is the next word being shown.




Clip #220 from AJ on Vimeo.




Clip #219 from AJ on Vimeo.




1. What did you make?
The idea started when I was getting frustrated because I couldn't get my 7 segment display to work with one of my ICs, so I decided upon making my own, so that I'd could control it in basically any way I wanted, including simple text.
2. How did you make it?
The very first thing I did was get out my sketchbook and draw down my ideas, and how I would connect them together.
I started working on this project at 11:30 pm, and kept on going until about 4:30 A.M.. I kept on running into obstacles, such accidentally soldering the negative and positive leads of 3 LEDs together! I made it with 27 LEDs, a small piece of perf board, some basic tools, wires, and most importantly my newly-bought Arduino. I did this project by myself.
3. Where did you make it?
Well. . . I made this project all in my room, on my makeshift desk,and downstairs in our office (for programming Arduino). The more I programmed, the more problems arose, so I had to keep on running back and forth between my soldering un upstairs and the computer down stairs! I wore a path through my carpet, down the creaking wooden stairs, across the tile, over the wooden floor in my office to the computer. How did the project connect to other activities in my life? I was able to count this for my schoolwork! I aslo used this project as a show-off to Bravo, (another group in my activities, I'm ALPHA)
4. What did you learn?

 	Where do I start? I learned that I should have used a resistor for each LED, instead of one resistor
 	The BIGGEST thing I learned was how to program my Arduino!
 	I learned some more techniques about soldering
 	I also learned a little bit more about LEDs themselves

If I could do anything differently i would have bought 27 resistors and soldered them to each LED!
What am I proudest of? My success! I would have never thought it woud be such an interest with my friends!












Remove these ads by Signing Up




Step 1: Ingredients:







What you will need:

TOOLS:

1x Wire strippers & snipers
1x Solder
1x Soldering pencil
1x Wire strippers & snipers
1x Needle-nose pliers
1x Solder
1x Soldering pencil
You may need some wire cutters other than the ones on the stripper. See step 5.
Something to cut perf board

PARTS:

1x  Perf Board (http://www.radioshack.com/product/index.jsp?productId=2104052)
1x Smaller strip of perf (not necessary, but recommended)

ELECTRONICS:

21x  White (or other color) LEDs
1x 50k pot (potentiometer)
1x Arduino &  USB cable & power (optional)
Various jumper wires, MAX, 9






Step 2: Getting Familiar With The Design





We need to insert 27 LEDs into the perf, but we need to do this in an ordinary fashion. Each segment will have 3 LEDs wired parallel with each other. All the grounds will be connected. See picture and schematic.


Step 3: Prepping the Perf Board







Now we will need a template of some sort to help us arrange the LEDs.  Get your perf and place the LEDS in the holes, like the picture. Then, taking them out, use a black marker to draw where the LEDs will go.  Now what I'm about to say is kinda hard to say with text, so bear with me. There is a specific reason why I put the LEDS in the manner that they are. You might be wondering, why didn't I put the LEDs sideways. Well the reason being is that The LEDs have a little notch on the cathode side. Since the LEDs are a tight fight, this little flat end on the cathode enables the other LED to push up right next to it. If they were laid out sideways, there would be no flat groove, and the LEDs would not sit all together flat on the board since they are too close to each other. Try it out, and you will see what I'm talking about. I HOPE you understand!

[1/21/13 UPDATE]

I added some photos of how the LEDs fit. The first picture is of them vertically, and the second is of them sideways(horizontally).



For more detail: How to make a LED 7-segment display with or without Arduino

### Internet Radio Using an ESP32

Dear friends welcome to another Instructable! Today we are going to build an Internet Radio device with a big 3.5” display using an inexpensive ESP32 board. Believe it or not, we can now build an Internet Radio in less than 10 minutes and with less than 30$. There is a lot to cover so, let’s get started!







A few months ago, I completed an Arduino FM Radio project which works great and looks even better in my opinion. If you want to see how I built this project you can read the Instructable here. The problem is that, although this radio looks cool it is not practical because I live in a small town in southern Greece and the big Greek radio stations I prefer to listen to, do not have transmitters around here. So, I listen to my favorite radios online on my laptop or tablet pc which is also not so practical. So, today I am going to build an Internet radio device in order to be able to listen to my favorite radio stations from all over the world!




https://youtu.be/eFs2ePMQz8c




You can observe that an initial iteration of the project is completed on a breadboard. Let's turn it on. The project is designed to connect to the Internet and play music from preselected Radio Stations.
I am currently listening to Real FM radio station in Athens and we can switch stations using these buttons. I stored my preferred radio stations in the ESP32's memory for convenient access. I am able to adjust the speaker's volume using this potentiometer. I show the Radio Station's Name on a large 3.5" screen with a vintage User Interface design while we listen. The project functions well and is simple to construct.




https://youtu.be/4bm22sN5hWE




You can build the same project in less than 10 minutes but you need to have some experience. If this is your first project, consider building a simpler one first, to gain some experience. Check my Instructables for simple project ideas and when you are more comfortable with the Arduino the electronics come back to build this cool project. Let’s now start building our own Internet Radio.



UPDATE 6/6/2019



The noise issue has been solved by adding an isolator transformer. Check out the updated shematic diagram. Thanks!



Step 1: Get All the Parts







We are going to need the following parts:




ESP32 ▶ http://educ8s.tv/part/ESP32
MP3 decoder ▶ http://educ8s.tv/part/MP3Decoder
Isolation Transformer ▶ http://educ8s.tv/part/AudioTransformer
Amplifier ▶ http://educ8s.tv/part/PAM8403
3W speaker ▶ http://educ8s.tv/part/3WSpeaker
3.5" Nextion Display ▶ http://educ8s.tv/part/Nextion35
Push Buttons ▶ http://educ8s.tv/part/Buttons
Breadboard ▶ http://educ8s.tv/part/LargeBreadboard
Wires ▶ http://educ8s.tv/part/Wires




The total cost of the project is around 40$ but if you don’t use a display the cost of the project is around 20$. Amazing stuff. We can build our own Internet radio with just 20$!



Step 2: ESP32 Board







The heart of the project is, of course, the powerful ESP32 board. If you are not familiar with it, the ESP32 chip is the successor of the popular ESP8266 chip we have used many times in the past. The ESP32 is a beast! It offers two 32 bit processing cores which operate at 160MHz, a massive amount of memory, WiFi, Bluetooth and many other features with a cost of around 7$! Amazing stuff!




https://youtu.be/Mq1YhgS5VkY




I suggest watching the detailed review that I made for this board. I have added the video to this Instructable. It will be advantageous to comprehend the reason this chip will permanently change the way we produce goods. One exciting feature of the ESP32 is its low-power deep-sleep mode, which only uses 10μΑs of current despite its impressive capabilities. This feature makes the ESP32 ideal for tasks requiring low energy consumption.
This project involves the ESP32 board connecting to the Internet, fetching MP3 data from the current radio station, and sending instructions to the display.



Step 3: MP3 Decoder







The MP3 data is received by the MP3 decoder module via the SPI interface. This module utilizes the VS1053 IC. This IC is custom-made hardware created for the purpose of decoding MP3 files. It retrieves the MP3 data from the ESP32 and quickly changes it to an audio signal.
The audio jack outputs a quiet and muffled sound, necessitating us to eliminate the muffle and increase the audio level. If you have headphones on, you don't have to worry about eliminating noise or amplifying the signal. I employ an Isolation transformer to eliminate noise from the audio and a PAM8403 audio amplifier to increase the audio signal before sending it to a speaker.



Step 4: Nextion Display








https://youtu.be/mVuy33FK9L0




I chose to use a Nextion display for this project since it is very easy to use. We only need to connect one wire to control it.



The Nextion displays are new kind of displays. They have their own ARM processor at the back which is responsible for driving the display and creating the graphical user interface. So, we can use them with any microcontroller and achieve spectacular results. I have prepared a detailed review of this Nextion display which explains in depth how they work, how to use them and their drawbacks. You can read it here , or watch the attached video.



Step 5: Connecting All the Parts







The MP3 data is received by the MP3 decoder module via the SPI interface. This module utilizes the VS1053 IC. This IC is custom-made hardware created for the purpose of decoding MP3 files. It retrieves the MP3 data from the ESP32 and quickly changes it to an audio signal.
The audio jack outputs a quiet and muffled sound, necessitating us to eliminate the muffle and increase the audio level. If you have headphones on, you don't have to worry about eliminating noise or amplifying the signal. I employ an Isolation transformer to eliminate noise from the audio and a PAM8403 audio amplifier to increase the audio signal before sending it to a speaker.



Each audio channel must go through the isolation transformer to clear any noise present before connecting to the amplifier.



To transfer information to the screen, we simply have to link a single wire to the ESP32's TX0 pin. Following the assembly, we must upload the code to the ESP32 and the interface to the Nextion display.
To transfer the GUI onto the Nextion display, simply move the InternetRadio.tft file that I will provide to an SD card with available space. Insert the SD card into the designated slot located on the rear of the screen. Next, switch on the screen, and the graphical user interface will be activated. After that, take out the SD card and reconnect the power.
Once the code has been loaded successfully, we can then activate the project. It shows the message "Connecting..." on the screen for a brief period of time. Upon establishing an internet connection, the project links to a specified radio station. The hardware is functioning as anticipated, now we need to focus on the software aspect of the project.



Source: Internet Radio Using an ESP32

### How to Make a PIP-Boy using an Arduino

You may be wondering, what is a PIP-Boy exactly? If you don't know, a PIP-Boy is a tool used by the main character in the well-liked Fallout video game series for navigating, detecting radiation, storing/playing data, and managing inventory. As a huge enthusiast of the franchise, I chose to create my own version, but not just a prop, I wanted a practical tool that I could actually utilize. This iteration serves as primarily a functional prototype and a foundation for future enhancements. My main aim is to construct a PIP-Boy 3000 completely from start, serving as my foundation to reach that level.

Hello, I'm also a huge enthusiast of Fallout! However, PIP-Boys appear nothing like that! Believe me, I understand. This prototype draws inspiration from both Pip Boy versions and computer terminals in the games.

However, hold on! If you are capable of producing this amount, why not proceed with constructing the 2000 or 3000A models as well? I won't simply purchase a plaster replica of the FO3 PIP-Boy 3000 Clock and insert an iTouch inside. I aim for a device that works well, not one that only appears to work well. I truly desire to create a model from the game, but I cannot afford to make exact replicas until I have more money. Should I be the winner, creating the PIP-Boys will be much simpler. I have been strategizing my personal open source hardware business for some time, and acquiring a 3D printer or good camera would greatly assist me. Cast your vote for me and I guarantee you will not be let down.

Take a seat, open a cold Nuka-Cola, and enjoy the Instructable. At the conclusion, you should have gained knowledge and skills to create your own Personal Information Processor Boy.

For those interested in getting started on the build, skip ahead to the section labeled Hardware.


Step 1: History and Features
So how did I design all this?

How did I transition from looking at device pictures on a computer screen to physically holding a real device? Perseverance, a well-defined timetable, and abundant hot glue. I believe I have played around 200+ hours since November, without counting the numerous hours I spent playing Fallout 3 and New Vegas for "research" ;) I divided the project into large sections and allocated specific daily tasks. I divided my tasks into two primary groups: software and hardware. After that, I divided everything into smaller sections, writing a function in one place, tweaking the speaker's layout in another, and so forth. This prevented a lot of mental exhaustion and irritation that can arise from working on a complex project. My daily objectives were clear and achievable for me, and observing the gradual advancements gave me a confidence boost that enhanced the overall sense of manageability. However, I was far from perfect in my execution, quite the contrary. I often delayed things for several days. I came across software bugs that kept me baffled for hours. I repeatedly gazed at my monitor, perplexed by a hardware design issue, yet I persisted. A quote I love now is, "Don't sacrifice your ultimate desires for immediate gratification," it's relevant to various life situations. It may be brief and concise, but it resonates deeply with me. My biggest desire is to enhance my skills as both an artist and engineer, to develop even more spectacular designs, and to eventually own my very own PIP-Boy, even though I often feel tempted to browse Reddit, watch Netflix, or sleep in. I could have invested a lot of money in research and design over the past half year.

Okay, enough motivational mumbo jumbo, so what can the prototype PIP-Boy 2000+ do? Although many of the functions of the devices are purely for game mechanic reasons, there are still quite a few functions useful to those of us in the real world. Here's a list of in-game features (based off of FO3 and FNV) and their status in development:

Automapping and waypoint navigation:  (Partially Complete) Waypoints and simple GPS navigation is relatively easy, automaps without advanced laser rangefinders/sonar is not possible . Currently only latitude, longitude, heading, speed, altitude, and number of satellites used are displayed.

Moral status and local reputation: (Not Implemented) These can't be automatically gauged, but the graphics would be trivial to add.

External interface to computers: (Partially Complete) The device must be disassembled in order to be reprogrammed, and no local data downloading is available for the time being. It would be neat to stick a decently sized flash drive in there, and even better if that information or the file system could be read on-screen.

Real-time health monitoring and feedback: (Not Implemented) there's certainly no way to measure the health status of specific body parts or automatic notification of addiction, but I suppose the next best thing might be to add a heart rate monitor, although this would require the external chest strap. An accelerometer/pedometer to gauge steps taken and as a simple fitness measurement wouldn't be too hard to add too.

Inventory status and item condition: (Partially Complete) I see no way for this to be automatic, but this version has RFID-reading capabilities, so some form of inventory management would be possible with unique tags for items, however crude.

Character level and experience: (Partially Complete) As the only real world task the PIP-Boy can be aware of is discovering a new location, that is the only way to "gain experience." Although purely for fun and no practical reason, I  could set this to gain experience/levels by traveling and have the user get to distribute skill points. Of course, you could always cheat since you have access to the code and could have whatever stats you wish, but that's no fun ;) Perks are not implemented.

Ambient radiation measurement and  level of irradiation: (Partially Complete) There is a small working Geiger-counter module, but this is also for fun and should by no means be used for situations in which serious radiation detection is necessary. Measuring how much of a dosage you have absorbed in RADs is also impractical.

Flashlight:(Complete) Just like in the game, the prototype has an "overbright" mode, although the LCD is not terribly bright, it does glow decently. For another version, I'm considering just popping in some high-power LEDs for some serious luminosity.

Time stopping/auto-targeting: (Not Implemented) Although awesome, V.A.T.S. is, for many reasons, ridiculously fictional, but I'd be interested to see what could be done with an IMU and a web cam/Kinect sensor strapped to a "weapon" pointed at a specially colored or marked target. I imagine a computer could determine the probability of a hit based on the current vectors of angle and acceleration of both the weapon and the target. This couldn't be handheld, but would make for an interesting computer vision project.

Wrist-mounted: (Not Implemented) This version is handheld

Data storage and playback: (Not Implemented) No internal storage or audio playback for now, I've already designed holotape cases, but it's too cost prohibitive to make them the way I want to make them for now.

Radio: (Not Implemented) This will be added at later version.

Clock with date and time: (Not implemented) Time and date can be read from the GPS, but I plan to use a RTC for when the GPS is disabled.

Screensaver: (Partially Complete) It doesnt come on automatically, but you can switch to a mode that displays the falling bomb screensaver that is pretty much identical to to the graphic from the first two games.

Unlimited battery life: (Not Implemented) If only fission batteries were real! This version runs on 6 humble AAs.
Step 2: Hardware
Before we delve into constructing the device, I want to first discuss the key components and the reasons behind my choice.

Display: The screen is the central feature of the PIP-Boy, and I required a display that could show all the desired data simultaneously. The initial model had a 320 by 240 pixel LCD screen, but it was too small, so I switched to a 4.3 inch 480 by 272 pixel LCD from 4D Systems (similar to a SONY PSP in resolution/dimension). I selected this specific screen because it offered enough resolution for text and graphics in a good size. The LCD display is capable of displaying full color, but I am opting to use only green hues against a black background to mimic the appearance of traditional CRT monitors. Additionally, this screen (similar to their other products) features an integrated 16-bit processor (specifically the Picaso GFX-2) that handles all the detailed interactions with the LCD and includes numerous pre-installed graphic capabilities. This significantly simplifies the majority of projects and is the reason I frequently utilize their displays. It also features a small internal speaker and can play .WAV files! The processor operates on a unique language named 4DGL that closely resembles C or Processing, making programming not overly challenging. On the other hand, the screen can be operated via serial commands from a main processor, although we do not plan to utilize this function.

Auxiliary Processor: I chose to use an Arduino Duemilanove with an Atmega 328 as I'm familiar with using them and it can handle the GPS data more easily than the LCD. For now, I've used up all the available memory on the Picaso processor, so the Arduino picks up the slack and will also do more of the hardware interfacing in the future.

GPS:  I chose the Adafruit Ultimate GPS because it's small, high quality, cheap (for a very decent GPS) and well documented like all Adafruit products.

RFID: I chose the RFID-12 from Sparkfun, as it's a tiny self contained module with a built in antenna, and it's dead simple to use. Just power it up, hold up a tag, and out pops the ID over 9600 Baud serial. This is used as a security feature for this version, but I plan to upgrade it to "equip/unequip" items. For what purpose? Nothing practical, but it'd sure be cool.

Input:I discovered the primary input to be a small 8 position rotary switch while searching through the Electronic Goldmine. Despite being in excess, this mil-spec component is top-notch with a sturdy metal body and contacts plated in gold, all for under $3. I came across a small square glowing pushbutton on their website that looked very similar to the "power" indicator on the in-game terminals, it even shines in orange! I utilize this for enabling the "Overbright" mode rather than its general input purposes. Additionally, I added two rotary encoders for increased input options. Regrettably, I chose to prioritize programming the rotary encoder interface last. However, I am unable to make use of them until I enhance my 4DGL code due to running out of available code space :/ The power switch, which is a key lock, was a budget-friendly find from Elec-Goldmine and appears suitable for a military device. This also stops unintended activation or operation by individuals without the key. Unlocking it with a bobby pin and screwdriver is not possible. I attempted :P

For those wondering about my skill level and how I learned to do this, I must admit that I still see myself as a beginner. I've had an Arduino for several years, but only started dedicating myself to projects about one year ago. I have satisfied my curiosity and improved my abilities by reading a majority of the Make, Sparkfun, Hack a Day, and Adafruit tutorials, in addition to numerous small miscellaneous blogs and personal websites of creators and innovators from all over. If you are finding this project challenging, remember that this was also my debut in creating a lasercut case and using GPS modules. Progress by pushing yourself with challenging projects, and you'll surpass your expectations and handle similar tasks effortlessly in the future.

I made an effort to search for components that were easily accessible and affordable for the required features. You only need to order from a small number of suppliers - Sparkfun, 4D Systems, Radioshack, The Electronic Goldmine, TAP Plastics, and Ponoko - for the basic model. I have provided direct links to most of the components, making it easy for you to purchase the same parts used in this project. The total cost of all the materials needed for the base model should be approximately $300, depending on what you currently have available.



Electronic Components and Hardware:

(3x) scrap metal
(4x) scrap electronics
fission battery
duct tape
wrench
sensor module...Just kidding! If only it were that easy... Here's the real parts list:

uLCD43 (I ordered mine from this US distributor)
Adafruit GPS (The one I own was slightly older, but now they've upgraded to a module that now has built-in data logging!)
Arduino Duemilanove (or UNO, just as long as it has an Atmega 328)

(11x) 10k ohm resistor
220 ohm resistor
(4x) 6-32  3" machine screws (I picked mine up at Lowes)
(4x) 6-32 nuts
(8x) 4-40  1/2" machine screws
(8x) 4-40 nuts
9V battery clip (the kind that holds it in place, not the little power snaps)
1/8" shaft diameter knob (I bought this assortment and chose the largest)
12mm^2 illuminated pushbutton switch (the one I used is no longer sold by the Electronic Goldmine :(
(here's a replacement that should fit the dimensions of the hole, although this one has a round button)
8 position rotary switch
key lock switch
double sided foam tape
mini protoypting board
1/8" thick 2 5/8" W x 4" L polycarbonate sheet (abrasion resistant)

OPTIONAL UPGRADE PARTS **************************************************************************************
Geiger Counter: I originally purchased this module when it was cheaper, but here's a similar one still sold at the Electronic Goldmine
(2x) rotary encoder with (2x) 1/4" shaft diameter knobs (I preferred some that I picked up at Radio Shack to the default Adafruit ones)
1" speaker
sculpter's mesh (thin metal wire sheet with a little diamond pattern, available at most arts and crafts stores)
RFID-12 module and matching breakout board
RFID-button tag

**************************************************************************************

Tools and Supplies:

small screwdriver (flathead or phillips depending on what screws you use)
black electrical tape
computer running Windows OS (unfortunately this is necessary for one of the programs)
SD/MicroSD card reader (I just plug mine into an SD adapter and into my printer)
USB-A to USB-B cable
MiniUSB cable
USB to TTL serial board
helping hands
hobby knife
soldering iron
solder
hot glue gun w/ plenty of glue
wire (I use this 22 gauge wire)
female-female jumpers
wire cutters/strippers
multimeter
heat shrink tubing
rotary tool (Dremel etc.)
lighter or heat gun (I just got my hands on a Heaterizer XL 3K from Sparkfun. I enjoy it way too much ;)
respirator
sandpaper/sponge
paint primer
military green spray paint (I used Krylon "Camo")

Skills Necessary:

Soldering
Power tool safety
A steady hand

This is by no means a beginner project (You'll need a Repair Skill of 50 and a Science Skill of 40 :P ), but don't be discouraged! To successfully build this project you must be familiar with basic electronics. While this model requires very little soldering, you should know the difference between a pull-up or pull-down resistor and not be confused by terms like COM, VCC, GND etc. As  I intended this for people with intermediate skills in electronics, I won't show every single step of the circuit building process, but I will explain the schematic as best I can and my design considerations for each part. If you don't have any experience working with electronics and soldering, check out these great Instructables as a primer!

Major Components in ProjectArduino Duemilanove

(3x) scrap metal
(4x) scrap electronics
fission battery

 

For more detail: How to Make a PIP-Boy using an Arduino

### ESP32 Internet Radio

The affordable MP3 VS1053 codec processor available on aliexpress.com is said to have the ability to decode different music formats such as Ogg Vorbis/MP3/AAC/WMA/MIDI audio. VS1053 can also record in Ogg Vobis file, but the available guidance online is mainly for proprietary boards or ESP32-IDF, which is not recommended due to the amount of coding required. A code with over 20 lines is sufficient to make me travel a distance of 100 miles!
The Idea
The idea driving the project is that by sending a 32-byte chunk of streaming data to the board continuously, it will continue playing without interruption.

This implies that the ESP32 will establish a connection with the streaming site on a specific port and subsequently receive the streaming data in precise 32-byte chunks. However, the board will continue to process the data as if it were a machine for inflow/outflow, while the stream will persist in its activity.

The primary code is just under 15 lines in length!
Construction
The ESP32 VS1053 library, which is open source, comes with several examples for reference. I have utilized a GPIO (D13) pin as a push-to-on switch for changing stations by performing a soft Reset on the VS1053 board to switch to the next station. To ensure smooth operation without bouncing, I added a boolean operator to switch between 'false' and 'true' to avoid multiple switches with a single button press.

You can easily modify VS1053 to run on 3.3 volts, even though it is originally a 5Volt device. On the ESP32 radio, you will only need a single supply voltage of 3.3 volts, which can be powered by a single LiPo battery. The VS1053 board has two voltage regulators, providing outputs of 3.3 volts and 2.5 volts labeled as [AM1117]. Using a digital multimeter, identify the functions first, then link a jumper wire from 3.3 volts to the input of the 2.5 volts regulator, converting the lead to a 3.3 volts input for the board.


VS1053 wiring
Try to minimize the length of the connecting wires. Extended and intertwined wires could result in a buzzing sound in the sound output, a common issue with this type of circuit boards. The output sound is in stereo and loud enough to drive small speakers or headphones, but to use larger speakers you might need to include amplifiers/amplifier boxes.
Construction hurdle
A fully charged Li-Ion / Li-Po battery can increase the voltage to 4 without risking damage to the ESP32, but it may cause the VS1053 board to fail and require a 40-day wait for a replacement from aliexpress.com. Thus, it is advisable to utilize a low power, low loss HT7333-1 3 pin voltage regulator with minimal drop in voltage and minimal quiescent current loss. However, the issue lies in the fact that HT7111-1 is a small surface mount component.
Schematic with ( OLED – Optional)

Prototype

Testing
To connect to the WiFi system, update the SSID and password at the start of the code and then upload it using the regular Arduino method. After being uploaded, the ESP32 will initially greet with 'Hello' to show that the VS1053 is operational. It will then hold off for a few seconds for the computer's serial output to connect. After connecting online, it will switch to the designated station and begin streaming the lovely Beatles music. Activate the switch linked to D13 one time and the following station will be selected. The variable char *sname[7] is not required. You are able to select names for each radio station that is programmed. More station names can be included in the arrays for host, path, and port.

ESP32 Radio with OLED (Optional): The only issue remaining is the absence of a screen to indicate the current station playing! Now, the only thing needed to finish it all is an I2C universal display. However, using both the heavyweight Adafruit SSD1306 and Adafruit_GFX library together will cause the sound to be unpleasant. Hence, I employed a small SSD1306 library called esp8266-oled-ssd1306-master designed specifically for ESP8266 to operate SSD1306 OLED screens. This library enables the I2C display to function properly without impacting the audio output. Nevertheless, the OLED is not required - The radio functions perfectly even in its absence!
BOM
ESP32 $7.5
OLED 64*128 – $3
VS1053 codec shield – $6
HT-7333-1 -$1
8 Ohm speakers (0.3 watt) extra.
Softwares
Two sketches available - bare_minimum_radio_player.ino & simple_esp32_radio_mod3.ino The former consists of minimal code to receive 32-byte data from a streaming website and play it back. The second design involves a detailed plan to operate the radio with an OLED screen and a push-to-on button for station selection. Every sketch comes with a 'helloMP3.h' file that contains code for a short music or sound greeting. Compile the drawing with this document.

The essential Arduino libraries are included in the software package as well.
Download source folder

### Efficient Plant Care: Arduino-Based Automatic Watering System

Greetings to all, we are glad to have you back on our website! This time around, we are showcasing a superb project: the automated plant watering system. With this project, we use technology to help plants grow on their own. After one month of being put into action, we noticed significant advancements in the growth of the plants.

Here, we will outline our extensive research process, explaining the steps we took to reach our outcomes. If you want to make your own smart irrigation system with Arduino, read our article. We will offer all the required details, covering the building stage as well as the coding part. Let's jump in immediately and begin.
Automatic plant watering System Introduction
Listed below are several plants kept in containers that have sensors and a device for automatically dispensing water. These sensors observe soil moisture levels to maintain the ideal water supply in the pots. In this smart irrigation system, a water pump turns on to provide specific amounts of water when the plants need it. Once the plants get the right amount of water, the water pump stops automatically.

This system acts as an automated plant watering system, utilizing soil moisture sensors that can detect moisture levels in the soil. The sensors are connected to a relay system, turning on the water pump when necessary to keep the soil at optimal moisture levels.

The smart irrigation system is a cutting-edge and advanced method of irrigation that greatly decreases the reliance on manual labor and saves time, along with other advantages. In this setup, we have chosen three different plants, each with different levels of water needs. The "snake plant" is a popular choice due to its low water requirements - it can thrive without daily watering and can last over two months without water even during winter.

Another plant being thought about is the "sadabahar" (periwinkle), which requires watering every day. The cordyline plant, the third one mentioned, has moderate water needs compared to the other two plants.

A water pump has been integrated into the system for the water supply. Furthermore, we are working on a water level sensor for the reservoir, showing the amount of water left on the screen that is incorporated into the system.

Currently, we are calibrating all sensors according to particular specifications. Every plant sensor comes with unique threshold values, which result in different readings based on the soil conditions. The system will show important details like soil conditions and water source level on the 16X2 display for all sensors.
Construction of Automatic plant watering system
In order to create this remarkable Smart Irrigation project, specific components need to be connected and assembled in a particular configuration. To begin, we're sharing the list of required components.


Components Required
Arduino Nano - 1 unit
Three soil moisture sensors - 3 units
Three 5V water pumps - 3 units
Wires
Universal prototype PCB board
Water pump compatible piping
Three plant pots
16x2 Display
Ultrasonic sensor
10k Potentiometer
Berg strip
Construction:
Initially, produce a PCB using zero PCB following the provided circuit diagram.

Subsequently, attach all the soil moisture sensors. Once the sensors are connected, monitor their output through the serial monitor. You should observe varying values ranging from 0 to 1000.

Following this, proceed to link the display and the relay that will activate the pump. Connect the mini water pump to the relay according to the circuit diagram.
Automatic plant watering Circuit Diagram


Smart irrigation Code / Automatic plant watering Code

const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceCm, distanceInch;
#include // initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs =8 , en = 7, d4 = 3, d5 = 4, d6 = 5, d7 = 6;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
// put your setup code here, to run once:
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
lcd.begin(16, 2);

}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm= duration*0.034/2;
distanceInch = duration*0.0133/2;
int soil_moisture = analogRead(A0);
int soil_moisture_2 = analogRead(A1);
int soil_moisture_3 = analogRead(A2);
Serial.print(soil_moisture);
Serial.print(" ");
Serial.print(soil_moisture_2);
Serial.print(" ");
Serial.println(soil_moisture_3);

int z= map(soil_moisture, 0, 1023, 100, 0);
int z_2= map(soil_moisture_2, 0, 1023, 100, 0);
int z_3= map(soil_moisture_3, 0, 1023, 100, 0);
//Serial.print(z);
//Serial.print(" %");
//Serial.print(" ");
//Serial.print("Distance: ");
int a = map(distanceCm, 0, 17, 20, 0);
//Serial.print(distanceCm);
//Serial.println(" Cm");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SM1");
lcd.setCursor(0, 1);
lcd.print(z);
lcd.setCursor(3, 1);
lcd.print("%");
lcd.setCursor(6, 0);
lcd.print("SM2");
lcd.setCursor(6, 1);
lcd.print(z_2);
lcd.setCursor(9, 1);
lcd.print("%");
lcd.setCursor(13, 0);
lcd.print("SM3");
lcd.setCursor(12, 1);
lcd.print(z_3);
lcd.setCursor(15, 1);
lcd.print("%");
delay(300);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WATER LEVEL");
lcd.setCursor(12, 0);
lcd.print(a);
lcd.setCursor(14, 0);
lcd.print("Cm");
delay(300);
if(soil_moisture>500)
{
digitalWrite(2,LOW);
}
else
{
digitalWrite(2,HIGH);
}
if(soil_moisture_2>280)
{
digitalWrite(11,LOW);
}
else
{
digitalWrite(11,HIGH);
}
if(soil_moisture_3>700)
{
digitalWrite(12,LOW);
}
else
{
digitalWrite(12,HIGH);
}
}

Before establishing the connection, ensure that the provided code is uploaded to the Arduino. Making the connection prior to uploading the code might cause damage to the GPIO pins.
Working on automatic plant watering system project
The functionality of this smart irrigation system is both straightforward and fascinating, divided into three key segments: input, processing, and output. For input, we utilize a soil moisture sensor and an ultrasonic sensor. The soil moisture sensor's role is to identify the moisture content in the soil, while the ultrasonic sensor is employed to gauge the water level within the reservoir, enabling us to efficiently water the plants.

We've conducted research on three distinct plants, each with unique water needs:

1. Periwinkle (sadabahar) requires daily watering. It's a small plant with green leaves and purple-pink flowers.
2. Cordiline needs watering twice a week, but this frequency may vary based on weather conditions. In winter, it can survive with just one watering per week.
3. Snake plants' water needs change with the seasons. During summer, they can thrive with watering once every four weeks, while in winter, they can survive for 2-3 months without water.

Based on these varying water requirements, we've programmed sensors and an Arduino to cater to each plant's specific needs. For instance, if a snake plant needs less water, we've adjusted the sensor to detect the lowest moisture level for it. Similarly, we've calibrated the sensors for the other two plants according to their individual water requirements.

The subsequent step involves integrating the ultrasonic sensor, which serves the purpose of detecting water levels within the reservoir and displaying notifications on the LCD screen. In our automated plant watering system, we aim for complete automation to minimize human intervention. The ultrasonic sensor consistently checks the tank's water levels and relays this information to the LCD display. Additionally, a buzzer can be connected to this setup. If you're interested in incorporating IoT features, we have several other projects related to smart irrigation. You can refer to these projects for ideas on adding IoT functionalities to enhance the system.
PCBWay PCB Prototyping Services
The complete circuit has been constructed on a breadboard. As you're aware, a breadboard setup isn't optimal for this particular project. Hence, PCBWay provides a Rapid PCB Prototyping service designed for research endeavors. I advocate for PCBWay based on the ability to swiftly deliver your initial boards within a 24-hour timeframe, allowing for a faster project initiation.

The phase of prototyping stands as a pivotal period for engineers, students, and enthusiasts alike. PCBWay doesn't just accelerate the production of your boards; it ensures accuracy and cost efficiency. This significantly cuts down costs and streamlines the development timeline for your electronic projects.

From 2 Layer PCBs to cutting-edge HDI and flex boards, PCBWay offers a wide range of PCB variations tailored to diverse functionalities and application domains. I'm truly impressed by the board quality, the prompt delivery, and the cost-effectiveness of PCBWay's services.
Advantages of smart irrigation / Automatic plant watering project
This system eliminates the need for daily manual plant watering, saving you time. The project autonomously waters the plant, reducing human effort.

Significantly conserving water, the smart irrigation setup delivers precise amounts required by the plant, avoiding excess water usage. It extends its utility to farming practices, presenting potential use at a corporate farming level.
Disadvantages of smart irrigation / Automatic plant watering project
It requires a constant power supply; it cannot operate without electricity.

Over time, the soil moisture sensor tends to corrode.

If the system malfunctions, it could potentially harm the plant.

### DIY FSK RFID Reader using Arduino

This page explains how to build an RFID reader with just an Arduino (Nano 3.0 was used in testing, but other models may be compatible), a wire coil made by hand, and various affordable common components.


Credits
The hardware and software designs for this project are based in part on the ideas, code and schematics posted by Micah Dowty here and Asher Glick here.
Background
RFID readers are devices sold by companies such as Parallax to read RFID tags with embedded identification circuits (we focus here on passive tags, activated by the reader's transmitted RF energy). The design presented here shows how to wind a simple wire loop by hand (or create an equivalent printed circuit spiral version), connect it to an Arduino (or its chip), add a few low cost common components and create your own RFID reader. To make it more interesting (i.e. challenging), we will focus on the FSK class of RFID tags, which are fairly common among the 125kHz devices, but for some reason are not supported by the Parallax kits.

Micah Dowty has shown a design for an FSK/ASK RFID reader built around a Parallax Propeller device. His code, which is in assembly language, implements an ingenious (but complex) algorithm to create a dynamically variable analog bias voltage, which is used to pull the weak RFID signal into range, so it can be discriminated into binary signals by the Propeller's digital input circuitry. He also dynamically tweaks the transmit/receive RF frequency to keep the antenna's tank circuit in peak resonance for optimal signal to noise. There are three problems with his approach: first, the passive detection circuit lacks amplification, which makes it very sensitive to noise and therefore raises reliability issues. Second, the design is based on the Propeller chip, and if you are a fan of the Arduino and/or associated Atmel AVR chips, it leaves you out. And third, the dynamic slewing of frequencies and bias voltage is overly complicated, making it hard to debug. His general concept is attractive, however: use a microcontroller chip and wind your own wire loop to create, with some simple components and appropriate code, a complete DIY RFID reader.

Asher Glick has presented a solution for reading and decoding FSK RFID tags using the Arduino/AVR family (which he calls AVRFID), which is good except it apparently requires obtaining and modifying an existing Parallax RFID reader device (which natively only supports ASK).

Our goal here is to present a simple solution for reading FSK tags which addresses the above shortcomings: make it robust and reliable for real-world noise environments, base it on the Arduino, and build the RFID reader ourselves using a few simple low-cost parts, rather than buying and/or modifying one.
Circuit
Arduino DIY FSK-RFID circuit diagram:

The circuit diagram above was derived from the "World's Simplest RFID Reader" design posted by Micah Dowty. Based on the Parallax Propeller, Micah's approach was to use passive components only, without amplification, in order to achieve the ultimate in simplicity. The lack of amplification, however, results in a weak signal, potentially less than 2V PTP. This signal is then biased by an analog level produced by the Propeller, to try to maintain the signal's DC level near the discrimination point of the Propeller's binary-digital input circuitry. His code attempts to dynamically calculate that optimal midpoint level, and feed it into the circuit using a filtered PWM DAC output. Since the signal is weak, it can be distorted by interference and noise, with results in reduced reliability. The circuit presented here includes (as Micah suggests in his documentation) one active component: a common low-cost LM234 quad-opamp IC (or equivalent). This addition provides several significant advantages, at a negligible cost. First, the signal is amplified (using one of the four opamps on the IC package) to a more noise-immune level (of 2-3 volts PTP). Second, the DC level of the signal is maintained at exactly Vcc/2 using another opamp on the IC, which eliminates the need for the DC propping code in the Arduino. Third, having the signal amplifier in place allows another low-pass RC filter stage (another capacitor and resistor), which makes the final discriminated digital signal cleaner and more reliable. The end result is a more robust detected signal with improved noise immunity.

Major Components in ProjectArduino

For more detail: DIY FSK RFID Reader using Arduino

### Custom Large Font For 16x2 LCDs using arduino

I started learning Arduino a couple of years ago and started playing around with a 16x2 LCD display that uses the Hitachi HD44780 chipset. I soon found out that the screen provides 8 character slots that are customizable. I found a project in which someone used the slots to create their own special characters, which could then be used to make a big character font using both rows of the screen. I didn't find those characters attractive and couldn't comprehend the script written by that individual. So, I decided to create my own collection and use my limited programming skills to create a more user-friendly design for my large character font.

In this guide, I will show how I made my complex character font and streamline the drawing for easier understanding. To begin with, it is essential to set up the Arduino and LCD.



Materials Needed:

- Arduino (i used a Nove)
- Hitachi HD44780 based 16x2 LCD
- Breadboard
- 5K Potentiometer
- button or switch
- jumper wires
Step 1: Connecting the LCD to the Arduino
Initially, I will discuss the process of linking a Hitachi HD44780-based LCD display to an Arduino. Your initial task is to locate Pin 1 on the display and determine the necessary pins. The initial image depicts a basic arrangement for linking the LCD to your Arduino. This is the pin configuration for the LCD.

 	Pin 1 - Grd
 	Pin 2 - VCC
 	Pin 3 - Vee (controls screen contrast)
 	Pin 4 - RS (controls where in the LCD's memory your writing too)
 	Pin 5 - RW (controls weather your Reading or Writing to the LCD)
 	Pin 6 - E (enables writing to the register)
 	Pin 7 - D0 (not used)
 	Pin 8 - D1 (not used)
 	Pin 9 - D2 (not used)
 	Pin 10 - D3 (not used)
 	Pin 11 - D4
 	Pin 12 - D5
 	Pin 13 - D6
 	Pin 14 - D7
 	Pin 15 - LED+ (LCD back light)
 	Pin 16 - LED-  (Grd)

My LCD had only 15 pins, which is okay because the 16th pin should be connected to ground regardless. In the image, Vee is connected to a potentiometer. This regulates the screen's contrast. The data pins are the separate bits that you are either writing to or reading from the register.

I decided to wire mine up differently in order to keep things simple. I prefer utilizing ribbon cable to minimize wire clutter whenever feasible. It also makes it much easier to keep track of connections.

 	RS pin to D7
 	E pin to D6
 	D4 pin to D5
 	D5 pin to D4
 	D6 pin to D3
 	D7 pin to D2
 	V0 tied to a pot to control brightness
 	Grd and R/W tied to ground
 	Vcc to +5V
 	pin 15 to push button/switch that is tied to ground for control of back light

With everything connected we can now go over how i created the fonts.
Step 2: Numerical Font Design
It was now the moment to think about the font's design. What divisions do I need to make in order to create a visually striking and attractive font for this display?

My goal was to start with a simple task and address the numbers initially. I believed people would be looking for a big, high-quality font for their Arduino-based digital clock or a similar project. So, I started by making the number 8 since all the components of 8 can be put together to create different numbers. This utilized just 6 personalized blocks. Another unique block was needed to display a 0, 1, and 7.

The images show the first batch of numbers that I created. Modifications were made to the personalized blocks to enhance the look of the digits. I will show them later on.
Step 3: Letter Font Design
Once I completed creating the numbers, I moved on to making letters. I got asked by people for letters often seen in Temp, RPM, and Speed displays. I went on to form the complete alphabet. To achieve the desired look, I had to make use of the final custom character block that was accessible.

The images show the first batch of letters that I made. Various modifications were carried out on the customized blocks to improve the look of the letters. I will present them in the upcoming phase.


Step 4: Refining the Look
I found the curves on the first letters I created to be too pronounced for my taste. I eventually learned how to access the various predefined characters that the LCD is capable of displaying. I examined the Data sheet of the Hitachi HD44780 driver to check the available characters. I noticed the last character was solid, so I decided to use it with the custom characters. I also need the empty space right above the solid block. I made slight adjustments to the custom characters I created before we started working on a sketch.

Watch this video displaying the authentic characters moving along the screen. Some changes have been made since the video was recorded.

For more detail: Custom Large Font For 16x2 LCDs

### Game & MINTIA

This instructables show how to use a tiny sweet box to make a NES console.




https://youtu.be/-ehaDDSYJaE




Supplies



TTGO T7 v1.3



https://www.aliexpress.com/af/Ttgo-t7-v1.3.html?d=...



1.54" ST7789 IPS LCD



https://www.aliexpress.com/af/1.54-st7789.html?d=y...



Lipo 303040



https://www.aliexpress.com/af/lipo-303040.html?d=y...



MAX98357 I2S DAC audio breakout board



https://www.aliexpress.com/af/max98357.html?d=y&or...



10*18 mm speaker



https://www.aliexpress.com/af/1018-speaker.html?d=...



Thin Prototype PCB



https://www.aliexpress.com/af/lipo-303040.html?d=y...



Four 6.2*6.2*5 mm Tactile Switches



https://lcsc.com/product-detail/Tactile-Switches_D...



Two 12*12*4.3 mm Tactile Switches



https://lcsc.com/product-detail/Tactile-Switches_D...



Four 6*3.5*5 mm Tactile Switches



https://lcsc.com/product-detail/Tactile-Switches_D...



Step 1: What Is MINTIA?









MINTIA is a multi favor tablet produced by Asahi Group Food, Ltd. in Japan since 1996. The sweet box design make it very easy to take one and only one tablet out when put off the cover, you can see the demo video how it works. MINTIA is very popular in Japan, it even have many 3rd parties tailor-made leather case for MINTIA.



The sweet box is very thin and the tablet outlet is very fit for the micro USB plug. MINTIA is over 20 years old, micro USB plug not yet born at that time! What a coincident!



4 years ago, I would like to squeeze all electronic components in it to find out how much it can be. This is the 3rd projects I built on MINTIA sweet box.



Asahi MINTIA page:



https://www.asahigroup-holdings.com/en/brand/minti...



MINTIA official Facebook page:



https://www.facebook.com/mintia.jp



My previous Mintia projects:



https://www.instructables.com/Arduino-MINTIA-Game-...



https://www.instructables.com/IoT-LED-Matrix/



Step 2: Sweet Box Patch









I would like to hide the NES console under the MINTIA sweet box, so I will keep the original front face unchanged. All magic hide at the back ;>



First of all I need consume all 50 MINTIA tablets. It is an easy job, I can consume box of it every week. Then remove the back face sticker. MINTIA box is well designed, front and back part assembled without glue. So it is very easy to tear apart after put off the tablet outlet cover. I would like to utilize all space in the box, so I will cut out all the internal supports.



Now I can squeeze all components inside it.



Step 3: Design Back Face Layout









I would like the NES console look like the Nintendo classic "Game & Watch" series. So I selected a red MINTIA sweet box. Then I use a gold color paper as a cover. Landscape layout, screen at the middle, direction buttons on the left, select and start buttons at the bottom and 2 big buttons on the right. Besides the standard NES buttons, I also require 2 more buttons for save and load status. So I add 2 more small buttons on the upper right.



Step 4: Hardware Selection









ESP32 Dev Board



This NES console is based on my previous instructables, Arduino NES, so it require a ESP32 dev board. Not much dev board can fit into the sweet box, TTGO T7 v1.3 is the small enough one after removed the Lipo Battery socket. The limitation is it does not have PSRAM, it limited the NES ROM can play.



Lipo Battery



The Lipo capacity direct limited the console playing life time, so it should be as big as possible. Exclude the room for the ESP32 dev board, there are still enough room for a 30 x 30 x 40 mm 360 mAH Lipo battery. I think it can last over an hour.



Display



1.54" inches square display, ST7789 IPS LCD, is the largest display that can fit in MINTIA and still have enough room remain for the buttons.



Audio board



ESP32 can use internal DAC or external I2S DAC. Internal DAC still require an extra amplifier to drive a speaker and external have better sound quality, so I choose external I2S DAC amplifier board. No any I2S DAC audio breakout board can fit in the remaining room, so I need patch from a MAX98357 board.



Speaker



After MAX98357 patch, there are still have enough room can fit in a 10*18 mm speaker.



Prototype PCB



Normal PCB is too thick, we need a special thin (<= 1 mm) prototype PCB for holding the display and buttons.



Buttons



For better playing experience, this time I selected some light touch (125 gf / 160 gf operating force) tactile switches from Diptronics.



Step 5: Fix Dev Board & Lipo










Direct soldering Lipo to the original Lipo socket power pins
Use hot glue fix the dev board on the sweet box and align the USB socket in the right place (beware hot glue should not touch any GPIO pins)
Use a little bit hot glue fix the Lipo battery
Double check the sweet box back cover can reassemble without problems




Step 6: I2S DAC Board Patch









The MAX98357 board is a tiny square board but it still cannot fit in the sweet box. The upper part is the speaker connector and no any other electronic components. I will cut it out for saving space. The speaker still can connect by soldering the node between 2 capacitors as show in second photo. Then use hot glue fix in the sweet box and double check the sweet box back cover can reassemble without problems.



Then it is the soldering work, here are the connection summary:



ESP32        -> MAX98357
=====           ========
GPIO 15(TD0) -> LRC
GPIO 13(TCK) -> BCLK
GPIO 14(TMS) -> DIN
5V           -> Vin
GND          -> GND
             -> 100k Ohm resistor -> Gain (optional for 15 dB gain)




Ref.:



https://datasheets.maximintegrated.com/en/ds/MAX98...



Step 7: Early Test



After connected the first component, I2S DAC, I would like to check is it works. So switch to software part first.



Step 8: Software Preparation



Arduino IDE



Download and install Arduino IDE if you are not yet do it:



https://www.arduino.cc/en/main/software



ESP32 Support



Follow the Installation Instructions to add ESP32 support if you are not yet do it:



https://github.com/espressif/arduino-esp32



Arduino ESP32 filesystem uploader



Follow the installation steps to install Arduino ESP32 filesystem uploader if you are not yet do it:



https://github.com/me-no-dev/arduino-esp32fs-plugi...



Arduino_GFX Library



Download latest Arduino_GFX libraries: (press "Clone or Download" -> "Download ZIP")



https://github.com/moononournation/Arduino_GFX



Import libraries in Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add .ZIP Library" -> select downloaded ZIP file)



Arduino Nofrendo Library



Download latest Arduino Nofrendo libraries: (press "Clone or Download" -> "Download ZIP")



https://github.com/moononournation/arduino-nofrend...



Import libraries in Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add .ZIP Library" -> select downloaded ZIP file)



Step 9: Configuration




Open esp32-nofrendo sample code in Arduino IDE ("File" -> "Example" -> "arduino-nofrendo" -> "esp32-nofrendo")
Save as a new project
Change hardware parameters:




hwconfig.h around line 69, select SPIFFS



// Uncomment one of below, ESP32 support SPIFFS SD_MMC and SD
/* SPIFFS */
#define FILESYSTEM_BEGIN SPIFFS.begin(false, FSROOT); FS filesystem = SPIFFS;
/* 1-bit SD mode SD_MMC, always retry once for begin() failed */
// #define FILESYSTEM_BEGIN (!SD_MMC.begin(FSROOT, true)) && (!SD_MMC.begin(FSROOT, true)); FS filesystem = SD_MMC;
/* 4-bit SD mode SD_MMC, always retry once for begin() failed */
// #define FILESYSTEM_BEGIN (!SD_MMC.begin(FSROOT, false)) && (!SD_MMC.begin(FSROOT, false)); FS filesystem = SD_MMC;
/* SD using default SPI settings */
// #define FILESYSTEM_BEGIN SD.begin(22 /* SS */, SPI, 8000000, FSROOT); FS filesystem = SD;
/* SD using custom SPI settings */
// #define FILESYSTEM_BEGIN SPIClass spi = SPIClass(HSPI); spi.begin(14, 2, 15, 13); SD.begin(13, spi, 8000000, FSROOT); FS filesystem = SD;




hwconfig.h around line 81, set I2S DAC pins



// enable audio
#define HW_AUDIO
#define HW_AUDIO_EXTDAC
#define HW_AUDIO_EXTDAC_WCLK 15
#define HW_AUDIO_EXTDAC_BCLK 13
#define HW_AUDIO_EXTDAC_DOUT 14
#define HW_AUDIO_SAMPLERATE 22050




hwconfig.h around line 89, setting controller GPIO



/* controller is GPIO */
#define HW_CONTROLLER_GPIO
// #define HW_CONTROLLER_GPIO_ANALOG_JOYSTICK
// #define HW_CONTROLLER_GPIO_REVERSE_UD
// #define HW_CONTROLLER_GPIO_UP_DOWN 34
// #define HW_CONTROLLER_GPIO_REVERSE_LF
// #define HW_CONTROLLER_GPIO_LEFT_RIGHT 35
#define HW_CONTROLLER_GPIO_UP 12
#define HW_CONTROLLER_GPIO_DOWN 32
#define HW_CONTROLLER_GPIO_LEFT 25
#define HW_CONTROLLER_GPIO_RIGHT 27
#define HW_CONTROLLER_GPIO_SELECT 4
#define HW_CONTROLLER_GPIO_START 0
#define HW_CONTROLLER_GPIO_A 22
#define HW_CONTROLLER_GPIO_B 21
#define HW_CONTROLLER_GPIO_X 17
#define HW_CONTROLLER_GPIO_Y 16
if your display is 9-bit SPI LCD, display.h around line 37 // #define TFT_BRIGHTNESS 128 /* 0 - 255 */ // #define TFT_BL 14 Arduino_DataBus *bus = new Arduino_ESP32SPI(-1 /* DC */, 5 /* CS */, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 33 /* RST */, 0 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); /* ST7796 on breadboard */ // #define TFT_BL 32 // Arduino_DataBus *bus = new Arduino_ESP32SPI_DMA(32 /* DC */, -1 /* CS */, 25 /* SCK */, 33 /* MOSI */, -1 /* MISO */); // Arduino_TFT *gfx = new Arduino_ST7796(bus, -1 /* RST */, 1 /* rotation */); /* ST7796 on LCDKit */ // #define TFT_BL 23 // Arduino_ESP32SPI_DMA *bus = new Arduino_ESP32SPI_DMA(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, -1 /* MISO */); // Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 18, 1 /* rotation */); if your display is normal SPI LCD, display.h around line 37 // #define TFT_BRIGHTNESS 128 /* 0 - 255 */ // #define TFT_BL 14 Arduino_ESP32SPI_DMA *bus = new Arduino_ESP32SPI_DMA(14 /* DC */, 5 /* CS */, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 33 /* RST */, 0 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); /* ST7796 on breadboard */ // #define TFT_BL 32 // Arduino_DataBus *bus = new Arduino_ESP32SPI_DMA(32 /* DC */, -1 /* CS */, 25 /* SCK */, 33 /* MOSI */, -1 /* MISO */); // Arduino_TFT *gfx = new Arduino_ST7796(bus, -1 /* RST */, 1 /* rotation */); /* ST7796 on LCDKit */ // #define TFT_BL 23 // Arduino_ESP32SPI_DMA *bus = new Arduino_ESP32SPI_DMA(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, -1 /* MISO */); // Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 18, 1 /* rotation */); Step 10: Program Connect the device with USB cable Open Arduino IDE Open esp32-nofrendo sample code ("File" -> "Example" -> "arduino-nofrendo" -> "esp32-nofrendo") Press Arduino IDE "Upload" button Select "Tools" menu in Arduino IDE -> "ESP32 Sketch Data Upload" will upload the ROM file to ESP32 SPIFFS. Source: Game & MINTIA ### AXIOMTEK’S INDUSTRIAL-GRADE COM EXPRESS TYPE 6 MODULE WITH INTEL® XEON® PROCESSOR – CEM520 Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to announce the release of CEM520, its new high-performance COM Express Type 6 basic module featuring triple independent displays, industrial operating temperatures and rich expansions. The CEM520 is based on the Intel® Xeon® E-2176M and 8th generation Intel® Core™ i7/i5/i3 processors (codename: Coffee Lake) with the Intel® CM246/QM370/HM370 chipset. The 125 x 95 mm system-on-module was designed for graphics-intensive applications over the Industrial IoT, including automation control, medical imaging, digital signage, and gaming machines. The high quality embedded module is equipped with dual DDR4-2666 SO-DIMM slots for up to 32GB of system memory. Its wide operating temperature range of -20°C to +70°C strengthens the adaptability of harsh operating conditions. Integrated with Intel® Gen 9 graphics, and with the support of DX11/12, OCL 2.0 and OGL 4.3/4.4, the Intel® Xeon® and Core™-based computer-on-module presents excellent graphics performance with a resolution up to 4K. Three independent displays are supported through one LVDS, one VGA and two DDI ports for HDMI, DisplayPort. Axiomtek’s newest system-on-module, the CEM520, was designed for users who need fast computing power and stunning graphics performance. The enhanced features, rich expansions and superior performance reduce the design effort and accelerate time to market to meet customer demand for quick deployment. The rich display ports and expansion interfaces provide increased flexibility for various markets,” said Seamus Su, a product manager of Product PM Division at Axiomtek. “Axiomtek also offers the CEB94011, a selectable development baseboard designed to operate with the CEM520, to allow for fast turnkey evaluation. Read more: AXIOMTEK’S INDUSTRIAL-GRADE COM EXPRESS TYPE 6 MODULE WITH INTEL® XEON® PROCESSOR – CEM520 ### AXIOMTEK’S LATEST 4K VIDEO-WALL DIGITAL SIGNAGE PLAYER WITH FOUR HDMI PORTS – DSP600-211 Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to release the DSP600-211, a 4K digital signage player powered by the onboard AMD Ryzen Embedded V1000 series processors. With superior graphics processing capabilities, EDID function, and feature-rich I/O, the wall-mountable DSP600-211 has four HDMI 2.0 ports supporting 4K for multi-display applications, such as video walls, digital menu boards, digital directory boards, interactive kiosks, and much more. The DSP600-211 has scalable CPU options with the AMD Ryzen Embedded quad-core V1807B and V1605B. This powerful digital signage player has two DDR4-2400 SO-DIMM slots for up to 16GB of system memory. It also comes with one M.2 Key M 2280 for SATA storage and one M.2 Key M 2280 for NVMe storage. To meet the requirement of diverse applications, the outstanding media player has a rich I/O connectivity design. It offers two USB 3.1 ports, two USB 2.0 ports, two Gigabit Ethernet ports, one device management port, two RS-232, one Line-out, one SIM card slot and four antenna openings. Other features include one power switch, one reset switch, one Clear EDID, one remote switch, one HDD LED, and one VDC power input connector. It also has one M.2 Key E 2230 slot and one M.2 Key B for Wi-Fi, Bluetooth, or 4G LTE. The system supports 0°C to 45°C temperatures and offers 3 grms, 5~500Hz, random vibration. This compact system runs on Windows® 10 and Linux. It has been certified with CE and FCC Class A. Axiomtek’s DSP600-211 is designed for advertising and information dissemination in retail areas. To deliver immersive digital experience, this high-performance digital signage player provides four HDMI 2.0 ports which can display four images with up to 4K resolution. It offers flexible video wall configurations designed for applications including restaurant menu boards and digital displays in shopping malls. It is particularly suitable for 2×2 video wall,” said Ruei Tong, a product manager of Product PM Division at Axiomtek. ”Besides, the signage player supports Axiomtek’s exclusive Intelligent Remote Device Management (RDM) software which is specially designed for smart kiosk modules and digital signage players. It provides an ideal solution of high-efficiency and cost-saving in remote management. Read more: AXIOMTEK’S LATEST 4K VIDEO-WALL DIGITAL SIGNAGE PLAYER WITH FOUR HDMI PORTS – DSP600-211 ### AXIOMTEK’S NEW 10.4″ RUGGED AND VERSATILE VEHICLE-MOUNTED TOUCH PANEL COMPUTER – GOT610-837 Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to introduce the GOT610-837, an ultra-rugged 10.4″ vehicle-mounted touch panel computer for logistics and manufacturing applications. The feature-rich vehicle-mounted terminal is powered by the quad-core Intel® Atom® processor E3845. The all-in-one touch panel PC has a full IP65-rated aluminum front bezel for protection from water and dust ingress and features class 5M3 (EN 60721-3-5) and MIL-STD 810F certification for vibration and shock tolerance. The 10.4-inch transportation solution-ready GOT610-837 is designed to fit seamlessly into forklifts and other warehouse vehicles to improve operational efficiencies. The GOT610-837 has a 10.4-inch XGA TFT LCD display with high brightness LED backlight and 500 nits of brightness. It offers two touchscreen options: 5-wire resistive touch or projected capacitive multi-touch. Its auto-dimming function allows operators to easily read the information under different light conditions. The rugged touch panel computer also has user-friendly programmable function keys on the front panel for the operators to easily control brightness, volume and LCD on/off access. The GOT610-837 features the onboard DDR3 memory of up to 8GB; in addition, it has 16GB flash onboard and one mSATA for storage. With the fanless and ultra-slim design, the 10.4-inch vehicle-mounted terminal can be easily deployed in any space-limited environments. The Intel® Atom®-based touch panel PC is built to withstand harsh operating environments with an extended temperature range from -30°C to +55°C. It also supports a wide range power input of 9V to 60V DC that makes it suitable for harsh industrial applications. Furthermore, the 10.4″ all-in-one touch panel PC supports various mounting such as wall mount, VESA mount, arm mount and desktop stand for mounting in forklifts, clamp trucks, yard mules, cranes, and more. “Axiomtek’s GOT610-837 is engineered specifically for in-vehicle use and can be operated in extreme and regular environments indoor and outdoor. This industrial-grade vehicle-mount computer is designed to fit seamlessly into forklift and other heavy-duty vehicles to improve productivity and minimize errors from the docks to the yard,” said Raymond Liao, the product manager of IPS Product PM Division at Axiomtek. To enable real-time communication, the 10.4” XGA fanless touch panel PC is expandable with two PCI Express Mini Card slots and one SIM card slot, as well as three antenna holes. It also has abundant I/O interfaces including one Gigabit LAN port with isolated 1.5KV, four USB type A ports (one on the top and three on the bottom), one RS-232/422/485 with isolated 1.5KV, one DC for power input with isolated 1.5KV, one audio (line-out and mic-in), one 6-in/2-out DIO with isolated 1.5KV, and one CAN Bus interface. Moreover, the GOT610-837 is also ready for Windows® 10, 8.1 and 7. Read more: AXIOMTEK’S NEW 10.4″ RUGGED AND VERSATILE VEHICLE-MOUNTED TOUCH PANEL COMPUTER – GOT610-837 ### AXIOMTEK’S NEW INTEL® ATOM-BASED FANLESS EMBEDDED SYSTEM TARGETS INTELLIGENT MANUFACTURING IN INDUSTRIAL ENVIRONMENTS – EBOX626-311-FL Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to announce the eBOX626-311-FL, its new slim-type fanless embedded system powered by the Intel® Atom® processor x5-E3940. The fanless embedded box PC was designed to operate reliably in industrial environments – with an IP40-rated enclosure, extended -40°C to +60°C support, and 3 Grms vibration resistance. To ensure system security, it utilizes the Trusted Platform Module (TPM) 1.2 function. The embedded box computer eBOX626-311-FL is well-suited for industrial controllers, intelligent robotic control, intelligent gateway systems, smart kiosks, visual inspection and data visualization. “The eBOX626-311-FL is a highly-integrated platform with high performance, abundant I/O connectivity and high reliability. The fanless embedded box PC has a wide voltage input and supports an 11ms interruption to prevent an unexpected power outage. The wide temperature settings and 3Grms vibration resistance along with IP40-rated rugged aluminum extrusion and steel case makes it solid and durable in harsh environments,” said Annie Fu, product manager of Product PM Division at Axiomtek.” The eBOX626-311-FL has one 204-pin DDR3L-1866 SO-DIMM socket for up to 8GB of memory. The quad-core embedded platform comes with multi-functional I/O interfaces, including two RS-232/422/485 ports, one RS-232 port, four USB 3.0 ports, two USB 2.0 ports, two Gigabit Ethernet ports with Intel® Ethernet Controller I211-AT, one audio port, one VGA port, one lockable HDMI port and four SMA-type antenna connectors. Furthermore, the eBOX626-311-FL supports two full-size PCI Express Mini Card slots for WLAN/WWAN/mSATA modules as well as a SIM card socket. It is equipped with one 2.5” SATA HDD and one mSATA for additional storage to expand functionality. Additionally, it supports an AT/ATX quick switch, allowing users to change power modes with a single click. Read more: AXIOMTEK’S NEW INTEL® ATOM-BASED FANLESS EMBEDDED SYSTEM TARGETS INTELLIGENT MANUFACTURING IN INDUSTRIAL ENVIRONMENTS – EBOX626-311-FL ### AXIOMTEK’S ULTRA-SLIM 4K DIGITAL SIGNAGE PLAYER WITH DUAL DISPLAYS – DSP501-527 Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to release the DSP501-527, a digital signage player powered by the 8th generation Intel® Core™ i5/i3 (codename: Whiskey Lake) and Celeron® processor. With the rise of artificial intelligence (AI) facial recognition and real-time promotions, the high-performance DSP501-527 has added support for Intel® Movidius™ Myriad™ X VPU and Intel® OpenVINO™ toolkit. In addition, the DSP501-527 supports dual 4K displays with its DisplayPort++ and HDMI 2.0 ports to cope with the growing demand for context-aware digital signage. Featuring fanless operation and compact-size, this digital signage player is well-suited for digital menu boards, digital directory boards, self-service kiosks, video walls, and more. “Today, retailers are leveraging in-store media, artificial intelligence and digitalization to create dynamic store experiences and simplified processes. Axtiomtek’s DSP501-527 is designed for advertising and information dissemination in retail areas,” said Yifei Wang, a product manager of Product PM Division at Axiomtek. “The DSP501-527 supports 4K dual displays for captivating visual experiences. This outstanding digital signage player also supports Axiomtek’s Intelligent Remote Device Management (RDM) function to offer integrators and managed service providers a cost-effective and user-friendly device management solution for applications where multiple digital signage devices are desired.” Axiomtek’s DSP501-527 has rich I/O interfaces and multiple expansions. It’s I/O choices include four USB 3.0 ports, one USB 2.0 ports, one Gigabit Ethernet port, one RS-232, one Mic-in, one Line-out, one SIM card slot and four antenna openings. It has one M.2 Key E 2230 slot and one M.2 Key B 3042 for Wi-Fi, Bluetooth, or 4G LTE. Capturing and processing massive videos, images, or data also needs exceptional storage performance. The DSP501-527 has one M.2 Key M 2280 for SATA and NVMe storage.  Read more: AXIOMTEK’S ULTRA-SLIM 4K DIGITAL SIGNAGE PLAYER WITH DUAL DISPLAYS – DSP501-527 ### AXIOMTEK’S PICO52R – FEATURE-RICH, HIGHLY EXPANDABLE PICO-ITX SBC FOR INDUSTRIAL IOT APPLICATIONS Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to introduce the PICO52R, its new 2.5-inch pico-ITX motherboard powered by the 8th gen Intel® Core™ i7/i5/i3 and Celeron® processor (code name: Whiskey Lake). Its reversed onboard CPU is attached on the rear side of the board to aid with heat dissipation and offers flexibility for easy system integration especially in space constraint enclosure. This embedded SBC features one DisplayPort, one HDMI and one LVDS for triple display applications. Leveraging the Intel® Active Management Technology 11, powerful CPU and rich I/O interfaces, the high-performance PICO52R provides high-precision services for edge computing, machine vision and industrial IoT applications. Advanced Features: 8th gen Intel® Core™ i7/i5/i3 and Celeron® processor (code name: Whiskey Lake) 1 DDR4-2400 SO-DIMM for up to 16GB of memory 2 USB 2.0 and 2 USB 3.0 2 GbE LAN and 2 RS-232/422/485 M.2 Key E Intel® AMT 11 supported Within its small form factor, the PICO52R supports one 260-pin DDR4-2400 SO-DIMM for up to 16GB of system memory. The Intel® Core™-based embedded board comes with rich I/O options, including two USB 2.0 ports, two USB 3.0 ports, two RS-232/422/485 ports, two Gigabit Ethernet ports with Intel® i219-LM and Intel® i211-AT, one DisplayPort port, one HDMI port and one 18/24-bit single/dual channel LVDS port. Moreover, it has a watchdog timer to detect and recover from computer malfunctions and supports hardware monitoring features to monitor temperature, voltage, fan speed, and more. With the support of Intel® Active Management Technology 11 (Intel® AMT 11), the PICO52R can complete remote management easily. Read more: AXIOMTEK’S PICO52R – FEATURE-RICH, HIGHLY EXPANDABLE PICO-ITX SBC FOR INDUSTRIAL IOT APPLICATIONS ### AXIOMTEK’S QUAD-VIEW 3.5” EMBEDDED BOARD WITH AMD RYZEN™ EMBEDDED V1807B/V1605B PROCESSOR – CAPA13R Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to introduce the CAPA13R, a high-performance 3.5” embedded board with quad displays. The CAPA13R is powered by the onboard AMD RYZEN™ Embedded V1807B/V1605B processor with AMD Radeon™ RX Vega graphics. The embedded board is well-suited for graphics-intensive applications such as medical imaging, video surveillance, 3D simulators, optical quality control, digital signage, kiosks/POI, thin clients, and more. The integrated AMD Radeon™ RX Vega graphics with support of DirectX 12 and OpenGL 4.5 marks the cutting edge of embedded graphics. The CAPA13R offers quad display capability through two HDMI, one DisplayPort and one LVDS interfaces. Its onboard CPU is attached on the rear side of the board, which can aid with heat dissipation and offers flexibility for easy system integration and minimum maintenance. Moreover, the CAPA13R offers multiple expansion interfaces with one M.2 Key E slot for wireless modules and one M.2 key B slot for storage cards. One 260-pin SO-DIMM socket on the CAPA13R supports up to 16GB of DDR4-2400 (V1605B) and DDR4-3200 (V1807B) memory. The system has a +12V DC power input. The new AMD RYZEN™ Embedded V1000 series is the best choice for embedded solutions that require a high-resolution display and full-graphics feature, and offers the benefits of a smaller footprint,” said Michelle Mi, Product Manager of Embedded Board and Technology Business Unit at Axiomtek. “The CAPA13R has four GbE LAN ports to connect with industrial cameras for machine vision applications and four independent displays for graphics-oriented appreciations, like digital signage, gaming, infotainment, etc. Its scalability, optimized graphics and low profile design offers a high level of versatility to help system integrators drive their projects forward. Read more: AXIOMTEK’S QUAD-VIEW 3.5” EMBEDDED BOARD WITH AMD RYZEN™ EMBEDDED V1807B/V1605B PROCESSOR – CAPA13R ### AXIOMTEK’S ULTRA-COMPACT EDGE AI SYSTEM POWERED BY NVIDIA® JETSON NANO™ – AIE100-903-FL Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to release the AIE100-903-FL, an ultra-compact edge AI system. The high-performance AIE100-903-FL is powered by the NVIDIA® Jetson Nano™ module, which has a powerful quad-core ARM® Cortex®-A57 MPCore processor and NVIDIA Maxwell™ GPU architecture with 128 NVIDIA CUDA cores. In order to easily install and deploy an IP camera, this user-friendly AI-enabled system is equipped with a 15W GbE PoE port for both power and video transmission. The advanced AIE100-903-FL was designed for intelligent edge AI applications, such as AI computing, edge computing, smart retail, smart city, and more. “The AIE100-903-FL offers support for NVIDIA® JetPack 4.3.1 for ease of development for AI computing and deep learning applications such as people counting, behavior analysis and facial recognition. With its strong construction, this ultra-compact edge AI platform can operate under a wide range of temperatures from- 30°C to +60°C and withstand vibration up to 3 Grms. Moreover, it offers an optional waterproof IP42-rated cover kit to strengthen the protection of semi-outdoor environments. This AI-powered system is well-suited for use in moist places, for instance, besides the freezer, under the eave or at the arcade,” said Annie Fu, a product manager of Product PM Division at Axiomtek. Axiomtek’s AIE100-903-FL has rich I/O interfaces, including one USB 3.0 port, one USB 2.0 port, one Micro USB port, one GbE LAN, one GbE PoE and one HDMI 2.0 with 4K2K supported. It also has one recovery switch, one reset button, one power button, one 12 VDC power input and two SMA-type antenna openings. Read more: AXIOMTEK’S ULTRA-COMPACT EDGE AI SYSTEM POWERED BY NVIDIA® JETSON NANO™ – AIE100-903-FL ### AXIOMTEK’S ULTRA COMPACT FANLESS NETWORK APPLIANCE DESIGNED FOR IIOT SECURITY APPLICATIONS – NA346 Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is proud to introduce the NA346, a 4-LAN fanless network appliance platform designed in a small form factor. This ultra-small desktop network appliance is powered by the Intel® Celeron® processor N3350 (code name: Apollo Lake) featuring the lowest Thermal Design Power (TDP) of 6W to meet the specific configurations of low-power requirement. The reliable NA346 is positioned as an entry-level SD-WAN, VPN and security gateway for industrial IoT security applications. “The 5G network is foreseeable to transfer data with greater bandwidth, higher speed and boost the edge computing and AIoT application. The cutting-edge NA346 offers two mini-PCIe slots and SIM socket supporting 3G/4G/LTE communications and connectors to 5G modules,” said Kiwi Lee, a product manager of Product PM Division at Axiomtek. “Space limitation is one of the constraints in today’s industrial environment. Axiomtek’s ultra-small NA346 can be easily installed in narrow spaces. Featuring fanless operation, this network security appliance is perfect to be used in noise-sensitive environments.” The NA346 supports one DDR3L-1600 SO-DIMM slot with up to 8GB of system memory and also offers one mSATA for storage. Under its small form factor, the network communication platform comes with four 10/100/1000 Mbps LAN ports using the Intel® i211 Ethernet controller. Other I/O interfaces include one serial console port, two USB 3.0 ports and one HDMI port. Read more: AXIOMTEK’S ULTRA COMPACT FANLESS NETWORK APPLIANCE DESIGNED FOR IIOT SECURITY APPLICATIONS – NA346 ### Arduino Coding Language: Exploring C, C++, Python, and More What Language is Arduino?   You may have heard of Arduino already it is one of the most famous microcontroller boards used for hardware interaction and designing various interactive projects. And have you ever spared a thought to think about which programming language it is using in the backend?  This article will explore the foundational language that Arduino natively uses as well as other popular options supported for development. We'll take a deep dive into key details like Arduino's operators and whether it's best defined as C or C++. In the end, you will understand the lingo typical for Arduino projects on a professional level. Well then, let’s proceed with the following section, do bear with me. What Language Does Arduino Natively Use? The short answer here is that Arduino inherently runs on a bare metal using C/C++ in its purest form. In form, it is similar to C++ but with many features of C++’s object-oriented approach such as classes and inheritance removed or simplified. Since this C/C++ dialect is a lightweight implementation and is more familiar among programmers, it was selected to be the Arduino core language. From a syntactic perspective, this stripped-down C++ implementation feels a lot more like plain C. Variables and functions are declared outside of any classes, and there are no special class-related keywords involved. The majority of code focuses on setup(), loop(), and custom function definitions without object-oriented concepts in sight. The result is a language that's very straightforward for beginners to pick up while still offering enough power for advanced projects. Under the hood, Arduino sketches are compiled using GCC (GNU Compiler Collection), which translates the C/C++ code into optimized machine language bytecode that can run on the microcontroller hardware. This entire process is abstracted away into a simple drag-and-drop IDE experience, but it's still very much reliant on traditional C/C++ structures and paradigms. The Arduino developers wisely chose this "lowest common denominator" approach to ensure maximum compatibility across all boards and minimal barrier to entry for newcomers. So while it superficially resembles C, Arduino's true lineage is based on C++. Many key elements inherited from C++ like variable types, functions, operators, conditionals, etc. are what give Arduino its structure and capabilities. However, its simplified presentation is optimized for simplicity rather than full-featured object orientation. This balance has made Arduino's core language highly effective while remaining approachable for all levels of coders. Which Other Programming Languages Are Supported for Arduino Development? While Arduino's native language is a simplified version of C/C++, it's by no means limited to just that. The community has worked hard to expand language compatibility and give developers more choices. Here are some of the most popular options: C In addition to the core C++ variant, you can write pure C code for Arduino using standard C syntax and structures. The IDE supports this seamlessly without any adjustments needed. C++ For those comfortable with the fully object-oriented C++ feature set, it's possible to write complete C++11/14/17 code for Arduino. Classes, inheritance, templates, and more work as expected. Python The Arduino development environment supports loading and running Python scripts on Arduino boards using the pyFirmata library. This enables coding sensor interactions and prototypes without learning a new syntax. JavaScript (Node.js) Firmata and Johnny-Five allow controlling Arduino I/O from JavaScript code running on Node.js. Entire projects can be programmed and tested without even touching the Arduino IDE. Go Although less common than the previously mentioned languages, Arduino support exists for Go via packages like Arduino and go-esp8266-wifi. This offers another option for web-connected applications. These multi-language capabilities enable programmers to choose whichever dialect they prefer or fit a given project best. While core Arduino operation remains C/C++ based, the huge selection of extended tools ensures it's a highly versatile and compatible platform. Experimenting with different approaches can also help expand coding horizons over time. Arduino Operators As an evolution of C/C++, Arduino inherits most of the fundamental operators familiar to programmers of those languages. Here's a quick overview of some common ones: Arithmetic Operators: (addition), - (subtraction), * (multiplication), / (division), % (modulus) Assignment Operators: = (assign a value), +=, -=, *=, /= (compound assignment) Comparison Operators: ==, ! We can use ==, !=, <, >, <= or >= as equality, inequality, less than, greater than, less than or equal to and greater than or equal to respectively. Logical Operators: && (logical AND), || (logical OR), ! (logical NOT) Bitwise Operators: & (bitwise AND), | (bitwise OR), ^ (bitwise exclusive OR), ~ (bitwise complement), << (left shift), >> (right shift) Conditional Operator: ?: (ternary operator to assign values based on the condition being true/false) These cover the vast majority of essential operator usage when coding Arduino sketches. The syntax should feel instantly familiar to those with other C-family language backgrounds. And their functionality operates identically on Arduino as on other platforms. Some less common but still applicable operators include sizeof() to check the size of a variable, comma operator for multiple expressions in loops, etc. But the core set above handles almost any calculation or comparison need that comes up in typical Arduino programming scenarios. Mastering these operations is an important stepping stone for anyone wanting to develop robust skills with Arduino's native language. Is Arduino C or C++? The answer is Yes... and No After examining Arduino's core syntax structures and capabilities, the question of whether it should be classified as C or C++ often arises. But the reality is that both are true, some aspects of both are true. Thus, it is challenging to categorically say that it is one case of terminal resettlement confronted with the other. A more accurate view is that Arduino is a customized C/C++ variant optimized specifically for embedded use cases. On one hand, Arduino code closely resembles C in the market in how variables, functions, and flow control are declared without object-orientation involved. This procedural style mirrors plain C much more than C++. But under the surface, it uses C++ compilation and still retains valid C++ code compatibility. Conversely, some advanced C++ features like classes, inheritance, and templates do work when used in Arduino programs. The language itself was built on C++ rather than C. So from certain perspectives, it aligns more strongly with C++. Ultimately, it's best to consider Arduino its unique beast - one directly descended from C/C++ yet divergent in important optimizing ways. The language strips out complexity to focus on common microcontroller tasks, abstracting lower levels while keeping strong performance. Neither C nor C++ alone can fully encompass what Arduino is or how it's applied. So in summary - Arduino borrows elements of both C and C++ but defines its own simplified yet capable syntax specifically for embedded applications. It has features identifying it with each progenitor, yet remains independent from being strictly one or the other. This hybrid linguistic identity is what has made Arduino such an approachable and widely adopted platform spanning various programming backgrounds. Expanding Arduino Possibilities with C++ While Arduino keeps things beginner-friendly through a basic C/C++ framework, we've seen it's fully compatible with C++ code as well. For those ready to expand their abilities, C++ opens up many new doors. Here are just a few examples: Object Orientation - Organizing related variables and functions into reusable object classes follows OOP principles. This structures complex programs neatly. Inheritance - Deriving new classes from existing ones avoids duplicating common functionality while specializing behaviors. Templates - C++ templates let code be written once to work generically with different variable types, reducing duplications. Standard Library - Robust portable containers, algorithms, I/O streams, and more in the STL boost overall capability. Memory Management - Smart pointers like unique_ptr ensure memory safety by preventing leaks automatically. Concurrency - Semaphores, mutexes, etc. coordinate async tasks safely for real-time or multiprocessing uses. Low-Level Control - Direct hardware register access permits very low-level interaction for maximizing performance. Type Safety - C++ catches common bugs at compile-time through its strong static type system. These are just a sampling of how C++ ups the ante. Experienced developers especially gain a lot by treating Arduino as a full-fledged C++ platform and not just a "beginner C" one. Doing so opens many optimized, reusable, robust coding techniques that vanilla Arduino code can't match. Of course, not all projects require this level of sophistication. But for anything complex, heavyweight, or production-focused, C++ serves Arduino extremely well by raising the ceiling of what's possible. With its expressive power and focus on efficiency, C++ becomes an invaluable weapon in the hands of expert Arduino builders. Python Adds a Different Dimension So far we've focused on Arduino's core C/C++ roots and options. But Python brings its own useful perspective worth exploring. With tools like pyFirmata, developers gain an alternative high-level language for prototyping without rewriting code later. Some key benefits of the Python approach include: Rapid Prototyping - Python lets hardware projects take shape quickly through its straightforward syntax. Iterations in Minutes - Complex sequences can be tested and modified without wait times between builds. Focus on Logic, Not Mechanics - Python handles low-level communication details, leaving coders to concentrate on circuit behaviors. Simplified Learning Curve - Python is an easier first language than C++, so it lowers the barrier of entry. Multi-Platform Deployment - Code can be developed on one machine and deployed cross-platform, unlike C++'s reliance on Arduino IDE. Agile Development - Python emphasizes flexibility and responsiveness fitting short hardware cycles better than compiled languages. Reusability - Functions/modules containing behaviors transfer seamlessly between projects. Mathematics Focus - Python is an excellent environment for analyzing sensor data with tools like NumPy, SciPy, etc. These traits make Python an outstanding choice for rapid conceptualizing. It enables trying out ideas much faster than messing with C++ wiring, variable types, and compilations constantly. Later, performance-critical sections could still take advantage of raw C++. But overall Python streamlines the initial stages of physical computing to a remarkable degree. For anyone intimidated by Arduino's C/C++ roots, it reduces friction significantly. Lessening Language Barriers We can't discuss Arduino's language landscape without touching on efforts to lessen barriers formed by its historical reliance on C/C++. Thankfully, some recent moves are working to open the door even wider: Blockly - A visual programming tool that transforms block-based code into valid Arduino syntax behind the scenes. This lowers the floor for young coders and supports learning programming concepts step-by-step. MakeCode - A Spin-off of Microsoft's Blockly/JavaScript hybrid, Arduino MakeCode adopts its easy-to-use drag-and-drop interface for intuitive projects. OCR Boards - Some products combine drag-and-drop coding with ready-made kits, allowing full circuits to be student-built and programmed painlessly. This approach makes physical computing genuinely accessible. PXT Targets - The Arduino target available in Microsoft's MakeCode configures boards for use with its block editor, pre-compiling all code so end-users avoid any direct contact with C/C++ nitty-gritty. Blink - An alternative shell and PIC microcontroller aim to provide a "no code" intuitive interface for basic rapid prototyping without programming. But power is inevitably limited. These language-lowering tactics acknowledge the limitations of requiring compilation knowledge. And they fill needs like education or impromptu exploration better than conventional Arduino IDE constraints do. Over time, such simplifying initiatives are certain to further popularize hardware development across demographics. Looking at Libraries Of course, it's not all about the core languages themselves - Arduino’s extensive library ecosystem plays a huge role in the platform’s utility as well. Pre-written, tested code modules handle common low-level interactions, from basic input/output to complex protocols. Here are some insights on Arduino’s library landscape: Libraries cover everything from supporting chip families to displays, sensors, USB devices, networking, audio, and more with new contributions. Popular examples include LiquidCrystal, Wire, SPI, Ethernet, WiFi101, Servo, SD, NeoPixel, and hardware-specific driver libraries. Well-documented libraries reduce coding from scratch, ensuring robust functionality and reliable component integration. Consistent APIs abstract away communication mechanisms to provide intuitive higher-level library calls. Community-developed libraries undergo ongoing updates/fixes to maintain compatibility across Arduino releases. Library managers in IDEs simplify installation so users needn’t hunt sources manually. Default libraries suffice for most projects, but additional specialized code exists, like TensorFlow Lite for AI tasks. In many ways, Arduino's true strength lies not in its core languages alone, but in how easily those languages interface to a world of preexisting adaptive code. The libraries become de facto languages in their own right through standardized interfaces. They deliver plug-and-play solutions handling low-level burdens so users can focus on higher-purpose application designs instead. In this regard, Arduino's library culture may be its most valuable asset overall. Language Trends to Watch Looking ahead, what programming language trends seem likely to impact Arduino's future evolution? A few possibilities to keep an eye on: Rust popularity rising - Its strong safety focus could gain interest as a C++ alternative. Support may come through embedded-optimized toolchains. WebAssembly gains ground - Projects like DMESG let C/C++ compile to WASM, potentially allowing "Arduino in the browser" remotely. Pure JavaScript advances - Languages like CircuitPython push JavaScript/TypeScript as a leading cross-platform embedded choice. Julia emerges for ML/DS - Its ease of combining numeric, symbolic, and compiled code may see embedded machine learning adoption. Modern C++ standards progress - C++17, 20, 23 features continue enhancing functionality Arduino targets must remain compatible with. New visual editors arise - Low-code tools abstracting language mechanics to empower non-programmers are an area of active development. Hybrid approaches hybridize - Mixing block, text, and spoken languages could yield even more intuitive approaches fusing strengths. While C/C++ will likely remain central given the existing infrastructure, embracing complementary choices ensures Arduino endures through changing times. Its designers have stayed adaptive - that flexibility may prove key to prolonged relevance across future shifts in how we code both hardware and software overall. Wrapping Up In conclusion, while Arduino's true native language derives from a simplified C/C++ variant, it remains highly compatible with pure C/C++ as well as other major options like Python, JavaScript, and Go via libraries that interface with them. This expansive linguistic compatibility both draws from and nourishes Arduino's diverse community of users. The balance Arduino has struck - keeping things approachable yet not limiting capability - serves it remarkably well. Both beginners and experts feel at home with the platform. Various programming models coexist while targeting the same open hardware foundation. This inclusive, pragmatically optimized design philosophy differentiates Arduino from more rigid one-language alternatives and underlies much of its grassroots popularity. It ensures concepts remain clear while cultivating a supportive ecosystem empowering people of all backgrounds to build meaningful interactive projects. Overall, Arduino demonstrates how embracing multi-paradigm thinking instead of religious zealotry for any specific language yields dividends. By thoughtfully curating a hybrid approach, it welcomes programmers on their terms and unites them through a shared goal of making. That spirit of accessible innovation is what continues driving Arduino's engaging journey and growth many years since its inception. ### BEAGLEBONE GREEN GATEWAY SBC FEATURES SITARA AM3358, ETHERNET, AND A DC JACK SeeedStudio has been working on an addition to their BeagleBone Green Development Board family with an update to the BeagleBone Green Wireless board named BeagleBone Green Gateway. The board features the new Octavo Systems OSD3358, which is a SiP (System in Package) that integrates the AM3358 1GHz ARM Cortex-A8 Processor, 512MB DDR3 SRAM, and other wonderful features into one package.  The new board is being designed to suit applications where the board is being used as a gateway, as such, it comes with both Ethernet Connectivity, WiFi and BLE Wireless connectivity options. The board also comes with an extra DC connector for power (overcoming the Micro USB only for power limitation), and an onboard I2C RTC, so that it is more suitable for industrial application or applications where time accuracy is required. The board is available for pre-order for 59.90 USD Key Features Fully Compatible with BeagleBone® Black and Seeed Studio BeagleBone® Green Compact size for convenient deployment Powerful Sitara™ AM3358 Arm® Cortex® A8 Processor Rich I/O Peripherals PRUs for Real-TIme Capabilities Cape Support for Expandability Open-Source Support from the fast-growing community Some of the expected features and specifications of the new board include; Processor Processor: Octavo Systems OSD3358 AM3358 1GHz ARM Cortex-A8 2×32-bit 200-MHz programmable real-time units (PRUs) 3D graphics accelerator NEON floating-point accelerator 512MB DDR3 SDRAM 4KB EEPROM Integrated power management Read more: BEAGLEBONE GREEN GATEWAY SBC FEATURES SITARA AM3358, ETHERNET, AND A DC JACK ### Beating battery drain: Power-conserving chip may increase smartphone battery life Stream video on your smartphone, or use its GPS for an hour or two, and you'll probably see the battery drain significantly. As data rates climb and smartphones adopt more power-hungry features, battery life has become a concern. Now a technology developed by MIT spinout Eta Devices could help a phone's battery last perhaps twice as long, and help to conserve energy in cell towers. The primary culprit in smartphone battery drain is an inefficient power amplifier, a component that is designed to push the radio signal out through the phones' antennas. Similar larger modules are found in wireless base stations, where they might use 10 or even 100 times the power. Prepared to send sizeable chunks of data at any given time, the amplifiers stay at maximum voltage, eating away power—more than any other smartphone component, and about 75 percent of electricity consumption in base stations—and wasting more than half of that power as heat. This means smartphone batteries lose longevity, and base stations waste energy and lose money. But Eta Devices has developed a chip (for smartphones) and a shoebox-size module (for base stations)—based on nearly a decade of MIT research—to essentially "switch gears" to adjust voltage supply to power amplifiers as needed, cutting the waste. "You can look at our technology as a high-speed gearbox that, every few nanoseconds, modulates the amount of power that the power amplifier draws from the battery," explains Joel Dawson, Eta Devices' chief technology officer and a former associate professor of electrical engineering and computer science who co-invented the technology. "That turns out to be the key to keeping the efficiency very high." When trialed in a base station last year, Eta Devices' module became the first transmitter for 4G LTE networks to achieve an average efficiency greater than 70 percent, Dawson says. "The highest number we've heard before that was 45 percent—and that's probably being generous," he says. Backed by millions in funding, Eta Devices—co-founded by David Perreault, an MIT professor of electrical engineering, and former MIT Sloan fellow Mattias Astrom—has partnered with a large base-station manufacturer. The goal is to deploy the technology in live base stations by the end of 2015. The savings could be substantial, Dawson says, noting that a large carrier could save $100 million in annual electricity costs. Eta Devices has also entered conversations with major manufacturers of LTE-enabled smartphones to incorporate their chips by the end of next year. Dawson says this could potentially double current smartphone battery life. Besides battery life, Dawson adds, there are many ways the telecommunications industry can take advantage of improved efficiency. Eta Devices' approach could lead to smaller handset batteries, for example, and even smaller handsets, since there would be less dissipating heat. The technology could also drive down operating costs for base stations in the developing world, where these stations rely on expensive diesel fuel for power.   For more detail: Beating battery drain: Power-conserving chip may increase smartphone battery life ### BLE MODULES INCLUDE ANTENNA, ENCRYPTION TECHNOLOGY, SIX CONFIGURABLE I/O PINS Würth Elektronik announced the Bluetooth Low Energy 5.1 module Proteus-III and the proprietary version Thyone-I. The modules, measuring only 8 × 12 × 2 mm, with integrated antenna, encryption technology and six configurable IO pins, are based on the Nordic Semiconductor nRF52840 chipset. They can be used for IoT and M2M applications, for example, to build radio-based maintenance interfaces and sensor networks. The WE-ProWare firmware from Würth Elektronik, which has been industrially proven over many years, makes the modules extremely versatile. Proteus-III exploits the possibilities of the Bluetooth Low Energy 5.1 standard and even goes beyond them. With a payload of up to 964 bytes, the module offers four times the throughput of previous Bluetooth Low Energy modules. It can also establish connections in the newly introduced long range mode to transmit data over long distances. A special feature from Würth Elektronik: Proteus-III offers a good alternative to the SPP (Serial Port Profile) mode for serial data transmission, which is no longer included in the standard but is extremely useful for industrial applications. NFC wake-up and NFC pairing are prepared. With the proprietary Thyone-I radio module, Würth Elektronik shows what is possible in the 2.4 GHz band: a range of up to 750 m and an end-to-end payload throughput of up to 400 kbps. A simple setup turns modules into repeaters in a mesh network, as required. WE-ProWare is an extremely versatile, easy-to-configure firmware with a lean and powerful radio protocol. If transmission standards are already specified in the application, Thyone-I can easily be converted to ZigBEE, Thread or Wirepas. Read more: BLE MODULES INCLUDE ANTENNA, ENCRYPTION TECHNOLOGY, SIX CONFIGURABLE I/O PINS ### BLUETERA II – FULL-STACK DEV BOARD THAT USES PROTOCOL BUFFERS FOR MOTION-BASED IOT APPLICATIONS Many of our clients face a common challenge when undertaking IoT projects. They are experts in their own fields, and most of of them have a great idea, a proof-of-concept (PoC), or a sophisticated algorithm that addresses some specific need. They have simulated their solution in Matlab or Python and are eager to build and test a minimum viable product (MVP). Unfortunately, designing a physical IoT device – or even prototyping one – is no easy task. Our experience has demonstrated that designers have a genuine need for a common, extensible, user-friendly, open source IoT platform that facilitates seamless interaction between the physical and the digital. Which is where we come in. Our primary focus is on products and projects that sample motion, sense the physical world, and transmit the resulting data over Bluetooth Low-Energy (BLE) to smart devices running Android, iOS, Windows, and Linux. We created Bluetera I by stitching together key functionality, including communication hardware and basic motion sensing algorithms, as a way to provide the missing IoT platform our clients needed. Bluetera II is the full realization of this same objective. It is open hardware running open firmware that includes motion sensors, power management, communication, and user-facing software – all woven together into a robust infrastructure for rapid IoT prototyping. Bluetera II Demos The demos in the video above were created primarily using the Windows-WPF application shown below. (You can find source code for this and other demos in our GitHub repository.) Features Hardware – A tiny (18 x 18 mm) device with 9-axis motion sensors, an ARM MCU with BLE, battery charging circuitry, and multi-purpose IOs for externals sensors and peripherals Firmware – Open source infrastructure with embedded command and control, motion algorithms with built-in data exchange and IMU control, a BLE stack with an additional Protobuf abstraction layer, power management, and battery monitoring Open Source – Everything, from hardware to firmware to the software running on your mobile device or PC is strictly open-source. No strings attached Motion – 9-axis motion fusion based on the Madgwick Algorithm, which produces rotation data (quaternions) from the 6-axis InvenSense IMU and STM compass. The result is a stable, 1 kHz stream of rotation measurements and raw data. Google Protobuf – A communication abstraction layer that provides a simple yet flexible serial pipe between the physical layer (e.g. sensors) and the digital layer (e.g. your mobile device). Protobuf makes adding new messages and functionality as easy as 1-2-3. Power – A JST socket, a Micro USB connector, battery charging circuitry, and power management firmware allow you to power the device with any small, external Lithium-Ion battery. Extensions – 20 I/Os to support digital and analog peripherals and sensors, I²C, SPI, UART, PWM, and more. USB Type 2 – A Micro USB connector and firmware support for the USB 2 protocol enable fast, wired communication with the host and allow Bluetera II to serve as a BLE dongle. Rapid Development – A breadboard connected to the tiny Bluetera II provides a standard development matrix and facilitates quick and easy prototyping and debugging with external sensors and peripherals. SDK – Simplifies software development, with support for multiple operating systems and platforms, includes APIs, algorithms, and demos. The Bluetera II SDK is compatible with Linux, Android, iOS, and Windows. It also includes a plugin for the Unity 3D development platform. Read more: BLUETERA II – FULL-STACK DEV BOARD THAT USES PROTOCOL BUFFERS FOR MOTION-BASED IOT APPLICATIONS ### BRIDGETEK INTRODUCES NEW PANL HARDWARE FOR THE CONTROLLING OF SMART DEVICES Bridgetek has further extended the scope of possibilities addressed by its PanL home automation connectivity platform – with release of the PanL Relay. The purpose of this latest unit is to bring greater functionality to installed systems, thereby leading to heightened levels of comfort. It serves as a means to deliver smart switching capabilities, via one of the system’s PanL HMI touch displays. Thanks to incorporation of PanL Relays in their home automation implementation, users will be able to activate or deactivate domestic appliances (such as washing machines, microwave ovens, dishwashers, toasters, rice cookers, kettles, etc.) and other items of electrical equipment (like fans, lamps and outdoor heaters). Contained within compact, low-profile enclosures (of 145.7mm x 96.7mm x 29.50mm dimensions), the Bridgetek PanL Relays are packed full of sophisticated electronic technology. Each one features a high-performance, 100MHz-rated, 32-bit FT903 RISC microcontroller unit (MCU). In addition, there are 4 standard electro-mechanical relays for conventional control requirements, plus another 4 solid-state relays which are suitable for controlling higher power electrical devices. All of these relays have their own corresponding status indicators, so that users can see what is being controlled. PanL Relay units can be powered off a 16V to 24V DC supply. They connect directly to the Bridgetek PanL Hub, which lies at the centre of the home automation system, via their RS485 interfaces. For large-scale implementations where more capacity is required (such as residential complexes or office buildings), it is possible to daisy chain multiple units together. Read more: BRIDGETEK INTRODUCES NEW PANL HARDWARE FOR THE CONTROLLING OF SMART DEVICES ### BOXER-6638U: EMBEDDED COMPUTING ON THE FRONTLINES OF PANDEMIC RESPONSE AND PREVENTION AAEON, an industry leader in IoT and AI edge computing solutions, is helping to power the pandemic response with the BOXER-6638U rugged embedded box PC. Featuring Intel® Core™ i3 processors, the BOXER-6638U brings the power of industrial computing to mobile X-ray machines, used to perform chest X-ray scans of suspected COVID-19 patients. This vital equipment helps increase the speed and accuracy of diagnosis, and prevent the spread of the pandemic. The spread of Coronavirus disease 19 (COVID-19, previously known as “2019 novel coronavirus”) has had serious worldwide impact, becoming the largest and most widespread epidemic in the past century. The impact to human lives and global economies is severe. The workload and stress endured by the medical professionals on the frontline of containment and prevention is immeasurable. Alongside these medical professionals is the mobile X-ray machine developed by AAEON’s customers to help accelerate the diagnosis of diseases, saving time and effort. At the heart of these mobile X-ray machines is the BOXER-6638U from AAEON. To integrate into this vital medical equipment, AAEON’s customers have strict requirements for specifications and testing. The BOXER-6638U meets these requirements and offers the additional benefits of being lightweight and easy to integrate into the device. With a fanless design and rugged construction, the BOXER-6638U has proven reliability with a failure rate below 0.2%. The BOXER-6638U meets the customer’s requirements for provide redundant communication methods to provide accurate data in real time on site. Meeting customers’ needs for flexibility and customization is what drives AAEON’s business philosophy of developing and manufacturing industrial computers, and has for nearly 30 years. The BOXER-6638U is equipped with the Intel® Core™ i3 5010U processor, providing low power consumption and high performance. With rugged, fanless construction, it can operate in temperatures from -20°C to 60°C and operate without errors in places with drastic temperature changes. Compact and lightweight, the BOXER-6638U can easily integrate with new systems or upgrade existing infrastructure. The BOXER-6638U offers I/O features including DisplayPort, two Ethernet ports and antenna hookups for wired and wireless transmission, two Mini-Card expansion slots, and storage with mSATA, HDD/SSD slots. Read more: BOXER-6638U: EMBEDDED COMPUTING ON THE FRONTLINES OF PANDEMIC RESPONSE AND PREVENTION ### Bring “dead” batteries back to life with a toroid and the Joule Thief circuit. The Joule Thief (Wikipedia) is a well-known “instant gratification” hobby circuit that uses just a handful of components to pull off a pretty impressive parlor trick — using a single 1.5V battery, the Joule Thief can light a high-voltage blue or white LED that normally requires 3.5V or greater to turn on. Even more impressive, it can do so using a battery that is so drained of energy as to be counted “dead” for almost all other purposes. I have not measured this value myself, but it is commonly claimed that a Joule Thief can light a white LED from a battery with an open-circuit voltage as low as 0.6. We published a miniaturized flashlight build based on the Joule Thief circuit as Zombie Flashlight in MAKE Vol 37. That build uses an empty lip balm tube to house a AAA battery and the Joule Thief electronics, which are assembled on a tiny slab of perfboard. We had a great time building our test prototype in the MAKE labs, and got interested in the idea of designing a free-form Joule Thief flashlight that could be soldered together from individual components with no prototyping board or PCB. We were playing around with the components and had a batch of those new(ish) “Piranha-pin” low-profile LEDs lying around at the time. The discovery that a TO-92 transistor package nestled perfectly back-to-back into the empty space between the four LED pins kind of sealed the deal — we needed to do a free-form build. The Vampire Flashlight is the result. The design is supercompact and minimal, and the end product is a usable flashlight only just slightly bigger than the battery itself. While the Joule Thief is a very simple circuit to build, this form factor demands a bit of soldering skill and patience. If you don’t enjoy the process of meticulous electronics craftsmanship, it could easily be adapted for construction by mounting battery pack, switch, toroid, and everything else on a small rectangle of perfboard, then completing the circuit connections with 22AWG solid-core jumper wires.   For more detail: Bring “dead” batteries back to life with a toroid and the Joule Thief circuit. ### Build a transistor circuit board for controlling Air Conditioner remote control with Arduino I was supporting a group of student on their graduation project. One of the difficulties they faced was on controlling an A/C unit with Arduino microcontroller. The first experiment we tried to work it out was by record the A/C remote control beam signal for each needed button by using the IRrecvDump code with IRremote library for Arduino (https://github.com/shirriff/Arduino-IRremote). Then, use these signals to send it to the A/C unit directly. The main problem we faced was on analyzing the ON/OFF signal code. The ON/OFF signal code curries more than one signal code. This includes switch signal + fan speed + thermostat degree. Some times this could include the conditioning mode, as well, such as Dray, Cool, Fan etc. Basically, this was unsuccessful method to work with all A/C remote controls. The second experiment was by hacking the remote control by adding a sort of wires then attached to Arduino over a relay. Modern remote controls are quite sophisticated and not easy to hack. One mistake in soldering could cause fail of that remote. So, it was too risky to hack and modify the original A/C remote control. However, we did some soldering test on unused remote control until we succeed. Then we wire it up to a number of relay module to control it with Arduino. But relay is quite expensive so that we needed to do a cheap hack without spending much money. Also we want to use less wires to be attached to Arduino to get extra space to add more features. After first and second experiments we come up with a successful way to control the A/C unit. In this experiment, we got rid of using relay also we didn't need to risk our original remote control. So that, we put our hand on a Universal A/C remote control. Then do some hack to that remote to control the A/C through Arduino interface. This will give us a chance to control different type of A/C. The one we hacked is capable to control 1000 A/C manufacturer type. Step 1: Gathering tools First of all, you will need to prepare some tools. I'm using: * Clamps and holders: this helps me to hold the circuit board while soldering. * Soldering iron set. * pliers (long & cutter). * Scalpel blade: I use it to unseal the protective layer over the copper in the A/C remote control, to make it easy to solder a wire to it. * Jumper wires: a suitable one to connected to Arduino board. * resistors: I'm using 22K to protect the NPN transistor from overheating and/or damage. * NPN transistors: any kind of NPN. Use the multimeter to figure out the E B C pins. * Pins strip & its headers: those are goes to the base and remote control for the interaction. * Multimeter: I use it for double check the wiring and for finding the NPN transistor pins. * PCB board: I'm using stripboard type. It is easy to deal with, also, less soldering. * Marker pen: It used to identify parts on circuit board. * Drill set with its attachment: I use it for drilling hols into PCB boards. Also for cutting the back cover of the remote control for header pins. * Drill holder (optional). * Some screwdriver: for removing the remote control back cover. I'm using a plastic tool kit (that uses with mobile phones), it leaves no scratch on the remote body. * Tape: I use it for holding the remote control LCD screen and protect it. * A soft sponge tape: I use it to protect the back of the board base from any direct contact. Also for leveling remote on base. Step 2: Open the remote control & locate buttons line This is a bit tricky step. First you have to use a screwdriver (screwdriver plastic) to open the remote control chest. Then, you will need to identify both lines for each button. Some remote controls has a common line for all buttons (see this http://tronixstuff.files.wordpress.com/2011/04/remotepcbss.jpg). This is too easy to hack. Mostly, modern remote controllers has complicated set of lines. Which could has a shared line that can be common and main (signal) sequentially with each other. In this step, I identified each combined line with different colors. From the picture, you will notice that each button has two different colors (e.g. to press on ON/OFF button we have to contact the Red & purple lines). Also, because I'm using this remote with Arduino, I discard the use of the buttons on bottom, which they set the timing and manage the Air Conditioner to start or stop on a specified time. As this can be easily programmed with Arduino it self. These buttons are identified with color GRAY, which is the common line. So I didn't take it into account. The final colors combination are PURPLE, RED, BROWN, GREEN, BLUE and YELLOW. Next step, we will included the header pins to the A/C remote control board. NOTE THAT YOU CAN USE ANY UNUSED PLASTIC BUSINESS CARD TO OPEN THE REMOTE CHEST SAFELY. Major Components in Project* Clamps and holders * Soldering iron set. * pliers * Scalpel blade * Jumper wires   For more detail: Build a transistor circuit board for controlling Air Conditioner remote control with Arduino ### BOOST THE SPEED OF YOUR STM32 MICROCONTROLLERS BY 31% USING CORE-COUPLED MEMORY When working on projects with computation-intensive routines and (or) near real-time performance requirements, having a “lightning-fast” RAM is usually a good thing for developers. This is one of the reasons while STMicro included the Core Coupled Memory (CCM) RAM  in a good number of its STM32 microcontroller series, and Dim Tass recently demonstrated how to use it, in a blog post on his website. Core Coupled Memory (CCM), unlike flash storage, offers high performance and a zero wait-state that allows the execution of instructions at a fraction of the time it takes when running the firmware from flash storage.  According to STMicro, it is was included in the microcontrollers for use in scenarios that involve “real-time and computation-intensive routines [including] digital power conversion control loops (switch-mode power supplies, lighting), field-oriented 3-phase motor control, [and] real-time DSP (digital signal processing)”. Describing CCM, Tass referred to it as potentially one of the features used by STM to set the microcontrollers with it, apart. In his words, “Vendors need to make themselves stand out from their competitors and this is done in many different ways. Of course, the most important is the price, but some times that’s not enough, because even the low price doesn’t mean that the controller fits your project”. For the demo showcasing how developers can use the CCM, Tass made use of an STM32F303CC development board, which has 256kB of flash storage, 40kB of static RAM (SRAM) and 8kB of Core Coupled Memory(CCM) RAM. For the firmware, he adopted the LZ4 compression algorithm as a benchmark, along with a custom CMake that allows execution on flash  SRAM, and CCM RAM. Executing the LZ4 compression algorithm at different clock speeds on the flash, the SRAM, and the CCM. At the default board clock speed of 72MHz and a block size of 8k, executing the LZ4 algorithm from the flash took between 279 and 304 milliseconds. Moving to the SRAM dropped the runtime further to 251ms, but switching to CCM lowered it still further to 172ms. To further test the limits, Tass overclocked the device to get a clock speed of 128MHz and tested the performance of all three memories again. At the new clock speed with the same block size as before, execution time dropped to between 156-171ms on flash memory, 141 on the SRAM, 97ms on the CCM. Read more: BOOST THE SPEED OF YOUR STM32 MICROCONTROLLERS BY 31% USING CORE-COUPLED MEMORY ### BOARDCON IDEA3399 FEATURE-RICH SBC COMES WITH M.2 NVME SSD AND 4G LTE PCIE SOCKETS A few years back, Boardcon introduced EM3399 single board computer powered by a Rockchip RK3399 processor through the company’s PICO3399 SO-DIMM system-on-module. They’ve now designed another RK3399 based SBC , the Idea3399 – comprised of a baseboard and module, but instead of re-using the SO-DIMM module, CM3399 system-on-module with castellated holes was used instead. The new board comes with many of the same features as their first board but adds an M.2 NVMe SSD slot and mPCIe socket for 4G LTE modem on the back of the board. CM3399 SoM Key Features And Specifications: SoC – Rockchip RK3399 dual Cortex-A72 @ 1.8GHz + quad Cortex-A53 @ 1.4GHz System Memory – 4GB LPDDR4 Storage – 8GB eMMC flash 202 castellated pin (1.3mm pitch) with  USB2.0 host, USB3.0 host, USB OTG, UART, MIPI, Ethernet, SPI, HDMI out, I2C, I2S, PCI Express, SDIO, SD/MMC, eDP, Camera, PWM, ADC IN, etc… Power – Supply Voltage: 5V; RK808 PMU Dimensions – 55  x 50mm (8 Layers, complying with EMS/EMI) The module comes with Android 7.1.2 preinstalled and targets AIoT applications such as intelligent interactive devices, personal computers, and robots. The Android BSP is based on  Linux 4.4.126 and the cross-compilation toolchain runs on Ubuntu 16.04. Idea3399 SBC Specifications: SoM – CM3399 module described above Storage – MicroSD card slot, M.2 2280 NVMe SSD slot Video Output / Display I/F 1x mini Display Port 1x HDMI 2.0 port up to 4Kp60 Up to 2x MIPI DSI interface for LCD (1x multiplexed with MIPI CSI) Audio – Realtek ALC5651 Audio CODEC, 3.5mm jack for headphone, 14-pin header for MIC Array, digital audio via HDMI Camera – Up to 2x MIPI CSI interface for 13MP camera (1x multiplexed with MIPI DSI); Optional OV13850 camera sensor (13MP) Connectivity Gigabit Ethernet (RTL8211E) Dual-band (2.4GHz/5GHz) 802.11 a/b/g/n/ac WiFi 5 and Bluetooth 4.1 Optional 3G/4G LTE mPCIe card + SIM card slot USB – 1x USB2.0 host port, 2x USB 3.0 Type-C ports Serial 4-wire UART1 (Multiplexed signal with Ethernet), 1x 8pin connector 3-pin debug UART2 4-wire UART3 (Multiplexed signal with Ethernet), 1x 4pin connector Expansion Headers – 8-pin for SPI Misc – IR receiver; recovery, power and reset buttons; CR1220 battery for RTC Power Supply – DC 5V/3A or 3.6V~12.8V Li-Ion battery; 2x 5-pin power header; 2×4-pin PoE header Dimensions – 135mm x 90mm Read more: BOARDCON IDEA3399 FEATURE-RICH SBC COMES WITH M.2 NVME SSD AND 4G LTE PCIE SOCKETS ### Build Temperature & Humidity & Smoke Detector Alarm System Based on Arduino Project Summary: Build temperature & humidity & smoke alarm system based on ICStation Mega 2560 compatible with Arduino( Cost is USD32.39 ONLY) . The working voltage of this system is DC5V.It can measure the current temperature, humidity and smoke. It can display real-time data by the 1602 LCD and can realize the sound and light alarm when in the dangerous temperature and humidity. It is a simply and easily to operate monitoring alarm system about temperature humidity and smoke. Full Project: 1.When connect to the power supply, after the initialization of hardware, the1602 LCDwill display the current temperature,humidity and smoke volume 2.When we press the NO.1 key, the1602 LCD will turn the page and enter the dangerous temperature setting page.At this time, press NO.2 key once, the dangerous temperature will add one. If the actual temperature is higher than the setting value, the gree LED will light, at the same time the buzzer will alarm. When the actual temperature is lower than the dangerous temperature, the LED will go out and the buzzer will stop alarm. 3.When the 1602LCD display stays on the second page , we press the NO.1 key, you will see the 1602LCD will turn page to the third page and enter the dangerous humidity setting page.At this time, press the NO.3 key, the dangerous humidity will add one.If the actual humidity is higher than the setting value, the red LED will light,at the same time the buzzer alarms. When the actual humidity is lower than the dangerous humidity, the LED will go out and buzzer stop alarming. Bill of Materials: 1 x ICStation ATMEGA2560 Mega2560 R3 Board Compatible Arduino 1 x DHT11 Digital Humidity Temperature Sensor 1 x MQ-2 Gas Sensor Module 1 x 1602A HD44780 Character LCD Display Module LCM Blue Backlight 1 x Active Buzzer Module for Arduino 1 x 830 Point Solderless PCB Bread Board MB-102 Test DIY 1 x 100K ohm 3296W Trim Pot Trimmer Potentiometer 3296W-104 1 x 100pcs 1K ohm 1/4W 1% Accuracy Metal Film Resistor 1 x 10pcs Dupont 20cm Color Cable Line 1p-1p Pin Connector 3 x 12X12X5mm Tact Switches 4 Legs 1 x 40pcs Dupont Wire Color Jumper Cable 2.54mm 1P-1P Male to Female 1 x Green LED 5mm DIP Hole Though 1 x Red LED 5mm DIP Hole Though     For more detail: Build Temperature & Humidity & Smoke Detector Alarm System Based on Arduino ### Challenges of deprescribing and minimizing use of anticholinergic medications Medications with anticholinergic properties have been consistently associated with a wide range of adverse outcomes for older adults including cognitive impairment, yet these drugs continue to be commonly prescribed for depression, urinary incontinence, irritable bowel syndrome and Parkinson's disease. In an editorial published in the peer-reviewed journal Frontiers in Pharmacology, co-authors Noll Campbell, PharmD, M.S., and Malaz Boustani, M.D., MPH, of the Regenstrief Institute (U.S) and colleagues Roy Soiza, MBChB, of the University of Aberdeen (UK) and Arduino Mangoni, M.D., Ph.D., of Flinders University (Australia) highlight the complexity of gaining a better understanding of how to safely deprescribe anticholinergic medications given the risks they convey and the significant difficulty encountered across cultures in decreasing their use. Anticholinergics affect the brain by blocking acetylcholine, a nervous system neurotransmitter that influences memory, alertness and planning skills. These medications are used by approximately one in four older adults each year in the United States. The editorial authors observe that physician and pharmacist awareness of the dangers of anticholinergic therapy is growing, propelling research on these medications and on opportunities for deprescribing. However, there is currently no simple or reliable way for patients to know if the anticholinergics they use today will convey adverse effects in the future. Nor are there high-quality studies explaining how to identify which current users should stop these medications and what will happen if they do. "While we at Regenstrief Institute and other researchers throughout the world have identified a strong and consistent link between anticholinergic drugs and cognitive impairment from observational studies, randomized clinical trials represent the only rigorous method to definitively establish a causal relationship between these frequently used drugs and various dementias," said editorial co-author Dr. Campbell, an expert in deprescribing. "We are nearly mid-way through a large multiyear randomized, controlled anticholinergic deprescribing trial that will help us understand whether these medications have a causal link with cognitive impairment as well as other outcomes associated with deprescribing." He adds that "what we learn about how to make changes at both the provider and the patient level for anticholinergics may well be applicable to other high-risk drug classes like benzodiazepines and opioids." "Physicians should review with older patients all prescription as well as over-the-counter medications to determine anticholinergic exposure and discuss options that are less harmful to the aging brain," said Dr. Boustani, a geriatrician and co-author of the editorial. Dr. Boustani is a pioneer in aging brain care research and clinical practice. He and Regenstrief Institute colleagues developed the Anticholinergic Burden Scale. "Editorial: Deprescribing and Minimizing Use of Anticholinergic Medications" is published in the open access journal Frontiers in Pharmacology. Source: Challenges of deprescribing and minimizing use of anticholinergic medications ### Circuits capable of functioning at temperatures greater than 650 degrees fahrenheit (Phys.org) —Engineering researchers at the University of Arkansas have designed integrated circuits that can survive at temperatures greater than 350 degrees Celsius – or roughly 660 degrees Fahrenheit. Their work, funded by the National Science Foundation, will improve the functioning of processors, drivers, controllers and other analog and digital circuits used in power electronics, automobiles and aerospace equipment – all of which must perform at high and often extreme temperatures.   "This ruggedness allows these circuits to be placed in locations where standard silicon-based parts can't survive," said Alan Mantooth, Distinguished Professor. "The circuit blocks we designed contributed to superior performance of signal processing, controllers and driver circuitry. We are extremely excited about the results so far." The research is critical because one-third of all power produced in the United States passes through some kind of power electronic converter or motor drive before it reaches the end user. Circuits developed by the University of Arkansas team will enable tight integration of control in the tough environmental conditions these applications demand. They will also improve electrical efficiency while simultaneously reducing the overall size and complexity of these systems. The researchers worked with silicon carbide, a semiconducting material that is more rugged than conventional materials used in electronics. Silicon carbide is able to withstand extremely high voltage and is a good thermal conductor, meaning it can operate at high temperatures without requiring extra equipment to remove heat. The research team, led by Mantooth and Jia Di, professor of computer engineering, achieved the higher performance by combining silicon carbide with wide temperature design techniques. In the world of power electronics and integrated circuits, their work represents the first implementation of a number of fundamental analog, digital and mixed-signal blocks, such as a phase-locked loop using a complimentary-style silicon carbide technology. A phase-locked loop, or PLL, is a control system that generates an output signal whose phase is related to the phase of an input signal. Such a function is critical in a number of circuit applications such as signal synchronization, frequency synthesis, and modulation and demodulation schemes.   For more detail: Circuits capable of functioning at temperatures greater than 650 degrees fahrenheit ### CISSOID ANNOUNCES 3-PHASE SIC MOSFET INTELLIGENT POWER MODULE FOR E-MOBILITY CISSOID, the leader in high temperature semiconductors for the most demanding markets, announces today a new 3-Phase SiC MOSFET Intelligent Power Module (IPM) platform for E-mobility. This new IPM technology offers an all-in-one solution including a 3-Phase water-cooled SiC MOSFET module with built-in gate drivers. Co-optimizing the electrical, mechanical and thermal design of the power module and its proximity control, this new scalable platform will improve time-to-market for Electric Car OEMs and electric motor manufacturers willing to rapidly adopt SiC-based inverters for more efficient and compact motor drives. With this SiC-based IPM solution, CISSOID maintains its focus on addressing challenges for automotive and industrial markets. The first product out of this scalable platform, a 3-Phase 1200V/450A SiC MOSFET IPM, features low conduction losses, with 3.25mOhms On resistance, and low switching losses, with respectively 8.3mJ turn-on and 11.2mJ turn-off energies at 600V/300A. It reduces losses by at least a factor 3 with respect to state-of-the-art IGBT power modules. The new module is water-cooled through a lightweight AlSiC pin-fin baseplate for a junction-to-fluid thermal resistance of 0.15°C/W. The power module is rated for junction temperature up to 175°C. The IPM withstands isolation voltages up to 3600V (50Hz, 1min).  The built-in gate driver includes three on-board isolated power supplies (one per phase) delivering each up to 5W allowing to easily drive the power module up to 25KHz and at ambient temperatures up to 125°C. Peak gate current up to 10A and immunity to high dV/dt (>50KV/µs) enable fast switching of the power module and low switching losses. Protection functions such as Undervoltage Lockout (UVLO), Active Miller Clamping (AMC), Desaturation Detection and Soft-Shut-Down (SSD) ensure the safe drive and reliable operation of the power module in case of fault events. Read more: CISSOID ANNOUNCES 3-PHASE SIC MOSFET INTELLIGENT POWER MODULE FOR E-MOBILITY ### COM EXPRESS TYPE 10 CPU MODULE FEATURES EXTENDED TEMPERATURE AND ECC SUPPORT IBASE has announced the new ET876 COM Express Type 10 CPU Module (R3.0) supporting Intel’s energy-efficient Atom™ Processor E3900 series, Intel® Celeron® Processor N3350 and Intel® Pentium® Processor N4200. It utilizes multi-core processor technology for high-performance computing and flexible programmable graphics, making it ideal for today’s mission-critical IoT, transportation, medical, military, and industrial automation applications. The highly integrated ET876 comes in a compact form factor (84 x 55mm) and matches the performance requirements of cost-effective, small footprint embedded systems. It benefits from the Intel Gen9 graphics engine featuring DirectX 12, OpenGL 4.3 and OpenCL 2.0 to deliver stunning graphics and 4K resolution output, as well as simultaneous display combinations of DDI and LVDS or eDP. Connectivity options on the carrier board can include 8x USB 3.0, 2x USB 3.0, and 2x SATA III. All models support Gigabit connectivity, 4GB DDR3L with ECC standard, TPM hardware security and up to 32GB of eMMC storage. ET876 FEATURES: Onboard Intel® Atom™ x7-E3950, 2.0GHz or x5-E3940, 1.8GHz or x5-E3930, 1.8GHz [i-Temp support] Onboard DDR3L memory with ECC support 1x Intel® I210IT PCI-E Gigabit LAN Supports TPM (2.0), eMMC5.0 (optional) Wide-range operating temperature from -40°C to 85°C Read more: COM EXPRESS TYPE 10 CPU MODULE FEATURES EXTENDED TEMPERATURE AND ECC SUPPORT ### Compact 3-in-1 Stripboard DIYduino with Integrated Sensor and L298N Motor Shield I am presenting a compact design of a stripboard Arduino board (DIYduino) that includes a 2A motor driver and has additionally the functionality of a sensor shield. The 2-channel version cost approximately $29.43 and is more affordable compared to $39.00 for a commercially available system consisting of an Arduino Uno, $21.50, a sensor shield, $8.50, and a motor shield, $9.00. The cost can be further reduced to $27.44 by building a “bare bones” version that omits parts that are not required for the functionality of the device but are rather added for convenience. Such parts are LEDs and their resistors and screw terminals. I am presenting a total of five different versions: 1. DIYduino 2. DIYduino with integrated sensor and 1-channel motorshield - no speed control 3. DIYduino with integrated sensor and 1-channel motorshield - with speed control 4. DIYduino with integrated sensor and 2-channel motorshield - no speed control 5. DIYduino with integrated sensor and 2-channel motorshield - with speed control My pictures represent the third version, which is the one I chose for a particular robot application that I am currently building. Step 2: Tools and Hardware The picture shows most of the hardware that I used: 1) Solder iron & solder – to solder everything together 2) Carpet knife – to separate copper traces between holes 3) Hand saw with skinny blade – to cut strip board to size 4) File, not too coarse – to deburr strip board after cutting it 5) Wire cutters – to shorten legs of soldered electronic component 6) Fine tipped pliers – to bend component legs 7) Red, black, blue sharpie markers and pencil – to transfer layout to stripboard 8) Third Hand (invented by rstraugh ...thanks) – to hold parts and board when needed 9) Track Cutter (invented by scraptopower ...much obliged) – to separate copper traces at holes 10) Voltmeter with test leads – to confirm functionality of separation cuts and debugging 11) Scanned in strip board pattern – to develop stripboard schematic 12) ArduinoISP Bootloader/Programmer Combination Shield (not shown) & Arduino with USB to serial chip (e.g. Arduino Uno) - to upload the bootloader and sketches to DIYduino. You can also use a USBtoSerial programmer for uploading a sketch and work around the Bootloader Shield and use the DIYduino you build here to load the bootloader. 13) Cables to plug onto male/female connectors (not shown) – to make connections for testing 14) Variable power supply with voltage range of roughly 3V to 12V – to test voltage regulator and provide power to stripboard (not shown) 15) Computer with Arduino software – to test functionality of DIYduino & motor driver (not shown) 16) Drill and drill bits (not shown) – to widen/drill holes for stand offs and drill hole in heat sink Step 3: Combining Schematics of DIYduino & Motor Driver To create the strip board layout I determined the schematic I wanted to create first. You can essentially do a strip board design with any schematic no matter if you invented it, downloaded it, or re-engineered it. For me the official Arduino schematic was a tad too complicated and essentially overkill for my purpose. Instead I altered the much simpler schematic of the minimalist Arduino as shown in the first figure. This schematic was published and discussed on http://thetransistor.com/projects/arduino/. In the schematic shown here I marked my changes in red color: 1. I crossed out the items that weren't part of my built. 2. I changed the values of the capacitors that smooth potential voltage peaks at the 5V regulator. These are the values that I had available in my stock and they'll do the job. 3. I crossed out the LED/resistor connected to Pin13 to safe parts. I only connected an LED/resistor temporarily to test the functionality of the DIYduino as described later. 4. I removed the +5V from the Aref as recommended in a comment with respect to this tutorial: http://arduino.cc/forum/index.php/topic,7569.0.html Then I combined the minimalist Arduino schematic with a schematic of a L298N motordriver that I found on solarbotics's site. I did this by connecting L1, L2, L3, and L4 (L298N pins 5, 7, 10, & 12) to the ATMEGA's digital pins 7, 8, 13, & 12, respectively. Pins E1-2 and E3-4 (L298N pins 6 & 11) are connected to +5V for maximum motor speed at all times or to Arduino PWM pins 9 & 6 for adjustable motor speed, respectively. I am also showing the ATMEGA 168/328 pin map, which help me to assign the proper ATMEGA pins and which can be found at http://arduino.cc/en/Hacking/PinMapping168. Major Components in Project The table shows all the parts for the devices including prices from Jan, 2013. I considered some of the parts, such as jumper wires or resistors, as standard inventory that is likely purchased in bulk and not as individual parts. Therefore I typically listed individual parts and noted with an asterisk when you would have leftovers, such as for example extra strip board which you can use on other projects. I did not consider the prices marked with the single asterisk for the total price of the device. Further note that item prices at Newark drop when you order a certain number of parts, typically if you order more than 10x. I listed the highest individual prices here and also ignored any special offers or promotions. If you buy more the price will go down. On another note, not all of the parts listed here are really necessary for operation. The parts that you can omit are marked with a double asterisk. The 'bare bones price' is also indicated at the bottom of the table. Last not least, the ATMEGA 328 that I used required a bootloader. I recently created an instructable called ArduinoISP Bootloader/Programmer Combination Shield that addressed how to upload a bootloader to a “virgin” ATMEGA. You can also buy ATMEGAs that have a bootloader installed. They are almost double the price. For completion I listed one in the table. The component prices were taken from www.newark.com and www.mcmaster.com. You can find order numbers and prices in the table. For more detail: Compact 3-in-1 Stripboard DIYduino with Integrated Sensor and L298N Motor Shield ### COMPACT, MULTI-CHANNEL CDP-07M UHF NARROW-BAND INDUSTRIAL TRANSMITTER/RECEIVER PAIR The newly released CDP-TX-07M and CDP-RX-07M inherit the compact, high-functionality, high-quality characteristics of their first-generation models with updated internal circuit design for the long-term stability and life needed for industrial applications.  Saelig Company, Inc. has announced the compact, multi-channel CDP-07M UHF Narrow-Band Transmitter/Receiver Pair: CDP-TX-07M (transmitter) and CDP-RX-07M (receiver).  The modules contain almost all of the components necessary for radio transmission in a compact housing. The newly released CDP-TX-07M and CDP-RX-07M inherit the compact, high-functionality, high-quality concept of their first-generation models, and function as 434MHz 10mW ISM band radio modules, with a communication range of 600 yards or more.  The “P” versions (CDP-TX-07MP, CDP-RX-07MP) allow frequency setting to be performed externally. The CE-compliant CDP-07M receiver has excellent interference rejection characteristics and fulfils the requirements of the highest EN300220 receiver standard, Category 1. The receiver’s double-superheterodyne design is equipped with a SAW filter, ensuring the high sensitivity and excellent selectivity needed for stable and long range communications. The CDP-07M model has four preset frequency channels, selectable by solder jumpers on a circuit board. With the CDP-07MP version, channel selection is via two pins on the module which can be externally driven.  The preset channels can be pre-programmed to four frequency choices selected from 67 frequencies in the 434MHz ISM band by using a supplied PC program.  Circuit Design has kept the same user interface as previous models while at the same time updating the internal circuit design for the long-term stability and life needed for industrial applications. 10mW 434MHz band RF output Wide operating temperature (-20 to + 65deg C) 4 presettable channels with narrowband FM 25 kHz channel spacing 2.2 to 5.5V (TX) – 20 mA; 3 to 14V (RX) – 23 mA PLL controlled VCO, data rate 100 to 4800bps FSK Compact size: TX = 22 x 12 x 4.5mm; RX = 36 x 26 x8mm Double superheterodyne receiver Sensitivity:  -120 dBm Receiver category 1 RED compliant (EN 300 220) RoHS compliance Simple serial data interface for user-specific protocols Read more: COMPACT, MULTI-CHANNEL CDP-07M UHF NARROW-BAND INDUSTRIAL TRANSMITTER/RECEIVER PAIR ### COMPACT NANOPI NEO3 SBC FROM FRIENDLYELEC RUNS LINUX ON RK3328 AND SELLS FOR $20+ The recently launched NanoPi Neo3 from FriendlyElec is a single board computer that runs Linux on a quad-core Cortex-A53 Rockchip RK3328 and has 1 or 2GB DDR4, Gigabit Ethernet port, USB 3.0, and a wide operating range of -20 0C to 70 0C. Like most of the earlier released Neo models from FriendlyElec, the new Neo3 SBC is a headless board with a compact footprint measuring 48 mm by 48 mm. The company had earlier announced its Rockchip RK3399 based NanoPi Neo4 single-board computer that came with a lot of excitement as the first SBC to break RK3399 records for size and price, measuring 60 mm by 45 mm with a starting price of $45 and above. While the NanoPi Neo3 offers a similar but less powerful RK3328 Rockchip SoC as the Neo4, the Neo3 offers both 1GB and 2GB of DDR4 unlike the 1GB of DDR3 available on the Neo4, and also starting at a $20 price tag compared to the $45 start price for the Neo4. Some highlight features and specifications of the NanoPi Neo3 SBC include: CPU – Rockchip RK3328 Quad Cortex-A53 cores clocked to 1.5 GHz with a Mali-450 MP2 GPU 1 GB or 2 GB DDR4 RAM Gigabit Ethernet port with unique MAC address Read more: COMPACT NANOPI NEO3 SBC FROM FRIENDLYELEC RUNS LINUX ON RK3328 AND SELLS FOR $20+ ### COMPACT NON-INVASIVE SENSOR CHIP DEVELOPED TO RECORD MULTIPLE HEART AND LUNG SIGNALS A team of researchers at the ‘Georgia Institute of Technology’ has come up with a non-invasive sensor-in-a-chip that records details of the heartbeat, respiration rates, and lung sounds. It even tracks the wearer’s physical activities, such as walking. The signals are recorded in sync, potentially giving healthcare workers a detailed overview of a patient’s heart and lungs. The ladybug sized chip acts as a high-tech electronic stethoscope combined with an accelerometer and is called an accelerometer contact microphone. It detects vibrations that enter from inside the body while filtering out distracting noises from outside the body’s core like airborne sounds. The sounds thus produced are analyzed to get detailed information on the patient. The device is sensitive to sounds coming at it from inside the body and it picks up useful vibrations even through clothing. The chip has two thin layers of silicon sandwiching a 270 nm gap, each carrying a small voltage which gives it a sensing capability. Vibrations from bodily motions and sounds send pressure waves through the chip which makes the voltage change subtly and creates readable electronic outputs. The sensor is a chip attuned to vibrations and next to it is an electronic chip called a signal-conditioning circuit that translates the sensor chip’s signals into patterned read-outs. While the chip was being tested on humans, it recorded a variety of signals from the mechanical workings of the lungs and the heart with great clarity. The team plans to attach three sensors or more to a chest band to triangulate signals, determining exactly where they come from inside the body. Read more: COMPACT NON-INVASIVE SENSOR CHIP DEVELOPED TO RECORD MULTIPLE HEART AND LUNG SIGNALS ### Complete Arduino-based 3D-printed Battery-powered Mini Retro Arcade Machine It's been a while since I've published my last Instructables. I'm back, and I'm 3D-printed-powered! Enjoy this mini retro arcade machine. It's literally my first complete end-to-end 3D-printed project: I made the design, printed it, assembled the electronics, programmed it, and now to the tutorial :) This guide will be updated soon with instructions to finish the print with sanding, filler, and paint. Also, I'll keep adding games. Notable features: 2 playersBattery poweredRetro buzzer sounds taken directly from the GameBoy intro, Nibbles.bas, War GamesSporting a shiny Black Led Plexiglas bought directly from the factoryOptimized Led separation and diffusion Supplies The project needs: a bunch of 3D-printed parts (STL attached below) a bunch of electronics (Arduino Uno clone, Led matrix, dual PS2 joystick shield, piezo buzzer, battery holder, assorted cables and connectors a diffuser for the Leds Complete bill of materials: Arduino Uno clone. I used the "dccduino", 10$ from Aliexpress: https://www.aliexpress.com/item/32256247770.html 8x8 Neopixel (ws2812b) Led matrix (clone). I used this, 6$ from Aliexpress: https://www.aliexpress.com/item/4001296811800.html Dual PS2-style joystick shield. I used this, 3$ from Aliexpress: https://www.aliexpress.com/item/1005001632478611.html. Warning! Buy 2 of these, for two reasons: mine came with a shorted AREF pin; they have an extra piece of PCB in random places and you need its design to fit the 3D printed part. Buying 2 will maximise the likelihood of success. Piezo buzzer. I used one similar to this, 1$, from Aliexpress: https://www.aliexpress.com/item/1005002531465180.html Battery holder. I used one of these, they're 4 for 10$ on Aliexpress. These are switched! https://www.aliexpress.com/item/32717063169.html Assorted dupont cables, 4-way dupont connectors, electrical junctions, speaker cable. I had spare ones around. In general, any cables to bring power from the battery holder to the leds and the arduino, which you are comfortable soldering and / or connecting. I'm terrible at soldering, so you shouldn't take my advice on this :) What I consider the real star of the hardware: a piece of Black Led Plexiglas coming directly from the factory in Germany. You could try also the Adafruit one. I used this, 10$ for a 30x20cm sample, out of which I could cut 6 pieces like the one needed for this project: https://www.plexiglas-shop.com/ie/products/plexiglas-led/pl9h001gt-3-00-3050x2050-b-sh-01-black-white.html The attached STL files for the 3D printed parts. Step 1: Electronics: Soldering and Connections We need to do the following: prepare the battery pack (comes unsoldered) connect the Arduino to power, leds, and buzzer connect the leds to power All while being mindful of the fact that we need to route cables through the various 3D-printed parts. If you use dupont cables everywhere, it's easy to disconnect/route/connect. First, take your battery pack and notice it has a few metal connectors coming out of the battery holder. Only two are electrical connectors, the other ones are just there to hold things together mechanically. Note the largest two connectors also correspond to the big + and - signs on the plastic. Tin the two connectors with solder. Notice then the on/off switch. It's a three pole one, which means we can connect the middle pole to the +, and then one of the two sides will be going to the electronics to power. If you're unsure, use a multimeter with continuity test to check the connections before soldering. Tin the two poles. Solder a wire from the - of the battery pack (I use speaker cable, all white, with the ground marked with a black line). Solder a wire from the + of the battery pack, to the middle pole of the switch. Solder a wire from the side pole of the switch. For convenience, you can now plug these two wires into an electrical junction (that white element in the pictures). For the Arduino, we need to bear in mind which pins the ps2 joystick shield is going to use. Looking at the PCB, it looks like it's using some analog pins, then D2 and D4 (for the push buttons of the joysticks), then another pin for the led. Which means a good few digital pins are free to use. I've selected pins 7 for the led matrix, and pin 8 for the buzzer. Then, solder some wires going from pins 7, 8, 5v, and GND (I've used the side pins for power as they were giving the full 5.16v. For convenience, if you have a spare 4-way connector (from another led matrix / strip), you could wire: the white to ground; the red to 5v; green to 7; blue to 8. This way, tests and repairs are easier (as you can see from the images, one Arduino died and I needed to replace it - using the connector it's a piece of cake). For the leds, I'm used to powering long (5m) strips, so I know by experience that it's better to try to use all the power cables to spread the power and reduce voltage drop across the leds. So I've connected the red/black power wires in the middle of the matrix directly to the white electrical junction, and then I used the 3-way connector for 5v/data in/GND to the arduino, using another 3 dupont cables. Finally, I connected the piezo buzzer: GND (black) to any GND you have in the system (again I used the white connector), and red to pin 8 of the Arduino. To do this, I soldered a dupont cable to the red wire of the piezo, and then plugged it to the blue pin on the 4-way connector coming from the Arduino. Enough with the wiring! Step 2: Electronics: Programming If you're new to Arduino programming, I suggest you start with a basic tutorial on Instructables. This step assumes you are familiar with the Arduino IDE and how to program an Arduino-compatible board. What you need to do is to install these libraries: adafruit_neopixel adafruit_gfx adafruit_neomatrix alignedjoy ezBuzzer Adafruit Neomatrix makes it very easy to work with these led matrices. All you need to do is to properly set them up in the code, and then you have several primitives for drawing pixels, lines, rectangles, etc. The only limitation I find very annoying is the uint_16 format to specify colors. Right, so, 16 is not a multiple of 3. This means you can't simply use, for example, BBBBBB for grey. Nope. Out of the 16 bits, the first 5 are for red, then 6 for blue, then 5 for green. Apparently our eyes have different sensitivity to different colors. In practical terms, it's advisable to define a bunch of colors after finding their codes online, and then stick to those colors only. I found this tool very useful: http://greekgeeks.net/#maker-tools_convertColor Next, the joysticks. I've tried several options, including reading the raw analog values , and I converged to this alignedjoy library. It does a good job, however I struggle with perfect calibration, so I just set two thresholds, 400 and 600, to decide whether you're outside of the joystick's middle position. Last, but definitely not least, my favorite bit of the software: the ezBuzzer library, and the way I used it :) If you're not new to the Arduino, you know that you could generate a square wave at a particular frequency, feed it to the piezo buzzer, and produce a sound. However, most people use (delay) to produce notes. This may be ok for notifications, but it's not ok for sound effects in games, as the delay is noticeable during the gameplay. You'd need to set the buzzer on, and then check within the main loop() if enough time has passed, before shutting the buzzer off. What ezBuzzer does for you is to simplify all of this, giving you de facto a non-blocking musical library using the piezo buzzer, with the addition of pre-defined notes! Next, the not-so-young me, wanted to give this machine a real retro flavour. I've found the original notes used in the gameboy startup animation, the sound effects of the '90's Nibbles.bas, and even the frequency of the buzzers for the two players of tic-tac-toe in the War Games movie! :) they are all in the code. The code would need a bit of cleaning, but it works. You have three pre-defined games, and it's easy enough to add more, just follow the lead on the loop() function logic: snake for 2 players (without walls given the limited game area), tic-tac-toe, and snake for 1 player. Next games I'll add include connect 4 (or 4-in-a-row) and - if you're good with memory- even chess is possible! You'd need to color-code each piece.. Upload the attached code to the Arduino and you're good to go. Bonus feature of the gameboy startup animation: it gives you a guide for orienting the matrix in later steps (assemling)! Step 3: Preparing the Plexiglas Plexiglas, or acrylic, is not the easiest material to work with. I am not used to cut it, and I was really afraid of this step. Thankfully, I had several options and had seen various guides online for cutting it. First, you need to hold it firmly, I strongly suggest using clamps. I only had small and weak ones, so I used a rigid metal guide to spread and direct the force. I measured 90mmx90mm. The led matrix is 80mmx80mm, so an extra 5mm all around it would give enough clearance for piece of mind. Then, I started with the first approach: scoring using the guide with a cutter / sharp blade, then firmly pulling down one part, hoping the two parts will separate nicely without cracks. I'm not entirely sure why this approach didn't work. I suspect it's because of the thin plexiglas I was using (3mm), and the relatively small piece to be cut. So I went to approach number two. Using the scoring as a guide, I started cutting with a coping saw. Never again. Not only it's very slow, but it was difficult to follow the guide and I ended up wobbling a bit and not producing a straight cut. This is when I remember I am now the proud owner of an excellent oscillating multi-tool, which I used to cut through a door frame! Using the wood+metal blade and the slowest speed, I gently and precisely followed the guide and the cut was as straight as it could be. Only issue: the plexiglass edge had melted! First, remove the melted plastic from the blade as soon as you can, before it cools down. Second, worry not: take a sanding block with 180grit sandpaper and start sanding perpendicular to the edge, basically trying to force the melted plastic away from the sheet, by sanding with a 45 degrees angle. Then sand parallel to the edge to make things extra smooth. I was extremely happy with the final result. A further pass with 240 and then 400 would have left me with the same clean cut from the factory, however again I couldn't care less as we have 5 mm of clearance! :) When sanding plexiglass, be mindful of the dust and pieces: they can scratch the sheet! So at each sanding, I used water to clean, to avoid scratching. It worked perfectly. Step 4: Designing / 3D Printing Now, I was new to CAD. I've considered several options to design my own case: Fusion 360, Tinkercad, OnShape, Shapr3d. They all have very good unique selling points. For me, I wanted an iPad app, easy and intuitive to use, possibly taking full advantage of the iPencil (which sits next to the iPad most of the time doing nothing, admittedly). The choice went to Shapr3d so far. I'll explore the others soon. In this phase, I've learned quite a lot, about CAD, 3D printing, and about product design in general. Without going to the very fine details, There's a few things worth sharing here. First, the design of the led matrix separator. You want those leds to be separated and diffused. It's a combination of design, material, and, possibly, paint. I've tried several different designs (see 4 of them in the picture), including also coating the grid to prevent light leaks. In the end, the top led holder stl file above provides excellent separation and pre-diffusion, for the plexiglas to just have to complete the job with. What works is a conic design, sliced with several perimeters (I put 10 in PrusaSlicer). Forget the infill, I put only 5% and the piece is very solid and doesn't leak any light to the neighbouring cells. Except for the led separator, I've printed everything with 0.30 layers in fast draft. My intention was to post-process with sanding, wood filler, primer, and satin paint. I will update this tutorial with this last final step soon. The led separator was sliced at 0.20 "QUALITY" with 10 perimeters and 5% infill. All other settings are defaults in PrusaSlicer. I've printed everything in PLA. Only time (and a bunch of games) will tell me if that was a good choice. That led matrix does heat up! Step 5: Assembling Decide what level of perfection you desire and who's the final user of this. While the design allowed for a very modular architecture, and all the internal compartments are fairly accessible for repairs / upgrades, there are no screws, so a rigid result is reached only with glueing. That being said, you may safely decide to glue: the battery holder to the arduino holder the big display holder to the battery holder For all the rest, I'd rather keep things simple to open/service, so I used a good bit of BlueTack, plus the low tolerances on my own 3D design, which in fact leaves all junctions very tight. The battery pack fits very tightly to its holder and in my case needs no glue / screws. The arduino fits tightly enough inside its holder, apart for the right side, where a big chunk of BlueTack does the job, though it's gonna be the first point of mechanical failure. The led matrix snugs into its hole and stays there, providing good grip for the led separator (BlueTack-ed onto the led matrix), and the top led holder (which has 4 little corners of BlueTack holding the Plexiglas. In the attached video, no parts are glued (yet!). They are all either firmly pressed into each other, or BlueTack-ed. My reason to hold on on glueing is the post-process (sanding, filling, painting). If you're happy with the bare 3D printed case, just glue all the components. That being said, these are the steps: First, fit the battery pack into the battery holder. Then, route the 4 dupont connectors from the Arduino's 4-way connector through the Arduino holder and the battery holder, using the 2 matching provided rectangular holes. Note the switch of the battery pack goes on the opposite side of such hole. Before mounting the ps2 joystick shield, check if the AREF pin is shorted with a multimeter. If you don't have a multimeter, or the pin is shorted, just bend the AREF pin inside (or cut it), it's useless. Note! The manufacturer of my shield adds a small useless piece of PCB on either side of the shield. I've noticed this only after designing and printing. Check that your shield has the extra PCB material on the top (side towards the display holder). If it's on the bottom, you'll need to either modify the 3D model, or simply remove the extra PCB with pliers and add BlueTack or any other filling material. The holes for the joysticks are perfectly centered and, together with the hole for the USB connector, will serve as a guide to fit the Arduino+shield into the case. It should all be tight on the long sides, but tight only on the left short side (the one with the USB plug), Fit the led matrix into the square hole, bending a little its borders (let's finally use the fact that it's flexible!) if it's too tight. This is now a good time to switch the electronics on, so you can check the orientation of the leds using the gameboy startup animation. You should see a blue horizontal line of leds going down. Center the leds+separator with respect to the big display holder. There is just a 0.5mm clearance all around the grid. A non-centered matrix-separator pair will result in a tiny bit of leds not to be visible in one of the sides. No big deal, but it would bother me. You're good to go! Step 6: Final Remarks Final considerations: The arcade machine can be powered by either (or both!) usb or batteries. Batteries give much more power to the leds and all in all it should be the preferred source of power. I used 1.2v rechargeable batteries, which actually give 1.3v each, so it's a perfect 5.2v power! I haven't tried with 1.5v batteries but it should work as well. I had a lot of fun ideating, designing, building, and assembling this, and I have involved my 4 years old daughter along each step. She loves 3D printing! I've enjoyed it so much to get the inspiration to write this tutorial. I hope it contains the right level of details. Let me know in the comments if that's the case, or else your suggestions to improve the guide - or the machine! Source: Complete Arduino-based 3D-printed Battery-powered Mini Retro Arcade Machine ### COMPULAB’S IOT-GATE-IMX8 IS A LOW COST, MODULAR IOT GATEWAY OPTIMIZED FOR INDUSTRIAL APPLICATIONS CompuLab introduces IOT-GATE-iMX8 – a low cost, industrial IoT gateway, offering exceptional connectivity and versatility in a miniature, rugged housing. Built around CompuLab’s UCM-iMX8M-Mini System-on-Module, IOT-GATE-iMX8 features the NXP i.MX8M Mini SoC coupled with up-to 4GB RAM and 128GB storage. Targeting industrial control and monitoring applications, IOT-GATE-iMX8 delivers an assortment of wireless and wired interfaces required in typical IoT systems: Built-in LTE modem and GNSS WiFi 802.11ax, Bluetooth 5.1 2x Ethernet, up-to 3x RS485 / RS232 ports 3x USB, 2x CAN-FD, digital I/O Optimized For Industrial Deployment IOT-GATE-iMX8 is specifically designed to address the requirements of IoT integration in industrial environments: Operation in wide temperature range of -40C to 80C Shock, vibration, dust and humidity resistance Wide input voltage range of 8V to 36V Isolated industrial interfaces (CAN, RS485, digital I/O) DIN-rail and wall / VESA mounting Read more: COMPULAB’S IOT-GATE-IMX8 IS A LOW COST, MODULAR IOT GATEWAY OPTIMIZED FOR INDUSTRIAL APPLICATIONS   ### CONNECT TECH ANNOUNCES CARRIER BOARD AND SYSTEM LEVEL SUPPORT FOR NVIDIA JETSON XAVIER NX. Connect Tech announces new embedded platforms for the NVIDIA Jetson Xavier NX Supercomputer on Module. Connect Tech, now an NVIDIA Elite Partner, today releases the Quark Carrier and Rudi-NX for the recently announced NVIDIA Jetson Xavier NX module. The Jetson Xavier NX delivers up to 21 TOPS at just 15W, and is capable of running multiple neural networks in parallel and processing data from multiple high-resolution sensors simultaneously. Connect Tech continues to the lead the way in providing readily available Jetson platforms and confirms its continued support of the Jetson Community with these latest product releases.” said Michele Kasza, vice president sales and marketing at Connect Tech. Features: Smaller than the Dev Kit: 82.6mm x 58.8mm 1x USB 3.1, 2x GbE, 2x 2-lane MIPI CSI-2, 1x USB OTG 1x SD card slot, 3x 3.3V UART, 2 x I2C, 1x CAN 2.0b, and 1x SPI +5V DC Input The Quark Carrier is an ultra-small form factor carrier board, just slightly larger than the Xavier NX module measuring 82.6mm x 58.8mm. This carrier has a feature rich I/O set including 1x USB 3.1, 2x GbE, 2x 2-lane MIPI CSI-2, 1x USB OTG, 1x SD card slot, 3x 3.3V UART, 2 x I2C, 1x CAN 2.0b, and 1x SPI as well as positive locking IO connectors optimized for rugged environments. The Quark carrier will also support the NVIDIA Jetson Nano module. Read more: CONNECT TECH ANNOUNCES CARRIER BOARD AND SYSTEM LEVEL SUPPORT FOR NVIDIA JETSON XAVIER NX. ### Controlling an Off-Grid Generator Over Wi-Fi with a Pair of Arduino Boards Off-the-grid living Residing in an area that's removed from the nearest town/city provides an innumerable amount of benefits, yet many of the modern necessities we have come to expect in everyday life might be sorely lacking. One of the largest is, as the name "off-the-grid" implies, reliable access to electricity, meaning that most find themselves using a generator or some form of renewable energy source such as solar and wind. Kaleb Clark from element14 Presents utilizes both a generator and a solar backup, although his Honda EU-7000iS generator is quite far from his house and can be treacherous to reach in inclement weather, which is why he wanted to add wireless controls and monitoring to it. How the system would work Similar to a smart thermostat or other appliance, this remotely operated generator would need to not only have wireless starting capabilities, but also provide real-time data about its status and have a means to shut it down from inside the house. Clark wanted for his solar panels to provide nearly all of his house's power whenever the sun is out and then quickly switch over to the generator backup when the clouds roll in. A front panel breakout cable takes the place of the key and starter button by allowing for one pair of conductors to enable the generator while connected and then turn over the starter motor when the other pair is briefly connected. Getting the components Performing the task of shorting each pair of front panel breakout wires together are two relay modules that, when signaled by a low-voltage source, close an internal contact and allow a current to flow across. The microcontroller and wireless module in this project is an Arduino Nano 33 IoT board. Each of the two is responsible for controlling the generator and displaying information on seven-segment display modules, with one being located inside the house and another inside the generator room. Since IO pins were running low due to the number of seven-segment LED modules, Clark added a pair of MAX7221 LED drivers. Wireless communication and control The power management system in this off-grid setup is a Cerbo GX which allows for the monitoring of multiple power inputs/battery charge state and even hosts its own MQTT broker service. Through it, Clark's program running on the Arduino Nano 33 IoT boards can connect and then send or receive new information as it becomes available. Pressing the generator start button will trigger the generator to start once enabled while incoming information is parsed and displayed via a callback function so both modules always stay in sync. Generator operation When powered off, the panel's top readout is dark and only begins displaying the wattage of the generator once it's running. Below that is the wattage being produced by the solar panels, and the bottom seven-segment display cycles between the battery's charge percentage and voltage. Source: Controlling an Off-Grid Generator Over Wi-Fi with a Pair of Arduino Boards ### Controlling an RGB LED With an Android Smartphone Using Arduino and Bluetooth Module The very first project of my channel is about controlling an RGB LED using annoying push buttons.... I feel that the project was not a good one to learn about micro-controllers, because most of the micro-controllers uses are not fully utilised in that project.... So, This is definitely the time for an upgrade, and upgrade means letting the micro-controller to work with at least few of the features.... The micro-controller used here is an Arduino UNO which has nearly 13 Digital pins and 7 Analog pins.... This whole circuit build can be completed around 500INR. But, with different parts list. and this video uses parts that are little expensive... Part list: Used here Low Cost Alternate 1) Arduino UNO 1) Arduino NANO 2) LED Strip 2) Standard LED 3) Resistor 1K, 2K 4) Bluetooth HC-05 5) Jumper wires 3) Standard Copper wires 6) +9V Battery + cap Step 1: Building the Project... Building of the hardware part.... This project build has two important building steps. one is the hardware build and the other one is the software build. Even a beginner can build this circuit with 30 Minutes along with the programming of the micro-controller. The first will be the hardware part.., i.e., Wiring of LED, Bluetooth, Arduino. HARDWARE BUILD... The part list that i have used is mentioned in the introductory part and links to buy them are provided in the YouTube Video Description.... Make sure you visit and subscribe my channel so you don't miss any of the projects in future ;-) To ease the circuit build i have already designed my circuit using EasyEDA online PCB editor..(Is is 100% free and it's online library is super easy to get almost all components you ever need).... For advanced users you can build the circuit on your own.... Step 2: Preparing Bluetooth Module HC-05 Bluetooth Module Connecting Bluetooth module with Arduino using Male to Female jumper wires.... The pins which we need from Bluetooth module is Vcc, GND, Tx & Rx.. leave the En and State pins untoched because they are not used in this project... The connections are given in the image. If your Bluetooth module is logic level 3v then do not connect your module directly to Arduino. Use pull down resistor at each pins or step down the Tx pin's voltage by creating voltage divider... Step 3: Preparing the LED Preparing RGB LED Strip... There are two types of LED one is common cathode and another one is common anode. I have used common anode in this project, but you can use anything you have already and also have to program the micro-controller according to it. If you are lazy like me then the sketch is provided below in txt format. You can download it and compile directly and use it for the project. According to the type of LED you use, your connection should be like mentioned below:- If you cannot afford a LED strip, then you can always buy those cheap 3V Standard LEDs, bend and solder there anode or cathodes together to make Common Anode or Common Cathode LED. Check the images... Step 4: Program the Micro-controller... Arduino IDE I used Arduino UNO R3 as controller and so arduino IDE to program and burn it to the controller... With an appropriate communication provided to the computer and arduino (USB in My Case).FTDI Breakout in case if you use Arduino NANO. The sketch to the controller does one simple task.... It receives the RGB saturation values sent from the smartphone through the Bluetooth communication and according to it PWM (Pulse Width Modulation) is used to change the resistance to ground in case of common anode and potential to ground in case of common cathode.... The arduino sketch which i programmed is linked to this instructable as program.txt format, you can download it and burn it to the controller. But, for advanced users you can program on your own and comment your suggestions below... Step 5: Downloading the Application and Connecting to the Bluetooth... Downloading the application... Click on this link ==> LED RGB Bluetooth controller Download and install this application in your android smartphone. It is free and the developers really did good thing. so i am promoting them with anything in return. This app is easy to use, Connecting it simple and the Disc as well as RGB bars are easy to use. Turn on the bluetooth in your android smart phone after you install it and pair it with the HC-05 module by inserting its default passcode 1234. Powering up the arduino before this will power up the module as well.... Step 6: Enjoy the Colors... Finalize.... Once, the connection is successful, just play around with the color disc and three bars which sends the saturation value of RGB... Check out the Video procedure in my youtube channel, subscribe to get more of my projects... If you like this project, like share comment and subscribe... Source: Controlling an RGB LED With an Android Smartphone Using Arduino and Bluetooth Module ### COOLSIC™ MOSFET 650 V FAMILY OFFERS BEST RELIABILITY AND PERFORMANCE TO EVEN MORE APPLICATIONS Infineon Technologies AG continues to expand its comprehensive silicon carbide (SiC) product portfolio with 650 V devices. With the newly launched CoolSiC™ MOSFETs Infineon is addressing the growing demand for energy efficiency, power density, and robustness in a wide range of applications. Amongst them are server, telecom and industrial SMPS, solar energy systems, energy storage and battery formation, UPS, motor drives as well as EV-charging. With this launch, Infineon complements its broad silicon, silicon carbide, and gallium nitride-based power semiconductor portfolio in the 600 V / 650 V power domain,” said Steffen Metzger, Senior Director High Voltage Conversion at Infineon’s Power Management & Multimarket Division. “It underlines our unique position in the market being the only manufacturer with such a broad offering for all three power technologies. Additionally, the new CoolSiC family supports our claim to be the number 1 supplier of SiC MOSFET switches for industrial purposes. The CoolSiC MOSFET 650 V devices are rated from 27 mΩ to 107 mΩ. They are available in classic TO-247 3-pin as well as TO-247 4-pin packages, which allows for even lower switching losses. As for all previously launched CoolSiC MOSFET products, the new family of 650 V devices are based on Infineon’s state-of-the-art trench semiconductor technology. Maximizing the strong physical characteristics of SiC, this ensures that the devices offer superior reliability, best-in-class switching and conduction losses. Additionally, they feature highest transconductance level (gain), threshold voltage (V th) of 4 V and short-circuit robustness. Thus, trench technology allows for the lowest losses in the application and highest reliability in operation – without any compromise. 650 V CoolSiC MOSFETs offer attractive benefits in comparison to other silicon and silicon carbide solutions in the market such as switching efficiency at higher frequencies and outstanding reliability. Thanks to the very low on-state resistance (R DS(on)) dependency on temperature they feature an excellent thermal behavior. The devices boast robust and stable body diodes retaining a very low level of reverse recovery charge (Q rr), roughly 80 percent less compared to the best superjunction CoolMOS™ MOSFET. The commutation-robustness helps in achieving very easily an overall system efficiency of 98 percent, e.g. through the usage of continuous conduction mode totem-pole power factor correction (PFC). Read more: COOLSIC™ MOSFET 650 V FAMILY OFFERS BEST RELIABILITY AND PERFORMANCE TO EVEN MORE APPLICATIONS ### DA14531 SMARTBOND TINY™ MODULE IS THE BLUETOOTH® LOW ENERGY SOLUTION THAT WILL POWER THE NEXT 1 BILLION IOT DEVICES THROUGH EASE OF USE Dialog Semiconductor plc, a leading provider of power management, charging, AC/DC power conversion, BLE, low power Wi-Fi and Industrial ICs, today announced the availability of the DA14531 SmartBond TINY module, empowering customers to build the next generation of connected devices. The SmartBond TINY module was specifically optimized to significantly reduce the cost of adding Bluetooth low energy functionality to an IoT system. Its easy-to-use design and software allow developers to quickly and intuitively develop highly functional connected devices, targeting the next generation of connected consumer, connected medical, smart home and smart appliance applications. The module incorporates two unique software features designed to eliminate the complexity often associated with traditional Bluetooth low energy development and empowers customers to develop robust IoT products regardless of their software coding capabilities. The first is the configurable Dialog Serial Port Service (DSPS) software, which emulates a universal asynchronous receiver-transmitter (UART) serial port over BLE, removing the need to write Bluetooth software for “BLE Pipe” applications when connecting the module to a host MCU’s serial port. The second feature, Dialog’s new Codeless software, takes this concept even further by replacing complex code with a simple series of human readable ASCII commands that can be used to generate customer applications. Codeless uses the industry standard Hayes AT-style command set to configure and operate the module. The launch of the SmartBond TINY DA14531 SoC in 2019 set a new industry benchmark for BLE SoC pricing, at less than 50 cents. The DA14531 module further leverages the capabilities of the SoC, including an integrated antenna and all required components, to add BLE functionality to an IoT system in high volumes at a cost of under $1. That price point for BLE functionality, performance and quality is unmatched by competitors,” said Sean McGrath, Senior VP, Connectivity and Audio BG, Dialog Semiconductor. “Not only is this module breaking barriers in terms of cost and power, it is extremely easy for both beginners and experts to use, ensuring that all customers can benefit from its high level of integration and programmable ease of use. Read more: DA14531 SMARTBOND TINY™ MODULE IS THE BLUETOOTH® LOW ENERGY SOLUTION THAT WILL POWER THE NEXT 1 BILLION IOT DEVICES THROUGH EASE OF USE ### Designing and building an synthesizer with Meeblip and Arduino, added videos! For my internship at Create Digital Music/Meeblip I've created quite a fun little synthesizer. This thing is meant to be more flexible than other synthesizer by making it completely independent; it is battery powered, has its own amplifier/speaker and is controlled by a manually operated sequencer. Inspiration for this form comes from my frustrations with most synthesizers: that I can't just take them out and jam with friends! The previous iteration of this Instructable did not feature any sound or video of the actual synth, which is quite essential to see if you want to build something! Other changes include some reworked text, in an effort to make the project more clear for anyone trying to build it. I've entered this Instructable in a few contests, so if you like it, please vote for me by pressing the 'vote' button on the upper right corner! This instructable shows how I made my prototype and describes how you could make your own. It won't go into super-deep detail, but if want to build it and you need some clarification or help with the code, please don't hesitate to contact me! More details can be found in the report I wrote. This document and all included research and illustrations, are covered by a Creative Commons Attribution-ShareAlike 3.0 Unported License. The hardware designs, schematics and code are provided under GPL v3. This means that you can rebuild and improve on this project as you wish, just let me an Meeblip know! If you want to know more about me, check me out at http://www.arvidjense.com Step 1: Concept and design So, synthesizers are pretty cool instruments, making the sounds for the most of the music I listen to right now. Yet they are quite limited in where and how they can be used. For instance, I can play my guitar at home, but I could take it to the park or to a friend for a quick jam-session. Not so simple for a synth: I'd have to plug it out of my studio setup, take a midi keyboard or laptop and just hope the place where I'm going has the right connections to plug in again.* Another point where I feel synthesizers are performing worse than traditional instruments, is in their connection to the user. Where I can feel the vibrations of my guitar resonating through my hands and body, the sound of a synthesizer comes from a speaker a few meters away from me. Similar on the control interface; A guitar is quite clear in the fact that if you pluck a string,a sound comes out. But for a synthesizer you will have to learn the function of dozens of knobs which often have several layers of functionality. On the other hand the palette of different sounds coming from a synthesizer is bigger than that of most traditional instruments. Also the possibilities for programming the notes allow for things not possible on traditional instruments. So why choose one or the other? I wanted to create a synthesizer which has the flexibility and direct connection of a traditional instrument. As I've done this project for Meeblip, one thing was certain, I would use aMeeblip Micro as the sonic centerpiece. Other than that, everything was still open. Would it become a drumbox or rather a guitar-like synth? After looking at a lot of different synthesizers, reading up on synthesizer design literature and sketching lot of variations, I came up with something. After making a lot of prototypes of all the individual pieces (interface, electronics, sequencer etc) I finally found the 'final form' which is made in the next steps. All functions are directly accessible through the knobs and switches on the interface The internal speaker allows the instrument itself to vibrate, which, especially when you place the instrument in your lap, help you feel what your playing. The instrument is controlled through a circular sequencers, in which you set the notes form a range of -12 to +12 semitones from a center note set by the base knob. My design is meant to address the issues I have with synthesizers in a few ways. Most obvious is the fact that it runs on battery power and includes a decent hifi amplifier and speaker, allowing it to be used anywhere. By using prettily grained wood, the instrument looks a lot more delicate than if I'd used plastic. This also references its appearance more towards acoustic instruments, which are usually made of wood. Last thing I did is make the interface as direct as possible. It didn't need to be intuitive, (who makes great music on a guitar the first time (s)he picks it up) but it does need to be reliable and consistent, so you can really learn the instrument. (Please discuss whether or not you feel like these points are valid!) *Companies like Korg and Casio did make portable synthesizers running on batteries and including a speaker, but these are, at least to me, seen more as toys than as serious musical instruments; Their plastic encasing doesn't really place it in the same line as for instance an acoustic guitar or a Moog. While the small portable synths often sound great amplified, their raw sound is nearly always weak and I've never seen them used in a song. Step 2: Materials, tools and budget Major Components in Project Things to buy: Price (total)            Item €             50,00  1 x Meeblip Micro €             20,00  1 x Arduino Leonardo note: most other Arduinos could do, but would need some modifications in the code €             10,00  1 x Cheap USB speakers note: these are all really similar, I got mine at Saturn €             15,00  1 x 250x500x2mm model airplane beech plywood note: my laser-cutting files will only work for 2mm wood, but they could be modified if needed €             30,00  1 x 30minutes of laser-cutting note: this could be free if you have a fablab near you or it could be hugely more expensive if you have to rely on an online laser-cutting service €             18,00  18 x Potentiometers (10K) €             18,00  18 x Knobs €               3,90  6 x Rocker switches €               4,00  2 x Arcade buttons  modified, by taking out the locking mechanism €               0,40  8 x LEDs (5mm yellow) €             10,00  1 x Protoboard €               0,30  3 x IC mounts €               0,10  2 x Resistor (10k) €               0,10  2 x Capacitor (10nF) €               0,50  1 x Headers male (about 30 bits) €               0,50  1 x Headers female (about 30 bits) €               2,00  2 x Multiplexers (4051) €               0,50  1 x Hex inverting Schmitt trigger (40106) €               1,00  1 x 2aa battery holder €               3,00  1 x USB step up converter €               1,00  1 x Rubber band (X shape) €               4,00  1 x Assorted Wires €               2,00  4 x Rubber feet €               8,00  2 x AA batteries (rechargable) €           202,30      Total note: these prices are approximations, you might be able to get some parts cheaper or more expensive, but the ballpark cost will be about €200,- Tools and consumables: Glue Solder Electrical tape Drill bits Soldering iron 10mm wrench File Sanding paper Clear stain Step 3: Encasing First step is to make the enclosure. My woodworking skills aren't that great, but my computer modelling skills are ok, so I chose to laser-cut it. As I couldn't find any laser-cutting facilities with a powerful machine, I didn't have much choice in wood; it had have a thickness of under 2mm. Most types of wood are quite weak and flexible at that thickness, so I had quite a search finding the right wood. I finally settled to a beech plywood for model airplanes of 'F1' quality. The cutting files can be found in "Meeblip lasercut 2mm hairlines part1 [Converted].pdf" and "Meeblip lasercut 2mm hairlines part2 [Converted].pdf". Before cutting the files, you should do some tests on the wood to determine the right intensity and speed. This is very important on the lettering, as a line too thin will be illegible from a distance, while too thick of a line will make the lines flow over. I used the same settings for the lines and letters, but for a next version I would increase the intensity on the lines, to make them a bit more pronounced. The pdf files show the cut lines in red, while the engraved lines are black After everything is cut and engraved, it is time for assembly. Just put all the pieces, except for the front panel, together. Put some high strength (wood or instant) glue in the seams. (Be careful that you don't smudge the wood or leave large blobs of glue hanging on the outside.) Tie this together with some rubber bands and leave it overnight. With the encasing glued, its time for some finishing. First, be sure there is no grease on the wood, if there is, remove it with any degreaser. Now, use some fine grit (>P150) to sand the wooden panels with the grain. Clean it again after this is finished and let it dry. Now you can put any number of layers of light stain on, I did only one. This protects the enclosure from accumulating dirt later on.   For more detail: Designing and building an synthesizer with Meeblip and Arduino, added videos! ### DEVELOPER BOARD 4 V3 – EMBEDDED PLATFORM BASED ON QUALCOMM SNAPDRAGON 410E SOC Developer Board 4 V3 is a single board computer based on Qualcomm Snapdragon 410E SoC with 2GB DDR3, 16GB EMMC, HDMI, MIPI-CSI, 40- and 60-pin expansion connectors. Fully structurally compatible with the 96boards CE standard.It features advanced processing power, WLAN, Gigabit Ethernet, Bluetooth, GPS, all packed into a board the size of a credit card.The DB4 V3 is designed for a variety of embedded and IoT categories. These include robotics, cameras, set-top-boxes, wearables, medical devices, vending machines, building automation, industrial control, digital signage etc. Highlights Compliant with the 96Boards Consumer Edition (CE) Flexible expansion of mezzanine board Custom 64-bit Kryo quad-core CPU up to 1.2GHz Qualcomm® Adreno™ 306 GPU 1-2GB RAM, 8-16GB Flash WLAN 802.11 n/ac Dual Band, Gigabit Ethernet and Bluetooth 4.1 Support Linux, Android and Windows 10 IoT core Qualcomm Snapdragon 410E Quad-Core Developer Board 4 features Qualcomm Snapdragon 410E processor, a Quad Core Qualcomm® Adreno™ 306 at up to 1.2GHz clock speed per core, capable of 32-bit and 64-bit operation. 2G + 16G The utilization of eMMC memory offers an array of benefits in terms of performance security and reliability,resulting in a richer end-user experience Read more: DEVELOPER BOARD 4 V3 – EMBEDDED PLATFORM BASED ON QUALCOMM SNAPDRAGON 410E SOC   ### DIGILENT DEVELOPMENT BOARD GIVEAWAY WORTH OVER $500 TO CELEBRATE OEMSECRETS’ 10 YEAR ANNIVERSARY To celebrate OEMsecrets’ 10 Year Anniversary this month, the price comparison search engine for electronic parts has partnered with Digilent to give away 2 x Digilent development boards worth over $500 each. Digilent is a leading manufacturer of FPGA development boards and microcontrollers serving students, universities, and OEM’s worldwide with technology-based educational design tools. This prize draw is ideal for electrical engineers, hobbyists, and students with a passion for technology and engineering. Two winners will receive a Digilent USB104 A7, which is an Artix-7 FPGA development board in PC/104 form factor. The USAB 104 A7 is the first Digilent board to adhere to an industry-standard form factor and brings power and versatility to your PC/104 stackable PC. The board measures 95.89 mm x 90.17 mm and provides the standard mounting holes with standoffs included. The USB104 A7 features the industrial temperature rated Xilinx Artix-7 XC7A100T. About OEMsecrets.Com By entering a manufacturer part number, users are quickly able to find which electronics distributors have the best price and most inventory. OEMsecrets remains one of the most important aggregator sites and search engines in the electronics industry, listing over 30 million parts from 125+ distributors. Read more: DIGILENT DEVELOPMENT BOARD GIVEAWAY WORTH OVER $500 TO CELEBRATE OEMSECRETS’ 10 YEAR ANNIVERSARY ### Discover the MakerFaire Rome Ambassador kit with an Arduino Uno limited edition MakerFaire Rome, for the first time gathering makers from all over Europe, is coming up and the clock is ticking while the Call for Makers closes next 2nd of June. That’s why we thought to launch a call for collaboration to local hubs, makerspaces and fablab into helping us spreading the word. If you are one of them and you think that makers from your city in Europe would be interested in  joining the event and submitting a project to the call, we can send you a package full of flyers, postcards, stickers and support you into organizing a local event about it. To join the team of Proxies fill THIS short form with your name, city, country, name of your local hub and address and we’ll get back to you.   For more detail: Discover the MakerFaire Rome Ambassador kit with an Arduino Uno limited edition ### DESIGNCORE CARRIER BOARD FOR NVIDIA JETSON XAVIER NX MODULE PROVIDES 12 CAMERA/SENSOR INPUTS TO ENABLE COMPLEX EDGE AI SYSTEMS Features High-Speed SerDes Input, Power-Over-Coax, On-Board FPGA for Hardware-Level Synchronization, On-Board Peripherals, and Expansion Connectors. D3 Engineering today announced its new DesignCore® Carrier Board, which allows engineers to quickly connect multiple cameras or sensors with the recently launched NVIDIA Jetson Xavier NX module to enable AI at the edge. The new DesignCore Carrier Board allows our customers to take advantage of the incredible compute power of the Jetson Xavier NX by connecting up to 12 streams of input data,” said Jason Enslin, Product Line Manager for Embedded Vision at D3 Engineering. “This enables the development of advanced AI robotics and autonomous applications for manufacturing, delivery, retail, agriculture, and more–in a power-efficient and compact form factor. Sensor data is delivered via a serial link and is deserialized into MIPI CSI-2 data for consumption on the Jetson Xavier NX module. This allows the sensors to be placed up to 15 meters away from the processing unit. An on-board FPGA provides hardware-level synchronization capability. For additional specifications and drawings download the DesignCore NVIDIA Jetson Xavier NX 12-Camera Carrier Board Data Sheet. Customers can purchase the DesignCore Carrier Board for development, or in quantity for ODM production. D3 Engineering provides cameras, radar sensors, and software design examples for use with the carrier board. The company also offers engineering design services to interface other sensors or create new NVIDIA Jetson Xavier NX-based designs to meet customers’ unique requirements. With D3 Engineering’s new multi-camera-enabled baseboard and expertise in embedded vision, customers can take advanced products to market more quickly using the Jetson Xavier NX module,” said Murali Gopalakrishna, Head of Product Management, Autonomous Machines at NVIDIA. D3 Engineering is a Jetson Preferred Partner for camera development within the NVIDIA Preferred Partner Network. This gives D3 Engineering access to the Jetson camera toolchain, enabling the company to deliver high-performance, cost-optimized embedded vision systems based on the Jetson platform. Read more: DESIGNCORE CARRIER BOARD FOR NVIDIA JETSON XAVIER NX MODULE PROVIDES 12 CAMERA/SENSOR INPUTS TO ENABLE COMPLEX EDGE AI SYSTEMS ### DIY Arduino Project ARDUINO SERIAL COMMUNICATION TO PROCESSING, ARDUINO WITH ETHERNET SHIELD, ARDUINO WITH GPRS INTRODUCTION This DIY Arduino project explores various ways to enable communication and connectivity between an Arduino board and external devices or networks. Specifically, it focuses on three components - Arduino serial communication to Processing, Arduino with Ethernet shield, and Arduino with GPRS. The Arduino is an open-source hardware and software platform for building electronics projects and interactive objects. It consists of a simple board with various inputs and outputs that can be used to control other devices like motors, lights, sensors etc. The power of Arduino comes from its ability to connect with other systems and communicate data. This project aims to extend the communication abilities of the Arduino by interfacing it with Processing, local WiFi networks, and cellular connectivity. Processing is an open-source programming language and integrated development environment (IDE) built for the electronics hobbyists and visual artists. It can be used to design graphical display programs, interactive experiences, and analyze and visualize information. By enabling serial communication between Arduino and Processing, this project allows for creation of interactive data visualizations, interfaces and more. An Ethernet shield adds networking and internet capabilities to Arduino by providing an Ethernet port. Using this shield, the Arduino can connect to local WiFi networks and communicate over the internet. This expands its applications to monitor devices remotely, receive commands/updates over the internet, send sensor data to servers etc. A GPRS shield similarly connects Arduino to cellular networks for remote connectivity without needing a local WiFi network. It contains a SIM card slot to enable data transmission using the mobile networks. Combining Arduino with GPRS opens up possibilities for building truly wireless sensing and control systems. In summary, these three components enhance the Arduino in important ways - processing for visualization, Ethernet for local WiFi connectivity and GPRS for wireless internet access. The rest of the commentary will delve deeper into how each component is implemented and the applications it enables. ARDUINO TO PROCESSING COMMUNICATION Processing is a visual design tool that can leverage the inputs and outputs of Arduino to generate interactive graphics, visualizations and interfaces. Enabling serial communication between the two platforms allows data from the Arduino to drive visuals, animations and behaviors in Processing programs. Some key things to know about Arduino-Processing communication: The Arduino transmits data to Processing over the serial USB port using Serial.print() statements. Processing connects to the serial port and listens for incoming data using its Serial library. The data received is in the form of ASCII text that needs to be parsed and converted to usable data types like integers, floats etc. Processing can also send data and commands back to Arduino over the serial connection to control outputs. A basic communication sketch would involve the Arduino continuously sending sensor readings like a potentiometer position or temperature. Processing displays this data graphically through shapes, colors and animations that update in real-time. More complex programs could utilize Processing's graphic abilities for applications like: Data logging and visualization of sensor networks over time Augmented reality interfaces reacting to Arduino inputs Interactive art installations tracking body movements, sound and lighting GUI interfaces on tablets/phones to control Arduino projects remotely Educational simulations visualizing analog readings and circuit behaviors With its event-driven programming paradigm, Processing is also well-suited for building visual animations and behaviors based on Arduino triggered events. Some examples include interactive installations detecting hand gestures or proximity, responsive art that tracks body movements through sensors. Overall, combining Arduino's inputs and outputs with Processing's graphical power provides many possibilities for designing innovative interactive experiences and applications. The serial connection acts as the bridge enabling such creations. ARDUINO WITH ETHERNET SHIELD Network connectivity extends the range and capabilities of Arduino projects by allowing communication over local WiFi networks or even the public internet. An Ethernet shield provides this wired networking capability using an onboard WizNet W5100 chip connected to an RJ45 port. Key aspects of implementing Ethernet support on Arduino: The Ethernet library handles low level TCP/IP stack functions like connecting to networks and establishing client/server sockets. Within code, functions like Ethernet.begin(), client.connect(), server.available() are used for network initialization, client requests and server responses respectively. IP addresses need to be assigned either statically through code or dynamically via DHCP protocol. HTTP requests can be made to fetch web pages and send/receive JSON/XML payloads to web APIs and servers. Some common applications enabled by Ethernet shield include: Building HTTP servers on Arduino to serve sensor data or webpages for remote monitoring Connecting sensor nodes as Ethernet clients to send readings to a central server Receiving commands/configurations from browser-based controls over the LAN Integrating Arduino projects with IFTTT and other IoT platforms Downloading firmware updates directly from web servers Functioning as ethernet to wireless bridges to extend range of HC-05/ESP8266 based projects Overall, the Ethernet shield opens up a world of networking possibilities by allowing direct access to local networks and public internet from Arduino. Combined with the right sensors and actuators, it helps build powerful yet low-cost networked embedded systems. Advanced protocols like MQTT can also leverage TCP sockets for reliable messaging between IoT devices. ARDUINO WITH GPRS SHIELD While Ethernet provides wired networking, a GPRS shield adds complete untethered mobility by incorporating 2G cellular connectivity. It contains a SIM card holder and interfacing circuits to connect Arduino to the mobile networks. Some key implementation details involve: Using a compatible GPRS library like TinyGSM to control the modem chip over AT commands. Issuing commands via serial port to perform actions like registering on networks, sending/receiving TCP/UDP data. Handling network connection failures and intermittent connectivity using timeout checks. Managing data usage by selectively enabling/disabling cellular radio when not transmitting. Powering shield components externally via DC adapter or large capacitor banks for high current needs. Applications enabled by cellular connectivity include: Remote sensor nodes transmitting readings over long distances anywhere with coverage. Mobile robotics projects guided through commander apps over internet. Industrial machinery sending reports, receiving updates on the go. Field surveys collecting location-tagged observation data. Smart city infrastructure like smart traffic lights and environment monitoring. Automatic metering and controls in agriculture, utilities. Due to its mobility and range, GPRS empowers building truly wireless autonomous systems and expands the scope of IoT. However, data charges and ongoing cellular costs need consideration for long term deployments. ADDRESSING LIMITATIONS While powerful tools, Arduino and shields have certain limitations when used for large industrial applications: On-board memory (SRAM/EEPROM) is limited ranging from 2KB-64KB restricting program and data size. Processing power and clock speeds are low, causing performance bottlenecks for complex tasks. Analog inputs have low resolution (10 bits max), unsuitable for precision sensing. Default I/O pins have low current limits making direct appliance control difficult. Default power supply of 5V/3.3V may be inadequate for many real world actuators. Arduino form factor is not suited for rugged field deployment with loose sockets/pin headers. However, many of these can be addressed: Using Arduino mainstream boards like Mega, Due increases program space significantly. Offloading tasks to SD cards, SD shields or connecting to servers frees on-board memory. Higher powered boards like Teensy, ESP32 provide more analog inputs, faster processors and WiFi. Dedicated motor driver shields and relay modules control heavier loads through Arduino pins. External power supplies and distribution circuitry cater to 7-24V actuator needs. 3D printed or custom enclosures can protect sensitive components for tough environments. With proper component selection and design thinking, Arduino can indeed serve industrial automation, building large scale sensor networks and embedded systems with careful workarounds for its limitations. Its vibrant ecosystem makes experimentation accessible. CONCLUSION In summary, this DIY Arduino project explores various connectivity options that expand the interfacing possibilities of the Arduino platform. Serial communication to Processing enables visual data representation and interactive applications. Ethernet networking allows direct access to local networks and global internet. Lastly, cellular GPRS imparts total wireless mobility over long distances. Each component interface covered here - Processing, Ethernet shield, GPRS shield - opens new application doors for Arduino projects by facilitating communication with external systems, devices and networked infrastructure. This bridges the gap between physical computing in embedded boards and the virtual world of software, web technologies, and cloud computing services. With growing interest in IoT, home automation, STEM education and more, the Arduino sits at the intersection of hardware and code. Projects such as this enable leveraging its full potential through interfacing, communication and data connectivity. Extension boards make once impossible integration tasks simpler, fueling continued innovation across industry and hobbyist landscape alike. Follow this link for complete project: DIY Arduino Project ARDUINO SERIAL COMMUNICATION TO PROCESSING, ARDUINO WITH ETHERNET SHIELD, ARDUINO WITH GPRS ### Dazzle Your Eyes with a Twinkling LED Symphony: Learn to Create Your Own LED Display This circuit demonstration showcases a random LED flasher controlling twenty lights. LED flashers and sequencers are commonly employed in decorative lighting applications to produce aesthetically pleasing color patterns. Rather than steadfast illumination, these systems cycle LEDs on and off in either a predetermined sequence or at irregular intervals. The latter approach generates a more dynamic, unpredictable appearance. At the heart of this demonstration is a microchip programmed to randomly vary the flashing rate of each individual LED. Without any set pattern or routine, the lights come on and off independently of one another. This produces an ever-changing interplay of illuminated and darkened LEDs across the array. Such a random flasher circuit renders colorful visual interest well-suited for applications like holiday decor, mood lighting, and general aesthetic lighting effects. Circuit and working This circuit demonstration showcases a random LED flasher controlling twenty lights. LED flashers and sequencers are commonly employed in decorative lighting applications to produce aesthetically pleasing color patterns. Rather than steadfast illumination, these systems cycle LEDs on and off in either a predetermined sequence or at irregular intervals. The latter approach generates a more dynamic, unpredictable appearance. At the heart of this demonstration is a microchip programmed to randomly vary the flashing rate of each individual LED. Without any set pattern or routine, the lights come on and off independently of one another. This produces an ever-changing interplay of illuminated and darkened LEDs across the array. Such a random flasher circuit renders colorful visual interest well-suited for applications like holiday decor, mood lighting, and general aesthetic lighting effects. Fig. 1: Circuit diagram of the LED flasher using Arduino The Arduino programming ensures only a single LED lights up at any given moment. A random number is generated within the code corresponding to one of the input/output pins on the Arduino board. This assigns which LED will illuminate based on its connection to that randomly selected I/O pin. The delay period between consecutive LED activations is adjustable using potentiometer VR1. As each LED switches off, another is randomly chosen to switch on after the set delay. This results in the LEDs flashing sequentially in an unpredictable order, with one illuminating at a time. The randomized LED flashing will repeat continuously in this fashion until power is removed from the circuit. VR1 allows tuning the speed of the flickering between fast and slow transitions from one lit LED to the next. Together, the random number generation and delay timing produce the continually varying single-LED illumination that characterizes this demonstration of an Arduino-controlled random flasher circuit. Arduino Nano The Arduino Nano is a small yet capable microcontroller board based around the ATmega328P chip. While providing the same functionality as the Arduino Uno, it has a more compact footprint at just 43mm x 18mm in size. It contains 14 digital input/output pins, six of which support pulse width modulation (PWM). There are also eight analog inputs and a 16MHz clock speed powered by the 32KB of onboard flash memory. Unlike the Uno, the Nano uses a mini USB connector instead of a standard socket. Power must also be supplied via the USB port rather than an external barrel jack. The random LED flasher software is written as an Arduino sketch (Flasher.ino) using the Arduino programming language. To upload this code to the Nano, it must first be connected to a computer running the Arduino IDE. From within the IDE environment, the proper board is selected from the tools menu along with selecting the COM port. Then the flasher sketch can be compiled and loaded over the USB connection. Once programmed, the compact yet capable Arduino Nano serves as the microcontroller driving the random flashing behavior of the LED array through digital output pins selected at random intervals. Construction and testing To assemble the circuit, LEDs 1 through 20 must be wired to corresponding digital pins on the Arduino Nano according to the schematic. A breadboard, stripboard, or printed circuit board (PCB) is necessary to facilitate connecting the LEDs and associated resistors to the microcontroller ports in an organized manner. Figures 2 and 3 depict the circuit design in more detail. Figure 2 shows the PCB layout, illustrating how the circuit traces are routed on the board. Then Figure 3 provides the component placement view, specifying where each discrete part such as the LEDs and resistors should be soldered on the PCB. Following these graphical designs carefully permits replication of the exact circuit configuration to programmatic specifications. The PCB option offers a compact, robust solution compared to breadboarding. But any arrangement allowing the LED-to-pin mappings shown in the schematic to be achieved is suitable for evaluating this random flasher demonstration circuit in action. Fig. 2: PCB layout of the LED flasher Fig. 3: Components layout for the PCB ### DIY: BUILD A CONTROLLER WITH A KNOB THAT CAN EASILY CHANGE THE VOLUME OF ANY APP ON YOUR PC Ruben Henares has designed a Maxmix controller with a stylist knob that could save us the stress of having to always go through the menus and on-screen sliders to change the volume of individual apps on our PCs. The knob on the controller takes an input from the encoder/button to display the desired app where volume is to be adjusted. All we need to do is to just turn the knob to select the particular app, push down and rotate to turn the volume up or down. To switch to another program, press the knob down and repeat the same process, simple! Speaking about the ease of replicating the project, Reuben said: “It uses a combination of 3D printed parts and off-the-shelf electronics components, and all parts can be easily found and ordered online!. The total cost of the parts is ~$25.00 USD including 3D printing and shipping and it takes around 25 minutes to build”. The overall build is such a great design with an OLED screen located by the side of the controller where the current app status is shown and an optional LED ring responsible for giving some extra lightning effects to the controller. Read more: DIY: BUILD A CONTROLLER WITH A KNOB THAT CAN EASILY CHANGE THE VOLUME OF ANY APP ON YOUR PC ### DIY Flex sensor using Sugru and graphite powder (Resistencia flexible usando Sugru y polvo de grafito) Este es el primero de 5 instructables que surgieron del Instructables & Sugru build night (and day en nuestro caso) que hicimos en el Laboratorio de Juguete, el 20 de julio del 2013:  una Resistencia Flexible o Flex Sensor hecha con Sugru y polvo de grafito: ------------------------------------------- This is the first of 5 instructables from Instructables & Sugru Build Night (and day in our case) in Laboratorio de Juguete (toy laboratory) a makerspace from Buenos Aires, Argentina. We built a DIY flex sensor using just Sugru and graphite powder. Step 1: Materiales (materials) Major Components in Project Vas a necesitar: *un sobrecito de Sugru *Polvo de Grafito (se usa para lubricar cerraduras y se compra en cerrajerías o ferreterías) *Un pedazo de cable pequeño (unos 5 cm.) *ester o multímetro Para hacer la prueba de funcionamiento del video vas a necesitar: *Una placa arduino o arduino-compatible *Un potenciómetro de 1M o 500k *Un buzzer *Protoboard y jumpers (o cables unifilares) ——————————————————————- You will need: *A sugru package *Graphite powder (it’s used to lubricate locks) *A piece of wire (about 2 inches) *Multimeter To make the same test as in the video, you will need: *An arduino or arduino-compatible board *A 1M or 500k potentiometer *A piezobuzzer *Breadboard and jumpers  Step 2: Mixing Comenzá a agregar lentamente el polvo de grafito. Tenés que mezclar y agregar y mezclar y agregar así que armate de paciencia! Cada tanto usá tu tester en modo resistencia para ver si empieza a conducir (y resistir). Si no conduce, no te desesperes y seguí agregando grafito... ------------------------------------------------------- Start adding graphite slowly. You 'll have to mix and add and mix and add a lot so be patient. From time to time, grab your tester (in resistance mode) and check if it starts conducting (and resisting) If it doesn't, don't get anxious and keep on adding graphite... Step 3: Wiring Una vez que tu masilla resistiva esté conduciendo (medirá entre 10K y 5M, aproximadamente), estirala, tomá el cable (con sus extremos pelados) e introducilo dentro de la masa, de manera que uno de los extremos quede completamente dentro y el otro completamente fuera. Es muy importante que el extremo que quede fuera no esté en contacto con la masilla porque si no, será un atajo para los electrones. Finalmente, toma un pedazo muy pequeño de cable e introdúcelo en el extremo por el que se asoma el anterior.  Estos dos extremos serán tus terminales. Listo! Ahora dejá descansar 24 horas tu sensor de flexibilidad. ------------------------------------------------------------------------------------------------ Once your resistive putty is conducting (between 10k to 5M of resistance), stretch it. Take your wired (stripped in both sides) and put it inside the putty. One of the sides must be completely inside the putty and the other must be completely outside. This is very important because if the copper from outside side is in contact with the putty, electrons will take this shortcut. Finally, take a very short piece of wire and put it next to the previous one. This will be your terminals. That's all. Now let your flex sensor rest for 24 hours.     For more detail: DIY Flex sensor using Sugru and graphite powder (Resistencia flexible usando Sugru y polvo de grafito) ### Drive a webpage in real-time using Arduino, SensorMonkey and Processing.js Remote visualization of real-time sensor data. This tutorial describes in detail how to use the free SensorMonkey service to push real-time sensor data from an Arduino to a webpage for visualization using Processing.js. No server-side coding or Ethernet shield is required. A standard, run of the mill Arduino will work perfectly. You'll also need a sensor to sample some values. I use an accelerometer, but anything will work (a potentiometer, a gyroscope, a tilt sensor, a temperature sensor, a light sensor etc.). If you don't have a sensor, it's still possible to follow the tutorial by sampling the floating input voltages on the Arduino's analog pins as a (somewhat) crude substitute. After configuring the Arduino to sample sensor values, I use SensorMonkey to publish the data live over the Internet in real-time (Disclosure: I co-founded the company developing SensorMonkey). Using SensorMonkey, I can access the data from any device connected to the Internet and use it to drive a real-time webpage. Proxies, firewalls and NATs can all be traversed. Best of all, it works with standard Arduino boards (Unos, Duemilanoves etc.) and does not require an Ethernet shield. Instead, I use free software called Bloom to network-enable the Arduino and connect it to SensorMonkey. In this tutorial, I visualize the data using Processing.js. UPDATE 26-06-2012: Non-Windows Users As an alternative to Bloom for non-Windows users, I have uploaded a Processing sketch, namedSensorMonkeySerialNet, to our GitHub account. This sketch is a serial-to-network proxy that also serves Flash Socket Policy files inline. It can be used instead of Bloom in Step 3 for users running Mac OS or Linux. Step 1: Gathering Materials The following combination of hardware and software is required to complete this tutorial: Hardware: - Arduino (I use an Uno but older boards such as a Duemilanove will work fine) - USB cable to connect Arduino to host computer - Analog sensor (I use a ADXL335 accelerometer) - Assorted wires to connect your sensor to the Arduino Software: - Arduino development environment (http://www.arduino.cc) - Free account on SensorMonkey.com (login with your existing Facebook account) - Bloom (serial port to TCP/IP socket redirector for Microsoft Windows) - Processing.js Step 2: Connect Arduino and Upload Sketch If you have not done so already, you should take the time to familiarize yourself with the basic operation of an Arduino by reading the Getting Started guide on the main Arduino website. In particular, make sure you have downloaded and installed the Arduino development environment and that you are able to upload sketches to the board. The Arduino will be assigned a serial port when connected to the host computer. If using Windows, you can determine the assigned serial port by opening Device Manager and expanding the Ports (COM & LPT) section. You should see the Arduino listed underneath (in my case, the Arduino has been assigned to COM8). I have connected my ADXL335 accelerometer to the Arduino as shown (image taken from http://bildr.org). I am going to sample analog-to-digital (ADC) pins 0, 1 and 2 on the Arduino at regular intervals and write their values to the serial port. To do this, I upload the following sketch to the Arduino's microcontroller using the development environment: void setup() { Serial.begin( 9600 );    // Open the serial port. } void loop() { unsigned int x = analogRead( 0 );    // Read 10-bit x-axis accelerometer on ADC pin 0. unsigned int y = analogRead( 1 );    // Read 10-bit y-axis accelerometer on ADC pin 1. unsigned int z = analogRead( 2 );    // Read 10-bit z-axis accelerometer on ADC pin 2. // Write synchronization bytes to serial port to act as starting markers for each 'packet'. Serial.write( 0xA5 ); Serial.write( 0x5A );   For more detail: Drive a webpage in real-time using Arduino, SensorMonkey and Processing.js ### Driving two Nixie tubes with an Arduino via a shift register and two SN74141s Nixie tubes are really cool looking and are becoming quite popular for their 'retro' look. Although there are a number of tutorials out there on using nixie tubes and some nice pre-packaged units (see these nice ones from ogi lumenand ArduiNIX) I hadn't seen a simple tutorial on running them using a shift register like the SN74HC595. This would use the minimum number of Arduino pins as it can run as a serial device. Another nice addition is the use of the SN74141 BCD to decimal decoder/driver chip. This chip allows direct control of the Nixie tubes from the shift registers without the use of individual transistors for each numeral. An added benefit to using shift registers is that additional pairs of Nixie tubes can be added without using any more Arduino output pins. They just get daisy chained to the first set. WARNING: Nixie tubes require a high voltage power supply, typically 150-180 volts. This is enough voltage to hurt you. Please make sure you know what you are doing. Note: please let me know of any typos/errors/comments so I can continue to improve this Instructable. I'd also appreciate it if you'd vote for me in the contest. Thanks. Step 1: Theory The Arduino code defines a byte (eight bits) based on the code written. This byte is then passed serially to the shift register. The shift register then uses the byte to set each of eight pins either high or low (aka serial to parallel conversion). (A useful tutorial using shift registers with Arduinos can be found here) These eight pins are connected to the input pins (four each) on the two 74141 chips. The 74141 chips read the four bits as a code that defines which of the numbers to light on the Nixie tube. See the datasheet for the codes) A Nixie tube works by having a high voltage (typically 150 - 180 volts) attached to the anode. Each of the filaments is connected to the anode and each has a separate cathode. When a number's cathode is connected to ground, current flows through the digit and it lights up). The 74141 chip is designed to interpret the four bit code to connect one of its ten pins to ground. The 10 cathodes of the Nixie tube are connected to these pins. When one of these pins gets connected to ground, that number lights up. The 74141 is specially designed to handle the Nixie's high voltages.The same thing could be done with a series of transistors, but the 74141 chip just simplifies things. Step 2: Get the stuf Major Components in Project You will need the following: An Arduino development board of some type. I’m using a Freeduio from NKC Electronics Two IN-12b nixie tubes with sockets (I found some on eBay) Two SN74141 BCD chips (or the Soviet equivalent;  K155ID1, also from eBay, see above) One SN74HC595N shift register (very common, e.g. Adafruit) A high voltage power supply for the Nixie tubes (I used this one, see the picture) A 12 volt power supply for the high voltage power, I used a 12 volt wall wart. Two current limiting resistors, one for each Nixie tube. I used a 1 watt 4.7 kohm. A breadboard and some jumpers Step 3: Setting up You'll want to place the shift register in the middle of the breadboard and the two 74141 chips on either side of it. I've added a mounting spot to my breadboard to hold the Arduino. It just needs to be close by. Assemble the high voltage (HV) power supply per its directions. The ground for the HV supply needs to be common to the Arduino and the rest of the circuit. Keep the HV line away from the normal five volt power line or bad things will happen. Please read all of the warning associated with your HV power supply and remember that this is enough voltage to hurt you. Step 4: Wiring the Nixie tubes On the bottom of the Nixie tube socket each of the leads is numbered. Solder 4-6" leads on to each of these connections (you can ignore pin 12 as it does not get used). Note that the socket has a notch in it near pin one. Identify pin one on the Nixie tube. Looking at the top of the tube, the number 3 will be on top. Pin 1 is at about 5 o'clock when holding the Nixie tube with the digit 3 upright. On my tubes this pin was painted white to differentiate it. Place the Nixie tube in the socket so pin 1 is near the notch in the socket. Connect the 11 leads in order to 11 rows of the breadboard near one of the 74141 chips. Repeat for the second Nixie tube.   For more detail: Driving two Nixie tubes with an Arduino via a shift register and two SN74141s ### DUAL-AXIS GYROSCOPE AND 3-AXIS ACCELEROMETER MEMS SENSOR WITH DIGITAL SPI INTERFACE FOR AUTOMOTIVE APPLICATIONS Murata has introduced the SCC300 series components that combine high-performance angular rate and accelerometer sensor components. The SCC300 is the 3rd generation of MEMS (Micro-Electro-Mechanical Systems) 4DoF (four-degrees-of-freedom) and 5DoF (five-degrees-of-freedom) inertial sensors that realize high-performance for safety-critical automotive applications. The new device consists of versions of an X-axis, Z-axis, and XZ-axis angular rate sensor and a 3-axis accelerometer sensor. The SCC300 series is designed, manufactured, and tested to deliver reliability, quality, and extremely stable output over a wide range of temperature, humidity, and vibration conditions. The sensor in the device is designed to meet the new shock and vibration requirements coming from integrated brake systems for more cost-effective and size effective ESC (Electronic Stability Control) functionality in modern electrified vehicle architecture. The SCC3000 series provides a cost-effective realization of ESC product family for both standard and high-specification ESC with additional features. Pin-to-Pin Compatability combined with common SPI-interface in the components to reduce the engineering effort at the system supplier level, this strengthens the system robustness. Features Of SCC300 Components ISO26262 compliant for systems up to ASIL-D Excellent bias stability, low noise level, and excellent vibration robustness ±300°/s angular rate measurement range for robust sensing in harsh environment ±6g acceleration measurement range ±15g auxiliary acceleration measurement range -40°C~+110°C operating temperature range (Contact to Murata if +125°C is needed) User-selectable filter setting 13, 20, 46, 200, 300Hz 3.0V~3.6V supply voltage Read more: DUAL-AXIS GYROSCOPE AND 3-AXIS ACCELEROMETER MEMS SENSOR WITH DIGITAL SPI INTERFACE FOR AUTOMOTIVE APPLICATIONS ### E-CON SYSTEMS LAUNCHES LOW LIGHT, 5 MP CAMERA SUPPORT FOR NVIDIA® JETSON NANO As a preferred camera partner of NVIDIA®, e-con Systems is introducing yet another camera support for NVIDIA® platforms. e-con Systems have launched the support for one of our popular low-light, 5 MP camera based on OnSemi’s AR0521 – e-CAM50_CUNANO, with NVIDIA® Jetson Nano developer kit. e-con Systems Inc., NVIDIA®’s preferred camera partner and a leading embedded camera solution company, today announced the launch of e-CAM50_CUNANO for NVIDIA® Jetson Nano developer kit. e-CAM50_CUNANO is based on OnSemi’s 1/2.5″ AR0521, a 2.2 µm pixel CMOS image sensor with integrated Image Signal Processor (ISP). e-CAM50_CUNANO is capable of streaming HD (1280 x 720) at 100 fps, FHD (1920 x 1080) at 65 fps and 5 MP (2592 x 1944) at 25 fps in uncompressed (UYVY). The higher Signal to Noise Ratio (SNR) supported by this camera helps to produce clear images without noise and a better dynamic range helps in retaining more details in shadows and highlights. Along with these features, the powerful in-built ISP helps to bring out the best-in-class video in uncompressed UYVY format. The camera is also provided with the S-mount (M12) lens holder that enables customers to choose the lens from a wide range of options as per their requirements. Jetson Nano is a small, powerful and cost-effective platform for applications such as image classification, object detection, segmentation, and speech processing. It offers a framework for real-time computer vision and robotics applications. These applications require a camera with uncompromising image quality and performance, which is why e-con Systems came up with e-CAM50_CUNANO. Availability e-CAM50_CUNANO is currently available for evaluation. Customers interested in evaluating e-CAM50_CUNANO can order samples from e-con Systems’ online store. Read more: E-CON SYSTEMS LAUNCHES LOW LIGHT, 5 MP CAMERA SUPPORT FOR NVIDIA® JETSON NANO ### EBC3A1-1G Y0: THE OPTIMUM EMBEDDED BOARD FOR ATM KIOSKS AND VENDING MACHINES EMBUX introduces its newest ARM embedded board, the EBC3A1-1G Y0, particularly intended for machine manufacturers and system integrators. The embedded board is selectively based on the NXP ARM Cortex-A9 i.MX6 processor to ensure high performance at a lower cost. With multiple, distinct I/Os, the sky’s the limit as to how to connect the EBC3A1-1G Y0 with different interfaces in ATM kiosks, vending machines, and industrial gateways/controllers. ARM yourself with the best processor for automated uses ARM processors are typically used for site-specific devices, like automated vending and ATM machines and other embedded systems, due to its low power consumption and smaller size. However, EMBUX embraces the advantages in cost/performance ratio and size with our meticulous selection of the ARM Cortex-A9 i.MX6 processor for our scalable embedded system solution, saving you space and energy. The 10.8 to 26.4 VDC wide input voltage range also allows the device to have versatility in usage environments. Rich I/O selection makes this your flexible friend As a compact 3.5” board, the EBC3A1-1G Y0 integrates easily with ATMs, in addition to vending, parking, and other automated machines. The assortment of I/Os gives the computer flexibility in connectivity options. Multiple USB and RS-232 ports are available to link to site-specific devices, while the CAN bus makes the board suitable for transportation vehicle uses. Additionally, having both HDMI and LVDS connectors allows flexibility in taking advantage of the graphics support. Lastly, the EBC3A1-1G Y0 offers mini-PCIe expansion sockets for additional needs or extra ports. Main Features ARM Cortex-A9 i.MX6 DualLite 1.0 GHz Onboard DDR3 1GB, 4GB eMMC Flash HDMI, 18/24-bit LVDS output 6 x RS-232, 2 x RS-485, 2 x CAN, 4 x USB 2.0 Dual mini-PCIe for Wi-Fi/3G support 10.8~26.4 VDC wide power input Diversified OS support for Yocto/Android/WEC7 (OEM) Read more: EBC3A1-1G Y0: THE OPTIMUM EMBEDDED BOARD FOR ATM KIOSKS AND VENDING MACHINES ### EFFORTLESSLY CREATE BOMS AND ORDER PARTS AS YOU DESIGN WITH ULTRABOM FOR ORCAD Simple, Frustration-Free Part Purchasing and BOM Creation. Ultra Librarian is a free online resource to help take the busy work out of the design process by providing the largest amount of CAD models available for download. Quickly find verified parts in our ever-expanding database of verified parts from the leading component manufacturers Receive unlimited access to FREE schematic symbols, footprints, and 3D STEP models in your native CAD format Get back to what matters most; innovation, not part creation Features Built to globally recognized industry standards from IPC – 7351B Works directly with your preferred CAD Tool Symbols, Footprints, and 3D Models created by the same designer to avoid inconsistencies in every step of the design process Datasheets, pricing options, and specs available in one convenient place UltraBOM  Features Search parts from Digi-Key Link or place part directly in your design Review status, availability, and cost throughout the design process Submit the BOM to Digi-Key for purchase Read more: EFFORTLESSLY CREATE BOMS AND ORDER PARTS AS YOU DESIGN WITH ULTRABOM FOR ORCAD ### EMB-2237-AI – PICO-ITX POE EDGE AI EMBEDDED BOARD WITH NXP I.MX8M MINI ARM PROCESSOR Built For Edge AI Applications Targeted to satisfy diverse applications demanding a robust and compact computing POE edge AI embedded board for industrial machine learning, embedded vision and inferencing, the board is based on NXP application processors with 10+ year longevity support, built-in reliable communication interfaces like RS-485, RS-232 and M.2 slot for support of TPU, VPU accelerator modules like Google Coral Edge TPU and others. PoE Power Module Provides on-board Power over Ethernet (PoE) IEEE 802.3af standards power input via RJ45 Ethernet port for the board and system to make installing or large roll-out much simpler and cheaper Single Point Touch Screen Connector Integrates 4-lane MIPI DSI, dual Channel LVDS, RGB, power, backlight control and touch panel interface all in one FPC connector to give developers fast, convenient and simplified solutions for industrial and embedded POE touch panel PC applications. The EMB-2237-AI POE edge AI embedded board takes the advantage of the latest NXP i.MX8MM application processors with scalable computing platforms and 15 years long life cycle support. It is designed to support Edge TPU, VPU machine learning accelerator modules and provides a solid base for your edge AI computer designs in areas like Human Machine Interface (HMI), voice control, machine vision, building automation and industrial AI. On-Board Voice Control Support Built-in smart codec with dual-core DSP that runs algorithms for voice control, omni-directional spatial, noise suppression, and acoustic echo cancellation (AEC).  Linux supports for Amazon AVS (Alexa Voice Service) Device SDK and Sensory TrulyHandsfree Wake Word Engine.  Additional 8 channel digital audio/DMIC inputs (SAI5) for MIC array is also available via 40-pin expansion header. Read more: EMB-2237-AI – PICO-ITX POE EDGE AI EMBEDDED BOARD WITH NXP I.MX8M MINI ARM PROCESSOR ### EMBEDDED KONTRON MOTHERBOARD PITX-APL V2.0 FOR HIGH PERFORMANCE IN 2.5-INCH FORMAT Kontron, a leading global provider of IoT/Embedded Computing Technology (ECT), is expanding its product line in the Pico-ITX form factor with the pITX-APL V2.0 embedded motherboard, which is equipped with Intel Atom® E39xx and Intel® Celeron® N3350/J3455 two- and quad-core CPUs and features improved performance with an extended range of functions. The pITX-APL V2.0 offers up to 16 Gbytes of hard-soldered LPDDR4 memory, extensive interfaces, such as two 1GB Ethernet ports and a second graphics interface, as well as the option of retrofitting user-specific functions via M2 interface. A mini DisplayPort and HDMI provide flexible graphics options. This makes the motherboard ideal for use in industrial client applications as well as in kiosk, infotainment, digital signage and POS systems. The new pITX-APL V2.0 with its compact dimensions of only 100 x 72 mm impresses with improved graphics and computing performance and at the same time low power consumption of only 6 to 12 watts at 12V DC input voltage. It features an LVDS 24Bit Dual Channel, an M.2 slot with a USB 3.0 and microSIM interface as well as a half-size mPCIe slot and a uSD/uSIM combo slot. A TPM 2.0 security chip enables the protection of applications and licenses. Specifications Listed For The PITX-APL V2.0 Include: Processor — Intel Apollo Lake with Intel HD Graphics 500 (all Atom, Celeron, and Pentium models, dual- and quad-core) Memory/storage: Up to 16GB soldered, 4x-channel LPDDR4 RAM MicroSD slot (combo slot with micro-SIM) SATA 3.0 with locking latch Optional SSD on M.2 B-key and possible mini-PCIe (see below) Networking — 2x Gigabit Ethernet ports with WoL Media I/O: Mini-DisplayPort HDMI port 18/24-bit, dual-channel LVDS with 5V backlight support Triple display support HD Audio I/O headers (mic, line-in, line-out) plus SPDIF Other I/O: 2 USB 3.0 ports 2x USB 2.0 headers RS-232, SPI, and front-panel headers Expansion: M.2 B-key (PCIe 2.0) slot with SSD support and micro-SIM Possible half-size mini-PCIe slot with storage and wireless support Micro-SIM combo slot with microSD Other features — TPM 2.0; optional Kontron Approtect with Wibu secure element; system monitoring; RTC with Pigtail BR2032 battery; optional passive and active cooling Operating temperature — -25 to 75°C (possible -40 to 85°C Atom variants) Power — 12V DC locking jack; power header; CMOS clear/autostart header; power button and LED; ACPI 5.0 PMIC; optional 15W 5V/3A external power supply Dimensions — 100 x 72 x 41mm Operating system – BSPs for Yocto Linux, Win 10 IoT Enterprise and Core, WES7, Win 7, VxWorks Read more: EMBEDDED KONTRON MOTHERBOARD PITX-APL V2.0 FOR HIGH PERFORMANCE IN 2.5-INCH FORMAT ### EMCOS® HYPERVISOR BY ESOL: NEW VIRTUALIZATION FUNCTION TO EMCOS SCALABLE RTOS eSOL, a leading global specialist in embedded software systems, announced the immediate availability of its eMCOS® Hypervisor, a ground-breaking embedded virtualization function for the company’s eMCOS scalable real-time operating system (RTOS). eMCOS Hypervisor facilitates the integration of both robust real-time applications on RTOS and feature-rich applications on general-purpose OS – running concurrently on a single hardware platform. Full time and space isolation is provided for each mixed-criticality system. In terms of architecture, the addition of virtualization to the eMCOS RTOS brings even greater flexibility in mixed-criticality system configuration, making it possible to incorporate general-purpose operating systems like Linux or Android without compromising real-time capabilities and safety. Among many notable advantages, users can leverage eMCOS’s advanced scheduling capabilities. As eMCOS Hypervisor is implemented by incorporating a mechanism for virtualization into eMCOS POSIX, users can enjoy scheduling features such as load-balancing and time separation, on the same hardware platform as a guest OS. A further major benefit is the ease of customization relating to the boot sequence of a general-purpose OS. As guest operating systems are started as eMCOS POSIX processes, the boot sequence can be implemented simply as a process start, and is easily customized as sequential start-up and multi-core parallel start-up. The deployment of multiple guest operating systems is performed in a coordinated, optionally load-balanced manner, without impacting the determinism of real-time or safety functions. Also appealing to users will be the easy porting of drivers. Linux standard Virtio drivers are supported, making it easy to port Linux guests. In addition, drivers that are tightly coupled to the SoC can be ported with ease because the Virtual Machine Monitor (VMM) can filter or passthrough hardware accesses. Read more: EMCOS® HYPERVISOR BY ESOL: NEW VIRTUALIZATION FUNCTION TO EMCOS SCALABLE RTOS ### E-CON SYSTEMS LAUNCHES 5MP CAMERA FOR NVIDIA® JETSON XAVIER NX™ DEVELOPER KIT July 15, 2020: e-con Systems Inc., a leading embedded camera solution company, today announced the launch of 5MP camera support for NVIDIA® Jetson Xavier NX™ Developer Kit. The e-CAM50_CUNX is based on 1/ 2.5-inch AR0521, a 5 MP CMOS image sensor from ON Semiconductor. e-CAM50_CUNX is based on 1/ 2.5’ AR0521 image sensor with an on-board high-performance Image Signal Processor (ISP) chip that performs all the Auto Functions (Auto White Balance, Auto Exposure control) in addition to complete ISP functions. It comes with S-Mount lens holder to support wide range of Lenses. Readily-available with NVIDIA® Jetson Xavier™ NX, e-CAM50_CUNX is the latest and one of the most cutting-edge camera modules of e-con Systems. “The e-CAM50_CUNX camera module for Xavier NX morphs the Jetson Xavier NX to a edge AI powerhouse for vision. The low noise, excellent image quality, ready-to-use 5MP camera module captures the world into pixel data to be crunched by Jetson’s powerful CPU+GPU combination. The combination of supercomputer performance Jetson Xavier NX and state-of-the-art 5MP e-CAM50_CUNX will be an ideal solution for high-performance AI systems like autonomous mobile robots, smart medical diagnostic instruments, AOI systems and smart city applications” Read more: E-CON SYSTEMS LAUNCHES 5MP CAMERA FOR NVIDIA® JETSON XAVIER NX™ DEVELOPER KIT ### E-CON SYSTEMS LAUNCHES 4K MIPI CSI-2 CAMERA SUPPORT FOR TORADEX’S I.MX8 SYSTEM ON MODULES (SOMS) e-con Systems Inc, a leading embedded vision camera manufacturer is excited to announce their partnership with Toradex, a leading embedded System on Module provider. Further, e-con Systems has launched a bouquet of MIPI CSI-2 camera module support for Toradex’s iMX8 SoM series, Apalis. Among the camera modules would be e-con’s flag ship 4Kcamera module, e-CAM137A_CUMI1335_MOD. By launching variety of camera modules with different image sensors and various features, e-con Systems enables Toradex Apalis i.MX8 customers to address multiple applications. e-con Systems’ e-CAM137A_CUMI1335_MOD is based on 1/3.2 inch ON Semiconductor’s AR1335 high resolution sensor with a pixel array of 4208H x 3120V. The camera module supports a M12 holder which allows the customer to interchange various lenses. Other than the 4K camera module, the initial launch includes e-CAM55_CUMI0521_MOD, 5MP MIPI CSI-2 camera module based on 1/2.5 inch ON Semiconductor’s AR0521 sensor with active pixel array 2592 (H) x 1944 (V). The larger pixel size of AR0521 provides superior low light performance enabling quality imaging systems in varied lighting environments. In addition, e-con Systems would be soon launching e-CAM130_MI1335_MOD, 4K Autofocus camera module and e-CAM56_CUMI0521_MOD, 5MP MIPI CSI-2 Monochrome module for Toradex’s iMX8 SoMs. Also more cameras would be launched soon for Verdin family of SoMs Read more: E-CON SYSTEMS LAUNCHES 4K MIPI CSI-2 CAMERA SUPPORT FOR TORADEX’S I.MX8 SYSTEM ON MODULES (SOMS) ### EMCOS® POSIX COMMERCIAL OS SUPPORTS KALRAY’S COOLIDGE™ INTELLIGENT PROCESSOR FOR MIXED-CRITICALITY SYSTEMS[1] High Performance, Low Power Consumption of Third-Generation MPPA® from Kalray now Available on Same Terms as Existing Multi-core Processors to Suit Applications such as Autonomous Driving, Edge Computing, Robotics and Medical Equipment. The eMCOS® POSIX high-performance, scalable real-time operating system (RTOS) from eSOL, a leading developer of real-time embedded software solutions, now supports the Coolidge™ third-generation MPPA® (Massively Parallel Processor Array) intelligent processor developed by Kalray. As a result, developments based on the MPPA Coolidge can be brought to market for advanced applications such as Autoware and AUTOSAR Adaptive Platform software for autonomous driving, as well as ROS[2] for robotic control. Further notable applications include edge computing, data centers, medical equipment, high-performance computing (HPC) and machine learning (ML). Importantly, developers will be able to access the extremely high computing performance and low power consumption of the MPPA Coolidge (80 cores) on the same terms as existing multi-core processors. For eSOL it ultimately means the ability to offer a POSIX-compliant, secure software platform that takes advantage of the Coolidge ‘manycore’ architecture. Read more: EMCOS® POSIX COMMERCIAL OS SUPPORTS KALRAY’S COOLIDGE™ INTELLIGENT PROCESSOR FOR MIXED-CRITICALITY SYSTEMS[1] ### ESP32-VAQUITA-DSPG BOARD WITH SDK FOR ALEXA BUILT-IN IOT DEVICES WITH SEAMLESS VOICE INTEGRATION Since the recent move by Espressif Systems to go into mass production of the ESP32-S2 SoCs, modules and development boards, we have been seeing quite a number of arrivals from the company, one of which was the very first ESP32-based development board, the ESP32-S2-Saola-1 development board which started selling on Mouser and digikey for $8. Again, the company has announced the arrival of a new ESP32-based development board with SDK for building voice-controlled IoT devices with core cloud service. The ESP32-Vaquita-DSPG development board is a certified solution that offers an easy, cost-effective and secure way to develop Alexa built-in smart devices with Alexa Voice Service and AWS IoT-cloud connectivity. The board amongst others, has an Espressif’s ESP32 wireless ESP32-WROVER-E module, DSP Group’s DBMD5P Audio SoC and two Mic solutions with Acoustic Echo cancellation and beamforming. The wireless module comes embedded with ESP32-D0WD-V3, WiFi and Bluetooth connectivity, 64 Mbit SPI flash and 64 Mbit PSRAM for flexible data storage while the DBMD5P Audio SoC has far-field voice recognition enabled by the company’s HDClear algorithms. The ESP32-Vaquita-DSPG board also has an Audio Codec ES8311 that communicates with ESP32 to convert digital signals to analog signals and an audio Power Amplifier for external speakers up to 8W. It is the combination of this board with a companion phone app SDK that makes developing Alexa built-in IoT devices with Alexa Voice Service and AWS IoT-cloud connectivity easy, cost-effective and secure. Other Features Of The Board Include: FPC connector 2 digital microphone arrays on MIC board Speaker and earphone connectors USB-to-UART port 5V power supply input via USB Power port 3.5mm audio jack Power On LED, 5x RGB LEDs  Boot & Reset buttons, 2x function buttons 5V-to-3.3V power regulator Read more: ESP32-VAQUITA-DSPG BOARD WITH SDK FOR ALEXA BUILT-IN IOT DEVICES WITH SEAMLESS VOICE INTEGRATION ### ESPRESSIF TEAMS UP WITH AMAZON ΤO INTRODUCE THE ESP32-PICO-V3-ZERO ALEXA CONNECT KIT Over the past few years, we have seen companies unveil their Alexa Connect Kit (ACK) for smart homes, like the STM32GO71. However, ESpressif has announced its forthcoming Alexa Connect Kit (ACK) module known as ESP32-PICO-V3-ZERO. The ESP32-PICO-V3-ZERO enables an easy way for customers to create Alexa-compatible devices. With Alexa Connect Kit (ACK) you can quickly and easily build products your customers will love, all at a fixed per-device cost. For your customers, products built with ACK include Alexa control through voice and mobile applications, Amazon’s Wi-Fi Simple Setup, and Amazon Dash Replenishment Service (optional). For developers, ACK enables you to connect your devices to Alexa without worrying about managing cloud services, writing an Alexa Skill, or developing complex networking and security firmware. ESP32-PICO-V3-ZERO has a small form factor, measuring at just 16 x 23 x 2.3 mm, and based on the ESP32-PICO-V3 SiP. The SiP is based on the ESP32-V3 SoC, with a 4 MB SPI flash, a crystal oscillator, filter capacitors, and RF matching links. It offers 2.4 GHz 802.11 b/g/n, Bluetooth and Bluetooth Low Energy connectivity (BLE) to the host MCU. It is also equipped with a PCB antenna, with the host MCU being able to be connected to the ESP32-PICO-V3-ZERO module via a UART interface. For software features, the ESP32-PICO-V3-ZERO features a pre-programmed ACK module firmware. It is also pre-configured to have credentials and connect to an ACK-managed cloud service. The ACK module firmware is managed by Amazon and enables out-of-box features such as Frustration-Free Setup, Alexa connectivity and Amazon Dash Replenishment. Customers can implement interfacing with peripherals on the host MCU when it is connected to the ACK module over a UART interface.  Read more: ESPRESSIF TEAMS UP WITH AMAZON ΤO INTRODUCE THE ESP32-PICO-V3-ZERO ALEXA CONNECT KIT ### EUROQUARTZ EQXO-75UIE EXTENDED INDUSTRIAL TEMPERATURE RUGGEDIZED HIGH-RELIABILITY OSCILLATOR The EQXO-75UIE series is a ruggedized high-reliability, high temperature range clock oscillator in a standard format 7x5mm SMD ceramic package designed for demanding and vibrating industrial applications Saelig Company, Inc. has launched the Euroquartz EQXO-75UIE Extended Industrial Temperature Ruggedized High-Reliability Oscillators.  The EQXO-75UIE series is a ruggedized high-reliability SMD clock oscillator. Designed for demanding industrial applications, it provides reliable operation with excellent frequency stability across an extended industrial operating temp range of -40degC to +105degC. Mechanical shock survivability has been tested to 1500G MIL-STD-883K Meth 2002.5, Condition B. Temperature stabilities of ±50, 75 & 100ppm are available, with tighter options by request (dependent on conditions). This component, available with short lead time, has no ITAR restrictions. All EQXO-75UIE crystals are pre-aged as part of an additional manufacturing process in order to improve long-term application stability.  With an aging specification of ±1ppm maximum for the first year, an even tighter aging specification is available by request. EQXO-75UIE Series Features Frequency Range: 2.00MHz to 60.00MHz Operating Temperature: -40degC to 105degC Shock Survivability: 1500G Supply Voltages: 2.5V, 3.3V and 5V Crystal Stabilization: 96 hours at 100degC ITAR Restriction:  none Read more: EUROQUARTZ EQXO-75UIE EXTENDED INDUSTRIAL TEMPERATURE RUGGEDIZED HIGH-RELIABILITY OSCILLATOR ### EXTREMELY COMPACT BREADBEE HAS 1GHZ ARM CORTEX-A7 SBC AND ON-BOARD ETHERNET Measuring about 32 x 30 mm in footprint, Palmer’s fully-functional development board is a very small Linux-based single-board computer built around an ARM Cortex A7 SoC and targets IP cameras. There are no solutions yet that can run a real OS like Linux that can be integrated by hobbyists into boards from cheap PCB vendors that don’t have show-stopping limitations. The BreadBee is based on a relatively unknown IP camera SoC, the MSC313E, from a company called MStar. You might have never heard of MStar but you probably have one of their chips on your TV. The MSC313E has just enough of the usual microcontroller peripherals to make it useful, comes in a (relatively) easy to work with QFN package, is tiny, and costs $4. It is a bit harder to integrate into your designs than a microcontroller that requires a single power supply but all of the information you would need to do so is right here explains Palmer as he prepares to launch a crowdfunding campaign for his new design. The single-board computer, he said, is one that can be integrated into any project while reserving considerable space. Despite its very small form factor, BreadBee boasts of certain impressive specifications which include: Single-core Arm Cortex A7 SoC running at 1GHz 64kB static RAM and 64MB of DDR2 memory 100 Mbit Ethernet Bootable and memory-mapped SPI-NOR 4x 10bit ADC channels 2x SPIs, 1x 12C 3 x UARTs Quite a lot of GPIOs 8x PWM pins Real-Time Clock and Watchdog timer. USB PHY and host/device mux SD / SDIO interface 32mm x 30 mm in size Read more: EXTREMELY COMPACT BREADBEE HAS 1GHZ ARM CORTEX-A7 SBC AND ON-BOARD ETHERNET ### EXTREMELY SMALL POWER-SAVING 3D MAGNETIC SENSOR OPENS UP NEW DESIGN OPTIONS Infineon Technologies AG will expand its XENSIV™ 3D magnetic sensor family TLx493D. At its in-house digital trade show “Virtual Sensor Experience”, the chipmaker will present a new device for industrial and consumer applications: the TLI493D-W2BW.  It uses the latest 3D Hall generation from Infineon and is housed in an extremely small wafer-level package. With an 87 percent smaller footprint and 46 percent less height than previous comparable products, the sensor opens up new design options. Due to the small WLB-5 package (1.13 mm x 0.93 mm x 0.59 mm) and its low current consumption of 7 nA in power-down mode, the new magnetic sensor is also suitable for use in applications that previously used resistor-based or optical solutions. Magnetic sensors offer numerous advantages here, such as their high accuracy or robustness against dust and moisture. In addition, magnetic sensors are easier to assemble and offer more design options. In particular, the low height of the TLI493D-W2BW is helpful in extremely space-critical applications such as BLDC commutation in micromotors or control elements such as joysticks or game consoles. Read more: EXTREMELY SMALL POWER-SAVING 3D MAGNETIC SENSOR OPENS UP NEW DESIGN OPTIONS ### FANLESS 4K DIGITAL SIGNAGE PLAYER WITH 8TH GEN INTEL® CORE™ U-SERIES PROCESSORS IBASE Technology Inc., a world leader in the manufacture of a wide range of digital solutions, has rolled out the SI-642-N 4K digital signage player that leverages the 8th Gen Intel® Core™ U-series processors. The platform can be used in commercial establishments to increase brand awareness and customer engagement or deployed in transportation networks to provide real-time information and advertising relevant to the traveler. The fanless SI-642-N offers high performance and high reliability for 24/7 operation in an industrial-grade design. It is integrated with the IBASE iSMART and Observer technologies for remote monitoring, power on/off scheduling, power recovery, and low-temperature boot functions. With the Intel HD Graphics 620, the system can simultaneously support two independent displays (1x HDMI 2.0 & 1x Active DisplayPort 1.2) with 4K (4096 x 2160) @60Hz resolution as well as two independent audio outputs. SI-642-N FEATURES: iSMART intelligent energy-saving & Observer remote monitoring technologies 8th Gen Intel® Core™ U-series processor 1x HDMI 2.0 + 1x Active DisplayPort 1.2 with independent audio output 2x DDR4 2400 SO-DIMM, dual channel, Max. 32GB 1x M.2 B-Key (3042) for 4G LTE 1x M.2 M-key (2280) for storage 1x M.2 E-key (2230) for WiFi or capture card option TPM 2.0, vPro and watchdog timer Slim & compact fanless design Read more: FANLESS 4K DIGITAL SIGNAGE PLAYER WITH 8TH GEN INTEL® CORE™ U-SERIES PROCESSORS   ### FLEX POWER MODULES EXTENDS 2W DC/DC CONVERTER SOLUTIONS FOR INDUSTRIAL USE Flex Power Modules has added to its range of miniature isolated DC/DC converters intended for industrial applications with the introduction of the PUB-2M series. Delivering an output power of up to 2W with no minimum load required, the high performance product is available in single or dual output options. Presented in a compact SMD (surface mount device) package measuring 12.75 x 11.2 x 8.0 mm (0.502 x 0.441 x 0.315 in) for single output and 15.25 x 11.2 x 8.0 mm (0.6 x 0.441 x 0.315 in) for dual output, the new unregulated DC/DC converters achieve a high efficiency, typically up to 86.5% with a 12V output under full load conditions. The new family of isolated, unregulated DC/DC converter modules offers output short-circuit protection and MTBF figures of 17.9Mhrs. The robust converters are ideal for harsh environments common in industrial applications with a capability to reliably operate in temperatures ranging from -40°C to +110°C. The devices are safety compliant to EN/UL 62368-1, and Flex Power Modules is an ISO 9001/14001 certified supplier. The launch of the PUB-2M series follows the company’s recently introduced PUC-2B, a series of 2W isolated, unregulated DC/DC converters with reinforced insulation for industrial applications that are housed in a compact SIP7 package. Read more: FLEX POWER MODULES EXTENDS 2W DC/DC CONVERTER SOLUTIONS FOR INDUSTRIAL USE ### FLIR HADRON THERMAL/VISIBLE SENSOR MODULE FOR DRONES, ROBOTICS, AND IMAGING Thermal imaging products company FLIR Systems has announced what it claims is the industry’s first thermal and visible sensor module for drone, robotic, and imaging manufacturers. The FLIR Hadron dual sensor module for drone, robotic, and imaging original equipment manufacturers (OEMs) is designed to help reduce development costs and improve time to market. Offered in a lightweight (42.8 g), low-power, and 24 x 45 x 36-mm form factor, the device includes a 12-megapixel visible camera paired with the company’s Boson 320 x 240-resolution thermal camera with up to a 60-Hz frame rate. “With the introduction of Hadron, FLIR Systems is leading the way in offering low-cost, dual sensor integration across a variety of industries from commercial drones to industrial imaging systems,” says Paul Clayton, General Manager, Components Business at FLIR. “Although our unmanned aerial system (UAS) customers are first to market with Hadron, this product empowers all of our OEM customers to increase performance with out-of-the-box functionality and simplified integration.” In developing the Hadron, the company says it worked closely with drone manufacturers Vantage Robotics and Teal Drones to perfect the module for use on lightweight drone airframes. Vantage Robotics integrated the module into its micro-gimbal platform featuring its proprietary stabilization technology, offering a dual-sensor, OEM solution for existing UAS airframes and potentially other robotic platforms. Tobin Fisher, CEO at Vantage Robotics says, “Hadron is far and away the lightest and smallest combined visible-thermal sensor that has ever been commercially available. For an aircraft where you’re trying to push the limit on flight performance, every gram matters. The ability to get these sensor capabilities in a package this small makes an enormous difference.” Read more: FLIR HADRON THERMAL/VISIBLE SENSOR MODULE FOR DRONES, ROBOTICS, AND IMAGING ### FLIR SYSTEMS ANNOUNCES MODIFIED THERMAL CAMERAS SPECIFIED FOR ELEVATED SKIN TEMPERATURE SCREENING FLIR Systems, Inc. announced modified thermal cameras for fast and safe non-contact elevated skin temperature* screening. The FLIR EST™ thermal screening solutions provide frontline screening at building entries and in high traffic areas to improve safety and help curb the spread of COVID-19. The FLIR Axxx-EST, FLIR T5xx-EST, and FLIR Exx-EST series cameras are designed to simplify the screening process, reducing the burden on screening operators and adhering to recommended social distancing guidelines. “The new FLIR EST thermal solutions represent nearly two decades of experience designing and manufacturing thermal measurement solutions for skin temperature screening,” said Jim Cannon, President and CEO at FLIR. “These cameras are our easiest cameras to set up and operate to date for skin temperature screening, requiring limited training to begin screening people more quickly and accurately.” FLIR Screen-EST Mode The new EST cameras also introduce an enhanced, on-camera FLIR Screen-EST mode, which increases throughput by 25 percent compared to the previous version. To further improve accuracy, the updated Screen-EST mode automatically generates a sample baseline temperature average and compares individuals’ skin temperature against that baseline, reducing measurement uncertainty from natural body temperature fluctuations and environmental effects.  Read more: FLIR SYSTEMS ANNOUNCES MODIFIED THERMAL CAMERAS SPECIFIED FOR ELEVATED SKIN TEMPERATURE SCREENING ### How to Update Arduino IDE to the Latest Version The Arduino Integrated Development Environment, or IDE for short, is constantly improved, updated, and features Update Arduino IDE with new features and bug fixes.  Keeping your IDE up to date ensures you have the latest capabilities and a stable development environment. This tutorial will guide you through the various procedures for updating the Arduino IDE on Mac OS X and Windows 10 operating systems. By the end, you will know how to proceed to avoid any difficulty when updating to the latest Arduino IDE.   How to Update Arduino IDE on Mac Updating the Arduino IDE on a Mac system is a straightforward process that only takes a few minutes. Here are the basic steps: Open the Arduino application folder. The Arduino IDE application is automatically saved in your Applications folder if you download the software. To access it, you first go to the top of the screen on your Mac click the magnifying glass icon that appears, and type “Arduino”. Next, right-click on the option that says Arduino and click on it twice. Check for updates. For this case, assuming that the IDE is the default Arduino software, upon opening it go to the menu bar on top of the screen and click on “Arduino” then check for updates”. This will make a connection with the website of Arduino and will clarify whether any new IDE is available to download. Download and install updates. If an update is available, you'll see details on the new version number and features included. After you are on the update page, press the “Install” button to initiate the downloading process of the update package. There may be some more instructions on the screen on the final installation of the program then follow that instruction. The IDE will automatically close and reopen once the update is fully installed. Verify successful update. When the Arduino IDE launches again after the update, you can verify the process was successful by going back to the "Arduino" menu and checking the application version number listed under "About Arduino". It should now reflect the newest release version you installed. That covers the basic in-app update procedure for Mac. The Arduino IDE makes it very straightforward to keep your version current with just a couple of clicks. Let it check online whenever you open it to install any waiting updates. Alternative Method for Mac Updates Using Homebrew While the built-in Arduino IDE update works well, some users may prefer to manage Arduino and other command line tools through the Homebrew package manager on Mac. Homebrew allows installing and updating multiple applications from the terminal. To update Arduino IDE using Homebrew, first, ensure you have Homebrew installed by opening Terminal and typing "brew --version". If it's not found, install Homebrew by pasting the one-line installation code. Once Homebrew is ready, check for Arduino IDE updates with: brew update brew upgrade Arduino; This will check Homebrew's package indexes for any updates, then specifically upgrade the Arduino package if a new version is available. To completely uninstall and reinstall Arduino IDE: brew uninstall arduino brew install arduino The Homebrew method offers more control over Arduino IDE and related tools from the command line. Some prefer this for development environments that manage multiple programs. But the built-in Mac IDE updater works well for most users. How to Update Arduino IDE on Windows 10     Updating the Arduino IDE on Windows follows a very similar process to Mac, just with some minor modifications for the Windows interface. Here are the basic steps: Open the Arduino application folder. The Arduino program files are stored in your user profile AppData folder by default. Navigate to C:\Users[Your Name]\AppData\Local\Arduino15 to find the Arduino application folder. Run the Arduino application as administrator. Click with the right button over the Arduino icon and then choose “Run as administrator” from the appearing list. This gives the program permission to modify files during the update. Click on "Check for Updates". Upon loading the JDK IDE, from the GUI that opens, click on the “File” option from the menu bar and then click on the “Preferences” option. Next, go to the window and locate the check for updates button in the bottom left corner of the preferences window. Install any available updates. If an update is found, you'll see details on the newest version. Click the blue "Install" button to start downloading and updating your IDE installation files. Verify successful update. After the IDE closes and reopens, check the "About Arduino" menu item under "File" to confirm the application version number has changed to the latest release. That covers the basic process for updating the Arduino IDE within the application on Windows 10. Be sure to run as administrator so it can properly replace program files. Let it check online whenever you launch it going forward as well. Alternative Method for Windows using the IDE Installer Another option for updating Arduino IDE on Windows is downloading and running the full installer executable directly from the Arduino website. This provides a fresh installation of the latest version. To update this way, follow these steps: Visit www.arduino.cc/en/software and click the "Download" button for your Windows version. If the setup was downloaded, a file named Arduino-windows-installer-xxxx is in the download folder depending on the date of download. exe file you downloaded a few minutes ago. If necessary, put the cursor upon the file, then, by the right key click it and select “Run as Administrator”. On the dialog box of that appears on the screen, click on the next button to run the installer and finish the updating steps. The IDE files will be fully replaced with the new version. No leftovers from previous releases. While a bit more involved, some find performing a clean installation with each update keeps their environment neatly versioned. It also ensures absolutely no compatibility issues carry over from older IDE code. The Best Method for Updating Arduino IDE Both the built-in updater and fresh installation methods work well for keeping your Arduino IDE current. For most users though, letting the application handle updates on its own is preferable. Here's a breakdown of the pros and cons: Built-In Updater Pros: Simple and automatic - just click a button Minimal disruption, files are replaced incrementally Keeps projects/preferences from previous versions Installer Pros: Ensures completely clean install of latest code Can help resolve stubborn issues carried over More control over file management and locations Built-In Updater Cons: Possible glitches if files aren't replaced cleanly Traces of older versions could cause issues Needs internet access each time Installer Cons: More involved multi-step process Risk of configuration loss like preferences Potential compatibility issues with existing projects Therefore, unless you're running into specific problems that fresh installation may solve, the built-in IDE updater is generally the best approach. It keeps things simple and lets the application update seamlessly in the background when launched. Save the full installer method as a troubleshooting alternative. But for most use cases, just let the Arduino IDE update itself on each platform using its in-app functionality. Check online occasionally or whenever a new Arduino core release occurs to keep your environment current. Conclusions and Summary Keeping the Arduino IDE up to date ensures you have the latest features, improvements, and bug fixes available for development work. This article covered the straightforward built-in updating process for both Mac and Windows platforms within the Arduino application menu. We also looked at alternative methods like using Homebrew on Mac or running the full Windows installer executable. While these provide more control, the in-app updater is usually the easiest and best primary approach. By following the simple steps outlined for your OS, you can quickly and easily update the Arduino IDE to the newest available version whenever needed. Just let it check online regularly from within the program interface. Always save older IDE installations if possible before updating as a precaution as well. But in general, embrace new versions for all the benefits regular updates provide. An up-to-date Arduino environment keeps projects progressing smoothly.   ### FOTRIC 226B THERMAL CAMERA FOR AUTOMATED, NON-CONTACT PERSONNEL TEMPERATURE SCREENING The Fotric 226B’s AI algorithm automatically detects and assesses the temperatures of passing humans to provide instant fever alarms Saelig Company, Inc. has introduced the Fotric 226B Infrared Thermal Imager, a standalone infrared camera and PC software combination that provides safe, non-contact measurement of passing human traffic, without requiring person-to-person contact, ensuring the safety of the detection personnel themselves.  It has a millisecond response time which automatically locks on to facial outlines to give accurate non-contact temperature measurements. This fast response means that it does not affect traffic flow or behavior habits, yet can quickly detect people with potential health issues.  When the Fotric 226B detects a face with an above-normal body temperature, an audible alarm is immediately triggered, a red box is placed on the PC image of the target face, and a high quality image is captured with the accurate body temperature overlaid.  WLIR software then automatically emits a buzzer alarm to alert support personnel. The Fotric 226B’s Polysilicon-FPA sensor provides a thermal image of up to 110k pixels of effective temperature measurement points.  The WLIR software provided has a built-in AI face-shape detection algorithm that detects facial temperatures with a 100% success rate. A built-in AI temperature calibration algorithm within the software automatically locks onto face shapes and rejects other high temperature sources in the field of view.  The Fotric 226B has been designed for excellent measurement stability, with automatic correction for ambient changes to avoid false alarms.  The WLIR software utilizes a body temperature calibration algorithm which automatically collects face temperatures in different scenarios for self-learning.  It adjusts the body temperature alarm threshold in real-time by adapting to ambient changes, preventing alarms for body temperature variations due to morning or night differences.  The WLIR software can automatically count the number of screened personnel and the number of suspected abnormal body temperature alarms during a screening process, which is helpful for statistics, and for epidemic prevention and control. Read more: FOTRIC 226B THERMAL CAMERA FOR AUTOMATED, NON-CONTACT PERSONNEL TEMPERATURE SCREENING ### FTDI LAUNCHES DUAL & QUAD CHANNEL USB-TO-UART/MPSSE BRIDGE ICS WITH BUILT-IN TYPE-C/PD CONTROLLERS Always at the forefront of embedded connectivity innovations, FTDI Chip’s latest series of multi-channel USB interface ICs. These have the capacity to deal with next generation power requirements, as larger items of hardware start to make use of the protocol. Available in both 2-channel (FT2233HP) and 4-channel (FT4233HP) versions, the new Hi-Speed (480Mbits/s) devices have serial UART (RS232, RS422 or RS485) and MPSSE (JTAG, I2C, SPI or Bit-Bang) interfacing capabilities. Furthermore, they are fully compliant with Rev 3.0 of the USB power delivery (PD) specification. Each features a Type-C/PD controller for taking care of all negotiation and power gauging, then deciding on the appropriate course of action (thereby offloading work that the system microcontroller would otherwise have to perform). This will enable any equipment that these ICs are integrated into to either draw or provide power as the situation dictates – with power levels of up to 100W being supported. Based on a 32-bit RISC processor core, with 8kB of data RAM and 48kB of code ROM embedded, the PD Policy Engine manages the respective PD ports. The PD1 port can act as either a power sink or power source, while the PD2 port only acts as a power sink. Since all USB protocol handling can be accomplished directly on chip, there is no need for USB specific firmware programming to be embarked upon – which significantly streamlines the whole implementation process. Furthermore, access to FTDI’s royalty-free USB drivers (for Windows, Linux, Mac and Android) negates the need for engineers to create their own drivers from scratch. Read more: FTDI LAUNCHES DUAL & QUAD CHANNEL USB-TO-UART/MPSSE BRIDGE ICS WITH BUILT-IN TYPE-C/PD CONTROLLERS ### GALLIUM NITRIDE FETS FROM NEXPERIA ARE EFFICIENT AND EFFECTIVE HIGH-POWER FETS Whether designing a motor drive/controller for the next generation of battery-electric vehicles, or a power supply for the latest 5G telecommunication networks, Nexperia’s GaN FETs will be key to your solution. Offering high power performance and high-frequency switching, the design and structure of Nexperia’s normally-off GaN FET products ensure standard, low-cost gate drivers can be used in your design. Key Features VDS : 650 V Threshold voltage: +4 V Transient over voltage V DS : 800 V VGS range: 20 V Benefits Easy to drive Inherently safe against parasitic turn on Reduced losses in reverse conduction mode Ultra low Qrr for fast switching Transient over voltage capability Robust gate oxide Read more: GALLIUM NITRIDE FETS FROM NEXPERIA ARE EFFICIENT AND EFFECTIVE HIGH-POWER FETS   ### GAMEDUINO 3X DAZZLER IS AN ARDUINO SHIELD WITH A GPU, FPGA AND AN HDMI PORT ONBOARD. Following the general success of the first version of the Gameduino, an Arduino Shield which allowed users to connect devices like VGA monitors and speakers to the Arduino, to create high-quality sprite/tile-based video games,  James Bowman‘s excamera released improved versions of the device with built-in screens and graphics processors which were widely accepted within the open-source gaming communities. Spurred by these successes and the desire to provide users with a shield that reflects current technology realities, excamera recently announced the launch of a new version of the shield; the Gameduino 3x Dazzler. A totally open-source, and hackable audiovisual platform, the Dazzler shield comprises of a BT815 GPU, a Xilinx Spartan-6 FPGA, an HDMI port, and two Wii Classic ports that give users the experience of a plug-and-play game console. The combination of the BT815 GPU and the Xilinx Spartan-6 FPGA provided all that was needed to achieve the 1280×720 (full 720p) video (and sound) output over HDMI. In addition to this, the shield features a memory card slot which could house memory card on which game assets like sounds, images and sprites could be stored. Some highlight features of the dazzler include: GPU: BT815 FPGA: Xilinx Spartan-6 Video output: 24-bit HDMI at 1280×720 (720p) with audio Storage: microSD slot Extra input: two Wii Classic controller ports Programming: Arduino and CircuitPython, with lots of samples Read more: GAMEDUINO 3X DAZZLER IS AN ARDUINO SHIELD WITH A GPU, FPGA AND AN HDMI PORT ONBOARD. ### Get Creative with the miniSpartan6+ : A Competition with $2500+ in cash prizes!!! Comes with all the hardware and software you need to quickly get your FPGA project going. Now you can focus on the real engineering. Stretch Goal: $30,000 Get Creative with the miniSpartan6+ : A Competition with $2500+ in cash prizes!!! If we reach our $30,000 stretch goal, we will be able to hold a competition. We will ask backers who have a miniSpartan6+ to demonstrate a creative, innovative application. We will distribute $2,500+ in cash prizes, and winners will be chosen based on polling from social media and experts from academia and the industry. When? The contest will be held 1 month after we deliver our boards ( if everything moves smoothly, in October 2014. Where? All around the world - online. Build your project, document it, film it working, and you are in. Guidelines? No conditions except using your miniSpartan6+ in your project. Meet the miniSpartan6+ and the Scarab IDE: When we came up with our board's design, we looked at what was available in other boards on the market and enhanced it. Our kit is small, much smaller than the closest thing on the market,it's smaller than a credit card at only 1.8 in x 3.0 in. That means you can put it inside some pretty small projects. (Here's something to get you thinking, by 2025 the cost of putting one pound into space is expected to be just $100.) And our kit is bread board friendly, so you can quickly connect it to a shield or to a bread board. Now, there’s a handful of other broads with many of these features on the market, but our miniSpartan6+ costs around half of what its closest competitor does. The miniSpartan6+: The Spartan6 LX9 FPGA from Xilinx, one of the best FPGAs on the market. An on-board USB JTAG Programmer to power and program your FPGA with any open source programmer, like the one inside our own Scarab IDE. An on board USB interface that powers the board and allows communication with the PC at speeds up to 480Mbps. (That's fast enough to make a logic analyzer. Check our website for updates on projects and tutorials). An on-board HDMI port. Instead of using VGA output on your projects, now you can go HDMI. An 8-channel analog to digital converter running at 1 MSPS with 8 bit resolution. So you can start connecting real world sensors to your FPGA kit. Memory: 32MB of SDRAM, 64Mbit of SPI Flash and a microSD card interface. A stereo audio output jack using 1-bit sigma-delta DAC to start playing your music. 24 Digital I/O pins.   For more detail: Get Creative with the miniSpartan6+ : A Competition with $2500+ in cash prizes!!! ### GoFly - paragliding/hangliding/gliding altimeter-variometer from Your car navigation using Arduino GoFly is a project based on PNA (car navigation devices with Windows CE), LK8000 tactical fligh computer software and variometer (altimeter) external input based on Arduino board and pressure sensor. Why? -You can build this for about 150$, -Your ordinary PNA (Personal Navigation Assistant) changes to really nice, high end flying computer, with lot of features and Arduino based altimeter and variometer let You see in real time your altitude, vertical and horizontal speed, -Software let You log your flight in logfile, that is approved by FAI, so You can always claim Your flights in any competition, -most PNA devices are much cheaper than dedicated flying devices -GoFly gives You also nice altitude changing sound so You dont need to look into screen all the time to see what is going on in the air -easily support competition tasks, with easy to understand user interface -your PNA is still very good car navigation system, so it will be peace of cake to come back from any XC flying Step 1: How this project works So basically, device is based on two devices. First one is a PNA (car navigation) device which let You run extra software (LK8000 in that case) and second one is Arduino based altimeter/variomter. Most PNA devices on the market works under Windows CE environment. When You turn on PNA, device is booting up and autostart navigation software. There is a lot of information over the internet how to "unlock" PNA devices to be able to run other software. Other important thing is that we need physical interface to connect Your unlocked PNA do Arduino board. Many PNA devices has built in USB interface, but unfortunately we are not able to connect PNA with Arduino over typical USB pna port. But some devices (like few Mio models) also support serial interface (TTL logic, 3.3V) over usb port. Second device is an Arduino board (Pro, Mini Pro, Nano) based on 3.3V logic with Atmega328 microcontroller, with pressure sensor board, speaker and extra battery holder. Arduino board is processing in real time air pressure, temperature, vertical speed (m/s) and pushing those values few times per second over dedicated protocol to PNA device running LK8000 software. LK8000 is taking those values and present in nice form on PNA screen during flight. Also very nice feature of every altitude/variometer is beeping noise sound. Arduino, when pilot is gaining altitude is beeping faster and faster letting You know that You are inside rising air. Rising hot air is what we called thermalls. During great flyable weather day pilots are able to soar hours, that is why we need extra battery pack. Average PNA device is capable to run without external power around 2 hours (about 300-400mAh power consumption with average 750-900mAh battery inside). Providing extra power let You fly few more hours with highest lcd brightness. If anybody ask why doing all that if there is a lot of different devices for flying, new palmphones, iphones, android devices with dedicated software. The answer is easy for me. Most dedicated flying devices price range is around 500-1500$, user interface is miserable, with gray-scale LCD screens, with lack of information and less features. Iphone/Android devices cost also a lot, and flying software is using GPS based altitude to measure Your speed and altitude change. Unfortunately this is not enough. GPS latency is to big for usable real time thermalling. So,basically  the idea is to find cheap, nice looking PNA device, with good lcd screen, that we can see even in direct sunlight, unclock it, put LK8000 software on it, build small altitude/variometer device based on Arduino board with serial and sound output and connect everything together. Also even without PNA navigation connected to GoFly, this is still full functional sound variometer device. Step 2: What we need? 1. Mio Moov s501, s401 or Mio M400 car navigation system (You can do research over the internet to find other suitable devices). You can find those devices on ebay for around 35-70$ (You can also use other pna, but remember, we need good lcd screen and serial TTL 3.3v input). Mio is already tested by many paraglider/glider pilots. Major Components in Projectsmall speaker enclosure Arduino Pressure sensor board For more detail: GoFly - paragliding/hangliding/gliding altimeter-variometer from Your car navigation using Arduino ### HACKADAY PRIZE 2022: ARDUINO-POWERED WEIGHING SCALE HAS A REAL ANALOG DISPLAY Digital displays are useful for quick and accurate readout, but lots of people prefer the physical motion of a needle moving along a dial. For instance, many smartwatch users choose an analog face to show the time, and modern cars with digital dashboards often default to showing an analog speedometer. Following this trend, [Miro Pavleski] built a digital weighing scale with an analog display that not only looks neat, but also serves as a good demonstration of the way that modern scales work. Inside, the device is built up like a typical electronic scale: the heart of the instrument is a load cell that supports the platform and bends in proportion to the weight applied. This bending motion is sensed by a set of strain gauges wired up in a Wheatstone bridge configuration. An HX711 readout chip measures the resulting voltage and converts it to a digital code that is sent to a microcontroller, in this case an Arduino Nano. Whereas a typical scale would then simply show the resulting number on an LCD display, [Mirko] decided to use a moving coil meter driven by the Arduino’s analog output. That meter was originally designed to show currents, so [Mirko] printed a new background image using kilograms instead. As with any analog sensor, calibration and nulling are essential to obtain a reliable measurement. When the instrument is powered up, it asks the user to place a 100 gram weight on the scale, which will then be used as a reference to control the voltage-to-weight scaling factor. You can also subtract the tare weight of any containers you might want to use by simply placing them on the platform before flipping the power button. https://youtu.be/h-M2wuZypNA If you’re planning to design your own digital weighing scale, this older project is a great place to start. This teardown of a mass-produced scale is also full of interesting details. We’ve even seen a home-built scale that automatically weighs cats and feeds them based on ID. Source: HACKADAY PRIZE 2022: ARDUINO-POWERED WEIGHING SCALE HAS A REAL ANALOG DISPLAY ### HACKADAY PRIZE 2022: THIS INTERACTIVE AIR QUALITY MAP MAKES THE INVISIBLE VISIBLE Air quality can have a big impact on your health, but it isn’t always something you can see. [Ahmed Oyenuga] wanted to make air quality something more tangible and developed an Interactive Air Quality Map. Using addressable LEDs and acrylic panels, [Oyenuga]’s map lights up different regions of his state (Lagos) with colors that correspond to qualitative values of the air quality readings. The color key on the edge of the map becomes a readout when you touch a specific region of the map. Most of the map’s functionality is handled by an Arduino WiFi 1010, but the capacitive touch is running on a custom board [Oyenuga] designed with an ATSAMD21J17. [Oyenuga] is getting air quality data via a DesignSpark Environmental Sensor Development Kit (ESDK) and then uses reverse geocoding to take the GPS data and turn it into a location the map will understand. If you’re interested in different options for monitoring air quality that could feed into a map like this, why don’t you check out this LoRa Air Quality Monitor or even a Mobile Air Quality Monitor. Source: HACKADAY PRIZE 2022: THIS INTERACTIVE AIR QUALITY MAP MAKES THE INVISIBLE VISIBLE ### HALLOWEEN DIY CANDY DISPENSER WITH RIDDLE, 7-SEGMENTS & PUSHBUTTON, ARDUINO & 3D PRINTED | ELISAVA In this project we use an Arduino Uno along with some simple components to create an interactive, scary  and playful decoration for Halloween to impress all your guests. Our idea is basically designing a candy dispenser that only provides the user with a few candy if a riddle is solved properly; of course everthing ambiented for the spooky season.   Supplies Computer (with Arduino software) Arduino Uno (or equivalent) Jump wires  7 segment display  LED lights  Servo motor 3D printer  PLA material  Candy Ply wood  Laser cutting machine  Paint (spray and non-acid better) Drill Resistors 7x330Ohm and 3x220Ohm Speaker MP3 player Pushbutton The underlined elements can be easily replaced by commercial already made Halloween products, by purchasing them you save a significant amount of time and reduces difficulty. Step 1: IDEA DEVELOPMENT To begin with, we decide what we want to achieve with our gadget and plan how it will get done. Which is the hardware that we need, how we have to program it and brainstorm ideas for the design. In this step, it has been decided that we will use a seven-segment display and the user will have to guess a number as the answer to an enigma. When the right digit is on display, the user should press the button. Once the number is correct a servo will activate and throw some candy. In our case we ask: "How old is our university? (in decades)", and the answer to that is 6, so when the displayed number is 6 the candy is released. This code can be changed to whatever number suits you better. Step 2: DESIGN In this part everyone can bring their own creativity and come up with those final touches that will make your design unique. As we planned to do a two-pieces setup, we will need a grave and a tree. We want to 3D print both of them, this is why we start with this part as it takes quite a bit of time to print. As it's been mentioned before, if you purchase the parts from a store it might save you some time. Step 3: 3D PRINTING AND LASER CUTTING We got the tree file from Thingiverse.com and reescalded it to make it 50% bigger; also the previous design for the grave that we did ourselves and after passing them through the slicer (Cura), we printed them. Once that is done with Autocad we design the base structure and using a laser machine, we cutted the base precisly. In addition, as we were using the laser machine, we could engrave our riddle in the ply-wood. We drilled holes in the base right under the grave and tree so we can run the cables down to the Arduino. Step 4: COLOUR We painted the different parts with spray to achieve the desired spookiness.  Step 5: PROGRAMMING Once the setup is ready, we should program the different functions in Arduino. In order to assure that all components work, what we do is program them individually. Once we know for sure that all elements work, we start putting it all together. For example we connect the 7-segments display and write a short code that displays all numbers with a short delay. Don't forget to download the Libraries for each element, for example the 7segments or the mp3 player, as they require to have the installed libraries on your computer. Also the pins of the Arduino are according to our connections, if you don't follow the scheme that you can find in Step 8, the code won't work. Step 6: CODE In the following file you can find the code for this project. Step 7: DISPENSER MECHANISM In order to release some sweets when the right answer is pressed, we designed a mechanism and printed the parts. It consists of a structure that is glued inside the tree and has a funnel shape. Next to it there's a space where the servo will rest and on top of that we have the candy tank. Simple yet functional. The only thing left to do is add a tiny piece of cardbord to the servomotor so that it works like a door. Step 8: FINAL ASSEMBLY The last part, to assemble and achieve the final product. We have connected all the hardware with the Arduino and glued all the elements to the plywood base. Connections are shown in the graphics generated in Fritzing. As you can see in the second image, the 7 segments has an independent welded PCB attached at the back of the grave due to its complicated connections. Each of the 7 lights it's an LED that works independently and requires a resistor. Then the cables run down from the welded PCB to the base where we can find the Arduino. Step 9: FILL THE TANK WITH CANDY Make sure there's enough sweets for everyone and the Halloween candy dispenser is set and ready to go. Source: HALLOWEEN DIY CANDY DISPENSER WITH RIDDLE, 7-SEGMENTS & PUSHBUTTON, ARDUINO & 3D PRINTED | ELISAVA ### HIGH EFFICIENCY: A MULTI-MODE, FORCED-FREQUENCY-RESONANT DIGITAL CONTROLLER IC FOR SMPS APPLICATIONS Infineon Technologies launches the XDP™ digital power XDPS21071, the first flyback controller in the industry with zero-voltage switching (ZVS) on the primary side to achieve high efficiency. This controller is aimed at fast-charging applications such as USB-PD or QuickCharge. Light-load efficiency is optimized for variable output application. The XDPS21071 is a high-performance digital flyback controller with an integrated dual-MOSFET gate driver and a 600 V depletion startup unit. The primary-side controller drives a high-voltage external MOSFET in a flyback topology and an external low-voltage MOSFET to create a pulse for achieving ZVS condition at the high-voltage MOSFET. It supports fixed-frequency switching up to 140 kHz. The patented forced-frequency-resonant (FFR) switching scheme is implemented by means of a digital algorithm, which is configurable via parameter settings (UART port is included) to meet application requirements and the conversion efficiency of international regulatory standards (i.e., EU CoC version 5 Tier 2 and DoE Level VI). Ease of design and system optimization are made possible thanks to the intelligent, self-adaptive multi-mode operation that matches each line/load conditions with the best-fit operational mode (i.e., FFR, CrCM, burst mode) for unparalleled system performance. Hereby ZVS operation enables for lowest switching losses. Highest system performance is achieved by only a minimal adder in BOM cost. This controller comes with adaptive overcurrent protection. It is lead-free and RoHS compliant. Read more: HIGH EFFICIENCY: A MULTI-MODE, FORCED-FREQUENCY-RESONANT DIGITAL CONTROLLER IC FOR SMPS APPLICATIONS ### HISILICON & NOWI INTRODUCE ENERGY AUTONOMOUS NB-IOT PLATFORM: A POWER-FREE SOLUTION IN THE SMALLEST SIZE POSSIBLE HiSilicon and Nowi’s continued collaboration has led to a 2nd generation Energy Autonomous NB-IoT platform optimised for ease-of-use and form factor. New Internet of Things applications are now possible, where physical size is limited and ‘Plug & Forget’ indefinite operation is required. HiSilicon (Shanghai) Ltd and Nowi Energy B.V. today showcased the 2nd generation of their Energy Autonomous NB-IoT platform. The device acts as a sensor hub that can transmit via NB-IoT while operating indefinitely through its energy harvesting capabilities. It is based on HiSilicon’s Hi2115 NB-IoT solution and Nowi’s leading NH2 energy harvesting power management IC. The solution removes the need for manual intervention (changing batteries) or cabling to supply power in applications that become zero maintenance. Building upon the success of the 2019 collaboration , HiSilicon and Nowi have optimized the design to resolve customers’ challenges and satisfy new, stricter market requirements to broaden the variety of applications addressed. The platform combines connectivity and energy harvesting in the smallest size possible and offers an open slot on which various sensors can be placed depending on the application need. As such the platform can act as the backbone of countless connected sensor solutions. Read more: HISILICON & NOWI INTRODUCE ENERGY AUTONOMOUS NB-IOT PLATFORM: A POWER-FREE SOLUTION IN THE SMALLEST SIZE POSSIBLE ### Home Automation (or Robot Butler called Geoffrey) - iPhone controlled, arduino based Being able to control everything from your pocket has long been a dream shared by many. Previously we've had universal remotes that can both control our TVs and radios, then we had wireless wall sockets. Both great things, but how likely is it that you're going to be carrying around those remotes with you everywhere you go? These days almost everyone has a smartphone in their pocket, so why not use that? So that's what I did. I can now control electrical sockets and the main lights in my house using my iPhone. It's all totally wireless and you can set up smart run-times within it (e.g. when you press the shower button it will turn on the boiler, the bathroom lights and the upstairs lights, after 1 minute it'll turn off any downstairs lights that are still on and then after two minutes it'll turn off the upstairs lights, and after 20 minutes it will turn off the bathroom lights). By using basic electrical knowledge, taking apart some readily available items and writing some arduino code you to can make yourself a robot butler (mine's called Geoffrey). Let's get started! Step 1: What you'll need Major Components in Project Tools you will need: • Knife or other flat blade • Stanley knife • Set of standard Phillips and crosshead screwdrivers • Safety Torx T15 screwdriver (can be done with a standard Torx T15 but more faff and potential breaking of a flat head screwdriver may ensue) • Soldering iron • Solder • Wire cutters • Wire strippers (although this could be done with a knife) • Multimeter Materials you will need: • An arduino (I’m using an Arduino Uno) • An arduino Ethernet shield • A RTC (real time clock) module. Adafruit do a very good kit that I’d highly reccomend (http://www.adafruit.com/products/264) but if you search for “New I2C RTC Real Time Clock Module DS1307 Arduino” on eBay you will probably find one for a fair bit cheaper (that’s where I got mine) • A set of RF plug sockets and remote. I used Maplin’s Remote Controlled Mains Sockets (product code N79KA). The RF module used in these plugs is the only one I’ve coded for and as such the only one that this has been tested with. There are plenty of other brands that use the same chip (SC5262) but you will need to check this for your individual sockets. If you can’t get one with the same chip, the basic principle and the way the coding is done will still apply but you may need to do some more work to get your arduino to communicate with the sockets. You will only need one remote but you will require a plug socket for every electrical item or set of mains lights you wand to control independently – (i.e. I only ever use my TV with my Xbox so when ever I turn on the one I will require the other too. This means that I only need one RF plug socket and a two way mains extension for them both to plug in to). • Mains extensions • Pattress block extenders (46mm depth recommended) – this is so the additional circuits will fit behind your standard light switch. One required for each set of light switches to be rewired. I bought mine at Maplin (http://www.maplin.co.uk/single-surface-pattresses-1286) • 75mm electrical socket screws (2x pattress block extender) • A router with at least one free Ethernet port that is also used for your WiFi network (you will also need to have access to the settings of this router) • An iPhone or iPad (the app I’ve used and as such a fair proportion of the code is iPhone/iPad only. I’m sure there are android alternatives but you’d have to look around for them and change the code accordingly. I’ve tried to make the code as easy as possible to change the control method) • Mains to USB power supply • An ethernet cable • A USB A to B cable • Access to the mains breaker/fuse box for the building in which you’re installing this (if you don’t intend to do anything with the mains lights then you probably won’t need this) Arduino libraries you will require: • Adafruit’s modified RTC library (for interfacing with the clock module) – https://github.com/adafruit/RTClib • RCSwitch library (this deals with the codes to be sent by the RF remote) – https://code.google.com/p/rc-switch/downloads/detail?name=RCswitch_2.51.zip&can=2&q= Skills required: • Soldering • How to avoid electrocuting yourself when sticking your fingers into exposed light switches Got all that? Let's get cracking! Step 2: Opening the remote Essentially the RF remote will still be used to control the sockets, it's just that, rather than pushing the buttons like some sort of Neanderthal, it will be controlled by the arduino (which is in turn controlled by the touch screen on your iPhone). To do this we will need to take apart the remote. First, remove the battery cover, which will reveal one of the six tabs that hold the front cover to the back of the remote. Using a flat blade or a small flat head screwdriver you can now pry this apart. I ended up loosening a couple down the side first as I found it to be easier but this might not be the case for everyone. Roughly 25mm from the bottom of the remote and 35mm from the top there are tabs on either side. Again, taking your prying instrument of choice, slide it down the small groove between the top and the bottom of the remote's casing and push these tabs until they come free. You may need to apply some levering pressure to get them to pop out properly. Once you've done both the tabs on one side it should be much easier to release the tab in the battery compartment. I found that loosening the tab at the top was now fairly simple (again push it with the blade or screwdriver until it pops free). I had to use a fair bit of levering pressure for this one. Now you can just push the top of the casing against the bottom and the two tabs on the other side should pop free. If not, just repeat the initial process on the other side and you will have the top free (take a look at the photos which show where the tabs are if you're in any doubt). You can now just pull out the circuit board. Huzzah! Step 3: Connecting the remote to the arduino We now need to solder three wires on to the exposed circuit board. One 5V, one ground, and one data control. The 5V and Ground go to the appropriate sides of the battery holder (the side with the larger spring is the ground side and the smaller side is the 5V side). I was initially concerned about losing range if I used a 5V supply rather than the 12V the battery it was designed for but I haven’t found this to be an issue. If you do decide to use a separate power supply, make sure to connect the power supply's ground to the ground pin of the arduino else the data connection won’t work (they both need the same 0V reference) The data wire must be connected to the Dout pin of the chip (see pictures). There is a resistor which has one side directly connected to the Dout pin (see pictures). I found it much easier to solder my communications wire to this than to the chip itself. It doesn’t matter which pin on the arduino it goes into provided you change the code accordingly. I used pin 10 and as such that's what the code will have as a default. Congratulations! The arduino is now connected. Step 4: Setting up basic appliances ready for use If you want to turn on things like TVs, speakers, lamps etc. then you can use the plugs you've already got! Simply select which group and which channel you would like the device to have assigned to it on the back of the plug. You should note that there are a maximum of 16 possible separate plugs (four channels within four groups). You might want to consider limiting yourself to 12 as this will leave one full group free for your next door neighbour to use without them accidentally turning on and off your appliances and vice versa. You will almost certainly want to keep a record of which appliance has been given what group and channel as you will need this later (I've got a big spreadsheet with all the information I need to program this stuff - more on that later). To select the group and channel turn the upper and lower dials on the back of the plug (the upper dial is the group and the lower is the channel). Plug the RF receiver into a wall socket and the appliance into the RF plug. Your appliance is now ready to be controlled by your arduino! If you don't want to turn on the main lights in your house (or you don't fancy messing around with light switches and mains voltage electricity) then you can skip the next two steps. Step 5: Taking apart the RF wall sockets We'll need to take apart the RF wall socket to get to the innards that will be used to control the main lights. First use a flat blade to prise off the ring around the prongs (there are some half exposed screw holes just underneath that make this very easy). The ring is connected at the two lower bulges and at the top. Use the blade to free it from the two lower bulges and then you should be able to pry it off with your hands. Now the two screws are exposed (they're in the holes). The screws are a security Torx T15. I used a small flat head screwdriver that I didn't mind damaging to break off the security spike in the screw and then a standard Torx T15 screwdriver to remove the screws. I would highly recommend using the correct screwdriver though to avoid quite a lot of frustration! Once you've undone the screws you should be able to open the bottom of the socket. The top is clipped by two small plastic tabs. Lifting the bottom should cause the top just to pop out. If you're really worried about damaging the enclosure you can use a blade to push the tabs in and release the top that way. The part we're interested is in the the part connected to the small circuit board. DO NOT touch the screw in the plastic covering at the top left of the board! This is part of the antennae and moving it, even slightly, can have massive effects on the range. You will need to detach the three wires from the three terminals (may be a different number for different countries: I would assume the USA would only have two). The easiest way to get to the thick wires is to undo the small screw on the right hand terminal (a small flathead should do the job). You can then use a flat blade to lift the top half away from the bottom half. Next cut the wires away from the terminals (it's best to try and keep as much wire as possible so cut as close to the terminals as you can). The released terminal is easy; the other two are fixed and a bit more fiddly. You should now have the circuit board free from the enclosure. On the back of the circuit board you will see the two five-element metal sections that are used to select which channel the board will respond to. You will need to get or make two small jumpers. I just used a couple of very small lengths of wire with stripped ends. These jumpers need to be soldered on to the board to select permanently what channel the board will respond to. This can be quite fiddly and I found a circuit board holder (Panavise Jr) and helping hands/magnifier to be extremely useful here. If you look at the back of the casing, the orientation of the numbers will be the same as the board flipped over (that is 1 and I on the far left, 2 and II at the top, 3 and III on the right, and 4 and IV on the bottom. Each centre point needs to be connected with one of the jumper leads to the appropriate surrounding point for the desired channel/group. Congratulations! You how have the board setup to do your bidding!   For more detail: Home Automation (or Robot Butler called Geoffrey) - iPhone controlled, arduino based ### How to control arduino board using an android phone and a bluetooth module In this tutorial you'll learn how to use a bluetooth module and MIT's app inventor to create a wireless serial link between an android phone and an arduino board. Here is a short video showing an example app I created. I'll describe how to do the wiring, write an arduino sketch that can accept basic commands and send them and how to write the app itself. I asume you're already familiar with some of the basics, you made a few arduino projects and are familiar with the arduino IDE. If you have attempted serial communication with the arduino board everything should be fully comprehensible. If you have any problems or questions feel free to ask them in the comments section. ...and here is an example of receiving the data from the arduino board on the mobile. The temperature sensor connected to the arduino board is a ds18b20 sensor. Just to show how awesome app inventor is I added text to speech functionality - the app says the temperature every 15 seconds. The arduino code and the app is described in more detail in steps 4,5 and 6. Step 1: Wiring & part list The circuit is as simple as it gets so you probably already have most of them. You will need: - arduino board - bluetooth serial module (I used a btm222 module on a breakout board with an inbuilt regulator ) - an LED - resistor (100ohm) - wires - breadboard The only problematic part here is the bluetooth module. There are different modules all over the internet so be sure you check the pinout in the datasheet of the one you get as it can differ. Also notice that there are two general classes of bluetooth modules: Class 1 has range of about 100 meter (300 feet) Class 2 has range of about 10meter (30 feet) In case you're wondering they are entirely compatible and you can only get 100 meter range if both of the devices (ie the mobile and the serial module) are class one. If one of it is class 1 the maximum range is lower. Major Components in ProjectYou will need: – arduino board – bluetooth serial module (I used a btm222 module on a breakout board with an inbuilt regulator ) – an LED – resistor (100ohm) – wires – breadboard   For more detail: How to control arduino board using an android phone and a bluetooth module ### How to Make a Basic Computer Mouse Using the Joystick Module and Arduino Uno This instructable will show you how to make a joystick controlled mouse using Arduino Uno and the joystick module. Supplies You will need- One Arduino Uno 5 jumper wires One Joystick Arduino IDE Python Step 2: Make the Circuit Make this circuit shown using your Arduino and Joystick. Step 3: Uploading the Arduino Sketch //The program that you can copy onto the Arduino IDE is- void setup() { Serial.begin(9600); pinMode(9,INPUT); digitalWrite(9,HIGH); } int prev_state=0; void loop() { int z=0,xpos=0,ypos=0; int x=analogRead(A0); int y=analogRead(A1); int sensitivity=10; if(x>=550) xpos=map(x,550,1023,0,sensitivity); if(x<=450) xpos=map(x,450,0,0,-sensitivity); if(y>=550) ypos=map(y,550,1023,0,sensitivity); if(y<=450) ypos=map(y,450,0,0,-sensitivity); int curr_state=digitalRead(9); if(curr_state==1 && prev_state==0) Step 4: Changing the Com Port in the Python Program Paste this program in a Notepad - import mouse, sys import time  import serial mouse.FAILSAFE=False ArduinoSerial=serial.Serial('com3',9600)   time.sleep(1)                while 1:   data=str(ArduinoSerial.readline().decode('ascii'))     (x,y,z)=data.split(":")         (X,Y)=mouse.get_position()        (x,y)=(int(x),int(y))                 mouse.move(X+x,Y-y)         if '1' in z:                 mouse.click(button="left")       Change the com3 part of the program to the specific port which is applicable to you. Save this file as Python.py in Notepad. Step 5: Open the Python File Open the python file in the Python software you just saved i.e. Python.py Step 6: Upload the Program Click on the Run tab and click on Run Module to run the program on the Arduino Board Step 7: Your Program Is Ready to Go! Once you finish all this steps you can use the joystick to move around the mouse pointer and if you click hard then it also has a clicking function. Step 8: Understand How the Joystick Works and Understanding X and Y Axis If you want to learn more about x and y axis's you can visit - https://www.math.net/x-and-y-axis. How the Joystick works - A joystick plainly consists of two potentiometers aligned in the x and y direction which I have given an explanation link for. The Arduino Uno reads Analog (we fixed the x and y pins in analog pin 0 and 1) values from the Joystick in the range of 0 to 1023. Thus, when the joystick is in its default position e.i. the center, the Analog value also becomes close to 510 - 511 (between 0 and 1023). Source: How to Make a Basic Computer Mouse Using the Joystick Module and Arduino Uno ### How to Make a Infrared (IR) Remote Controlled Car With a TV Remote for University Project, Science Fair and Robotics Competition Follow the instructions below to build the remote control car. This project is ideal for science fair, robotics competition and university projects. The design is highly adaptable, you can modify it easily and add your own components. Table of contents Step 1: video demo Step 2: circuit diagram Step 3: Arduino code (software) Step 4: Fixing common error, if your car does not work Step 5: Notes for modifying this design Safety instructions: Take the batteries out of car when not in use. If you cannot see/supervise the car, take the batteries out. Do NOT short the circuit. A common symptom of this is the circuit overheats. If you are using your own power supply, use less than 12 volts, unless you know what you are doing. Supplies DIY infrared (IR) remote car kit (from https://www.ebay.com.au/itm/224993090875 , only ships within Australia, and select the option "Arduino and breadboard kit" for electronics on eBay page) TV remote (ensure its batteries have charge) 6X AA rechargeable* batteries A cross-head screw driver To build the car without the kit, go to the eBay page linked above to see the list of components in the kit. *rechargeable ones are recommended, since DIY car typically have poor power efficiency and drains batteries quickly Step 1: Watch the Video https://youtu.be/dsQZzS53TZg Timestamp in the video: 0:17 assembling the chassis and motors 4:30 electronics 5:48 circuit diagram 5:54 software (Arduino code) 7:50 demo of the driving (with precision mode code) 8:20 demo of the driving (with racing mode code) Step 2: Circuit Diagram Wire it up according the diagram above. Step 3: Arduino Code There are two modes on offer: Precision Mode: when it turns left/right, it spin on a fixed axis (see Step 1 video at timestamp 7:49) Download 'IR_car_precision.ino' AND 'PinDefinitionsAndMore.h', which are attached below Then save them into a folder called 'IR_car_precision' To change the speed of car, find the variable "carSpeed" and change it To change how fast the car turns left/right, change the variable "turnTime" Racing Mode: it turns left/right, while going forward, like a real-life road car. (see Step 1 video at timestamp 8:19) Download 'IR_car_racing.ino' AND 'PinDefinitionsAndMore.h', which are attached below Then save them into a folder called 'IR_car_racing' To change the speed of car, find the variable "upperSpeed" and "lowerSpeed" To change how fast the car turns left/right, change "upperSpeed" and "lowerSpeed", so the difference between them is bigger/smaller If you have never used an Arduino before, check out https://www.arduino.cc/en/Guide/ArduinoUno Attachments IR_car_precision.ino Download PinDefinitionsAndMore.h Download IR_car_racing.ino Download Step 4: Fixing Common Errors If you do not have any errors, skip this step (and congratulations!). Arduino does not respond to infrared signals. Go into serial monitor of the Arduino, which would provide you with information Check the TV remote's battery has power Have you change 'command' number, which is shown in Step 1's video at timestamp 7:15? Have you inserted the capacitor into the circuit? Move the car closer to the TV remote Do the check mentioned under 'Arduino is not powered on'section below, voltage under 7 volts leads to instability and inaccurate reading by the infrared sensor Arduino is not powered on Use a multimeter or voltmeter to measure the voltage between the black and red wire of battery holder. Then measure voltage between pin 8 and 4 of L293D chip, when it is connected to the battery. If any of the two voltage measurements is less than 7 volts, replace with fully charged batteries. Motor does not move, or very weakly. Check if the Arduino is powered on Ensure pin 16 of L293D is connected to 5V on Arduino. Both wires of each motor are plugged in properly Car does not drive straight. A bit of deviation from straight path is expected, and there is little can be done. Ensure the wheels are mounted properly and are parallel to each other Ensure pin 16 of L293D is connected to 5V on Arduino. Try all the commands: drive forward, backward, left, right and stop. You might have mixed up the keys. For all issues. Ensure everything is connected as shown in Step 2's diagram Read the error message in the black window at the bottom of Arduino IDE. Copy the error message into Google. Go to Tools in Arduino, ensure the Board is "Arduino UNO". And port is usb something, not BlueTooth. Source: How to Make a Infrared (IR) Remote Controlled Car With a TV Remote for University Project, Science Fair and Robotics Competition ### I can't dev no skills, but need a space game that doesn't exist (for me to play) I made a 4 joystick game controller with arduino for space games. However, there is a game category that is lacking. essentially, I need “velocidrone in space” ,, I have a pretty good grasp on the way that a space drone should race by now, I've played enough of the existing games that offer some sort of related activity. Orbital Racer, Kerbal Space Program, Starmade, Lunar Flight, other games that don't somehow crutch the physics (to make for airplanes in space) but don't really offer nav courses are Infinity Battlescape, Astrokill, Thrust and Shoot (to some degree) Overload is a great game for my controller, but has nothing to do with physics. what I need is a game that is focused on high performance “drone racing” for thruster powered space drones. This game would be designed so that players could do a lot of exploration themselves, since so many things are technically undiscovered. Specifically, course arrangement and drone thrust and fuel capacity all need to be able to be changed by the player, and these courses and settings would need to be exportable and importable. So my game desire would work very similar to Velocidrone or Liftoff or etc. , but work for space physics. It would have at least one style of map editor, but ideally it would allow for the player to also have the option to place gates from an avatar they drive around, being able to place gates that appear around the avatar so that the gameplay of course editing runs a bit like minecraft creative mode. (this would also allow players to have an opportunity to develop their coordination without being in a high g manuever). Racing does not need to be a part of the game at all,, although having the ability to know where your next gate is is very nice. (so, with quadcopters, you can always just figure a course out for yourself around some trees, but if the sim knows when you go through a gate, and then directs you to the next one, it's easier to share courses with others that are less obvious with the gate order, particularly as some of the best moves are actually not in smooth lines). I have a youtube channel showing some gameplay with my controller, this Kerbal Space Program video is really close to what I'm looking for. https://youtu.be/Ssb_RZ4CBQg what am I looking to do?? Well,, I want a game that is very affordable for anyone in the world to play, and runs on any potato. I want it to have the required features, but without being a big project. So, instead of nice graphics, gumball colors are good. Also, I would like to be able to share the project and edit it myself in Unreal. I don't plan to sell the game, and don't actually need to be the one listing it to be happy, it can be free, or it can be affordable, but the assumption is a larger game developer will make a bigger better game that fills the spot eventually, however along the lines of arduino style projects, it would be nice for people to have an option that works anywhere and for very cheap. I will happily send controllers to anyone interested in the idea. I don't think I will be able to learn from scratch how to make a game, but it doesn't need to be fancy. It is CRITICAL that players can make their own courses and share them, though, as the course elements that will make for good tracks will not be known until many players over time continuously explore new course elements. (like drone racing sims allow). If someone thinks they can make a reasonable representation for reasonably little effort, I CAN pay for the project, but it has to meet my minimum requirements, work, and I can't pay very much. We're talking something a warehouse hourly wage worker can afford. so a recap,,, the game needs to run on potatoes, allow the player to customize their thrust and fuel amounts, it needs to be FPV , the player needs to be able to make and share courses (physical hoops, that you hit), there are no AI opponents, and no racing, but it is ok for time trial functionality, and it would be best if it were possible for courses to have programmable gate order, although merely having solid objects and requiring the players to probably make a video showing the correct order is acceptable. The best way I can imagine to encourage course creation is for a mode where the player can fly 6dof with or without physics, and select gate shapes from an inventory, place them so they appear around the avatar, while connected they can move and rotate the gate shapes, as well as resize them probably with a toggle, ,, then they can disconnect from the gate, it stays where it's left and is immovable, then the player can go to the center of any existing placed gate, and connect to it to move or remove it, etc. ,,, then,, in this mode, it would be cool if the player could go to first gate, and then fly through them in order hitting a next button to order them while in “ordering mode” after they have all been placed, and perhaps they can automatically be ordered as placed unless later changed. Then in game mode, if you pass through the first gate, it will highlite the next gate, etc. I have some concept art. Source: I can't dev no skills, but need a space game that doesn't exist (for me to play) ### INFINEON’S TLS715B0NA LDO REGULATOR USES “FLIP-CHIP” TECHNOLOGY TO DIFFUSE HEAT TLS715B0NA V50 – OPTIREG™ Linear Voltage Regulator is a low dropout linear voltage regulator for load current up to 150 mA. An input voltage of up to 40 V is regulated to VQ,nom = 5 V with ±2 % precision. The TLS715B0, with a typical quiescent current of 36 μA, is the ideal solution for systems requiring very low operating current, such as those permanently connected to the battery. Summary Of Features Wide Input Voltage Range from 4.0 V to 40 V Output Voltage 5 V Output Voltage Precision ±2% Output Current up to 150 mA Low Current Consumption of 36 μA Very Low Dropout Voltage of typically 180 mV at 100 mA Output Current Stable with Small Output Capacitor of 1 μF Enable Overtemperature Shutdown Output Current Limitation Wide Temperature Range from -40°C up to 150°C Green Product (RoHS compliant) AEC Qualified What Are Flip-Chips? With flip-chip technology, the ICs are installed upside down in the package. With the heated part of the IC facing the bottom of the package and being closer to the PCB, thermal inductance can be improved by a factor between 2 and 3. The higher power density enables a significantly smaller footprint than conventional package technologies. The footprint of Infineon’s new linear voltage regulator (TSNP-7-8 package, 2.0 mm x 2.0 mm) is more than 60 percent smaller than that of an established reference product (TSON-10 package, 3.3 mm x 3.3 mm) while the thermal resistance stays the same. This makes the new device particularly suitable for applications with very limited board space, such as radar and cameras. The OPTIREG TLS715B0NAV50 provides 5 V with a maximum output current capability of 150 mA. Read more: INFINEON’S TLS715B0NA LDO REGULATOR USES “FLIP-CHIP” TECHNOLOGY TO DIFFUSE HEAT ### IoT Set-up to Operate/control 220-240 Volt AC Bulb/Device; NodeMCU Amica + 5V Relay + MQTT + Arduino IDE + Web Browser (HTML + JavaScript/jQuery) What are we messing with? IoT (Internet of things) set-up to operate/control 220-240 Volt AC Bulb/Device NodeMCU Amica + 5V Relay + MQTT + Arduino IDE + Web Browser (HTML + JavaScript/jQuery) WARNING!! – THIS PROJECT INVOLVES WORKING WITH HIGH VOLTAGES THAT CAN CAUSE SERIOUS INJURY, DEATH, AND/OR SET YOUR HOUSE ON FIRE. PLEASE PROCEED WITH CAUTION, AND ALWAYS MAKE SURE CIRCUITS ARE UN-PLUGGED BEFORE WORKING ON THEM Step 1: Prerequisites Make sure to follow the instructions mentioned in the below link to proceed further. https://www.instructables.com/id/Quick-Start-Guide... Hardware: NodeMCU Amica Executes Arduino program(sketch) Has built-in ESP8266(WIFI module) which is the main reason to prefer NodeMCU over Arduino UNO board 5V Relay To switch any 240V device(bulb in our case) ON/OFF Miscellaneous Jumper wires to connect the circuit Breadboard 240V light bulb with lamp holder Electrical wires to connect bulb & relay to 240V AC power supply USB wire to upload program to NodeMCU board from computer Software: MQTT (MQ Telemetry Transport) Medium of communication between NodeMCU development board and client(web/mobile) application - publish/subscribe pattern You may use MQTTLens chrome plugin to test out the connection to broker and try subscribing & publishing (not necessary needed) Arduino IDE To develop a program which will subscribe to MQTT broker and fetch the latest message available and accordingly switch the 5V Relay Web Browser Takes the user input command and publish to MQTT broker Step 2: Wiring Diagram - Fritzing Although this fritzing project gives an insight to the required wiring setup, Below is a theoretical brief of the same: NodeMCU 3V3 >>Relay VCC [red jumper wire] NodeMCU D0 >>Relay IN [blue jumper wire] NodeMCU GND >>Relay GND [green jumper wire] Relay NO (Normally Open) >>Bulb +ve Relay COM (common terminal) >>240V AC Live Bulb -ve >>240V AC power Neutral Step 3: Software Setup HTML script: When you open this html in browser Script will connect to the MQTT broker(iot.eclipse.org) and subscribes to a topic(/lamp/status/) Once you see connection is successful, click on the switch button which will accordingly publish the message to the topic Arduino program(sketch): This is the program should be uploaded to NodeMCU board, it will do the following work Connects to our WIFI(to specified SSID & password) Then connects to the MQTT public broker(iot.eclipse.org) and subscribe to the topic(/lamp/status/) same as HTML script When HTML does a publish to the topic in MQTT broker, callback is executed which will digitalWrite HIGH/LOW to D0 GPIO pin in NodeMCU board which in turn triggers 5V Relay ON/OFF Step 4: Wrap Up https://youtu.be/wmlA-Unakks If you will just replace the bulb connections to any other electrical device like fan, computer, fridge etc., you should see it working for all of them. But make sure you got the bulb working in the first place. Thanks for reading.! NOTE: I was not able to find any one specific article that is doing all the stuff that is being discussed here, But I have followed/referred to many different articles (from wiring to source code) to finally get to this set up, unfortunately I have lost track of most of them. If you have found any posts which have similar content kindly let me know. I am happy to credit them here. P.S. To view images in detail with more clarity, please click on image which will open a popup of the same, and then click again which redirects to another page with a list of different image sizes where you can download better quality version of the image. Source: IoT Set-up to Operate/control 220-240 Volt AC Bulb/Device; NodeMCU Amica + 5V Relay + MQTT + Arduino IDE + Web Browser (HTML + JavaScript/jQuery) ### ISABELLENHÜTTE INTRODUCES NEW RANGE OF 1 – 6MΩ RESISTORS IN SMALLEST CHIP SIZES AVAILABLE ON THE MARKET Isabellenhütte has developed a new range of precision resistors in standard sizes with resistances ranging from 1 to 6 mOhm for applications that require small and low-ohmic shunts. In terms of their construction, the components are also less complex than the current ISA-PLAN®resistance families. And yet, they offer the same performance quality: very good long-term stability, a low temperature coefficient, and low thermoelectric voltages. With the FMx shunt family, Isabellenhütte has now plugged a gap in the standard size range for precision resistances. It has not been possible with the previous product ranges to realize the usual S (2512), P (2010) and K (1206) standard sizes in the resistance range from 5 to 1 mOhm. The impetus for this new development was provided by increasing demand for these resistances as well from a wide range of industries, including the automotive sector (for in-car chargers and assistance systems) and industry (for BLDC drive units), but also from the consumer market (e.g. for white goods). The Development Approach The large cross-sectional areas required for low-ohmic components have been achieved by a change in construction, and the production process has also been significantly simplified. A further milestone for the FMx shunts has been the development of the NOVENTIN® resistance alloy to make it possible to realize these low-ohmic values in defined sizes. Until now, the ISA-PLAN® resistances (SMx, VMx and CMx) have followed a sandwich construction, consisting of a substrate – usually copper – an adhesive and a resistance film made out of the ZERANIN® and MANGANIN® resistance alloys developed in-house by Isabellenhütte. The FM in the title of the new range stands for “Full Metal”, i.e. the components are fashioned in the corresponding thickness out of a full metal plate made of the resistance material in question and directly soldered onto the underside. These variant is very low-ohmic due to the large cross-sectional areas. 1 mOhm is realized with the ZERANIN® alloy, 2 mOhm with MANGANIN®, and, for the first time, NOVENTIN® is being used in ISA-PLAN® products for the resistance range from 3 to 6 mOhm. The new design has given rise to a particularly robust construction which also makes it possible to leave out some work stages and reduce costs. An important point for the automotive industry is this: The components form a soldering point meniscus to guarantee the possibility of automated inspection of the soldering points. Read more: ISABELLENHÜTTE INTRODUCES NEW RANGE OF 1 – 6MΩ RESISTORS IN SMALLEST CHIP SIZES AVAILABLE ON THE MARKET ### Internet/cloud Controlled Home Automation Using Esp8266 (aREST, MQTT, IoT) Step 1: COMPONENTS REQUIRED Only 4 components required - 1. ESP8266 NODEMCU or WEMOS D1 mini or any esp8266 wifi development board2. RELAY (5V or 6V)3. ULN2003 or UNL2003A (Relay driver IC)4. Jumpers (obviously or else solder it!!) The main structure of the project is that ESP8266 module will receive the signal from the MQTT server (i.e. arest.io) and forward the signal to the pin or processor. ULN2003 relay driver IC connected to the Nodemcu board pins. Output pins are connected to relay or any RGB light or servo motor etc. Step 2: Software I have used Arduino IDE as the programming software. If you are new to this Nodemcu or esp8266 development board then please refer to my previous instructable. To interface the Nodemcu or wemos board with Arduino IDE. In the Arduino IDE after setting up previous told things, go to SKETCH -> INCLUDE LIBRARY -> MANAGE LIBRARIES -> SEARCH FOR "arest" -> INSTALL THE LIBRARIES -> NOW SEARCH FOR PubSubClient -> INSTALL THE LIBRARY. Now its half done... almost there!!! Step 3: CIRCUIT DIAGRAM As the above circuit depicts everything still the input side of the ULN2003 relay driver IC is connected to the pins of the esp8266 and the output is connected to relay's coil leg as when esp8266 pin gets high the output pin of ULN2003 gets low thus giving the relay a 5V potential to work. Instead of sending the 0 or 1 to the relay esp8266 pins we can also send other values for servo but declaring servo.attach(pin) to rotate the servo to the certain value. Its easy but everyone need to innovate, read and think a little. Step 4: CODE I got the idea from "Marco Schwartz" project and modified it. He have use d the arest.io MQTT but we can also use adafruit.io. The main part of the program is : Unique 6digit arest id char* device_id = "unique_6_digit_id"; WiFi credentials const char* ssid = "ssid_name"; const char* password = "your_password"; Choose any unique id as you like but it should be unique not my or your name unless its a telugu name!! example of unique id: pf4h6q (just example) there can be many changes made in the code as according to the code, we have to mention the output after every reboot of the development board. Github code Code: https://github.com/abhrodeep/Arduino_projs Step 5: CONTROLLING 2 CRUCIAL steps: 1. declaring output pin2. toggling or sending information in that pin Declaring output pin: http://cloud.arest.io/pf486q/mode/5/o "pf486q" is the 6 digit unique code for arest.io "o" as output reply after executing this in any browser {"message":"Pin D2 set to output","id":"pf486q","name":"home cloud","hardware":"esp8266","connected":true} Toggling or sending information in the pin: https://cloud.arest.io/pf486q/digital/2/0 digital pin 2 is send a bit "0" or "1" as we wish https://cloud.arest.io/pf486q/digital/2/1 Declaring pin is necessary for once after a reboot/reset/shutdown otherwise for continuous run of esp8266 it's unnecessary. I have used an Android app HTTPRequest to create widget on home-screen with the necessary URL. As shown in my previous instructable. Please view that otherwise this will be lengthy. Step 6: CONCLUSION This is an IoT project for controlling home appliances, door, window, everything and can be customized according to individual's need. Its not locally controlled, this whole thing can be controlled from anywhere. EACH COMMAND OR URL WITH ARGUMENT NEEDS SOMETIME 1-2 second/s to execute as this is not a dedicated server... but to control your house from anywhere in this world is AWESOME!! ENJOY AND BE LAZY... BE ABSENTMINDED AND FORGET TO SWITCH OFF APPLIANCES BUT WITHOUT A HEADACHE!!!! Thanks to "arest.io" MQTT services and to "Marco Schwatrz"... if you like the instructable support and enjoy... and for any problem regarding this ask me. Source: Internet/cloud Controlled Home Automation Using Esp8266 (aREST, MQTT, IoT) ### INFINEON, FINGERPRINT CARDS JOIN FORCES TO DRIVE DEPLOYMENT OF BIOMETRIC CARDS Biometric payment cards with integrated fingerprint sensor make contactless payments more convenient, more secure and hygienic. The contactless card remains in the hands of the cardholder throughout the entire payment transaction, while eliminating the need for PIN entries or signatures to authorize even high-value payments. Infineon Technologies AG and Fingerprint Cards AB  have joined forces to enable mass deployment of this emerging solution. The world leaders for security controller in contactless payment and for fingerprint sensors incl. their related software aim to provide card makers with biometric semiconductor solutions which make integration particularly cost-efficient and scalable. The fingerprint information is stored on the card’s embedded secure element and not shared with any third party, thus protecting the user’s credentials. Fingerprints’ sensor modules, combined with Infineon’s 40 nm high-performance and energy-efficient security controllers based on the 32-bit ARM® SC300™ SecurCore®, fully support the requirements of biometric payment cards. They enable: Secured matching of the fingerprint image within the security controller where the private data is securely stored Excellent contactless performance despite the increased power required Convenient and reliable enrollment of sensitive biometric data in the card Read more: INFINEON, FINGERPRINT CARDS JOIN FORCES TO DRIVE DEPLOYMENT OF BIOMETRIC CARDS ### ISP2200 INDUCTIVE SENSOR – A GAME CHANGER FOR INDUSTRIAL MOTOR COMMUTATION High-accuracy motor commutation sensing, magnet free, total stray field immune for efficient and lightweight motor integration The new magnet-free IPS2200 inductive position sensor is featuring high accuracy and speed, total stray field immunity, and efficient motor integration in a thin and lightweight form factor. The IPS2200 is ideal for use as an absolute position sensor in a wide range of industrial, medical, and robot applications. The sensor allows customers to cost-effectively tailor sensor design for their applications and maximize the performance of the sensor’s accuracy. Key Features Industrial qualified, with stable operation in harsh environments and -40° to +125° C ambient temperatures Interface: Sin/cos single-ended or differential Voltage Supply: 3.3V ±10% or 5.0V ±10% Rotational Speed: Up to 250.000 rpm (electrical) Propagation delay: Programmable, <10µs Sin/cos gain mismatch and offset compensation Overvoltage, reverse polarity, short-circuit protected Digital programming interface: I²C or SPI 16-TSSOP package Compared to tradition resolvers the IPS2200 is up to 10x thinner and up to 100x lighter. Read more: ISP2200 INDUCTIVE SENSOR – A GAME CHANGER FOR INDUSTRIAL MOTOR COMMUTATION ### Arduino Step Sequencer Drum Machine Overview As enthusiasts of audio, we aimed to use our recent understanding of microcontrollers to create an exciting consumer gadget. Our project is a drum machine that functions as a step sequencer. The user can create a 16-step percussion sequence with various percussion instruments on six separate tracks. The user switches between various music tracks and instruments and changes the tempo using a user-friendly interface with pushbuttons and an LCD screen. Settings can be stored and retrieved from the microcontroller's EEPROM as well. High Level Design Rationale & Inspiration Wikipedia writes: " A drum machine is a musical device that replicates the sounds of drums and percussion instruments. They are utilized across a range of musical styles, not limited to solely electronic music. They are also frequently needed when session drummers are unavailable or unwanted. Nowadays, it is typical for drum machines to be solely software-based tools. Our device harkens back to a time 15-20 years ago when hardware drum machines were prevalent. Hardware drum machines of this kind were sizable, costly, and unwieldy instruments. Our device is a contemporary version of the traditional drum machine. It is affordable and has a user-friendly and straightforward interface. Our reason for starting this project was to develop an entertaining and captivating electronic music device that could bring pleasure to those who are not musically inclined. Our drum machine has practical applications as well as being enjoyable. It could be utilized to enhance a solo performance, or as a tool for creating electronic music. We were inspired by the Rhythm Ring, a Spring 2008 ECE 4760 final project by Brian Yung & Hanson Jiang. While we liked the sequencer idea of the Rhythm Ring, we wanted to improve the user interface to mimic an industry standard drum machine which offers a greater amount of control on the number of tracks and instruments to play back, the speed at which to run the sequencer, and the ability to save and load user generated patterns. While searching online, we found a more sophisticated drum machine that we really liked named the Beat707 which is Arduino-based. We based our user interface on their pushbutton and sequencer LED design which was more in sync with industry standard drum machines. Concept Our goal was to develop a drum machine inspired by the older hardware step sequencer drum machines from 15-20 years ago which are still in use today. The programming interface consists of a line or square of 16 pushbuttons, each corresponding to a different step in the musical bar. The sounds are arranged by the user through pushing the buttons, and the sequencer plays back the pattern as it cycles through the 16 steps. Our design features only a single row of pushbuttons. The user selects one out of six available tracks (voices) to program at a time. LEDs positioned above every step show which steps are presently chosen. The LEDs show the sequencer's progress by lighting up at the current step if it's not selected in the pattern, and turning off if it is (XOR with the pattern). An LCD control panel with pushbuttons for up/down/left/right enables users to modify the current track, pick instruments for each track, set the sequencer's tempo, and store/retrieve preset settings. There are a variety of 20 instruments to choose from, ranging from traditional percussion like bass drums and snare drums to more modern electronic sounds. The speed can vary from 60 to 220 beats per minute (BPM). The MCU's EEPROM can store and preserve up to 50 preset configurations, allowing the user to save them even when the power is off. Three extra pushbuttons enable the user to control the sequencer, clear the current track, or reset the entire setup back to the default. Our device plays back digitally sampled sounds at 22,068 Hz stored in the MCU's memory. Audio playback is through a digital-to-analog converter (DAC) and fed to a 3.5mm mono audio jack that is designed to be connected to high-impedance computer speakers. Logical Structure From a logical standpoint, the MCU has two main responsibilities: playing audio and processing the user interface. Just like previously stated, audio playback is achieved by having the MCU send audio samples to a DAC. The SPI serves as the connection between them, with ISR outputting samples on the MCU to ensure precise output at 22,068 Hz. User interface processing is a significant task and requires the majority of the hardware and software. In order to reduce the number of I/O pins required, the 23 pushbuttons and 16 LEDs are connected to shift registers and read/driven serially by the MCU. Note there is no hardware connection between the pushbuttons and LEDs---pushbutton input is processed and output to LEDs all in software. Hardware/Software Tradeoffs Throughout the project's planning phase, we finalized numerous hardware-related choices at a high level. We chose to utilize a hardware digital to analog convertor (DAC) instead of software pulse width modulation (PWM) for audio sample playback. Our main reason for doing this was to streamline the software and we also thought it would enhance the audio quality overall. Another choice we needed to consider was the dimensions of our groups of LEDs and pushbuttons. At first, we thought about implementing a setup with 16 LEDs and pushbuttons in a 16x4 array (one row per track) and another row of 16 LEDs to display the sequencer's progress. We soon understood that this would lead to an excessive amount of wires and connections, making the hardware needlessly complicated. Instead, we opted to simplify the hardware by utilizing only one row of 16 LEDs and pushbuttons. Software manages the track switching process. We combined the sequencer LEDs and pushbuttons LEDs into a single row of LEDs. The sequencer XORs with the pattern as it moves forward. This alteration allowed us to surpass the hardware restriction of four tracks. A modification in the software may boost the quantity of tracks. We chose to incorporate six tracks in our final device, whereas our initial idea only had four. We traded hardware for software in the design of the control mechanism. At the start, our idea was to utilize specific pushbuttons for switching tracks and choosing instruments, as well as a potentiometer for modifying the tempo. We acknowledged that this could result in a crowded user interface and pose challenges in implementing advanced control functions such as saving/loading presets. Instead of that, we created an LCD screen that allows users to see the track, instrument, and tempo currently selected. The LCD features a menu choice for saving and loading presets. The display is controlled by the user through the use of the up/down/left/right control buttons. All the data is handled within software through a state machine. The outcome is a sophisticated and user-friendly user interface. Standards We utilized the SPI standard for communication between our MCU and DAC. Another important standard related to our design is the IEC 825-1 "Eye Safety Classification of Some Consumer Products" from the International Electromechanical Commission. This standard establishes guidelines for LED and laser brightness to ensure the safety of users' eyes against harmful levels. We adhered to this standard by avoiding the use of extremely bright LEDs and carefully considering the spacing between LEDs in accordance with this standard. Existing Patents, Trademarks, & Copyrights By carrying out a partial patent search on the Google Patent search platform, we discovered numerous patents related to music sequencers and rhythm synthesizers. Even though these designs both employ the concept of combining pre-recorded sounds, they differ in their user interface and approach to creating patterns using pushbuttons with control over each individual step. Nonetheless, as we have taken inspiration from commercial synthesizers for our drum machine and synthesizer concept, it's likely that a patent exists for this type of device, even if it's been more than twenty years since it was filed and may have expired. We based much of our design on the Beat707 MIDI drum machine produced by Rugged Circuits. Although we did not use any of their code, we were inspired by the way they implemented the drum machine and a sequencer. The Beat707 is still under open-source development and not yet commercially available; there has been no formal patent filed. We understand that because our device is not completely new, it has no potential for patenting or publishing. Our goal in developing this device was not to make money, but to utilize our expertise in microcontroller programming to create an engaging educational tool. We have no intention of patenting our device or violating any existing patents held by others. We do not think we are violating anyone's trademarks or copyrights with the name 'Step Sequencer Drum Machine' since a quick Google search showed no results for this specific title. Hardware Design Due to the complex user interface, this project requires a substantial quantity of hardware. Due to this, we divided the hardware design into two stages: a prototype phase and the final assembly. While prototyping, we built the whole device using solderless breadboards. Engaging in a prototyping phase enabled us to identify optimal wiring schemes and adapt our design as needed for the software. It also made it easy to access different nodes in our circuit while debugging. We utilized Professor Bruce Land's ECE 4760 custom PCB target board to accommodate the Mega644 MCU. It includes the microcontroller as well as all required power and auxiliary circuitry. We supply the target board with a 9V battery and utilize the MCU's 5V Vcc to power our remaining circuitry. Our device includes the pushbutton circuit, the LED circuit, and the DAC circuit in addition to the target board. Pushbutton Circuit As previously mentioned, our device includes 23 pushbuttons. Rather than connecting each of the 23 pushbuttons to separate pins on the Mega644, which would have used up too many pins needed for our other components, we attach them to three linked 74HC165 8-bit parallel-in-serial-out (PISO) shift registers. Each 74HC165 module consists of 8 parallel inputs (D0-D7). These pins are connected to Vcc through a 10 kOhm resistor in order to restrict the current going to the pin, while the pushbutton is linked in a parallel branch to ground. We picked pushbuttons without any bouncing. When the pushbutton is pressed, the input generates a logic low pulse as the outcome. When a logic low pulse is applied to the parallel load pin (1), the 74HC165 will transfer the input pin values into its internal register. When the clock pin (2) triggers, the contents of the register are shifted out serially on the output pin (9). The Mega644 gives signals to load data in parallel and control the clock, while taking in serial output (Q7) as input. For more detail: Arduino Step Sequencer Drum Machine ### IT-M3400 BIDIRECTIONAL POWER SUPPLY – WORLD’S SMALLEST PROGRAMMABLE BIDIRECTIONAL DC POWER SUPPLY Released by ITECH in March 2020, the brand new series IT-M3400 Bidirectional DC Power Supply comes with cutting-edge technology which is integrated with engineers’ innovative inspiration. It integrates the features of a bidirectional power supply and a regenerative load. Meanwhile, it is also eco-friendly, helps to eliminate the heat dissipation to a minimum level and save your cost as well. IT-M3400 can fully contribute to environmental protection by reducing CO2 emissions. The compact ITECH M series, ½ wide 19″rack module of 1U high, are available in four different voltage ranges (0-60V, 150V, 300V and 600V) at power ratings of 200W, 400W and 800W. The full range of models supports multiple units stacking and parallel connection by easy design “legs” plug-in. Fit with rack mount kit to achieve the perfect use. SOURCING & SINKING The most important feature of the ITECH IT-M3400 Ultra Compact Bi-directional DC power supplies is the integration of the functionality of a bi-directional power supply and a regenerative electronic load. The unit automatically switches between power supply and load at lightning speed according to the circumstances, without overshooting current and voltage. Its regenerative character also makes the IT-3400 an enormously efficient power supply. The absorbed DC power is converted to AC and fed back into the grid with an efficiency of 90%. As a result, considerable savings can be made on air conditioning and electricity costs. SIMULATE AND TEST BATTERY CELLS With the standard software it is possible to easily charge and discharge the battery. With the extensive ITS5300 software you can also perform extensive drive cycle testing, life cycle testing, IR testing etc. In cooperation with the extensive BSS2000 battery simulation software, the IT-M3400 power supply is ideal for simulating battery modules. Specific properties of the battery can be programmed and thus the electronics around the battery can be tested. The specific battery conditions are then very easy to simulate. Read more: IT-M3400 BIDIRECTIONAL POWER SUPPLY – WORLD’S SMALLEST PROGRAMMABLE BIDIRECTIONAL DC POWER SUPPLY ### IWAVE I.MX8M MINI BOARD WITH NXP EIQ ML SOFTWARE ENABLES LOW COST FACIAL RECOGNITION SYSTEM Have you recently been sceptical of using a contact-based access system in your office or a public place? This trait is a major concern in most places for a valid reason. An access surface in a public place is used by many individuals, which makes it a potential source for contracting the deadly Covid 19 virus. Taking this into account, iWave Systems, a leading embedded solutions provider, has successfully demonstrated an alternative solution using facial recognition technology. The solution helps customers with a zero-contact access application by using individuals’ faces to authorize access to a commercial/industrial space, home/office, transportation, banking, and Government sites. Facial Recognition: Facial Recognition is the process of recognizing the identity of a person by using their facial features against a previously stored database. It is a technology that uniquely identifies or verifies a person by comparing and analysing patterns based on the person’s facial details. The face capture process transforms the analogy information into a set of digital information, while the face match process verifies the information with a database of known faces to find a match. iWave Solution : The facial recognition demo is running on iWave’s development board based on the NXP® i.MX8M Mini applications processor. The power-efficient edge computing platform with a SODIMM form factor is coupled with a MIPI Camera module (1080p@30 fps) , MIPI Display (1920 x1080 60fps), and multiple connectivity options. Through the support of key features such as camera, display, connectivity, and the NXP eIQ machine learning software, the i.MX 8M Mini board provides an intelligent platform for the development of facial recognition systems. Read more: IWAVE I.MX8M MINI BOARD WITH NXP EIQ ML SOFTWARE ENABLES LOW COST FACIAL RECOGNITION SYSTEM ### KENDRYTE’S POPULAR K210 RISC-V SOC WITH NEURAL PROCESSING UNIT FINDS A NEW HOME IN SIPEED MAIX NANO M1N It’s becoming increasingly common for single-board computers to ship with Kendryte’s popular K210, and Sipeed’s latest MAIX Nano M1n with PCIe M.2 and USB Type-C form factor is not left behind as it ships with the K210 embedded along with a 128MB of SPI flash and a 24-pin edge connector. The K210 AI chip includes a powerful CPU that is based on a dual-core 64-bit RISC-V processor, with up to 400 MHz frequency and a custom convolutional NPU whose TOPs parameter is significant to the chip’s AI performance. It is designed to accelerate edge neural networking workloads with an accelerator that has its own memory alongside 6 MB RAM for the dual-core CPU and an additional 2 MB for the NPU coprocessors. It also has a good ability to realize Face detection, FFT spectrogram, and Object recognition applications. Based on K210, the M1n which is compatible with deep learning frameworks can be programmed using the Arduino IDE, Platform.io, or MicroPython. For those looking to do more with its part, the MAIX Nano M1n includes an M.2 interface by which users can connect the Type-C downloading board that helps to download the code to the module. The downloading board has pins of 2.54 mm that are directly connected to the pins from the K210 chip for users to add more DIY functions. Some features of the Sipeed MAIX Nano M1n include: Onboard camera DVP carrier: 224pin 0.5mm pitch FPC carrier, DVD – 1.3, AVDD – 3.0V Debugging support: High-speed JTAG and UART interface for debugging High-performance microphone array processor Supports a valid voice stream output Through-hole headers for 16 GPIO pins plus LCD display connectivity Supports 12-bit, 16-bit, 24-bit, 32-bit precision input audio signal and an audio input up to 192K sample rate. Supports multi-channel raw signal direct output Has 16-bit internal audio signal processing accuracy More than 300mA external current supply-demand @ 5V Temperature range: -30C to 85C Read more: KENDRYTE’S POPULAR K210 RISC-V SOC WITH NEURAL PROCESSING UNIT FINDS A NEW HOME IN SIPEED MAIX NANO M1N ### KONTRON 3.5 INCH SINGLE BOARD COMPUTER 3.5”-SBC-WLU WITH LATEST INTEL® PROCESSOR TECHNOLOGY FOR DEMANDING IOT APPLICATIONS Higher WLAN speed thanks to Intel® Integrated Connectivity (CNVi) – available with 8th Gen. Intel® Core™ U-series or Celeron® processors Kontron, a leading global provider of IoT/Embedded Computing Technology (ECT), introduces its 3.5″ SBC with the latest processor technology from Intel®. Due to the Triple Display Support and the support of numerous new interfaces, the updated embedded board is ideally suited for applications that place high demands on graphics and require fast WLAN. In addition, the low power consumption enables fanless designs. This opens up new options for IoT applications such as retail, banking, hospitality, education, industrial control and automation. The new version provides up to 12 times higher WLAN speed than conventional devices, depending on the model, thanks to the Intel® Wireless Access Point, which is integrated in the M.2 Key E slot via the new Intel® CNVi interface. Further M.2 slots can be used to extend SSD memory via Key B and Key M, or to extend WWAN (via Key B, i.e. 3G, 4G or future 5G). Furthermore, the upgraded 3.5-inch board offers interfaces of the latest generation for fast data transfer between storage and mass storage as well as peripheral devices, which include NVMe SSD, DDR4, USB 3.1 and SATA III. In addition to increased graphics performance, the board supports numerous interfaces, including two fast DDR4 SO-DIMM memory sockets for up to 64 GBytes, a high-speed SATA 3.0 socket and M.2 expansion slots. It offers advanced connectivity through two Gigabit Ethernet interfaces, four USB 3.1 (front panel), four USB 2.0 (via headers), two RS232/422/485 for USB and Serial Device Connection, as well as 8-bit DIO for device and signal control. The Realtek ALC662 audio codec offers audio via 2 speaker out as well as one line-in, line-out and mic-in via headers. Read more: KONTRON 3.5 INCH SINGLE BOARD COMPUTER 3.5”-SBC-WLU WITH LATEST INTEL® PROCESSOR TECHNOLOGY FOR DEMANDING IOT APPLICATIONS ### Arduino Row-column Scanning to control an 8x8 LED Matrix Code LED displays are commonly packaged as arrays of LEDs organized in rows with shared positive terminals and columns with shared negative terminals, or vice versa. Here is a standard illustration, along with its diagram: These exhibits can be very useful. To control a matrix, you connect its rows and columns to your microcontroller. The columns are connected to the LEDs' negative terminals (see Figure 1), so a column needs to be in a high state for any LED in that column to illuminate. The LEDs are linked to the positive terminals of the rows, so a low current in a row is necessary for a single LED to illuminate. If the row and column have matching high or low levels, the LED will not be activated and will stay unlit. Circuit The 16 pins of the matrix are hooked up to 16 pins of the Arduino. Four of the analog pins are used as digital inputs 16 through 19. The order of the pins is assigned in two arrays in the code. Two potentiometers, connected to analog pins 0 and 1, control the movement of a lit LED in the matrix. image developed using Fritzing. For more circuit examples, see the Fritzing project page Schematic: Code /* Row-Column Scanning an 8x8 LED matrix with X-Y input This example controls an 8x8 LED matrix using two analog inputs created 27 May 2009 modified 30 Aug 2011 by Tom Igoe This example works for the Lumex  LDM-24488NI Matrix. See http://sigma.octopart.com/140413/datasheet/Lumex-LDM-24488NI.pdf for the pin connections For other LED cathode column matrixes, you should only need to change the pin numbers in the row[] and column[] arrays rows are the anodes cols are the cathodes --------- Pin numbers: Matrix: * Digital pins 2 through 13, * analog pins 2 through 5 used as digital 16 through 19 Potentiometers: * center pins are attached to analog pins 0 and 1, respectively * side pins attached to +5V and ground, respectively. This example code is in the public domain. http://www.arduino.cc/en/Tutorial/RowColumnScanning see also http://www.tigoe.net/pcomp/code/category/arduinowiring/514 for more */ Major Components in Project Hardware Required Arduino Board (1) 8 x 8 LED Matrix (2) potentiometers hook-up wire breadboard For more detail: Arduino Row-columm Scanning to control an 8x8 LED Matrix Code ### KONTRON PRESENTS D3713-V/R MITX MOTHERBOARD FOR AMD RYZEN™ EMBEDDED V1000/R1000 PROCESSOR Ideal for demanding graphics applications in professional casino gaming systems, medical displays, thin clients and industrial PCs through AMD Radeon™ Vega Graphics Kontron, a leading global provider of IoT/Embedded Computing Technology (ECT), will present the D3713-V/R mITX industrial motherboard based on the AMD Ryzen™ Embedded V1000 and R1000 line at this year’s embedded world tradeshow. It features the SoC integrated AMD Radeon™ Vega GPU with particularly brilliant graphics and supports up to four independent displays in 4K resolution via DisplayPorts, one Embedded DisplayPort and a dual-channel LVDS (24bit). With five different AMD processors, the board can be adapted for various graphics applications, e.g. for kiosk, infotainment, digital signage, professional casino gaming systems, as well as medical displays, thin clients and industrial PCs. The Kontron D3713-V/R mITX motherboard is “Designed by Fujitsu” and manufactured in Germany. This guarantees short delivery times, highest manufacturing quality, competent technical support directly from Augsburg, as well as long-term repair service. Kontron also offers a “kitting” service, where motherboards are assembled ‘ex factory’ with the requested processors, memory latches and even an individual BIOS. For the D3713-V/R mITX motherboard, the Kontron SMARTCASE™ S711 is also currently in preparation. It offers a customer-specific configured and certified system solution consisting of the board, CPU, memory, expansion cards, BIOS, cooling and housing. The D3713-V/R mITX motherboard optionally offers different processors of the AMD Ryzen™ Embedded V1000 and R1000 line: AMD Embedded SoC V1202B, V1605B, V1807B, R1305G or R1606G. Due to the Intel® i210LM Ethernet Controller with 10/100/1000 MBit/s the board supports protocols such as EtherCAT or TSN. Furthermore it offers 2x SO DIMM sockets for up to 32GB memory. The use of a data carrier or extensions is possible via 2x Serial ATA III 600 interfaces (up to 6GBit/s), a Mini PCIe (halfsize/fullsize), a PCI Express® x4 Gen3, an M.2 PCIe x2 Key-M and an M.2 PCIe x4 Key B. It also offers various interfaces, such as USB 3.1 Gen1/Gen2, USB 2.0, serial I/O, GPIO and High Definition Audio Input/Output via the Realtek ALC256 chip codec. The board contains an AMI Aptio 5.x (UEFI) BIOS, a HW Watchdog, a BIOS integrated HW Diagnostic Tool, AMD integrated TPM V2.0 onboard, and a socket for an optional TPM module. Read more: KONTRON PRESENTS D3713-V/R MITX MOTHERBOARD FOR AMD RYZEN™ EMBEDDED V1000/R1000 PROCESSOR ### KONTRON SINGLE BOARD COMPUTER IN 3.5-INCH FORMAT FOR AMD RYZEN™ EMBEDDED V1000/R1000 PROCESSOR Kontron, a leading global provider of IoT/Embedded Computing Technology (ECT), has introduced a new Single Board Computer (SBC) in a 3.5-inch form factor. The 3.5″-SBC-VR1000 is based on the AMD Ryzen™ Embedded V1000 and R1000 processor series and is optionally available with the SoC V1605B, V1202B, R1606G or R1505G. With superior 4K playback and a fanless, low-power design it is an energy-efficient, compact solution for highly computationally-intensive edge computing and graphics applications such as digital signage, digital casino gaming, kiosk, retail, banking, education, medical imaging and edge computers in industrial control and automation.   The new SBC from Kontron supports 4K ultra-definition video output, including AMD Radeon™ Vega GPU. Thanks to one LVDS, one DP and one HDMI 2.0 connector each, up to three monitors can be controlled independently. Latest generation interfaces provide faster data transfer rates between memory, data storage and peripherals. The V1000 models feature four, and the R1000 models two rear-mounted USB 3.1 ports. These are supplemented by four, respectively six USB 2.0 ports. The audio interfaces include two speaker out, one line-in, one line-out and one microphone input.. Highlights 1x LVDS, 1x DP, 1x HDMI 2.0 for triple display support 2x GbE LAN for Ethernet Up to 4x USB 3.1, up to 6x USB 2.0, 2x RS232/422/485, 2x RS232 for peripherals 8-bit DIO for device / signal control 2x SATA 3.0, 1x mPCIe, 1x M.2 Key M for storage & expansion The two DDR4 2400 SO-DIMM sockets offer up to 32 GB of RAM. In addition to two RJ-45 LAN ports (Intel® I210-AT, Intel® I211-AT), the 3.5″ SBC-VR1000 is equipped with a half-size mini PCIe slot. Further equipment includes two SATA III connectors and an M.2 socket (Key M), on which a NVMe SSD can be installed. The latter features lower latency, a compact form factor and high reliability. Read more: KONTRON SINGLE BOARD COMPUTER IN 3.5-INCH FORMAT FOR AMD RYZEN™ EMBEDDED V1000/R1000 PROCESSOR ### KRYPTOR FGPA IS A HARDWARE SECURITY MODULE THAT ADDS COMPLEX OPEN-SOURCE ENCRYPTION Designed for processors that support serial interfaces, the one-chip module offers all the functionalities of a dedicated HSM within a single compact MAX10 FPGA chip. The new release from Skudo is a professional FGPA development board built as an encryption solution to project boards like Raspberry Pi, Arduino, and BeagleBone. It is a plug and play Hardware Security Module that provides a compact pre-configured FPGA chip with functionalities for encrypting data, and can easily be used by any maker board. “Any controller board (e.g. Raspberry Pi, Arduino etc.) can be connected to the Kryptor PCB via SPI, 12C and UART using a simple data protocol (free Linux API software libraries are also provided) enabling access to the functionalities of the Hardware Security Module (symmetric encryption, asymmetric encryption, hashing, keys generation/storing/management and a True Random Number Generator). Any maker is able to access those functionalities and build complex solutions based on them”. Features Of The HSM Include: FPGA: Intel/Altera MAX10 8K LE (10M08DAF256C8G) Dimensions: 23×35 mm Internal flash: 1376 Kb Internal RAM: 378 Kb total GPIO: 250 available from the FPGA (fewer accessible via board) Operating frequency: 100 MHz Control: API / encrypted command line interface (CLI) Platform compatibility: Linux, RPi, Arduino, etc. Duplication protection: Anti-piracy duplication protection via chip ID Encryption speed: symmetric encryption speed up to 108 Mbps on a single core (SPI link speed capped at 2 Mbps) Read more: KRYPTOR FGPA IS A HARDWARE SECURITY MODULE THAT ADDS COMPLEX OPEN-SOURCE ENCRYPTION ### L6983 38 V STEP-DOWN CONVERTER IS A SYNCHRONOUS MONOLITHIC STEP-DOWN REGULATOR STMicroelectronics’ step-down converter is an easy to use synchronous monolithic step-down regulator STMicroelectronics L6983 Synchronous Step-Down Converter is an easy to use monolithic step-down regulator capable of delivering up to 3A DC to the load. The wide input voltage range makes the device suitable for a broad range of applications. The L6983 is based on a peak current mode architecture. The device is packaged in a QFN16 3×3 with internal compensation, thus minimizing design complexity and size. The L6983 is available both in low consumption mode (LCM) and low noise mode (LNM) versions. LCM maximizes the efficiency at light-load with controlled output voltage ripple so the device is suitable for battery-powered applications. LNM makes the switching frequency constant and minimizes the output voltage ripple for light load operations, meeting the specification for low noise-sensitive applications. The L6983 allows the switching frequency to be selected in the 200kHz to 2.2MHz range with an optional spread spectrum for improved EMC. The EN pin provides an enable/disable function. The typical shutdown current is 2µA when disabled. As soon as the EN pin is pulled up, the device is enabled, and the internal 1.3ms soft-start takes place. The L6983 features Power Good open collector that monitors the FB voltage. Pulse-by-pulse current sensing on both power elements implements an effective constant current protection, and thermal shutdown prevents thermal run-away. Features Two different versions: LCM for high efficiency at light loads and LNM for noise-sensitive applications 200 kHz to 2.2 MHz programmable switching frequency; stable with low-ESR capacitors Operating input voltage: 3.5 V to 38 V Output voltage: 0.85 V to VIN 3 ADC output current Operating quiescent current: 17 μA 2 μA shutdown current Optional spread spectrum for improved EMC Applications Designed for 24 V buses industrial power systems 24 V battery-powered equipment Decentralized intelligent nodes Sensors and always-on applications Read more: L6983 38 V STEP-DOWN CONVERTER IS A SYNCHRONOUS MONOLITHIC STEP-DOWN REGULATOR ### L6983 – 38V 3A SYNCHRONOUS STEP-DOWN CONVERTER WITH 17UA QUIESCENT CURRENT The L6983 is an easy to use synchronous monolithic step-down regulator capable of delivering up to 3 A DC to the load. The wide input voltage range makes the device suitable for a broad range of applications. The L6983 is based on a peak current mode architecture and is packaged in a QFN16 3×3 with internal compensation thus minimizing design complexity and size. The L6983 is available both in low consumption mode (LCM) and low noise mode (LNM) versions. LCM maximizes the efficiency at light-load with controlled output voltage ripple so the device is suitable for battery-powered applications. LNM makes the switching frequency constant and minimizes the output voltage ripple for light load operations, meeting the specification for low noise sensitive applications. The L6983 allows the switching frequency to be selected in the 200 Hz – 2.2 MHz range with optional spread spectrum for improved EMC. Key Features 3.5 V to 38 V operating input voltage Output voltage from 0.85 V to VIN 3.3 V and 5 V fixed output voltage versions 3 A DC output current 17 μA operating quiescent current Internal compensation network Two different versions: LCM for high efficiency at light loads and LNM for noise sensitive applications 2 μA shutdown current Internal soft-start Enable Overvoltage protection Output voltage sequencing Thermal protection 200 kHz to 2.2 MHz programmable switching frequency. Stable with low ESR capacitor Optional spread spectrum for improved EMC Power Good Synchronization to external clock for LNM devices QFN16 package Read more: L6983 – 38V 3A SYNCHRONOUS STEP-DOWN CONVERTER WITH 17UA QUIESCENT CURRENT ### LED DRIVER IC BCR431U GIVES MORE FREEDOM IN DESIGNING LOW CURRENT LED STRIPS Infineon Technologies AG  releases the BCR431U. The constant current linear LED driver IC provides low-voltage drop performance for regulating LED current. It is the second device released in the new generation BCR family with low voltage drop focusing on low current designs of up to 37 mA. Typical applications for the new BCR431U include LED strips, channel letters, architectural LED lighting, LED displays, as well as emergency, retail, and appliance lighting. The voltage drop at the integrated driver IC can go down to 105 mV at 15 mA. This is unmatched in the industry and provides far more flexibility in lighting applications. It improves the overall efficiency and provides the voltage headroom required to compensate for the LED forward voltage tolerances and variances in the supply voltage. The BRCU431U allows either to add additional LEDs to lighting designs, for example, seven instead of six LEDs in series driven by one IC. Or it can be used to increase the overall length of a LED strip design from, for example, 5 to 7 m. Overall, longer LED strips mean fewer feeding points and less efforts in installation. The LED current is easily adjustable via a high ohmic resistor on a dedicated pin with an IC supply voltage ranging between 6 V and 42 V. For safe and reliable operation and to extend the overall LED system’s lifetime, a smart over-temperature controlling circuit keeps the current constant even at rising temperature.  Read more: LED DRIVER IC BCR431U GIVES MORE FREEDOM IN DESIGNING LOW CURRENT LED STRIPS ### LINUX-POWERED DEVELOPMENT KIT IS THE FIRST TO HAVE AN AI-ENABLED CORTEX-A7 CAMERA SOC Sochip partners with Allwinner to launch a new V831 development board that showcases an Allwinner V831 IP Camera SoC, the very first to include an AI chip.  Allwinner has released quite a number of camera processors in the past, the V3, V316, S3, and many more, but none of them ever came with a built-in NPU aka AI accelerator. Things, however, have taken a new turn now as an Allwinner V831 AI full HD Camera SoC with NPU aka AI accelerator is used to power Sochip’s linux-driven V831 development board. Allwinner’s high performance, low powered IP camera SoC integrates single-core ARM Cortex-A7 topping out at 800MHz frequency and supports H.265 video encoding of multiple streams up to 1080p @ 330fps. The SoC also features a 0.2 TOPS NPU for facial recognition and detection, Electronic image stabilization engine support, the latest generation of ISP image processor that supports up to 2688 x 2688 pixels, wide-angle distortion correction, PTZ calibration, SmartColor support for excellent display and other image correction algorithms that make it easy to achieve professional image effects. It is further equipped with 20-bit audio codec for audio input and output, crypto engine, 64MB DDR2, external eMMC 5.0 interface, NOR and SPI NAND flash. Other features include: 2-lane MIPI-CSI interface RGB output up to 320 x 240 @ 60fps 10/100 Mbps Ethernet port TDM interface for connecting to external audio codec Up to 54 GPIOs USB 2.0 OTG 4x UART 12S SPI 1x RTC Dimension: 9 x 9 mm Supply voltage: Core: 0.9V, I/O: 3.3V Read more: LINUX-POWERED DEVELOPMENT KIT IS THE FIRST TO HAVE AN AI-ENABLED CORTEX-A7 CAMERA SOC ### LIQUID FLOW SENSORS OFFER HIGH-ACCURACY, LOW-MAINTENANCE REPLACEMENT FOR MECHANICAL TURBINE DEVICES Cost-Effective MEMS Sensors Deliver Increased Performance and Reliability, Even in Unstable Pulsatile Flow and Low-Flow Conditions Posifa Technologies introduced its new PLF2000 series of liquid flow sensors. Designed to replace mechanical turbine flow sensors, the cost-effective devices deliver increased accuracy and reliability, even in unstable pulsatile flow and low-flow conditions. Factory calibrated for water to a minimum 5 % and typical 3 % accuracy for volume calculation, the PLF2000 series’ dual digital I²C and voltage output provides high performance, flexibility, and scalability in a compact package. The PLF2000 series features Posifa’s third-generation thermal flow die, which uses a pair of thermopiles to detect changes in temperature gradient caused by mass flow. The result is an excellent signal-to-noise ratio and repeatability of 0.5 % F.S. The solid-state thermal isolation structure on the sensor die eliminates the need for a surface cavity or fragile membrane used in competing technologies, allowing it to be placed directly in the liquid flow path with minimal packaging for higher sensitivity. In addition, the sensor die does not obstruct the flow path, allowing for minimal flow resistance and making it possible to circulate liquid via gravity, a boiler, or a low-power pump. With no moving parts, the sensor does not get stuck, suffer mechanical breakdowns, or require disassembly for cleaning and maintenance. Key Specifications And Benefits: Dual digital I2C and analog output Compact, robust package Solid-state sensing core – no moving parts Feature Posifa’s third-generation thermal flow die Measure flow rates up to 0.7 l/min (PLF2105) and 10 l/min (PLF2135) Extremely fast response times of 5 ms typical Excellent signal-to-noise ratio and repeatability of 0.5 % F.S. Operating temperature range of +5 °C to +75 °C Comply with NSF/ANSI 61: Drinking Water System Components — Health Effects Target Applications: Coffee and espresso machines Water dispensers, purifiers, and filtration systems Beverage vending machines Detergent vending machines Cleaning chemical mixing systems Liquid cooling systems Read more: LIQUID FLOW SENSORS OFFER HIGH-ACCURACY, LOW-MAINTENANCE REPLACEMENT FOR MECHANICAL TURBINE DEVICES ### LT8228 – 100 V BIDIRECTIONAL BUCK OR BOOST DC/DC CONTROLLERS WITH PROTECTION Analog Devices’ controllers enable full functional safety if one of the batteries fail by forcing the other battery to take over Analog Devices’ LT8228 100 V bidirectional buck or boost DC/DC controllers provide sustainable power in hybrid and electric vehicle (EV) critical non-drive train subsystems by controlling 48 V and 12 V batteries with bidirectional capabilities allowing for power source redundancy. These controllers also enable full functional safety if one of the batteries fails by forcing the other battery to take over allowing the vehicle to function properly, avoiding potential catastrophic results. Features Automatically determines the direction of power flow or the direction can be externally controlled Provides a step-down output voltage when in buck mode or a step-up output voltage when in boost mode Input and output voltage can be set as high as 100 V Two error amplifiers, one for boost mode and the other for buck mode, with separate compensation pins 38-lead TSSOP package The LT8228 automatically determines the direction of power flow, or the direction can be externally controlled. Input and output protection MOSFETs protect against negative voltages, control inrush currents, and provide isolation between terminals under fault conditions such as shorts in the switching MOSFETs. In step-down mode, protection MOSFETs prevent reverse current. In step-up mode, the same MOSFETs regulate the output inrush current and use an adjustable timer circuit breaker to protect themselves. Simplified Schematic The LT8228 implements bidirectional input and output current limiting as well as independent current monitoring. Masterless, fault-tolerant current-sharing allows LT8228 chips to work in parallel and to be added or subtracted while maintaining current sharing accuracy. Internal and external fault diagnostics and reporting are available via separate pins (FAULT and REPORT). Each LT8228 regulates to the average output current, thus eliminating the need for a master controller. When an individual LT8228 is disabled or in a fault condition, it stops contributing to the average bus, making the current sharing scheme fault-tolerant. The LT8228 sits in a 38-lead TSSOP package. The LT8228 controller provides a step-down output voltage when in buck mode or a step-up output voltage when in boost mode. The input and output voltage can be set as high as 100 V. In applications such as battery backup systems, the bidirectional feature allows the battery to be charged from either a higher or lower voltage supply. When the supply is unavailable, the battery boosts or bucks power back to the supply. Read more: LT8228 – 100 V BIDIRECTIONAL BUCK OR BOOST DC/DC CONTROLLERS WITH PROTECTION ### LT8613 - 42V, 6A Synchronous Step-Down Regulator with Current Sense and 3μA Quiescent Current Features Rail-to-Rail Current Sense Amplifier with Monitor Wide Input Voltage Range: 3.4V to 42V Ultralow Quiescent Current Burst Mode® Operation: 3μA IQ Regulating 12VIN to 3.3VOUT Output Ripple <10mVP-P High Efficiency Synchronous Operation: 95% Efficiency at 3A, 5VOUT from 12VIN 94% Efficiency at 3A, 3.3VOUT from 12VIN Fast Minimum Switch-On Time: 40ns Low Dropout Under All Conditions: 250mV at 3A Allows Use Of Small Inductors Low EMI Adjustable and Synchronizable: 200kHz to 2.2MHz Current Mode Operation Accurate 1V Enable Pin Threshold Internal Compensation Output Soft-Start and Tracking Small Thermally Enhanced 3mm × 6mm 28-Lead QFN Package Typical Application Description The LT®8613 is a compact, high efficiency, high speed synchronous monolithic step-down switching regulator that consumes only 3μA of quiescent current. Top and bottom power switches are included with all necessary circuitry to minimize the need for external components.   For more detail: LT8613 - 42V, 6A Synchronous Step-Down Regulator with Current Sense and 3μA Quiescent Current ### LT8640/LT8640-1 - 42V, 5A Synchronous Step-Down Silent Switcher with 2.5μA Quiescent Current Features Silent Switcher® Architecture Ultralow EMI/EMC Emissions Spread Spectrum Frequency Modulation High Efficiency at High Frequency Up to 96% Efficiency at 1MHz Up to 95% Efficiency at 2MHz Wide Input Voltage Range: 3.4V to 42V 5A Maximum Continuous Output, 7A Peak Transient Output Ultralow Quiescent Current Burst Mode® Operation 2.5μA IQ Regulating 12VIN to 3.3VOUT Output Ripple < 10mVP-P Fast Minimum Switch-On Time: 35ns Low Dropout Under All Conditions: 100mV at 1A Forced Continuous Mode (LT8640-1 Only) Safely Tolerates Inductor Saturation in Overload Adjustable and Synchronizable: 200kHz to 3MHz Peak Current Mode Operation Output Soft-Start and Tracking Small 18-Lead 3mm × 4mm QFN Description The LT®8640/LT8640-1 step-down regulator features Silent Switcher architecture designed to minimize EMI/EMC emissions while delivering high efficiency at frequencies up to 3MHz. Assembled in a 3mm × 4mm QFN, the monolithic construction with integrated power switches and inclusion of all necessary circuitry yields a solution with a minimal PCB footprint. An ultralow 2.5μA quiescent current—with the output in full regulation—enables applications requiring highest efficiency at very small load currents. Transient response remains excellent and output voltage ripple is below 10mVP-P at any load, from zero to full current. The LT8640/LT8640-1 allows high VIN to low VOUT conversion at high frequency with a fast minimum top switch on-time of 35ns. Operation is safe in overload even with a saturated inductor. Essential features are included and easy to use: An opendrain PG pin signals when the output is in regulation. The SYNC/MODE pin selects between Burst Mode operation, spread spectrum mode, synchronization to an external clock, and either pulse-skipping (LT8640) or forced continuous mode (LT8640-1). Soft-start and tracking functionality is accessed via the TR/SS pin. An accurate enable threshold can be set using the EN/UV pin and a resistor at the RT pin programs switch frequency. Applications Automotive and Industrial Supplies General Purpose Step-Down GSM Power Supplies For more Details: LT8640/LT8640-1 - 42V, 5A Synchronous Step-Down Silent Switcher with 2.5μA Quiescent Current ### LTC6752 - 280MHz, 2.9ns Comparator Family with Rail-to-Rail Inputs and CMOS Outputs Features Very High Toggle Rate: 280MHz Low Propagation Delay: 2.9ns Rail-to-Rail Inputs Extend Beyond Both Rails Output Current Capability: ±22mA Low Quiescent Current: 4.5mA Features within the LTC6752 Family: 2.45V to 5.25V Input Supply and 1.71V to 3.5V Output Supply (Separate Supply Option) 2.45V to 3.5V Supply (Single Supply Option) Shutdown Pin for Reduced Power Output Latch and Adjustable Hysteresis Complementary Outputs Packages: TSOT-23, SC70, MSOP, 3mm × 3mm QFN Direct Replacement for ADCMP60X Family Operating Temperature Range: –40°C to 125°C Description The LTC®6752 is a family of very high speed comparators capable of supporting toggle rates up to 280MHz. These comparators exhibit low propagation delays of 2.9ns, and fast rise/fall times of 1.2ns. There are a total of 5 members in the LTC6752 family, with different options for separate input and output supplies, shutdown, output latch, adjustable hysteresis, complementary outputs, and package. The LTC6752 comparators have rail-to-rail inputs that operate from 2.45V, up to 3.5V or 5.25V, depending on the option. The outputs are CMOS and the separate supply options can operate down to 1.71V, allowing for directly interfacing to 1.8V logic devices. The low propagation delay of only 2.9ns combined with low dispersion of only 1.8ns (10mV to 125mV overdrive variation) makes these comparators an excellent choice for critical timing applications. Similarly, the fast toggle rate and the low jitter of 4.5ps RMS (100mVP-P, 100MHz input) make the LTC6752 family ideally suited for high frequency line driver and clock recovery circuits. Applications Clock and Data Recovery Level Shifting High Speed Data Acquisition Systems Window Comparators High Speed Line Receivers Fast Crystal Oscillators Time of Flight Measurements Time Domain Reflectometry People Who Viewed This Product Also Viewed LTC6957 - Low Phase Noise, Dual Output Buffer/Driver/Logic Converter LT1028 - Ultra Low Noise Precision High Speed Op Amps LT4320/LT4320-1 - Ideal Diode Bridge Controller LT1719 - 4.5ns Single/Dual Supply 3V/5V Comparator with Rail-to-Rail Output LTC6409 - 10GHz GBW, 1.1nV/√Hz Differential Amplifier/ADC Driver LTC6268 - 500MHz Ultra-Low Bias Current FET Input Op Amp LTC6268-10 - 4GHz Ultra-Low Bias Current FET Input Op Amp LT3080 - Adjustable 1.1A Single Resistor Low Dropout Regulator LTC6655 - 0.25ppm Noise, Low Drift Precision References LT5400 - Quad Matched Resistor Network   For more detail: LTC6752 - 280MHz, 2.9ns Comparator Family with Rail-to-Rail Inputs and CMOS Outputs ### LTC6948 – Ultralow Noise 0.37GHz to 6.39GHz Fractional-N Synth0esizer with Integrated VCO Features Low Noise Fractional-N PLL with Integrated VCO No Δ-Σ Modulator Spurs 18-Bit Fractional Denominator –226 dBc/Hz Normalized In-Band Phase Noise Floor –274 dBc/Hz Normalized In-Band 1/f Noise –157 dBc/Hz Wideband Output Phase Noise Floor Excellent Integer Boundary Spurious Performance Output Divider (1 to 6, 50% Duty Cycle) Output Buffer Muting Reference Input Frequency Up to 425MHz Fast Frequency Switching FracNWizard™ Software Design Tool Support Typical Application Description The LTC®6948 is a high performance, low noise, 6.39GHz phase-locked loop (PLL) with a fully integrated VCO, including a reference divider, phase-frequency detector (PFD), ultralow noise charge pump, fractional feedback divider, and VCO output divider. The fractional divider uses an advanced, 4th order ΔΣ modulator which provides exceptionally low spurious levels. This allows wide loop bandwidths, producing extremely low integrated phase noise values. The programmable VCO output divider, with a range of 1 through 6, extends the output frequency range.   For more detail: LTC6948 – Ultralow Noise 0.37GHz to 6.39GHz Fractional-N Synthesizer with Integrated VCO ### Arduino Knight Rider Code Arduino Knight Rider light effect, a simple variation of blink code. Parts List; 1) 5x 5mm red LED 2) 1x Arduino 3) 5x 330Ω resistor 4) Jumper wire   Instruction; 1) Connect all LED as diagram below, make sure cathode lead of LED at ground wire. 2) Connect all 330Ω resistor to anode lead of LED. 3) Connect all jumper wire to digital pin 12, 11, 10, 9 and 8. Upload this code to your arduino /*   Knight Rider   Create LED chasing effect as knight rider light.   Coded by: arduinoprojects101.com  */ void setup() {   // initialize the digital pin 12, 11, 10, 9, 8 as an output.   pinMode(12, OUTPUT);   pinMode(11, OUTPUT);   pinMode(10, OUTPUT);   pinMode(9, OUTPUT);   pinMode(8, OUTPUT); } void loop() {   digitalWrite(12, HIGH);   delay(80);   digitalWrite(12, LOW);   digitalWrite(11, HIGH);   delay(80);   digitalWrite(11, LOW);   digitalWrite(10, HIGH);   delay(80);   digitalWrite(10, LOW);   digitalWrite(9, HIGH);   delay(80);   digitalWrite(9, LOW);   digitalWrite(8, HIGH);   delay(80);   digitalWrite(8, LOW);   // reverse   digitalWrite(8, HIGH);   delay(80);   digitalWrite(8, LOW);   digitalWrite(9, HIGH);   delay(80);   digitalWrite(9, LOW);   digitalWrite(10, HIGH);   delay(80);   digitalWrite(10, LOW);   digitalWrite(11, HIGH);   delay(80);   digitalWrite(11, LOW);   digitalWrite(12, HIGH);   delay(80);   digitalWrite(12, LOW); } Essentially, this arduino project is similar to the blink project, as it turns on the LED lights in sequence from LED 12 to LED 8, before returning the sequence back to LED 12. The knight rider light code is simply a coded sequence of blinking for easier comprehension. This code can be made simpler using array code. Enjoy yourself!   Source: Arduino Knight Rider Code ### M5STACK ATOM – SMALLEST ESP32 DEVELOPMENT BOARD FOR PORTABLE EMBEDDED AND IOT PROJECTS The ESP32-based M5Stack ATOM from Espressif is the smallest (24 x 24mm) development board available in the market, which is designed for portable embedded systems and IoT development projects. M5Stack is the most cost-effective product due to its small size and there is no battery integrated to it. The M5Stack has two types of units in the ATOM series, ATOM Matrix, and ATOM Lite. The ATOM Matrix is the most compact development board in the M5Stack development kit series with tons of features such as Wi-Fi, Bluetooth, 5×5 RGB LED Matrix with a push button, an IMU sensor (MPU6886), and six GPIOs. The MCU is Espressif’s ESP-PICO System-in-Package (SiP) module. The ATOM Lite is cheaper when compared to the ATOM Matrix because ATOM Lite is fairly minimal with a status LED and a button. The ATOM can be embedded in devices that are needed to be connected to the internet such as smart-home controllers, alarm, temperature and humidity-sensors, smart keys, etc. ATOM’s sensors could also be used in the collection of manufacturing data or for developing a centralized controller in industrial automation application scenarios for better production efficiency and to prevent unforeseen breakdowns. ATOM Matrix and ATOM Lite can be programmed using Arduino, Microphython, Visuino, and UIFlow (a Web-based IoT programming system developed by M5Stack). The Blockly visual interface is clear and easy to program. Features Of ATOM Matrix USB Type-C and ESP32 PICO-based 4 MByte flash Designed with 1 Programmable button, 5 × 5 RGB LED matrix panel, an Infrared LED and a Reset button 2.4G SMD Antenna: Proant 440 MPU6886 Inertial Sensor 6 × GPIOs (Dupont Pins) 4 Pin PH2.0 interface Program Platform: MicroPython, Arduino Product Size: 24 × 24 × 14mm, Product weight: 1g Read more: M5STACK ATOM – SMALLEST ESP32 DEVELOPMENT BOARD FOR PORTABLE EMBEDDED AND IOT PROJECTS ### Make a Mind-Controlled Arduino Robot by Tero Karvinen, Kimmo Karvinen E-Book Build a robot that responds to electrical activity in your brain—it’s easy and fun. If you’re familiar with Arduino and have basic mechanical building skills, this book will show you how to construct a robot that plays sounds, blinks lights, and reacts to signals from an affordable electroencephalography (EEG) headband. Concentrate and the robot will move. Focus more and it will go faster. Let your mind wander and the robot will slow down. You’ll find complete instructions for building a simple robot chassis with servos, wheels, sensors, LEDs, and a speaker. You also get the code to program the Arduino microcontroller to receive wireless signals from the EEG. Your robot will astound anyone who wears the EEG headband. This book will help you: Connect an inexpensive EEG device to Arduino Build a robot platform on wheels Calculate a percentage value from a potentiometer reading Mix colors with an RGB LED Play tones with a piezo speaker Write a program that makes the robot avoid boundaries Create simple movement routines Table of Contents: Chapter 1 Building the Chassis Chapter 2 Coding Appendix Building the ScrewShield Book Details Publisher: O'Reilly Media By: Tero Karvinen, Kimmo Karvinen ISBN: 978-1-44931-154-4 Year: 2011 Pages: 98 Language: English File size: 4.4 MB File format: PDF Paper Book Buy: Make a Mind-Controlled Arduino Robot by Tero Karvinen, Kimmo Karvinen E-Book Online Book Read: Make a Mind-Controlled Arduino Robot ### Make your own Custom Electronic Widgets, like my Arduino LED Day/Night Widget This is just a brief run down on how easy it has become to make your own circuits complete with your own PCB's.  Have you ever wanted to make something custom that suits your needs? Of course you have!! For me it really started when I built my first day/night light. I used a light dependant resistor to determine if it was dark and if it was to then turn on an LED light. I then went on to add a movement sensor. From there I built a multi channel lighting controller. With very small thin low voltage wires running all over the place, hot glued in spots to the walls and floors. I can’t tell you how nice it is to have automated lighting. It seems like such a simple thing to go over and turn on a light switch, but believe me after having an automated system, If I go somewhere else to another house or hotel I realize how luxurious and satisfying it is not to have to turn the switches on and off in order as I move from room to room. So what started out as a simple test of coding and sensors and logic, has seen me refine the design iteration by iteration. Not really in terms of capability but more in the way the parts come together and the way it is used. In terms of the hardware I have gone from breadboard, to prototyping board and soldered parts, to a fully custom printed circuit board (PCB). In the way of usability I have gone from very messy blobs of electronics laying on the floor, to an encased multi channel box, but with wires everywhere, then to a single board per light solution, with onboard adjustable dials. Step 1: Design a circuit.. After hearing and watching Dave Jones from the http://www.eevblog.com talk about PCB layout and the possibility of getting my boards made for under $20 for 10 of them delivered to my door, I really wanted to have a go at it. Now the first time I tried using the program without watching some tutorials I wasn’t really able to achieve much. But then I decided to use Youtube to my advantage. Yes its not just for cute cat videos. rpcelectronics have a seriously good quick set of videos to follow along to with your own free copy of eagle cad. Draw out your circuit, using the basic tricks shown to you in the tutorial videos.  DO NOT try for anything too hard on your first attempt. You will have to respin the board a few times to add more features. When trying to find the correct parts in the schematic library, IF IN DOUBT, just leave some correctly spaced pads there instead for you to solder to. For more detail: Make your own Custom Electronic Widgets, like my Arduino LED Day/Night Widget   ### Making the Maker Hub: Printing a 3d printer, Arduino and construction pics RepRap Update 3D printed parts for a new 3D printer! I have finally printed all the plastic parts for the Griffin Open Source 3D printer I'm building, and they look fantastic! The remaining components should arrive soon, and then I can start construction. In the meantime, I've been configuring the printer control board, an Arduino Mega 2560 with the RAMPS 1.4 extension. RAMPS exemplifies how the open-source nature of the maker community has brought low-cost and straightforward solutions to 3D printing. The RAMPS board is designed to slot directly onto a standard Arduino Mega 2560 via the shield mounting system, adding stepper motor controllers and other 3D printer-specific features. This board's design is open source and fully documented, allowing anyone to modify, create their own, or better understand the device they're using. Another advantage of this community-developed board is its price, now reduced to around $40! Aluminum T-Slot extrusion. Note the lack of a surface for wheels. Aluminum V-Slot extrusion with roller wheel 3D printed PLA V-Slot The main frame of the Griffin 3D printer is made up of special aluminum beams called V-Slot. Developed by makers, V-Slot integrates linear motion systems into the frame of a 3D printer or CNC machine, cutting costs and reducing complexity. Unlike traditional aluminum extrusion with a T-shaped slot, V-Slot features a V-shaped slot, allowing self-centering precision roller wheels to ride on the beam, providing a stable and high-precision linear motion pathway. As an experiment, I modeled and printed 2020 (20mm x 20mm) aluminum V-Slot extrusions needed for this printer. The lower and upper frames of the delta printer consist of six 225mm lengths of V-Slot, while the sides consist of three 500mm lengths. The three 500mm beams must be aluminum to serve as linear rails for the carriages, as aluminum V-Slot is manufactured with high precision for use with roller wheels. At $10 per meter, it’s worthwhile and fun to explore alternatives for the six 225mm beams. The printed beams exceeded my expectations, being dimensionally accurate, strong, and rigid, with a set of six printable in under eight hours. This aligns with one of the main goals of RepRap development: increasing the proportion of printed parts per build. By replacing aluminum beams with printed PLA copies, I will need to purchase 50% less V-Slot for my build. Using PLA instead of V-Slot also results in significant weight savings, as PLA weighs only 1.2 g/cm³ compared to aluminum's 2.7 g/cm³. Since the PLA beams are mostly hollow, I expect nearly 60% weight reduction in the frame section, which is a considerable portion of the total mass. This is crucial because my goal for this printer is to prioritize portability and ease of handling, areas where the massive F306 and steel-plated Wanhao 4S fall short. This new, small form factor printer will be used by the Maker Hub for demos, marketing, and other events that could benefit from its presence. 3D printed Arduino-controlled robot arm One of the most exciting aspects of the Maker Hub is the wide array of tools and resources available. This diversity is key to our goal of connecting makers from all backgrounds at the Elon Hub, providing a space where they can apply their knowledge and explore new and unfamiliar areas. I believe the best way to achieve this is by offering workshops that encourage the integration of the various technologies we have access to. 3D printed Arduino controlled arm Arduino Uno To achieve this goal, I've embarked on constructing a robotic arm using 3D-printed components and an Arduino microcontroller. This endeavor integrates skills in 3D printing, electronics, and hardware-oriented programming, serving as an excellent demonstration of some of our most intriguing technologies. If successful, I intend to create a workshop or self-paced activity focused on building and programming this robot. We're in the process of refining these workshops, so if you have any ideas, please share them in the comments! Cooling troubleshooting on the Wanhao The majority of modern 3D printers utilize either PLA (polylactic acid) or ABS (acrylonitrile butadiene styrene) as their primary printing material. ABS is known for its strength and resilience, yet it is heavier and more challenging to print due to its tendency to warp. To counteract ABS's shrinkage of up to 20% upon cooling, it's crucial to heat the print surface to approximately 110°C. Simplifying ABS prints can be achieved by employing a sealed build chamber, maintaining a high surrounding temperature to prevent premature shrinkage of the printed parts. On the other hand, PLA, while slightly weaker and more brittle than ABS, is much easier to print. It does not require a heated build platform (though heating it to 50-60°C can enhance adhesion) and exhibits minimal shrinking or warping. Consequently, PLA has become the preferred plastic for consumer-level printers in recent years. However, its low glass transition temperature, which makes it easy to use, can lead to issues like inadequate cooling between layers, resulting in mushy and poorly defined prints. Fortunately, a straightforward solution exists: immediate cooling of the PLA after extrusion using a fan attached to the hot end (the heated nozzle from which the plastic is extruded). While many manufacturers now include a hot end fan (such as the F306 with its ducted blower fan), this feature is absent in printers like the Wanhao 4S. Fortunately, the community has developed a 3D-printable fan attachment as a solution. I will soon install one of these attachments on the Wanhao, so stay tuned next week for comparisons of prints before and after installation! Construction underway The construction team has made significant progress on the Maker Hub! Ceilings and floors have been dismantled to make way for the installation of ceiling-mounted extension cords and robust flooring. The space's overall shape is beginning to take shape remarkably. Yet to be completed are the installation of wall-mounted USB outlets, the creation of impressive cabinets and shelving units, the setup of adaptable workbenches, and the addition of a 70-inch display with wireless video streaming capabilities! Keep an eye out weekly for updates on our progress as we prepare to unveil the space this fall. 3D model of a fan duct for the Wanhao 4S Wanhao 4S extruder (the fans are for cooling the hot end itself and do not cool the print) F306 Hot end. Note the duct directing airflow onto the print Follow this link for complete project: Making the Maker Hub: Printing a 3d printer, Arduino and construction pics ### Master the Art of Bootloader Burning with Arduino as ISP: A Comprehensive Guide Introduction For many electronics projects, AVR microcontrollers are commonly used. However, as a beginner, uploading or flashing code to an AVR can be challenging to understand. When other programming hardware is unavailable, an Arduino board can help burn bootloaders onto AVRs. It also enables creating and testing AVR programs. Therefore, this article will demonstrate using an Arduino as an In-System Programmer (ISP) to flash bootloaders on AVR microcontrollers. Flashing the bootloader requires connecting the Arduino to the target AVR microcontroller via specific pins. The process and pin connections are detailed. Step-by-step instructions are provided to carry out the bootloader flashing. Let's get started with exploring how to do this! Details on connecting the boards and executing the flashing procedure are contained within to walk through the process. Arduino as ISP Bootloader? Arduino boards have the ability to function as an In-System Programmer (ISP) for flashing bootloaders onto AVR microcontrollers. A bootloader is a small start-up program that enables programming the microcontroller over a serial connection without requiring external hardware. To leverage the Arduino as an ISP, the ArduinoISP sketch must be loaded onto the Arduino board first. This sketch endows the Arduino with the necessary firmware to operate as an ISP. Once programmed with ArduinoISP, the Arduino IDE can be used to install bootloaders on the target AVR microcontroller. Specifically, the ArduinoISP sketch provides the programming software transfers the bootloader from the Arduino to the AVR. This allows taking advantage of the Arduino's programming capabilities to flash bootloaders without any other dedicated hardware. Hardware Components Certain hardware is needed to utilize an Arduino as an In-System Programmer (ISP) for burning bootloaders onto AVR microcontrollers. Specifically, the required components are: S.no Component Value Qty 1. Arduino UNO – 1 2. PU DIP IC Microcontroller ATMEGA8A 1 3. Crystal 16 MHz 1 4. Push Button 6x6x4.3 1 5. LED Red 1 6. Ceramic Capacitor 22PF 1 7. Electrolytic Capacitor 10 uF 1 8. Resistor 10KΩ 1 9. Breadboard – 1 10. Jumper Wires – 1 Arduino ISP Bootloader To use Arduino as an ISP to burn a bootloader on an AVR microcontroller, you need to follow the given steps: Schematic Make connections according to the circuit diagram given below. Installing Arduino IDE The first step is to install the Arduino IDE software from the official Arduino website. Properly downloading and setting up the Arduino development environment is crucial. A simple guide on "How to install Arduino IDE" is provided below to walk through the installation process step-by-step. Installing Libraries Prior to uploading code, download and extract several libraries to the Arduino library folder location. These libraries are required to interface various sensors with the Arduino board. Specifically, download and unzip the following libraries to C:\Program Files (x86)\Arduino\libraries: Wire Dallas Temperature LiquidCrystal DHT A quick guide titled "How to Add Libraries in Arduino IDE" is provided to walk through the simple steps for installing libraries into the Arduino development environment. Having the proper libraries installed upfront will enable sensor communication and functionality within programs. Code Now copy the following code and upload it to Arduino IDE Software.   /* Made on 18 may 2021 Home based on Arduino Library */ // ArduinoISP // Copyright (c) 2008-2011 Randall Bohn // If you require a license, see // http://www.opensource.org/licenses/bsd-license.php // // This sketch turns the Arduino into a AVRISP using the following Arduino pins: // // Pin 10 is used to reset the target microcontroller. // // By default, the hardware SPI pins MISO, MOSI and SCK are used to communicate // with the target. On all Arduinos, these pins can be found // on the ICSP/SPI header: // // MISO °. . 5V (!) Avoid this pin on Due, Zero... // SCK . . MOSI // . . GND // // On some Arduinos (Uno,...), pins MOSI, MISO and SCK are the same pins as // digital pin 11, 12 and 13, respectively. That is why many tutorials instruct // you to hook up the target to these pins. If you find this wiring more // practical, have a define USE_OLD_STYLE_WIRING. This will work even when not // using an Uno. (On an Uno this is not needed). // // Alternatively you can use any other digital pin by configuring // software ('BitBanged') SPI and having appropriate defines for PIN_MOSI, // PIN_MISO and PIN_SCK. // // IMPORTANT: When using an Arduino that is not 5V tolerant (Due, Zero, ...) as // the programmer, make sure to not expose any of the programmer's pins to 5V. // A simple way to accomplish this is to power the complete system (programmer // and target) at 3V3. // // Put an LED (with resistor) on the following pins: // 9: Heartbeat - shows the programmer is running // 8: Error - Lights up if something goes wrong (use red if that makes sense) // 7: Programming - In communication with the slave // #include "Arduino.h" #undef SERIAL #define PROG_FLICKER true // Configure SPI clock (in Hz). // E.g. for an ATtiny @ 128 kHz: the datasheet states that both the high and low // SPI clock pulse must be > 2 CPU cycles, so take 3 cycles i.e. divide target // f_cpu by 6: // #define SPI_CLOCK (128000/6) // // A clock slow enough for an ATtiny85 @ 1 MHz, is a reasonable default: #define SPI_CLOCK (1000000/6) // Select hardware or software SPI, depending on SPI clock. // Currently only for AVR, for other architectures (Due, Zero,...), hardware SPI // is probably too fast anyway. #if defined(ARDUINO_ARCH_AVR) #if SPI_CLOCK > (F_CPU / 128) #define USE_HARDWARE_SPI #endif #endif // Configure which pins to use: // The standard pin configuration. #ifndef ARDUINO_HOODLOADER2 #define RESET 10 // Use pin 10 to reset the target rather than SS #define LED_HB 9 #define LED_ERR 8 #define LED_PMODE 7 // Uncomment following line to use the old Uno style wiring // (using pin 11, 12 and 13 instead of the SPI header) on Leonardo, Due... // #define USE_OLD_STYLE_WIRING #ifdef USE_OLD_STYLE_WIRING #define PIN_MOSI 11 #define PIN_MISO 12 #define PIN_SCK 13 #endif // HOODLOADER2 means running sketches on the ATmega16U2 serial converter chips // on Uno or Mega boards. We must use pins that are broken out: #else #define RESET 4 #define LED_HB 7 #define LED_ERR 6 #define LED_PMODE 5 #endif // By default, use hardware SPI pins: #ifndef PIN_MOSI #define PIN_MOSI MOSI #endif #ifndef PIN_MISO #define PIN_MISO MISO #endif #ifndef PIN_SCK #define PIN_SCK SCK #endif // Force bitbanged SPI if not using the hardware SPI pins: #if (PIN_MISO != MISO) || (PIN_MOSI != MOSI) || (PIN_SCK != SCK) #undef USE_HARDWARE_SPI #endif // Configure the serial port to use. // // Prefer the USB virtual serial port (aka. native USB port), if the Arduino has one: // - it does not autoreset (except for the magic baud rate of 1200). // - it is more reliable because of USB handshaking. // // Leonardo and similar have an USB virtual serial port: 'Serial'. // Due and Zero have an USB virtual serial port: 'SerialUSB'. // // On the Due and Zero, 'Serial' can be used too, provided you disable autoreset. // To use 'Serial': #define SERIAL Serial #ifdef SERIAL_PORT_USBVIRTUAL #define SERIAL SERIAL_PORT_USBVIRTUAL #else #define SERIAL Serial #endif // Configure the baud rate: #define BAUDRATE 19200 // #define BAUDRATE 115200 // #define BAUDRATE 1000000 #define HWVER 2 #define SWMAJ 1 #define SWMIN 18 // STK Definitions #define STK_OK 0x10 #define STK_FAILED 0x11 #define STK_UNKNOWN 0x12 #define STK_INSYNC 0x14 #define STK_NOSYNC 0x15 #define CRC_EOP 0x20 //ok it is a space... void pulse(int pin, int times); #ifdef USE_HARDWARE_SPI #include "SPI.h" #else #define SPI_MODE0 0x00 class SPISettings { public: // clock is in Hz SPISettings(uint32_t clock, uint8_t bitOrder, uint8_t dataMode) : clock(clock) { (void) bitOrder; (void) dataMode; }; private: uint32_t clock; friend class BitBangedSPI; }; class BitBangedSPI { public: void begin() { digitalWrite(PIN_SCK, LOW); digitalWrite(PIN_MOSI, LOW); pinMode(PIN_SCK, OUTPUT); pinMode(PIN_MOSI, OUTPUT); pinMode(PIN_MISO, INPUT); } void beginTransaction(SPISettings settings) { pulseWidth = (500000 + settings.clock - 1) / settings.clock; if (pulseWidth == 0) pulseWidth = 1; } void end() {} uint8_t transfer (uint8_t b) { for (unsigned int i = 0; i < 8; ++i) { digitalWrite(PIN_MOSI, (b & 0x80) ? HIGH : LOW); digitalWrite(PIN_SCK, HIGH); delayMicroseconds(pulseWidth); b = (b << 1) | digitalRead(PIN_MISO); digitalWrite(PIN_SCK, LOW); // slow pulse delayMicroseconds(pulseWidth); } return b; } private: unsigned long pulseWidth; // in microseconds }; static BitBangedSPI SPI; #endif void setup() { SERIAL.begin(BAUDRATE); pinMode(LED_PMODE, OUTPUT); pulse(LED_PMODE, 2); pinMode(LED_ERR, OUTPUT); pulse(LED_ERR, 2); pinMode(LED_HB, OUTPUT); pulse(LED_HB, 2); } int error = 0; int pmode = 0; // address for reading and writing, set by 'U' command unsigned int here; uint8_t buff[256]; // global block storage #define beget16(addr) (*addr * 256 + *(addr+1) ) typedef struct param { uint8_t devicecode; uint8_t revision; uint8_t progtype; uint8_t parmode; uint8_t polling; uint8_t selftimed; uint8_t lockbytes; uint8_t fusebytes; uint8_t flashpoll; uint16_t eeprompoll; uint16_t pagesize; uint16_t eepromsize; uint32_t flashsize; } parameter; parameter param; // this provides a heartbeat on pin 9, so you can tell the software is running. uint8_t hbval = 128; int8_t hbdelta = 8; void heartbeat() { static unsigned long last_time = 0; unsigned long now = millis(); if ((now - last_time) < 40) return; last_time = now; if (hbval > 192) hbdelta = -hbdelta; if (hbval < 32) hbdelta = -hbdelta; hbval += hbdelta; analogWrite(LED_HB, hbval); } static bool rst_active_high; void reset_target(bool reset) { digitalWrite(RESET, ((reset && rst_active_high) || (!reset && !rst_active_high)) ? HIGH : LOW); } void loop(void) { // is pmode active? if (pmode) { digitalWrite(LED_PMODE, HIGH); } else { digitalWrite(LED_PMODE, LOW); } // is there an error? if (error) { digitalWrite(LED_ERR, HIGH); } else { digitalWrite(LED_ERR, LOW); } // light the heartbeat LED heartbeat(); if (SERIAL.available()) { avrisp(); } } uint8_t getch() { while (!SERIAL.available()); return SERIAL.read(); } void fill(int n) { for (int x = 0; x < n; x++) { buff[x] = getch(); } } #define PTIME 30 void pulse(int pin, int times) { do { digitalWrite(pin, HIGH); delay(PTIME); digitalWrite(pin, LOW); delay(PTIME); } while (times--); } void prog_lamp(int state) { if (PROG_FLICKER) { digitalWrite(LED_PMODE, state); } } uint8_t spi_transaction(uint8_t a, uint8_t b, uint8_t c, uint8_t d) { SPI.transfer(a); SPI.transfer(b); SPI.transfer(c); return SPI.transfer(d); } void empty_reply() { if (CRC_EOP == getch()) { SERIAL.print((char)STK_INSYNC); SERIAL.print((char)STK_OK); } else { error++; SERIAL.print((char)STK_NOSYNC); } } void breply(uint8_t b) { if (CRC_EOP == getch()) { SERIAL.print((char)STK_INSYNC); SERIAL.print((char)b); SERIAL.print((char)STK_OK); } else { error++; SERIAL.print((char)STK_NOSYNC); } } void get_version(uint8_t c) { switch (c) { case 0x80: breply(HWVER); break; case 0x81: breply(SWMAJ); break; case 0x82: breply(SWMIN); break; case 0x93: breply('S'); // serial programmer break; default: breply(0); } } void set_parameters() { // call this after reading parameter packet into buff[] param.devicecode = buff[0]; param.revision = buff[1]; param.progtype = buff[2]; param.parmode = buff[3]; param.polling = buff[4]; param.selftimed = buff[5]; param.lockbytes = buff[6]; param.fusebytes = buff[7]; param.flashpoll = buff[8]; // ignore buff[9] (= buff[8]) // following are 16 bits (big endian) param.eeprompoll = beget16(&buff[10]); param.pagesize = beget16(&buff[12]); param.eepromsize = beget16(&buff[14]); // 32 bits flashsize (big endian) param.flashsize = buff[16] * 0x01000000 + buff[17] * 0x00010000 + buff[18] * 0x00000100 + buff[19]; // AVR devices have active low reset, AT89Sx are active high rst_active_high = (param.devicecode >= 0xe0); } void start_pmode() { // Reset target before driving PIN_SCK or PIN_MOSI // SPI.begin() will configure SS as output, so SPI master mode is selected. // We have defined RESET as pin 10, which for many Arduinos is not the SS pin. // So we have to configure RESET as output here, // (reset_target() first sets the correct level) reset_target(true); pinMode(RESET, OUTPUT); SPI.begin(); SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); // See AVR datasheets, chapter "SERIAL_PRG Programming Algorithm": // Pulse RESET after PIN_SCK is low: digitalWrite(PIN_SCK, LOW); delay(20); // discharge PIN_SCK, value arbitrarily chosen reset_target(false); // Pulse must be minimum 2 target CPU clock cycles so 100 usec is ok for CPU // speeds above 20 KHz delayMicroseconds(100); reset_target(true); // Send the enable programming command: delay(50); // datasheet: must be > 20 msec spi_transaction(0xAC, 0x53, 0x00, 0x00); pmode = 1; } void end_pmode() { SPI.end(); // We're about to take the target out of reset so configure SPI pins as input pinMode(PIN_MOSI, INPUT); pinMode(PIN_SCK, INPUT); reset_target(false); pinMode(RESET, INPUT); pmode = 0; } void universal() { uint8_t ch; fill(4); ch = spi_transaction(buff[0], buff[1], buff[2], buff[3]); breply(ch); } void flash(uint8_t hilo, unsigned int addr, uint8_t data) { spi_transaction(0x40 + 8 * hilo, addr >> 8 & 0xFF, addr & 0xFF, data); } void commit(unsigned int addr) { if (PROG_FLICKER) { prog_lamp(LOW); } spi_transaction(0x4C, (addr >> 8) & 0xFF, addr & 0xFF, 0); if (PROG_FLICKER) { delay(PTIME); prog_lamp(HIGH); } } unsigned int current_page() { if (param.pagesize == 32) { return here & 0xFFFFFFF0; } if (param.pagesize == 64) { return here & 0xFFFFFFE0; } if (param.pagesize == 128) { return here & 0xFFFFFFC0; } if (param.pagesize == 256) { return here & 0xFFFFFF80; } return here; } void write_flash(int length) { fill(length); if (CRC_EOP == getch()) { SERIAL.print((char) STK_INSYNC); SERIAL.print((char) write_flash_pages(length)); } else { error++; SERIAL.print((char) STK_NOSYNC); } } uint8_t write_flash_pages(int length) { int x = 0; unsigned int page = current_page(); while (x < length) { if (page != current_page()) { commit(page); page = current_page(); } flash(LOW, here, buff[x++]); flash(HIGH, here, buff[x++]); here++; } commit(page); return STK_OK; } #define EECHUNK (32) uint8_t write_eeprom(unsigned int length) { // here is a word address, get the byte address unsigned int start = here * 2; unsigned int remaining = length; if (length > param.eepromsize) { error++; return STK_FAILED; } while (remaining > EECHUNK) { write_eeprom_chunk(start, EECHUNK); start += EECHUNK; remaining -= EECHUNK; } write_eeprom_chunk(start, remaining); return STK_OK; } // write (length) bytes, (start) is a byte address uint8_t write_eeprom_chunk(unsigned int start, unsigned int length) { // this writes byte-by-byte, page writing may be faster (4 bytes at a time) fill(length); prog_lamp(LOW); for (unsigned int x = 0; x < length; x++) { unsigned int addr = start + x; spi_transaction(0xC0, (addr >> 8) & 0xFF, addr & 0xFF, buff[x]); delay(45); } prog_lamp(HIGH); return STK_OK; } void program_page() { char result = (char) STK_FAILED; unsigned int length = 256 * getch(); length += getch(); char memtype = getch(); // flash memory @here, (length) bytes if (memtype == 'F') { write_flash(length); return; } if (memtype == 'E') { result = (char)write_eeprom(length); if (CRC_EOP == getch()) { SERIAL.print((char) STK_INSYNC); SERIAL.print(result); } else { error++; SERIAL.print((char) STK_NOSYNC); } return; } SERIAL.print((char)STK_FAILED); return; } uint8_t flash_read(uint8_t hilo, unsigned int addr) { return spi_transaction(0x20 + hilo * 8, (addr >> 8) & 0xFF, addr & 0xFF, 0); } char flash_read_page(int length) { for (int x = 0; x < length; x += 2) { uint8_t low = flash_read(LOW, here); SERIAL.print((char) low); uint8_t high = flash_read(HIGH, here); SERIAL.print((char) high); here++; } return STK_OK; } char eeprom_read_page(int length) { // here again we have a word address int start = here * 2; for (int x = 0; x < length; x++) { int addr = start + x; uint8_t ee = spi_transaction(0xA0, (addr >> 8) & 0xFF, addr & 0xFF, 0xFF); SERIAL.print((char) ee); } return STK_OK; } void read_page() { char result = (char)STK_FAILED; int length = 256 * getch(); length += getch(); char memtype = getch(); if (CRC_EOP != getch()) { error++; SERIAL.print((char) STK_NOSYNC); return; } SERIAL.print((char) STK_INSYNC); if (memtype == 'F') result = flash_read_page(length); if (memtype == 'E') result = eeprom_read_page(length); SERIAL.print(result); } void read_signature() { if (CRC_EOP != getch()) { error++; SERIAL.print((char) STK_NOSYNC); return; } SERIAL.print((char) STK_INSYNC); uint8_t high = spi_transaction(0x30, 0x00, 0x00, 0x00); SERIAL.print((char) high); uint8_t middle = spi_transaction(0x30, 0x00, 0x01, 0x00); SERIAL.print((char) middle); uint8_t low = spi_transaction(0x30, 0x00, 0x02, 0x00); SERIAL.print((char) low); SERIAL.print((char) STK_OK); } ////////////////////////////////////////// ////////////////////////////////////////// //////////////////////////////////// //////////////////////////////////// void avrisp() { uint8_t ch = getch(); switch (ch) { case '0': // signon error = 0; empty_reply(); break; case '1': if (getch() == CRC_EOP) { SERIAL.print((char) STK_INSYNC); SERIAL.print("AVR ISP"); SERIAL.print((char) STK_OK); } else { error++; SERIAL.print((char) STK_NOSYNC); } break; case 'A': get_version(getch()); break; case 'B': fill(20); set_parameters(); empty_reply(); break; case 'E': // extended parameters - ignore for now fill(5); empty_reply(); break; case 'P': if (!pmode) start_pmode(); empty_reply(); break; case 'U': // set address (word) here = getch(); here += 256 * getch(); empty_reply(); break; case 0x60: //STK_PROG_FLASH getch(); // low addr getch(); // high addr empty_reply(); break; case 0x61: //STK_PROG_DATA getch(); // data empty_reply(); break; case 0x64: //STK_PROG_PAGE program_page(); break; case 0x74: //STK_READ_PAGE 't' read_page(); break; case 'V': //0x56 universal(); break; case 'Q': //0x51 error = 0; end_pmode(); empty_reply(); break; case 0x75: //STK_READ_SIGN 'u' read_signature(); break; // expecting a command, not CRC_EOP // this is how we can get back in sync case CRC_EOP: error++; SERIAL.print((char) STK_NOSYNC); break; // anything else we will return STK_UNKNOWN default: error++; if (CRC_EOP == getch()) SERIAL.print((char)STK_UNKNOWN); else SERIAL.print((char)STK_NOSYNC); } } Working and Testing We want to program with an Arduino Uno board. First, we use the “tools” menu in the Arduino IDE to choose the right board and port. We choose “Arduino as ISP” from the “Programmer” section of the same menu. Now that the Arduino IDE is set up with the necessary libraries, we can move to loading example code and preparing a microcontroller. To start, paste the supplied code snippet into a new Arduino sketch. This will serve as our testing program. Next, we need to select the target microcontroller so its bootloader can be flashed. First, visit the provided Github link to determine which AVR category your microcontrollermodel falls under. For example, if using an Atmega8, it would be in the MiniCore group. Once the microcontroller's core group is identified, follow the steps in the "How to install" guide to incorporate support for that microcontroller model into the Arduino IDE. This will complete the environment setup needed before proceeding to flash the bootloader. Begin by launching the Arduino IDE software. Navigate to the "Files" menu and select "Preferences" to open the configuration page. On this page, locate the "Additional Boards Manager URLs" option and paste the link copied previously. Next, access the Board Manager by navigating to "Tools > Board". This will initiate a download of additional board details. Once the download completes, utilize the onboard search feature to look up "MiniCore". Select this item and initiate installation to incorporate support for the target microcontroller board into the IDE environment. This finalizes the setup steps needed to flash the bootloader. Navigate to "Tools > Board" and select the "MiniCore" item. Then, choose the target microcontroller of "Atmega8". Next, click "Burn Bootloader" located towards the end of the "Tools" menu. Allow the process to complete, which will be indicated by the message "Done Burning Bootloader". With the bootloader now installed on the microcontroller, it can be programmed using a USB-TTL converter and the Arduino IDE. Let's test it out by uploading a simple code. We can utilize the Arduino board as a USB-TTL interface by connecting its RX and TX pins to the microcontroller. Reconnect the Arduino to the computer after setting up the circuit. Under "Tools", select "Atmega8" for the "Board" and the corresponding serial port for the connected Arduino under "Port". To verify everything was done correctly, we will flash a basic "Blink" program to the Atmega8. Copy and paste the code provided below into a new sketch. void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(8, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(8, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(8, LOW); // turn the LED off by making the voltage LOW delay(100); // wait for a second ### Matrix sound machine: Generative music with a particle system using Arduino This project is a part of experiments done while doing an artist in residence at Instructables. You can see the other projects here. Creating emergent patterns that can be converted into sounds fascinates me. So this is my first experiment in building an arduino platform for creating such patterns. This version uses a Gameduino as its sound processor and uses particles that bounces around on a led matrix as the interactive sound generators. You can add more particles by pressing the joystick down for two seconds and the joystick serves as a drawing pen to create elements for the particles to bounce on. As you can see in the video the code is still a little crude and only the first proof of concept for the platform. Of similar projects I would recommend you look into: Bloom an iPhone app made by brian Eno and Otomata by earslap. Step 1: Components needed The following componets are needed: Prototyping shield. Pin headers Joystick Wires. Led Matrix. Wooden box (I got mine from the container store in San Francisco). Female Jack. Audio wire. Pieces of scrap wood. Semi transparent Acrylic plate. The electronics can be done with basic soldering tools. The enclosure was made with a laser cutting some acrylics and a drillpress to make holes in the wooden box Step 2: Mount the led matrix Adafruit has made a toturial for how to wire up the led matrix. You can find it here. Please refer to how I wired it up in diagram in step 1. If you are going to wire it up according to the Adafruit toturial (see the picture with the jumper wires), then Red = 5v, Black = Ground, White = Pin3, Orange = pin4, Yellow = pin5. If you want to use your own custom pins you should change this section in the code: #define DATA 4 #define WR 5 #define CS 3 Step 3: Connect the joystick As shown in the diagram Xout is connected to analog 4, You connect to analog 3 and button (sel) is connected to analog 2. A 10k resistor is connected from analog 2 to ground - this functions as a pull down resistor. Major Components in Project Prototyping shield. Pin headers Joystick Wires. Led Matrix. Wooden box (I got mine from the container store in San Francisco). Female Jack. Audio wire. Pieces of scrap wood. Semi transparent Acrylic plate.   For more detail: Matrix sound machine: Generative music with a particle system using Arduino ### MAX32670 – HIGH RELIABILITY, ULTRA-LOW POWER MICROCONTROLLER POWERED BY ARM CORTEX M4 PROCESSOR In the Darwin family, the MAX32670 is an ultra-low power, cost-effective, high reliability 32-bit microcontroller enabling designs with complex sensor processing without compromising battery life. It combines a flexible and versatile power management unit with the powerful Arm® Cortex®-M4 processor with floating point unit (FPU). The MAX32670 also offers legacy designs an easy and cost optimal upgrade path from 8- or 16-bit microcontrollers. The device integrates up to 384KB of flash and 160KB of SRAM to accommodate application and sensor code. error correction coding (ECC), capable of single error correction and double error detection (SEC-DED), is implemented over the entire flash, RAM, and cache to ensure ultra-reliable code execution for demanding applications. Additional features such as the two windowed watchdog timers with fully flexible and independent clocking have been added to further enhance reliable operation. Brownout detection ensures proper operation during power-down and power-up events and unexpected supply transients. Multiple high-speed peripherals such as 3.4MHz I²C, 50MHz SPI, and 4MBAUD UARTs are included to maximize communication bandwidth. In addition, a low-power UART is available for operation in the lowest power sleep modes to facilitate wakeup on activity without any loss of data. A total of six timers with I/O capability are provided, including two low-power timers to enable pulse counting, capture/compare and PWM generation even in the lowest power sleep modes. The device packs all this capability in tiny form factors: 5mm x 5mm 40-pin TQFN-EP and 1.7mm x 2.2mm 24-bump WLP packages. Read more: MAX32670 – HIGH RELIABILITY, ULTRA-LOW POWER MICROCONTROLLER POWERED BY ARM CORTEX M4 PROCESSOR ### MAXIM INTEGRATED RELEASES SECURE IOT MICROCONTROLLER WITH CHIPDNA PUF KEY PROTECTION TECHNOLOGY MAX32520 Provides The Most Secure Boot For Root-Of-Trust To Protect Connected Healthcare, Industrial And Computing Systems Maxim has released the MAX32520 ChipDNA™ secure Arm® Cortex®-M4 microcontroller, the first secure microcontroller with built-in physically unclonable function (PUF) technology for financial- and government-grade security. Maxim Integrated’s PUF technology allows for multiple layers of protection to provide the most advanced key-protection technology in a cost-effective format for use in IoT, healthcare, industrial and computing systems. As IoT applications continue to proliferate, large numbers of devices are being deployed in uncontrolled and hostile areas that make them more vulnerable to physical attacks. These are more sophisticated than software threats like poor crypto implementations or default password attacks. Designers want enhanced system defenses for their mission-critical applications where exposing secret encryption keys can bring down networks, ruin reputations, end companies and even negatively affect people’s lives. IoT developers are eager to add security to their designs but they are hard-pressed to find the expertise needed to get them to market with advanced protection, said Tanner Johnson, senior analyst, IoT Cybersecurity at Omdia. Enabling developers to incorporate PUF-encrypted flash and secure boot loading without system redesign or in-house code development will help them reduce time-to-market dramatically. The MAX32520 with ChipDNA offers multiple layers of protection through its PUF technology, the industry’s most advanced key-protection technology for safeguarding secrets used in cryptographic operations. It uses a tamper-proof PUF key for flash encryption, secure boot for root-of-trust and serial flash emulation. Additionally, the physical security inherent in the PUF key eliminates the need for a battery to actively destroy secret-key materials when under attack. Read more: MAXIM INTEGRATED RELEASES SECURE IOT MICROCONTROLLER WITH CHIPDNA PUF KEY PROTECTION TECHNOLOGY ### Arduino Cyclone Reaction Time Game In this instructable, we walk through how I made a "Cyclone" - type arcade game using an Arduino. This game also includes a reaction timer mode. Let's get started! A list of things you will need: Arduino Uno LCD Screen MCP23017 serial port expander 2 pushbuttons LEDs of differing colors (I used 3mm and 5mm LEDs in red, green, and yellow) Resistors 100 and 150 ohm for LEDs 10k ohm for port expander and buttons Lots of jumper wires A willing contestant Step 1: Wiring Up Your Breadboard and Accessories Connect the Arduino to all of the LEDs on the breadboard using the port expander shown in the first photo, where the "Microcontroller" chip is the MCP23017 port expander. Furthermore, establish a connection between the Arduino and the LCD screen. Make sure to adjust the screen's contrast correctly by using the potentiometer located at the rear of the device. Step 2: Coding! Here is the code I wrote for this project. Note: you must download the appropriate libraries for the MCP23017 port expander (can be found on Adafruit) and your specific LCD screen. I have included comments that explain most parts of the code. Feel free to comment if you have questions, and I will do my best to answer them. #include //Including MCP23017 port expander and LCD libraries #include //can be downloaded from Adafruit LiquidCrystal_I2C lcd(0x3f, 16, 2); //These two lines create lcd and mcp objects Adafruit_MCP23017 mcp;const int led1 = 15; //Initializing pin numbers as integers const int led2 = 14; const int led3 = 13; const int led4 = 12; const int led5 = 11; const int led6 = 10; const int led7 = 9; const int led8 = 8; const int led9 = 7; const int led10 = 6; const int led11 = 5; const int buttonPin = 3; const int modePin = 2; boolean mode = true; //These two booleans are used to change the mode from Cyclone to Reaction, boolean pass = true; //and to check for early button presses in Reaction mode int chaseDelay = 100; /This section initializes a bunch of variables used later in the code int level = 0; int hiScore = 0; long reactionTime = 0; long reactionStart = 0; long hiReact = 999; long adjust = 0; int i = 0; void setup() { //This block runs only once at the start of the program Serial.begin(9600); //Begin serial monitor communication lcd.begin(); //Turn on the LCD screen, and its backlight lcd.backlight(); pinMode(buttonPin, INPUT); //Setting the button pins as inputs pinMode(modePin, INPUT); mcp.begin(); //Begins communication through the MCP23017 port expander mcp.pinMode(led1, OUTPUT); //Setting the pins associated with the ledX variables to outputs mcp.pinMode(led2, OUTPUT); mcp.pinMode(led3, OUTPUT); mcp.pinMode(led4, OUTPUT); mcp.pinMode(led5, OUTPUT); mcp.pinMode(led6, OUTPUT); mcp.pinMode(led7, OUTPUT); mcp.pinMode(led8, OUTPUT); mcp.pinMode(led9, OUTPUT); mcp.pinMode(led10, OUTPUT); mcp.pinMode(led11, OUTPUT); } void loop() { attachInterrupt(digitalPinToInterrupt(modePin), modeToggle, RISING); //This line assigns the modePin as an interrupt, running the modeToggle function whenever the mode button is pressed if (mode) { //If the mode is set to true, Cyclone begins lcd.setCursor(0, 0); //This block prints text on the LCD screen lcd.print(" CYCLONE! HS:" + String(hiScore) + " "); lcd.setCursor(0, 1); lcd.print("Current Level:" + String(level)); cyclone(); } else { //If the mode is set to false, Reaction begins lcd.setCursor(0, 0); lcd.print("REACTION! HS:" + String(hiReact) + " "); lcd.setCursor(0, 1); lcd.print("Last Time:" + String(reactionTime) + " "); if (digitalRead(modePin) == 1) { mode = true; } reaction(); } } void modeToggle() { //This is the modeToggle function which switches the mode mode = !mode; } void cyclone() { //Cyclone function, which cycles through all the LEDs in order, for (i = 5; i <= 15; i++) { //and waits for a button press mcp.digitalWrite(i, 1); if (i == 10 && digitalRead(buttonPin) == 1) { //If the button is pressed at the same time as the middle green LED, goodBlink(); //the goodBlink function is triggered and the game resets i = 5; break; } else if (digitalRead(buttonPin) == 1) { //If the button is pressed any other time, badBlink(); //the badBlink function is triggered and the game resets i = 5; break; } delay(chaseDelay); mcp.digitalWrite(i, 0); } } void goodBlink() { //When this function is triggered, the user has successfully hit the green LED chaseDelay -= 10; //The delay between LED flashes is decreased by 10ms, making the game harder level ++; //The shown "level" increases by 1 if (level > hiScore) { //If the level is above the hi score, the hi score goes up hiScore = level; } for (int j = 1; j <= 5; j++) { //This for loop blinks all the LEDs 5 times mcp.digitalWrite(5, 1); mcp.digitalWrite(6, 1); mcp.digitalWrite(7, 1); mcp.digitalWrite(8, 1); mcp.digitalWrite(9, 1); mcp.digitalWrite(10, 1); mcp.digitalWrite(11, 1); mcp.digitalWrite(12, 1); mcp.digitalWrite(13, 1); mcp.digitalWrite(14, 1); mcp.digitalWrite(15, 1); delay(250); mcp.digitalWrite(5, 0); mcp.digitalWrite(6, 0); mcp.digitalWrite(7, 0); mcp.digitalWrite(8, 0); mcp.digitalWrite(9, 0); mcp.digitalWrite(10, 0); mcp.digitalWrite(11, 0); mcp.digitalWrite(12, 0); mcp.digitalWrite(13, 0); mcp.digitalWrite(14, 0); mcp.digitalWrite(15, 0); delay(250); } } void badBlink() { //When this function is triggered, the user missed the green LED chaseDelay = 100; //The delay and level are reset to their default values level = 0; if (level > hiScore) { hiScore = level; } for (int k = 1; k <= 5; k++) { //This for loop blinks just the red LEDs 5 times mcp.digitalWrite(5, 1); mcp.digitalWrite(6, 1); mcp.digitalWrite(14, 1); mcp.digitalWrite(15, 1); delay(150); mcp.digitalWrite(5, 0); mcp.digitalWrite(6, 0); mcp.digitalWrite(14, 0); mcp.digitalWrite(15, 0); delay(150); } mcp.digitalWrite(i, 0); } void reaction() { //This function runs the reaction game mcp.digitalWrite(5, 1); //The game begins with all the red LEDs on mcp.digitalWrite(6, 1); mcp.digitalWrite(14, 1); mcp.digitalWrite(15, 1); reactionStart = millis(); //The time in milliseconds is stored as reactionStart while (millis() - reactionStart < 3000) { //and the game waits for 3 seconds, while also if (digitalRead(buttonPin) == 1) { //constantly checking for an early button press pass = false; //If you press the button early, the "pass" boolean is set to false } //and the game skips to earlyBlink } if (pass) { //The red LEDs turn off, and yellow LEDs are turned on mcp.digitalWrite(5, 0); mcp.digitalWrite(6, 0); mcp.digitalWrite(14, 0); mcp.digitalWrite(15, 0); mcp.digitalWrite(7, 1); mcp.digitalWrite(8, 1); mcp.digitalWrite(12, 1); mcp.digitalWrite(13, 1); } else { earlyBlink(); } reactionStart = millis(); long rando = random(500, 5000); //The game then waits for a random delay between .5 and 5 seconds Serial.println(rando); //Printing out the delay on the serial monitor, for testing purposes while ((millis() - reactionStart) < rando) { //Again waiting for an early button press if (digitalRead(buttonPin) == 1) { pass = false; } } if (pass) { //If you dont press early, the yellow LEDs turn off and the green turn on mcp.digitalWrite(7, 0); mcp.digitalWrite(8, 0); mcp.digitalWrite(12, 0); mcp.digitalWrite(13, 0); mcp.digitalWrite(9, 1); mcp.digitalWrite(10, 1); mcp.digitalWrite(11, 1); reactionTime = 0; //The clock begins ticking right when the green LEDs turn on reactionStart = millis(); while (digitalRead(buttonPin) == 0) { //The game hangs while it waits for you to react and press the button } reactionTime = millis() - reactionStart; lcd.setCursor(0, 1); lcd.print("Last Time:" + String(reactionTime) + " "); //After you press the button, the game stores and prints out your reaction time, in milliseconds } else { //This else statement runs if you pressed a button early at any point in the game earlyBlink(); } mcp.digitalWrite(9, 0); mcp.digitalWrite(10, 0); mcp.digitalWrite(11, 0); delay(1000); if (reactionTime < hiReact && reactionTime != 0) { hiReact = reactionTime; } pass = true; } void earlyBlink() { //This function blinks the red LEDs 3 times if you press the button early, then restarts the game for (int k = 1; k <= 3; k++) { mcp.digitalWrite(5, 1); mcp.digitalWrite(6, 1); mcp.digitalWrite(14, 1); mcp.digitalWrite(15, 1); delay(150); mcp.digitalWrite(5, 0); mcp.digitalWrite(6, 0); mcp.digitalWrite(14, 0); mcp.digitalWrite(15, 0); delay(150); mcp.digitalWrite(5, 0); mcp.digitalWrite(6, 0); mcp.digitalWrite(7, 0); mcp.digitalWrite(8, 0); mcp.digitalWrite(9, 0); mcp.digitalWrite(10, 0); mcp.digitalWrite(11, 0); mcp.digitalWrite(12, 0); mcp.digitalWrite(13, 0); mcp.digitalWrite(14, 0); mcp.digitalWrite(15, 0); } } Step 3: Play! https://youtu.be/BLM_PlmIjso Once you compile the code and upload it to your Arduino, the game should run! (Assuming everything is wired correctly) Attached is a video showing gameplay of the project. I hope you enjoyed, and good luck! Source: Arduino Cyclone Reaction Time Game ### MEET THE ARTICKOALA! THE FPGA DEVELOPMENT BOARD BASED ON LATTICE CROSSLINK-NX Barely a week after Lattice semiconductor announced the launch of the CrossLink-NX family of FPGA, Greg Davill, in his amazing way of posting the entire development process in a twitter thread, has announced the launch of a development board based on the Lattice Crosslink-NX 72QFN. The new board which is called the ArcticKoala was created using some of the sources from recent FPGA tools like the iCEBreaker ICE40-UP5K board. The board comprises of a Lattice Semiconductor LIFCL-40 CrossLink FPGA with a Winbond 25Q128 128Mbit Flash memory (for configuration bitstreams). In terms of interfaces, the board comes with 3x Pmod extension headers, 1x MIPI extension header, and a FTDI FT2232 USB-Serial converter to allow users to connect to the board over USB. The CrossLink-NX family, on which the new development board is based, was designed using the new Lattice Nexus platform, which combines a 28 nm FD-SOI manufacturing process with a new, Lattice-designed, FPGA fabric architecture optimized for low power operation in a small form factor. According to Gordon Hands, Director of Product Marketing at Lattice Semiconductor, asides from being super low power (up to 75% compared with similar class devices) and coming with better performance than most FPGAs in its class, the CrossLink-NX is supported by a robust library of design software, IP blocks and application reference designs which makes it quick and easy for developers to integrate it into new or existing designs. Some of the features CrossLink-NX which the ArcticKoala will be breaking out to users include: A Low power FPGA Development Board Highly reliable FPGA with SER up to 100 times lower than other FPGAs in its class. 2.5 Gbps Hardened MIPI D-PHY 5 Gbps PCIe 1.5 Gbps programmable IO 1066 Mbps DDR3. Support for LVDS, subLVDS, OpenLDI (OLDI), SGMII, and FPGA fabric for signal aggregation, duplication, and splitting. High Memory to Logic Ratio (170bits of memory for every logic cell) Instant-on Performance thanks to Ultra-Fast IO configuration (3ms) and total device configuration of 15ms. Asides from the satirical nature of the name, to create a full-blown board based on an FPGA chip that was released 1 week earlier, confirms the brilliance, impressive talent, and work ethics that the ecosystem has come to respect Davil for. Read more: MEET THE ARTICKOALA! THE FPGA DEVELOPMENT BOARD BASED ON LATTICE CROSSLINK-NX ### Arduino Based Real-Time Oscilloscope Arduino Based Real-Time Oscilloscope The Oscilloscope is an essential instrument for the workbench of every electronics engineer or maker. It is primarily used for monitoring waveforms and analyzing voltage levels, frequency, noise, and other signal characteristics that can change over time at its input. Embedded software developers utilize it for code debugging while technicians depend on it for troubleshooting electronic devices during repairs. Engineers rely on the oscilloscope for a multitude of important reasons. The primary issue is the expensive price; Entry-level oscilloscopes can vary in price from $45 to $100 with restricted precision, whereas higher-end models may exceed $150. Today, I will demonstrate the process of making a cost-effective 4-channel Arduino oscilloscope using Arduino and Python programming, which can perform functions such as showing waveforms and gauging signal voltage levels, like certain low-priced oscilloscopes. How it works There are two parts for this project; The Data Converter The Plotter Oscilloscopes commonly show a visual representation of an analog signal connected to their input channel. To achieve this, the first step is to convert the analog signal to digital, then proceed to graph the data. We will use the ADC on the atmega328p microcontroller, like the Arduino, to change analog data to a digital signal input. After transforming, the Arduino transmits the value to the PC using UART. The Python-based plotter software being developed will plot each data point with respect to time to create a waveform. Required Components The following components are required to build this project; Arduino Uno (Any of the other boards can be used) Breadboard 10k Resistor (1) LDR (1) Jumper wires Required Softwares Arduino IDE Python Python Libraries: Pyserial, Matplotlib, Drawnow Schematics The Arduino Oscilloscope has a simple design. Just attach the signal being tested to the specified Analog pin on the Arduino. However, our intention is to use the LDR in a simple voltage divider setup to generate the signal for analysis, where the resulting waveform shows the voltage level based on the nearby light intensity detected by the LDR. Match the components based on the diagrams given. After connection, the setup should like the image below. With the connections all done, we can proceed to write the code. Arduino Osclloscope Code Codes will be created for both sections. To create the Plotter, a Python script will be coded to receive data from the Arduino through UART and generate plots. For the converter, an Arduino sketch will be written to receive data from the ADC and convert it into voltage levels to be sent to the plotter. Python (Plotter) Script Starting with the more complex Python code. The previously mentioned python script will incorporate drawnow, Matplotlib, and Pyserial libraries. Pyserial allows for the creation of python code that can communicate through a serial port, Matplotlib allows for the generation of plots using data from a serial port, and drawnow enables the plot to be updated in real-time. Installing these packages on your computer can be done easily using pip. Pip is easily installable via the command line on a Windows or Linux system. I suggest installing python3 and ticking the box to include python in path, as PIP is included with python3. If you face issues with pip installation, refer to the official python website for help. With pip successfully installed, we can now move on to installing the required extra libraries. Go to the command prompt for Windows, or terminal for Linux, and enter the specified command. pip install pyserial With this done, install matplotlib using; pip install matplotlib Drawnow is sometimes installed alongside matplotlib but just to be sure, run; pip install drawnow With the installation complete, we are now ready to write the python script. The python script for this project is similar to the one I wrote for the Raspberry Pi Based Oscilloscope. We start by importing all the libraries needed for the code; import time import matplotlib.pyplot as plt from drawnow import * import pyserial Next, we create and initialize the variables that will be used during the code. The array val will be used to store the data received from the serial port and cnt will be used to count. Data at location 0 will be deleted after every 50 data counts. This is done to keep the data being displayed on the oscilloscope. val = [ ] cnt = 0 After that, we generate the serial port object that the Arduino will use to interact with our python script. Make sure that the com port mentioned is the one your Arduino board is using to communicate with the IDE. The 115200 baud rate was employed to guarantee rapid communication with the Arduino. In order to avoid mistakes, it is necessary to activate the Arduino serial port in order to communicate at this baud rate. port = serial.Serial('COM4', 115200, timeout=0.5) Next, we make the plot interactive using; plt.ion() we need to create a function to generate the plot from the data received, creating the upper and minimum limit we are expecting, which in this case is 1023 based on the resolution of the Arduino’s ADC. We also set the title, label each axis and add a legend to make it easy to identify the plot. #create the figure function def makeFig(): plt.ylim(-1023,1023) plt.title('Osciloscope') plt.grid(True) plt.ylabel('ADC outputs') plt.plot(val, 'ro-', label='Channel 0') plt.legend(loc='lower right') Having completed this task, we can now proceed to develop the main loop which retrieves data from the serial port once it becomes accessible, and then displays it graphically. In order to sync with the Arduino, the python script sends a handshake data to show that it is ready to receive data. Once the Arduino gets the handshake data, it responds with data retrieved from the ADC. If we don't have this handshake, we can't visualize the data instantly. while (True): port.write(b's') #handshake with Arduino if (port.inWaiting()):# if the arduino replies value = port.readline()# read the reply print(value)#print so we can monitor it number = int(value) #convert received data to integer print('Channel 0: {0}'.format(number)) # Sleep for half a second. time.sleep(0.01) val.append(int(number)) drawnow(makeFig)#update plot to reflect new data input plt.pause(.000001) cnt = cnt+1 if(cnt>50): val.pop(0)#keep the plot fresh by deleting the data at position 0 The complete python code for arduino oscilloscope is given at the end of this article shown below. Arduino code The second code is the Arduino sketch to obtain the data representing the signal from the ADC, then wait to receive the handshake signal from the plotter software. As soon as it receives the handshake signal, it sends the acquired data to the plotter software via UART. We start by declaring the pin of the Analog pin of the Arduino to which the signal will be applied. int sensorpin = A0; Next, we initialize and start serial communication with a baud rate of 115200 void setup() { // initialize serial communication at 115200 bits per second to match that of the python script: Serial.begin(115200); } Lastly, the voidloop() function which handles the reading of the data, and sends the data over serial to the plotter. Read More Information.... Arduino Based Real-Time Oscilloscope ### MEET THE LINDENIS V536 SOM & SBC DESIGNED FOR AI VIDEO PROCESSING AND 4K ENCODING Similar to the earlier Lindenis V5 designed for AI video processing and 4K encoding, Lindenis has released another single-board computer that uses SoM and baseboard design for 4K camera applications called the Lindenis V536. The Lindenis V536 which runs on a new Allwinner dual Cortex-A7 processor and a single MIPI SCI interface was designed for applications that rely heavily on popular open-source packages such as Live555, V4L2, FFmpeg and custom framework, and libraries. Capable of doing a lot on image signal processing and video encoding/decoding functions, the Lindenis V536 is suitable for sample applications like 4K camera applications, media player applications, and low-latency A/V streaming applications. It supports functions like image mirroring and flipping, color enhancement and adjustment, bad pixel, and lens shading correction, providing ISP tools for the PC, contrast and sharpness enhancement, motion smear and color noise removal, real-time multi-stream encoding capability, eight ROI encoding as well as MJPEG / JPEG baseline encoding. Hardware features and specifications include: Expansion board Dimension: 130 x 85mm 1 DVP connector for camera input eMMC flash module connector and MicroSD card slot for storage Analog microphone and 3.5mm line in and out jacks for audio 14-pin I2S header, 3-pin ADC header, 3-pin EINT – GPIO header and 4 –pin TWI header with 1 TWI and S-TWI each HDMI 1.4 port, SRGB LCD interface, and 4-lane MIPI-DSI + TP interfaces, 2x USB 2.0 ports and 1x Micro USB port Power and U-boot buttons Connectivity – Gigabit Ethernet (RJ45), Wi-Fi/BT module header, SIM card slot, and optional cellular module. Power supply – 5V/2A micro USB connector, 5V/2A via DC jack, 3.7V battery connector, and 20-pin power supply header Read more: MEET THE LINDENIS V536 SOM & SBC DESIGNED FOR AI VIDEO PROCESSING AND 4K ENCODING ### MEET THE PX-HERO, AN ARM CORTEX-M0+ BASED DEVELOPMENT BOARD FOR EMBEDDED SYSTEMS EDUCATION Piconomix, the South-Africa based Embedded systems development company, has launched a campaign on Crowdsupply for a new board called; PX-Hero. The PX-Her0 is a low-power ARM Cortex MO+ based development board that was developed for use in embedded education applications. The board comes with an ecosystem of tools including an open-source C library, and detailed documentation that is designed to serve as a hands-on guide to help users learn embedded system development at their own pace. The board is based on the  STM32L072RB ultra-low-power, ARM Cortex-M0+ microcontroller with 128kb of FLASH and 4Mbit of serial flash memory using the Adesto AT25SF041 chip, in addition to a spring-loaded microSD card slot which can be used for storage. Showing clear considerations of the need of most beginners, the board comes with a Low-power 128 x 64 monochrome graphic LCD which could be used in teaching how to display data on LCDs, and a LiPo battery charger which makes prototyping battery-based projects easy. Some specifications and features of the board are provided below: Microcontroller: STM32L072RB ultra-low-power ARM Cortex-M0+ 128k FLASH 20k SRAM 6k EEPROM Memory: Adesto AT25SF041 4 Mbit serial flash memory Storage: Spring-loaded push-push MicroSD card slot Serial communication: Rock-solid FTDI FT230XS USB-serial bridge Rich user interface: Low-power 128 x 64 monochrome graphic LCD with LED backlight User LED and battery charger LED Piezo buzzer 6 LARGE finger-friendly user buttons Reset button Peripheral connectors: PWR (+3.6 V to +5 V power bus) ADC x 4 DAC x 1 GPIO x 8 / PWM x 4 UART x 2 I²C x 3 (single I²C bus) 1 x Sparkfun Qwiic / STEMMA QT I²C connector 1 x Seeed Grove I²C connector 1 via 0.1″ header SPI x 1 Power: Li-Po battery charger A zero-burden voltage monitoring circuit Efficient power-path management True power on/off circuit 95% efficient TI LM3670 step-down DC-DC regulator Dimensions: Board: 100 x 80 mm (3.94 x 3.15″) Display active pixel area: 48.6 x 24.9 mm (1.91 x 0.98″) / 54.6 mm (2.15″) diagonal Read more: MEET THE PX-HERO, AN ARM CORTEX-M0+ BASED DEVELOPMENT BOARD FOR EMBEDDED SYSTEMS EDUCATION ### MEET THE ZKETECH EBD-A20H DC ELECTRONIC LOAD/BATTERY CAPACITY & DISCHARGE TESTER/POWER SUPPLY TESTER Battery testers provide an easy way for hardware designers and hobbyists to determine the genuine capacity of βatteries. There are different makes and models being sold across diverse online stores but one which stands out among all that I have used in recent times is the ZKETECH EBD-A20H. ZKE, over the years, has produced some interesting battery testers like the handy EBD-MO5, but the EBD-A20H is probably the most versatile and professional looking one I’ve seen. Spotting the kind of professional look that will fit right on the workbench in any lab (Professional or DIY home lab), the ZKETECH EBD-A20H is essentially a DC electronic load with multiple, controlled, battery discharge modes, that can be used to conduct various battery capacity and other power-related tests. Some specifications of the EBD-A20H include: Power Supply: DC 12V/1A Voltage Setting: 0.00-30.00V, minimum step is 0.01V Current Setting: 0.1-20.00A, minimum step is 0.01A (Current automatically limits when power is overrun) Test mode: DSC-CC: constant discharge current for testing battery capacity or supply current/ DSC-CP: Constant discharge power for simulating constant power equipment or testing power supply Voltage Test: 0.000-4.500V (low pressure) accuracy to 0.003V, error ±0.5% / 4.50V-30.00V (high pressure) accuracy to 0.01V, error ± 0 Read more: MEET THE ZKETECH EBD-A20H DC ELECTRONIC LOAD/BATTERY CAPACITY & DISCHARGE TESTER/POWER SUPPLY TESTER ### MELEXIS INTRODUCES HIGH-LINEARITY, LOW-DRIFT LINEAR HALL SENSOR FOR SAFETY-CRITICAL AUTOMOTIVE TORQUE-SENSING APPLICATIONS ASIL-Ready MLX91377 For Steering-Torque And General Automotive Sensing. Melexis announces the MLX91377 ASIL-ready Hall sensor IC suitable for use in safety-critical automotive systems such as electric power-assisted steering (EPAS). With an ambient operating temperature up to 160°C and combining high linearity with excellent thermal stability, including low offset and sensitivity drift, the MLX91377 supports accurate, dependable torque sensing in EPAS systems to enable safe control in conventional and autonomous driving. Developed as a Safety Element Out of Context (SEooC), the MLX91377 complies with the ISO 26262 standard and is qualified to AEC Q-100 Grade 0. Supporting functional safety level ASIL-C in digital (SENT or SPC) mode and ASIL-B in analog mode, the MLX91377 offers a high level of functional safety, per die, and can detect internal failures and enter a safe state to prevent unintended vehicle behavior. The available dual die TSSOP-16 package further expands this by offering two fully redundant dies to enable support for safety critical applications like steering and braking systems. In addition to functional-safety applications, the MLX91377 satisfies a wide variety of automotive and industrial contactless position-sensing use cases including steering torque sensors, acceleration, brake, or clutch pedal sensors, absolute linear position sensors, float-level sensors, non-contacting potentiometers, small-angle position sensors and small stroke position sensors. The programmable measurement range and multi-point calibration enhance flexibility for designers, and the variety of output protocols enables one IC to be used in multiple applications reducing requalification efforts and costs. The Short PWM Code (SPC) protocol permits measurements to be taken and transmitted upon detection of a trigger pulse. Thus up to four MLX91377 sensors can be synchronized up to 2 kHz, enabling simultaneous magnetic measurements with deterministic latency to ensure high accuracy. In addition, the low-noise and high refresh rate allow high control-loop speeds enabling systems to deliver fast response times with minimal filtering. Read more: MELEXIS INTRODUCES HIGH-LINEARITY, LOW-DRIFT LINEAR HALL SENSOR FOR SAFETY-CRITICAL AUTOMOTIVE TORQUE-SENSING APPLICATIONS ### MEMENTO is an ESP32-S3-based, CircuitPython or Arduino programmable DIY camera module Adafruit’s new MEMENTO – Bare Board Camera module is powered by the ESP32-S3 and can be programmed with CircuitPython or Arduino. The module includes a camera with an OV5640 sensor which features auto-focus capabilities and the board includes a 1.54″ 240×240 Color TFT to display the images. Previously we have covered many ESP32-based camera modules like the TinyML-CAM, the Arduino Nicla Vision, TTGO T-Camera, and many other camera modules that feature the OV5640 sensor you can check those out if interested. Features and Specifications of the MEMENTO ESP32 Camera Module: Processing and Connectivity ESP32-S3 Module Dual-core 240MHz Tensilica processor 8 MB Flash, 2 MB PSRAM WiFi and BTLE capabilities Camera and Display OV5640 Camera Module 5MP sensor 72-degree view Autofocus JPEG encoder 1.54″ Color TFT Display with 240×240 resolution Storage – MicroSD card slot (SPI) Ports and Expansion Two Digital/Analog Stemma Ports – JST PH-3 connectors for A0, A1, power, and ground I2C Stemma QT Port for I2C sensors (3.3V power and logic) Sensors and Input LIS3DH 3-axis accelerometer to detect orientation, shaking, or movement 6x user Buttons connected via GPIO expander Analog microphone to detect loud sounds Shutter button integrated into GPIO 0 Reset Button for board resetting or bootloader access Power Management LiPoly Battery charging support, compatible with 3.7/4.2V batteries On/Off Switch to manage power for battery use Programming and Debugging USB Type C port for programming, REPL access, and charging Breakout Pads for Hardware UART for advanced debugging Physical Specifications Dimensions – 63.6mm x 63.3mm x 13.0mm 4x M3 Standoffs for mounting or enclosure Weight – 29.0 grams The camera used in the module is an OV5640 – 5MP camera sensor with a JPEG encoder built-in. It has a 72-degree field of view and an auto-focus motor. The board uses Adafruit’s PyCamera code, and after taking a photo, it saves it directly to an SD card. Therefore, inserting an SD card into the device is essential for operation. The device offers various camera modes, including black and white, color, and solarized modes (both normal and inverted). It features a JPEG mode and a GIF mode for creating GIFs. Additionally, there’s a stop-motion mode, where you can see the previous image as a ghost-like overlay on the screen. When it comes to programming, this board supports Arduino and CircuitPython with code examples provided on GitHub. However, Adafruit recommends CircuitPython for its faster development time and easier use, especially with Adafruit’s supporting library. Source: MEMENTO is an ESP32-S3-based, CircuitPython or Arduino programmable DIY camera module ### mikroe.com – These are the new machines that tripled our production capabilities Let's take a look at our new machines (we mentioned them when announcing the WunderBar recently). YouTube is full of Christmas gift freak-out videos, with kids loosing themselves in episodes of hysterical happiness because they discovered an Xbox or something like that under the tree. Screaming and jumping around the room, completely loosing it. Although adults, some of us were on the verge of reenacting some of those YouTube classics. Most of all, it's the guys in the anti-static blue shirts that work in the manufacturing area. The occasion, of course, was the arrival of four brand new machines. These are the crown-jewels that adorn our manufacturing floor. It's top notch, world class equipment. Take a tour with us: Ersa Versaprint S1 Ersa is Europe's largest manufacturer of soldering systems. The Versaprint handles solder paste applications on PCBs. The machine has an integrated high resolution camera that performs automated optical inspection after the paste has been applied. The inspection process is performed at at a speed of 9,100mm2 , among the fastest in the world. The Ersa Versaprint feeds the PCB board straight to the Europlacer iineo, the star of the new production line: Europlacer iineo 2 This Pick and Place machine with its two turret heads with 12 nozzles can place an astonishing 28,000 components per hour. This is a considerable leap compared to our previous machine. It triples our production capacities. That level of productivity doesn't depend solely on the Pick and Place machine, it's the reflow oven where the soldering of the components takes place:   For more detail: mikroe.com – These are the new machines that tripled our production capabilities ### MINI-ITX BOARD WITH 9TH GEN INTEL CPUS FOR PERFORMANCE-INTENSIVE APPLICATIONS IBASE Technology Inc. (TPEx: 8050), a leading provider of industrial motherboards and rugged computing solutions, has launched the MI996 Mini-ITX motherboard that is powered by the latest 9th Gen Intel Xeon E and Core™ processors. Designed for a wide array of applications such as medical, industrial automation and kiosks, it supports integrated GPU and PCI-E x16 for a discrete graphics card to run simultaneous displays in four video outputs: eDP, HDMI (2.0a), Display Port and DVI-D. The compact MI996 is suitable for space-constrained applications and packs powerful functionality into a compact Mini-ITX form factor (170mm x 170mm). Enhanced I/O connectivity and expansion comprises six USB 3.1, four USB 2.0, four serial ports, four 4x SATA III, a Mini PCI-E, as well as two M.2 slots for NVMe storage and CNVi WiFi or Bluetooth connections. It features two Gigabit LAN and up to 32GB of DDR4-2666 SO-DIMM memory (ECC and non-ECC) for high-performance computing. Two model series of MI996 are available with the Intel CM246, QM370, and HM370 chipsets to support a range of Intel processors. Other advanced features include a watchdog timer, Digital I/O, iAMT (11.6) remote management, TPM (2.0) security, iSMART (3.8) green technology, and vPRO (MI996VF series). By consolidating superior performance, versatility and scalability, the MI996 enables system integrators to deliver a highly optimized embedded solution to their customers. Read more: MINI-ITX BOARD WITH 9TH GEN INTEL CPUS FOR PERFORMANCE-INTENSIVE APPLICATIONS ### Modern hardware transforms this 80s typewriter into a Linux terminal and ASCII art printer Bottom line: Repurposing obsolete hardware is a popular pastime among the tech community, and the latest project from the YouTube channel Artillect is a fine example of what's possible when thinking outside of the box. Is it practical? No, not really. Is it neat? Absolutely. Riley took a Brother AX-25 electronic typewriter from the late 1980s that utilizes a daisy wheel to print text and spruced it up with some modern hardware. The AX-25 features a 16-character LCD capable of editing documents stored on its 8kb of memory but of course, we can do better today. It's still a work in progress but at this stage, the typewriter is connected to a breadboard circuit with two multiplexers that are controlled by an Arduino Uno. The Arduino is connected to a Raspberry Pi over serial with a voltage divider in the middle to convert the Arduino's 5v output to 3.3v, thus preventing the Raspberry Pi from getting damaged. It is also connected to a laptop via USB. The link allows Riley to use the typewriter as a Linux terminal although admittedly, functionality is somewhat limited. https://youtu.be/JvhT_Bru0AA The contraption is quite handy for creating ASCII art, however, as Riley demonstrated. He didn't want to create a piece that was too detailed until he gets a replacement ribbon for the typewriter, but the small example looks great. Riley uploaded the code he wrote for the system to GitHub for those interested in tinkering around with their own project. There are even some examples of the typewriter for sale on eBay if you're looking for this exact model. The YouTuber eventually wants to turn the machine into a fully functioning computer, and the next step will be to hook up a keyboard to the Arduino so he doesn't have to use another computer to control it. We will keep an eye on this project to see how it evolves over the coming weeks and months. Source: Modern hardware transforms this 80s typewriter into a Linux terminal and ASCII art printer ### Modification of the Lexmark E260 for Direct Laser Printing of Printed Circuit Boards This is the second version of my E260 modification. It uses an ATtiny13 MCU to control the timing of the printer and make it possible to print double sided PCBs at home. As an electronic hobbyist and inventor I often need to make printed circuit boards (PCBs) in single or small quantities. Usually these are relatively simple circuits, an MCU, some input conditioning circuitry, some output circuitry, and usually they are single sided or perhaps double sided, with just a few vias. And usually I want them right now! Toner Transfer (TT) has become the method of choice for most hobbyists. A laser printer is used to print an image of the PCB on special “transfer paper” which is then placed on the bare copperclad board and either ironed on or run through a modified laminator to transfer the image to the copper. When the PCB is etched, the toner acts as a resist, preserving the copper below it while the rest of the copper surface is etched away. While TT works, it does have some problems. The process involves several steps, all of which are critical to success. Often there is pitting of large planes, and in many cases parts of the image don’t transfer, leaving gaps that have to be hand edited or completely redone. Trace widths under 10 mil, while achievable, are unreliable. Since we know that laser printer toner is a great resist for making printed circuit boards, I have long wondered why we use Toner Transfer, rather than printing directly on PCBs with a laser printer. After all, if the boards produced by transferring toner first to paper and then to PCBs works well, then putting the toner directly on the PCB should be even better! The main arguments against the viability of the process, aside from the mechanics of getting a thick board through a paper-thin path, seem to be (a) the drum is too fragile and will quickly be damaged by the boards, and (b) the copper will dissipate the static electricity charge needed to transfer the toner to the board. Over the last four years I have been experimenting with Direct Laser Printing (DLP), and it works! I have run hundreds of boards through my modified Lexmark E260 printer, and not only can I print on copperclad boards, I can print on aluminum sheets and other metals as well. Using Muriatic Acid/Hydrogen Peroxide etchant I can now make a PCB in under 15 minutes! I am still experimenting with the process, but trace widths down to 4-5 mil (.004-.005) seem to be readily accomplished. Mechanical registration of the PCBs seems adequate to make simple double sided boards, though I have not made a serious effort to investigate this. After trying several brands and models of laser printer, the printer I have settled on is the Lexmark E260. I use it because: 1 – It has an excellent Local Printer Utility that allows almost every printing parameter to be adjusted. 2 – It is readily and reasonably available on Ebay or Craig’s List. I paid $45 for each of the last two I bought on Ebay, including shipping. 3 – The drum is separate from the toner cartridge and is relatively inexpensive (<$30), so it can be replaced if it does become damaged. 4 – The printer has a manual feed slot in front so the paper path can be “flattened” with reasonable effort to pass PCBs. 5 – The charge on the drum seems to provide for essentially perfect transfer of toner to grounded metal sheets. Step 1: Parts and Tools Parts E260 Laser Printer - This can be a E260, E260d, E260dn. Ebay McMaster-Carr 1 x 4mm Stainless Steel Rod x 12" (1272T34) 6 x 4mm Shaft Collar (57485K64) 2 x 10mm OD x 4mm ID x 16mm long Aluminum Spacer (94669A814) 1 x 20" Extension Spring .187" OD .026" Wire (9665K15) 2x Adjustable Aluminum Spacer, .335ODx.260IDx.5 long (93441A215) 1x1x.062 Aluminum Angle x 12 inches (8982K39) 6"x24"x.016 Aluminum Sheet (89015K115) Copper Tape with Conductive Adhesive .250" x 18' (76555A711) Other Parts 2.7K ohm resistor various sources MCU Board see text Tools E260 Service Manual .9 mm hex key (McMaster 7289A32) Nibbling Tool (optional) see photo Dremel or similar rotary tool (optional) Shop vacuum Standard workshop tools - screwdrivers, wire cutters, small saw, soldering iron, etc. The table above has a parts and tool list for this project. Most of the parts are available at McMaster-Carr, but many can also be found at local hardware stores. You will need the E260 Service Manual for this conversion. For convenience, I have appended it below.   For more detail: Modification of the Lexmark E260 for Direct Laser Printing of Printed Circuit Boards ### Mr. Indecision - a small felt version of yourself that turns its head and looks at you using Arduino This is a tutorial on how to use 123D Catch to get a 3D scan of your whole body. Once you have the scan or "catch" the tutorial will take you through a technique to clean it up and manipulate it ready for 123D Make. The tutorial will go through how to slice the model in Make and prep it for Laser cutting. The tutorial will briefly cover how lazer cutting and integrating the componentry and Arduino to make the head turn. The tutorial will wrap up with some example code of what worked for me during this project. mr indecision from Richard Clarkson on Vimeo. Modern Day Puppet Master. You will need: -iPhone or iPad -123D Catch from the app store (free) -An assistant -A Computer -Meshmixer computer program (download for free here) -123D Make (download for free here) -Arduino Software (download for free here) - Arduino UNO   $29.95 - 2 x Sharp IR proximity sensor  $14.95 each - Standard Servo $12.00 - solid core wire  $2.50 - 9 VDC power adapter  $6.95 - pencil or chopstick - hot glue gun & glue sticks - patience & some Arduino experience are recommended for the 2nd half of this instructable. Step 1: Preparing the Catch For the catch of the your body you will need someone assist you. There are two approaches to the catch, with an iphone/ipad or with a digital camera & computer. In my experience I have found the iphone/ipad method to be the fastest & most reliable so that is the method I will explain  If you would like to know the other method (which is actually very similar) visit:http://www.123dapp.com/catch/learnFor the iphone/ipad approach download the (free) 123D Catch app from the app store 123D Catch App. Then create an account & log in. You (person being catched) should be sitting on a simple stool with enough room around them for the "assistant" (person assisting taking the catch) to walk around them taking photos keeping the catchee's body within the frame. The environment should be as evenly lit as possible but does not require studio quality backdrops or lights. The catchee should sit as still as possible and stare directly forwards with eyes closed. Step 2: Catching the body Open 123D Catch and tap "New Capture" at the center bottom of the screen. Taking a photo by taping the camera icon the assistant walks around  the catchee taking photos of the catchee from the chest  every  keeping the catchee's body within the frame. The aim would be to get 10-15 photos for every lap around the person and to have 3 laps; one from the floor looking up , one at the waist-chest level looking strait on, and one above looking downwards. Once the catcher has completed the 3 laps and the image count is between 25-35 tap the "Review" button in the bottom right corner. Then tap Finish Capture button in the top right hand side. Makerbot has some good tips on catching here. Tinkernut also has a very nice you tube clip of the whole process Weekend Hacker: Turn Photos Into 3D Models Step 3: Catching the Head Follow the Steps from the previous step but this time focus in on just the head. The details of the persons head is often lost in full body catches, so by doing an additional catch of just the head we can merge the two catches later to get the best result. Major Components in Project– Arduino UNO   $29.95 – 2 x Sharp IR proximity sensor  $14.95 each – Standard Servo $12.00 – solid core wire  $2.50 – 9 VDC power adapter  $6.95 Solderless Breadboard (optional) Clay or Bluetack   For more detail: Mr. Indecision - a small felt version of yourself that turns its head and looks at you using Arduino ### MULTIPLE DIMMING ISOLATED PWM CONTROLLER FOR HIGH-PERFORMANCE LED LIGHTING Diodes Incorporated announced the availability of the versatile dimming input controller for offline LED lamps. AL8116 works with three types of dimmer signal formats: 0 to 10 V dimming voltage PWM (Pulse Width Modulation) signal Simple potentiometer It converts these to a PWM output signal which can easily be used to provide an isolated dimming control via an optocoupler to the primary side LED driver. Features Wide VCC Operating Range 10 V to 56 V Low Operation Current (Typical 600 μA) Precision Dimmer Type with Voltage Potential: 0/1 V to 10 V PWM Dimming: 0.2 kHz to 10 kHz Potentiometer: 0 to 100 kΩ Adjustable Bias Current Source of DIM Pin Accurate Output Duty Cycle Tolerance ±2.5% Adjustable Minimum Output PWM Duty Clamping: 8%, 6%, 4%, and 2% Built-In Over Temperature Protection for Chip Totally Lead-Free & Fully RoHS Compliant The AL8116 has a wide supply voltage range from 10 V to 56 V. The AL8116 Output Duty Cycle accuracy is typically ±2.5% and its minimum Output Duty cycle can be set through a CLAMP pin resistor. Read more: MULTIPLE DIMMING ISOLATED PWM CONTROLLER FOR HIGH-PERFORMANCE LED LIGHTING ### AXIOMTEK LAUNCHES A 15-INCH ULTRA SLIM FANLESS TOUCH PANEL COMPUTER – GOT115-319 Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to introduce the GOT115-319, a 15-inch fanless touch panel computer with a thickness of only 50 mm for used in space-constrained environments. It is powered by the Intel® Celeron® processor N3350 or Intel® Pentium® processor N4200 with the Intel® GFX controller onboard. The GOT115-319 has a 15-inch XGA TFT LCD display with a projected capacitive multi-touch or resistive touch optional touchscreen, 300 nits of brightness and LED backlight. It is a cost-effective solution to achieve a high degree of stability and adaptability for use in multimedia kiosks or as a human machine interface (HMI) for smart manufacturing and rugged retail fields. Axiomtek’s 15” XGA GOT115-319 has 1024 x 768 resolutions. It has five programmable OSD function keys on the front panel for users to easily adjust LCD on/off, brightness and volume. Moreover, this compact touch panel computer offers easy access to storage and RAM,” said Frank Chang, a product manager of Product PM Division at Axiomtek. “The robust industrial touch panel PC GOT115-319 has an ultra-slim housing for use in space-constrained environments. It can operate reliably in harsh environments with its wide operating temperature of 0°C to +50°C and vibration endurance for up to 2G. The GOT115-319 features rich I/O connectivity. It is equipped with two GbE LAN ports, two USB 2.0 ports, two USB 3.0 ports, one RS-232 port and one RS-232/422/485 port with RI/5V/12V which is selectable by BIOS and one Line-out. Other features include one power button, one remote power switch and one screw-type connector for power. In addition, there is an easily accessible external switch for AT/ATX mode selection and built-in speakers and microphone for multimedia applications. The GOT115-319 supports one full-size PCI Express Mini Card slot and one M.2 Key E slot for RFID and wireless network module installation. The ultra-slim panel computer is equipped with one 204-pin DDR3L-1600 SO-DIMM with up to 8GB of memory capacity. It also offers one 2.5″ SATA HDD/SSD, one mSATA and one MicroSD card for storage. To meet diverse installation requirements, it supports panel mount, wall mount, VESA arm and desktop stand. Read more: AXIOMTEK LAUNCHES A 15-INCH ULTRA SLIM FANLESS TOUCH PANEL COMPUTER – GOT115-319 ### AXIOMTEK INTRODUCES NA591-34-LAN 1U RACKMOUNT NETWORK APPLIANCE PLATFORM WITH INTEL® XEON® E-2200 AND 9TH/8TH GEN INTEL® CORE™ PROCESSOR Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to release the NA591, an advanced 1U rackmount network appliance platform with a maximum of thirty-four LAN ports. This high-performance network appliance system is powered by the Intel® Xeon® E-2200 and 9th/8th gen Intel® Core™ i7/i5/i3 (Coffee Lake/Coffee Lake Reflash) processors with the Intel® C246 chipset. The NA591 comes with four expandable LAN module slots that support 1GbE/10GbE/25GbE/40GbE/Fiber/Copper/LAN Bypass interfaces, greatly enhancing its flexibility and scalability. This scalable 1U network appliance platform delivers security, stability and reliability for VPN, firewall, network bandwidth controller, WAN accelerator and surveillance system applications. “Axiomtek’s NA591 features optimized computing power and virtualization capacity in a compact 1U form factor. It provides stable, reliable and non-stop network operation for a wide range of applications in industrial cybersecurity,” said Bruce Cheng, a product manager of Product PM Division at Axiomtek. “This outstanding network security appliance features Intelligent Platform Management Interface (IPMI) to allow administrators to monitor system health and manage systems. Trusted Platform Module (TPM) is supported to bolster hardware-based data protection. Moreover, it features latch-type LAN Bypass functions for fail-over option as well as featuring BIOS console redirection. The NA591 is an ideal platform for network security, cloud computing and data centers applications.” The NA591 is equipped with four DDR4-2666 U-DIMM slots with a memory capacity of up to 128GB. It also offers two 2.5” SATA HDD and one mSATA for adequate storage. The rackmount network communication platform has two USB 2.0 ports, one serial console port and one VGA port. To ensure reliable operation, the well-developed NA591 supports watchdog timer featuring 255 stepping for system reset and 8 stepping for LAN Bypass. The high-performance network appliance platform is compatible with Linux operating systems. Advanced Features: LGA1151 socket 9th/8th gen Intel® Core™ i7/i5/i3 & Xeon® E-2200 processor (Coffee Lake/Coffee Lake Reflash) 4 DDR4-2666 U-DIMM for up to 128GB memory up to 34 GbE LAN ports 4 expandable LAN modules supporting 1GbE/10GbE/25GbE/40GbE/Fiber/Copper/Bypass for optional Supports 1U redundant power supply for optional Supports IPMI and TPM for optional Read more: AXIOMTEK INTRODUCES NA591-34-LAN 1U RACKMOUNT NETWORK APPLIANCE PLATFORM WITH INTEL® XEON® E-2200 AND 9TH/8TH GEN INTEL® CORE™ PROCESSOR ### AXIOMTEK’S COM EXPRESS TYPE 6 MODULE WITH ENHANCED GRAPHICS PERFORMANCE – CEM521 Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is announcing the CEM521, a COM Express Type 6 compact form factor module powered by the latest 8th generation Intel® Core™ i7/i5/i3 processor or Intel® Celeron® processor 4305UE (codename: Whiskey Lake-U). It is suitable for harsh operating conditions with an extended operating temperature range of -40°C to +85°C (-40°F to +185°F). The 4K-ready system on module was designed for graphics-intensive Industrial IoT applications including industrial control system, medical imaging, digital signage, gaming machines, military, and networking. The palm-sized CEM521 is packed with a variety of rich features including low power consumption, industrial temperature support and high graphic processing capability. The COM Express Type 6 compact module supports two DDR4-2400 SO-DIMM sockets for up to 64GB of system memory. The power-efficient CEM521 is also integrated with Intel® Gen 9 graphics and supported with DX12.0, OCL 2.0 and OGL 4.3 for excellent graphics performance with a resolution of up to 4K (4096 x 2160 @ 30 Hz). It offers three independent display support through one LVDS, one VGA and one DDI ports for HDMI/DisplayPort. Advanced Features: 8th gen Intel® Core™ i7/i5/i3 and Celeron® processors (codename: Whiskey Lake-U) 2 DDR4-2400 SO-DIMM for up to 64GB of memory up to 8 lanes of PCI Express 3 SATA-600 4 USB 3.0 and 8 USB 2.0 TPM 2.0 supported Read more: AXIOMTEK’S COM EXPRESS TYPE 6 MODULE WITH ENHANCED GRAPHICS PERFORMANCE – CEM521 ### AXIOMTEK’S EBOX710-521-FL – A WORKSTATION-GRADE FANLESS EMBEDDED SYSTEM FOR EDGE COMPUTING Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is proud to unveil its eBOX710-521-FL, a fanless embedded system powered by the workstation-grade Intel® Xeon® processor with the Intel® C246 chipset. It is also capable of offering the best quality imaging with triple independent displays. To meet different needs in automation industry, the eBOX710-521-FL has a flexible I/O window slot for ease of customization and two swappable 2.5” SATA HDD drive bays with Intel® RAID 0&1. The durable embedded system was designed to operate reliably in industrial environments with a wide operating temperature range of -40°C to 70° and vibration endurance for up to 3G. It is well-suited for machine learning, deep learning, intelligent surveillance, robotic control, edge computing, and more AIoT applications. The eBOX710-521-FL features scalable CPU options with the Intel® Xeon® processor, 9th/8th generation Intel® Core™ or Intel® Celeron® processor to satisfy a range of performance requirements and price points. It is equipped with two 260-pin DDR4-2666 ECC/non-ECC SO-DIMM slots for up to 64GB of system memory. The workstation-grade embedded system offers complete expandability and full featured I/O, including two RS-232/422/485, one DVI-I, one HDMI, one DisplayPort, four USB 3.2 Gen2, two USB 3.2 Gen1 and six Gigabit Ethernet port. It also offers a Phoenix-type VDC power input connector, one AT/ATX quick switch, one ATX power switch, one reset switch, and one remote switch. In addition, it comes with two full-size PCI Express Mini Card slots, two SIM slots and four SMA-type antenna openings for 3G/4G, GPS, Wi-Fi, Bluetooth or other RF connections. Advanced Features: Intel® Xeon, 9th/8th gen Intel® Core™ i7/i5/i3 or Intel® Celeron® processor (codename: Coffee Lake Refresh) 2 DDR4 ECC/non-ECC memory supported for up to 64GB Dual swappable 2.5″ SATA HDD drive bays with RAID 0 &1 DVI-I, HDMI, and DisplayPort with triple-view supported 6 GbE LAN, 6 USB 3.2 and 1 PCIe x4 expansion slot Flexible I/O window supported “Axiomtek’s eBOX710-521-FL delivers enhanced workstation performance with the latest Intel® Xeon® processor. This dependable embedded system supports ECC memory to enable automatic detection and repair of memory errors, reducing the possibility of system crashes and data corruption to ensure reliable and responsive workstation performance. To fulfill diverse requirements in automation applications, this flexible embedded system also comes with one PCIe x4 expansion slot which can support different types of I/O cards,” said Janney Lee, a product manager of Product PM Division at Axiomtek. ”Besides, the industrial-grade embedded system is compatible with Windows® 10 IoT and Linux operating systems.” Read more: AXIOMTEK’S EBOX710-521-FL – A WORKSTATION-GRADE FANLESS EMBEDDED SYSTEM FOR EDGE COMPUTING ### AXIOMTEK’S EMBEDDED VISION/AI MOTHERBOARD WITH REAL-TIME VISION I/O AND POE – MIRU130 Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to introduce the MIRU130, a high-end embedded vision and AI motherboard optimized for machine vision and deep learning applications. It is powered by the onboard AMD RYZEN™ Embedded V1807B/V1605B processor with AMD Radeon™ RX Vega graphics. The embedded vision board has two PoE GbE LAN ports for camera interfaces and an integrated real-time vision I/O that includes 4-CH isolated DIO. The MIRU130 was designed to help developers to deploy vision-based AI applications faster and easier. The size of MIRU130 is 244 x 170mm – the size between Micro-ATX and Mini-ITX form factor, which provides customers with the convenience of finding chassis on the market. Its vision-specific I/O integrates 2-CH trigger input, 2-CH LED lighting controller, 2-CH camera trigger output and an encoder input for conveyor tracking. Furthermore, the MIRU130 is integrated with AMD Radeon™ RX Vega graphics with support of DirectX 12 and offers dual display capability through one HDMI and one DisplayPort interfaces. “According to MarketsandMarkets Research, the global computer vision market size is expected to grow from USD 10.7 billion in 2020 to USD 14.7 billion by 2025, at a CAGR of 6.5% during the forecast period. The major driver for the growth of the computer vision market is the growing demand for automated vision inspection and increasing adoption of vision-guided robot systems,” said Michelle Mi, product manager at Axiomtek. “The MIRU130 comes with two IEEE 802.3at PoE ports and two GbE LANs for connecting industrial cameras. Its vision I/O integrates a full range of isolated I/O interfaces and real-time controls essential which bring accurate interaction between lighting, camera, actuator and sensor devices. The motherboard is a multi-function embedded solution that addresses the needs and requirements of the computer vision market.” Read more: AXIOMTEK’S EMBEDDED VISION/AI MOTHERBOARD WITH REAL-TIME VISION I/O AND POE – MIRU130 ### AXIOMTEK’S HIGH-PERFORMANCE FANLESS EMBEDDED SYSTEM WITH FRONT-ACCESSIBLE DESIGN – EBOX640-521-FL Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to announce the eBOX640-521-FL, its new high-performance fanless embedded system powered by the 8th generation Intel® Core™ i7/i5/i3 and Celeron® processor with the Intel® H310 chipset (codename: Coffee Lake). This outstanding embedded system features a wide choice of front-accessible I/O interfaces for easy cabling and maintenance. It also has a flexible I/O window for ease of customization for versatile applications and customer requests. The eBOX640-521-FL is a great choice for smart production, machine automation, product testing, smart warehouse and AIoT-related applications. With its IP40-rated heavy-duty aluminum extrusion and steel case, the durable box computer can run in harsh environments with a wide operating temperature range of -10°C to +50°C and vibration endurance for up to 3G. “Axiomtek’s eBOX640-521-FL features front I/O design to fit in space-limited environments where rear access is restricted. In addition, the reliable embedded box PC comes with a flexible I/O window design for maximizing the utility in the automation applications. To achieve great wireless communication capabilities, the eBOX640-521-FL offers one PCI Express Mini Card slot and one M.2 Key E 2230 socket,” said Janney Lee, product manager of Product PM Division at Axiomtek. “Besides, the Intel® Core™-based embedded PC is compatible with Windows® 10 IoT and Linux operating systems.” Continuing the design elements of the eBOX640 series, the eBOX640-521-FL offers rich I/O connectivity including one RS-232/422/485, one RS-232, two Gigabit Ethernet, two USB 3.0, four USB 2.0, one audio (Line-out), one DisplayPort, one HDMI, one 8-CH DIO and four SMA-type antenna openings. This industrial-grade embedded system also features a wide range 12/19 to 24 VDC power input with a DC-Jack connector. It offers dual DDR4-2400 SO-DIMM slots for up to 32GB of system memory. Meanwhile, the compact yet rugged system has dual 2.5” SATA HDD drive bays to enhance the storage capacity. Read more: AXIOMTEK’S HIGH-PERFORMANCE FANLESS EMBEDDED SYSTEM WITH FRONT-ACCESSIBLE DESIGN – EBOX640-521-FL ### Automating A Home Snowmaker Using An Avr Microcontroller Before describing how the automated system functions, it is important to describe the science of snowmaking in general and to define a few key terminology that will appear often in the remaining sections of the text. Although the science of snowmaking is complex, for the purposes of this study, just a quick summary is required. The process of creating snow is essentially one of heat exchange. Tiny water droplets need to have enough heat removed from them in order to transform into ice crystals in the time it takes for them to fall to the ground in order to become snow. This process can occur due to a number of factors. The ambient air temperature is the first and most noticeable factor. The water must be sufficiently heated by the air for freezing to take place. The air temperature is simply one aspect of the situation, however. A water droplet's capacity to freeze is significantly influenced by the relative humidity of the air. This is caused by evaporative cooling; a little quantity of heat is lost from the droplet as water evaporates from its surface. Humidity has a significant effect on snowmaking efficiency, as relative humidity is related to evaporation rate (Pittman, 2003). 29°C and 10% humidity yields the same snowmaking efficiency as 20°C and 100% humidity (SnowAtHome wet bulb temperature chart). The combination of temperature and humidity that reflects the evaporation effect of water is called the wet bulb temperature. The name "wet bulb" refers to the temperature read by an old-fashioned mercury thermometer when the bulb is dampened with a cloth and dried. The thermometer reading therefore reflects both the ambient air temperature and the rate of evaporation allowed by the relative humidity. Wet bulb temperature is the most important factor in snowmaking and is mentioned several times later in this paper. Snowmaking, another concept related to nucleation, is important to understand. For water to freeze, it needs a "core" in which ice crystals can grow. You may wonder why you can't make snow using only regular small water droplets such as pressure washers and sprinklers. is related to the time it takes for a to freeze. When a tiny cluster of water droplets turns into ice and forms a "embryo" that serves as the foundation for future crystal formation, homogeneous nucleation takes place in pure water. At - 40 degrees Fahrenheit, homogeneous nucleation starts to happen in pure water. In contrast, heterogeneous nucleation uses an outside substance as the embryo for crystal formation. At far greater temperatures than homogeneous nucleation, heterogeneous nucleation normally takes place. The alien embryo's size and material composition affect the precise temperature. Nucleation temperatures for tap water normally range from 15 to 20 degrees Fahrenheit (Pittman, 2003). Tap water needs assistance in addition to the chilling effects of the surrounding air in order to achieve its nucleation temperature and turn into snow in a matter of seconds. Compressed air, which is utilised in almost every snow machine, whether commercial or not, provides this. Air that has been compressed expands yet quickly cools. The majority of snowmaker designs also incorporate one or more "nucleator nozzles," which are nozzles that hold water combined with compressed air in enormous quantities. The air/water mixture rapidly cools and essentially quickly freezes as it leaves the snowmaker. The larger droplets from the water-only nozzles combine with the frozen "nucleator" droplets to form a nucleus around which the larger droplets can freeze. As a result, the nucleator nozzle is an essential part of the design of snowmakers, and compressed air is the key to its operation (Pittman, 2003). Home Snowmaking System Characteristics Figure 1. Figure 1.View of the SG6 snowmaking head in action. The majority of the water flow is expelled from the two higher nozzles, which are called "bulk" nozzles. Water and air are mixed at the lowest nozzle. The almost instant freezing of the droplets from this nozzle provides the droplets from the other nozzles a nucleus to freeze around. This image was captured with the top nozzle partially clogged, which led to the uneven flow between the upper two nozzles. Ski areas typically employ massive water pumps and air compressors to power their snowmaking systems. Home snowmakers typically replace these large pieces of equipment with smaller versions, typically pressure washers for water pumps, and medium to large oil lubricated air compressors. The actual snowmaker is sometimes constructed from car wash nozzles and piping components. A spray of tiny water droplets is produced by the high-pressure water coming from the car wash nozzles. To create quick-freezing nuclei for the water from the top bulk nozzles to freeze around, compressed air is combined with a smaller stream of water, either internally or externally. 3 different snow machines from SnowAtHome are offered, each with a different output capacity that ranges from 1.3 gallons per minute (gpm) to 8 gpm (for comparison, the SMI super wizard, common at many ski areas, has a maximum output of 150 gpm). The SG6 snowmaker is the one utilized in the system described in this study. Two higher "bulk" nozzles and a single nucleator nozzle make up the SG6, as seen in Figure 1. It can move between 1.3 and 4.0 gpm of water. It needs an air compressor that can pump out at least 5.5 cubic feet per minute (cfm) at 90 pounds per square inch (psi). This system uses an AR Blue Clean 1600 psi pressure washer pump with a 1.6 gpm output. With an output of 5.5 cfm at 90 psi, the air compressor is a Campbell Hausfield Extreme Duty air compressor. Since the nucleator nozzle is an external mix nozzle, the external mixing of the air and water that results in the rapidly freezing atomized droplets is achievable. Internal mixing frequently results in inconsistent air/water mix ratios that need to be regularly adjusted in order to maintain a proper balance. External mixing, on the other hand, provides a number of advantages over internal mixing. The size of the nozzles determines the air/water ratio in external mixing, which then stays constant. Furthermore, with internal mixing, the air compressor may flood with water from the pump if it shuts off for any reason, frequently resulting in irreparable damage. By maintaining a straight separation between the routes of the air and the water, external mixing prevents this. A head constructed of extruded aluminium with radiating fins on the rear is yet another feature of the SG6 snowmaker. The solid aluminium acts as a heat sink; as a result, the temperature of the water coming from the spigot is somewhat cooled by the surrounding atmosphere. Additionally, the solid metal acts as a heat source for the snow gun head, preventing ice from forming on it. With handmade snow cannons, ice buildup is a frequent issue that frequently demands the user de-icing the nozzle head every few hours. This problem is virtually eliminated by the aluminium head, which raises the SG6's potential for autonomy. Several changes were made to the system itself to improve its dependability and independence potential. To begin, a water filter was connected to the pump's input. This was done to safeguard the pump as well as the snowmaker, which has clogging-prone nozzles. Second, the air and water hoses were extended from 10 feet to 100 feet so that they could readily reach the snowmaking area from the garage where the equipment is located. The hose extension was definitely essential for automation, which is far less problematic if all of the equipment under the system's control is in one location rather than scattered across the yard. However, there is one significant disadvantage to extending the air and water hoses. The air hose, despite common belief, is the most likely to freeze during operation. When air is compressed, moisture in it condenses. Because the air hasn't had time to cool down after its initial compression, condensation is typically not an issue when the air line is short. When the pipe is stretched, however, the air cools and the condensed liquid within freezes. Ice forms in the hose over time and, after a few hours, fully seals it off. The consequent shortage of air is harmful to the snow maker's operation, which requires compressed air for optimal nucleation. So,It is normally important to give a source of heat to the air hose if it is to be stretched. One method is to wrap a heated wire around the exterior of the hose. This approach works well for keeping ice out of the hose, but it requires more energy and can be difficult to maintain. Another very simple approach is to just connect the air and water hoses within a sleeve of pipe insulation. The heat from the domestic water supply keeps the air hose from freezing. It is also lot easier to handle with one main pipe rather than two while setting up or moving the snowmaker. A picture of the hoses connected together in this manner is shown in Figure 2. Figure 2. Figure 2. The air and water hoses are wrapped in an insulating sleeve so that the heat from the water prevents the air hose from freezing. Automation System Layout and Hardware Description Figure 3. Figure 3. All of the components of the automated snowmaking system are represented in a schematic diagram. The power sources for the air compressor and pressure washer are both controlled by solid state relays. A solenoid valve controls the water supply. A DHT temperature and humidity sensor is used to read temperature and humidity digitally. Before entering the pressure washer, the water flow is calculated using an Adafruit flow sensor. An Atmega328p microcontroller is used to implement the control sequence. Figure 2 is a schematic diagram of the full snowmaking system, including the automation components. The complete control sequence is built on an Arduino Uno microcontroller board, which has an AVR Atmega328p microprocessor. The microcontroller connects with a DHT22 humidity and temperature sensor, which delivers a readout every 2 seconds to assess if the circumstances are suitable for snowmaking. An Adafruit flow sensor is used to measure the water flow, sending a pulse to the microcontroller for every 2 mL of fluid that passes through. Monitoring the water flow is crucial for the pump's safety; if the water stops flowing for any reason, the pump will burn out if left running. The water flow is regulated by a solenoid valve, which the microcontroller may switch on and off. The microcontrollers use solid-state relays to operate the air compressor and pressure washer. A master power switch turns the machine on or off (in standby mode). We normally use OP AMPS for noise filter on analog sensors. Here is a free e-book by MIT covering this topic op amps for everyone. Most common is First-Order Noninverting Low-Pass Filter First-Order Noninverting Low-Pass Filter Here you can find high grade Instrumentational OP Amps list.       Figure 4. Figure 4. The DHT22 temperature and humidity sensor, is shown mounted on a wooden post outside of the control room. The DHT22 temperature and humidity sensor, shown in Figure 4, is a digital sensor with its own microcontroller. It was selected because to its inexpensive cost and relative accuracy. Temperature measurements in degrees Celsius are accurate to within 0.5 degrees Celsius. Its relative humidity values are accurate to 4% relative humidity, which is suitable for our job. Reading the DHT sensor necessitates a precisely scheduled procedure that entails delivering a series of start pulses and then reading the return 40-bit signal, which comprises the temperature, humidity, and a parity byte. Appendix A contains a detailed explanation of the DHT.h library used in this project to connect with the DHT sensor. The Adafruit flow sensor is used in this project to ensure that water is always flowing to the pump. A revolving wheel in the sensor is rotated by flowing liquids. Every time the wheel revolves, a pulse is supplied across its data line, which the microcontroller may process. The flow rate through the sensor may be calculated by counting the number of pulses during a specific time period. The manufacturer claims that the sensor has an accuracy range of 10%. However, because the system just needs to know if water is flowing or not, the Adafruit sensor's precision, although not perfect for more delicate applications, is more than acceptable. Appendix B contains complete documentation for the flow sensor.h file created for this project. A solenoid valve regulates the flow of water. To operate, the solenoid valve requires 12 Volts DC. Because the microcontroller can only produce 5 volts DC, extra circuitry is required to allow the valve to be controlled by the microcontroller pin. To protect the microcontroller from the back EMF created when the solenoid valve is turned off, a transistor and a kickback diode are used. Appendix C has a complete description of the circuit. Likewise, an extra power source is required to run the air compressor and pressure washer. The microcontroller controls these 120V devices through two solid-state relays. Figure 5. Figure 5. A picture of the wiring that has been completed to allow the microcontroller to interact with the sensors and control devices. The Arduino microcontroller board is on the far left. The breadboard is immediately to the right, where connections between the microcontroller and peripheral devices are established. The solenoid valve circuit is located on the breadboard's far left (explained in Appendix C). To the right of that are connectors for reading the DHT sensor and the flow sensor. In the centre are two indication LEDs, one for problems and the other for when the system is turned on and functioning. The connections to power the two relays are established on the breadboard's far right. As part of this project, all of the electrical wiring was done by hand. All of the data lines (purple in Figure 3) were wired using 20 gauge solid copper core "doorbell" wire. On a single bread board, the circuits that allowed each device to connect with the microcontroller were constructed. A single "control panel" held the bread board, microcontroller, and relays. Figure 5 depicts the full configuration. More information on the solenoid valve circuit may be found in Appendix C. Note: Instrumentational OP Amps can be used if you want to add extra Program Details The Atmega328p may be programmed in a variety of languages, including Assembly, C, C++, and Arduino, each of which provides unique capabilities and degrees of capability. On the one hand, programming in Assembly enables direct control over the hardware, which typically results in very efficient applications, but also takes careful preparation and detailed understanding of the microcontroller's design to utilise successfully. The Arduino programming language, on the other hand, requires relatively little understanding of the inner workings of the microcontroller, and complicated procedures may be accomplished in only a few lines of code thanks to its rich library support. However, Arduino applications are frequently inefficient and restricted in their capabilities. Taking the foregoing into account, C was chosen as a good compromise between efficiency and ease of programming. The programme that implements the automation sequence on the microcontroller is written in C on a laptop, built by the AVR-GCC compiler, then uploaded using the AVRDUDE command line software using the microcontroller's USB interface. AVR-GCC is a cross-compiler that allows the microcontroller to be written in pure C while still providing AVR features such as interrupt vectors and extra data types. The file avr/io.h contains a lengthy number of macros that may be substituted for the actual addresses of the special function registers, considerably boosting programming efficiency and code readability. The software is broken down into three files: DHT.h, flowSensor.h, and SG6auto.c. For debugging reasons, a serial.h file is also provided. All three files, as well as the implementation of the.h files, are fully explained and illustrated in the order given above in Appendices A-D. The files, with the exception of SG6auto.c, are libraries created to facilitate the usage of a specific device in any programme. Separating them into separate files makes it easier to test each individual component and increases portability into other programmes. It also improves code readability by dividing it into different sections with specialised functions. To improve readability, comments were freely employed. Program flow Figure above. Flow chart outlining the control sequence implemented in SG6auto.c (code included in Appendix D). Figure 3 is a flow chart that outlines the control sequence. At its core, the functioning is fairly simple: if it’s cold enough to make snow, turn the system on, if it isn’t, turn it off. Furthermore, the programme is continually monitoring to ensure that water is flowing to the pump. If not, the system is instantly shut off. Appendix D contains the complete implementation of the control sequence in SG6auto.c. The system is turned off when it boots up. The temperature and humidity of the DHT sensor are read every minute using the DHT's readTemp() and readHumidity() methods from DHT library. The getWB() method is used to calculate the wet bulb temperature from the data. If the wet bulb temperature exceeds 27 degrees (the maximum reasonable temperature for snowmaking), the system remains turned off. If the wet bulb temperature is more than 28 degrees, the water is switched on. This is due to the fact that, while snowmaking is ineffective above 28 degrees, water may still freeze. As a result, water is pumped through the system to keep it from freezing. This is obviously inefficient, thus adding a heating wire to the pipes to avoid freezing when the system is turned off would be a significant improvement to system. The turnOn() procedure is triggered if the system is turned off and the wet bulb temperature is at or below 27 degrees. First, the air and water are switched on. The flow meter is then read once every sixty seconds for sixty seconds. If water is detected, the pump is activated. If no water is detected after sixty seconds, the machine is shut down and a failed starting error is shown. The pump is around ten hose-feet away from the water source; if water isn't flowing in sixty seconds or less, either the solenoid valve isn't operating correctly or there is a clog in the water line (most likely ice). Either way, the system should not be turned on until the problem is fixed. The system is in the ON state if it boots up successfully. When the programme is turned on, it checks every second to ensure that water is still flowing to the pump. If water stops flowing for whatever reason, the system is promptly turned off and a water flow interruption error is shown. The system stays in the on state if water is flowing and the wet-bulb temperature remains below 27 degrees. If the wet-bulb temperature exceeds 27 degrees, the system shuts off. The pump is shut off first, followed by the air, and then the water. There are three error modes- ERROR1, ERROR2, and ERROR3, indicated respectively by an LED blinking once, twice, and three times in succession followed by a one second pause. When the system enters an ERROR state, the software stays in that state until a reset is initiated outside. ERROR1 is a DHT-read error that occurs when the temperature sensor gives an incorrect reading (see Appendix A). ERROR2 indicates a failed starting, while ERROR3 indicates a water flow interruption. The same LED used to identify fault modes is turned on when the system is switched on and off when the system is shut off during normal operation. Appendix A – Reading from the DHT22 Sensor The DHT22 is an Adafruit digital temperature and humidity sensor. It measures temperatures to within  ± 0.5 degrees Celsius and humidity to within 4% relative humidity. The DHT22 datasheet has full information. The DHT.h library implementation is provided in the source code below. The sensor adheres to a specific communication protocol. The microcontroller sends a start pulse to the sensor to start the read sequence. The sensor reacts with its own pulse, which is followed by a 40-bit signal including the temperature, humidity, and a parity byte. The first byte of the signal indicates the humidity reading's integer part, while the second byte is its decimal portion. Similarly, the temperature reading is made of the third and fourth bytes. The fifth byte is a parity byte, and if the reading is right, it will equal the total of the preceding four bytes. Only once per two seconds can the DHT sensor be read. An error will occur if the sensor is read before two seconds have passed since the last reading. Appendix A – Reading from the DHT22 Sensor: Appendix A – Reading from the DHT22 Sensor Appendix B – Reading from the Adafruit Flow Sensor The Adafruit flow sensor is a simple gadget that can detect the rate of flow via itself with a 10% degree of accuracy. A wheel inside the sensor should revolve once for every 2.25 mL of fluid that goes through it. Each time the wheel is turned, a +5 Volt pulse goes down the data line, which the microcontroller can read. The frequency of rotation of the wheel determines the duration of the pulse. The flowSensor.h getFlowrate() method polls the flow sensor pin at one second intervals and counts the number of pulses before converting the number of pulses per second to gallons per minute. The function then returns the outcome of the calculation. Appendix B – Reading from the Adafruit Flow Sensor: Appendix B – Reading from the Adafruit Flow Sensor   Appendix C - Supporting Circuitry for the Solenoid Valve Figure C.1.The circuit that allows a microcontroller pin to switch on and off a solenoid valve. A 1KW resistor connects the microcontroller pin to the base of the NPN transistor. When the pin is turned off, a 1N4001 is utilized as a kickback diode to protect the remainder of the circuit from the back EMF created by the solenoid valve. Figure C.1 demonstrates the circuit used to interact the microcontroller with the solenoid valve. Two constraints inspire the circuit. First, the microcontroller is incapable of supplying enough current to power the solenoid valve. As a result, the pin is linked to the base of a TIP120 Darlington transistor, which controls current from a 12 Volt DC power supply to operate the solenoid valve. Moreover, when switched off, the solenoid valve functions as a huge inductor, creating a strong back EMF that might cause considerable damage to the microcontroller's circuitry. To counteract this, a 1N4001 kickback diode is incorporated, preventing electricity from flowing back to the microcontroller. As a result, the microcontroller may securely operate the solenoid valve. Appendix D – Control Sequence Documentation Appendix D – Control Sequence Documentation: Appendix D – Control Sequence Documentation ### Autonomous Control of RPM of Engine Using Feedback System From a IR Based Tachometer There is always a need for automating a process,be it a simple/monstrous one.I got the idea to do this project from a simple challenge that i faced while finding methods to water/irrigate our small piece of land.The problem of no current supply lines and costly generators (to operate our pump) added to the difficulty. So what we decided to do is device a method which would be cheap and easy to use,even by a worker.We decided to mount the pump on our old scooter(running condition) and run it using the shaft of the scooter wheel.All fine and good,we made the mechanical assembly and the belt drive and tested it,and it was a success. But another problem was that,when the motor was running,a person always had to be near the scooter to monitor the RPM,and manually adjust it using throttle.So this project was made by us so that the worker can set the desired RPM he wants to make the engine run,and attend to other work in the farm. The setup consists of : A IR based tachometer(to measure RPM). A keypad to enter the RPM. A LCD display to show the monitored RPM and current RPM. A Stepper motor to increase/decrease the throttle. Finally,a micro-controller to manage all these processes. Step 1: Arranging the Required Parts Previously,I just gave the overview of what the components would be. The actual components required are: A micro-controller(I used an Arduino Mega 2560). A L293D motor driver IC(or a breakout board will do). A 16 X 2 LCD display. An infrared/proximity sensor (model number is STL015V1.0_IR_Sensor) A uni-polar stepper motor ( I used a 5 wire stepper motor,12 V). A 4 X 4 Keypad. Couple of 220 ohm,1000 ohm resistors. A 10k potentiometer. Connector wires,colored wires,stripper. Breadboards. A 12V battery to power the stepper motor. A 5V supply to power Arduino. And thats all you need to get started,folks! Step 2: Overall Flow of Process The flow of the process is as follows: The setup is switched on and wait till calibration of all device is done. The user shall input the required RPM using Keypad. The homing of the motor takes place.This is usually done so that a constant reference point is dictated to the motor so that when the setup is switched on,the initial position of motor is always constant and taken as reference point. Switch on the engine/any machine which shall rotate a wheel. The measurement of the RPM takes place and it displays on the LCD. This is where the feedback system comes into picture.If the detected RPM is less than the desired RPM,the stepper motor steps so that it increases the throttle If the detected RPM is more than the desired RPM,the stepper motor steps so that it decreases the throttle. This process takes place until the desired RPM is reached,when reached,the stepper stays still. The user can switch off the system if required using a master switch. Step 3: Making the Required Connections Connections for the stepper motor: Since i am using a 5-Wire stepper motor,4 wires are for energizing the coils and the other one is connected to the ground.It is not always necessary that the order of the 4 wires coming out of the motor is the same order to energize the coils.You must manually find out the order by using a multi-meter,unless explicitly specified,or refer the datasheet of your motor.Thees 4 wires are connected the the outputs of the L293D IC,or your motor driver. 2.Connections for the L293D IC : The reason why you will be using a motor driver is because your 12V stepper motor cant run properly on a 5V supply and you'll end up frying you arduino board to pump supply to the motor.The pin diagram of the IC can be found on the web since it is pretty much a standard switching IC. The pins and their connections are EN1,EN2 : Enable(always high or '1') because it is a standard decoder and typically has an additional input called Enable. Output is only generated when the Enable input has value 1; otherwise, all outputs are 0. Pin 4,5,12,13: They are connected to the ground. Pin 2,7,10,15 : They are the input pins from the micro-controller. Pin 3,6,11,14: They are the output pins connected to the 4 pins of the stepper motor. 3.Connections to the LCD: The LCD has 16 pins where 8 are for data transfer and at most of the times, you can use only 4 of the 8 pins.The connections are: Vss : ground Vdd: + 5V Vo : to potentiometer(to adjust contrast) RS : to digital pin 12 of arduino R/W : ground. E : to pin 11 on arduino. Data pins 4,5,6,7 : to pins 5,4,3,2 on arduino respectively. LED+ : To +5V with 220 ohm resistor. LED- : to ground. 4. Connections to the 4 X 4 Key Pad : The connections here are pretty straightforward.There are total of 8 pins coming out of the keypad and they all directly go to the digital pins of arduino.4 are for columns are 4 are for rows.The pins on the arduino are46,48,50,52 , 38,40,42,44 . 5.Interfacing IR Sensor to arduino: This step is also straightforward since there are only 3 pins coming out of the proximity sensor,+5V,output,ground.The output pin is given to analog in Ao pin on the arduino. And thats all folks,we are petty much done and the next step is to just upload my code which i have attached it here! Please refer to the circuit diagram i did having the wiring of all the components in the above pic. Step 4: Mechanical Coupling of Stepper Motor to Throttle After the electronics part is done,the next part is coupling the stepper shaft to the throttle lever. The system is such that when the RPM of engine drops,the stepper motor steps to the right,pushing the lever forward,rising the RPM. Similarly,when RPM is too high,it steps backward to pull the lever backwards to reduce the RPM. The video shows it. Step 5: The Code Its written Arduino IDE folks. Also please download the necessary libraries for this. Thank you. Attachments RPM.inoDownload Source: Autonomous Control of RPM of Engine Using Feedback System From a IR Based Tachometer ### AUTOSTERI: SMALL AND COMPACT AUTOMATIC UV STERILIZATION SYSTEM FROM DAVID BERSHADSKY The probability of having microorganisms survive on a surface or item subjected to treatment is very low; decontaminating an object or material makes it safe to handle. While there are many techniques capable of effectively disinfecting surfaces, not many can be used independently without personnel, thus making the whole process of monitoring and cleaning tiresome. The new AutoSteri from maker David Bershadsky was designed to handle and take the stress of sterilization off you. The AutoSteri simply detects the presence of a person in a particular place and disinfects the area after the person leaves the place. Such an interesting and highly useful you would agree, particularly during this time of the Covid-19 pandemic where regard to hygiene and sterilization cannot be over-emphasized. The AutoSteri can be used to sterilize almost everything, hallways, offices, elevators, delivery packages, and many more. Some Of The Key Components To Be Used For This Project Include : A breadboard-friendly Arduino Nano R3 board 1x generic PIR motion sensor A high power UV LED 1x 100 Ohms resistor One general-purpose NPN transistor, which could be replaced with a motor driver or relay. Breadboard or custom PCB Jumper wires and Through-hole 5.5 mm power jack Software Apps: Supports Arduino IDE Read more: AUTOSTERI: SMALL AND COMPACT AUTOMATIC UV STERILIZATION SYSTEM FROM DAVID BERSHADSKY ### AVALUE INTRODUCES EMX-WHLGP, A 8TH GEN INTEL® WHISKEY LAKE U CORE™ SOC I7/I5/I3 THIN MINI ITX MOTHERBOARD Avalue Technology Inc., a global industrial PC solution provider and an associate member of the Intel® Internet of Things Solutions Alliance, is unveiling EMX-WHLGP, based on Whiskey Lake U Intel® Core™ and Celeron® Processors. The 8th Gen Intel® Whiskey Lake U Core™ SoC i7/i5/i3 & Celeron® BGA onboard processor, leverage the power efficiency of 14nm microarchitecture to deliver double-digit performance compare to the KabyLake Refresh, offers a future-proof platform for intelligent solution development and higher turbo clocks. EMX-WHLGP, the Thin Mini ITX Motherboard, offering Triple display: two HDMI plus one HDMI switch with one dual-channel LVDS (default LVDS) by Chrontel CH7511 in the resolution of 1920*1080, ideal for all-in-one PC, POS, Digital Signage, and kiosk markets. Meanwhile, EMX-WHLGP features extended temperature tolerance -20°C~+60°C (with heatsink and heater attached, 0.5 m/s air flow speed testing) and fanless design, which is suitable for industrial and outdoor application under harsh operating conditions. It is designed with high temperature resistant components and automatically heating by EC and heater when operating temperature is below 0°C, which takes around 8 to 10 minutes for EMX-WHLGP to boot up from -20°C. Heatsink with heater for extended temperature is optional for ordering. For customer who does not require extended temperature support, Avalue also offer finished product which support 0°C~+60°C. EMX-WHLGP main features: Onboard 8th Gen Intel® Whiskey Lake U Core™ SoC i7/i5/i3 & Celeron®BGA Processor Two 260-pin DDR4 2400 MHz SO-DIMM socket, supports up to 32GB Max (non ECC only) 2 x HDMI + 1 x HDMI/Dual-channel LVDS (default LVDS); Triple display (HDMI+HDMI+LVDS) 1 x Intel® I219LM Gigabit Ethernet PHY, 2 x Intel® I210IT PCI-e Gigabit Ethernet (Co-lay Intel® I211AT/I210AT) Realtek ALC892 Audio Codec & TI TPA3113D2PWP Stereo Class-D 6W x 2 Audio Amplifier 1 x SATA III, 1 x SATA Power, 4 x USB 2.0, 3 x USB 3.1 Gen1, 1 x USB Type C without DP Signal 4 x RS232, 2 x RS232/422/485, 16-bit GPIO 1 x M.2 Key A 2230 support WiFi module ( 1 x PCI-e x 1 & USB 2.0 Signal), 1 x M.2 Type B 3042/2242/2260/2280 support WWAN+GNSS or SSD with 1 x SIM                       card slot Support Line-out & Mic-in & Front audio pin-header, Onboard TPM 2.0 DC in +12~24V Operating Temp -20°C~+60°C (with heatsink and heater attached, 0.5 m/s air flow speed testing) Read more: AVALUE INTRODUCES EMX-WHLGP, A 8TH GEN INTEL® WHISKEY LAKE U CORE™ SOC I7/I5/I3 THIN MINI ITX MOTHERBOARD ### AXIOMTEK INTRODUCES INTEL® SDM-BASED 15.6-INCH MODULAR PANEL PCS FOR RETAILS Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is pleased to launch the ITC150WM-300S and ITC150WM-500L, two 15.6-inch modular panel PCs with a swappable signage computer module which is based on the newest Intel® Smart Display Module (Intel® SDM) architecture. The swappable design makes the system maintenance easier in field replacement and upgrade. The ITC150WM-300S and ITC150WM-500L have a 15.6-inch full HD LCD display with 1920 x 1080 resolution, a 10-point projected capacity touchscreen, 300 nits of high brightness and LED backlights. The thickness of both interactive panel PCs is less than 40 mm, which is suitable for use in a space-constrained environment. “The ITC150WM-300S and ITC150WM-500L support Axiomtek’s SDM-based signage computer modules: SDM300S (Intel® SDM-S) and SDM500L (Intel® SDM-L), respectively. These two SDM-based modular panel PCs are designed for simplifying installation, upgrade and maintenance. Their unique modular design brings great convenience for users and greatly reduces maintenance costs,” said Leo Chen, a product manager of Product PM Division at Axiomtek. “The ITC150WM-300S and ITC150WM-500L have a metal frame structure and IP54-rated front bezel to protect from dust ingress and water spray. These interactive panel PCs bring possibilities to the retailers.” The ITC150WM-300S is powered by the onboard Intel® Pentium® processor N4200 and Celeron® processor N3350 with the Intel® HD Graphics 505 or 500 chipset. This SDM-S based panel PC can operate quietly and reliably in rigorous environments. It features one 4GB or 8G LPDDR4 memory onboard, plus an onboard 64GB eMMC. Read more: AXIOMTEK INTRODUCES INTEL® SDM-BASED 15.6-INCH MODULAR PANEL PCS FOR RETAILS ### Armadino - an Arduino Gameboy, Clock, Electronic Lab, TVout Console and More... Some years ago, I came across Mignon and Meggy Jr RGB, and was intrigued enough to want to make something similar, but with a wider screen, more possibilities for experiment and play, and with few parts. I called it Armadino, after seeing an armadillo logo on the spine of a children story book and mixing it with the word Arduino. Styled like a Gameboy, Armadino has an 10x8 dual-color (reg and green) LED dot matrix screen, a 7-segment LED "score board", buzzer, and I2C and I/O breakout pins to play with. Programmable as an Arduino UNO, the Armadino software library includes functions for drawing on the LED matrix and 7-segment display, printing text on them, making tone, sensing buttons, and even working alongside the TVout library! I use it as a LED clock most of the time. Occasionally, I have fun with it with handheld games like the classic Snake, Space Invaders, Pong. I have also adapted some TVout games including Space Invaders, Breakout and Tetris. Visit https://www.instagram.com/armadino.clock/ for short video clips of the clock, handheld and TVout games that are featured here. Supplies 1 x AVR ATmega328 micro controller 1 x MacroBlock 5026 16-bit constant-current sink LED driver 1 x 4017 decade counter, DIP 2 x LED Matrix, 5x8, Red-Green, Common-anode 2 x 7-segment LED 1 x buzzer or similar 10 x PN2222 NPN transistors 6 x large tactile switch (Omron B3F-4000 or similar) 1 x small tactile switch (Omron B3F-1000 or similar) 1 x 3-pin ceramic resonator, 16 Mhz 6 x 100nF capacitors 1 x 100uF electrolytic capacitor 1 x 6-pin USB-C connector 1 x 10k Ohm 1 x 1.2k Ohm 2 x 5.1k Ohm 1 strip of right-angle pin. 2.54mm pitch 2 x 8-pin header, 2.54mm pitch Step 1: Breadboard Prototype By electing to have 2-colour LED matrix, I could get away with just one 16-bit LED driver to make a larger 10x8 matrix (instead of the usual 8x8) by laying two 5x8 matrix next to each other; and added a pair of 7-segment LEDs as a scoreboard. The palette of colour mix (red, green, orange, yellow) is sufficient to do interesting things on a 10x8 matrix. For each column, the red and green colour dots (8 rows x 2 colours) are shifted into the 16-bit LED driver. The column is then turned on by a NPN transisitor as an emitter follower through the 4017 decade counter. And each sweep from column 1 to 10 has to be done very rapidly, at about 1000 Hz. This is fast enough that by selectively not turning on a particular dot, we could vary the brightness of that dot. Step 2: Software Library Meggy Jr RGB more than inspired the hardware design. I learned from it how an interrupt service routine (ISR) is used to refresh and modulate the brightness of the LED matrix with the constant-current LED driver; and how to ease button handling in the library. I made a small improvement to debounce the buttons. For generating the buzzer tone using Phase and Frequency Correct PWM (pulse width modulation), I turned to Ronald Willem Besinger's blog "AVR Twinkle Twinkle Using PWM Project" I am sorry that I have not been able to upload the Armadino library for Arduino as a .ZIP file nor the EagleCAD .brd file in Step 3. Perhaps I should make a GitHub Repo for this project instead and hope to do so very soon, see step 14. Step 3: Design the PCB The PCB was designed with a rather dated v5.7 of EagleCAD. For it to look good, care was taken to layout the components with some degree of symmetry and route the traces such that all vias are hidden behind components. Step 4: Assemble the PCB, Starting With Power Supply To begin with, solder the 6-pin USB-C connector on the back of the PCB. Armadino may be powered in two ways: from the 5V pin of the serial-TTL programming interface, or this USB-C connector. This is selected with a jumper switch located at its top right corner. Step 5: Pinouts and Headers Next are the series of pinouts so that Armadino can be interfaced with sensors or even another Armadino (over the serial interface). The headers at the back mirrors the pinouts in front, and are placed such that they are alight with a mini breadboard (see picture in Step 10). Step 6: Other Components Soldering the remaining components is straight forward, in this order: Decouling capacitors Tactile switches Resistors Sockets for ICs Transistors LED Matrix 7-Segment LED Buzzer Electrolytic capacitor The two tactile switches on the right are labelled A and B. Step 7: Attaching the Acrylic Base The PCB is then attached to an acrylic base with 4 plastic screws with extra nuts to act as spacer. There is a 0.6cm hole in the lower centre of the acrylic board to hold a short acrylic rod. This way, the Armadino can stand on its own, and that's how I get to use it as a clock. The outline and cutout of the acrylic board is in Layer 248 (Housing) of the EagleCAD .brd file. Step 8: Set Up Arduino IDE for the Armadino Programming the Armadino is no different from an Arduino UNO - treat it like an Arduino UNO in a different layout and form factor. First unzip the Armadino files into the Arduino libraries folder: Armadino library Armadino.cpp, Armadino.h, led_refresh.inc, char_set.inc. These are code files that implement the core functions of the library to draw on the LED matrix and 7-segment display, print text on them, making tone, sensing buttons, and working alongside the TVout library. armadino_setup.h. This is where some changes can be made concerning Armadino's bahaviour, the two main ones being whether the buzzer tone should be software driven, and if the TVout library will be used. See the comments in the file for more details. examples folder. There are programs for a clock, some games and a separate folder for TVout games. More details are available in later sections of this Instructable. TVout and TVfonts libraries. Some minor modifications to the TVout library are required, see the comments in armadino_setup.h. For convenience, I have made these changes and included the TVout folders in the zipped package. Attached a USB to serial breakout to the Armadino's serial-TTL pinouts. 5V is needed, and there are many options from Sparkfun and alternatives: https://www.sparkfun.com/products/9716, https://www.sparkfun.com/products/15096. They typically use a FTDI's FT232 or WCH's CH340 chip, and has a jumper on the back of the board that allows the board to be configured to either 3.3V or 5V. Install the serial driver if you are prompted to. Launch Arduino, select Arduino UNO and the comm port assigned to the USB-serial breakout, and we are set to go. Step 9: Programming the Armadino: Snake and Space Invaders Game Let's use the classic Snake game to get an overview of how to programming the Armadino (refer to the code in Snake.ino, in the examples folder of the Armadino library). Broadly, after setting up the dot matrix and 7-segment bitmaps, the loop polls whether a button has been hit and carries out the action accordingly. (line 12) Define an Armadino instance, rmdn, and (line 13 & 14) LedMatrix and Led7Seg instances, m & s respectively, to hold the bitmaps for the dot matrix and 7-segment "score board". (line 23) In setup(), call rmdn.begin() to setup the Armadino hardware and interrupt service routines. (line 24,25) get rmdn to display m and s instances by calling rmdn.show(). (line 45), poll the buttons state with rmdn.checkButtonsPress(). (line 46-57), carries out the button actions. The snake isn't complicated to animate, as the body (made up of a sequence of dots) only needs to follow the head. Thus, each dot takes the place of the proceeding dot as the head moves in the direction according to the button pressed. The snake grow in length as it crosses a "food" dot (line 94), which is ramdonly placed (line 100). The Space Invaders, Invaders.ino, is arguably more complicated than the Snake game. The novelty lies in how sparse the LED matrix is. While brutal simplification and some imagination are needed to make a game, the programming is not overbearing and quite satisfying. Step 10: Using the Armadino As a Electronic Kit By attaching a mini breadboard on its back, Armadino can be used as a self-contained electronic kit, with an integral standing LED display. The mini breadboard is aligned to the two 8-pin headers. Whether for experimental or educational purpose, it is always more fun to have an upright color display to visibly show what has been made. For this, I made a LED clock... Step 11: The Armadino Clock Thankfully, the Armadino breaks out the I2C pins of the ATmega328 controllor and the 10-column matrix is just enough to display a 12-hour time. For the clock, a battery-powered real time clock (RTC) module is required. I adapted a PCB design of a RTC (based on the DS1307 from Maxim Intergrated) breakout from Adafruit, and added a temperature sensor (TMP36) and a simple LDR light sensor. This breakout mounts nicely onto the header at the back of Armadino such that the time and date are read off the I2C pins (with Arduino's RTClib library), and the temperature and LDR resistance are on analog pins A2 and A3. Pressing the A button will display the date, in a scrolling text. To complete the Clock.ino program, I added an alarm clock function and a feature to dim the LED matrix display when the ambience is dark as sensed by the LDR. Step 12: Turning Armadino Into a TVout Game Console Could I get Armadino to dipslay both the LED dot matrix and TVout at the same time, like a Wii perhaps? This involves a bit of compromise and re-write, chief among which is to intersperse the dot matrix refresh by hooking into the TVout 's ISR. Consequently, brightness control for the dot matrix is not possible, and the buzzer will be software-driven and without volumn control. To generate the composite video signal, the TVout library drives pins PB1 (Arduino's D9) and PC1 (A1) though a 1000 ohm and 470 ohm resistor respectively. See the circuit diagram in armadino_setup.h. An easy way to make this circuit is to use a Dupont 4-way Cable Plug so that it can sit in the corresponding right-angled pins on the Armadino. Hackvision from nootropicdesign.com is a TVout game console that is very well-designed and compact, for which a number of games have been written. I have downloaded Space Invaders, Breakout and Tetris and adapted them for the Armadino. They may be found in the examples/TVout subfolder of the Armadino library. Step 13: May I See the Menu Please? A convenient way to combine a few programs into Armadino is to present a menu. In the Menu.ino example, the clock and the games Snake and Pong are presented as item in a list which is scrolled through with the Up and Down keys. Hitting the A key will enter that option. Step 14: Github Repository What's left is to create a GitHub Repo to hold the EagleCAD files (both .sch and .brd files) and the Armadino library for Arduino. Meanwhile, visit https://www.instagram.com/armadino.clock/ for short video clips of the clock, handheld and TVout games that are featured here. Source: Armadino - an Arduino Gameboy, Clock, Electronic Lab, TVout Console and More... ### ARROW ELECTRONICS INTRODUCES LOW-COST, RAPID PROTOTYPING DATA ACQUISITION PLATFORMS Low-power, low-noise Analog Devices ICs and Intel MAX 10 FPGA in compact 86.5mm x 25mm outline Analog Devices and Arrow Electronics have worked with Trenz Electronic GmbH to produce three ready-to-use data-acquisition platforms that relieve design and manufacturing challenges for developers of professional measurement instruments. Benefits of the AnalogMAX-DAQ1 Platform: High-accuracy analog front-end: Ideal for applications requiring accurate data capture at high throughputs Flexible platform: Based on the programmable Intel® MAX® 10 FPGA, easily adjusts to a wide range of use cases and production needs Rapid prototyping and product development: Rapid development and testing with an out-of-the-box experience that includes a Jupyter notebook demo with Python code Quick customization services: Add new functionality, lower BOM cost, or have the complete product designed The AnalogMAX-DAQ1, AnalogMAX-DAQ2 and AnalogMAX-DAQ3 each combine an Analog Devices’ high-performance precision data acquisition signal chain and power solution, an Intel MAX 10 FPGA and a memory subsystem comprising up to 64Mb 166MHz SDRAM, 64Mb Quad SPI Flash, and 4Kb EEPROM in a compact 86.5mm x 25mm form factor. With a Micro USB receptacle, 23 GPIOs, and two SMA connectors, these platforms can be deployed in portable instrumentation and desktop equipment such as medical devices, as well as process-controllers and automated test equipment (ATE). The AnalogMAX-DAQ1 is a high-accuracy programmable data-acquisition platform that integrates a complete precision signal chain for capturing high-frequency signals. This platform is based on the Analog Devices’ AD4003 18-bit 2Msample/s Easy Drive differential SAR ADC (analog-to-digital converter). An AD8251 10MHz programmable-gain instrumentation amplifier and AD8475 funnel amplifier provide low-noise gain and single-ended to differential signal conversion for driving the ADC. This platform can also be used with the pin-compatible AD4001, or AD4020 differential SAR ADC, offering users the choice of 16-, 18-, or 20-bit resolution and throughput from 500ksample/s to 2Msample/s. Read more: ARROW ELECTRONICS INTRODUCES LOW-COST, RAPID PROTOTYPING DATA ACQUISITION PLATFORMS ### ARROW ELECTRONICS, PANASONIC INDUSTRY, AND STMICROELECTRONICS JOIN FORCES TO DELIVER IOT MODULES FOR SMART APPLICATIONS Arrow Electronics, Panasonic Industry, and STMicroelectronics (ST) have introduced a low-power wireless multi-sensor edge-intelligence solution for smart factory, smart home, and smart life applications. The IoT Solution Module combines Arrow’s engineering and global distribution capabilities with Panasonic Industry’s IoT modules based on the ST BlueTile (STEVAL-BCN002V1B) multi-sensor development kit. This combination enables customers to test their ideas easily and bring new IoT products to the market faster. The IoT Solution Module features ST’s latest BlueNRG Bluetooth Low Energy (BLE) 5.0 system-on-chip (SoC) paired with numerous inertial, environmental, and audio sensors. The onboard sensors enable the cost-effective delivery of a broad range of compact and valuable IoT applications for smart factory, smart home and smart life scenarios. Comprehensive services and validation processes enable a reduced BOM that combines an accelerometer and gyroscope with Time-of-Flight, pressure, and humidity sensors in an efficient low-power design with Bluetooth communications. This combination enables OEM customers to dramatically slash time-to-market and reduce design expense and complexity using certified modules. “Building on the outstanding features and design of the ST BlueTile sensor-node development kit, the modules now available from Panasonic Industry through Arrow Electronics are ideal for speeding creation of a wide range of edge-node sensors for all kinds of Internet-of-Things applications,” said Philip Lolies, EMEA Vice President, Marketing & Application, STMicroelectronics. Read more: ARROW ELECTRONICS, PANASONIC INDUSTRY, AND STMICROELECTRONICS JOIN FORCES TO DELIVER IOT MODULES FOR SMART APPLICATIONS ### ARDUINO’S OFFICIAL IOT CLOUD RELEASE PUTS THE POWER OF EASY CONNECTIVITY INTO EVERYDAY LIFE AND BUSINESS Next phase of Arduino’s cloud platform enables everyone to breathe digital life into everyday things ITALY: Arduino, the leading IoT development platform announces the full release of Arduino IoT Cloud – an end-to-end solution that makes building connected projects easy for makers, IoT enthusiasts and professionals from start to finish. Arduino IoT Cloud provides a low-code approach that enables users to collect, graph and analyze their sensor data, trigger events and fully control their devices. People can automate their home or businesses with ease, all in a single place. Arduino IoT Cloud provides a full stack approach that is ready-to-use, by combining hardware, firmware, cloud services, and knowledge support that is needed to deliver an end-to-end IoT solution. This enables millions of users at any level of experience to start deploying connected projects. Easy for beginners, fast for professionals Getting started has never been easier; simply sign up for free today and follow the guides to connect a device to start your project. Arduino IoT Cloud’s low-code approach helps users to optimize their workflows and simplify device registration for convenience and flexibility. For more advanced users, the platform also enables other methods of interaction, including HTTP REST API, MQTT, Command-Line Tools, Javascript, and Websockets. Read more: ARDUINO’S OFFICIAL IOT CLOUD RELEASE PUTS THE POWER OF EASY CONNECTIVITY INTO EVERYDAY LIFE AND BUSINESS ### Arduino Based 3-Way Traffic Light Controller We all know about Arduino. It is one of the most popular open source micro controller board which is highly useful for doing DIY projects. This Arduino based 3-Way Traffic Light Controller is a simple Arduino DIY project which is useful to understand the working of traffic lights which we see around us. We have covered a more simpler version of traffic lights in this traffic light circuit.  Here have demonstrated it for 3 sides or ways. Now let’s get into the project… Components Required: 3*Red LED Lights 3*Green LED Lights 3*Yellow LED Lights 3*220ohm Resistors Breadboard Male To Male Connectors Arduino Uno With Ide Cable Circuit Explanation: The circuit Diagram for Arduino Traffic Light Controller project is given below: It’s pretty simple and can be easily built on bread board as explained in below steps: Connect the LEDs in the order as Red, Green, and Yellow in the breadboard. Place the negative terminal of the LEDs in common and connect the 220ohm resistor in series. Connect the connector wires accordingly. Connect the other end of the wire to the Arduino Uno in the consecutive pins(2,3,4…10) Power up the breadboard using the Arduino 5v and GND pin. Program and Working Explanation: The Arduino Traffic Light Controller Project code is not complex and is easily comprehensible. We have shown a demonstration of traffic lights for a three-way road, with LEDs lighting up on all three sides in a specific order, just like real traffic lights. At one point, there may be two Red lights on one of the sides and a Green light on the other side. Yellow light will glow for 1 second during the transition from the red light to the green light, with the red light glowing for 5 seconds, followed by the yellow light for 1 second before the green light comes on. In the program, first we have declared pins (2,3…10) as output in void setup() for 9 LEDs (three on each side i.e. forward, right and left side).    void setup() {   // configure the output pins   pinMode(2,OUTPUT);   pinMode(3,OUTPUT);   pinMode(4,OUTPUT);   pinMode(5,OUTPUT);   pinMode(6,OUTPUT);   pinMode(7,OUTPUT);   pinMode(8,OUTPUT);   pinMode(9,OUTPUT);   pinMode(10,OUTPUT); } Then in void loop() function we have written the code for traffic lights to be turned on and off in sequence as mentioned above. void loop() { digitalWrite(2,1); //enables the 1st set of signals digitalWrite(7,1); digitalWrite(10,1); digitalWrite(4,0); digitalWrite(3,0); digitalWrite(6,0); digitalWrite(8,0); digitalWrite(9,0); digitalWrite(5,0); delay(5000); ..... .... ..... .... The Arduino Traffic Light Controller Project code is not complex and is easily comprehensible. We have shown a demonstration of traffic lights for a three-way road, with LEDs lighting up on all three sides in a specific order, just like real traffic lights. At one point, there may be two Red lights on one of the sides and a Green light on the other side. Yellow light will glow for 1 second during the transition from the red light to the green light, with the red light glowing for 5 seconds, followed by the yellow light for 1 second before the green light comes on. The complete Arduino code and Video for this Arduino Traffic Light Project is given below. Code void setup() {   // configure the output pins   pinMode(2,OUTPUT);   pinMode(3,OUTPUT);   pinMode(4,OUTPUT);   pinMode(5,OUTPUT);   pinMode(6,OUTPUT);   pinMode(7,OUTPUT);   pinMode(8,OUTPUT);   pinMode(9,OUTPUT);   pinMode(10,OUTPUT); } void loop() {   digitalWrite(2,1); //enables the 1st set of signals   digitalWrite(7,1);   digitalWrite(10,1);   digitalWrite(4,0);   digitalWrite(3,0);   digitalWrite(6,0);   digitalWrite(8,0);   digitalWrite(9,0);   digitalWrite(5,0);   delay(5000);   digitalWrite(3,1); //enables the yellow lights   digitalWrite(6,1);   digitalWrite(2,0);   digitalWrite(7,0);   delay(1000);   digitalWrite(4,1); //enables the 2nd set of signals   digitalWrite(5,1);   digitalWrite(10,1);   digitalWrite(2,0);   digitalWrite(3,0);   digitalWrite(6,0);   digitalWrite(8,0);   digitalWrite(9,0);   digitalWrite(7,0);   delay(5000);   digitalWrite(9,1); //enables the yellow lights   digitalWrite(6,1);   digitalWrite(10,0);   digitalWrite(5,0);   digitalWrite(4,0);   delay(1000);   digitalWrite(8,1); //enables the 3rd set of signals   digitalWrite(4,1);   digitalWrite(7,1);   digitalWrite(2,0);   digitalWrite(3,0);   digitalWrite(5,0);   digitalWrite(6,0);   digitalWrite(9,0);   digitalWrite(10,0);   delay(5000);   digitalWrite(9,1); //enables the yellow lights   digitalWrite(3,1);   digitalWrite(7,0);   digitalWrite(8,0);   digitalWrite(4,0);   delay(1000); } Video Source: Arduino Based 3-Way Traffic Light Controller ### Arduino Automatic Watering System INTRODUCTION & OBJECTIVES: I am a basic system that utilizes Arduino for automating the watering of small potted plants or crops. This system monitors soil moisture levels by using LEDs for indications and emitting an alarm beep if the soil is dry. If the soil is dry, the irrigation system will be triggered to pump water for watering plants. The system utilizes an LCD screen to update on ongoing actions and a real-time clock. The Theory (as per Wikipedia): The amount of water within a substance, like soil, rocks, ceramics, fruit, or wood, is known as water content or moisture content. Water content is utilized across various scientific and technical fields, and is represented as a ratio that can vary from 0 (completely dry) to the porosity value of the materials when saturated. It can be provided based on volume or mass (gravimetric). The mathematical definition of volumetric water content is given by the symbol θ. where  is the volume of water and  is the total volume (that is soil volume + water volume + air space). Gravimetric water content[1] is expressed by mass (weight) as follows: where  is the mass of water and  is the bulk mass. The bulk mass is taken as the total mass, except for geotechnical and soil science applications where oven-dried soil (, see the diagram) is conventionally used as . To convert gravimetric water content to volumetric water, multiply the gravimetric water content by the bulk specific gravity of the material. In soil mechanics and petroleum engineering, the term water saturation or degree of saturation,  is used, defined as where  is the porosity and  is the volume of void or pore space. Values of Sw can range from 0 (dry) to 1 (saturated). In reality, Sw never reaches 0 or 1 - these are idealizations for engineering use. The normalized water content, , (also called effective saturation or ) is a dimensionless value defined by van Genuchten[2] as: where  is the volumetric water content;  is the residual water content, defined as the water content for which the gradient  becomes zero; and,  is the saturated water content, which is equivalent to porosity, . Step 1: Arduino Automatic Watering System HARDWARE & MATERIALS To accomplish this Arduino Automatic Watering System project, you will need: 1 x Arduino UNO MEGA Duemilanove or Teensy 2.0 + 1 x LCD display with I2C communication 1 x RTC module with I2C communication 1 x Relay Module opto-coupled to 250V/10A 2 x Modules "Driver" LM-393 general purpose 1 x Soil Moisture Sensor (Hygrometer) KDQ11 1 x Water Level Sensor (Homemade) 1 x Buzzer piezoelectric 2 x LEDs - 10mm, Green 1 x LED - 10mm, Red 1 x LED - 10mm, Yellow 4 x Resistors 150 Ohm 1/4 W 1 x Water pump for aquarium, with filter system (127 or 220V) 1 x Electric Power Cable, 127/220VAC - 10Amps 1 x Socket 127/220VAC - 10 Amps Wires and cables for connections and communication You can purchase the soil moisture sensor and  "Driver" on ebay. http://www.ebay.com/itm/KDQ11-MOISTURE-SENSOR-KIT-URBAN-GARDEN-TOOL-SOIL-MOISTURE-SENSOR-SCA-1703-/221227848188?pt=LH_DefaultDomain_0&hash=item33823511fc You can purchase the soil moisture sensor and  "Driver" on ebay. http://www.ebay.com/itm/1-Channel-5V-Relay-Module-Shield-for-Arduino-uno-1280-2560-ARM-PIC-AVR-DSP-/271117672120?pt=LH_DefaultDomain_0&hash=item3f1fdf5eb8 Step 2: Arduino Automatic Watering System COMPONENTS In the Pictures you have an overview of the components used. Data from the soil moisture sensor set: When the soil is dry, the impedance will be high and the LM-393 will show a high value on the output. When the soil is wet, it will show a low value in the output. The 3 LEDs range can be defined as: - Soggy soil -  moisture between 0 and 500; - Wet soil - moisture between 500 and 800; - Dry soil - moisture between 800-1023; The module has one digital output and an analog output. (in the project, should be used to analog output) The water level sensor: This sensor must be made (homemade) on phenolite board, with spacings of 1 mm between trails and trails with 1 mm of thickness. Step 3: Arduino Automatic Watering System INTERCONNECTION & DIAGRAM: Below you have: 1 - a block diagram; 2 - an interconnection diagram (in manuscript); 3 - a wiring diagram; 4 – usability principlesThese diagrams are describing the main system interconnections.You can get the original of this file by accessing the "GOOGLE driver" below:https://docs.google.com/file/d/0B_YlEklLDDS7SllRMzUyQlhHVDg/edit?usp=sharinghttps://docs.google.com/file/d/0B_YlEklLDDS7RkNMZko2ckhLcUU/edit?usp=sharinghttps://docs.google.com/file/d/0B_YlEklLDDS7Ym52UE1qcGlqQVE/edit?usp=sharinghttps://docs.google.com/file/d/0B_YlEklLDDS7Z3hZY3pNZ0NWZG8/edit?usp=sharing********************************************************************************************************************************************* ********************************************************************************************************************************************* Please, fix an error in your "interconnection diagram (in manuscript)" diagram: The level sensor must be connected to pin A0 of Arduino and the soil moisture sensor must be connected to pin A1 of arduino. ********************************************************************************************************************************************* *********************************************************************************************************************************************Description of the main connections: RTC <-> Arduino: GND <-> GND +5 V <-> +5 V SDA <-> A4 SCL <-> A5Relay <-> Arduino: GND <-> GND +5 V <-> +5 V IN <-> D7LCD <-> Arduino: GND <-> GND +5 V <-> +5 V SDA <-> A4 SCL <-> A5BUZZER <-> Arduino: + <-> D2 - <-> GNDLM-393 DRIVER (moisture sensor) <-> Arduino GND <-> GND +5 V <-> +5 V OUT <-> A1LM-393 DRIVER (water sensor level) <-> Arduino GND <-> GND +5 V <-> +5 V OUT <-> A0Other Components <-> Function <-> Arduino Red LED <-> Dry soil <-> D5 Yellow LED <-> Soggy soil <-> D3 Green LED <-> Moist soil <-> D4 Green LED <-> Water Pump <-> D6 Step 4: Arduino Automatic Watering System SOFTWARE & PROGRAMMING You can download freely the code for this project in the "GOOGLE driver": https://docs.google.com/file/d/0B_YlEklLDDS7T3JFX... Or on the GitHub: Arduino Watering System Files Any problems, questions and suggestions, please send an email to: arduinobymyself@gmail.com Step 5:Arduino Automatic Watering System TESTS & ADJUSTMENTS In the image, there is a demonstration of how the system operates and the proper way to conduct tests. It makes sense that since the system has a preset hour for operation, you can modify the time using software for when the tests will be conducted, and later you can fine-tune the operational "time". Step 6:Arduino Automatic Watering System VIDEOS & PHOTOS: F0BGEI7HKTZHT0V.MEDIUM F1P32HVHLJUQ9PS.SMALL F9P7Z8THLJUQ9PM.MEDIUM FEBCH4VHKTZHT12.SMALL FHES9GSHKTZHT17.SMALL FHVGVMVHKTZHT0Y.MEDIUM FIMRLLWHKTZHT13.MEDIUM FL9F339HLJUQ9PN.SMALL FM9XJTFHKTZHT14.MEDIUM FMCZ474HKTZHT0Z.SMALL FOOFBQVHKTZHT15.MEDIUM FPDA6YNHLJUQ9PR.SMALL FVAH1NWHKTZHT10.SMALL FYAW65ZHKTZHT16.SMALL FXHWOTVHLJUQ9PL.SMALL Questions and suggestions send to: arduinobymyself@gmail.com Part 1: http://youtu.be/_jcDxYK33ew Part 2: http://youtu.be/-JOfP1J0OHY Part 3: http://youtu.be/Czvxi1r21Zc ### 6 Digit LED Clock Recently, I discovered six 2.3-inch red 7 segment displays in my collection that I bought from Rapid Electronics during their clearance of non-RoHS stock. Due to the absence of a clock at my work bench, I opted to create one using prototyping pad board, a Microchip PIC18F26K20 microcontroller, and a Dallas DS32KHZ temperature compensated 32.768kHz crystal. The displays I used are SA23-12SRWA, which don’t appear to be available from Rapid any more, the closest is SA23-12EWA, however, Farnell and the other usual distributors sell them. I wanted this to be a fairly quick project to complete, so the schematic is fairly simplistic. The schematic diagram of the clock is shown below: The 7 segment displays are displays with common anodes, featuring segments made up of four red LEDs in a row and decimal points made up of two red LEDs in a row. Different techniques, like multiplexing, shift registers, or dedicated display drivers, can be employed to decrease the amount of GPIO necessary to operate the display. I've opted for simple display multiplexing, needing one GPIO for each digit's common anode and one GPIO for every segment. This results in 7 common anodes and 8 cathodes, with the decimal points and colons linked together. There are numerous techniques available to decrease the required number of GPIOs even more, however, the selected microcontroller has an ample supply of GPIO for this particular task. The segments have a slightly elevated forward voltage range according to the datasheet, which is indicated to be between 7.4V and 10V. Due to this factor, the anode drivers for the displays need to carry out voltage translation and supply sufficient current for the displays. FOr More Details: 6 Digit LED Clock ### The Automatic Pill Dispenser We are Master students in the field of Electro-mechanical engineering at The Brussels Faculty of Engineering, commonly known as "Bruface." This project is a collaboration between two universities situated in the heart of Brussels: the Université Libre de Bruxelles (ULB) and the Vrije Universiteit Brussel (VUB). As part of the program we had to make a real working mechatronic system for the course Mechatronics. In our theoretical classes we were taught how to integrate various components to create actual applications. Following that, we received a presentation on the fundamentals of an Arduino microcontroller and managing a mechatronics system. The goal of the program was to learn how to create, manufacture, and code mechatronic systems. All of this must be completed together as a team. Our team was made up of two Chinese students, two Belgian students, and one Cameroonian student, forming an international group. To start, we would like to extend our gratitude for the assistance of Albert De Beir and Professor Bram Vanderborght. As a team, we made the choice to address a socially important issue. As the aging population becomes a worldwide concern, the demand on caregivers and nurses increases significantly. As individuals age, they frequently need to consume additional medications and supplements. An automatic pill dispenser can help forgetful elderly individuals to manage their medication independently for a longer period of time. This will allow caregivers and nurses to dedicate additional time to patients who require more assistance. Additionally, it would be quite useful for individuals who occasionally forget to take their medication due to memory lapses. Therefore, the mechatronic system is required to provide a solution that prompts the user to take their medication and also dispenses the pills. We would also like the automatic pill dispenser to be easy to use so that people of all ages can utilize it. Step 1: Materials Casing: Mdf: 4 mm thickness for the inner case Mdf: 3 and 6 mm thickness for the outer case Assembly Bolts and nuts (M2 and M3) Small ball bearing Microcontroller: Arduino UNO [Order link] Electronic parts Blank circuit board [Order link] Small Servo motor 9g [Order link] Small DC-motor 5V [Order link] Transistor: BC 237 (NPN bipolar transistor) [Order link] Diode 1N4001 (Peak Inverse Voltage of 50V) [Order link] Passive buzzer: Transducteur piezo LCD1602 Resistors: 1 x 270 ohm 1 x 330 ohm 1 x 470 ohm 5 x 10k ohm Infrared emitter Infrared detector Step 2: Inner Case The inner case can be seen as the box that contains all inner mechanics and electronics. It consists of 5 plates of 4mm MDF that are laser cut into the right shapes. There is also an optional sixth plate one can add. This optional sixth piece has a square shape and can used as a lid. The 5 plates (the bottom and the four sides) are designed in a puzzle shape so that they fit perfectly within each other. Their assembly can be reinforced using screws. The planes already have the holes where the other parts should fit in or where the bolts should be placed. Step 3: Inner Mechanism https://youtu.be/mmuZn4nZbuw THE DISPENSING MECHANISM Mechanism Our pill dispensing mechanism is as follows: the user puts the pills in the storage compartment in the top of the box. As the bottom plate of that compartment is slanted, the pills will automatically slide down into the first tube, where they stack up. Under this tube is a cylinder with a small hole in where just one pill fits perfectly in. This small hole is located right underneath the tube so that the pills stack up above it, while the first pill lays in the hole of the cylinder. When a pill has to be taken, the cylinder (with a pill in) rotates 120 degrees so that the pill in the cylinder falls down into a second cylinder. This second cylinder is where a sensor is located that detects if a pill has actually fallen down from the cylinder. This serves as feedback system. This tube has one side that sticks out higher than the other one. This is because this side prevents the pill from falling over the second tube, and thus helps guarantee that the pill will drop into the tube and will be detected by the sensor. Underneath this tube is located a small slide such that the dropping pill will slide trough the hole in the front of the inner box. This whole mechanism needs several parts: Laser cut parts The bottom slanted plate of the storage compartment. The side slanted plates of the storage compartment 3D printed parts The upper tube The cylinder The axis The lower tube ( see the lower tube and sensor compartment) The slide Other parts Roll Bearing All files of our parts that are needed to laser cut or 3D print can be found below. Different parts and their assembly THE STORAGE COMPARTMENT PLATES The storage compartment consists of three plates that laser cut. These plates can be assembled and connected to each other and the inner box because they have some holes and small pieces standing out. This is so that they all fit in each other like a puzzle! The holes and standing out pieces are already added to the CAD files one can use the laser cut it. UPPER TUBE The upper tube is only connected to one side of the inner box. It is connected with the help of a plate that is attached to it (it is included in the CAD drawing for the 3D printing). CYLINDER & ROLL BEARING The cylinder is connected to 2 sides of the box. On one side, it is connected to the servo motor that induces the rotating motion when a pill has to drop. On the other side, it THE LOWER TUBE AND SENSOR COMPARTMENT Sensing is an important action when it comes to pill dispensing. We must be able to get a confirmation that an allocated pill has been taken by patient at an appropriate time. To get this functionality, it important to considered the various design steps. Choosing the correct detecting components: From on set when the project was validated, we had to search for and appropriate component that will confirm the passage of a pill from the box. Knowing sensors can be of use for this action, the main challenge was to know the type that will be compatible with the design. The first component we found was a photointeruptor composing of an IR emitter and IR phototransistor diode. The 25/64’’ slot PCB HS 810 photointeruptor was a solution due to its compatibility making us to avoid the possible problem of angle configuration. We decided not to use this due to it geometry, it will be difficult to incorporate with the nozzle. From some related project we saw that it’s possible to use an IR emitter with an IR detector with fewer other components as a sensor. These IR components could be found in various shapes. 3D printing of the pill nozzle that holes the sensor Being able to sort out the main component to be used as sensor, it was then time to check on how they will be place on the nozzle. The nozzle has an inner diameter of 10mm for the free passage of pill from the rotating cylinder. By the data sheet of the sensing elements, we realized that introducing holes around the nozzle surface corresponding to the dimension of the component will be an added advantage. Should these holes be place at any point along the surface? no because to achieve maximum detection the angularity needs to be evaluated. We printed a prototype based on the specifications above and did check for detectability. Evaluating the possible beam angle and detection angle From the data sheet of the sensor components, the beam and detection angle are 20 degrees, this means that both the emitting light and detector have a wide span of 20 degrees. Though these are manufactures specification, it’s still important to test and confirm. This was done by simply playing with the components introducing a DC source alongside an LED. The conclusion reached was to place them opposite to each other. Assembly The 3D print design of the tube has a plate connected to it with 4 holes. These holes are used to connect the tube to the inner case by using bolts. Step 4: Electronics Inner Mechanism Dispensing mechanism: The dispensing mechanism is achieved by using a small servomotor for the rotation of the big cylinder. The drive pin for the 'Reely Micro-servo 9g' servo motor is connected directly to the microcontroller. The microcontroller Arduino Uno easily can be used for the control of the servo motor. This because of the existence of the built-in library for servo motor actions. For example with the 'write'-command, the desired angles of 0° and 120°can be reached. (This is done in the project-code with 'servo.write(0)' and 'servo.write(120)'). Vibrator: Small brushless DC motor with unbalance This unbalance is achieved with piece of plastic which connects the motor axis with small bolt and nut. The motor is driven by a small transistor, this is done because the digital pin can not deliver higher currents than 40.0 mA. By providing the current from the Vin pin of the Arduino Uno microcontroller, one can reach currents up to 200.0 mA. This is enough to power the small DC-motor. When the motor powering is abruptly stopped, you get a current peak due to the self inductance of the motor. So a diode is placed over the motor connections in order to prevent this back flows of the current which can damage the microcontroller. sensor system: Using an infrared emitter diode(LTE-4208) and an infrared detector diode (LTR-320 8) connected to Arduino Uno microcontroller to confirm the passage of a pill. Once a pill fall down, it would shade the light of infrared emitter diode in a short time. Using an analogpin of the arduino we would get this information. for detection: analogRead(A0) Step 5: Outer Case Size:200 x 110 x 210 mm Material:medium density fiberboard Thickness of sheet: 3 mm 6 mm Processing method:laser cutting For the outer case, we used different kinds of thicknesses because of errors of the laser cutting. We choose the 3 mm and 6 mm to make sure all sheets can be combined tightly. For size, considering the space for the inner case and electronic devices, the width and height of the outer case is litter bigger than the inner one. The length is much longer to allow space for the electronic devices. Moreover, in order to make sure the pills can drop out of the box easily, we kept the inner and outer case very close. Source: The Automatic Pill Dispenser ### 01005 INCH SIZE MULTILAYER CERAMIC CAPACITOR WITH A CAPACITANCE VALUE OF 1.0ΜF Murata Manufacturing has developed the world’s first multilayer ceramic capacitor with a capacitance value of 1.0μF in the 01005-inch size (0.4×0.2mm), which is increasingly used in a wide range of mobile electronic devices including smartphones. Mass production of the GRM022R60G105M with a rated voltage of 4Vdc has already started and mass production of GRM022R60J105M with a rated voltage of 6.3Vdc is scheduled to begin in 2021. The spread of 5G smartphones and the increasing functionality and miniaturization of wearable devices is stoking the demand for further miniaturization and higher density of electronic circuitry. Among the applications, multilayer ceramic capacitors are essential components of many kinds of electronic devices and are widely used in such devices as smartphones and wearable devices. Given that approximately 900 to 1,100 multilayer ceramic capacitors are installed in a single high-end smartphone, a considerable need exists for capacitors combining smaller size with larger capacity. In particular, since multilayer ceramic capacitors with a capacitance of 1.0 μF are widely used in various devices, expanding the adoption of these new products will contribute to the further miniaturization of electronic devices. Read more: 01005 INCH SIZE MULTILAYER CERAMIC CAPACITOR WITH A CAPACITANCE VALUE OF 1.0ΜF ### Reading pulses from meters with pulse outputs.. using arduino A note on what this document covers The key addition to the wealth of online information about pulse counting is the method of counting pulses from multiple sources (up to 12) using continuous sampling and direct port manipulation in an Arduino sketch instead of interrupt-based counting. When tallying pulses from one or two pulse output meters, it is recommended to utilize the interrupt approach. The Arduino has just two interrupt pins, but if you need to monitor pulses from additional sources, continue reading! There is information available on connecting with wired or switched pulse outputs as well. Interrupt method Interrupt method sleep Introduction Several meters come with pulse outputs, such as electrical meters like single-phase, three-phase, import, and export meters. Gas meters, water meters, and so on. The pulsating output could either be a blinking LED or a switching relay, which is typically solid state, or possibly both. For an electricity meter, each pulse output represents a specific quantity of energy flowing through the meter (measured in Kwhr/Wh). For household single-phase electricity meters (e.g., Each pulse in Elster A100c) usually represents 1 Wh (1000 pulses per kwh). In the situation of higher power meters, such as three-phase ones, each pulse represents a larger energy value. 2 watt-hours per pulse or possibly even 10 watt-hours per pulse. A100C BS Single Phase Meter Figure 1 represents a pulse output. The duration of the high pulse, T_high, changes based on the pulse output gauge. Certain pulse output meters have the capability to adjust the value of T_high. The temperature remains consistent throughout the operation. T_high for the A100c pulse output meter is set at 50 milliseconds. The power measured by the meter is indicated by the duration of T_low between the pulses. Calculating Energy For the A100c meter each pulse represents a 1000th of a KWhr of 1Whr of energy passing through the meter. Calculating Power 3600 seconds per hour = 3600J per pulse ie. 1 Whr= 3600J therefore instantaneous power P=3600/T where T is the time between the falling edge of each pulse. Optical Pulse Counting: Flashing LEDs A lot of electricity meters either lack pulse output connections or have connections that are not easily accessible because of utility company restrictions. Every contemporary meter contains a light-emitting diode optical pulse output. An optical sensor can be utilized to connect with the meter in those situations. The A100c picture above shows the red pulse-output LED. In order to identify the pulses emitted by the LED, a light sensor is required, which can be found on the [link to shop page]. This comes with a RJ45 plug for conveniently connecting to the pulse input of an emonTx or emonPi. A photo-diode and a two-transistor amplifier-driver circuit are housed within the sensor's small p.c.b. The circuit functions effectively overall, but it does have some drawbacks: it is sensitive to surrounding light, requiring protection from strong light; the green LED may not accurately indicate the output status, resulting in a logic high output without the green LED illuminating. The pulse input of the emonTx and emonPi comes with the internal pull-up active to avoid counting spurious pulses when nothing is connected, although the resistor R4 has the ability to pull the output down when the transistor is turned off. Adding a pull-up resistor or an external pull-down should not be needed. In case of intense interference, a relatively small capacitor can be added between the pulse output and GND. The pulse width and maximum pulse rate will determine its value, starting with 100 nF would be advisable. Other Optical Sensors     Other sensors that operate in the visible and infra-red ranges should be usable. A photo-diode or photo-transistor will be suitable, and you will need a similar interface circuit to give a usable pulse output. A light-dependent resistor is unlikely to be satisfactory due to its very slow response time. Wired / Switched Output Pulse Detection     A wired pulse output is present in a lot of meters. Frequently, this will be identified or explained in the documentation as "S0". The S0 interface, as defined in EN62053-31, is a standardized hardware interface. In the meter, there is a switch - possibly a reed relay but probably an optically isolated transistor. The emonTx or emonPi must provide the required operating voltage. The "S0-" terminal of the meter needs to be connected to GND, while the "S0+" terminal should be connected to the pulse input. If the internal pull-up is not powerful enough, a 1 kΩ resistor should be linked between the 3.3 V terminal and the pulse input for ample current flow. If the meter's pulse output does not have the "S0" label, then you must understand that it is not suitable for direct connection with an Arduino, emonTx, or emonPi and figure out its specific functionality. A connection at high voltage may be necessary, and isolation will need to be implemented. Wired / Switched Output Supply Voltage From what I understand, 24V is a fairly standard supply for such meter systems, but other voltages can usually be used. Meters often have a fairly wide pulse output supply voltage range of 3 to 35V. So the 5V supply from an Arduino could be used. Higher voltages are desirable when there is more noise in the environment and the cable runs are longer. Safety Be cautious of pulse outputs connected to the mains: Ensure that the pulse output of your meter is not linked to the high voltage mains inside the meter. Certain meters have a pulse output connector linked to the neutral. If your meter falls into this category, you will require an isolation circuit to connect it to an Arduino. Live wire proximity: The pulse outputs are usually very close to live wires, so watch out for those too! Further Reading http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1276096046 Single optical pulse counting using a JeeNode board and a Hope RFM12 RF module Application instructions energy meter Topic: S0-pulse interface Source: Reading pulses from meters with pulse outputs.. ### Quiz Game Show Buzzer using Arduino My close friend, who works as a teacher, was conducting quizzes in her class that involved students competing to answer questions. This caused some students to complain about not getting a chance to answer even though they had raised their hands first. I chose to gift her with a buzzer similar to those used on quiz shows for Christmas in order to help her with her issues. When a player quickly presses their button, the LED of the correct color illuminates to show they are in control. The other players' buttons are then disabled until the game master determines if the answer is correct by pressing a button on the main unit, awarding or denying a point to the player in control. Feel free to write if you have any questions, comments, or constructive criticism. If you're a fan of my creation, kindly give the YouTube video a thumbs up and consider subscribing, that would be appreciated :) P.S. There's a small issue with the screen that I can't seem to fix. While playing a melody, the screen no longer illuminates, as though there is no power reaching it. Does anyone know how to troubleshoot or repair this issue in the program? Watch the video if you're confused about what I'm trying to say. Step 1: Components Rocker Switch ATmega328 Ceramic Resonator 16MHZ 5V wall adapter power supply Barrel jack Hook-up wires (black, red, green, white, yellow) Heat shrink tubing Big buttons (green, blue, yellow, red) Some LEDs Serial 8 Characters x 7 Segment LED Display Prototyping board Tamiya connectors (male, female) Some resistors (1x100ohm (for the speaker), 5x150ohm (for the leds), 6x10KOhm (for the buttons)) Push buttons (2) Speaker wire Step 2: The Plan Sorry for my writing... I know it's not a very professional plan, but if I have more time I will make a better one and replace it... feel free to ask me anything about it if it's not clear ;) Step 3: The Prototype I've decided to try my idea with an Arduino prototype. The different buttons are for each "team" and for the master of the game to accept or reject an answer, giving the point to the team answering the question or not. The leds lit up to know which team can currently answer. The speaker plays a little tune... but it's not amplified, so it's not very loud. The display shows the current score for each teams. Step 4: The Code So... I'm including my code, but I'm not explaining it... and yes I know there is no comments... if you have questions, feel free to ask me, but I didn't do this to make a programming tutorial. First you need to include "pitches.h"... but to be able to include it, you need to get it from here... Arduino Tone Tutorial #include "pitches.h" Then let's define some arrays to help ourselves for later when we need to use the 8 digits 7 segments display // array to activate particular digit on the 8x7segment module
// it is the common anode of 7 segment byte digit[8] = { 0b10000000, //digit 1 from right 0b01000000, //digit 2 from right 0b00100000, //digit 3 from right 0b00010000, //digit 4 from right 0b00001000, //digit 5 from right 0b00000100, //digit 6 from right 0b00000010, //digit 7 from right 0b00000001 //digit 8 from right };

//array for decimal number, it is the cathode, please refer to the datasheet. //therefore a logic low will activete the particular segment //PGFEDCBA, segment on 7 segment, P is the dot byte number[12] = { 0b11000000, // 0 0b11111001, // 1 0b10100100, // 2 0b10110000, // 3 0b10011001, // 4 0b10010010, // 5 0b10000010, // 6 0b11111000, // 7 0b10000000, // 8 0b10010000, // 9 0b01111111, //dot 0b11111111 //blank };

We should also define some constants that will help us identify input and output pins later in the code const int blueLEDPin = 12; const int greenLEDPin = 11; const int redLEDPin = 10; const int yellowLEDPin = 9; const int teamPinDiff = 5; //to help with computations later< const int blueButton = 17; const int greenButton = 16; const int redButton = 15; const int yellowButton = 14; const int acceptButton = 18; const int refuseButton = 19; const int speakerPin = 8; const int latchPin = 7; //connect to RCK of 8x7segment module const int clockPin = 6; //connect to SCK of 8x7segment module const int dataPin = 5; //connect to DIO of 8x7segment module const int multiplexDelay = 1; const int dotNumber = 10; const int blankNumber = 11; We also need to keep some variables to know what's going on in the program int currentTeam = 0; int blueScore = 0; int greenScore = 0; int redScore = 0; int yellowScore = 0;byte blueDigit1 = number[blankNumber]; byte blueDigit2 = number[0]; byte greenDigit1 = number[blankNumber]; byte greenDigit2 = number[0]; byte redDigit1 = number[blankNumber]; byte redDigit2 = number[0]; byte yellowDigit1 = number[blankNumber]; byte yellowDigit2 = number[0]; Then we setup the pin modes and the display void setup() { pinMode(blueLEDPin, OUTPUT); pinMode(greenLEDPin, OUTPUT); pinMode(redLEDPin, OUTPUT); pinMode(yellowLEDPin, OUTPUT); pinMode(blueButton, INPUT); pinMode(greenButton, INPUT); pinMode(redButton, INPUT); pinMode(yellowButton, INPUT); pinMode(acceptButton, INPUT); pinMode(refuseButton, INPUT); pinMode(speakerPin, OUTPUT); digitalWrite(blueLEDPin, LOW); digitalWrite(greenLEDPin, LOW); digitalWrite(redLEDPin, LOW); digitalWrite(yellowLEDPin, LOW); pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); digitalWrite(latchPin, HIGH); } And we create the loop function that will run after setup void loop() { ProgramLoop(); WriteScore(); } As you see, I've created functions to separate my code a bit better... so let's create those functions void ProgramLoop() { if (currentTeam == 0) { if (digitalRead(blueButton) == HIGH) { currentTeam = blueLEDPin; PlayAnswerBlue(); } else if (digitalRead(greenButton) == HIGH) { currentTeam = greenLEDPin; PlayAnswerGreen(); } else if (digitalRead(redButton) == HIGH) { currentTeam = redLEDPin; PlayAnswerRed(); } else if (digitalRead(yellowButton) == HIGH) { currentTeam = yellowLEDPin; PlayAnswerYellow(); } } else { digitalWrite(currentTeam, HIGH); if (digitalRead(currentTeam + teamPinDiff) == LOW) { if (digitalRead(acceptButton) == HIGH) { PlayAccept(); IncrementScore(); } else if (digitalRead(refuseButton) == HIGH) { PlayDeny(); ResetState(); } } } } void ResetState() { currentTeam = 0; digitalWrite(blueLEDPin, LOW); digitalWrite(greenLEDPin, LOW); digitalWrite(redLEDPin, LOW); digitalWrite(yellowLEDPin, LOW); } void IncrementScore() { switch (currentTeam) { case blueLEDPin: blueScore++; if (blueScore > 9) { if (blueScore > 99) { blueScore = 0; } blueDigit1 = number[blueScore / 10]; } blueDigit2 = number[blueScore % 10]; break; case greenLEDPin: greenScore++; if (greenScore > 9) { if (greenScore > 99) { greenScore = 0; } greenDigit1 = number[greenScore / 10]; } greenDigit2 = number[greenScore % 10]; break; case redLEDPin: redScore++; if (redScore > 9) { if (redScore > 99) { redScore = 0; } redDigit1 = number[redScore / 10]; } redDigit2 = number[redScore % 10]; break; case yellowLEDPin: yellowScore++; if (yellowScore > 9) { if (yellowScore > 99) { yellowScore = 0; } yellowDigit1 = number[yellowScore / 10]; } yellowDigit2 = number[yellowScore % 10]; break; } ResetState(); } void WriteScore() { display8x7segment(digit[0], number[dotNumber]); display8x7segment(digit[0], blueDigit2); display8x7segment(digit[1], blueDigit1); display8x7segment(digit[2], number[dotNumber]); display8x7segment(digit[2], greenDigit2); display8x7segment(digit[3], greenDigit1); display8x7segment(digit[4], number[dotNumber]); display8x7segment(digit[4], redDigit2); display8x7segment(digit[5], redDigit1); display8x7segment(digit[6], number[dotNumber]); display8x7segment(digit[6], yellowDigit2); display8x7segment(digit[7], yellowDigit1); } void display8x7segment(byte digit, byte number) { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, digit); // clears the right display shiftOut(dataPin, clockPin, MSBFIRST, number); // clears the left display digitalWrite(latchPin, HIGH); delay(1); } void PlayAnswerBlue() { display8x7segment(digit[7], number[blankNumber]); beep(speakerPin, NOTE_C5, 100); delay(25); beep(speakerPin, NOTE_C5, 100); delay(25); beep(speakerPin, NOTE_C5, 100); } void PlayAnswerGreen() { display8x7segment(digit[7], number[blankNumber]); beep(speakerPin, NOTE_D5, 100); delay(25); beep(speakerPin, NOTE_D5, 100); delay(25); beep(speakerPin, NOTE_D5, 100); } void PlayAnswerRed() { display8x7segment(digit[7], number[blankNumber]); beep(speakerPin, NOTE_E5, 100); delay(25); beep(speakerPin, NOTE_E5, 100); delay(25); beep(speakerPin, NOTE_E5, 100); } void PlayAnswerYellow() { display8x7segment(digit[7], number[blankNumber]); beep(speakerPin, NOTE_F5, 100); delay(25); beep(speakerPin, NOTE_F5, 100); delay(25); beep(speakerPin, NOTE_F5, 100); } void PlayAccept() { display8x7segment(digit[7], number[blankNumber]); beep(speakerPin, NOTE_C5, 75); delay(10); beep(speakerPin, NOTE_D5, 75); delay(10); beep(speakerPin, NOTE_E5, 75); delay(10); beep(speakerPin, NOTE_G5, 75); delay(10); beep(speakerPin, NOTE_E5, 75); delay(10); beep(speakerPin, NOTE_G5, 75); delay(10); beep(speakerPin, NOTE_C6, 75); } void PlayDeny() { display8x7segment(digit[7], number[blankNumber]); beep(speakerPin, NOTE_A4, 1000); } void beep (unsigned char speakerPin, int frequencyInHertz, long timeInMilliseconds) { int x; long delayAmount = (long)(1000000/frequencyInHertz); long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2)); for (x=0; x < loopTime; x++) { digitalWrite(speakerPin, HIGH); delayMicroseconds(delayAmount); digitalWrite(speakerPin, LOW); delayMicroseconds(delayAmount); } } Step 5: The Buttons I made the buttons with some big coloured buttons and some speaker cables... you can use whatever kind of cables you want. I also added connectors to make it easier to transport by removing it from the main unit. Step 6: The Main Unit I have connected all components on the board by soldering them together. After that, I placed all the items in a wooden box that I constructed with my father's assistance. It was specifically made for this project and took a considerable amount of time to build, but I am extremely satisfied with the end result. The Arduino has been substituted with an ATmega328 chip and a 16mhz ceramic resonator to reduce expenses and save space. I'm powering the entire setup with a 5V power supply as well. I decided against using a voltage regulator because the power should remain consistent, although using one may be a safer option. Step 7: The Finished Product Here's the Game Show Buzzer in action :) See version 2... Now with Bluetooth here : https://www.instructables.com/id/Quiz-Game-Show-Buzzer-Bluetooth-Edition/ Step 8: Here's How It Plays If you like my build, please like the video on YouTube and subscribe, it would be nice :) Source: Quiz Game Show Buzzer using Arduino ### OPEN SOURCE KEY PROGRAMMER FOR HITAG2 KEYS Hitag transponders are employed in a wide range of car keys to prevent theft and unauthorized starting of vehicles. They are also a contributing factor to the increased cost of duplicating car keys for many models that incorporate this technology. Nevertheless, there is currently a software developer who collaborates with these transponder keys, all thanks to Janne Kivijakola.   The hack involves utilizing a retired reader tool obtained from a Renault in a junkyard, connected to either an Arduino Mega 2560 or Arduino Nano. Using this configuration, key transponders can be programmed using a software called AESHitager that operates on the Windows platform. It works with different Hitag transponders such as Hitag2, Hitag3, and Hitag AES, as well as the VVDI Super Chip and specific BMW keys. If you’ve been having issues with coded keys, this project might just be what you need to sort your car out. Everything you need is available on GitHub for those wishing to try this at home. We’ve seen some interesting hacks in this space before, too. Video after the break. Source: OPEN SOURCE KEY PROGRAMMER FOR HITAG2 KEYS ### LCD & Keypad Shield Quickstart Guide using arduino The 16x2 LCD And Keypad Shield is easy to use as it works seamlessly with the Arduino "LiquidCrystal" library. With just a few lines of code, you can set up the LCD and show messages on it. Additionally, you have the option to create more complex projects like displaying menu items and using buttons to select them. Power Requirements A quality 5V power source is essential for the LCD & Keypad Shield to achieve maximum backlight and display contrast. Using the LCD Shield along with the Arduino powered by USB might lead to a voltage decrease through the cable. If you are experiencing issues with the contrast of the display or the brightness of the backlight, attempt connecting a power source of approximately 7 to 9Vdc to the Arduino's 2.1mm DC jack. In an undervoltage scenario, a common sign is when one line of the LCD displays light-colored rectangles instead of characters, while the other line remains blank. The Arduino can still operate properly at around 4V, but the LCD & Keypad Shield will not work. Library Requirements The LiquidCrystal library, included in the official Arduino distribution, manages all the tasks associated with interfacing with the LCD Shield. To determine if it is installed, open the IDE and navigate to Files -> Examples -> LiquidCrystal. If it is present, you are all set. Minimal Display Example To start up the LCD and display a message, open a new sketch in the Arduino IDE and paste in the following code: #include #include LiquidCrystal lcd( 8, 9, 4, 5, 6, 7 ); void setup(){  lcd.begin(16, 2);  lcd.print("hello, world!");} void loop(){    // your main loop code here...} Reading The Buttons The LCD Shield has 5 buttons intended for navigation or control input. The buttons are organized in a convenient layout and named UP, DOWN, LEFT, RIGHT, and SELECT, however it is completely up to your design to determine the action taken when a specific button is pushed. A chain of resistors connects all buttons to a single analog input A0, providing a unique reference voltage to A0 based on the pressed button. This part of the shield diagram displays the input buttons and corresponding resistors. If no button is pressed, the voltage on A0 will be raised to 5V by the 2K resistor known as R6. None of the other resistors play a role in that scenario, and the analog reading on A0 will max out at 1023. So, if you use the analogRead() function on A0 and the result is 1023 (or higher than approximately 1000), you can conclude that no buttons are currently being pressed. Now imagine the outcome when the "DOWN" button is pushed. Currently, A0 is receiving a voltage that is split between the 2K resistor attempting to pull it to 5V, and the series of 330R and 620R resistors (totaling 950R) attempting to pull it to 0V. In this scenario, A0 receives a voltage of approximately 1.61V, causing an analogRead() on A0 to result in a value of around 329. If A0 reads around 329, then it means the "DOWN" button is being pressed. The same concept is valid for the remaining buttons, with their respective voltages and corresponding analogRead() values displayed in the above diagram. This is an efficient method to have a complete set of input buttons with just one I/O pin on your Arduino, allowing other pins to be available for your project. Complex Example The following detailed example uses various methods to illustrate how to display messages on the LCD, read input from buttons, and update the display message based on the button inputs. Sample code for the Freetronics LCD & Keypad Shield: http://www.freetronics.com/products/lcd-keypad-shield by Marc Alexander, 7 September 2011 This example code is in the public domain. This program demonstrates button detection, LCD text/number printing, and LCD backlight control on the Freetronics LCD & Keypad Shield, connected to an Arduino board. After powerup, the screen looks like this: |Freetronics 16x2| |Btn:          0 | <- This time value counts up the number of seconds since reset (overflows at 99) When a button is pressed, a label appears for it: |Freetronics 16x2| |Btn:RIGHT     0 | Labels are LEFT, UP, DOWN, RIGHT and SELECT-FLASH. SELECT-FLASH makes the LCD backlight flash off and on when held down. Pins used by LCD & Keypad Shield: A0: Buttons, analog input from voltage ladder D4: LCD bit 4 D5: LCD bit 5 D6: LCD bit 6 D7: LCD bit 7 D8: LCD RS D9: LCD E D3: LCD Backlight (high = on, also has pullup high so default is on) ADC voltages for the 5 buttons on analog input pin A0: RIGHT:  0.00V :   0 @ 8bit ;   0 @ 10 bit UP:     0.71V :  36 @ 8bit ; 145 @ 10 bit DOWN:   1.61V :  82 @ 8bit ; 329 @ 10 bit LEFT:   2.47V : 126 @ 8bit ; 505 @ 10 bit SELECT: 3.62V : 185 @ 8bit ; 741 @ 10 bit*/   For more detail: LCD & Keypad Shield Quickstart Guide ### AXIOMTEK’S INDUSTRIAL ATX MOTHERBOARD WITH 9TH/8TH GENERATION INTEL® CORE™ FOR HIGH-DENSITY COMPUTING SOLUTIONS – IMB520R & IMB521R Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is introducing the IMB520R and IMB521R, its new industrial ATX motherboards powered by the LGA1151 socket 9th and 8th generation Intel® Core™ i7/i5/i3 (code name: Coffee Lake Refresh), Intel® Pentium® or Intel® Celeron® processor with the Intel® Q370 chipset (IMB520R) or Intel® C246 chipset (IMB521R). These industrial motherboards are designed with rich functionality and offer high processing powers, multiple expansion interfaces, security feature, and stunning graphical performance to deliver true customer value and quick deployment in a broad range of high-performance applications such as industrial automation, gaming, AI-related server, self-service kiosks, medical, and digital signage. The IMB520R and IMB521R not only meet the requirements for computing and graphics performance but also take into account customization and flexibility to help facilitate quick deployment,” said Brandon Wang, a product manager of IPC Division at Axiomtek. “They feature one PCIe x16 slot, four PCIe x4 slots, one PCIe x1 slot and one PCI slot for future expansions such as motion control cards, frame grabber cards or data acquisition cards, making them an ideal solution for machine vision and industrial automation applications. They also have two USB 3.1 Gen2 and four USB 3.1 Gen1 ports for faster data transfer. In addition, these two industrial-grade ATX motherboards are integrated with the Intel® HD Graphics to deliver stunning 4K resolution, as well as fast 3D and video playback for graphics-intensive applications. They support three independent displays with DisplayPort++, DVI-D, HDMI, and VGA. The IMB520R and IMB521R come with multiple I/O ports including four RS-232, two RS-232/422/485, two Gigabit LAN with Intel® Ethernet controller i211-AT and Intel® Ethernet connection i219-LM, two USB 3.1 Gen2, four USB 3.1 Gen1, seven 180D type A USB 2.0, eight-channel digital I/O, one HD Codec audio, one SMBus, and one PS/2 keyboard and mouse. Both of the ATX motherboards are equipped with four 288-pin DDR4-2666/2400 DIMM sockets with a memory capacity of up to 128GB to meet the needs of high-density computing applications. Furthermore, they feature four SATA-600 sockets with RAID 0/1/5/10 function to enhance data recovery capability. To ensure reliable operation across platforms, the well-designed industrial motherboards are capable of withstanding a wide operating temperature range of 0°C to 60°C. They also support watchdog timer, hardware monitoring functions and optional Trusted Platform Module 2.0 (TPM 2.0). Read more: AXIOMTEK’S INDUSTRIAL ATX MOTHERBOARD WITH 9TH/8TH GENERATION INTEL® CORE™ FOR HIGH-DENSITY COMPUTING SOLUTIONS – IMB520R & IMB521R ### Arduino Based Vehicle Accident Alert System using GPS, GSM and Accelerometer In our previous tutorials, we have learned about How to interface GPS module with Computer, how to build a Arduino GPS Clock and how to Track vehicle using GSM and GPS.  Here in this project, we are going to build a Arduino based vehicle accident alert system using GPS, GSM and accelerometer. Accelerometer detects the sudden change in the axes of vehicle and GSM module sends the alert message on your Mobile Phone with the location of the accident. Location of accident is sent in the form of Google Map link, derived from the latitude and longitude from GPS module. The Message also contains the speed of vehicle in knots. See the Demo Video at the end. This Vehicle Accident alert project can also be used as a Tracking System and much more, by just making few changes in hardware and software. Components Required: Arduino Uno GSM Module (SIM900A) GPS Module (SIM28ML) Accelerometer (ADXL335) 16x2 LCD Power Supply Connecting Wires 10 K-POT Breadboard or PCB Power supply 12v 1amp Before going into Project, we will discuss about GPS, GSM and Accelerometer. GPS Module and Its Working: GPS stands for Global Positioning System and used to detect the Latitude and Longitude of any location on the Earth, with exact UTC time (Universal Time Coordinated). GPS module is used to track the location of accident in our project. This device receives the coordinates from the satellite for each and every second, with time and date. We have previously extracted $GPGGA string in Vehicle Tracking System to find the Latitude and Longitude Coordinates. GPS module sends the data related to tracking position in real time, and it sends so many data in NMEA format (see the screenshot below). NMEA format consists several sentences, in which we only need one sentence. This sentence starts from $GPGGA and contains the coordinates, time and other useful information. This GPGGA is referred to Global Positioning System Fix Data. Know more about NMEA sentences and reading GPS data here. We can extract coordinate from $GPGGA string by counting the commas in the string. Suppose you find $GPGGA string and stores it in an array, then Latitude can be found after two commas and Longitude can be found after four commas. Now, this latitude and longitude can be put in other arrays. Below is the $GPGGA String, along with its description: $GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47 $GPGGA,HHMMSS.SSS,latitude,N,longitude,E,FQ,NOS,HDP,altitude,M,height,M,,checksum data Identifier Description $GPGGA Global Positioning system fix data HHMMSS.SSS Time in hour minute seconds and milliseconds format. Latitude Latitude (Coordinate) N Direction N=North, S=South Longitude Longitude(Coordinate) E Direction E= East, W=West FQ Fix Quality Data NOS No. of Satellites being Used HDP Horizontal Dilution of Precision Altitude Altitude (meters above from sea level) M Meter Height Height Checksum Checksum Data GSM Module: The SIM900 is a complete Quad-band GSM/GPRS Module which can be embedded easily used by customer or hobbyist. SIM900 GSM Module provides an industry-standard interface. SIM900 delivers GSM/GPRS 850/900/1800/1900MHz performance for voice, SMS, Data with low power consumption. It is easily available in the market. SIM900 designed by using single-chip processor integrating AMR926EJ-S core Quad - band GSM/GPRS module in small size. GPRS Enabled AT Command: AT means ATTENTION. This command is used to control GSM module. There are some commands for calling and messaging that we have used in many of our previous GSM projects with Arduino. For testing GSM Module we used AT command. After receiving AT Command GSM Module respond with OK. It means GSM module is working fine. Below is some AT commands we used here in this project: ATE0 For echo off AT+CNMI=2,2,0,0,0 Auto opened message Receiving. (No need to open message) ATD; making a call (ATD+919610126059;\r\n) AT+CMGF=1 Selecting Text mode AT+CMGS=”Mobile Number” Assigning recipient’s mobile number >>Now we can write our message >>After writing message Ctrl+Z send message command (26 in decimal). ENTER=0x0d in HEX (To learn more about GSM module, Check our various GSM projects with various microcontrollers here) Accelerometer: Pin Description of accelerometer: Vcc         5 volt supply should connect at this pin. X-OUT   This pin gives an Analog output in x direction Y-OUT   This pin give an Analog Output in y direction Z-OUT   This pin gives an Analog Output in z direction GND      Ground ST          This pin used for set sensitivity of sensor Also check our other projects using Accelerometer: Ping Pong Game using Arduino and Accelerometer Based Hand Gesture Controlled Robot. Circuit Explanation: Circuit Connections of this Vehicle Accident Alert System Project is simple. Here Tx pin of GPS module is directly connected to digital pin number 10 of Arduino. By using Software Serial Library here, we have allowed serial communication on pin 10 and 11, and made them Rx and Tx respectively and left the Rx pin of GPS Module open. By default Pin 0 and 1 of Arduino are used for serial communication but by using the SoftwareSerial library, we can allow serial communication on other digital pins of the Arduino. 12 Volt supply is used to power the GPS Module. GSM module’s Tx and Rx pins of are directly connected to pin D2 and D3 of Arduino. For GSM interfacing, here we have also used software serial library. GSM module is also powered by 12v supply. An optional LCD’s data pins D4, D5, D6, and D7 are connected to pin number 6, 7, 8, and 9 of Arduino. Command pin RS and EN of LCD are connected with pin number 4 and 5 of Arduino and RW pin is directly connected with ground. A Potentiometer is also used for setting contrast or brightness of LCD. An Accelerometer is added in this system for detecting an accident and its x,y, and z-axis ADC output pins are directly connected to Arduino ADC pin A1, A2, and A3. Working Explanation: In this project, Arduino is used for controlling whole the process with a GPS Receiver and GSM module. GPS Receiver is used for detecting coordinates of the vehicle, GSM module is used for sending the alert SMS with the coordinates and the link to Google Map. Accelerometer namely ADXL335 is used for detecting accident or sudden change in any axis. And an optional 16x2 LCD is also used for displaying status messages or coordinates. We have used GPS Module SIM28ML and GSM Module SIM900A. When we are ready with our hardware after programming, we can install it in our vehicle and power it up. Now whenever there is an accident, the car gets tilt and accelerometer changes his axis values. These values read by Arduino and checks if any change occurs in any axis. If any change occurs then Arduino reads coordinates by extracting $GPGGA String from GPS module data (GPS working explained above) and send SMS to the predefined number to the police or ambulance or family member with the location coordinates of accident place. The message also contains a Google Map link to the accident location, so that location can be easily tracked. When we receive the message then we only need to click the link and we will redirect to the Google map and then we can see the exact location of the vehicle. Speed of Vehicle, in knots (1.852 KPH), is also sent in the SMS and displayed on the LCD panel. Check the full Demo Video below the Project. Here in this project, we can set the sensitivity of Accelerometer by putting min and max value in the code. Here in the demo have used given values: #define minVal -50 #define MaxVal 50 But for better results you can use 200 in place of 50, or can set according to your requirement. Programming Explanation: Complete Program has been given below in Code section; here we are explaining its various functions in brief. First we have included all the required libraries or headers files and declared various variables for calculations and storing data temporary. After this, we have created a function void initModule(String cmd, char *res, int t) to initialize the GSM module and checking its response using AT commands. void initModule(String cmd, char *res, int t) { while(1) { Serial.println(cmd); Serial1.println(cmd); delay(100); while(Serial1.available()>0) { if(Serial1.find(res)) { Serial.println(res); delay(t); return; } else { Serial.println("Error"); } } delay(t); } } After this, in void setup() function, we have initialized hardware and software serial communication, LCD, GPS, GSM module and accelerometer. void setup() { Serial1.begin(9600); Serial.begin(9600); lcd.begin(16,2); lcd.print("Accident Alert "); lcd.setCursor(0,1); lcd.print(" System "); delay(2000); lcd.clear(); .... ...... ...... ..... Accelerometer calibration process is also done in setup loop. In this, we have taken some samples and then find the average values for the x-axis, y-axis, and z-axis. And store them in a variable. Then we have used these sample values to read changes in accelerometer axis when vehicle gets tilt (accident). lcd.print("Callibrating "); lcd.setCursor(0,1); lcd.print("Acceleromiter"); for(int i=0;i0) { if(Serial1.find(res)) { Serial.println(res); delay(t); return; } else { Serial.println("Error"); } } delay(t); } } void setup() { Serial1.begin(9600); Serial.begin(9600); lcd.begin(16,2); lcd.print("Accident Alert  "); lcd.setCursor(0,1); lcd.print("     System     "); delay(2000); lcd.clear(); lcd.print("Initializing"); lcd.setCursor(0,1); lcd.print("Please Wait..."); delay(1000); Serial.println("Initializing...."); initModule("AT","OK",1000); initModule("ATE1","OK",1000); initModule("AT+CPIN?","READY",1000); initModule("AT+CMGF=1","OK",1000); initModule("AT+CNMI=2,2,0,0,0","OK",1000); Serial.println("Initialized Successfully"); lcd.clear(); lcd.print("Initialized"); lcd.setCursor(0,1); lcd.print("Successfully"); delay(2000); lcd.clear(); lcd.print("Callibrating "); lcd.setCursor(0,1); lcd.print("Acceleromiter"); for(int i=0;i0)            //Serial incoming data from GPS { char inChar = (char)gps.read(); gpsString+= inChar;                    //store incoming data from GPS to temparary string str[] i++; // Serial.print(inChar); if (i < 7) { if(gpsString[i-1] != test[i-1])         //check for right string { i=0; gpsString=""; } } if(inChar=='\r') { if(i>60) { gps_status=1; break; } else { i=0; } } } if(gps_status) break; } } void get_gps() { lcd.clear(); lcd.print("Getting GPS Data"); lcd.setCursor(0,1); lcd.print("Please Wait....."); gps_status=0; int x=0; while(gps_status==0) { gpsEvent(); int str_lenth=i; coordinate2dec(); i=0;x=0; str_lenth=0; } } void show_coordinate() { lcd.clear(); lcd.print("Lat:"); lcd.print(latitude); lcd.setCursor(0,1); lcd.print("Log:"); lcd.print(logitude); Serial.print("Latitude:"); Serial.println(latitude); Serial.print("Longitude:"); Serial.println(logitude); Serial.print("Speed(in knots)="); Serial.println(Speed); delay(2000); lcd.clear(); lcd.print("Speed(Knots):"); lcd.setCursor(0,1); lcd.print(Speed); } void coordinate2dec() { String lat_degree=""; for(i=20;i<=21;i++) lat_degree+=gpsString[i]; String lat_minut=""; for(i=22;i<=28;i++) lat_minut+=gpsString[i]; String log_degree=""; for(i=32;i<=34;i++) log_degree+=gpsString[i]; String log_minut=""; for(i=35;i<=41;i++) log_minut+=gpsString[i]; Speed=""; for(i=45;i<48;i++)          //extract longitude from string Speed+=gpsString[i]; float minut= lat_minut.toFloat(); minut=minut/60; float degree=lat_degree.toFloat(); latitude=degree+minut; minut= log_minut.toFloat(); minut=minut/60; degree=log_degree.toFloat(); logitude=degree+minut; } void Send() { Serial1.println("AT"); delay(500); serialPrint(); Serial1.println("AT+CMGF=1"); delay(500); serialPrint(); Serial1.print("AT+CMGS="); Serial1.print('"'); Serial1.print("9821757249");    //mobile no. for SMS alert Serial1.println('"'); delay(500); serialPrint(); Serial1.print("Latitude:"); Serial1.println(latitude); delay(500); serialPrint(); Serial1.print(" longitude:"); Serial1.println(logitude); delay(500); serialPrint(); Serial1.print(" Speed:"); Serial1.print(Speed); Serial1.println("Knots"); delay(500); serialPrint(); Serial1.print("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); Serial1.print(latitude,6); Serial1.print("+");              //28.612953, 77.231545   //28.612953,77.2293563 Serial1.print(logitude,6); Serial1.write(26); delay(2000); serialPrint(); } void serialPrint() { while(Serial1.available()>0) { Serial.print(Serial1.read()); } }   Video: https://youtu.be/vvnSQYEjT8c Source: Arduino Based Vehicle Accident Alert System using GPS, GSM and Accelerometer ### Arduino Make Your UNO Kit lets you build your own microcontroller from scratch If you are interested in learning how to solder and code you may be interested in the launch of a new electronics kit in the form of the Arduino Make Your UNO Kit. Created to enable you to build, code and solder your very own Arduino UNO Micro controller board by mounting every single component. The kit comes in a presentation box with all the components you need to start soldering and programming projects using the Arduino platform. Priced at $58.50 the Arduino Make Your UNO Kit is now available to purchase worldwide directly from the official Arduino online store. “The first Arduino UNO was launched back in 2005, with a clear purpose to allow everyone who had an idea to make it possible through a simple and open interface. Many years have passed, technology has evolved, but we never forgot that initial thrill that came from opening up countless possibilities to so many makers. The Arduino Make Your UNO Kit is the natural extension of a story that will shape the makers of tomorrow, a step in the past to move forward in a brilliant future.” Arduino Make Your UNO Kit Whether you are a beginner, a passionate maker, or a curious musician, the Arduino Make Your UNO Kit is the perfect gift for a 100% fun guaranteed experience (treating yourself is allowed)! After the learning, comes the fun part — the unique nature of Arduino Make Your UNO Kit is not just from the assembly. At the end of the process, you’ll have in your hands a full functioning synthesizer to create tunes to your own individual beat.” “The Arduino Make Your UNO Kit is also the very first of a series of more sustainable production: the packaging comes in FSC certified paper, and converts into the container for the synth. Plus, even the practice solder board can be readily used as a keychain to minimize waste.” Source: Arduino Make Your UNO Kit lets you build your own microcontroller from scratch ### Arduino Nano 33 BLE Rev2 microcontroller development board powered by nRF52840 If like me you enjoy using the range of Arduino development boards to create a wide variety of different projects. You will be pleased to know that a new microcontroller board has been launched this week in the form of the Arduino Nano 33 BLE Rev2, priced at €22,80. The latest addition to the Arduino Nano series, is packed with features that are sure to excite both hobbyists and professionals. This small yet powerful board is designed to elevate a wide range of projects, from simple DIY endeavors to complex robotic systems. Despite its small size, the Nano 33 BLE Rev2 is a robust board. It retains the compact Arduino Nano form factor but now includes support for 3.3-V components, making it compatible with a broader range of devices. One of the most notable new features is the nine-axis inertial measurement unit (IMU). This IMU combines an accelerometer, gyroscope, and magnetometer to provide precise motion tracking, which is essential for projects that require accurate movement detection. Wireless connectivity is a breeze with the board’s Bluetooth 5 Low Energy module, which includes an internal antenna for easy data transmission. The integration with the ArduinoBLE library simplifies the process of connecting your projects to the internet or other devices. For those who are more comfortable with Python, the Nano 33 BLE Rev2 supports MicroPython, allowing you to take advantage of the Python standard library for efficient coding. At the heart of the Nano 33 BLE Rev2 is the nRF52840 microcontroller, which comes with 1MB of CPU Flash Memory. The board runs on the Arm Mbed OS, an open-source operating system that works seamlessly with Arduino APIs. This combination provides a development environment that is both advanced and user-friendly, making it accessible to a wide range of users. The transition to the MP2322 power supply component is a significant upgrade, offering improved stability and performance. This means that your projects will operate more reliably, giving you peace of mind as you work on your creations. Additionally, the Nano 33 BLE Rev2 is designed to be backward compatible with the previous Nano’s sketches, and there’s a dedicated tutorial to help you integrate your existing projects with the new board. The design of the Nano 33 BLE Rev2 is forward-thinking, with additional pads and test points for USB and SWD connections. The inclusion of a VUSB soldering jumper allows you to activate the VUSB pin when necessary. If you’re looking to expand your sensor capabilities, the Nano 33 BLE Rev2 offers a clear path to upgrade to the Nano 33 BLE Sense Rev2. The release of the Arduino Nano 33 BLE Rev2 is a clear indication of Arduino’s focus on innovation and its responsiveness to the needs of its user base. This new board encapsulates the idea of combining a small footprint with powerful features, providing a versatile platform for anyone looking to bring their creative ideas to life. With its precision, flexibility, and power, the Nano 33 BLE Rev2 is poised to redefine what’s possible in the world of electronics. Exploring the Arduino Nano 33 BLE Rev2’s Advanced Features The Arduino Nano 33 BLE Rev2 is a significant leap forward in the world of microcontroller boards, designed to empower a diverse array of projects with its advanced capabilities. Despite its diminutive size, this board is a powerhouse, offering a suite of features that cater to both the novice hobbyist and the seasoned professional. Its compact form factor is a hallmark of the Arduino Nano series, yet it does not compromise on functionality, providing a versatile tool for a wide range of applications. One of the standout features of the Nano 33 BLE Rev2 is its nine-axis inertial measurement unit (IMU). This sensor is a fusion of an accelerometer, gyroscope, and magnetometer, which together enable the board to detect orientation, acceleration, and magnetic fields with high precision. This makes it an ideal choice for projects that require detailed motion tracking, such as drones, wearables, or gesture-controlled devices. The inclusion of this IMU opens up new possibilities for developers to create more interactive and responsive systems. Wireless Connectivity and Programming Flexibility The board’s Bluetooth 5 Low Energy module is a game-changer for wireless communication, providing a reliable and energy-efficient way to connect devices. The module comes with an internal antenna, which simplifies the design process by eliminating the need for external components. This feature is particularly beneficial for projects that require remote control or data exchange, such as home automation systems or health monitoring devices. For developers who prefer Python, the Nano 33 BLE Rev2’s support for MicroPython is a significant advantage. This allows users to leverage the extensive Python standard library, which can greatly streamline coding and reduce development time. MicroPython support also makes the board more accessible to a broader audience, including those who may be more familiar with Python than traditional Arduino programming languages. Powerful Hardware and Backward Compatibility At the core of the Nano 33 BLE Rev2 is the nRF52840 microcontroller, equipped with 1MB of CPU Flash Memory. This microcontroller is the driving force behind the board’s impressive performance, capable of handling complex tasks with ease. The board’s operation is further enhanced by the Arm Mbed OS, an open-source operating system that integrates seamlessly with Arduino APIs, offering a sophisticated yet user-friendly development environment. The transition to the MP2322 power supply component marks a significant improvement in the board’s stability and performance. This ensures that projects powered by the Nano 33 BLE Rev2 will run smoothly and reliably, which is crucial for applications where consistent operation is critical. The board’s backward compatibility with previous Nano sketches and the availability of dedicated tutorials facilitate a smooth integration process for those looking to upgrade their existing projects. For more information, full specifications and purchasing options jump over to the official Arduino store. Source: Arduino Nano 33 BLE Rev2 microcontroller development board powered by nRF52840 ### Ender 3 with Marlin – How to Install Marlin Firmware on Your Ender 3 Ender 3 Marlin What is Marlin Firmware? Marlin firmware holds the title of being the most commonly used 3D printer firmware worldwide. Operating on an 8-bit controller board makes it cost-effective, and it is completely open source and available for use at no charge. Companies like Creality, the manufacturer of the Ender 3, benefit greatly from making modifications and additions to their machines. While the Ender 3 is a great machine – it was even our winter 2018/19 pick for the “Best 3D Printer Under $200” – its lower cost means some extras are not included. But, fear not, this guide will explain how to upgrade your Ender 3 using Marlin. If you don’t have an Ender printer, check out our general guide on installing firmware. Ender 3 Marlin Flashing a Bootloader As the Ender 3 is an affordable 3D printer, its board lacks a pre-installed bootloader. Therefore, you must install one on your own prior to flashing the firmware via USB. What You’ll Need 5 female to female single Dupont wires 1 female to male Dupont wire An Arduino Uno (or clone) and cable to connect to a PC A Windows computer with the Arduino IDE pre-installed How To Do It Open the Arduino IDE on your computer. Go to example sketches, select Arduino ISP and open it up. Go to ‘Manage libraries’ and add the U8glib Library (Make sure the library is called U8glib. You may have to scroll down.) Then go to board manager and add the Sanguino board. Once done, plug in your Arduino Uno. Select Arduino Uno as the port and Arduino Uno as the board, then click ‘Upload sketch’. It should upload successfully. Select the Sanguino board from the menu, which you should have added. Open your Ender 3’s control box and wire it up to the Arduino as follows:Melzi — ArduinoMISO — MISO5V — 5VSCK — SCKMOSI — MOSIRESET — Digital Pin 10 (the pin with the ~10 on the Arduino in the row of pins)GND — GND If a blue light flashes on the Creality board you have wired it correctly Click on the tools tab and click ‘Burn bootloader’. If it says in the shell ‘Output bootloader burned successfully’, you’ve done it. Unplug your Dupont connectors from the Ender 3, put the cover back on the board and screw it on. Now unplug your Arduino from the computer. Ender 3 Marlin Installing Marlin Firmware Now that the bootloader is flashed, you’re ready to upload the firmware. Download the latest version of Marlin firmware. Unzip the folder and navigate to the example configurations folder, which is in the Marlin folder. Select the folder that says Ender 3 in example configurations and copy all the files there back into the Marlin folder. When it asks if you want to overwrite what is already there, click ‘yes’. Scroll down to the marlin.ino file and click to open it in the Arduino IDE. You are now ready to upload. If you wish to add bilinear bed leveling, go to the next step. Otherwise, make sure you have the printer plugged in via USB, the port is correct and the board is Sanguino. Then click the upload button. If that completes in the shell you are finished. Unplug the printer from the computer and plug it into the power socket. Be aware the printer may take longer to boot up than usual. Ender 3 Marlin Bilinear Bed Leveling Bilinear bed leveling is having the printer automatically adjust the bed level, eliminating the need for manual adjustment with knobs. By examining the bed at nine different points, the machine adjusts the z-axis incrementally with a dial and a tool such as paper or a feeler gauge, ensuring that the printer compensates for any discrepancies in your prints. Open the marlin.ino file select configuration.h. Type Ctrl F and search for PROBE_MANUALLY Uncomment it by deleting both slashes Then search LCD_BED_LEVELING and uncomment it Search for AUTO_BED_LEVELING_BILINEAR and click ‘Find’ twice then uncomment what it selects. Since the Ender 3 only has 1248kb of storage, search SLIM_LCD  and uncomment it. Now you are ready to compile. Make sure you have the printer plugged in via USB, the port is correct and the board is Sanguino. Then click the upload button. If that completes in the shell you are finished. Unplug the printer from the computer and plug it into the power socket. Be aware the printer may take longer to boot up than usual. ENDER 3: MARLIN Adding Automatic Bed Leveling Automatic (bilinear) bed leveling is when the printer levels the bed itself – without you having to manually do it using knobs under the bed. It does this by probing the bed in a set of nine points and, using a piece of paper or feeler gauge, you can use the dial to move the Z-axis up and down in small increments and the printer will automatically account for this in your prints. Open the marlin.ino file select configuration.h. Type “Ctrl F” and search for PROBE_MANUALLY. Uncomment it by deleting the two slashes. Then search LCD_BED_LEVELING and uncomment it. Search for AUTO_BED_LEVELING_BILINEAR and click “Find” twice. Then, uncomment what it selects. Since the Ender 3 only has 1,248 KB of storage, search SLIM_LCD  and uncomment it. Now you’re ready to compile. Make sure you have the printer plugged in via USB, the port is correct, and the board is Sanguino. Then click the upload button. If that completes, you’re finished! Unplug the printer from the computer and plug it into the power socket. Be aware the printer may take longer to boot up than usual. Source: Ender 3 with Marlin – How to Install Marlin Firmware on Your Ender 3 ### AppNote: How to Use the MAX17501 and MAX17502 for Negative Output Voltage Applications Abstract: This article shows how to produce negative output voltages from positive input voltages using the MAX17501 and MAX17502 synchronous step-down converters. Introduction Industrial control equipment such as programmable logic controllers, I/O modules, mass flow controllers, and various other sensors and supporting systems use analog components like amplifiers and multiplexers that operate on negative supply voltage. Typically operating at ±12V, ±18V or other variations, these voltages are generated from a 24V DC bus. Maxim’s portfolio of high-voltage synchronous buck regulators offer 50% lower power loss allowing customers to operate their equipment 50% cooler. In this application note, we discuss techniques to use these synchronous buck regulators to generate negative voltages. Design Considerations Synchronous buck converters can be configured to work in a buck-boost topology to produce negative output voltage from positive input voltage. This application note explains how the MAX17501 and MAX17502 synchronous step-down converters can be used to generate negative output voltage from positive input voltage. A -15V output voltage application is used to demonstrate the principle. Table 1. Negative Output Voltage Power-Supply Requirements. The sum of the maximum operating input voltage for the negative output application and the absolute value of the output voltage should not exceed the maximum operating voltage (60V) of the MAX17501 and MAX17502, as expressed by the following equation: VIN_MAX + |VOUT| ≤ 60V Therefore, for -15V output voltage, maximum operating input voltage can be as high as 45V. The minimum operating input voltage for the negative output voltage application should be greater than 4.5V. Calculating Duty Ratio The expression for the duty ratio of the negative output power supply is shown below; ignoring the losses associated with the power switches and the inductor DC resistance:   For more detail: AppNote: How to Use the MAX17501 and MAX17502 for Negative Output Voltage Applications ### Drawing an Arduino Circuit Diagram I've been in possession of an Arduino Duemilanove for a couple of weeks. If you are unfamiliar with the Arduino, it is defined as "a platform for creating electronics prototypes using adaptable, user-friendly hardware and software". The setup consists of a small microcontroller, a USB port for programming on a computer, a power socket for standalone power, and various digital and analog pins for linking LEDs, switches, and sensors. It is reasonably priced, and there is a complimentary IDE accessible for coding. I did well, but I quickly struggled to remember my circuits. I would assemble a project on a breadboard, program it, and then take it apart to build a different circuit. When I attempted to return to a previous circuit, I had the software saved, but I couldn't always remember how I had wired the circuit. I looked for a tool to document my circuits and came across Fritzing. Using it is very easy. You select parts from a palette and arrange them by dragging and dropping. You can choose to work on either a breadboard view or a schematic view, and they will be synchronized automatically. It is easy to shape wires into curves to direct them along attractive routes. Displayed is an example of a configuration featuring the Arduino Duemilanove and a 7 Segment Red LED 0.3" Digital Display (RadioShack 276-075). Building this enabled me to experiment with another feature of Fritzing, since the basic components of the software included a 7 Segment LED that functioned as a numerical display with a common anode. Despite the lack of labeled pins, the tool still indicates the positioning of the anode/cathode, and my goal is to accurately recognize them. I changed the segment, adjusted the pin connections, and saved it as a new component. This was all straightforward and clear. Then I decided I wanted to have the pins be labeled A, B, C so that it would show up in the schematic view. All the images are SVG, and I didn't have an SVG editor handy, so I used svg-edit, an online browser based editor. I copied the "7-segment display.svg", added the letters, saved it into a new svg file, and selected it within fritzing. I did need to close and reopen Fritzing for it to refresh the schematic which already had the old image on it, but I didn't need to remove and re-add. I'm still experimenting with Fritzing, but for something that I've only been using for an hour or so I've found it remarkably full featured and easy to use. It would be nice if it had a "snap to grid" feature that would recognize when I'm trying to route my wires horizontally and vertically and fix things when I'm just a little off. But that's really just a nit - and maybe something it has and I just haven't found yet. One more thing that Fritzing can do is create a PCB layout in various formats, that can be used to manufacture the circuit boards. For example, you can export as a Gerber file and use a printed circuit board fabrication service like BatchPCB. Lastly, in case you were looking for how to count from 0 to 9 on the above circuit over and over again, here's the sketch   // Counting on a 7-Segment Red LED (common cathode) numerical display // RadioShack 276-075 / Wiring // // arduino pin -> 7-segment LED pin -> anode // 13 -> 14 -> A --A-- // 12 -> 13 -> B | | // 11 -> 9 -> RHDP F B // 10 -> 8 -> C | | // 9 -> 7 -> D --G-- // 8 -> 6 -> E | | // 7 -> 2 -> G E C // 6 -> 1 -> F | | // --D-- O int ledPins[]={0xDD,0x50,0xCE,0xDA,0x53,0x9B,0x9F,0xD0,0xDF,0xD3}; void setup() { for (int i=6;i<14;i++) { pinMode(i,OUTPUT); } } void loop() { for (int i=0; i<10; i++) { displayNumber(i); delay(500); } } void displayNumber(int num) { for (int i=0; i<8; i++) { digitalWrite(i+6, bitRead(ledPins[num],i)); } } Source: Drawing an Arduino Circuit Diagram ### Arduino and Silicon Labs collaborate to bring Matter to Arduino boards and IDE Arduino and Silicon Labs have joined hands to both bring Matter-compatible SiLabs wireless microcontrollers to the Arduino IDE and then design an upcoming Arduino Nano based on SiLabs MGM240 Arm Cortex-M33 microcontroller with Matter, Thread, Zigbee, and Bluetooth LE protocols. Available now: Arduino Core for Silicon Labs devices The first phase of the collaboration involves getting Arduino core for Silicon Labs development boards so that compatible devices can be programmed in the IDE. The good news is that it’s available now and works with four existing wireless boards: SparkFun Thing Plus Matter MGM240P based on MGM240PB32VNA Arm Cortex-M33 MCU with Matter, Thread, Zigbee 3.0, and Bluetooth 5.3 LE connectivity SiLabs xG27 Dev Kit based on EFR32BG27C140F768IM40 Arm Cortex-M33 MCU with Bluetooth LE 5.3, Bluetooth Mesh, Proprietary 2.4 GHz connectivity SiLabs xG24 Explorer Kit based on EFR32MG24B210F1536IM48 Arm Cortex-M33 MCU with Bluetooth 5.3 LE, Bluetooth Mesh, Matter, OpenThread, Zigbee, Proprietary 2.4 GHz SiLabs BGM220 Explorer Kit equipped with BGM220PC22HNA Bluetooth 5.2 PCB module You’ll find the source code, instructions to get started, and current known issues/limitations on GitHub. Upcoming Arduino Nano “Matter” board Rendering of the upcoming Arduino Nano “Matter” board with Silabs MGM240 wireless MCU The second phase of the collaboration will culminate with the launch of a new Matter-compatible Arduino Nano board based on SiLabs MGM240SD22VNA on Arduino Day in March 2024. The new board should be similar to the Sparkfun board from a software/firmware perspective and will be the first official Arduino board with a Silicon Labs microcontroller and Matter compatibility. The Matter firmware on customer devices is normally locked, as I understand that’s a security requirement and also needed for certification, but the Arduino Core for Silicon Labs devices and the new Arduino Nano should make it easier to experiment with the new Smart Home standard and other wireless protocols. Source: Arduino and Silicon Labs collaborate to bring Matter to Arduino boards and IDE ### Analogue Sensors – Calculate the Nonlinearity Introduced by a Load or Pull Down Resistor Have you ever had that terrible feeling that adding a load resistor or 'pull down' to your sensor is messing up all your analogue readings? Maybe you're wondering why we'd want to spoil a perfectly good circuit by putting in a load resistor at all? For many years I found that I would get strange, unpredictable, readings from my sensor related projects at the maximum and minimum locations when using analogue digital convertors (ADCs). I always blamed this on poorly designed micro processors and never for once thought that it might be my own circuit designs at fault ..... until now. To use an analogy, when the sensor goes to maximum or minimum, it does not just reach a maximum point, but quite often actually falls off the edge of the world into a kind of no man's land where it is then prey to all kinds of digital noise and other generally nasty things like Goblins and Elves. Anybody who, like me, who has blamed this on their arduino is totally forgiven! The example I'm using here is a simple three legged potentiometer with a ground, 5 volt and 'wiper' connection. Using the correct pull down resistor we can eliminate noisy readings from our projects ....... And ....... just to prove that math can actually be fun .......... I'll tell you how I discovered the non linearity adjustment formula through diagrams and images. Step 1: The Circuit In the circuit above we have are reading a simple potentiometer through it's 'wiper' arm through a 8.25K resistor and 16 bit ADC chip. Crucially, there is also a 100nF capacitor and a 100K resistor going to the ground rail from the wiper. We're going to concentrate on the 100K resistor. 100K is the recommended value from the manufacturers of the instrument. There's nothing unusual about this circuit and it looks pretty boring until we look at what's happening with the resistor in more detail. To get rid of the noises (and the Goblins and Elves) we want the resistor to be fairly small in ohms - maybe 10K, but if our pot is, for example 1K, we're going to get a massive amount of non linearity - see for yourself by opening the excel sheet in the next step. Initially, I did not set out to discover any formulae - I just wanted to visualise the non linearity created by a load resistor in a sensor related circuit. I wanted to try and isolate the curve and plot it as a graph in Microsoft excel. It just seemed like fun. Read more: Analogue Sensors – Calculate the Nonlinearity Introduced by a Load or Pull Down Resistor ### ANALOG DEVICES INTRODUCED ULTRATHIN 1.5A ΜMODULE THERMOELECTRIC COOLER REGULATOR Analog Devices introduced the LTM®4663, a complete 1.5 A μModule® Thermoelectric Cooler (TEC) regulator in a tiny 3.5 mm × 4 mm × 1.3 mm LGA package. Included in the package are the TEC controller, linear power stage, switching regulator, inductor and all support components. Operating over an input voltage range of 2.7 V to 5.5 V, the LTM4663 supports a 1.5 A continuous sink or source current capability. Only input and output capacitors are needed. The LTM4663 has two zero drift, rail-to-rail chopper amplifiers to serve as the thermistor input amplifier and the temperature feedback control loop. Features Built-in Two Zero-Drift, Rail-to-Rail Chopper Amplifiers 2.7 V to 5.5 V Input Voltage Range 1.5 A Driving Capability 1% Accuracy 2.5 V Internal Reference Output TEC Voltage and Current Monitoring Independent Programmable Heating and Cooling Current Limit Programmable Maximum TEC Voltage Default 2 MHz Switching Frequency Synchronization from 1.85 MHz to 3.25 MHz Capable of NTC, PTC and RTD Thermal Sensors 3.5 mm × 4  mm × 1.3 mm LGA Package Applications TEC Temperature Control Optical Networking System, Optical Module LiDAR System Read more: ANALOG DEVICES INTRODUCED ULTRATHIN 1.5A ΜMODULE THERMOELECTRIC COOLER REGULATOR ### DIY wattmeter with an Arduino DIY wattmeter with an Arduino Measuring power and energy using regular multimeters can be challenging or even unfeasible at times. In order to conduct such a precise and reliable measurement, a specific wattmeter is necessary. Due to their high cost, an alternative option is introduced in the form of a homemade wattmeter using an Arduino Nano board. Parameters This wattmeter gauges the actual power, total power, reactive power, phase, and energy. Additionally, the wattmeter also calculates the average, root mean square, variation, highest, lowest, and frequency of the voltage and current. It is able to calculate the voltage and current's area and track the duration of the measurements. Depending on the display being used, either two or four parameters can be read at the same time. An ideal instrument should not differentiate between AC and DC, as it ideally should. The key is selecting the correct parameter, all of which are justified through mathematical calculations. The voltage, current, real, and apparent power have a bandwidth around 1.8 kHz. The range of frequencies for reactive power and phase is restricted to mains frequencies between 50 and 60 Hz. Accuracy Even though an Arduino may not be the most precise board available, it is still possible to create a reliable measurement tool with it. After the recommended parts are utilized and following calibration, a precision of 0.2 % can be attained across a 10 °C temperature span. Code The Arduino code for this wattmeter is available as a text file: arduino-wattmeter-code-v1.0. Circuit In order to maintain simplicity in the circuit and design, a compromise was necessary: The meter's voltage and current inputs have set ranges. However, a solitary amplifier is utilized in order to minimize the burden voltage of the current measurement. General description The voltage is determined by measuring between the terminals labeled "COM" and "V". A voltage divider using R1 and R2 lowers the voltage for measurement by the analog input A4 of the Arduino. The Arduino is shielded from overvoltages by diodes D1 and D2. The present flowing through the "A" terminal passes through fuse F1 and shunt resistor R3 to reach the "COM" terminal. The voltage drop across R3 is directly proportional to the current flowing through it. As the voltage is extremely low (±50 mV total), IC1 amplifies it with R4,5 before sending it to analog input A5. Diodes D3 and D4 safeguard the electronics from voltage surges. To enable the measurement of both positive and negative voltages, the "COM" voltage needs to be set at half of the reference voltage. The internal Arduino reference voltage is 1.1 V when used, therefore the "COM" voltage should be around 0.55 V. The impedance of this voltage should be relatively lower than that of R2. Since the Arduino reference voltage has limited capacity, the 2.5 V reference voltage is created using resistors R6 & R7 in a voltage divider circuit from the 5 V power source. The voltage might change, but this won't impact the precision as it is monitored (input A6) and factored into the calculations. The 16*2 (or 16*4) character LCD-module connected to the Arduino can display the measured parameters through a 4 bit databus and 3 control signals. The four switches S1...4 choose these parameters. The LED D7 serves as an overflow signal and will illuminate if the voltage or current input is overwhelmed, causing the measurement to become unreliable. The wattmeter gets its power from a 9 VDC adaptor plugged into the Arduino's VIN and GND. The following text should be paraphrased using the same input language and maintaining the same number of words: Voltage & current range The voltage and current ranges are predetermined, so the input circuitries need to be adjusted for the specific application of the wattmeter. When selecting a range, expect values that may go beyond the nominal value rather than just focusing on the nominal value. When the wattmeter is applied to a 12 V PV-system, the battery voltage might exceed 14 V and the open terminal voltage of a PV-panel can be as high as 18 V. Inrush currents can exacerbate this issue, especially for current values. Remember that the chosen range is related to maximum values. The maximum value of a 100 Vrms sinusoidal AC voltage will increase by √2 to 141 V. Voltage input attenuator The voltage input attenuator is determined by the resistors R1 and R2. This resistor network will divide the input voltage so that the Arduino measures half reference voltage, 0.55 V, at maximum range. The resistor R2 has a fixed value of 10 kΩ, and the range is set by R1 and is calculated as: [Ω]. If for instance a 50 V range is required, R1 must be 899 kΩ. Because this value isn't a standard value, the closest higher E12 value is 1 MΩ. The value for R1 is may never be chosen lower than 10 kΩ to retain the overvoltage protection. Therefore the lowest possible range is ±1.1 V. Current range The current range is determined by the resistive value of the shunt R3, the amplification and the analog input sensitivity. Because the Arduino input sensitivity is fixed at ±0.55 V and the amplification is also fixed at 10 times, the voltage drop across R3 at full range is ±55 mV. So the range is set by the value of R3 and can be calculated as: [Ω] If a 5 A range is required, R3 must be 0.011 Ω, and is rounded to 0.01 Ω. Shunt resistor properties The shunt resistor is an essential component that requires specific focus. Resistors' resistance values can change due to temperature fluctuations. By self heating as well as by the ambient temperature. In order to decrease the self-heating of the shunt resistor, the power dissipation allowed must be significantly oversized. The power dissipation specified should be around 10 times greater than the actual maximum dissipation. In the provided circuit, the shunt resistor consumes 0.25 W by dissipating 5 A · 50 mV, making a 3 W resistor appropriate. A shunt resistor with a temperature coefficient of 50 ppm/°C can achieve a tolerance of 0.1% over a temperature range of 20 °C. This involves the self-heating of the shunt resistor and the subsequent temperature increase inside the instrument housing. Using a shunt resistor with a greater temperature coefficient will take precedence. The original tolerance doesn't matter much because it is accounted for through calibration. Selecting a minimal burden voltage across the shunt (maximum of 50 mV) allows for a resolution of 50 μV on a four-digit display. This leads to thermoelectric voltages being apparent at junctions made of different metals when there are temperature variations between the terminals. The shunt can experience temperature variations because of varying power dissipation from nearby components. Slight variations in the solder joints of the shunt resistor can lead to temperature discrepancies. Many resistors produce considerable thermoelectric voltages and are ineffective in this specific use. The recommended resistor for the shunt is the VISHAY-DALE - WSL3637R0100FEA, which possesses outstanding qualities. Amplifier The LTC1050 is a special rail-to-rail opamp with a low input offset voltage (5 μV) and a low input bias current (10 pA). Don't replace the opamp with any other type with unknown or worse specification. Components analog section All resistors in the analog section, including R1, 2, and 4...7, are 0.25 W metal film resistors with a 1% tolerance and a temperature coefficient of 100 ppm/°C or superior. The reverse leakage current of protection diodes D1...6 must be extremely low. Although the 1N4184 specified may not be the most ideal choice, it typically functions effectively. A significant variation exists in the reverse leakage current, so it is wise to monitor this current. In order to achieve this, attach the diode in the opposite direction within a series circuit including a voltmeter (Ri=10MΩ) and a 9 V battery. The voltage that can be measured should not go over 100 mV, which is equivalent to a leakage current of 10 nA. Build The wattmeter prototype presented in this article is constructed in a single PCB-unit to eliminate the need for external wiring to connectors. The only exception is the fixed mounted riser board for the four push button switches. It is possible to construct it on an 80*100 mm Perfboard and is simple. Only the following requires particular focus: A four point measurement is used to measure the current to the shunt resistor R3. The resistor is equipped with four terminals: I+ and I- for current flow, and S+ and S- for detecting burden voltage. This is illustrated in the adjacent photo. Examine the star point connection on the circuit diagram at the sense terminal S- located on the "COM" side. All links to this fabricated "zero" can only be established here to prevent inaccuracies in measurements. The final point to note is the separation between the digital ground for switches and display, and the analog ground for the analog input circuit. Do not link the two grounds, as the Arduino already has a connection between them. Following soldering, thoroughly clean the circuit board and Arduino Nano board with Isopropyl alcohol. This is to get rid of leak currents caused by remaining flux. The part list for the wattmeter is displayed in Table 1. Keep in mind that the values for R1 and R3 are determined by the specified voltage and current range. You can substitute carbon film resistors with metal film resistors, but do not interchange metal film resistors with carbon film resistors. For more detail: DIY wattmeter with an Arduino ### Custom OBD II Gauge in With OEM Look using arduino https://github.com/stirobot/arduinoModularTFTgaugesI built a custom OBD II (on board diagnostics version 2 http://en.wikipedia.org/wiki/On-board_diagnostics) The clock in my Subaru BRZ (GT86, FRS) was a popular feature, and many people asked me to make one for them. This is how you can construct your own. My spouse is close to delivering our second son and since all the code is open source, I have no risk in sharing this. I might eventually offer the installation as a service or sell a kit, but that won't stop others from using the open source components for their own projects. There is really no profit to be made in this endeavor. Therefore, I prefer to distribute it among the DIY community as a whole. I will attempt to indicate when I made modifications tailored to my vehicle model and when you may need to adjust to fit your preferences. I hope that this will enable others to expand upon the work I have completed. The all important github link:https://github.com/stirobot/arduinoModularTFTgauges/blob/master/oledOBDgaugesSmallIrvinedLib.ino And more generically my code is here: https://github.com/stirobot/arduinoModularTFTgauges The car specific forum where all of this is getting discussed: http://www.ft86club.com/forums/showthread.php?p=1967204#post1967204 Step 1: What you will need to do this (parts/tools/software/etc) Parts (generic/specific): -An Arduino or Arduino clone – I specifically use the adafruit pro-trinket for its small form factor and 5v logic.https://www.adafruit.com/products/2000 Board with STN1110/ELM327 technology. I selected the Sparkfun option due to its stability, utilization of UART for communication, and reasonable price. Check it out at https://www.sparkfun.com/products/9555. -Different varieties of hookup wire OLED display that is monochrome and operates on SPI with a resolution of 128x32 pixels. I employed the adafruit unit. The ones from eBay might be equally effective, but I haven't tried them yet. - The clock provided by the original equipment manufacturer. I utilized the original equipment manufacturer clock from a Scion FRS that I purchased on ebay. -Some resistors are needed for the button setup. - Optional equipment includes sensors for oil temperature and pressure from Autometer, as well as an accelerometer and additional pressure and temperature sensors. I possess Arduino code which allows for the connection of analog sensors to a setup similar to this one. I will create a page dedicated to this topic on the "steps" section. Tools: -Soldering Iron -Wire stripers -Wire crimpers -Helping hands -scissors -dremel tool Code libraries used: -Arduino ELM327 library: https://www.clusterfsck.io/blog/2014/05/23/arduino-elm327-library/ . I thrashed around with the UART -STN1110/ELM327 circuit board. I selected the Sparkfun option due to its stability, utilization of UART for communication, and affordable price. See more details at https://www.sparkfun.com/products/9555. I have been communicating with the OBD II board for a while now. (evident in my poorly written code for the 1.8” TFT version of this). This preserved both my project and my mental stability. I appreciate the Adafruit libraries for the OLED screen and tutorials available at https://learn.adafruit.com/monochrome-oled-breakouts because they always offer plenty of additional resources like support, functional code, tutorials, and more that come with your purchase. Software: Stino plugin for Sublime Text2 brings a refreshing touch with real syntax highlighting - http://robot-will.github.io/Stino/ the dot factory is used to convert monochrome bitmaps into arrays for displaying icons on the screen (That's how I obtained my icons) Windows paint is used for creating icons and splash screens. Step 2: Choosing your screen I've been through several projects like this in the past and I have some advice to share on selecting a screen. -You want the screen to fit in the OEM location with as little modification to the car as possible. I ended up measuring everything and cutting out templates on paper to see what would fit. For an old project similar to this I used a standard 16x2 character LCD. It fit perfectly in the GD Impreza's clock location (https://code.google.com/p/robotmeter/) -You are looking for the maximum amount of support possible when it comes to a graphics API. The adafruit products are amazing. Their TFT and OLED graphics APIs are excellent. -You desire optimal visibility in any lighting situation. Cars use their displays in all lighting conditions, including night time, day time, and direct sunlight. OLED displays excel in this aspect. Transflective LCD's excel in this aspect as well. Reflective and Transmissive LCD's are not effective in any way. - If the polarization of polarized sunglasses does not align correctly with the screen, it has the potential to diminish a great design. Experiment with different options before you start writing code.   For more detail: Custom OBD II Gauge in With OEM Look using arduino ### CT sensors - Interfacing with an Arduino To connect a CT sensor to an Arduino, you need to adjust the CT sensor's output signal to match the Arduino's analog input requirements: a positive voltage ranging from 0V to the ADC reference voltage. Note: This page shows an example of an Arduino board running at 5 V and an EmonTx running at 3.3 V. Make sure to use the correct supply and bias voltages in your calculations that correspond to your setup. This can be done by using the following circuit, which consists of two main parts: The CT sensor and burden resistor The biasing voltage divider (R1 & R2) Calculating a suitable burden resistor size In the situation of a CT sensor such as the YHDC SCT-013-000 which produces current, a burden resistor is needed to change the current signal into a voltage signal. If the CT provides a voltage output, you can skip this step and forgo the burden resistor as it is already integrated into the CT. 1) Choose the current range you want to measure The YHDC SCT-013-000 CT has a current range of 0 to 100 A so for this example let's choose 100 A as our maximum current. 2) Convert maximum RMS current to peak-current by multiplying by √2. Primary peak-current = RMS current × √2 = 100 A × 1.414 = 141.4A 3) Divide the peak-current by the number of turns in the CT to give the peak-current in the secondary coil. The YHDC SCT-013-000 CT has 2000 turns and so the secondary peak current will be: Secondary peak-current = Primary peak-current / no. of turns = 141.4 A / 2000 = 0.0707A 4) To maximise measurement resolution the voltage over the burden resistor at peak-current should be the Arduino analog reference voltage (AREF) divided by 2 If you're using an Arduino running at 5V: AREF / 2 will be 5 V / 2 = 2.5 V and so the ideal burden resistance will be Ideal burden resistance = (AREF/2) / Secondary peak-current = 2.5 V / 0.0707 A = 35.4 Ω 35 Ω is a rare resistor value, so we can choose between 39 Ω or 33 Ω. Choose the lower value right away to avoid the maximum load current causing the voltage to go above AREF. We recommend selecting a 33 Ω resistor with a tolerance of ±1%. Utilizing a combination of two resistors in series may occasionally result in a burden value that is closer to the ideal. The precision lessens the more the value strays from the perfect. In this situation, the peak current will result in an analog output of 4.7V (equal to 3822 when converted using a 12bit ADC). Below are the same calculations from earlier presented in a more concise manner. Burden Resistor (ohms) = (AREF * CT TURNS) / (2√2 * max primary current) Burden resistor sizing for OpenEnergyMonitor energy monitoring hardware. emonTx V3 (see guide) The emonTx V3 uses a 3.3V regulator, so it's VCC and therefore AREF, will always be 3.3V regardless of battery voltage. The standard emonTx V3 uses 22Ω burden resistors for CT 1, 2 and 3, and a 120Ω resistor for CT4, the high sensitivity channel. See the emonTx V3 technical wiki at: https://wiki.openenergymonitor.org/index.php?title=EmonTx_V3#Burden_Resistor_Calculations. emonPi (see guide) The EmonPi has two CT channels both with 22Ω burden resistors. emonTx V2 If you're using a battery powered emonTx V2, AREF will start at 3.3 V and slowly decrease as the battery voltage drops to 2.7 V. The ideal burden resistance for the minimum voltage would therefore be: Ideal burden resistance = (AREF/2) / Secondary peak-current = 1.35V / 0.0707A = 19.1 Ω 19 Ω is not a common value. We have a choice of 18 or 22 Ω. We recommend using an 18 Ω ±1% burden. Tool for calculating burden resistor size, CT turns and max Irms (thanks to Tyler Adkisson for building and sharing this). (Note: this tool does not take into account maximum CT power output. Saturation and distortion will occur if the maximum output is exceeded. Nor does it take into account component tolerances, so the burden resistor value should be decreased by a few (~5) percent allow some "headroom." There is more info about component tolerances at: ACAC Component tolerances.) Adding a DC Bias If you connect a single wire on the CT to the ground and measure the voltage on the other wire in relation to the ground, you will observe fluctuations in voltage transitioning from positive to negative in relation to the ground. However, the Arduino analog inputs require a positive voltage. Connecting the CT lead to a source at half the supply voltage rather than ground will cause the CT output voltage to fluctuate above and below 2.5 V while remaining positive. R1 & R2 resistors in the circuit diagram serve as a voltage divider to provide a 2.5 V input (with 1.65 V allocated for the emonTx). Capacitor C1, having a reactance of just a few hundred ohms, permits the alternating current to flow around the resistor by providing a path with low impedance. A capacitance of 10 μF is suitable. Choosing a suitable value for resistors R1 & R2 Increased resistance leads to decreased standby power usage. Mains powered monitors are equipped with 10 kΩ resistors. The emonTx utilizes 470 kΩ resistors to ensure low power usage, as it is designed to operate on batteries for an extended period of time. Arduino Sketch To use the above circuit to measure RMS current, with an assumed fixed RMS voltage (e.g. 240V) to indicate approximate apparent power, use this Arduino sketch: Arduino sketch - current only CT Sensors In this Chapter: 1. Introduction 2. Installation 3. Interfacing with an Arduino 4. How to Build an Arduino Energy Monitor Measuring Current Only Advanced: Measurement Implications of ADC Resolution at Low Current Values Extending CT Sensor Cable YHDC SCT-013-000 CT Sensor Report YHDC SCT006 CT Sensor Report For more detail: CT sensors - Interfacing with an Arduino ### MURATA’S LTE-M SOLUTION WITH ALTAIR SEMICONDUCTOR’S ADVANCED CELLULAR CHIPSET EARNS DEUTSCHE TELEKOM CERTIFICATION Murata Electronics today announced that their LTE-M solution powered by Altair Semiconductor’s advanced cellular chipset has secured Deutsche Telekom certification for operating on the carrier’s German 4G LTE wireless network. Measuring just 11.1 x 11.4 x 1.4 mm, the module is the world’s smallest form factor solution and enables applications to move the market forward, such as mobile IoT. In addition to its unparalleled size, low power, and cost efficiency, the Type 1SC’s high level of integration drastically cuts time to market and reduces customers’ certification costs. The module contains Altair’s advanced cellular IoT chipset; the ALT1250 (https://altair-semi.com/products/alt1250/). With an industry-leading low power consumption, it enables IoT devices to run for longer, providing years of operation without the need to replace batteries. Commercially available, the RoHS-compliant chipset features a hardware-based security framework and a rich set of features including integrated SIM (iSIM), an ARM Cortex M4 MCU for the user’s IoT applications and GNSS, ideal for enabling a wide-range of industrial and consumer IoT applications. Flexible and optimized solutions are the building blocks for realizing IoT on every wireless device. The Type 1SC is the first LTE-M module to be certified by Deutsche Telekom for use on its network. Developers can now leverage the Type 1SC’s confirmed interoperability with the mobile operator’s network to introduce new products and services. “With the Deutsche Telekom certification, mutual customers can easily tap Murata’s RF expertise and access best-in-class solutions,” said Koichi Sorada, Product Manager Connectivity Modules, Murata Europe. “Murata is a leading provider of innovative building blocks for the Internet of Things and through our strong partnership we continue to secure superior performance and quality needed for success in mobile IoT,” Read more: MURATA’S LTE-M SOLUTION WITH ALTAIR SEMICONDUCTOR’S ADVANCED CELLULAR CHIPSET EARNS DEUTSCHE TELEKOM CERTIFICATION ### MURATA’S ULTRA-SMALL, 0.5 A TO 2.0 A DC/DC CONVERTERS OFFER HIGH EFFICIENCY AND LOW NOISE Murata’s MYR series are the PicoBK™ DC/DC converters that integrate a coil and a control IC. The ultra-small form-factor measures 2.5 mm x 2.0 mm x 1.0 mm. The MYR series is significantly smaller than discrete solutions. In most cases, these modules occupy less than half the footprint of the same solution implemented with discrete components. These DC/DC converters achieve high efficiency, low noise, and high heat dissipation. The devices are designed for a 2.5 V to 5.5 V source such as a Li-ion battery. The input voltage of the MYRGC series is up to 36 VDC and suitable for battery applications to industrial applications. The typical efficiency of the MYRGP is 93% at 5.0 VIN / 3.3 VOUT. The control method can be selected fixed, PWM, or PFM/PWM auto switch. Features Designed for battery-powered applications Very small SMT footprint Efficiency 93% (typ.) Low quiescent current Excellent EMI and thermal performance. Read more: MURATA’S ULTRA-SMALL, 0.5 A TO 2.0 A DC/DC CONVERTERS OFFER HIGH EFFICIENCY AND LOW NOISE ### Musical Exercise: Workout Shirt MP3 Player Powered by Exercise using Arduino People love listening to music while exercising. Music provides the motivation needed for individuals to keep exerting energy and get in shape. So, because people enjoy listening to music while exercising, what if an MP3 player only played an individual's music while they are active? Using music as an incentive to continue exercising would encourage individuals to work harder and remain motivated in order to listen to their music. This workout shirt utilizes a LilyPad MP3 player and an accelerometer in order to detect whether or not the wearer is moving, and if so, it plays his or her music. The goal of the system is to promote an active lifestyle for wearers. Follow the instructions to create your own workout shirt MP3 player that is powered by exercise! The price of our system ranges between $60 and $100 based on parts used, the cost of the shirt, etc. It is affordable, easy to understand and create, and will help promote healthiness and physical activity in society! The Arduino IDE must be downloaded (free at http://arduino.cc/en/main/software) in order to run our code. Our code can be downloaded here: https://iu.box.com/s/vc81v70ifv4ebw68d7qq Check out the working system here: Step 1: Acquire Parts The following are required parts to create the system: -Workout shirt -LilyPad MP3 player (https://www.sparkfun.com/products/11013) -LilyPad accelerometer (https://www.sparkfun.com/products/9267) -RGB rotary encoder (https://www.sparkfun.com/products/10982) -3.7V Lipo (lithium ion) battery (https://www.sparkfun.com/products/341) -Micro SD card -Headphones or speakers -Conductive thread and a sewing needle (https://www.sparkfun.com/products/10867) -Soldering iron -Solder coil -Alligator clips (for testing the circuitry before sewing) The following are optional components that can be used to expand the system: -Rainbow LEDs (for enhanced visualization) -Vibration board (for adding a physical aspect of the system to the visual aspect of the system) -Button (for manual calibration) -On/off switch (for extra control of the system) -Extra fabric and card stock (for integrating the system with the shirt using an easier, more durable setup) Step 2: Safety and Preparation Before beginning the construction of your own workout shirt MP3 player, it is important to understand a few safety and preparation tips: 1. Stay safe! While soldering, be sure to wear protective eye-wear and avoid touching the hot soldering iron. Understand the different components of the system and how to make sure they are used properly. For example, the LilyPad MP3 player should not be connected to speakers while plugged into a laptop via USB; it can only be plugged into speakers when the system is being ran on a battery. Otherwise, parts of the device could be damaged and become increasingly hot and dangerous. 2. Acknowledge your abilities. While the setup of the system is easy to understand, the code is somewhat lengthy and jumps around from one function to the next. For inexperienced coders, simply copying the code will suffice, whereas for experienced Arduino programmers, there are several modifications that can be made to the system. Everyone is challenged to make our system even better! Step 3: System Explanation The LilyPad MP3 has I/O pins in the center that are specifically designed to house the RGB rotary encoder. The encoder should be placed there (it only fits in one way) and soldered down to make sure that all the I/O pins are in contact with the rotary encoder pins. The solder will also hold the encoder in place. The LilyPad also has 5 different I/O pins that can be used with other components on the exterior (T1, T2, T3, T4, T5). However, T4 and T5 disable the serial monitor from being used when they’re active, so we can’t use them. It also has a ground pin, as will as a 3.5-6V power out. It also has a receiver for the 3.7V Lipo battery to be plugged in. The 3.7V Lipo battery should be plugged in to the LilyPad MP3. The LilyPad has an on/off switch that will use the battery as power when activated. When it is plugged into the computer, the switch should be off, and it will charge the battery. The accelerometer sends data on 3 different axes (x, y, and z), and it has 5 connections.  The + will be the part receiving power.  That should be wired (with the conductive thread) to the 3.5-6V-power output on the MP3.  The – (ground) connection on the accelerometer should be wired to the GND (ground) connector on the LilyPad MP3. On the LilyPad MP3, The T1 connection will act as an analog pin (A0), T2 is analog pin A4, and T3 is analog pin A5.  The ‘X’ connection on the accelerometer should be wired to T3 (A5), The ‘Y’ pin should be wired to T2 (A4), and the ‘Z’ connector on the accelerometer should be wired to T1 (A0).  These will send data from the accelerometer to the LilyPad MP3 so we can tell how the accelerometer is being moved, or more importantly for this project – IF it is moving. The Micro SD card is placed in a slot on top of the LilyPad MP3 that is specifically designed for the card.  As mentioned before, the mp3 files being played should be stored in the root directory of the card. TIP: The rotary encoder will blink red if there is an error with the Micro SD card (either missing, damaged, unreadable, etc.). If you notice red blinking, be sure to focus your attention to the Micro SD card. Our system uses the accelerometer to sense motion, and it then communicates the detected motion (or lack thereof) to the MP3 player. The MP3 player then runs the corresponding function(s) based on the values it receives from the accelerometer. The RGB rotary encoder is used as a visual that displays different colors (blue or green) based on what function is being executed (between track and volume, which will be further explained shortly). Step 4: Setting up the Circuitry TIP: Before using conductive thread to set up our system, we recommend using alligator clips in order to test the system and make sure that it works properly. The most important components of the system are the LilyPad MP3 player and the LilyPad accelerometer. These should be connected through five different connections (power, ground, x, y, and z). In order to account for users of different sizes, as well as different positioning of the accelerometer, our system calibrates in order to provide accurate readings. Using a button, an optional component for the system, the user can manually calibrate. For our system, we ultimately did not use a button but instead set our system to automatically calibrate if the user remained in the same position over a short period of time. If used, the button should also be attached to the system. LEDs are also optional components of the system. The RGB rotary encoder is a LED itself, but additional LEDs can be used in order to display progress, distance, time elapsed, etc. Any used LEDs should also be connected to the system. NOTE: As previously mentioned, the LilyPad MP3 has a limited number of pins, so if your desired system includes a button and LEDs, the LilyPad MP3 must be connected to the LilyPad Arduino, which has many extra pins for input/output components. The pins are as follows: xpin (of accelerometer) = A5 (T3) ypin (of accelerometer) = A4 (T2) zpin (of accelerometer) = A0 (T1) + (power of accelerometer) = 3.5-6V pin - (ground of accelerometer) = GND pin Step 5: Setting up the Circuitry The image shows a diagram of the circuit. Unfortunately, as the LilyPad MP3 player is a fairly new product, Fritzing does not include a LilyPad MP3 player. For the sake of the setup, we used a regular LilyPad Arduino board. The pins of the rotary encoder are stretched to indicate where they would be placed on the LilyPad MP3 player board. The 3.7V Lipo battery is also seen in the diagram connected to two pins; however, in the actual system, there is a slot specifically for the battery to be attached. Also, whereas the LilyPad Arduino board seen in the image shows the various analog pins, the LilyPad MP3 player uses T1-T5 pins, as previously mentioned. Make sure to match the T1-T5 pins to their corresponding analog pins for the system to work properly. Lastly, whereas in the diagram, the power is being connected to the + pin, the LilyPad MP3 player does not include a + pin but instead a 3.5-6V pin, which is used to connect the power pin from the accelerometer to the MP3 player. Step 6: Soldering the RGB Rotary Encoder to the LilyPad MP3 In order to use the rotary encoder, which is used to start/stop the music, and change tracks and volume, it must be soldered to the LilyPad MP3 board. Conveniently, the LilyPad MP3 is designed with pins specifically for a rotary encoder. NOTE: Make sure that when soldering, the solder on each pin does not touch any other pin's solder. If any of the pins are connected, the system will not work properly. Be careful! For more detail: Musical Exercise: Workout Shirt MP3 Player Powered by Exercise using Arduino ### NEOUSYS ANNOUNCES IGT-30 SERIES, AN INDUSTRIAL IOT GATEWAY OPTIMIZED FOR INDUSTRY 4.0 Neousys Technology, a professional rugged embedded computer provider, today announced IGT-30, its latest industrial IoT gateway platform. IGT-30 is powered by Texas Instrument Sitara™ AM3352, validated by AWS Device Qualification Program (DQP), certified by Verizon to operate on their network. Shipped with pre-installed Debian 9 and equipped with industrial application prerequisites makes IGT-30 series a perfect IoT Gateway for smart manufacturing, environment monitoring, and intelligent transportation. Support IEEE 802.3at PoE+ PD IGT-30 series supports PoE Powered Device (PD) mode meaning it can be powered by a LAN cable from a PoE Power Sourcing Equipment (PSE), and at the same time transfer data via this cable as well. The simplified cabling makes IGT-30 series easier to deploy under harsh conditions with steady power supply and data transmission. Rich Integrated Industrial I/Os IGT-30 series features one USB2.0 port, two 10/100M LAN ports, one configurable COM port (RS-232/422/485) and an optional CAN bus port (IGT-31D only). It also features 8 built-in isolated digital input channels that accept discrete signals from various sensors or buttons/ switches, and 2 built-in isolated digital output channels to control actuators and indicators. Support dual microSDHC IGT-30 series has dual microSDHC slots, one internal and one external. This design allows users to separate system/ user data and can expedite in OS deployment for mass production. Read more: NEOUSYS ANNOUNCES IGT-30 SERIES, AN INDUSTRIAL IOT GATEWAY OPTIMIZED FOR INDUSTRY 4.0 ### NEOUSYS TECHNOLOGY LAUNCHES THE POC-551VTC – AN AMD RYZEN PC FOR TRANSPORTATION Neousys Technology, the embedded computing platforms manufacturer, has announced plans to launch an ultra-compact, rugged fanless in-vehicle computer called the POC-551VTC. The new computer was designed as an upgrade to the POC-500 embedded computer which the company released a while back and it comes with several I/O ports to serve applications around wireless communication, mobile Surveillance, in-vehicle entertainment, and fleet management to mention a few. Featuring the same AMD’s Ryzen Embedded V1000 family of x86-based SoC used in the POC-500 with the AMD Ryzen™ Embedded V1605B processor, the POC-551VTC combines two of AMD’s strongest chips, the Zen x86 core architecture with Vega GPU into a small BGA package. Leveraging on 4-cores and 8-threads, POC-551VTC delivers the equivalent processing power of an Intel 6th Gen. Core i7 U-series, coupled with the unprecedented 3.6 TFLOPS in FP16, delivered by the Radeon Vega GPU. Designed with an understanding of the connected nature which cars are now attaining, the POC-551VTC comes with three full-size mini-PCIe sockets and one M.2 B key with an internal SIM socket for 3G/4G, GPS or WiFi module installation. To ensure seamless connections with little or no dead zones, the device also comes with expansion sockets that allow users to connect to multiple operators, and facilitate a seamless switch from one operator to another. Four in-vehicle connections and usage, the POC-551VTC comes with; a CAN 2.0 port, four USB 3.1 Gen1 ports, four COM ports, and 4-CH isolated D I/O for data communication between different types of devices. It also comes with 4(four) 802.3at PoE+ ports which are capable of supplying up to 25W of power to connected devices like IP cameras. All ports on the POC-551VTC come with a screw-lock mechanism to ensure cable connections are secure. All these features are packed into a, quite small 64 x 176 x 116 mm (2.5″ x 6.9″ x 4.6″) form factor, with an enclosure built with Neousys’ proven thermal design. The ruggedized nature of the POC-551VTC ensures its ability to operate at a temperature between -40℃ to 70℃,, and support a wide range input voltage (8~35V DC) with a built-in ignition control, which protects the system with gentle shutdowns. Read more: NEOUSYS TECHNOLOGY LAUNCHES THE POC-551VTC – AN AMD RYZEN PC FOR TRANSPORTATION ### NEU-X300 – EDGE COMPUTING SYSTEM POWERED BY 8TH GENERATION INTEL® CORE™ PROCESSOR NEXCOM has launched Neu-X300, a high performance fanless computer, powered with 8th Generation Intel® Core™ i-series processors. With its 190mm x 200mm x 54.4mm size, the modern-looking Neu-X300 uses a TPM2.0 IC to enhance cyber security. By specifically choosing an i5 or i7 processor, Neu-X300 is further equipped with vPRO remote management capability. And with its versatile I/O interface design, it’s ideally suited to meeting the demands of smart city and miscellaneous electronic applications, such as digital signage, drive-through systems, and retail solutions. Wide Range of High Performance CPU Options Powered by 8th Generation Intel® Core™ Coffee Lake i3/i5/i7 socket CPU and Intel® UHD Graphics 630, Neu-X300 has exceptional processing abilities and can stream 3D visual effects. With the socket CPU, you’re able to determine and manage the level of CPU performance, based on business requirements, by easily replacing and upgrading from a wide range of Intel® 8th Generation i7/i5/i3 CPUs. For the customer looking for streaming 2D/3D visual graphics, the Intel Core i3 is an excellent, budget-friendly choice. On the other hand, Core i5/i7 CPUs provides Turbo Boost to speed up tasks, achieving CPU benchmark scores 50% higher than i3s’. With facial identification and object detection systems, the Core i5/i7 CPU also suits the customer who demands more advanced computing performance, for smart cities and AI purposes. Absolute Security and Easy Manageability Neu-X300 is designed with both security and manageability in mind. It supports TPM 2.0 security mechanisms, which effectively reduce malicious attacks with greater crypto-agility. With its vPro technology, the Neu-X300 with i5/i7 CPU can additionally implement remote management, making operations more flexible. Used in chain stores’ drive-through services, for instance, the Neu-X300 could not only utilize the triple display capabilities for menus but also remote management to allow the command center to perform tasks like information updates and system reboots, rather than on-site. Moreover, NEXCOM offers its own PowerDigiS software to shorten deployment periods. Read more: NEU-X300 – EDGE COMPUTING SYSTEM POWERED BY 8TH GENERATION INTEL® CORE™ PROCESSOR ### New Arduino storage libraries introduced to simplify data management and storage The development team at Arduino has this week introduced two new and exciting Arduino storage libraries in the form of Arduino_POSIXStorage and Arduino_UnifiedStorage. These additions are a big deal for anyone working on Arduino projects because they make handling data and storing information a lot easier. In simple terms, these libraries are tools that help developers manage and organize data in their projects without getting bogged down in complex details. Let’s dive into what these new tools bring to the table. Arduino_POSIXStorage “The Arduino_POSIXStorage Library complements the POSIX storage functions already included in the Renesas core and the Arduino_USBHostMbed5 library, and makes them available to sketches.” Have you ever wished for a simpler way to handle data and files in your Arduino projects? Your wish has been granted with Arduino_POSIXStorage. This library is a boon, especially for those familiar with the POSIX standard, a cornerstone of file system functions in many operating systems like Linux and macOS. Even if you’re new to POSIX, Arduino_POSIXStorage is designed to be intuitive and user-friendly. Key Features of Arduino_POSIXStorage: Ease of Storage Access: Managing SD cards and USB storage is now straightforward, eliminating the need to grapple with complex storage operations. Flexible File System Choices: Choose between FAT32 or LittleFS, tailoring the file system to your project’s needs. Hotplug Support: Enjoy the convenience of detecting and managing USB mass storage devices seamlessly. Arduino_UnifiedStorage “The Arduino_UnifiedStorage library provides a unified interface to access different types of storage, including internal storage, SD cards, and USB mass storage devices. It simplifies the handling of files and directories across multiple storage mediums on Portenta, Opta, and some Nicla boards.” Building on the foundation of Arduino_POSIXStorage, Arduino_UnifiedStorage further demystifies data and file management. This library is perfect for those seeking an approachable API in the familiar Arduino style. Other articles we have written that you may find of interest on the subject of Arduino : Arduino UNO R4 Minima vs UNO R4 WiFi boards Low-cost thermal camera built using Arduino Arduino IDE Nightly Builds Are Now Hourly DIY Arduino Wind Speed Meter Anemometer Project Arduino Day 2023 confirmed for March 25th Noteworthy Features of Arduino_UnifiedStorage: Unified Storage Interface: This feature provides streamlined access to internal storage, SD cards, and USB storage through a user-friendly interface. Effortless File Handling: Navigate files easily and check available data, simplifying file management. Robust File and Folder Actions: Confidently rename, delete, copy, and paste files and folders. Smooth Cross-Medium Data Transfer: Transfer data between different storage types with control over overwriting. Advanced File Navigation: Navigate through folder structures with ease. Partition Support: Work with multiple partitions on internal QSPI storage, with the option to re-partition according to your needs. How These Libraries Simplify Projects Let’s delve into some practical applications of these libraries: Automated Data Backup for Remote Monitoring Systems: For projects like agricultural monitoring or weather stations, these libraries can automate data backup routines, safeguarding data against loss due to power outages or equipment failures. Rapid Firmware Updates for IoT Devices: Update IoT device firmware efficiently, even in situations where Over-the-Air updates are not feasible. This ensures devices are always up-to-date with the latest software, enhancing security and functionality. Data Collection and Machine Learning Model Training: Collect and manage sensor data in smart environments to train machine learning models. This facilitates the development of predictive maintenance algorithms, anomaly detection systems, or smart automation routines. Both libraries come equipped with practical examples, catering to real-life scenarios like data logging and storage backup. They have been thoroughly tested across various devices, ensuring reliability and performance. Compatibility and Getting Started The libraries currently support Arduino Portenta H7, Arduino Portenta C33, Arduino Opta, and Arduino Portenta Machine Control, with plans to extend support to more boards. To get started, you can download these libraries through the Arduino IDE’s library manager or directly from their respective GitHub repositories for Arduino_POSIXStorage and Arduino_UnifiedStorage . Remember to check out the API documentation in the “docs” folder of each repository for more detailed guidance. Source: New Arduino storage libraries introduced to simplify data management and storage ### NEW DIMENSION OF BRIGHTNESS: OSRAM HERALDS A NEW CHAPTER FOR LED PROJECTION As projectors grow more and more popular in home entertainment systems, so have the expectations of users. In addition to ever-higher resolutions, the focus is also on richer colors, contrasts and, of course, higher brightness. With the Ostar Projection Power family, Osram has succeeded for the first time in achieving projector brightness levels beyond the 3,000 ANSI lumen barrier using LEDs instead of conventional lamps, making them accessible to a broad market. Depending on the ambient light conditions and the distance to the projection surface, requirements differ for the light source. With 12 new products, Osram is now able to offer three different power classes for RGB solutions in deep blue (440 nm), blue (456 nm), converted green (520 nm) and amber (614 nm). In the lowest power class, two chips of the same color per component provide projector brightness of up to 1,500 ANSI lm. In the mid-power class, four chips of the same color per component can achieve 2,500 ANSI lm. While in the highest power class, six chips of the same color per LED can achieve more than 3,000 ANSI lm. As a result, products from the Osram Ostar Projection Power family emerge as a clear alternative to the high-pressure discharge lamps previously used in projectors above 2,000 ANSI lm. This leap in performance was achieved, among other things, by improved chip and package technology. The developers at Osram have fundamentally modified the individual LED chips allowing them to be electrically connected in a series on the copper board. The system designer benefits not only from a significantly lower operating current (with the same power consumption) and reduced complexity of the LED driver but also from the much simpler contacting of the component. In addition, direct coupling of the LEDs to a heat sink is possible – without additional isolation costs. The mechanical design remains largely unchanged compared to previous products enabling fast and uncomplicated exchange of the products in existing projector systems. Read more: NEW DIMENSION OF BRIGHTNESS: OSRAM HERALDS A NEW CHAPTER FOR LED PROJECTION ### NEW GRAPHENE HALL EFFECT SENSOR TO IMPROVE ACCURACY AND PRECISION IN MAGNETIC MEASUREMENT APPLICATIONS The Cambridge-based startup, Paragraf has collaborated with the Magnetic Measurement section at CERN to demonstrate the potential of graphene-based Hall effect sensors to improve accuracy in magnetic measurement applications. Overcoming the shortfalls of existing Hall effect sensors that exhibit planar Hall effects that produce false signals, Hall effect Sensor from Paragraf truly senses magnetic fields along one direction giving a negligible planar Hall effect. This is because the active sensing component of the Hall effect Sensor from Paragraf is made of atomically thin graphene which is two-dimensional. This enables the true perpendicular magnetic field value to be obtained, allowing for higher precision mapping of the local magnetic field. Opening the door to a new mapping technique by mounting a stack of sensors on a rotating shaft, Hall effect sensors without planar effect indeed will be the preferable option. Measurements of the harmonic content in accelerator magnets almost point-like along the magnet axis would be the added advantage. Wide temperature range from +80°C down to cryogenic temperatures of 1.5 Kelvin is one of the key properties of the Paragraf Hall effect sensor. With this major step, CERN would be able to measure the fields inside the superconducting magnets with high accuracy. This could be done using sensors operating in liquid helium temperature ranges (below -269 °C, 4 Kelvin, -452 °F) where the calibration of sensors is less than trivial. CERN’s Magnetic Measurement section is planning to perform more in-depth tests on the Hall effect sensors to eventually use them in building a novel mapping system for magnetic fields. Read more: NEW GRAPHENE HALL EFFECT SENSOR TO IMPROVE ACCURACY AND PRECISION IN MAGNETIC MEASUREMENT APPLICATIONS ### NEW PHOTORELAYS WITH LOW LED TRIGGER CURRENT FOR BATTERY POWERED SECURITY AND AUTOMATION DEVICES Toshiba Electronic Devices & Storage Corporation has introduced the TLP170AM and TLP170GM two new photorelays that can be used in security systems, which are used in building automation and other industrial equipment. The TLP170AM has a rated OFF-state output terminal voltage of 60V and constant ON-state current (ION) of 0.7A with the pulse operation of up to 2.1A. The TLP170GM is a 350V version with an ION of 110mA constant current and 330mA pulse operation. The new photo relays are designed with a maximum trigger LED current of 1mA for reducing the input-side power loss by increasing the sensitivity of the photodiode array. The devices provide lower power consumption and longer operation of devices when they are used in ON/OFF control in battery-powered security devices and various sensors. Features Halogen free 60V (minimum) OFF-state output terminal voltage 1mA (maximum) trigger LED current 700mA (maximum) ON-state current 0.3Ω (maximum) ON-state resistance 3750Vrms (minimum) isolation voltage Safety standards UL recognized, UL 1577, File No. E67349 cUL recognized, CSA Component Acceptance Service No. 5A File No. E67349 VDE approved, EN 60747-5-5 The photo relays are packed in 4-pin SO6 Package, this provides a minimum isolation voltage of 3750Vrms allowing the devices to be used in equipment requiring high insulation performance. The new Photorelays are best suitable for security systems, Passive sensors, industrial equipment such as Programmable logic controllers, I/O interfaces, various sensor controls, etc. Building automation systems and in replacement of mechanical relays. Read more: NEW PHOTORELAYS WITH LOW LED TRIGGER CURRENT FOR BATTERY POWERED SECURITY AND AUTOMATION DEVICES ### NEW RING COIL TESTER PROVIDES LARGE AND SUPER LARGE CAPACITANCE TESTING TO 640 MF New Generation Ring Coil Tester: LCR-Reader-MPA with Coil Test Unit A Popular All-in-one Digital Multimeter from Siborg now has the option of performing ring test with a new accessory LCR-Reader-MPA from Siborg Systems Inc. is an All-in-One Digital Multimeter that offers quick, high accuracy testing for SMT with little or no set-up between measurements. The device has recently added another test option: a Ring Coil Test. The LCR-Reader-MPA is a lightweight multimeter with 0.1% basic accuracy and a wide range of features including 100 kHz test signal, AC/DC current/voltage testing, Oscilloscope mode, pulse/signal/duty testing, super cap tests and more. The MPA can automatically determine the type of component and best test parameters when set to Auto mode; this is exceptionally helpful when testing unlabeled components. All measurement values, including the main impedance value, secondary values (ESR), component type, and test frequency are made available almost instantly on the LCD display in the device. Basic inductor or coil tests can be done using any LCR meter, such as LCR-Reader. When testing, if the device shows any reading (or continuity) this shows that the coil winding is not destroyed. Many times, the reading of the coil may show a slight deviation in values that is only detectable by knowing the exact original values of R or L. If there is one or a few turns of the winding that have short, the values would only show a slight variation. A much more accurate method of finding short turns in a coil is by using the Ring Test method. This method is a tried-and-true method of repairing old-style audio-video equipment that employ flybacks, motors, deflection yoke windings, motors, main transformers, chopper transformers, VCR video and other magnetic heads, and other coils, transformers or inductors. Read more: NEW RING COIL TESTER PROVIDES LARGE AND SUPER LARGE CAPACITANCE TESTING TO 640 MF ### NEW SXUV5 EXTREME ULTRAVIOLET PHOTODETECTOR COMES WITH CIRCULAR ACTIVE AREA OF 2.5 MM. DIAMETER Opto Diode Corporation, an ITW company, introduces the SXUV5, an extreme ultraviolet (EUV) photodiode with a circular active area of 2.5 mm diameter. The new device has superior responsivity in the 1 nm to 190 nm wavelength region and is specially designed to be highly stable over long periods of time when exposed to high-intensity EUV energy. The new photodetector joins Opto Diode’s family of SXUV photodiodes with varying active area sizes to meet critical measurements, speed, and power monitoring performance objectives. The SXUV5 is housed in a windowless, TO-5 package to allow for responsivity at wavelengths shorter than 150 nm. Other features include shunt resistance of 20 MOhms (minimum) and reverse breakdown voltage of 5 Volts (minimum) to 20 Volts (typical). Capacitance is 500 pF (typical) to 1500 pF (maximum), and response time is from 1 nsec (typical) to 2 nsec (maximum). Storage and operating temperatures range from -10 °C to +40 °C (ambient) and from -20 °C to +80 °C in nitrogen or vacuum environments. The lead soldering temperature is 260 °C. Read more: NEW SXUV5 EXTREME ULTRAVIOLET PHOTODETECTOR COMES WITH CIRCULAR ACTIVE AREA OF 2.5 MM. DIAMETER ### NEW TQ MODULE BASED ON ARM® CORTEX®-A53 WITH I.MX8M MINI AND NANO TECHNOLOGY The technology company TQ is expanding its i.MX8 product range with the new embedded module TQMa8MxML based on the i.MX8M Mini and Nano CPU family. It supports all nine CPU derivatives of the two families on the small LGA module and all signal pins are available in every configuration. The i.MX8M Mini and Nano CPUs from NXP stand out within the i.MX8M family in that they are less expensive due to optimized features. TQ has decided to provide users with 100 percent of the signal pins in the form of an LGA module for the module design of the TQMa8MxML. In doing so, TQ has managed to combine the requirements of both CPUs in a common design. This allows users to choose the optimal variant for their needs and project. The module was equipped with an LPDDR4 with up to 4 GB on the i.MX8M Mini and 2 GB on the i.MX8M Nano. In addition, a QSPI NOR flash with up to 256 MB is available as an option to the included eMMC flash memory. The i.MX8M Mini differs from the i.MX8 Nano in particular by its 32-bit wide memory interface compared to the 16-bit of the Nano. The Mini uses GC Nano Ultra as GPU, while the GC7000 Lite runs on the Nano. In addition, to reduce costs, the Nano does not have hardware support for video decoding and encoding Both pin-compatible product families offer nine CPU variants (Dual Core, Quad Lite and Quad Core) with different expansion stages. The CPU-integrated Cortex-M4 processor supports numerous security functions. Read more: NEW TQ MODULE BASED ON ARM® CORTEX®-A53 WITH I.MX8M MINI AND NANO TECHNOLOGY ### NEW YORKER ELECTRONICS UNVEILS NEW CORNELL DUBILIER ULTRA-THIN 1MM POLYMER ALUMINUM ELECTROLYTIC CAPACITOR SERIES New Yorker Electronics has announced the release of a new ultra-thin polymer electrolytic capacitor that represents a totally new capacitor form factor. The Cornell Dubilier Electronics’ new PPC Series, designed specifically for applications requiring high ripple current and the thinnest profile possibilities, opens up entirely new product design options. In addition to being just 1 mm thin, the PPC uses versatile packaging technology that makes it possible for capacitors to be formed into custom shapes and sizes to accommodate available space. Rated for 125°C, PPC combines the advantages of aluminum electrolytic and aluminum polymer technology. These capacitors have the ultralow ESR characteristics of conductive aluminum polymer capacitors in a 1mm thin package. With high capacitance and high ripple current per volume, applications for 125°C polymer capacitors include DC/DC converters, tablets, telecommunications, thin displays, and variety of industrial power conversion. A single PPC capacitor can handle ripple currents equivalent to dozens of SMT capacitors or a bulky cylindrical device. In fact, CDE has stated that a single PPC capacitor is equivalent to a parallel bank of 50 or more polymer tantalum capacitors – at one fourth the height. Using a single unit means PPC capacitor solutions are lighter in weight and can improve overall circuit reliability. Features & Benefits: Only 1mm thin Temperature: -55ºC to +125ºC Capacitance: 8,000µF to 20,000µF Voltage: 6.3Vdc to 24Vdc 2,000 Hrs @ Rated Temperature, Voltage and Ripple Current Custom Values, Sizes and Shapes Low Leakage Current Very Low ESR High Ripple Current 54 Arms @ 20kHz 10g Pk Vibration Altitude: 10,000 Ft. Read more: NEW YORKER ELECTRONICS UNVEILS NEW CORNELL DUBILIER ULTRA-THIN 1MM POLYMER ALUMINUM ELECTROLYTIC CAPACITOR SERIES ### Arduino Wattmeter: Measure Voltage, Current and Power Consumption Being electronics engineers, we consistently rely on meters and instruments to gauge and study the functionality of a circuit. From basic multimeters to advanced power quality analyzers or DSOs, each device serves specific purposes. Many of these gauges are easily accessible and can be bought depending on the measurements needed and their precision. However, there are instances when we may find ourselves in a position requiring us to construct our own meters. For example, if you are involved in a solar PV project and want to determine the power usage of your load, you can create your own Wattmeter using a basic microcontroller system such as Arduino. Creating your own meters not only reduces testing costs, but also allows for simplification of the testing process. For instance, an Arduino-powered wattmeter can be adjusted to observe the data on the Serial monitor and create a graph on the Serial plotter, or include an SD card to record the voltage, current, and power values at set time intervals. Isn't that intriguing? Let's begin now... Materials Required Arduino Nano LM358 Op-Amp 7805 Voltage regulator 16*2 LCD display 0.22 ohm 2Watt shunt resistor 10k Trimmer pot 10k,20k,2.2k,1k Resistors 0.1uF Capacitors Test Load Perf board or breadboard Soldering kit (optional) Circuit Diagram The complete circuit diagram of the arduino wattmeter project is given below.   The arduino wattmeter circuit is divided into two units for easier comprehension. The measuring unit is located at the top of the circuit, while the computation and display unit is situated at the bottom. Those who are unfamiliar with this kind of circuits adhered to the instructions. The label Example +5V indicates that all pins connected to it should be treated as if they are all connected. Labels are commonly utilized to create a tidy appearance in the circuit diagram. The circuit is created to be compatible with systems that function within a voltage range of 0-24V and a current range of 0-1A, while considering the specifications of a Solar PV. However, once you grasp how the circuit operates, expanding the range is a simple task. The fundamental idea behind the circuit is to monitor the voltage across the load and the current passing through it in order to determine the power it uses. The 16*2 Alphanumeric LCD will show all the measured values. Let's divide the circuit into smaller sections to better understand how it is intended to function. Measuring Unit The unit of measurement includes a potential divider for voltage measurement and a shunt resistor with a Non-Inverting Op-amp for current measurement in the circuit. Below is the potential divider segment of the circuit discussed above. The voltage input, referred to as Vcc, will range from 0V to 24V as previously mentioned. However, an Arduino microcontroller is limited in measuring high voltage, as it can only measure voltage within the range of 0-5V. We need to convert the voltage range of 0-24V to 0-5V. Achieving this is simple with the use of a potential divider circuit depicted below. The combination of a 10k resistor and a 2.2k resistor creates the potential divider circuit. The below formulae can be used to calculate the output voltage of a potential divider. You can utilize our online calculator to determine the value of resistors when redesigning a circuit. Vout = (Vin × R2) / (R1 + R2) The Voltage designation indicates where the 0-5V signal is located on the middle section of the map. Later on, this voltage mapping can be inputted into the Analog pin of the Arduino. Afterward, we must determine the current flowing through the LOAD. Since microcontrollers are only capable of reading analog voltage, the current value must be converted into voltage for processing. Simply by inserting a resistor (known as a shunt resistor) into the circuit, the voltage drop across it will be directly proportional to the current passing through, as stated by Ohm's law. We will amplify this small voltage drop using an op-amp because of its low value. Below is the diagram of the circuit mentioned. The shunt resistor (SR1) has a value of 0.22 Ohms. Earlier, it was mentioned that we are creating the circuit for a load of 0-1A. According to Ohm's law, we can determine that the voltage drop across the resistor will be approximately 0.2V when the load is drawing up to 1A of current. The voltage is too low for the microcontroller to detect, so an Op-Amp is utilized in Non-Inverting Amplifier configuration to boost the voltage from 0.2V to a level that the Arduino can detect. The diagram above illustrates the operation of the Op-Amp in Non-Inverting mode. The amplifier's gain is set at 21 in order to produce an output of 4.2V when multiplied by 0.2. The equation for determining the Op-amp's gain is provided below, you can also utilize an online gain calculator to ascertain the resistor's value when modifying the circuit. Gain = Vout / Vin = 1 + (Rf / Rin) In this situation, Rf has a value of 20k and Rin has a value of 1k, resulting in a gain of 21. The Op-amp's increased voltage is passed to an RC filter with a 1k resistor and a 0.1uF capacitor to filter out any coupled noise. Ultimately, the voltage is supplied to the analog pin of the Arduino. The voltage regulator part is the only remaining section in the measuring unit. As we are providing varying input voltage, a stable +5V voltage is needed for the Arduino and Op-amp to function properly. The 7805 Voltage regulator will supply the regulated voltage. A capacitor is incorporated into the output in order to remove unwanted interference. Computation and display unit In the measuring unit we have designed the circuit to convert the Voltage and Current parameters into 0-5V which can be fed to the Arduino Analog pins. Now in this part of the circuit we will connect these voltage signals to Arduino and also interface a 16×2 alphanumeric display to the Arduino so that we can view the results. The circuit for the same is shown below As you can see the Voltage pin is connected to Analog pin A3 and the current pin is connected to Analog pin A4. The LCD is powered from the +5V from the 7805 and is connected to the digital pins of Arduino to work in 4-bit mode. We have also used a potentiometer (10k) connected to Con pin to vary the contrast of the LCD. Programming the Arduino Now that we have a good understanding of the hardware, let us open the Arduino and start programming. The purpose of the code is to read the analog voltage on pin A3 and A4 and calculate the Voltage, Current and Power value and finally display it on the LCD screen. The complete program to do the same is given at the end of the page which can be used as such for the hardware discussed above. Further the code is split into small snippets and explained. As all programs we begin with, defining the pins that we have used. In out project the A3 and A4 pin is used to measure voltage and current respectively and the digital pins 3,4,8,9,10 and 11 is used for interfacing the LCD with Arduino int Read_Voltage = A3; int Read_Current = A4; const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; //Mention the pin number for LCD connection LiquidCrystal lcd(rs, en, d4, d5, d6, d7); We also have included a header file called liquid crystal to interface the LCD with Arduino. Then inside the setup function we initialise the LCD display and display an intro text as “Arduino Wattmeter” and wait for two seconds before clearing it. The code for the same is shown below. void setup() { lcd.begin(16, 2); //Initialise 16*2 LCD lcd.print(" Arduino Wattmeter"); //Intro Message line 1 lcd.setCursor(0, 1); lcd.print("-Circuitdigest"); //Intro Message line 2 delay(2000); lcd.clear(); } Inside the main loop function, we use the analog read function to read the voltage value from the pin A3 and A4. As we know the Arduino ADC output value from 0-1203 since it has a 10-bit ADC. This value has to be then converted to 0-5V which can be done by multiplying with (5/1023). Then again earlier in the hardware we have mapped the actual value of voltage from 0-24V to 0-5V and the actual value of current form 0-1A to 0-5V. So now we have to use a multiplier to revert these values back to actual value. This can be done by multiplying it with a multiplier value. The value of the multiplier can either be calculated theoretically using the formulae provided in hardware section or if you have a known set of voltage and current values you can calculate it practically. I have followed the latter option because it tends to be more accurate in real time. So here the value of multipliers is 6.46 and 0.239. Hence the code looks like below float Voltage_Value = analogRead(Read_Voltage); float Current_Value = analogRead(Read_Current); Voltage_Value = Voltage_Value * (5.0/1023.0) * 6.46; Current_Value = Current_Value * (5.0/1023.0) * 0.239; How to measure with more accuracy? The above way of calculating the value of Actual Voltage and current will work just fine. But suffers from one drawback, that is the relationship between the measured ADC voltage and actual voltage will not be linear hence a single multiplier will not give very accurate results, the same applied for current as well. So to improve the accuracy we can plot of set of measured ADC values with actual vales using a known set of values and then use that data to plot a graph and derive the multiplier equation using the linear regression method. You can refer the Arduino dB meter in which I have used a similar method. Finally, once we have calculated the value of actual voltage and actual current through the load, we can calculate the Power using the formulae (P=V*I). Then we display all the three values on the LCD display using the code below. lcd.setCursor(0, 0); lcd.print("V="); lcd.print(Voltage_Value); lcd.print(" "); lcd.print("I=");lcd.print(Current_Value); float Power_Value = Voltage_Value * Current_Value; lcd.setCursor(0, 1); lcd.print("Power="); lcd.print(Power_Value); Working and Testing For the sake of tutorial I have used a perf board to solder all the components as shown in the circuit. I have used a Phoenix screw terminal to connect the load and normal DC barrel Jack to connect my power source. The Arduino Nano board and the LCD are mounted on a Female Bergstik so that they can be re-used if required later. After getting the hardware ready, upload the Arduino code to your Nano board. Adjust the trimmer pot to control the contrast level of the LCD until you see a clear intro text. To test the board connect the load to the screw terminal connector and the source to the Barrel jack. The source voltage should be more than 6V for this project to work, since the Arduino required +5V to operate. IF everything is working fine you should see the value of Voltage across the load and the current through it displayed in the first line of the LCD and the calculated power displayed on the second line of the LCD as shown below. The fun part of building something lies in testing it to check how far it will work properly. To do that I have used 12V automobile indicator bubs as load and the RPS as source. Since the RPS itself can measure and display the value of current and voltage it will be easy for us to cross check the accuracy and performance of our circuit. And yes, I also used my RPS to calibrate my multiplier value so that I get close to accurate value. The complete working can be found at the video given at the end of this page. Hope you understood the circuit and program and learnt something useful. If you have any problem in getting this to work post it on the comment section below or write on our forums for more technical help. This Arduino based Wattmeter project has many more upgrades that can be added to increase the performance to auto data logging, plotting graph, notifying over voltage or over current situations etc. So stay curious and let me know what you would use this for. Code /* * Wattmeter for Solar PV using Arduino * Dated: 27-7-2018 * Website: www.circuitdigest.com * * Power LCD and circuitry from the +5V pin of Arduino whcih is powered via 7805 * LCD RS -> pin 2 * LCD EN -> pin 3 * LCD D4 -> pin 8 * LCD D5 -> pin 9 * LCD D6 -> pin 10 * LCD D7 -> pin 11 * Potetnital divider to measure voltage -> A3 * Op-Amp output to measure current -> A4 */   #include   //Default Arduino LCD Librarey is included int Read_Voltage  = A3; int Read_Current  = A4; const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; //Mention the pin number for LCD connection LiquidCrystal lcd(rs, en, d4, d5, d6, d7); void setup() { lcd.begin(16, 2); //Initialise 16*2 LCD lcd.print(" Arduino Wattmeter"); //Intro Message line 1 lcd.setCursor(0, 1); lcd.print("  With Arduino  "); //Intro Message line 2 delay(2000); lcd.clear(); } void loop() { float Voltage_Value = analogRead(Read_Voltage); float Current_Value = analogRead(Read_Current); Voltage_Value = Voltage_Value * (5.0/1023.0) * 6.46; Current_Value = Current_Value * (5.0/1023.0) * 0.239; lcd.setCursor(0, 0); lcd.print("V="); lcd.print(Voltage_Value); lcd.print("  "); lcd.print("I=");lcd.print(Current_Value); float Power_Value = Voltage_Value * Current_Value; lcd.setCursor(0, 1); lcd.print("Power="); lcd.print(Power_Value); delay(200); } Source : Arduino Wattmeter: Measure Voltage, Current and Power Consumption ### NEWARK INTRODUCES NEW TBS1000C DIGITAL STORAGE OSCILLOSCOPE FROM TEKTRONIX Newark added the new Tektronix TBS1000C Digital Storage Oscilloscope to its test and measurement portfolio. Designed to meet the needs of today’s educational institutions, embedded design engineers, and makers, this new oscilloscope offers an upgrade in performance over the TBS1000B. The TBS1000C is ideal for use in the education environment. It comes with a courseware system that integrates lab exercises with step-by-step instructions for use by educators and students. Ready-made educational content can be downloaded for free from Tektronix’s Courseware Resource Center, enabling lab work without the need to design an entire course from scratch. Built-in support for learning also includes the innovative HelpEverywhere system that provides useful on-screen tips and hints throughout the user interface, allowing new users and students to learn how to use the oscilloscope. The TBS1000C comes with a standard 5-year warranty, providing added security for educators requiring a product that can be used year after year in the teaching lab. Other key features include: A 7-inch multifunction WVGA color display that shows 50% more signal with pan and zoom capability. The multi-language user interface supports 10 languages and front panel overlay. 2-channel models with 20k point record length and up to 1GS/s sample rate with bandwidths from 50 MHz to 200 MHz. 32 automated measurements and dual window FFT with simultaneous time and frequency domain views. Read more: NEWARK INTRODUCES NEW TBS1000C DIGITAL STORAGE OSCILLOSCOPE FROM TEKTRONIX ### NGK DEVELOPS HIGH HEAT RESISTANCE LITHIUM-ION BATTERY ACHIEVING AN OPERATING TEMPERATURE OF UP TO 105°C The new battery is scheduled for mass production in September 2020, with potential applications primarily in automotive and industrial IoT devices.  NGK INSULATORS, LTD. (hereinafter “NGK”) has successfully raised the maximum operating temperature of its coin-type “EnerCera Coin” (part of the “EnerCera®” series) battery up to 105 degrees Celsius. Sample shipments are currently underway, with mass production scheduled to begin in September 2020. In December 2019, NGK developed the world’s first lithium-ion rechargeable battery which has achieved an operating temperature range of -40 to +85 degrees Celsius. As a result of improvements to the product based on customer feedback, NGK recently succeeded in increasing the upper limit of the operating temperature by 20 degrees. The battery is now capable to be used at an operating temperature of up to 105 degrees Celsius, while still maintaining capacity and power. In its fully charged state, when the battery is most prone to deterioration, the capacity decrease is less than 20% even after it is kept at 105 degrees for 1000 hours. NGK’s EnerCera Coin battery has a unique structure in which a small amount of electrolyte is added to its all-ceramic stacked monolithic body with electrodes and a separator. This provides high thermal stability. The EnerCera battery is categorized as semi-solid-state battery, with performance equivalent to or better than that of a conventional lithium-ion rechargeable battery. The EnerCera battery’s excellent heat resistance characteristics are comparable to those of all-solid-state batteries. Read more: NGK DEVELOPS HIGH HEAT RESISTANCE LITHIUM-ION BATTERY ACHIEVING AN OPERATING TEMPERATURE OF UP TO 105°C ### NORDIC’S NRF52832 WL-CSP SOC PROVIDES PROCESSING POWER AND MULTIPROTOCOL SUPPORT FOR TUNDRA LABS’ TL448K6D-VR MODULE Nordic Semiconductor today announces that Tundra Labs, a Green Bay, WI-based technology company, has selected Nordic’s nRF52832 multiprotocol System-on-Chip (SoC) for its ‘TL448K6D-VR module’. The TL448K6D-VR module assists developers to simplify and lower the cost of designing six-degrees-of-freedom (6DoF) tracked devices for Valve’s SteamVR gaming platform. The highly integrated module employs the 3.0 by 3.2mm Wafer Level Chip Scale Package (WL-CSP) version of the nRF52832 SoC to deliver an ultra compact 10 by 16.35 by 2.01mm System-in-Package (SiP) form factor weighing less than 1g. A compact and lightweight form factor is a key attribute for body-worn devices as well as head-mounted displays. In addition to virtual reality (VR) and augmented reality (AR), the module is suitable for computationally intensive tracking, eye tracking, sensor fusion, and motor control applications. The modules are produced in volume, programmed with the latest SteamVR firmware, and functionally tested. The nRF52832 SoC’s RF performance and multiprotocol support were key requirements, particularly its backward compatibility with nRF24L Enhanced ShockBurst protocol In addition to the 6DoF inertial measurement unit (IMU)—including a 3-axis accelerometer and 3-axis gyroscope—the module comprises the 64MHz, 32-bit Arm® Cortex® processor-based nRF52832 SoC, a second 120MHz Arm Cortex M4 processor, an 8k LUT field-programmable gate array (FPGA), two precision MEMs oscillators, and a crystal oscillator. The nRF52832 SoC’s powerful Arm M4 processor is designed support the Floating Point (FP) and Digital Signal Processing (DSP) computations typical of high-end wireless applications. The SoC also integrates a 2.4GHz multiprotocol radio (supporting Bluetooth® 5, ANT™, and proprietary 2.4GHz RF protocol software) featuring -96dB RX sensitivity, with 512kB Flash memory and 64kB RAM. The SoC is supplied with Nordic’s S132 SoftDevice, a Bluetooth 5-certifed RF software protocol stack for building advanced Bluetooth LE applications. Nordic’s software architecture includes a clear separation between the RF protocol software and the developer’s application code, simplifying development and ensuring the SoftDevice doesn’t get corrupted when developing, compiling, testing, and verifying the application code. The S132 SoftDevice features Central, Peripheral, Broadcaster and Observer Bluetooth LE roles, and supports up to twenty connections. Read more: NORDIC’S NRF52832 WL-CSP SOC PROVIDES PROCESSING POWER AND MULTIPROTOCOL SUPPORT FOR TUNDRA LABS’ TL448K6D-VR MODULE ### Arduino Stepper Motor Control Hardware Preparation Stepper Motor Driver Board Arduino Board (UNO) If you bought the Arduino Board from ZTW, we have already installed the g-code library for you. If you have your own Arduino Board, you have the option to download the grbl Arduino library from the internet and upload it onto your board using xloader. Power Supply The power supply is used to give the power to stepper motor driver board. USB Cable (A Male - B Male/Printer USB Cable) A USB cable is need to connect the Arduino board to your computer. An A Male to B Male USB cable will be used, the one usually used for printer USB connection. If you really cannot find one, here is the link you can purchase. Wiring Instruction This diagram is the one we will be using to guide us when controlling our stepper drivers with the Arduino. An Arduino Board (UNO) will serve as the controller, along with 3 stepper motors and drivers, a DC power supply, and a laptop computer. First, attach a power cord to your power supply. Please check your outlet voltage, change the 110 - 220V setting on your PSU if necessary according to PSU you are using. Next, we must link the power supply unit's direct current output (12V) to the stepper motor driver. In order to make this clearer, red wire is used for positive connections and black for negative connections. We will connect the positive terminals of all three stepper motor drivers and do the same for the negative terminals. This is where you can observe the positive (red) wire coming from the PSU along with another red wire (jumper) leading to our initial stepper driver. Here is how the power wires will be connected from PSU to all three stepper drivers when it is done. We will connect the positive terminals of all three stepper motor drivers and do the same for the negative terminals. This is where you can observe the positive (red) wire coming from the PSU along with another red wire (jumper) leading to our initial stepper driver. Now we will connect the signal ground to the Arduino Board ground. Here is a closer look at the Arduino board ground pin connection. Now the "+Pul" for X axis will be connected to Arduino board pin 2. And the "+Dir" for X axis will be connected to Arduino board pin 5. Now let's connect Y axis, "+Pul" will be connected to Arduino Pin3, and "+Dir" need to be connected to Pin6. For Z Axis, connect "+Pul" to Pin4, and "+Dir" to Pin7. All stepper sigal wires have been connected between the stepper drivers and Arduino Board. Now we need to connect the stepper motors to the driver boards. Detailed information on our Shinano Stepper Motors can be found here: http://www.shinano.com/motors/stepper.html Initially, it is necessary to pinpoint the two wires that are part of the same circuit. Here, a multimeter can be utilized. If you are using our Unipolar stepper motor (Shinano NEMA17), you will not need to use two central wires (black and white). The motors wires have been connected to stepper driver's "A+", "A-" and "B+" "B-" Stepper Motors for all three axis have been connected to their driver boards. If you already have installed the software (below), then you are ready to connect the Arduino board to the computer through USB cable. Software Installation ArduinoControl 001: In This tutorial, we will be walking you through one way to control your CNC machine with an Arduino. The first thing you will want to do is to navigate to http://arduino.cc in your web browser. ArduinoControl 002: Navigate or click on the download tab. ArduinoControl 003: Choose the proper download for your machine. Note- the software we will be using to send G-Code to the arduino is currently only available in Windows. ArduinoControl 004: Click open. ArduinoControl 005: Choose where you would like to download the file. ArduinoControl 006: Wait for the download to complete. ArduinoControl 007: Once the download has completed, click open. ArduinoControl 008: The arduino software downloads as a zip file, so we will need to extract the files.   ArduinoControl 009: Right click on the folder, and choose extract all. ArduinoControl 010: Choose the destination where you would like to extract the arduino folder and click extract. ArduinoControl 011: Let the files extract, it will take a few moments. ArduinoControl 012: Now that the folder has been extracted, open it. ArduinoControl 013: Double click the arduino application. ArduinoControl 014: Next we will have to navigate to our device manager, where you should see your arduino. ArduinoControl 015: Right click on the arduino device, and choose "update driver software". ArduinoControl 016: Now we want to choose "Browse my computer" for driver software. ArduinoControl 017: Click browse. ArduinoControl 018: Navigate to your recently extracted Arduino folder and click OK. ArduinoControl 019: Choose next. ArduinoControl 020: Your driver will now be updated. ArduinoControl 021: If windows gives you this security alert- choose "install this driver software anyway". ArduinoControl 022: The driver should continue installing. ArduinoControl 023: You should get a window that says the driver was updated successfully. Click close. ArduinoControl 024: The device should now be shown in your device manager with the correct COM port. ArduinoControl 025: Now navigate to https://github.com/OttoHermansson/GcodeSender/downloads in your web browser. Then click on the GCodeSender.exe download link. ArduinoControl 026: Choose run when prompted. ArduinoControl 027: Choose your save destination. ArduinoControl 028: Once download has completed, select "open folder". ArduinoControl 029: Now double click the GCodeSender application. ArduinoControl 030: If prompted with a security warning choose "run". ArduinoControl 031: Once in GCodeSender click the "Open" button. ArduinoControl 032: Be sure the \r\n bubble is selected. ArduinoControl 033: Type a "$" without the quotes into the command bar and hit enter. ArduinoControl 035: You need to obtain a set of configurations that can be adjusted to suit your specific application. To adjust the step/mm for "x", enter $0 = 400 or the required steps per mm value, then press enter. The same process can be applied to any of the other configurations. Afterwards, you need to verify your configurations by entering X10, then pressing enter. Your device needs to travel 10mm towards the positive "X" axis. You can test the other axis in a similar manner. Simply substitute X with the desired axis. In some cases, the axis motion direction may need to be reversed based on the machine and configuration being used. Achieving this is done by adjusting the invert mask in the grbl controller. In version .8c, the command $6="X" is now used instead of older versions using $7="X", with X representing the direction(s) to be reversed from a list of values ("None = 0, X=32, Y=64, X+Y=96, Z=128, X+Z=160, Y+Z=192, X+Y+Z=224"). To reverse the Y axis, enter command $6=64. Another helpful resource is the Grbl controller 3.5 that can be accessed at http://zapmaker.grblcontroller.s3-website-us-west-2.amazonaws.com/GrblController35Setup.exe - Download the GrblController35Setup.exe file from this website. The GRBL controller is beneficial for setting up workpieces and visualizing the toolpath. Nonetheless, G-code sender offers better motion control when dealing with arcs. Once motion control is verified it is recommended to upgrade the GRBL control software on the Arduino. A tutorial is located at http://wiki.zentoolworks.com/index.php/How_to_upgrade_Arduino_GRBL_software Source: Arduino Stepper Motor Control ### Nordic’s nRF9161 SiP and DK support cellular IoT and DECT NR+ non-cellular 5G technology Nordic Semiconductor recently announced the availability of the nRF9161 system in package (SiP) and pre-certified Development Kit designed to power both cellular IoT and non-cellular 5G technologies. This new device can connect to LTE-M, NB-IoT, and DECT NR+ networks while maintaining long battery life, better location tracking, and strong connectivity. Additionally, Nordic offers support through their nRF Connect SDK and the Nordic Developer Academy. The nRF9161 SiP is an improved version of the nRF9160 SiP, which has been the basis for various projects like the Actinius Icarus SoM DK, Conexio Stratus, nRF9160 Feather LTE IoT and GPS Board,  Ruuvi Node, and many other projects. Feel free to check those out if interested. The press release mentions that this new chip is an update of the nRF9160 and includes features like an Arm Cortex-M33 processor, 1 MB flash, 256 KB RAM, along with SPI, I2C, UART, PWM, and a 12-bit ADC and other features. It also includes a GNSS receiver, LTE modem, RF Front End, and a power management system. Now looking at the updates, this new module will add in B65(2100 MHz) and B85(700 MHz) LTE bands for wider global coverage and support for DECT NR+ mesh network for long-range low-power applications that work at 1.9 GHz and support up to one million nodes. It also improves power efficiency with updated firmware while offering a power-saving mode and a sleep mode functionality for networks that do not support PSM (Power Saving Mode). Key Features of Nordic Semiconductor’s nRF9161 SiP: System-in-Package (SiP) – Fully integrated for cellular IoT and DECT NR+. Processor and Memory – 64 MHz Arm Cortex-M33, 1 MB flash, and 256 KB RAM. Modem – Multimode LTE-M/NB-IoT with DECT NR+ support and GNSS. Frequency Support – 700-2200 MHz LTE band and 1.9 GHz NR+ band. Connectivity – Supports global LTE bands without regional limitations. Security Features – Arm TrustZone and Arm CryptoCell for enhanced security. Power Efficiency – Advanced power-saving features like eDRX, PSM, and AS-RAI. Firmware Updates: Secure Firmware Over The Air (FOTA) updates. Location Tracking: Built-in GNSS receiver and support for cellular-based location features. Interfaces and Peripherals: Includes ADC, RTC, SPI, I²C, I²S, UARTE, PDM, and PWM. LTE Bands: Covers a wide range of LTE bands for global connectivity. DECT NR+ Stack: Enables massive mesh applications with reliability and scalability. Development Tools: nRF Connect SDK and nRF Connect for Desktop for diverse development needs. The nRF9161 Development Kit (DK) extends the nRF9161 SiP’s functionality with additional features for development ease. The dev kit is pre-certified meaning it has full access to GPIOs and interfaces, the board also comes with Arduino Uno-style pin headers which you can use to enable WI-Fi 6 capability with Nordic’s nRF7002EK evaluation kit. Additionally, it has user-programmable LEDs and buttons for interactive applications. The kit supports both plug-in and soldered (e)SIMs with a nano/4FF SIM slot and an MFF2 SIM footprint and comes with a pre-loaded SIM card. A key feature is the on-board SEGGER J-Link debugger for simplified programming and debugging of both the SiP and external targets. In terms of support, the nRF Connect SDK for VS Code gives developers essential tools directly in the IDE  while the nRF Connect for Desktop offers IoT tools for evaluating, monitoring, and debugging network connectivity.  Additionally, the Nordic Developer Academy has an online course focused on teaching cellular IoT quickly with the nRF9161 DK. As of now, both the nRF9161 SiP and the nRF9161 Development Kit can be purchased from major distributors like Mouser, Digi-Key, and Avnet. The SiP is priced at $26.73(on Mouser) for a single unit, while the Development Kit is available for $128.77(on Avnet) Source: Nordic’s nRF9161 SiP and DK support cellular IoT and DECT NR+ non-cellular 5G technology ### NRF52805 BLUETOOTH 5.2 SOC FEATURES A WLSCP, ENHANCED FOR SMALL TWO LAYER PCB MODELS Nordic Semiconductor has announced the nRF52805, which is a microcontroller from the NRF52 series of microcontrollers. Measuring at just 2.48 x 2.46mm, the nRF52805 is the smallest of all the nRF52 series. Despite its small size, the nRF52805 System-on-Chip (SoC) top up the industry-leading Nrf52 Series with an SoC in a WLCSP enhanced for small two layer PCB designs, ideal for cost-constrained utility. The nRF52805 is the perfect alternative for applications such as beacons, disposable medical devices, sensors, styluses and presenters. The nRF52805 features an Arm® Cortex® – M4 processor, clocked at 64 MHz, equipped with a 192 KB Flash and 24KB RAM, and incorporates wide variety of analog and digital interfaces such as a 2-channel 12 bit ADC, SPI, UART and TWI. The Nrf52805 which is a Bluetooth 5.2 SoC enables Bluetooth Low Energy and 2.4 GHz proprietary protocols. It enables Bluetooth high-throughput of 2 Mbps, transmitting info faster and even more efficient, and Bluetooth channel selection algorithm #2(CSA#2), improving coexistence ad reducing interference. The radio has up to 4 decibel-milliwatts TX power and -97 dBm sensitivity (1 Mbps Bluetooth LE). Read more: NRF52805 BLUETOOTH 5.2 SOC FEATURES A WLSCP, ENHANCED FOR SMALL TWO LAYER PCB MODELS ### NUVO-7531 SERIES, A COMPACT FANLESS EMBEDDED COMPUTER WITH INTEL ®9TH/8TH-GEN CORE™ PROCESSOR Neousys Technology, an industry-leading provider of rugged embedded systems, today announced their latest rugged fanless embedded platform, Nuvo-7531 series, featuring Intel® 9th/8th-Gen Core™ processor, compact dimensions, Gigabit Ethernet and USB ports with screw-lock mechanisms. It is an ideal solution for industrial automation, machine vision and automated guided vehicle applications. Powered by an Intel® 9th/ 8th-Gen Core™ 65W/ 35W CPU that offers more than 50% computation performance improvement over the previous generation, Nuvo-7531 series is a fanless embedded computer with a 212 x 165 x 63 mm low-profile chassis that is compact and yet powerful. The Nuvo-7531 has an abundance of I/O connections. It features four Gigabit Ethernet and four USB3.1 ports with screw-lock for multiple Gigabit Ethernet and USB camera connections. The screw-lock design offer rugged connectivity by ensuring the connector is screwed-on and does not fall off easily. For data storage purposes, there is a hot-swappable HDD tray for you to hot-swap the storage drive without turning off the system or dismantle the chassis. In addition, Nuvo-7531 supports three mPCIe slots for expansion so you can install WIFI or 3G/ 4G modules to achieve wireless communication. Overall, for a compact embedded computer, Nuvo-7531 delivers amazing computing power and provides rich I/O connectivity. It is an ideal solution for a variety of industrial applications that require a certain degree of processing power but limited by installation space and harsh environments, such as industrial automation, machine vision, robotics and automated guided vehicle. Read more: NUVO-7531 SERIES, A COMPACT FANLESS EMBEDDED COMPUTER WITH INTEL ®9TH/8TH-GEN CORE™ PROCESSOR ### NXP ANNOUNCES GENERAL AVAILABILITY OF THE ARM CORTEX-M33-BASED LPC551X S1X MCU FAMILY NXP Semiconductors today announced the availability of its LPC551x/S1x microcontroller (MCU) family – further extending its performance-efficient LPC5500 MCU series. The LPC551x/S1x MCU family offers developers low power consumption, embedded security, pin-, software- and peripheral-compatibility to accelerate time-to-market. The LPC551x/S1x family leverages ultra-efficient 40-nm flash technology for cost and performance benefits. Key features include: Over 600 EEMBC® CoreMarks® and as low as 32uA/MHz Up to 150 MHz Arm® Cortex®-M33 core Up to 256 KB on-chip flash; up to 96 KB SRAM CAN FD / CAN 2.0 with MCUXpresso-based software enablement Dual-USB with on-chip PHY, supporting both HS and FS modes SDIO and up to 9 FlexComm interfaces (configurable as either SPI/I2C/I2S,UART) Advanced security enabled with MCUXpresso software and tools: SRAM PUF based device root key with added application key storage options Secure boot and anti-rollback protection Arm TrustZone® technology for resource isolation Hardware block cipher (PRINCE) for encryption/decryption of internal flash Accelerators for symmetric and asymmetric cryptography Authenticated debug capabilities Available in HLQFP100, VFBGA98 and HTQFP64 packages LPC551x/S1x is fully supported by NXP’s MCUXpresso suite of software and tools To learn more about the LPC551x/S1x MCU family, please visit: www.nxp.com/LPC551x. Read more: NXP ANNOUNCES GENERAL AVAILABILITY OF THE ARM CORTEX-M33-BASED LPC551X S1X MCU FAMILY ### ODD INPUTS AND PECULIAR PERIPHERALS: USING A COMMODORE LIGHT PEN ON A MODERN(ISH) COMPUTER If you worked with computers back in the 1970s, there’s a good chance you used a light pen at some point: a simple input device that you’d point at the CRT screen to highlight text, choose menu options or manipulate graphic objects. Although ubiquitous in those days, the light pen lost the battle for ergonomics to the humble mouse and was all but extinct by the late 1980s. Touchscreen styluses implement a similar function today, but touching the screen somehow doesn’t feel the same as simply pointing at it. We therefore applaud [Maciej Witkowiak]’s efforts to bring the light pen into the 21st century by building a USB interface for a Commodore 64/128 light pen. At its heart is an Arduino Micro Pro that implements the USB HID protocol to communicate with any modern computer. It connects to the classic light pen as well as to the computer’s analog display signal and uses those to calculate the delay between the video synchronization pulses and the light pen’s output. The sync pulses are extracted from the video signal by an LM1881, a sync separator chip that will be familiar to anyone who’s worked with analog video signals. The Arduino calculates the light pen’s position based on the measured timing intervals and reports it to the computer, using the absolute positioning mode that’s also used by things like drawing pads. [Maciej] demonstrates his system in the video embedded below, in which he uses it to operate the menus on an X window system. A great success then, although there’s one catch: light pens only work on CRT displays, so you’ll need to drag one of those big glass beasts out of storage if you want to try this yourself. https://youtu.be/pBoyV9sNZWI We’ve featured the Commodore light pen before in this odd gaming input device. A similar device built with a discrete LED matrix is a good illustration of the light pen’s working principle. Source: ODD INPUTS AND PECULIAR PERIPHERALS: USING A COMMODORE LIGHT PEN ON A MODERN(ISH) COMPUTER   ### ODROID-H2+ SBC FEATURES CELERON J4115 PROCESSOR UPGRADE, AND DUAL 2.5GBE NETWORKING PORTS In November 2018, Hrdkernel announced the  ODROID H2 as a “new generation of single-board computers.” However, despite its success, they could not ship enough of them to satisfy the demand due to the Intel Gemini Lake J4105 CPU supply shortage.... Due to the shortage of the ODROID H2, the Odriod-H2+ was introduced, which has a slightly faster CPU, and will ship in large volume, and also has a pair of much faster 2.5GbE Ethernet ports. Intel started early this year to offer a slightly modified chip called the J4115, and the Odroid-H2+ runs Ubuntu on the quad-core J4115. Hardkernel says: “We therefore expect that most of the existing parts supply problems to be resolved.” Hardkernel says: “Beyond the CPU update, we upgraded the Ethernet controllers and RJ45 jacks to support much faster 2.5 GbE networks. The new NIC chipset RTL8125B requires users to proceed with a manual driver installation since the upstream kernel still needs a patch. We have also increased the number of GPIO pins from 20 to 24 to add USB 2.0 and HDMI CEC signals. If you want to use the CEC function, you need to buy a 3rd party CEC adapter board.” They continue “Finally we also changed the 12V SATA power circuit to improve the suspend-resume power control sequence of 3.5” HDDs.” The Intel J4115 clocks at 1.8GHz, and offers a Turbo Boost speed of up to 2.5GHz or 2.3GHz in multi-thread mode. This is a huge difference from the earlier J4105 that clocked at 1.5GHz/2.3GHz when the H2 was launched. The J4115 offers Intel UHD Graphics 600 and a 10W TDP, just like the J4105. The SBC is compatible with Ubuntu 20.04 image, Linux distros, and Windows 10. Read more: ODROID-H2+ SBC FEATURES CELERON J4115 PROCESSOR UPGRADE, AND DUAL 2.5GBE NETWORKING PORTS ### ON SEMICONDUCTOR NCXX333 ZERO DRIFT OPERATIONAL AMPLIFIERS WITH 10 UV OFFSET ON Semiconductor’s NCxx333 Zero Drift Operational Amplifiers deliver premium analog performances for front end amplifier circuits and power management designs. A comprehensive choice of packages matching industry-standard pinouts, addressing the various form factor requirements for automotive, industrial, telecom, wearable, Internet-of-Things, test equipment, and instrumentation. The high analog performance offered by the zero-drift architecture enhances motor control feedback-loop accuracy and power supply control loop contributing to higher system efficiency. The high DC precision parameters of input offset voltage and offset temperature drift makes these amplifiers the ideal choice for low side current sensing and voltage differential measurement on front end sensor functions. The very small voltage variation across temperature coupled with the close to zero offsets ensures the stability of the system operation facing wide temperature exposure without using complex and expensive software calibration algorithms resulting in a more manageable design and product maintenance. Features Gain-Bandwidth Product: 270kHz (NCx2333) 350kHz (NCx333, NCx333A, NCx4333) Low Supply Current: 17uA (typ at 3.3V) Low Offset Voltage: 10uV max for NCS333, NCS333A 30uV max for NCV333A, NCx2333 and NCx4333 Low Offset Drift: 0.07uV/°C max for NCS333/A Wide Supply Range: 1.8V to 5.5V Wide Temperature Range: -40°C to +125°C Rail-to-Rail Input and Output Available in Single, Dual and Quad Packages NCV Prefix for Automotive and Other Applications Requiring Unique Site and Control Change Requirements; AEC-Q100 Qualified and PPAP Capable Read more: ON SEMICONDUCTOR NCXX333 ZERO DRIFT OPERATIONAL AMPLIFIERS WITH 10 UV OFFSET ### Arduino + MLX90614 IR Thermometer Having the ability to feel temperature is exciting... However, being able to detect the temperature of an object without any physical contact is truly amazing. The MLX90614 is a sensor with the capability of achieving that. This person can detect temperatures ranging from -95 to 720ºF (-70 to 382.2°C) with a resolution of 17 bits by interpreting the infrared light emitted by an object. This is 128 times more accurate than the Arduino's ADC, allowing it to distinguish between 25ºC and 25.02ºC without physical contact. Even if we divide 17 bits between -70 and 382, we should still achieve a resolution of 0.0034ºC. I have been keeping an eye on this guy since I first saw it at Sparkfun, but never had a justification to purchase it. After scanning the area, it appeared that the MLX90614 was causing difficulties for certain individuals attempting to link it to their Arduino. So... at bildr, we did what we do well, we purchased one, and spent time simplifying things to help you get it up and running. This I2C device, the MLX90614, differs from other sensors we've discussed. Unlike most I2C sensors, it doesn't work with the wire library for communication. Instead, we will use a different library. Additionally, it's not on a breakout board like we are used to, so it needs pull-up resistors on the data and clock lines, which are usually included but unnoticed. Since the regular wire library didn't work, we'll opt for the i2cmaster library. Furthermore, the i2cmaster does not work with the Arduino right away; some files must be modified and renamed, and an additional text file is required for it to operate. However, since it is open-source, I am able to implement those modifications and share it again. I am going to provide you with the working version to save you time and stress. You must place the library in your Arduino library folder for it to function properly, but we will reach that point. Regarding connecting this, for your Arduino (excluding the mega), the SDA can be found on analog input pin 4, while SCL is on analog pin 5. SDA is digital 20, and SCL is digital 21 on an Arduino mega. Refer to the image for the correct connection instructions, including the need to connect a 4.7KΩ resistor from SDA to 3.3V and another resistor from SCL to 3.3V. I have a .1uf capacitor placed between power and ground as recommended in the data sheet, although some people don't include it, I have tried removing it and the circuit still functioned. Code Therefore, here is the code. I am utilizing bildr's fancy bildrCode wrapper due to its numerous files. This enables us to have control over multiple files in a project, similar to how a wiki operates. This code simply prints out the temperature in Celsius and Fahrenheit using serial communication. Make sure to launch your serial monitor! Before you load or open the Arduino program, you must place the "I2Cmaster" in your Arduino Library for the code to function properly. If you are unsure of the default location, turn your gaze towards the right. After placing the I2CMaster folder, proceed to open MLX90614.pde in your Arduino software to upload it. Conclusion This sensor is really amazing, and we hope it saved you some time. Inform us if you interact with this individual so we can potentially showcase it on our blog. We want you to blog with us bildr is seeking individuals who are interested in writing a blog post for them. If you are interested in contributing to bildr by writing or have a post idea, please reach out to us at blog@bildr.org or share in the forum. Read More:  MLX90614 IR Thermometer ### OPTIMOS™ IPOL VOLTAGE REGULATORS WITH COT ENGINE FOR ENHANCED TRANSIENTS AND EASY DESIGN Infineon Technologies AG introduces the IR3887M, IR3888M and IR3889M devices in its new family of integrated-point-of-load voltage regulators featuring a fast constant-on-time (COT) engine. This product family is designed for today’s server, base station and telecom (operating at 85˚C ambient temperature) and storage applications requiring both high efficiency and high density. The IR3887M is the smallest 30 A device on the market. Fusing Infineon’s latest FET generation and enhanced package technology allows for thermal support for 30 A in a small 4 mm x 5 mm footprint. The OptiMOS™ IPOL product family comes with an enhanced-stability COT engine with ceramic capacitors without the need for external compensation. Wide input voltage range of 4.3 V – 17 V, 2 V min with 5 V external bias, and precise output voltage (0.5 % accurate reference voltage) are supported. The voltage regulators offer high efficiency at light-load and thermally-compensated internal overcurrent protection with four selectable limits for a less expensive and smaller inductor. High switching frequency (up to 2 MHz) for small PCB size and fewer bill-of-materials (BOM) is guaranteed with easy design and layout. These products provide benchmark efficiency, low power losses and the ability to thermally handle up to 30 A of continuous current. Customers can also benefit from the benchmark output voltage regulation and enhanced load transients response. The IR3888M and IR3889M come in a small, 5 mm x 6 mm footprint in a PQFN package. The IR3888M handles continuous current up to 25 A and is RoHS2 compliant. Read more: OPTIMOS™ IPOL VOLTAGE REGULATORS WITH COT ENGINE FOR ENHANCED TRANSIENTS AND EASY DESIGN ### OPTO DIODE INTRODUCES AXUV20HS1 CIRCULAR PHOTODETECTORS THAT DETECT ELECTRONS TO 200 EV Opto Diode Corporation, an ITW company, introduces a high-speed photodetector with a circular active area of 5 mm diameter (typically 20 mm²). It is ideal for high-speed detection of low-energy electrons or X-rays. The AXUV20HS1 is one of several AXUV detectors that feature high performance measurement of photons, electrons, or X-rays. The device features electron detection to 200 eV. The high-speed detector has a typical rise time of 3.5 nanoseconds. Storage and operating temperatures range from -10 °C to +40 °C (ambient) and from -20 °C to +80 °C in nitrogen or vacuum environments. The lead soldering temperature is 260 °C. Opto Diode’s high-speed photodiode is shipped with a protective cover plate to safegua rd the photodiode chip and wire bonds. To view the responsivity graphs for the AXUV20HS1 photodiodes, please go to Opto Diode’s data sheet here: https://optodiode.com/pdf/AXUV20HS1DS.pdf. To learn more about Opto Diode’s AXUV family of detectors that detect energy from 100eV to 50keV for the measurement of photons, electrons, or X-rays from 0.0124 nm to 190 nm, please contact sales@optodiode.com or visit: https://optodiode.com/photodiodes-axuv-detectors.html. ### Arduino Based Fire Fighting Robot The NCRB stated that more than 120,000 fatalities in India were linked to fire mishaps from 2010 to 2014. Despite the many safety measures implemented for fires, they still happen from time to time. In the event of a fire, we must use personnel who are not in a secure location to save people and put out the fire. Because of technological progress, especially in Robotics, it is very possible to replace humans with robots in fire fighting. This has the potential to improve firefighters' efficiency and prevent putting human lives at risk. Today we will be building a Fire Fighting Robot using Arduino that is capable of detecting fire and turning on the water pump. Our aim in this project is to build a simple robot using Arduino that is able to detect a fire and put it out using water. A simple robot will assist us in understanding the fundamentals of robotics, allowing us to develop more advanced robots later on. Let's get started now... Material Required: Arduino UNO Fire sensor or Flame sensor (3 Nos) Servo Motor (SG90) L293D motor Driver module Small Breadboard Robot chassis with motors and wheel (any type) A small can Connecting wires Working Concept of Fire Fighting Robot: These sensors include an IR Receiver (Photodiode) that is used to detect the existence of fire. What is the way to accomplish this? While burning, fire generates a small amount of infrared light that can be picked up by the IR receiver on the sensor module. Afterwards, an operational amplifier is employed to observe any changes in voltage from the IR Receiver. When a fire is detected, the output pin will show 0V, and when there is no fire, the output pin will display 5V. So, we place three sensors on the robot in three varying directions in order to sense the fire's direction. By determining the fire's orientation, we can employ the engines to move closer to it by regulating them with the L293D component. When near a fire, we need to put it out with water. A tiny boat is able to carry water, along with a 5V pump, installed on a servo motor for managing the water spray's direction. It's time to shift our focus to the connections now. You can choose to either connect all the shown connections before uploading the program for testing, or fully assemble the robot before proceeding with the connections. The connections are simple in both scenarios and you should be able to complete it accurately. Your ability to use the container I have may be restricted by the type of robotic chassis you possess. If that is the case, depend on your creativity to create the pumping system. However, the code will remain the same. I put the pump in a tiny aluminum container (similar to a beverage can) and topped it up with water. I went ahead and assembled the complete can onto a servo motor to control the water's flow. After assembling it, my robot looks like this. I've fastened the servo fin to the bottom of the container using hot glue and fixed the servo motor to the chassis with nuts and bolts. We can position the vessel on the engine, turn on the pump within, and push water out via the tube. The servo can effectively rotate the whole vessel in order to control the direction of the water. Programming your Arduino: Once your hardware is prepared, you can load the Arduino code to initiate a specific function. The entire program can be found at the bottom of this page. Nevertheless, I have elaborated on a few key components in more detail here. The fire sensor will signal a HIGH output in the presence of fire and a LOW output when there is no fire. We need to continuously monitor these sensors for any signs of a fire. If there is no fire, we instruct the motors to stop by setting all the pins to a high signal as demonstrated below. if (digitalRead(Left_S) ==1 && digitalRead(Right_S)==1 && digitalRead(Forward_S) ==1) //If Fire not detected all sensors are zero { //Do not move the robot digitalWrite(LM1, HIGH); digitalWrite(LM2, HIGH); digitalWrite(RM1, HIGH); digitalWrite(RM2, HIGH); } Likewise, in case of a fire, we can direct the robot to move towards it by adjusting the corresponding motor rotation. When the fire is directly in front of it, the left and right sensors will not be able to detect the fire because they are facing straight ahead towards it. Currently, we are utilizing the variable "fire" to trigger the function for extinguishing the fire. else if (digitalRead(Forward_S) ==0) //If Fire is straight ahead { //Move the robot forward digitalWrite(LM1, HIGH); digitalWrite(LM2, LOW); digitalWrite(RM1, HIGH); digitalWrite(RM2, LOW); fire = true; } Once the variable fire becomes true, the fire fighting robot arduino code will execute the put_off_fire function until the fire is put off. This is done using the code below. while (fire == true) { put_off_fire(); } In the put_off_fire() function, we simply need to halt the robot by setting all the pins to a high state. Next, start the pump to push the water out of the container, simultaneously using the servo motor to turn the container and distribute the water evenly. This can be achieved with the following code. void put_off_fire() { delay (500); digitalWrite(LM1, HIGH); digitalWrite(LM2, HIGH); digitalWrite(RM1, HIGH); digitalWrite(RM2, HIGH); digitalWrite(pump, HIGH); delay(500); for (pos = 50; pos <= 130; pos += 1) { myservo.write(pos); delay(10); } for (pos = 130; pos >= 50; pos -= 1) { myservo.write(pos); delay(10); } digitalWrite(pump,LOW); myservo.write(90); fire=false; } Working of Fire Fighting Robot: It is advised to examine the robot's results in stages rather than operating it all at once during the initial trial. You can assemble the robot with the servo motor and test its ability to track the fire effectively. Next, you can verify if the pump and the servo motor are functioning correctly. Once all functions are operational, you can execute the program and experience the full functionality of the firefighter robot. The video provided below shows the full operation of the robot. The size of the fire determines how far it can be detected, with smaller fires like a matchstick being detectable at shorter distances. You can also adjust the robot's sensitivity using the potentiometers located on top of the modules. I have employed a power bank to energize the robot; alternatively, you could use a regular battery or even a 12V battery to power it up. I hope you grasped the project and will have fun constructing something alike. If you encounter difficulties downloading this version, feel free to leave a comment below or visit the forums for assistance with technical issues. Check out our Robotics Section to find more cool DIY Robots. Code /*------ Arduino Fire Fighting Robot Code----- */ #include Servo myservo; int pos = 0; boolean fire = false; /*-------defining Inputs------*/ #define Left_S 9      // left sensor #define Right_S 10      // right sensor #define Forward_S 8 //forward sensor /*-------defining Outputs------*/ #define LM1 2       // left motor #define LM2 3       // left motor #define RM1 4       // right motor #define RM2 5       // right motor #define pump 6 void setup() {   pinMode(Left_S, INPUT);   pinMode(Right_S, INPUT);   pinMode(Forward_S, INPUT);   pinMode(LM1, OUTPUT);   pinMode(LM2, OUTPUT);   pinMode(RM1, OUTPUT);   pinMode(RM2, OUTPUT);   pinMode(pump, OUTPUT);   myservo.attach(11);   myservo.write(90); } void put_off_fire() {     delay (500);     digitalWrite(LM1, HIGH);     digitalWrite(LM2, HIGH);     digitalWrite(RM1, HIGH);     digitalWrite(RM2, HIGH);    digitalWrite(pump, HIGH); delay(500);     for (pos = 50; pos <= 130; pos += 1) {     myservo.write(pos);     delay(10);   }   for (pos = 130; pos >= 50; pos -= 1) {     myservo.write(pos);     delay(10);   }   digitalWrite(pump,LOW);   myservo.write(90);   fire=false; } void loop() {    myservo.write(90); //Sweep_Servo();     if (digitalRead(Left_S) ==1 && digitalRead(Right_S)==1 && digitalRead(Forward_S) ==1) //If Fire not detected all sensors are zero     {     //Do not move the robot     digitalWrite(LM1, HIGH);     digitalWrite(LM2, HIGH);     digitalWrite(RM1, HIGH);     digitalWrite(RM2, HIGH);     }     else if (digitalRead(Forward_S) ==0) //If Fire is straight ahead     {     //Move the robot forward     digitalWrite(LM1, HIGH);     digitalWrite(LM2, LOW);     digitalWrite(RM1, HIGH);     digitalWrite(RM2, LOW);     fire = true;     }     else if (digitalRead(Left_S) ==0) //If Fire is to the left     {     //Move the robot left     digitalWrite(LM1, HIGH);     digitalWrite(LM2, LOW);     digitalWrite(RM1, HIGH);     digitalWrite(RM2, HIGH);     }     else if (digitalRead(Right_S) ==0) //If Fire is to the right     {     //Move the robot right     digitalWrite(LM1, HIGH);     digitalWrite(LM2, HIGH);     digitalWrite(RM1, HIGH);     digitalWrite(RM2, LOW);     } delay(300); //Slow down the speed of robot      while (fire == true)      {       put_off_fire();      } } Video: https://youtu.be/ZfdxlZ1cUy0 Source: Arduino Based Fire Fighting Robot ### PERCEIVE CORPORATION LAUNCHES TO DELIVER DATA CENTER-CLASS ACCURACY AND PERFORMANCE AT ULTRA-LOW POWER FOR CONSUMER DEVICES Introduces breakthrough ErgoTM edge inference processor, delivering 4+ TOPS sustained and 55 TOPS/W, capable of processing large neural networks in 20mWSelected by two of the leading providers of smart connected camera and security products to integrate advanced neural network applications into future products Perceive Corporation, an edge inference solutions company, today launched the company and debuted its first product, the ErgoTM edge inference processor. Ergo brings breakthrough accuracy and performance to consumer devices such as security cameras, smart appliances, and mobile phones. The Ergo chip and reference board are currently being sampled to leading customers and are ready for mass production in the second quarter of 2020. In an environment where consumers are demanding greater security and privacy, Ergo removes the need to send sensor data from devices to the cloud for analysis. Ergo’s real-time, on-device inference processing makes it ideally suited for devices where consumer experience and privacy of data such as video and audio are of paramount importance. Whether it is reducing false notifications in a security camera, extending battery life in a mobile device, or simplifying the user interface of a home appliance, Ergo improves key device features by enabling comprehension and intelligent reactions to surroundings—without compromising consumer security. Everyone wants smarter devices—but until now, only the cloud has provided the requisite accuracy,” said Steve Teig, Chief Executive Officer of Perceive. “Perceive has developed novel, mathematically rigorous methods for inference that redefine what is possible in an edge device. Our Ergo chip delivers data center-class accuracy and performance in consumer devices, protecting privacy and security while running at ultra-low power. Perceive was incubated by and is a majority-owned subsidiary of Xperi Corporation (Nasdaq: XPER), a leader in audio, imaging and semiconductor technology focused on creating innovative solutions for smart devices that enable extraordinary experiences for people around the world. Read more: PERCEIVE CORPORATION LAUNCHES TO DELIVER DATA CENTER-CLASS ACCURACY AND PERFORMANCE AT ULTRA-LOW POWER FOR CONSUMER DEVICES ### PICKITAUTOWATCH: A NEW APPLICATION FOR BOTH THE PICKIT2 AND PICKIT3 PROGRAMMERS PICKitAutoWatch is a new application and a new approach to programming microcontrollers. PICKitAutoWatch supports both PICkit2 and PICkit3 programmers.  The software is feature rich and easy to use via a simple user interface. PICKitAutowatch is the best value for money products if you are simply programming your part as it supports the PICkit2 and PICkit3 programmers. PICKitAutoWatch provides support for the latest generation of Microchip microcontrollers and EEPROMs, and fully supports the  Microchip Programmers-on-Board the Microchip Xpress Boards. The intent of PICKitAutoWatch is to enable operations with auto-detection and recovery of the program to maintain the programming activity. PICKitAutoWatch supports nearly 1000 different types of microcontrollers, EEPROMS and the Microchip Programmers-on-Board the Microchip Xpress Boards.. PIC10F, PIC12F, PIC16F, PIC18F, PIC24 dsPIC30 and dsPIC33 family A wide range of EEPROMs MCP2502X/5X & HCSxx EEPROM 11LCxx, 24LCxx, 25LCxx and 93LCxx, M25Px and FL127x Microchip Xpress Boards. See here for the full list of supported parts Core Functionality Programs the target part when a new hex file is generated Automatic part detection Recently used parts listed Supports project settings – save and load of project configuration Supports multiple voltages within constraints of physical programmer – noting that some clone programmers do not support voltage control Supports ISCP protocol frequency management Manages Microchip HEF and SAF memory with automatic merger of HEF/SAF memory into target part Support a wide range of Windows operating systems (32bit/64bit): Windows XP ,Windows Vista, Windows 7, Windows Embedded 7, Windows 8, Windows 10 New programming protocols to support new classes of Microchips PIC microcontrollers Updated and managed database for Microchip and other EEPROM devices Supports the standard Microchip Microchip PICkit2 and PICkit3 programmer firmware.  PICKitPlus does not require an update to the Microchip PICkit2 and PICkit3 programmer firmware Control power on and off independent of programming state Automatic parts database update Internet connection not required Read more: PICKITAUTOWATCH: A NEW APPLICATION FOR BOTH THE PICKIT2 AND PICKIT3 PROGRAMMERS ### PORTWELL COLLABORATES WITH MICROSOFT TO ACCELERATE INTERNET OF THINGS SOLUTIONS American Portwell Technology, Inc., (https://www.portwell.com), today announced it has joined Microsoft Azure Certified for Internet of Things (IoT), ensuring customers get IoT solutions up and running quickly with hardware and software that has been pre-tested and verified to work with Microsoft Azure IoT services. Microsoft Azure Certified for IoT allows businesses to reach customers where they are, working with an ecosystem of devices and platforms, allowing for faster time to production. American Portwell Technology is a leading embedded computer manufacturer providing IoT hardware solutions from IoT edge, gateway, network security appliance to OEM products used in a server room for more than 25 years. Portwell’s LYNX-6K and KUBER-2000 Series are a new generation of palm-sized, ready-to-use industrial IoT gateway solutions certified by Microsoft Azure IoT that provide a scalable infrastructure for data, virtual machines, server and front-end applications, and ensure its solutions are pre-integrated with Azure cloud service to accelerate the implementation in industrial IoT of applications such as edge device for medical equipment management, gateway device in industrial robotics, and train’s wayside control and management. “The new LYNX-6K and KUBER-2000 Series provide a rich portfolio of ultra-small form factor IoT appliances that offer flexible I/O expansion, ruggedized design, wireless connectivity, fast time-to-market and low power consumption for different applications fulfilled with minimal investment. Microsoft Azure Certified for IoT validates our ability to jumpstart customers’ IoT projects with pre-tested device and operating system combinations,” said Jack Lam, senior product marketing director of American Portwell Technology. “Decreasing the usual customization and work required for compatibility ensures American Portwell helps customers get started quickly on their IoT solution.” Read more: PORTWELL COLLABORATES WITH MICROSOFT TO ACCELERATE INTERNET OF THINGS SOLUTIONS ### PORTWELL’S NEW FAMILY OF MULTI-TOUCH HUMAN MACHINE INTERFACE (HMI) PANEL PC PRODUCTS American Portwell Technology, Inc., (https://www.portwell.com), a world-leading innovator in Industrial PC (IPC) and an Associate member of the Intel® Internet of Things (IoT) Alliance, announces the LEAD-PD, -PND and -PPC series, a new family of panel PC products designed for the IoT market as a robust, functional and flexible multi-touch human machine interface (HMI). According to Jack Lam, American Portwell Technology’s product marketing director, the new LEAD series provides a rich portfolio of touch displays or fanless panel PCs with a variety of connectivity and computing flexibility. “Besides the option of two sizes and two colors,” Lam confirms, “the new LEAD series features full HD 10-point projective capacitive touch screen with stylish, slim and bezel-free outlook. Plus,” Lam adds, “a solid IP65 water- and dust-proof front panel, and fast time to market”. Lam suggests applications for Portwell’s LEAD series include smart hospital/healthcare, such as information terminal, bedside infotainment, telemedicine and self-check system. Smart retail applications include digital signage, recognition, customized advertisements/ promotions, merchandise locations, self-checkout and delivery. Kiosk applications include point of interest, point of information in hospitality locations such as hotel or restaurant; transportation such as parking lot, train station, airport; library, exhibition hall; government infrastructure; industrial/factory automation; facility management; intralogistics or smart warehouse and much more. LEAD Series: Common Features The LEAD series currently consists of three subsets” explains Maria Yang, American Portwell’s product marketing engineer. “LEAD-PD series, a Touch Display with multi-touch function; LEAD-PND series, an ARM-based flat panel PC that supports Android™ operating system with wireless connectivity; and LEAD-PPC series, utilizing Intel Atom® Dual Core® processor compatible with Win 10 IoT, Linux and Android operating system. Read more: PORTWELL’S NEW FAMILY OF MULTI-TOUCH HUMAN MACHINE INTERFACE (HMI) PANEL PC PRODUCTS ### POWER METER GIVES ACCURATE MEASUREMENT FOR ENERGY CONSUMPTION OF IOT DEVICES In the world of today’s technology, the Internet of Things is very popular. We see that most of the devices used to create the IoT (Internet of Things) function on small batteries or energy harvesting. We find it quite hard measuring the amount of energy being consumed by these IoT devices due to the dynamic nature of the current consumption, with popular measurement methods like multimeter, and oscilloscope having drawbacks. One method developers use is to use multiple instruments and hand calculations to arrive at an estimate of the energy consumption, but this method could be tasking. However, a solution is at hand. Say hello to the ZS1100A. The ZS1100A functions by plotting the current consumption vs time very accurately and in great detail, which can be used along with the battery model to estimate the overall battery life. Engineers need the new ZS1100A because power consumption of IoT devices follow a particular pattern which is difficult to measure using traditional equipment. The main reasons for this are: High Dynamic Range: An IoT device usually consumes a few μA in sleep mode, and few hundred mA in its transmit mode, depending on the radio. Thus, the current waveform has a very high dynamic range spanning almost 6 decades. High Bandwidth: The current drawn by an IoT device can fluctuate from few mA to hundreds of mA in couple of micro-seconds. Thus, the frequency content of these current waveforms is well over few 100 KHz. Read more: POWER METER GIVES ACCURATE MEASUREMENT FOR ENERGY CONSUMPTION OF IOT DEVICES ### PREMIO UNVEILS INTEL 9TH GEN INDUSTRIAL MOTHERBOARD FOR ADVANCED EMBEDDED AND IOT SOLUTIONS CT-MCL01 MicroATX motherboard Enhanced Power Drives Computing Performance, Reliability, and Security for Industry 4.0 Applications Premio Inc., an innovating global industrial ODM/OEM edge-to-cloud solutions provider, released its new CT-MCL01 MicroATX industrial motherboard for rugged IoT processing.  The announcement marks Premio’s introduction of products supporting 9th Gen Intel® Core™ — codename: Coffee Lake Refresh — processors.  The compact, next-generation motherboard carries numerous features that allow system integrators to take advantage of developments in IoT and connectivity technologies for embedded industrial applications. “This new motherboard helps system integrators easily incorporate a future-ready processing solution into their final configuration of end-user products,” said Dustin Seetoo, Premio’s director of product marketing.  “Our CT-MCL01 industrial-grade motherboard was designed to allow machine builders for industrial applications the ability to harness faster processing and connectivity in embedded IoT technologies.” The CT-MCL01 has a micro-ATX form factor consisting of reliable industrial-grade components with extended product lifecycle support up to 15 years.  The industrial motherboard supports Intel® Core™, Celeron, and Pentium processors ranging from 4- to 8-multi-core performance.  Its LGA 1151 socket supports Intel’s Q370 chipset to deliver better performance, stronger security and quicker I/O connectivity to expansions and peripherals.  Four DIMM slots support DDR4 2666MHz (up to 128GB) for rapid memory frequency speeds The industrial motherboard contains two M.2 connectors enhancing device connectivity and storage.  One connector keyed to the E position can receive a Wi-Fi 6 card for superior network performance.  The other, keyed to the M position, serves as a PCIe x4 interface and supports NVMe storage. Read more: PREMIO UNVEILS INTEL 9TH GEN INDUSTRIAL MOTHERBOARD FOR ADVANCED EMBEDDED AND IOT SOLUTIONS ### PORTWELL LAUNCHES NEW COMPACT, FANLESS AND RUGGED EMBEDDED COMPUTER SYSTEMS American Portwell Technology, Inc., (https://www.portwell.com), a world-leading innovator in Industrial PC (IPC) and Associate member of the Intel® Internet of Things (IoT) Solutions Alliance, announces the LYNX-6000 Series, a new generation of palm-sized, ready-to-use industrial IoT gateway solutions based on Intel Celeron® N3350 CPU (formerly Apollo Lake platform) and also certified by Microsoft® Azure® IoT that provides a scalable infrastructure for data, virtual machines, server and front-end applications. According to Jack Lam, senior product marketing director at American Portwell Technology, the new LYNX-6000 Series provides a rich portfolio of ultra-small form factor IoT appliances that offer a variety of features including low power consumption connectivity and expansion, ruggedized design, and industrial regulatory compliance. LYNX-6000 Series with Highly Flexible I/O and Expandable Capabilities Through modular design, LYNX-6000 Series features an impressive combination of modern and legacy I/O connectivity, plus an additional proprietary expansion slot allows LYNX-6000 Series to enhance I/O connectivity and increase system functionality via various add-on I/O options. LYNX-6110: The Basic Model Suitable for Edge Computing Features of the LYNX-6110 basic model include Intel Celeron N3350 processor (Apollo Lake platform); onboard 4GB LPDDR4 DRAM (up to 8GB); onboard 32GB eMMC 5.0 (up to 256GB); operation at <10W for energy efficiency; 2x GbE LAN, 2x USB 3.0, 1x DP with resolution up to 4K; 1x M.2 Key E 2230 for wireless module; wide power input ranges from 12-30 VDC; ruggedized, fan-less and advanced thermal design; DIN-rail and wall mount options; certified with heavy industry EMC and EMI class B; and optional wide operating temperature support and customized appearance service. Read more: PORTWELL LAUNCHES NEW COMPACT, FANLESS AND RUGGED EMBEDDED COMPUTER SYSTEMS ### POWERFUL NEW SBC TO EASE DEVELOPMENT CHALLENGES AND ACCELERATE INNOVATIONS Oftentimes, developing an end application is like a scary game of maze. One can easily get lost in its winding paths lined with unseen twists and obstacles. A wrong choice can lead you to start all over again , making the journey grim, and the goal out of reach. For developers, the challenges are real and huge, turning the development process into a difficult chase to fulfill performance and time to market objectives while achieving customer expectations as well. From prototype, integration to development, there are multitude of bottlenecks lurking in every path. With so many design challenges to overcome, developers often find it hard to integrate cutting edge technologies in their end applications and optimize their designs with the best performance and features. At iWave, we are poised to ease these challenges and turn them into opportunities for innovation. A win – win situation for all. And that’s the reason we have launched a new SBC, powerful enough to address even the most pressing development challenges and help transform your ideas into a stunning reality. The SBC is the fourth addition to our growing portfolio of NXP® i.MX based single board computers – high efficiency industrial platforms superior in performance. Powered by NXP i.MX8 Processor, the iWave SBC is equipped with upto eight Armv8 64-Bit heterogeneous CPU cores (2 x Arm® Cortex®– A72, 4 x Arm® Cortex®-A53 & 2 x Arm® Cortex®-M4F).It highlights the extremely powerful computational capability of the SBC, making it an awaited platform for unleashing complex to implement applications with utmost efficiency and ease. Advanced use cases include High-Speed Networking , Edge Computing , Industrial Automation ,4K imaging , e–Cockpit, Intelligent Data Centre, etc., i.MX8 Quad MAX/Quad Plus Pico ITX SBC : Key Features Adding new dimensions to innovate: Intelligent Edge: The future is at the edge. With immense inbound advantages, edge computing is paving the way to a new era of connected , intelligent devices.iWave SBC has been designed ,  keeping in mind the revolutionary transition that edge computing can realize in new-age applications. Be it medical, industrial or automotive, the i.MX8 SBC with its intuitive real time processing, flexible high speed memory and robust connectivity can smartify your end application in just a matter of seconds. Read more: POWERFUL NEW SBC TO EASE DEVELOPMENT CHALLENGES AND ACCELERATE INNOVATIONS ### 26-Way MIDI DRUMS His creation is a 26-key drum pad setup that combines MIDI and USB connectivity, featuring a fixed velocity byte for 10 drum switches alongside a 16-key velocity-sensitive circuit. This system utilizes piezo sensors to achieve a complete velocity range from 0 to 127. The drums are already chosen to be sent to the MIDI outputs 35-50 for the piezos and 51-60 for the switches. General MIDI drums offer a variety of MIDI drum options to choose from.   It provides MIDI data which has to be sent to a drum/synthesiser or sound module. The velocity byte is dependent on how hard the piezo transducer is hit.  The drum choices, and the MIDI transmit channel are assigned in the  program. However, normally the drum sounds are assigned to MIDI channel 10. The 26-Way drum inputs to MIDI Output unit utilizes: An Arduino Mega board including a suitable pre-programmed Atmega microcontroller, A 2.1mm power socket, and associated LED, 16 inputs are velocity sensitive, providing a full (0-127) velocity range, 10 inputs for momentary action switches, giving a fixed velocity output, A MIDI 5-pin DIN output socket, Each input (1-26) is pre-selectable on programming to a particular MIDI drum selection ,   The 26-Way drum inputs to MIDI Output unit requires: A 9v battery or equivalent DC power source, The circuit consists of the MIDI drum interface. Suitable external 16 piezo-electric transducers, 32 off 1M Ohm resistors 16 off IN4148 diodes, 16 off 100 nF capacitors, Suitable 10 push-to-make switches Circuit Schematic: A circuit schematic of the MIDI drum interface shows the Input/Output connections. The circuit schematic for the Arduino MEGA is also available. NOTE: Any unused analog inputs should be connected to ground (GND) otherwise they will pick up noise and produce spurious outputs. MIDI: It supplies MIDI information that must be transmitted to a drum machine/synthesizer or audio module. The speed byte is determined by the force applied to the piezo transducer. The program assigns the drum choices and the MIDI transmit channel. Typically, the drum sounds are usually mapped to MIDI channel 10.   For more detail: 26-Way MIDI DRUMS ### WATER LEVEL MEASUREMENT USING ARDUINO UNO R3 AND WATER SENSORS Greetings, welcome back. Today, we will demonstrate the process of creating a water level detector utilizing an Arduino Uno and water sensors. There are numerous water level sensor tutorials available online, but this method stands out. To begin with, let's talk about the components required for creating a water level indicator and controller. Component required to make water level indicator . water sensors that can give output 3-5 volt when water is present -8 Light Emitting Diodes (LEDs) -4 arduino uno or similar buzzer jumper wires Liquid Crystal Display (LCD) motor relay with power source tip-122 NPN transistor power source To begin with, let's talk about the water sensor. With the abundance of water sensors in the market, we have the option of using any sensor that outputs 1 when submerged in water. Due to the conductivity of water, supplying 5 volts to the bottom of the water will cause the respective conductive pins to go high when water reaches higher levels, thus detecting the presence of water. You may also opt to utilize water sensors as depicted in the figure below, which will generate 4.3 volts when fully immersed in water, indicating a digital electronic 1. This is analog water sensor but we can use this sensor as digital if its strips are complete drowned it will give logic 1 , If you are not familier about other components please check arduino tutorials for beginners and you will learn something new before exploring other tutorial . Okay now connect everythings as shown in circuit diagram and upload the code as shown in below and after that we will describe the code brifly .You can download the complete code , simulation file , from this link water level indication electronify. WATER LEVEL MEASUREMENT USING ARDUINO UNO R3 AND WATER SENSORS (Code) #include LiquidCrystal lcd(13, 12, 11, 10, 9, 8); byte sensorPin[] = {0,1,2,3,4,5,6,7}; byte ledPin[] = {17,16,15,14}; // number of leds = numbers of sensors const byte sensors = 8; const byte leds=4; int motor = A4; int buzzer = A5; void setup() { for(int i = 0; i< sensors; i++) //initialize all sensor pins to input pin { pinMode(sensorPin[i], INPUT); } for(int i = 0; i< leds; i++) //initialize all led pins to output pins { pinMode(ledPin[i], OUTPUT); } pinMode(motor, OUTPUT); //initialize motor pin to output pin lcd.begin(20, 4); //initializing 20x4 LCD lcd.clear(); //clear LCD first lcd.print("ELECTRONIFY.ORG"); // display string electronify.org } void loop() { int level = 0; for(int i = 0; i < sensors; i++) { if(digitalRead(sensorPin[i]) == HIGH) { digitalWrite(ledPin[i/2], HIGH); level = i+1; } else { digitalWrite(ledPin[i/2], LOW); } } lcd.setCursor(0,1); lcd.print("WATER LEVEL MEASURE"); lcd.setCursor(0,2); switch(level) { case 1: lcd.print("LEVEL 1"); digitalWrite(motor, HIGH); break; case 2: lcd.print("LEVEL 2"); digitalWrite(motor, HIGH); break; case 3: lcd.print("LEVEL 3 "); digitalWrite(motor, HIGH); break; case 4: lcd.print("LEVEL 4 "); digitalWrite(motor, LOW); break; case 5: lcd.print("LEVEL 5 "); digitalWrite(motor, LOW); break; case 6: lcd.print("LEVEL 6 "); digitalWrite(motor, LOW); break; case 7: lcd.print("LEVEL 7 "); digitalWrite(motor, LOW); break; case 8: lcd.print("LEVEL 8 "); digitalWrite(motor, LOW); lcd.setCursor(0,3); lcd.print("WARNING : OVERFLOW"); for(int j = 0; j< 255; j++) { analogWrite(buzzer, j); delay(10); } break; default: lcd.print("NO WATER"); digitalWrite(motor, HIGH); break; } delay(50); } WATER LEVEL MEASUREMENT USING ARDUINO UNO R3 AND WATER SENSORS (Schematic Diagram) Short Description To begin with, let's talk about the water sensor. With the abundance of water sensors in the market, we have the option of using any sensor that outputs 1 when submerged in water. Due to the conductivity of water, supplying 5 volts to the bottom of the water will cause the respective conductive pins to go high when water reaches higher levels, thus detecting the presence of water. You may also opt to utilize water sensors as depicted in the figure below, which will generate 4.3 volts when fully immersed in water, indicating a digital electronic 1. ### PYROELECTRIC PASSIVE INFRARED (PIR) SENSORS ALLOW FOR EASY INTEGRATION, CONFIGURATION AND MORE DESIGN-IN POSSIBILITIES KEMET (“KEMET” or the “Company”), a subsidiary of Yageo Corporation (“Yageo”), a leading global supplier of electronic components, continues to strengthen its solutions for industrial applications with its range of environmental PIR sensors. By utilizing the pyroelectric effect, these thin-film PZT sensors have both high sensitivity and fast response times to ensure rapid and accurate detection of gas, flame, motion, food, and organic compounds for industrial automation, lighting, power generation and distribution, among many other applications. Built with hybrid micro-electromechanical systems (MEMS) technology, these high-quality environmental sensors are packaged in a small surface-mount device (SMD) for use in portable and battery-powered detectors. Their capacity for low power consumption, low maintenance, and low sensitivity to mechanical and thermal shock allows for stable performance and a lifespan of up to 15 years, making them ideal for small, smart, or IoT (Internet of Things) devices in industrial, consumer, automotive and medical applications. Compatibility with industry-standard I2C communication enables plug-and-play connectivity to microcontrollers making these sensors easy to configure, tune, and calibrate. KEMET’s environmental PIR sensors, which use the standard semiconductor manufacturing process, are well-suited for industrial applications. These components are positioned for growth in the environmental sensor market. According to a 2020 report from 360 Market Updates*, the global environmental sensor market is expected to grow at a CAGR of 5.4 percent from 2020 to 2025 and reach USD 1550.1 million by 2025. Read more: PYROELECTRIC PASSIVE INFRARED (PIR) SENSORS ALLOW FOR EASY INTEGRATION, CONFIGURATION AND MORE DESIGN-IN POSSIBILITIES ### QBEE.IO ALLOWS YOU TO MANAGE ALL YOUR EMBEDDED LINUX -BASED IOT DEVICES FROM ONE DASHBOARD As the number of IoT devices increases, managing them all to keep online, secure, updated with the latest firmware, and remotely available, at all times, even when deployed behind firewalls and NATs, becomes quite the task. While quite a number of solution exists to some of these problems, they all usually have challenges like; the solution addressing just one or two problems or requiring technical know-how/skills (software or hardware) that could be expensive/scarce. To provide a holistic solution to this remote device management related problems, Norway-based qbee AS, launched its platform qbee.io. The platform, which as a venture is backed by Innovation Norway and Simula Innovations, is designed to help users achieve four major things including; remote access, security, automation, and device monitoring. For remote access, qbee.io allows connections over SSH but it can also map any other port such as web servers on 80/443 and  Node-Red on 1880 or VNC. Out of the box, qbee routes all ports through a VPN connection using https on port 443. Its remote access features always draw a comparison with the TeamViewer IoT agent which doesn’t have some of the other features. For Security, qbee performs actions like; check firmware libraries for CVE vulnerabilities, checks if newly updated libraries are available and make suggestions on upgrades, check which users are active and how old the passwords are (people tend to forget to remove pre-configured support accounts), rotate ssh keys, and close all incoming ports (ssh is routed through VPN). All of these actions and more are combined to ensure IoT deployments stay secure. Read more: QBEE.IO ALLOWS YOU TO MANAGE ALL YOUR EMBEDDED LINUX -BASED IOT DEVICES FROM ONE DASHBOARD ### QORVO QPF7219 WI-FI INTEGRATED FRONT END WITH EDGEBOOST FOR BROADER WI-FI 6 COVERAGE Mouser Electronics, Inc., the industry’s leading New Product Introduction (NPI) distributor with the widest selection of semiconductors and electronic components, is now stocking the QPF7219 integrated front end module (iFEM) from Qorvo®. Providing reliable, whole-home coverage when designed into Wi-Fi 6 (802.11ax) systems, the QPF7219 iFEM combines Qorvo’s advanced bulk acoustic wave (BAW) filter technology with its unique edgeBoost™ capability to almost double Wi-Fi range and triple capacity to handle more devices. The Qorvo QPF7219 Wi-Fi 6 iFEM, available from Mouser Electronics, integrates a 2.4 GHz power amplifier (PA) optimized for a 5 V supply voltage, which saves power while maintaining high linear output power. The BAW filter’s edgeBoost capability maximizes output power at channels close to the band edge, achieve excellent throughput across all Wi-Fi channels 1-11 without needing to reduce transmit power to meet FCC regulatory limits. Features 2402MHz to 2472MHz frequency range POUT=25dBm FCC restricted bandedge compliance POUT=20dBm MCS11 HE40 -43dB dynamic EVM POUT=22.5dBm MCS9 VHT40 -35dB dynamic EVM POUT=23.5dBm MCS7 HT20/40 -30dB dynamic EVM POUT=25dBm MCS0 spectral mask compliance Optimized for 5V operation 31dB Tx gain 2dB noise figure 15.5dB Rx gain and 6.5dB bypass loss The module also includes a bypassable low noise amplifier, regulator, and transmit-receive switch. The device offers 5 GHz rejection for dual-band dual-concurrent (DBDC) operation, as well as integrated die-level filtering for second and third harmonics. The QPF7219 iFEM is ideal for a range of connectivity solutions, including wireless routers, access points, residential gateways, Wi-Fi customer premises equipment, and Internet of Things (IoT) applications. For development, Mouser also stocks the QPF7219EVB-01 evaluation board. Read more: QORVO QPF7219 WI-FI INTEGRATED FRONT END WITH EDGEBOOST FOR BROADER WI-FI 6 COVERAGE ### QUICKFEATHER: FULLY OPEN SOURCE DEVELOPMENT BOARD FOR THE EOS S3 MCU WITH EFPGA Use the Power of Open Source to Tackle Your Tiny Machine Learning Applications QuickLogic, the first programmable logic company to embrace all-open-source development tools has partnered with Antmicro to create a multi-core essential evaluation tool for machine learning and IoT applications, called QuickFeather development board. The QuickFeather development board is a small form factor system for the EOS S3 Arm Cortex M4F MCU and embedded FPGA with an onboard microphone, pressure sensor, and accelerometer. One beautiful thing about this development board is that it is everything open-source!. The board itself is open hardware, designed in an open-source Kicad platform, and built around open source embedded OS, Zephyr RTOS and FreeRTOS with open FPGA tools. It’s rich combination of on-board sensors, low-power MCU and programmable logic in a feather form factor, also make it a perfect open-source hardware platform for developing tiny Machine Learning applications with Google TensorFlow Lite and SensilML’s software. Hobbyists and enthusiasts would also find the board good for ALL kinds of general-purpose MCU applications. Read more: QUICKFEATHER: FULLY OPEN SOURCE DEVELOPMENT BOARD FOR THE EOS S3 MCU WITH EFPGA ### RGB Color Detector Using TCS3200 Sensor Module This Color Detector utilizes an Arduino Uno R3 and TCS3200 color sensor module. Color identification and detection can be beneficial for food-processing units, color printer applications, paint-mixing applications, and other industrial applications such as robotics. This project is designed to identify basic colors (red, green, and blue) that are present in LEDs in a single package, such as a common cathode or common-cathode RGB LED. By adjusting the Arduino code, we have the ability to produce unique colors in addition to showcasing primary colors. The project showcases how to connect the TCS3200 sensor, Arduino Uno, and common-cathode RGB LED. Figure 1 displays the TCS3200 color sensor module (SEN0101). TCS3200 color sensor module Fig. 2 displays a close-up look at the RGB arrays at a microscopic level. The square boxes can be observed within the eye sensor on a microscopic scale. These square boxes are grids made up of the RGB matrix. Every box has three sensors inside, one for detecting the intensity of red light, another for green light, and a third for blue light. It surpasses the TCS230 color sensor module in performance. With a precise programming code, this sensor can be utilized to recognize various colors. Circuit and working Fig. 3 shows the circuit diagram of the RGB color detector using TCS3200. Microscopic view of TCS3200 chip It works off 9V power supply connected across connector CON1. However, an Arduino Uno board requires only 5V. So it has a bridge rectifier with a regulator that converts 9V to 5V logic, which can further be converted to 3.3V with the help of LM1117 voltage regulator. Circuit diagram of the RGB color detector using TCS3200 The central component of the circuit is the Arduino Uno R3 board, which features either the ATmega328 or ATmega328P microcontroller (MCU). There are 14 I/O pins and six analogue input pins, as well as 32k flash memory, a 16MHz crystal oscillator, USB connection, power jack, ICSP header, and reset button. The TCS3200 module includes eight pins, as illustrated in Figure 4. This module comprises programmable color light-to-frequency converters that integrate configurable silicon photodiodes and current-to-frequency converter on one monolithic CMOS integrated circuit. The output consists of a square wave with a 50 percent duty cycle, where the frequency is directly correlated to the brightness of light. Pin diagram of the TCS3200 color sensor module Digital inputs and outputs enable a direct connection to the MCU or other logic circuits. Output enable (OE) causes the output to enter a state of high impedance when multiple units are connected to an MCU input line. The light-to-frequency converter in TCS3200 detects light using an 8x8 array of photodiodes. There are 16 photodiodes with blue filters, another 16 with green filters, and 16 more with red filters, while the last 16 have no filters and are clear. All photodiodes of the same color are connected in parallel. Pins S2 and S3 of TCS3200 are used to select the group of photodiodes (red, green, blue and clear) that are active. The detailed pin description is shown in Tables I, II and III, respectively. Each sensor array in these three arrays is selected separately, depending on the requirement. Hence, it is known as a programmable sensor. The module can be used to sense a particular color only. It contains filters for selection purpose. There is a fourth mode with no filter. With no filter, the sensor detects white light. Construction and testing An actual-size, single-side PCB layout of the RGB color detector using TCS3200 is shown in Fig. 5 and its component layout in Fig. 6. Actual-size PCB layout of the RGB color detector using TCS3200 Component layout of the PCB The project functions easily as it involves a fundamental circuit for connecting a TCS3200 sensor. When the sensor is placed close to red color, it detects the color using photodiode arrays, displaying the RGB color intensity value and color name in the Arduino serial monitor window. Simultaneously, there is a red LED illuminated within the RGB LED. In the same way, the Arduino serial monitor displays the remaining two colors (green and blue) and the RGB LED lights up accordingly. Software Arduino programming language is used to write software. Arduino IDE software is used to program the Arduino Uno Board1. The ATmega328P on the Arduino Uno board is equipped with a pre-installed bootloader, enabling you to upload new code without the need for an external hardware programmer. Plug in Arduino board to the computer and choose the right COM port within Arduino IDE. Build the code (TCS3200.ino). Choose the appropriate board from the Tools→Board dropdown menu in Arduino IDE and upload the code. Put the software into the MCU's internal memory. The core of the system is the sketch, which performs all key functions. Arduino IDE 1.6.4 is used to compile and upload it. Download source code In this project, external header files are not required for programming. It is a simple way to detect RGB color intensities on the serial port. The author’s prototype is shown in Fig. 7. Author’s prototype Source :RGB Color Detector Using TCS3200 Sensor Module ### RFID cat door using Arduino Intro: RFID Cat Door Only the pet with the correct RFID tag can unlock this specific cat door/flap. Arduino is responsible for overseeing the process. It features a custom antenna large enough to function as a gate, enabling the animal to easily and consistently activate it. Some methods and techniques are borrowed from my previous project, the RFID cat feeder. The feeder controls access to a food bowl, while the door controls access to an entire room. The latest code can also distinguish between tags so that the system can behave differently for different users. RFID door (entering) from champenoise on Vimeo. How it works: 1. In the beginning the door is locked, cat is outside 2. Cat walks up to the gate, RF tag gets read within about 4 inches 3. Door unlocks and a light comes on. 4. Timer ensures that door stays unlocked long enough to give cat a chance to respond 5. Cat pushes open the flap and enters 6. Flap falls back, activates Hall effect sensor, and the door locks 7. Going from the inside out, an infrared proximity sensor detects the presence of an animal if within about 10 inches and unlocks the door. The majority of animals will rapidly pick up on pushing the flap when they hear the click (lock) and see the light. Ensure that soft padding is applied to the edges of both the door and the doorway to prevent the tail from getting trapped. Just a couple of bad experiences could be sufficient to discourage the cat from ever entering that place again. The electronics are displayed unenclosed, but it is recommended to enclose them once finished. This is not elaborated on in this Instructable. Step 1: Parts list F4Z9I5PGJ27ZDA0.LARGE F9W3CVTGJ289X4D.LARGE FHEHW6YGJ7MQKM5.LARGE FUUGFQEGJ28341P.LARGE - Arduino Duemilanove - 5V RF reader module (Seeed Studio 125Khz UART or equivalent. Most readers come with a small antenna. To use the custom made antenna discussed here, you need a reader that allows connecting an external antenna) - RF tag (I used these 35mm disc shaped ones) - About 86 feet of 24 gauge magnet wire (longer than the piece shown in the photograph) - Sharp GP2D12 infrared proximity sensor - Two 12V electronic cabinet locks (Nordson electronic). Solenoids, basically. - One 12V DC power supply - Two TIP120 Darlington transistors - One Hall-effect sensor - One or more magnets to activate Hall-effect sensor over a range of about 2cm - One 100 Ohm resistor - Four 2 KOhm resistors - Two pushbuttons - One LED - One hinge (one that moves easily but without much lateral movement, for precision) - One 6" x 9" piece of 1/8" thick Plexiglas and perhaps another piece of about 6" x 3"  to mount the locks - Hookup wire, including about 27" extra thin (26 AWG or thinner) - Nuts, bolts and serrated washers - Rubber isolation strip or other soft material for padding the edges of the door and door post The system comprises several 'modules' (solenoids, RF reader, and so on). One of the pictures here shows the basic plan with the modules connected to the Arduino (the electronics). In the next steps the mechanical parts and each of the modules will be discussed in detail. Step 2: Make the door The entryway includes a Plexiglas panel connected to a hinge. At the bottom, two solenoids will be positioned beside the flap on the doorframe to stop unauthorized animals from getting in. Quite straightforward. Just keep in mind a couple of important factors: Make sure the flap is placed in the middle between the two solenoids when not in use. The picture is situated inside the red area encircling the dashed line at the middle. To achieve this, it is advantageous to not have any heavy items on one side and to utilize a low-friction hinge. It is advantageous to have a hinge that has limited side-to-side movement (motion occurring within the same plane as the wall). This will help guarantee the operation of the hall-effect sensor, which is a switch activated by a magnet. I will explore this in more detail in the next step ... The door needs to be durable but also light so it can be easily pushed and to avoid injury if a tail gets caught. Round off the corners and add padding to the edges and door post to minimize tail problems. Step 3: Make an antenna The antenna is nothing more than a coil of magnet wire connected to the RF reader. Most RF readers come with an antenna, but some allow the use of an external antenna. For this project I made a square antenna of 10 x 10 inches by winding 24 gauge magnet wire 24 turns around a sawed off bucket to make it sturdy. The distance between turns has to be as small as possible. I mounted the thing on the plywood with two pieces of wood as spacers to make it stand off from the wall a bit so the cat could activate it farther from the wall. The 35mm disc tags that I use are read up to 4 inches of the plane of the coil. The RF reader and antenna are powered with the 5v from the Arduino. Even though the Arduino works fine with just the USB cable, the RF reader works better when the Arduino is plugged into the wall with the 9v power adapter. More info about coil antennas: Microchip Inc. Antenna circuit design for RFID applications (pdf) Step 4: Hook-up the RF reader The project consists of multiple 'modules' that must be linked to the Arduino and evaluated in advance. Start by establishing a connection with the RF reader. The 5v output from the Arduino can power it, while a digital port (like 2) can be employed for signal reception. I used an RDM630 that has pins for a LED that is not being used. It has a RX pin for transmitting data back to the RF reader, but I opt not to use it. Attach your antenna, acquire a tag, and use the Arduino's serial monitor to verify detection. You are now able to improve the antenna by testing out various adjustments such as adding or removing turns, trying different shapes, and so forth. Try using a 9v power source for the Arduino instead of USB, since USB didn't work for me at least. You can choose to download the file 'rfid3.pde' for testing purposes. The code requires downloading NewSoftSerial.h from this location.   Step 5: Add solenoids Hook-up the solenoids up to the Arduino as in the schematic: connect the TIP120s to digital ports 5 and 6 with 2k resistors in between. One pin goes to ground, the other goes to the solenoid, with a diode across it (make sure you get the polarity right), and to the 12v supply in the end. The other wire of the power supply is ground. Connect that to the other grounds. Just connect all grounds of all components including the Arduino together. Over here you can download code to specifically test the two solenoids Step 6: Add Hall effect sensor The Hall effect sensor's function is to ascertain whether the door is centrally located, implying that it is within a suitable range for the locks to be engaged. Additional possible options consist of rotary encoders, touch sensors, and beam break sensors. I chose a Hall effect sensor primarily because it is frictionless, can be completely covered, and I was curious about how it works. I chose not to use magnets on the door to prevent adding weight, so I put the switch on the door and the magnets in the door frame instead. I had to use a slender, very flexible wire to keep the flap from shifting because it was too stiff. The Plexiglas simply has the sensor and wire attached with tape. I possess a set of tiny magnets attached to the door frame. The sensor is 5mm away from the magnets at the closest point. The distance is roughly about 3 centimeters. Link the signal pin of the Hall sensor to pin 4, then link it to 5v through a 100 ohm resistor. Join the ground pin with the other ground pins and connect the VCC pin to a 5-volt power source. Connect a green LED and a 220 ohm resistor to digital pin 7. Download Hall_effect.pde to test this part of the system. Major Components in Project proximity sensor power supply Darlington transistors pushbuttons Step 7: Add Proximity Sensor I was only concerned with which cat comes in and any animal can leave in this system. Therefore, I only required RFID on one side. The door must be able to open for any animal that comes from the opposite direction. The IR proximity sensor functions effectively. Attach the output pin of a Sharp GP2D12 sensor to Analog port 0, connect the ground pin to the remaining ground pins, and link the vcc pin to a 5v power source. Download IR_test_analog.pde to test this part of the system Step 8: Add Two Buttons and Load Final Code Finally you can add buttons to open the locks manually (see schematic). . In the final code downloadable here, I stored the value of two tags worn by the our animals, one with and one without access. When the animal without access tries to get in, the door is locked immediately. byte goodcode[6] = {0x1C, 0, 0xFC, 0xB2, 0x90}; byte badcode[6] = {0x16, 0, 0x78, 0xE7, 0xFE}; You must locate the tag codes being used and input them into the arrays 'goodcode' and 'badcode'. In this programming language, hexadecimal values must be preceded by '0x'. Lowering the open time (adjusting the variable 'open_time' to a lower value) may be helpful if you want to avoid tagging the second cat, even though this means the cat with access will need to react faster. Enclosing the electronics is a helpful recommendation, but it will not be addressed in this guide. If your antenna's broad coverage extends into the safe zone, you might need to recalibrate the antenna and proximity sensor to avoid unintentional triggering of the RF reader from within. The cat must be detected first by the proximity sensor if it is inside and wants to leave. If that happens, it's okay because the RF reader isn't authenticated in that part of the program. Source : RFID cat door using Arduino ### Proteus Tutorial – Light Emitting Diode (LED) and Bar Graph Display How to work with Light Emitting Diode (LED) in Proteus In this post, we will be learning how to use the “Light Emitting Diode (LED)” component in Proteus simulation software. In case you have not got on through the basics of Proteus, here is the link – Proteus PCB Design and Simulation Software – Introduction. Note:- You may also read our 1st chapter on Proteus Tutorial Series – Switches and Relays in Proteus before you continue reading this chapter. Types of LEDs available in Proteus Proteus contains LEDs of different colors and types that are being used in real-time applications. LEDs are found in Proteus software under the Library category Optoelectronics. Remember to select ‘ACTIVE’ components so that the simulator provides a real-time interface during simulation. Step 1: Select component mode. Step 2: Click on Pick devices ‘P’. Step 3: Scroll down categories to find ‘Optoelectronics’ or alternatively type LED in Keyword. Select this category and it shows the available LEDs in the result. Step 4: Scroll to find the required LEDs according to the circuit. Step 5: Remember to select components with the ACTIVE property under the Library column of the search results for interactive simulation. Component Properties of LEDs The technical parameters of the LEDs like forwarding Voltage Drop and Forward Current are set to default values. One can change them according to the LED that is being used in the actual circuit in real time i.e., Voltage Drop and current which vary according to the color and size of the LED. This table shows the Specifications of 5mm LEDs: S.No. Color of LED Forward Voltage Drop(V) Forward Current (mA)   1. Green 2.0 25 2. Red 2.0 30 3. Yellow 2.1 30 4. Blue 3.5 30 These are typical Specifications of LEDs given by a manufacturer. These may vary slightly depending on the manufacturer and test conditions. To change the properties of the LEDs: Step 1: Place the component in the workspace. Step 2: Right-Click on the component and select Edit Properties or double-click on Component.   Step 3: Change the Properties as per type of LED. Model Type parameter is chosen according to the type of input given to the LED. For example, if the LED is driven by a Digital IC or a microcontroller it can be set to Digital. If the LED is driven by an OP-Amp or a potentiometer it can be set to Analog. For self Flashing LEDs there is an option to enable or disable self-flashing in Edit Properties. Using LEDs in Circuits LEDs must be powered with voltages under specified limits, so that safe current flows through it without damaging. It is better to use a series resistance to ensure it is under Safe Operating Area(SOA).Formula to calculate series resistance is Rs = (Vsource–Voltage drop of LED)/(Maximum Forward Current) Applying this formula to LED of 2 Volts drop and 20mA forward current for a source voltage of 5Volts, gives series resistance of 150 Ω. Rs = (5-2)/0.02 = 150 Ω Step 1:Choose necessary parts such as Battery, LED and resistor. If you cannot find the exact resistor value needed, select a different value and adjust its resistance in the Edit Properties Tab. Resistor wattage is not a concern during simulation unless PCB design is being planned. In hardware implementations, the selection should be based on LED type and input voltage. Step 2: Right-Click on the component and select Edit Properties or double-click on Component. Step 3: Place the components and connect as per the circuit diagram and run simulation. Bar Graph Display and its Application Bar graph displays are Rectangular shaped LEDs arranged one above the other in standard package styles. This type of displays can be used to indicate the level of a signal (Temperature, Noise etc..,) or current status of a process that involves multiple steps etc.., Bar graph displays are found in Proteus software under Library category Optoelectronics. Step 1: Select component mode Step 2: Click on Pick devices ‘P’. Step 3: Type Bar graph in the Keyword textbox and select the required display.   Step 4: Also select 10 Way common element DIP switch under switches category. Step 5: Connect the circuit as per the circuit diagram and run the simulation   So that’s all about this chapter – which teaches you how to work with LEDs and other displays in Proteus. You may go to this category on Proteus Tutorial Series – to read all other tutorials and articles on Proteus! Source: Proteus Tutorial – Light Emitting Diode (LED) and Bar Graph Display ### ESP32/ESP8266: Seamless Data Integration with MySQL and PHP This project involves creating a device with either an ESP32 or ESP8266 that can connect with a server from a distance. The gadget will function as an HTTP client by sending POST requests to a PHP script. The aim of these requests is to transmit sensor data (like temperature or humidity readings) to the PHP script. The next step is for the code to add this sensor information into a MySQL database, so the data can be saved in a table for future access or examination. In general, this results in a basic IoT setup where a WiFi-equipped microcontroller records sensor data and sends it to a database stored on a distant web server. Transform Your IoT Project into a Data-Driven Powerhouse This project requires developing a gadget with either an ESP32 or ESP8266 that is able to establish a connection with a remote server. The device will act as an HTTP client by submitting POST requests to a PHP script. The purpose of these requests is to send sensor data (such as temperature or humidity readings) to the PHP script. The succeeding action is for the code to insert this sensor data into a MySQL database, enabling the information to be stored in a table for later viewing or analysis. Usually, this leads to a simple IoT configuration where a microcontroller with WiFi capabilities collects data from sensors and transmits it to a database housed on a remote web server. Harness the Synergy of Hardware and Software This project uses the ESP32 or ESP8266 microcontroller to gather sensor data and send it to a web server for storage. Next, the PHP script processes the data and adds it to a MySQL database to ensure safe storage. Unleash the Power of Data Visualization An intricately designed webpage acts as the central location for visualizing data, presenting sensor data, timestamps, and other important information clearly and concisely. View this webpage on any device, anywhere in the world, to stay updated on how your IoT project is performing. Embrace Versatility and Adaptability The code given can be easily adjusted to work with various sensors or multiple ESP32/ESP8266 boards, which makes this project very flexible and customizable to suit your particular requirements. Embark on Your IoT Journey To embark on this exciting journey into the world of IoT data integration, you'll need the following tools and technologies: ESP32 or ESP8266 microcontroller and Arduino IDE Hosting server and domain name PHP script for data insertion and web page development MySQL database for data storage Get ready to transform your IoT project into a data-driven powerhouse with this comprehensive guide! 2. Preparing Your MySQL Database After signing up for web hosting and buying a domain name, you must log into your hosting control panel, such as cPanel, to start configuring the database system. Sign in to your hosting dashboard and proceed with the following actions: Set up the MySQL database for storing the sensor data. Create a database username and password to be utilized by the PHP script for connecting to the database. Create the layout of the SQL table within the new database for inputting sensor readings as records. This will outline the table columns such as sensor category, time of record, numerical data, etc. By carrying out these initial database setup tasks via the hosting dashboard, you will establish the necessary backend elements for receiving data uploads from the IoT device and storing them in an orderly fashion for later retrieval and analysis. Creating a database and user 1. Type “database” in the search bar and select “MySQL Database Wizard”. 2. Enter your desired Database name. In my case, the database name is esp_data. Then, press the “Next Step” button: 3. Indicate the username that will be utilized for database access. Additionally, establish a strong password for that username account. Make sure to remember (or store safely) the username and password you create here, as you will have to input them into the PHP script later for it to authenticate and access the database. To accurately input the sensor data from the IoT device, the script must have the necessary login information. It is crucial to remember the username and password during the database setup to successfully finish the project. That’s it! Your new database and user were created successfully. Now, save all your details because you’ll need them later: Database name: example_esp_data Username: example_esp_board Password: your password Creating a SQL table After creating your database and user, go back to cPanel dashboard and search for “phpMyAdmin”. In the left sidebar, select your database name example_esp_data and open the “SQL” tab. Copy the SQL query in the following snippet: CREATE TABLE SensorData ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, sensor VARCHAR(30) NOT NULL, location VARCHAR(30) NOT NULL, value1 VARCHAR(10), value2 VARCHAR(10), value3 VARCHAR(10), reading_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) Paste it in the SQL query field (highlighted with a red rectangle) and press the “Go” button to create your table: After that, you should see your newly created table called SensorData in the example_esp_data database as shown in the figure below: 3. PHP Script HTTP POST – Insert Data in MySQL Database In this part of the project, we will develop a PHP script that will serve two key functions: It will listen for and receive HTTP POST requests containing sensor data sent from the ESP32/ESP8266 device. It will insert the sensor readings from these requests into the MySQL database that was previously configured. To set up the PHP file, log into your hosting control panel (such as cPanel) and find the file manager tool. This will allow you to upload the PHP script file to your web server. Once in place, the script can then perform the tasks of receiving data uploads from the IoT device and saving them to the database. By creating this receiving/inserting PHP script, we link together the IoT device portion of the project with the database backend, completing the client-server architecture needed to monitor sensor values remotely through HTTP requests and store the results in the cloud. Then, select the public_html option and press the “+ File” button to create a new .php file. Create a new file in /public_html with this exact name and extension: post-esp-data.php Edit the newly created file (post-esp-data.php) and copy the following snippet: connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "INSERT INTO SensorData (sensor, location, value1, value2, value3) VALUES ('" . $sensor . "', '" . $location . "', '" . $value1 . "', '" . $value2 . "', '" . $value3 . "')"; if ($conn->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . "
" . $conn->error; } $conn->close(); } else { echo "Wrong API Key provided."; } } else { echo "No data posted with HTTP POST."; } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } Before saving the file, you need to modify the $dbname, $username and $password variables with your unique details: // Your Database name $dbname = "example_esp_data"; // Your Database user $username = "example_esp_board"; // Your Database user password $password = "YOUR_USER_PASSWORD"; After adding the database name, username and password, save the file and continue with this tutorial. If you try to access your domain name in the next URL path, you’ll see the following: https://example-domain.com/post-esp-data.php Source: ESP32/ESP8266: Seamless Data Integration with MySQL and PHP ### Automatic Irrigation System (Arduino) With Usb Type DC Submersible Water Pump This mini project is involved to use Arduino to control submersible watre pump when soil reach below or above predefined moisture level. How it works ❓ 1. Soil moisture sensor is reading analog signal which transmit to Arduino. 2. Arduino control submersible water pump ON or OFF. Water pump operates when moisture level reach predefined value. Also, the water pump shall be stopped when reach predefined value. 3. Ultrasonic sensor is used to monitor predefined value of low water level. Warning sound is provided by buzzer when low water level detected. User is required to refill water to water tank manually. 4. The submersible water pump cannot be operated when low water level even if moisture level reach below or above predefined moisture value. Step 1: Hardware/PCB List Hardware -> Arduino UNO x 1 no. -> 5V soil moisture sensor c/w digital and analog output x 1 no. -> 5V Ultrasonic sensor (HC-SR04) x 1 no. -> 5V USB type submersible water pump x 1 no. -> 5V buzzer x 1 no. -> bunch of rainbow wire with connector (male - male, male - female) -> 9V battery x 1 no. -> 1.2V NiMh AA rechargeable battery x 8 nos. (8 x 1.2V = 9.6V) -> 5000mAh portable battery charger x 1 no. -> 280mm (L) x 280mm (W) x 130mm (H) weatherproof type enclosure x 1 no. PCB -> 5V voltage regulator circuit x 1 no. -> USB interfacing circuit x 1 no. Step 2: Functions of Hardware/PCB 1-> Arduino UNO It used to keep reading analog signal from soil moisture sensor. In addition, It controls submersible water pump ON/OFF when reach predefined moisture level. Also, it monitors low water level. 2-> 5V soil moisture sensor This sensor can provide digital signal or analog signal to Arduino. 3-> 5V Ultrasonic sensor This sensor keep monitoring water level. Signal shall be sent to Arduino when reach predefined value. 4-> 5V USB type submersible water pump It is controlled by Arduino which can turn ON/OFF submersible water pump automatically. 5-> 5V buzzer x 1 no. Sound to warn low water level occur. 6-> Bunch of rainbow wire with connector Interfacing necessary component and circuits 7-> 9V battery Independent power supply for 5V regulator. 8-> 1.2V NiMh AA rechargeable battery Independent power supply for Arduino. 9-> 5000mAh portable battery charger Independent power supply for 5V submersible water pump. 10-> Weatherproof type enclosure For arrangement all necessary component and provide weatherproof feature. 11-> 5V voltage regulator circuit (PCB) Power supply of soil moisture sensor is provided by this voltage regulator. 12-> USB interfacing circuit (PCB) Provide interfacing to 5000mAh portable battery charger, 5V submersible water pump and signal from Arduino. Step 3: Automatic Irrigation System Control Logic Initially, Arduino analyzes data from ultrasonic sensor to check if water level is over 20cm. An alarm will sound if the water level in the tank drops too low. The programming has caused the submersible water pump to be unusable. Furthermore, Arduino checks whether the moisture level is at or above 700 when the water level decreases below 20cm. In this scenario, Arduino will transmit a signal to the USB interface circuit to turn on the submersible water pump. If not, it confirms that the humidity valve is under 500. The USB interface circuit receives a signal from the Arduino in order to turn off the water pump. According to the supplier's recommendation, the water pump will stop working or get damaged if it operates without water. As a result, a water level sensor is installed to stop the pump from functioning if the moisture level exceeds or falls below the specified limit. Step 4: Schematic Diagram of 5V Voltage Regulator Circuit This 5V voltage regulator circuit is power from 9V battery and output 5V for soil moisture sensor. Necessary component show as below -> 7805 x 1 no. -> 2 ports power connector x 2 nos. (1 for INPUT & 1 for OUTPUT) -> 330nF ceramic capacitor x 1 no. -> 110nF ceramic capacitor x 1 no. -> 5mm LED x 1 no. (visual inform user output is available) -> 470 Ohm resistor x 1 no. The schematic drawn by EasyEDA. In addition, this program can generate PCB base on schematic. It provides autoroute feature for you. However, you can route the track manually too. Step 5: Schematic Diagram for USB Interfacing Circuit This USB interfacing circuit is used for provide connection for USB and 2 ports power connectors. Necessary component show as below -> TIP120 transistor x 1 no. -> 2 ports power connector x 1 no. -> 10k resistor x 1 no. -> 5mm LED x 1 no. (visual inform user signal is ON or OFF status) -> 1N4007 diode x 1 no. -> 90 degree USB type A x 1 no. -> 90 degree USB type B x 1 no. The 5000mAh power bank is connected to USB Type B, while the 5V DC water pump is connected to USB Type A. To monitor the signal from the Arduino, attach the power connector of the two ports to an Arduino PIN. Arduino generates a HIGH signal when it senses dry soil. On the other hand, a LOW signal will be generated once moisture reaches a specific level. The transistor is designed to act as a switch for controlling the circuit's on and off state. The water pump is activated by a HIGH signal but deactivated by a LOW signal from the Arduino. Just like I mentioned in the previous schematic, this drawing was also created using EasyEDA. Step 6: Wiring Diagram This diagram demonstrates the wiring of the automatic irrigation system. Separate power supplies are required because the Arduino's 5V output cannot support both the ultrasonic sensor and soil moisture sensor at the same time. Nevertheless, the water pump also operates on its own separate power supply. The nameplate of the water pump shows a power consumption of 1.5W is required. P=I x V 1.5W = I x 5V I = 0.3A or 300mA According to Arduino specification, maximum dc current per I/O pin is 40mA. Hence, it is good to use external power supply rather than Arduino 5V output for supplying voltage to equipment such as fan, water pump and so on. Step 7: Programming and Upload to Arduino The coding is carried out using Arduino IDE software version 1.8.13. You can choose to get this IDE directly from the Arduino website. Programming for the Arduino board is done in the C language. Once completed, the program can be compiled. Please be informed that the program will not be able to be uploaded if any errors are found during compliance checks. Once you have pinpointed the errors, you are able to upload the program to Arduino. Step 8: Conclusion The system operates properly during testing and commissioning. I am satisfied with the result since it operated as intended. However, I was pondering over whether to utilize AC or DC as the power supply. I ultimately chose a DC power supply since my AC outlets are mostly occupied by other electronic devices. Yet, I prefer to keep the AC socket away from any water source. Hence, the system makes use of a rechargeable battery. Moreover, the system enhances its mobility by using battery-powered resources. Feel free to leave a comment if you have any questions or ideas. I appreciate your gratitude Source: Automatic Irrigation System (Arduino) With Usb Type DC Submersible Water Pump ### Arduino Spectrum: Building a DIY Spectrophotometer The environment shows a range of light colors, each moving at its own wavelength like a symphony. The Spectrophotometer Project based on Arduino aids in revealing the hidden language of light. This project provides a captivating investigation of the field of spectroscopy. It allows the construction of an inexpensive and educational scientific tool using the user-friendly Arduino platform. The goal of this project is to clarify spectrophotometry. Spectrophotometers are significant in various scientific fields including biology, chemistry, environmental monitoring, and material characterization. Their core principle is based on a fundamental property of matter: the interaction of light with specific substances. Certain materials absorb certain wavelengths of light, while others permit them to pass. A spectrophotometer reveals the unique spectral fingerprint of a material by measuring light intensity before and after interacting with a sample. The Arduino microcontroller board plays a crucial role in this project. This user-friendly platform, renowned for its simplicity and extensive online community, grants students, enthusiasts, and even amateur scientists access to complex scientific tools. Typically, a few essential parts are involved: an LED serving as the light source emitting different wavelengths based on its color; a diffraction grating that divides the light into separate wavelengths to produce a spectrum resembling a rainbow; a photodiode or phototransistor that measures the intensity of light at various wavelengths; and an Arduino that interprets the output from the light detector, transforming it into digital information for analysis. The Arduino's flexibility permits different levels of complexity and variations in projects. A simple model could use just one LED to gauge light intensity at a specific wavelength, either through transmission or absorption, offering insight into the principles of how light interacts with matter. An LED array or adjustable light source could be integrated into a multi-wavelength model, along with a stepper motor to scan a broader range of wavelengths for more detailed spectral analysis. Projects involving data visualization and analysis can showcase gathered data on a computer or small screen, allowing for real-time viewing of the spectrum. Advanced tasks may utilize data analysis methods to identify unfamiliar substances using their spectral signatures. Constructing a spectrophotometer based on Arduino offers a valuable learning opportunity that enhances comprehension of light properties, matter interactions, and the concept of wavelength. Attendees will also acquire practical knowledge of electronic parts, circuit creation, and microcontroller connection as they study fundamental programming ideas and their relevance to scientific data gathering. The capacity to measure and analyze spectral data opens up numerous scientific inquiries, promoting problem-solving and experimentation. Other than laboratories, possible uses include monitoring the environment by analyzing the absorption of certain water pollutants, serving as a teaching aid in classrooms for hands-on introduction to spectroscopy, and aiding citizen science projects by collecting crowdsourced data on environmental parameters after appropriate calibration. Recognizing its constraints, although Arduino is a good place to begin, professional spectrophotometers excel in accuracy and precision. The range of wavelengths available is reliant on the light source and detector, which could result in important data being overlooked. Calibration using reference materials is crucial for obtaining meaningful results, as it can be difficult to achieve the same level of accuracy as industrial instruments. ITo sum up, the Arduino-Based Spectrophotometer Project combines cost efficiency, ease of access, and scientific exploration in a clever way. It allows exploring the fascination of interaction between light and matter. While it doesn't replace expensive professional tools, it serves as a strong educational tool that encourages scientific curiosity and deeper global comprehension. This project offers a special opportunity for students, hobbyists, and aspiring scientists to discover concealed rainbows. Design and Construction: A more detailed description of how to design and build the different parts of the spectrophotometer might be presented. This comprises necessary components, wiring diagrams, 3D printing schematics, programming snippets, and more. Calibration Process: Precise calibration is crucial for ensuring accuracy. The calibration process could involve providing information on known reference substances. Topics such as calibration curve fitting and error analysis could be addressed. Sample Applications: Offering practical instances of how the spectrophotometer could be utilized would help make it more tangible. Description could be given about activities such as testing water quality, analyzing food/chemicals, and identifying materials. Upgrades and Improvements: Improving the design over time through upgrades such as expanding wavelength range, boosting sensitivity, enhancing portability, or improving data processing could encourage continual learning. Experimental Techniques: Receiving instructions on conducting spectroscopy trials, getting samples ready, gathering reliable data, and interpreting outcomes would enhance lab competencies. Troubleshooting Tips: Common problems encountered and their solutions should be shared to help others through potential issues. Community Engagement: Highlighting how people can share their builds, data and findings online would foster collaboration and peer learning. Career Connections: Relating spectroscopy and DIY lab skills to educational pathways and careers in STEM fields could provide motivation and inspiration. Open-source Approach: Encouraging an open-source ethos where designs, code and knowledge are publicly shared promotes learning on a larger scale. Light Source Options: Common choices include LEDs of different colors, broadband white LEDs, UV/visible/IR LEDs. Considerations for each include wavelength range, output intensity, cost. Optical Components: A diffraction grating is the most common prism, but tunable filters or monochromators can also be used. Lenses and holders help collimate/focus light. Detectors: Photodiodes, phototransistors, LDRs respond to different wavelengths. Factors include sensitivity, response speed, output compatibility with ADC. Signal Processing: A transimpedance amplifier boosts detector output. Filters reduce noise. ADC resolution affects precision. 12-bit ADCs work well for most projects. Enclosure Design: 3D printed or laser cut enclosures help package components. Include sample and detector chambers with light-tight openings. Microcontroller Code: Arduino makes acquisition straightforward with Phototransistor/Photodiode libraries. Consider sampling rates, averaging, calibration curves in code design. User Interface: Add LCDs for menu/data display. Use sliders, buttons for user input. Log data to SD cards for analysis on computers. Calibration: Use known absorbing/transmitting samples to generate calibration curves relating absorption/transmission to concentration. Applications: Test pH, dissolved oxygen, turbidity of water. Analyze food dyes, chemicals. ID plastics, minerals. Soil nitrogen analysis for farmers. Follow this link for complete project: Arduino Spectrum: Building a DIY Spectrophotometer ### Arduino Projects: Audio VU Meter Displayed is an audio meter based on Arduino that utilizes a liquid crystal display (LCD). A VU meter, also known as a standard volume indicator (SVI), is a tool that shows the signal level in audio equipment. This project involves displaying the intensity of left and right audio signals as bars on a 16×2 LCD screen using an Arduino UNO board. The Arduino UNO board's analogue input pins are utilized in this circuit to measure audio-signal levels. The Arduino UNO board has analogue input pins A2 and A4 where audio-signal inputs can be connected. These may come in the form of sound from a microphone amplified, or as direct output from a music player. Arduino based audio meter circuit Arduino based audio meter circuit Audio signals at pins A2 and A4 are processed by ATmega328 microcontroller (MCU) on Arduino UNO board and, after comparing the signals, calculations are done. Finally, corresponding values are provided by ATmega328 to a 16×2 LCD for displaying audio intensity bars. The Arduino based audio meter, as shown in Fig. 1, is built around Arduino UNO board, 16×2 LCD and 10-kilo-ohm potentiometer (or potmeter). Arduino UNO board Arduino UNO is a prototyping platform for electronics that is open source and relies on user-friendly hardware and software. The Arduino UNO board utilizes the ATmega328 microcontroller. It contains 14 I/O pins, with six capable of serving as PWM outputs, six analog inputs, a 16MHz ceramic resonator, USB connection, power jack, reset button, and an ICSP header. It includes all the necessary components to assist the MCU; just plug it into a computer via a USB cord, or power it up with an AC-to-DC adapter or a battery to get going. The Arduino UNO board's pins 11 and 12 are linked to the LCD's EN and RS pins, and pins 2 to 5 are connected to the 16x2 LCD's data pins D7, D6, D5, and D4. LCD 16×2 The JHD162A LCD is a module that utilizes a 4-bit interface to show the bars that represent the level of the input signal. This circuit is only utilizing four of the data pins on the LCD module. A 10-kilo-ohm potentiometer is utilized to adjust the contrast of the LCD screen. Author prototype of the Arduino based audiometer: Left and right bars displayed on the LCD Analog input pins A4 and A2 of Arduino UNO board receive analog audio signals for left and right channels. The ATmega328 MCU on the Arduino UNO board processes the signals and then transmits data to the LCD screen to show the signal level bars after conducting comparisons. The height of the bars will vary depending on the voltage of the audio input signal at pins A2 and A4 of the Arduino UNO board, as illustrated in Figure 2. The LCD shows L for the left channel and R for the right channel. It is important to connect pins A2 and A4 on the Arduino UNO board with caution to ensure the circuit receives the correct audio input channel. Custom characters are generated for the 16×2 LCD screen in order to show bars, as discussed in the programming section. The potentiometer is utilized to adjust the brightness of the screen and can be changed based on need. Software program The program for this circuit performs the following functions: 1. Initialising the circuit and LCD 2. Displaying the welcome message on the LCD 3. Generating custom characters 4. Performing various comparisons with input signal voltage at analog input pins 5. Displaying bars and changing their respective heights on the LCD according to the input signals The program uses special characters for bar-height display on both rows of the LCD using arrays p3, p4, p5, p6 and p7, and arrays L[8] and R[8] for displaying letters L and R on the 16×2 LCD’s starting columns of both rows, respectively. Similarly, array K[8] is used for displaying special characters at the end of both rows, and LEEG[8] is used to display special characters for bar shapes. LiquidCrystal lcd(12, 11, 5, 4, 3, 2) function is used for LCD configuration. Download source code: click here void setup()function is used to configure the pins of ATmega328 MCU on Arduino UNO board. Serial.begin(9600) function is used to configure for serial communication with Arduino board at a baud rate of 9600. lcd.begin(16, 2) function is used to indicate the size of the LCD. lcd.createChar(1, p3) function is used to define custom characters for further calling in the program by number only. LCD.print(“VU METER”) function is used to display the VU meter as a welcome message. void loop() function is used to perform the task for infinite time. analogRead(inputPin) function is used for reading the analogue-input value. Simple calculations are performed to get the values for displaying the bar heights as per audio-input signals. Construction and testing A USB A-B cable is used to upload the compiled sketch (software) from the PC to the MCU through Arduino IDE. Read More Detail:Arduino Projects: Audio VU Meter ### AFFORDABLE GROUND-PENETRATING RADAR Although radar is typically associated with scanning the sky, it is also used for underground purposes. Ground-penetrating radar (GPR) is utilized to send signals beneath the surface and analyze their return to determine the presence of buried objects, similar to locating or identifying distant aircraft by detecting radar echoes. This technology can be constructed using some readily available materials at a relatively low price. This project was created by [Mirel] using an Arduino Mega 2560 and antipodal Vivaldi antennas, which are a specific type of directional antenna. All items are placed on a compact wagon that is easily movable on the ground. A radar is activated by a switch connected to the wheels at set intervals as the wheels turn, emitting a signal and detecting reflections at various points. A range of 323 MHz to 910 MHz is used by it, and it shows a small visualization on an LCD screen connected to the Arduino. Using this instrument enables you to observe varying densities and depths of materials beneath the surface. This can prove to be extremely useful when commencing a substantial excavation project, identifying rock layers or underground utilities prior to digging. [Mirel] provided all the hardware and software as open-source for this project, so if you want to explore a different approach to GPR, check out this project which includes extensive technical discussions on its operation. Source: AFFORDABLE GROUND-PENETRATING RADAR ### Interfacing Flame Sensor with Arduino to Build a Fire Alarm System This tutorial discusses how to connect a Flame Sensor to an Arduino and create a Fire Alarm System using the same components. The flame sensor module utilizes a photodiode for light detection and an op-amp to regulate sensitivity. It is utilized for fire detection and gives a STRONG signal when detecting a fire. Arduino interprets the signal, then activates the buzzer and LED to send an alert. The flame sensor utilized in this system is an infrared flame sensor. Flame Sensor A flame detector is a sensor that is created to identify and react to the existence of a flame or fire. Reactions to a identified fire vary depending on the setup, but may involve setting off an alarm, shutting off a fuel line (like propane or natural gas), and starting a fire-fighting system. T A flame detector is a device made to sense and react to the existence of a flame or fire. Different flame detection methods elicit various responses based on the setup, including triggering an alarm, shutting off a fuel line like propane or natural gas, and initiating a fire suppression system. Some examples include: Ultraviolet detector, near-infrared array detector, infrared (IR) detector, Infrared thermal cameras, UV/IR detector etc. As fire burns, it gives off a minimal amount of infrared light, which will be detected by the Photodiode (IR receiver) on the sensor module. Next, we utilize an Op-Amp to monitor any fluctuations in voltage at the IR Receiver, so that the output pin (DO) will go to 0V(LOW) if there is a fire detected, and will stay at 5V(HIGH) if there is no fire present. This project involves the utilization of an infrared flame sensor. The YG1006 sensor utilized in this device is a NPN silicon phototransistor known for its high speed and sensitivity. It is capable of sensing infrared light between 700nm and 1000nm and has a detection angle of around 60°. The flame sensor module includes an IR receiver (photodiode), resistor, capacitor, potentiometer, and LM393 comparator all in one integrated circuit. The sensitivity can be changed by adjusting the potentiometer located on the circuit board. The operational voltage ranges from 3.3v to 5v DC, delivering a digital output. A high logic level on the output indicates the existence of a flame or fire. An absence of flame or fire is indicated by a logic low on the output. The following is the Pin Description for the Flame Sensor Module: Pin Description Vcc 3.3 – 5V power supply GND Ground Dout Digital output Applications of flame sensors Hydrogen stations Combustion monitors for burners Oil and gas pipelines Automotive manufacturing facilities Nuclear facilities Aircraft hangars Turbine enclosures Components Required Arduino Uno (any Arduino board can be used) Flame sensor LED Buzzer Resistor Jumper wires Circuit Diagram Working of Flame Sensor with Arduino Arduino Uno is a microcontroller board that is open source and relies on the ATmega328p microcontroller. The Arduino Uno is equipped with 14 digital pins (including 6 PWM outputs), 6 analog inputs, voltage regulators, and has 32KB flash memory, 2KB SRAM, and 1KB EEPROM. It functions at a clock speed of 16MHz. Arduino Uno can communicate with other devices using Serial, I2C, and SPI communication protocols. Below is a description of Arduino Uno's technical specifications. Microcontroller ATmega328p Operating voltage 5V Input Voltage 7-12V (recommended) Digital I/O pins 14 Analog pins 6 Flash memory 32KB SRAM 2KB EEPROM 1KB Clock speed 16MHz The flame sensor identifies fire or flame by detecting the Infrared (IR) wavelength emitted by the flame. It produces a logic 1 output when detecting flame, otherwise it produces a logic 0 output. Arduino Uno monitors the voltage on the sensor's output pin to trigger actions like turning on the buzzer and LED, and sending an alert. Also, check our other fire alarm projects: Fire Alarm using Thermistor Fire Alarm System using AVR Microcontroller Arduino Based Fire Fighting Robot Code explanation The full Arduino code for this project can be found at the conclusion of this article. The code has been divided into small, meaningful sections and elaborated on. In this section of the code, we will set up pins for the Flame sensor, LED, and buzzer that are linked to the Arduino. The flame sensor is linked to Arduino's digital pin 4. The buzzer is attached to digital pin 8 on the Arduino. The LED is attached to Arduino's digital pin 7. The digital value obtained from the flame sensor is stored in the variable "flame_detected". With this value, we can identify if there is a flame present. int buzzer = 8 ; int LED = 7 ; int flame_sensor = 4 ; int flame_detected ; In this part of the code, we are going to set the status of digital pins of Arduino and configure Baud rate for Serial communication with PC for displaying status of flame detection circuit. void setup() { Serial.begin(9600) ; pinMode(buzzer, OUTPUT) ; pinMode(LED, OUTPUT) ; pinMode(flame_sensor, INPUT) ; } This line of code reads the digital output from flame sensor and stores it in the variable “flame_detected”. flame_detected = digitalRead(flame_sensor) ; Based on the value stored in “flame_detected”, we have to turn on the buzzer and LED. In this part of the code, we compare the value stored in “flame_detected” with 0 or 1. If its equal to 1, it indicates that flame has been detected. We have to turn on buzzer and LED and then display an alert message in Serial monitor of Arduino IDE. If its equal to 0, then it indicates that no flame has been detected so we have to turn off LED and buzzer. This process is repeated every second to identify the presence of fire or flame. if (flame_detected == 1) { Serial.println("Flame detected...! take action immediately."); digitalWrite(buzzer, HIGH); digitalWrite(LED, HIGH); delay(200); digitalWrite(LED, LOW); delay(200); } else { Serial.println("No flame detected. stay cool"); digitalWrite(buzzer, LOW); digitalWrite(LED, LOW); } delay(1000); We have built a fire fighting robot based on this concept, which automatically detect the fire and pump out the water to put down the fire. Check the complete code and demo Video below. Read More Information..... Interfacing Flame Sensor with Arduino to Build a Fire Alarm System ### Wireless Weather Monitoring: Arduino NRF-Based System Hello tech fans! We're thrilled to present our newest project created to help in a range of environments such as households, workplaces, and beyond. Introducing our weather monitoring system that utilizes Arduino as the main controller to carry out commands. This system accurately monitors ambient temperature and humidity levels. Our weather monitoring station uses an NRF transceiver to send and receive data efficiently. This weather station, which is based on Arduino, is especially handy for keeping track of temperature in remote areas that are hard to reach or difficult to stay in. For example, consider tracking temperature and humidity levels in a mountainous area; this system can be highly advantageous in these situations. Introduction The Arduino weather monitoring system is a simple project using Arduino that allows for tracking temperature and humidity using just one sensor. The DHT11 sensor, selected for its ability to measure both temperature and humidity, is employed in this configuration. Moreover, the Arduino Uno assists in processing and exhibiting the collected data on the screen. The DHT11 sensor contains elements specifically designed for detecting temperature and humidity. The project includes two separate systems: one for transmitting and one for receiving, both featuring NRF modules for communication. The NRF module was chosen for communication in this setup because of its strong data transmission capabilities. The DHT11 sensor in the transmitter section sends its output to the transmitter microcontroller, which then relays the data to the receiver using the NRF transmitter. Afterwards, the NRF receiver gets the same information and passes it on to the Arduino microcontroller located at the receiver's side. Ultimately, the data is shown on the display by the Arduino in the weather station. Construction of weather monitoring system Components required Utilize the following components for this project: - Arduino Uno - DHT11 Sensor - NRF Module - 16x2 LCD Display - Jumper Wires To put together the Transmitter configuration, connect the DHT11 sensor and NRF module to the Arduino following the circuit diagram provided. Afterwards, transfer the code to the identical Arduino device. Connect the LCD and NRF module to the Arduino based on the given weather monitoring circuit diagram for the Receiver setup. Next, upload the code to the specific Arduino for the receiver configuration. Weather monitoring station circuit diagram Weather monitoring station Arduino Code Transmitter Code #include "DHT.h" #include #include "RF24.h" #include #define DHTPIN 2 #define DHTTYPE DHT11 RF24 radio (9, 10); // CE, CSN const byte address[6] = "00001"; //const int led_pin = 13; struct package { float temperature ; float humidity ; }; typedef struct package Package; Package data; DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); // pinMode(led_pin, OUTPUT); dht.begin(); radio.begin(); //Starting the Wireless communication radio.openWritingPipe(address); //Setting the address where we will send the data radio.setPALevel(RF24_PA_MIN); //You can set it as minimum or maximum depending on the distance between the transmitter and receiver. radio.stopListening(); } void loop() { // digitalWrite(led_pin, HIGH); // Flash a light to show transmitting readSensor(); Serial.print("HUmidity "); Serial.print(data.humidity); Serial.print(" Temperature "); Serial.println(data.temperature); radio.write(&data, sizeof(data)); // digitalWrite(led_pin, LOW); delay(1000); } void readSensor() { data.humidity = dht.readHumidity(); data.temperature = dht.readTemperature(); } Receiver code #include #include #include RF24 radio(9, 10); // CE, CSN const byte address[6] = "00001"; struct package { float temperature ; float humidity ; }; typedef struct package Package; Package data; void setup() { Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.setPALevel(RF24_PA_MIN); radio.startListening(); } void loop() { if (radio.available()) { // char text[32] = ""; radio.read(&data, sizeof(data)); Serial.print("Humidity "); Serial.print(data.humidity); Serial.print(" Temperature "); Serial.println(data.temperature); } } Weather monitoring station working The DHT11 sensor of the weather monitoring system is created for measuring temperature and humidity with its integrated sensors. This sensor system includes two sensors, with one specifically for measuring temperature and the other exclusively for measuring humidity. The DHT11 features an IC that multiplexes data to link the sensor and Arduino for transmitting information. After getting the data, the Arduino performs certain tasks using the given code and the sensor library. In order to maintain precise operation, the Arduino adjusts the sensor with the code that has been uploaded. This procedure is essential for developing an IoT weather station. After distinguishing between the two separate values, the Arduino sends this data to the NRF module in the transmitter using the SPI protocol. The usage of the MOSI, MISO, SCK, and RST pins from both the Arduino and the NRF module is part of the SPI protocol. Constructing an Arduino weather station requires careful consideration of these fine points, but adhering to the given instructions enables its assembly. In addition, the NRF module on the sender's side will create a link with the NRF module on the receiver's side by utilizing predetermined addresses in both NRF modules to ensure smooth communication. ### Top 10 Best Simulators for Arduino In this article, I will discuss the best 10 Arduino simulators that are currently on the market. The most popular software for simulating circuits and embedded systems with the Arduino microcontroller development board. In previous writings, I discussed the simulation of Arduino-based circuits using Proteus software for simulating purposes. In this article, I will discuss extra useful software for simulating Arduino-driven embedded systems. After reading this post you will learn the importance of the simulation and about the commonly used software for simulating Arduino based systems. So sit back, keep reading and enjoy learning.[otw_is sidebar=otw-sidebar-2] What is Simulation? Prior to discussing simulation software, it is crucial to have a grasp of what simulation actually means. Generally speaking, simulation entails replicating the circuit's performance. In simple terms, simulation is the process of analyzing the behavior of a circuit through software instead of constructing it physically. Simulation Models: Simulation models are critical in simulation discussions as electronic components are to electrical circuits; they serve as the foundational building blocks. Each component used in the circuit simulation must be linked to a properly designed simulation model. The electronic component's compliance is represented in the simulation model, showcasing its behavior. To simulate a component in your circuit, you need to ensure its simulation model is included in the software's library. Most software programs come with built-in simulation models for frequently used components.[otw_is sidebar=otw-sidebar-3] Advantages of Simulation: Simulating the circuit prior to physically developing the system's hardware is always advantageous. By running simulations, you can easily identify any bugs in the code or faults in the system's circuit, ultimately saving both time and money. Top Ten Arduino Simulators: It would no exaggeration if I mention that Arduino microcontroller development board is the most commonly and widely used development board among the students and hobbyists. There are a wide variety of applications in which we can employ the Arduino to serve the purpose. In addition to this a large number of sensors and actuators are available which can easily be interfaced with the Arduino development board. This wide availability of Arduino and its peripheral eases the embedded designers to develop the prototype of their product. But as we saw in the previous section that it is always beneficial that you simulate the system before its hardware development. So in order to serve this purpose a large number of Arduino simulators are available online. Here I am discussing only a few of them. It is important to mention here that I strongly recommend the Proteus as the standard software for simulating the Arduino microcontroller boards. Arduino Simulator The list of the Top 10 Best Simulators for Arduino is shown in the following. Paul Ware’s Arduino simulator. Simduino. ArduinoSim Arduino Simulator for PC. Emulare Arduino simulator. Simulator for Arduino. Autodesk Eagle. Proteus. Autodesk Circuits. Virtronics Simulator for Arduino Notice here that the list is arranged at random and the numbering has nothing to do with the ranking or popularity of the Simulators. Let us have brief introduction of each of the simulators. Paul Ware’s Arduino Simulator Paul Ware, the individual who developed the simulator, named it after himself. The Arduino simulator is easy to use because it comes with libraries for most sensors and actuators, which makes it user-friendly. The simulator has a straightforward GUI which enables the simple adjustment of Arduino parts such as sensors and actuators for testing circuit connections and code. SimDuino: SimDuino is another simulator for simulating the code and circuit based on the Arduino development board. This Arduino simulator is paid and is designed to operate on the Apple devices. With the help of this simulator you can learn about the coding and electronics that is used in the Arduino project development. arduino sim simulator ArduinoSim: It is a useful tool for experimenting with Arduino code and hardware intended for Arduino microcontroller projects. It provides a quality interface and a user-friendly learning environment. Utilizing this Arduino simulator offers a valuable educational opportunity by allowing easy control over both the circuit and programming. ArduinoSim has a large number of users and is a platform that is not open-source. Created using Python, a widely-used programming language with extensive online support resources. ArduinoSim is available for free and can be downloaded with ease. Arduino Simulator for PC: This simulator is also among the best Arduino simulators. It has all the benefits and advantages that all the Arduino Simulators have. It has its base on both Windows and Linux. This Arduino simulator allows the user to use any type of Arduino development board that is Arduino UNO, Arduino MEGA,Arduino nano etc also it can simulate the code and hardware for the liquid circuit display. Emulare Arduino Simulator: This Arduino simulator is highlighted above other simulators because of its distinct features. This Arduino Simulator can simulate numerous projects on the Arduino without any problems, allowing you to perform multiple functions at the same time. This simulator has the added benefit of being compatible with both Windows and Linux operating systems. Simulator for Arduino: This Arduino simulator is developed by the Virtronics and is used by many students and hobbyists. It serves as the good teaching platform for students and beginners who want to learn about coding and circuit designing. Autodesk Eagle: It is a useful tool for experimenting with Arduino code and hardware intended for Arduino microcontroller projects. It provides a quality interface and a user-friendly learning environment. Utilizing this Arduino simulator offers a valuable educational opportunity by allowing easy control over both the circuit and programming. ArduinoSim has a large number of users and is a platform that is not open-source. Created using Python, a widely-used programming language with extensive online support resources. ArduinoSim is available for free and can be downloaded with ease. [otw_is sidebar=otw-sidebar-3] Arduino Proteus Simulator: Among other Arduino simulators Proteus also holds very unique position. This software can also be used for Printed circuit board designing. Although you need to download the simulation model files for this software but these are readily available online so that is not an issue. The bloggers of ProjectIoT123.com recommend this software as they have fully mature tutorials for this software. Autodesk Circuits: Autodesk circuits, similar to Proteus, are highly favored by engineers and students. This software can be utilized for both Arduino simulation and electronic circuit simulations, whether they are passive or active. Virtronics Simulator for Arduino: [otw_is sidebar=otw-sidebar-3] Autodesk circuits, similar to Proteus, are highly favored by engineers and students. This software can be utilized for both Arduino simulation and electronic circuit simulations, whether they are passive or active. That is all for now. In the next posts I will come up more interesting applications of the Arduino and Proteus. Till then stay connected, keep reading and enjoy learning. Top 10 Best Simulators for Arduino: Arduino pro mini Arduino nano Arduino mega Arduino uno Arduino  yun Arduino due Arduino  lilypad Arduino Duemilanove[otw_is sidebar=otw-sidebar-3]   Arduino Arduino Atmega328 Pinout for Arduino Source: Top 10 Best Simulators for Arduino ### Simple Arduino Audio Player and Amplifier with LM386 Incorporating sounds or music into our project will reliably increase its attractiveness and make it more visually appealing. If your Arduino has many pins to spare, you can easily incorporate sound effects into your project by using an extra SD card module and a standard speaker. This article will show how easy it is to play music or add sound effects using your Arduino Board. The Arduino community is credited for developing specific libraries that streamline the construction of this project. In this configuration, we have employed IC LM386 for amplification as well as for reducing noise. Hardware Required: Arduino UNO SD Card Reader module SD card LM386 Audio Amplifier 10uf Capacitor (2 Nos) 100uf Capacitor (2 Nos) 1K,10K Resistor Push buttons (2 Nos) Breadboard Connecting Wires Getting ready with your WAV audio files: To play sounds from an SD Card using Arduino, the audio files need to be in .wav format because the Arduino Board is only capable of playing audio in wav format. Numerous mp3 shields are available for use with an arduino in order to build an mp3 player. You can also use online platforms to convert audio files from your computer to WAV format so you can play mp3 files on Arduino. To convert an audio file into wav format, adhere to these instructions: Step 1: Click on “Online Wav Converter” to enter into the website. Step 2: Arduino is capable of playing a wav file in the specified format. You have the option to adjust the settings afterwards, however, these settings were specifically designed for optimal quality. Bit Resolution 8 Bit Sampling Rate 16000 Hz Audio Channel Mono PCM format PCM unsigned 8-bit Step 3:On the website, you should select "choose file" and pick the file you wish to convert. Next, enter the settings mentioned above. After finishing, it should appear similar to what is shown in the image below. Step 4: Next, select "Convert File" and your Audio file will be converted to .Wav file format. Once the conversion is finished, it will be downloaded. Step 5: In the end, format your SD card and save your .wav audio file on it. Make sure to format it before you insert this document. Remember to include the title in your audio recording. Similarly, you can select any of your four audio files and designate them as 1, 2, 3, and 4 (Titles must stay the same). I have converted four songs and saved them as 1.wav, 2.wav, 3.wav, and 4.wav as specified. Circuit and Hardware: Circuit Diagram for this Arduino Audio File Player is simple. The complete circuit diagram is shown in the Image below. Because our audio files are saved on the SD card, we attach an SD card reader module to our Arduino. The Arduino communicates with the SD card via the SPI communication protocol. Hence, the Module is linked to the SPI pins of the Arduino as shown in the above diagram. It is also listed in the table provided. Arduino SD card module +5V Vcc Gnd Gnd Pin 12 MISO (Master In Slave out) Pin 11 MOSI (Master Out Slave In) Pin 13 SCK (Synchronous Clock) Pin 4 CS (Chip Select) Now the Arduino will be able to read the music file from the SD card and play it on the pin number 9. But the audio signals produced by the Arduino on pin 9 will not be audible much. Hence we amplify it by using the LM386 Low voltage Audio amplifier IC. The amplifier shown above is designed for a Gain of 200 and the Vdd (pin 6) is powered by the 5V pin of the Arduino. If you want to increase/decrease the sound you can increase/decrease the voltage provided to this pin. It can withstand a maximum of 15V. Learn more about this 200 gain amplification configuration for LM386 here. Additionally, there are two push buttons connected to pins 2 and 3 of the Arduino. These switches are used for moving to the next song track and either starting or stopping the music. I have used these buttons just to demonstrate their capabilities; feel free to start the song whenever you want. View the demo video at the end. You can choose to build this circuit exclusively on a Breadboard, as shown in the accompanying picture. Programming your Arduino: Once the Hardware and SD card are prepared, we are only one more step from being able to play those songs. Put the card into the module for the SD card and then proceed with the steps provided. Step 1: We will use a library to guarantee the project's success as mentioned before. Here is the provided link to the library. Choose "Clone or download" and click on it, then opt for downloading as a ZIP file. TMRpcm library Step 2: We will use a library to guarantee the project's success as mentioned before. Here is the provided link to the library. Choose "Clone or download" and click on it, then opt for downloading as a ZIP file. Step 3: By the end of this article, the complete schedule for the arduino music player project will be provided. Simply duplicate and insert it within the Arduino Program. Afterward, choose Upload and get ready to begin listening to your audio files. The comments in the program are helpful in aiding comprehension. Nevertheless, the TMRpcm library's capability has also been outlined in the next section. Playing an audio file: You can play any audio that is stored in Wav format inside the SD card module by using the line below. music.play("3.wav"); //object name.play (“FileName.wav”); You can use this line at places where you want to trigger the Audio Pause an audio File: To pause an Audio file, you can simply call the line below. music.pause(); //objectname.pause(); Forwarding/Rewinding an Audio:  There are not direct ways to forward or rewind an Audio file, but you can use the line below to play a song at a particular time. This can be used to forward/rewind with some additional programming. music.play("2.wav",33); //Plays the song from 33rd second //objectname.play(“Filename.wav”,time in second); Setting the quality of the audio: The library gives us two qualities to play the music, one is to play as normal mode the other to play with 2X oversampling. music.quality(0); //Normal Mode music.quality(1); //2X over sampling mode Setting the Volume of the audio: Certainly, you have the ability to adjust the audio volume using software. Just use the line below to easily adjust the volume. Increased music levels can impact audio quality, so it is recommended to utilize hardware control when available. music.setVolume(5); //Plays the song at volume 5 //objectname.setVolume(Volume level); Working of this Arduino Music Player: After coding your Arduino, simply push the button connected to pin 2 in order to hear the first song (called 1.wav) on your Arduino board. Now, you can choose to press the button again to switch to the next track, scheduled to play as 2.wav. All four songs can be accessed in a similar manner. Pushing the button linked to pin 3 enables you to control the song's playback. Push the button once to pause the song and push it again to continue playing from where it stopped. Watch the video for a complete demonstration (or just relax with some music). I believe that you valued the project. Now it's time for you to use your imagination and incorporate them into your projects. You can make a talking clock, voice-controlled assistant, chatty robot, vocal warning security system, and various other creations. Please let me know how you plan to use it in the comment section and if you have any problems, feel free to reach out to me on the forums or in the comment section. Code /* Arduino Based Music Player This example shows how to play three songs from SD card by pressing a push button The circuit: * Push Button on pin 2 and 3 * Audio Out - pin 9 * SD card attached to SPI bus as follows: ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 4 created  25 Jun 2017 by Aswinth Raj This example code was created for CircuitDigest.com */ #include "SD.h" //Lib to read SD card #include "TMRpcm.h" //Lib to play auido #include "SPI.h" //SPI lib for SD card #define SD_ChipSelectPin 4 //Chip select is pin number 4 TMRpcm music; //Lib object is named "music" int song_number=0; boolean debounce1=true; boolean debounce2=true; boolean play_pause; void setup(){ music.speakerPin = 9; //Auido out on pin 9 Serial.begin(9600); //Serial Com for debugging if (!SD.begin(SD_ChipSelectPin)) { Serial.println("SD fail"); return; } pinMode(2, INPUT_PULLUP); //Button 1 with internal pull up to chage track pinMode(3, INPUT_PULLUP); //Button 2 with internal pull up to play/pause pinMode(3, INPUT_PULLUP); //Button 2 with internal pull up to fast forward music.setVolume(5);    //   0 to 7. Set volume level music.quality(1);        //  Set 1 for 2x oversampling Set 0 for normal //music.volume(0);        //   1(up) or 0(down) to control volume //music.play("filename",30); plays a file starting at 30 seconds into the track } void loop() { if (digitalRead(2)==LOW  && debounce1 == true) //Button 1 Pressed { song_number++; if (song_number==5) {song_number=1;} debounce1=false; Serial.println("KEY PRESSED"); Serial.print("song_number="); Serial.println(song_number); if (song_number ==1) {music.play("1.wav",10);} //Play song 1 from 10th second if (song_number ==2) {music.play("2.wav",33);} //Play song 2 from 33rd second if (song_number ==3) {music.play("3.wav");} //Play song 3 from start if (song_number ==4) {music.play("4.wav",25);} //Play song 4 from 25th second if (digitalRead(3)==LOW  && debounce2 == true) //Button 2 Pressed { music.pause();  Serial.println("PLAY / PAUSE"); debounce2=false; } if (digitalRead(2)==HIGH) //Avoid debounce debounce1=true; if (digitalRead(3)==HIGH)//Avoid debounce debounce2=true; } } Video Source : Simple Arduino Audio Player and Amplifier with LM386 ### RD6006 DIGITAL CONTROL SWITCH ADJUSTABLE POWER SUPPLY STARTS FROM JUST $57 The good life, they say, sometimes does not cost a fortune, with the new RD6006 from Ruideng, you can precisely program the amount of power needed for your project via USB / WiFi communication or via the embedded control panel. The RD6006 digital control Switching Adjustable power supply is a programmable, DIY Flavoured, bench PSU that is safe, convenient to use, and comes preloaded with different features for high-level performance. We were lucky enough to get our hands on one of the units from Banggood.com, so we share our experience with you. RD6006 has two versions: RD6006 and  RD6006-W, RD6006-W have WIFI board, RD6006 doesn’t. First, let’s take a look at some of its impressive features as highlighted below. Some highlight features of the PSU include: 2.4-inch color LCD display Digital Keypad + Encoder Potentiometer combination adjustment Back display that includes a WiFi communication board and a Clock Battery Socket USB interface Special interface for charging a battery PC software and Phone Apps Firmware upgrade Support A power button that indicates with a blinking green light when the RD6006 is connected to the power source. Temperature range: -10 0C to 40 0C What Makes The RD6006 Special 1. Full Main Page Display The main page of the RD6006 digital power control switch displays more information than previous power supply models. The main page is set by default to a traditional display style which shows the voltage, current, and power values in large fonts, but users also get the option of switching to the view of different modes like the Curve style mode which shows the voltage, current, and power ratings as curves on one page.  Read more: RD6006 DIGITAL CONTROL SWITCH ADJUSTABLE POWER SUPPLY STARTS FROM JUST $57 ### RENESAS INTRODUCES BLUETOOTH LOW ENERGY MODULE FOR ULTRA-LOW POWER IOT APPLICATIONS New RYZ012 Module Provides Multi-Standard Wireless Communication Supporting Bluetooth Low Energy 5 and IEEE802.15.4 Based Standards Renesas Electronics Corporation, a premier supplier of advanced semiconductor solutions, today announced sample shipment availability of the new RYZ012 Bluetooth® module targeting ultra-low power IoT applications. The RYZ012 is Renesas’ first Bluetooth Low Energy 5 module. It integrates a 2.4 GHz RF transceiver supporting the IEEE802.15.4 multi-standard wireless protocol, Bluetooth Low Energy (LE), Bluetooth LE Mesh, and ZigBee. The RYZ012 features a power draw of only 0.4µA during deep sleep (without SRAM retention) allowing customers to extend battery life. The RYZ012 also includes a battery monitor to measure battery capacity and detect low power in battery-operated devices. “The RYZ012 module complements our IoT connectivity solutions, featuring ultra-low power in a small form factor, designed to target a wide range of IoT, connected home, asset tracking, and cost-sensitive applications,” said Roger Wendelken, Senior Vice President, Head of MCU Business, IoT and Infrastructure Business Unit at Renesas. “The RYZ012 teams with Renesas’ sensor solutions to offer an end-to-end, device-to-cloud ecosystem.” The RYZ012 module supports the 2.4 GHz IoT standards without the requirement for an external DSP. This reduces the number of external components required and the overall cost in system integration. The RYZ012 module includes a 32-bit microcontroller with an integrated 512kB flash memory and 64kB SRAM for application support. It comes in two versions: with and without an integrated antenna. This allows for implementation flexibility and the option for longer wireless range requirements. Read more: RENESAS INTRODUCES BLUETOOTH LOW ENERGY MODULE FOR ULTRA-LOW POWER IOT APPLICATIONS ### RFID Blocking - How Secure Are Our RFID Cards? How Can We Protect Them Further? - an Experiment NOTE: Vocab RFID Reader - The box-like object that can be activated by an RFID tag RFID Tag/RFID Card - The card or tag that activates the reader. I took apart one and is displayed in the pictures above. RFID System - The tag and the reader work together. Electromagnetic Waves - A wave that contains both electric and magnetic waves that are traveling on the same frequency and are perpendicular to each other. EMC - Electromagnetic current. EMC Shielding - blocks, reflects, and/or absorbs an electromagnetic current. This is an RFID blocking experiment where you test out multiple ways to protect your RFID credentials. RFID is everywhere these days, it's in credit cards and phones for the tap to pay like Apple Pay and Google Pay. However, it is most commonly used by hotels, businesses, and schools as access cards. All you do is wave your card in front of the reader and it lets you in. Nowadays, there is a lot of fear about RFID hackers stealing your credit card information through RFID readers. In reality, no scammers even bother to steal your information with RFID scanners. In order to steal information this way, they would need a very high-powered reader (which is very expensive) and need to be in an area where a lot of people use RFID credit cards (there aren't that many). Additionally, credit cards are encrypted, so the scammer would need to acquire the information through this difficult process and then decrypt it. There are a lot of cheaper and easier ways to get credit card information online. Instead, most RFID is stealing credentials rather than credit cards. If a high-security place like a government building, a bank, or a different building used RFID people become more interested in stealing cards. This project is going to focus more on protecting these credential cards rather than credit cards. note: This introduction is going to be kind of an infodump so you can understand how the project works, so I recommend at least skimming through the sections below. Background Information Before we start this project it's important to understand how RFID works. This is a really basic explanation of how RFID works, so if you want to go into more detail I suggest reading this article. I included a lot of the information you see here in Basically, the reader sends out an electromagnetic field that the RFID card picks up, which triggers the card to send digital information back to the reader through radio waves. There are a couple of variations to this process that depends on the card, such as: Active RFID Tags - There is a battery in the card that gives it the power to send information to the reader. These do better in longer distances and are bulkier than passive tags. Passive RFID Tags - All of the energy the card needs is harvested from the reader through the electromagnetic field. Most hotel keys are passive, which is why they are smaller and need to be right next to the reader. In addition to having different energy methods, RFID systems can run at different radio frequencies, such as: 125 kHz or Low Frequency (LF) - The oldest frequency, but also the cheapest. This frequency is one of the most documented, which makes information on how to break in widely available. It also has no government regulations. 13.56 MHz or High Frequency (HF) - Newer than LF and more secure. It can be more expensive, but not by much. It is also the most commonly used and found in most hotel cards. Ultra-High Frequency (UHF) 865–868 MHz (Europe) or 902–928 MHz (North America) - These tags are most often used by trucking and railroad companies to keep track of trucks and their inventory. These are used less because they have more regulations than other kinds. UHF tends to interfere with other systems as well. There are some other kinds, but these are the most common. For this project we're using HF or 13.56 MHz as that is the cheapest and most common. Where Can We Find RFID in our Lives? Hotel keys tend to be the most common. Not every hotel uses RFID, but you can find a lot in a city. Apple Pay/Google Pay uses a special kind of RFID called NFC (near field communication) to communicate with the reader. EZ-Pay or other automatic toll booth payments use RFID to track who is coming through and bill their account. Pets are often injected with an RFID microchip to keep track of their medical records and help identify lost animals. Schools and businesses have also been picking up RFID recently, to keep track of who is coming in and out, and to keep people out who aren't supposed to be there. If you think this project is cool, wait until you hear about RFID implants. These are implanted usually into a human hand and can be programmed to open doors, tap to pay, send a website link to someone's phone, and a whole lot of other super cool stuff! There is no limit to the awesome stuff that RFID can do, so let's get started! Supplies Arduino Uno Computer for programming RFID rc522 module (should come with 2 tags, but in my package one was broken so be prepared.) LCD1602 module (an i2c can work as well, but you might have to change my code a bit) lots of male-male wires. Breadboard Potentiometer 10K Red and green LED two 10K resistors Aluminum foil Duct tape An RFID blocking wallet (below are the two I used, but I recommend experimenting with your own!) Buffway ID Stronghold (highly recommended) Optional A servo You can build a fake door out of cardboard and wood that can open as a demonstration. collected hotel cards (keep in mind that the rc522 is a high frequency operating reader, so it won't respond to low-frequency tags) A regular non-RFID blocking wallet Step 1: Wire the Reader Follow the wiring diagram above. If you want to include any special parts like a servo or a speaker add those in now. Feel free to edit and change this diagram in any way you want! Step 2: Find Your Cards UID Before your card can be recognized by the reader, the reader has to know what to recognize. To do that we have to find the card UID. UID stands for unique identification, and it is 4 sets of 2 numbers and letters (example: xx xx xx xx), and you have to use the rc522 to find it. Below are the steps to finding your UID: install the rc522 Arduino library, called MFR522V2 (GitHub link) open examples and click on rfid_read_personal_data Unplug the rc522 from your previous wiring and rewire it following the instructions at the beginning of the code. There are different instructions for different boards so pay attention. upload it to your board and open the serial monitor. Hold up your card to the reader. You can use the tag that comes in the package, or a stolen hotel card. However, if the hotel card is a low-frequency card, it won't respond because the rc522 is a high-frequency reader. Then you should see a line that says "Card UID" It's probably a good idea to write this down. Note that in the name section, it says "authentication failed" this isn't super important, but if you want to have a custom name for your card you can change it with the rfid_write_personal_data example found in the same library. WRITE DOWN THE UID. YOU NEED IT FOR THE NEXT STEP. Step 3: Programming the Reader I have included the Arduino file for this project but you have to change the UID to your card UID for it to work. For reference, the number you have to change should be on line 55. If you want to add more than one card, copy and paste both the if and else section and paste below with a different UID. Additionally, I currently have some servo code in there as well. If you don't want to use a servo, you can delete this or leave it as it won't harm your project. Remember to adjust the potentiometer to change the glare on the LCD. Attachments real_reader.ino Download Step 4: Blocking Materials - RFID Blocking Wallet This is where the experiment itself comes in. So we have a couple of questions we have to answer for each material: How do we protect credentials from RFID skimmers? How do these protection methods work? How can we recreate them? How can we protect our credentials for RFID skimmers? The first blocking material I want to test is the RFID blocking wallet. I chose the Buffway Slim Wallet, which is advertised as being able to block high-frequency readers, like ours. Putting the card in any pocket of the wallet, including the see-through driver's license pocket, the reader is blocked and the card cannot be read. The wallet seems to work as advertised. However not all RFID wallets work, a lot of the cheaper ones are just advertised as RFID blocking and don't actually block anything. Be careful when buying an RFID wallet to look at the reviews and see if people have had success with this wallet. So why does this work? The fabric within the wallet is lined with a special fabric that contains metal. I looked on the Buffway website and it doesn't specifically say what it is made of, but most wallets are lined with nickel, copper, or aluminum, but some are lined with other metals. So why does this work? In order to block the electromagnetic signals coming from the reader, the material blocking it needs to have mobile charge carriers (example: electrons, ions), aka the material needs to be conductive. The electromagnetic signal and the mobile charge carriers interact along the surface of the conductive material and creates an opposing electromagnetic field. These two electromagnetic fields interfere with each other and make it impossible for the card to send information to the reader. The description above is known as electromagnetic reflection and affects just the electric portion of the electromagnetic field. Note that without the electric component, it is no longer an electromagnetic field and is useless to the reader. There are ways to block the magnetic component known as electromagnetic absorption but those are much more difficult. If you want to learn more check out this article. Finally, how can we recreate this? So how can we recreate this outcome at home? For this recreation, we are going to make a wallet out of aluminum to reflect the electromagnetic fields. This is a super simple super cheap replica of the commercial wallet. *Note that aluminum is not the best metal for this job. Silver is the best at EMC shielding, however, this is incredibly expensive. Aluminum is about 40% worse than silver, but it does the job well enough for our experiment. How to make an aluminum foil wallet: Cut off two equal-sized pieces of duct tape. Create circles with duct tape. put circles side by side so that they are touching on the edges and wrap the circles in aluminum foil. Leave a little bit of duct tape on the bottom. Cut off a small strip of duct tape and hotdog fold it over the bit of exposed duct tape to seal off that edge. Fold in any extra aluminum foil at the top into the wallet Insert your card and test it out! *Note that the duct tape serves no purpose in blocking electromagnetic waves, it is only being used to hold the aluminum foil together and prevent it from ripping. We achieve the same result with the homemade wallet that we did with the commercial wallet, so it does the job! This wallet is following the exact same principles as the Buffway wallet and is just a more simplified version, as it doesn't have a leather cover and a bunch of do-dads on top. *Note that if you wanted to use a homemade wallet like this to protect your credentials, this wallet would break super easy and wouldn't last long. If you wanted to make something similar to this to be your everyday wallet, I would wrap the outside in duct tape as well to extend its lifespan. Step 6: Blocking Materials - RFID Blocking ID Badge This is an alternative to the wallet that I wanted to highlight because it works on a slightly different principle. This is an RFID ID badge holder. What is really interesting about this is that it doesn't have a metal cover, the front of the badge is empty, and there is no material covering. Yet when you hold it up to the reader, it still can't be read. In order to read this card, you need to open it with the alligator clip on the top, and then the reader can read it. How does this work? This ID badge clearly, doesn't run on the same principle as the wallet, there is no way that it is being surrounded by metal, the case is made of plastic. So what is happening? Notice that the sheet on the back has a metallic sheen. It's hard to show in pictures but if you feel it it's clearly a sheet of metal. But what would this do? This thin sheet of metal is doing the exact same thing that the wallet was doing but in a slightly different way. The EMC coming from the reader is going through the card and hitting the metal backing. The backing is reflecting the EMC signal and that reflected signal interferes with the electric component, canceling out the original EMC and stopping communication with the reader. However, this cancelation only works when the metal is touching the card, because the reflection needs to go through the card. Otherwise, the EMC would hit the metal and the card separately and have no effect, that's why the ID badge doesn't block the reader when the card and metal are separated with the alligator clip and does work when they are pressed together. So How can we recreate this? Source: RFID Blocking - How Secure Are Our RFID Cards? How Can We Protect Them Further? - an Experiment ### RICOH ELECTRONIC DEVICES COMPANY LAUNCHES THE RIOT-001 ENVIRONMENT SENSING BOARD Ricoh Electronic Devices Company RIOT-001 Environment Sensing Board is designed to transmit data obtained from a temperature/humidity/pressure sensor (BME280) and an ambient light sensor (MAX44009) via Bluetooth, to tablets or other smart devices. The board also includes a voltage regulator with a battery monitor (RP124) for the measurement of the secondary battery voltage. The RIOT-001 Board is ideal for indoor lighting using a solar battery panel. The RIOT-001 Environment Sensing Board efficiently harvests the electric power a solar battery panel generates. This happens using the buck DC/DC converter for energy harvest then stored in a small Li-ion secondary battery. The stored power is supplied to a BLE module with an MCU and sensors by the RP604, an ultra-low supply current buck-boost DC/DC converter. The RIOT-001 Board also includes the RP124, a voltage regulator with a battery monitor, to monitor the secondary battery voltage. Checking the state of the secondary battery voltage is possible by transmitting battery information to tablets or other smart devices through an AD converter inside the BLE module. RIOT-C01 Coin Battery Board The RIOT-C01 Coin Battery Board is an optional board for the RIOT-001 environment sensing board. This board features a battery holder for a CR2032-type coin battery. The RIOT-C01 board charges the secondary battery mounted on the RIOT-001 that provides the environment sensing operation with a coin battery. Specifications Input voltage of 2.0V to 5.5V Max. power voltage of 4.4V Output voltage of 1.79V to 2.03V Secondary battery charging voltage of 2.62V to 2.78V Avg. operating current of 16.4uA Operating temperature range of 0°C – 50°C Read more: RICOH ELECTRONIC DEVICES COMPANY LAUNCHES THE RIOT-001 ENVIRONMENT SENSING BOARD ### RIGOL RSA3000N/5000N REAL TIME SPECTRUM ANALYZERS WITH VECTOR NETWORK ANALYSIS Rigol RSA3000N/5000N Real Time Spectrum Analyzers include a built-in tracking generator to offer real-time spectrum analysis and vector network analysis up to 6.5GHz with S11 and S21 reflection and transmission analysis.  Saelig Company, Inc. has announced that the Rigol RSA3000 and RSA5000 Real Time Spectrum Analyzer series now includes five “N” versions which offer vector network analysis up to 6.5GHz.  Built on Rigol’s Ultra Real platform, these VNAs offer S11 and S21 reflection and transmission analysis.  They feature multi-touch user control via a 10.1” LCD touchscreen. Front panel buttons, keyboard, and mouse input are also available for a straightforward user interface. They run on a Linux operating system to provide a reliable and stable interface, with remote communication access also available. Customers needing to characterize active or passive components, identify signal path errors, or tune antennas will benefit from this VNA solution, which enables complex measurements including distance to fault and S parameters.  S11, or forward reflection co-efficient, allows engineers to quickly visualize and measure a component’s response on a Smith chart and polar plane while measuring the component’s magnitude and SWR. This is important when characterizing the performance of passive components such as attenuators, splitters, and filters.   S21, or forward transmission coefficient, allows engineers to quickly visualize how amplifiers, filters and cabling components affect impedance or phase as a function of frequency. View phase or group delay as a function of frequency or magnitude to quickly determine and confirm critical specifications. Distance to fault measurements allow engineers to easily debug connectivity issues that cannot be seen from visual inspection. The spectrum analyzer uses signal reflections to calculate the distance to a fault anomaly.  Read more: RIGOL RSA3000N/5000N REAL TIME SPECTRUM ANALYZERS WITH VECTOR NETWORK ANALYSIS ### ROHM’S NEW EFFICIENT POWER MANAGEMENT IC OPTIMIZED FOR I.MX 8M NANO PROCESSORS ROHM today announced the availability of a highly integrated and efficient power management IC (PMIC),BD71850MWV, optimized for NXP® Semiconductors’ i.MX 8M Nano family of application processors, which features exceptional computing, and audio performance. It is the latest addition to ROHM’s growing portfolio of PMICs designed for NXP’s i.MX application processors. With the BD71837AMWV for i.MX 8M Quad and Dual applications processors and the BD71847AMWV for i.MX 8M Mini family application processors, ROHM offers power solutions for all members of the i.MX 8M series. i.MX 8M Nano applications processors allow customers to incorporate a voice interface to audio streaming devices at minimal cost. They integrate up to four Arm® Cortex®-A53 cores operating at up to 1.5GHz along with an Arm Cortex-M7 that operates at up to 750 MHz for low standby power consumption. In addition, support for advanced audio functions and various high-speed interfaces makes the i.MX 8M Nano ideal for a wide range of consumer and industrial applications. Leveraging ROHM’s expertise in analog power and advanced BCD process, BD71850MWV integrates all power rails required by the processor as well as power supplies for DDR and common system IO. In addition to DC/DC converters with industry-leading efficiency of 95%, the PMIC features programmable power sequencer for flexible power control and management, seamless hardware control interface to i.MX 8M Nano, buffered sleep clock, protection functions, etc. The high level of integration, customizations for i.MX 8M Nano applications processors, and programmability help to shorten development time, to lower system BOM cost and to minimize the solution footprint. This product is the only* PMIC mounted on the i.MX 8M Nano processor evaluation kit by NXP semiconductors, allowing users to immediately evaluate the operation with the processor. (*As of January 2020) Read more: ROHM’S NEW EFFICIENT POWER MANAGEMENT IC OPTIMIZED FOR I.MX 8M NANO PROCESSORS ### R&S NGP800 POWER SUPPLIES OFFER UP TO FOUR INDEPENDENT CHANNELS IN A SINGLE INSTRUMENT Rohde & Schwarz released the R&S NGP800 family of power supplies, which include two and four channel models. Channels can be operated fully independently or synchronized, and features include a 5” high-resolution touch screen, which also displays detailed statistics. The devices offer voltages up to 250V, currents up to 80A, and power up to 800W. Each channel supplies up to 200W with a maximum of 20A or 64V, also covering 48V automotive and industrial applications. A tracking function makes it possible for users to adjust voltage and current simultaneously on selected channels, with programmable output delays used to meet specific power-up sequences. The supplied voltage can be ramped up to the required level in any period from 10 ms to a minute. All outputs operate in either constant voltage mode or constant current mode. It is possible to set up changes in voltage and current level over time, using the QuickArb function, which can simulate unstable power supplies with the R&S NGP800. Using Remote Sensing, users can regulate the voltage directly at the input terminals of the powered device itself, instead of the power supply’s output terminals. Read more: R&S NGP800 POWER SUPPLIES OFFER UP TO FOUR INDEPENDENT CHANNELS IN A SINGLE INSTRUMENT ### SAELIG ANNOUNCES THE 2/4-CHANNEL 100-350HZ SIGLENT SDS2000X PLUS SERIES OSCILLOSCOPES New series builds on previous 2000X models to bring 200Mpt memory, 10” touch-screen, external mouse/keyboard control, built-in web server, and 50MHz waveform generator Saelig Company, Inc. has introduced the new Siglent SDS2000X Plus Digital Oscilloscope Series consisting of four models: one 2-channel 100MHz bandwidth (software upgradeable to 350MHz) and three 4-channel models (100/200/350MHz.)  The 350MHz models can be upgraded to 500MHz on two independent channels.  A large 10.1” capacitive touch-screen supports multi-touch gestures.  The oscilloscope range also offers a 10-bit acquisition mode that uses oversampling to achieve higher resolution than most scopes. Combined with the lowest vertical setting of 500μV/div, the X Plus series can display extremely small signal details. The 4-channel models all feature dual 2GSa/s ADCs and also dual 200Mpt memory modules. This enhanced memory depth enables a high sample rate at larger time/div settings. This is valuable when analyzing high-frequency content on slowly changing signals by providing the detail needed, regardless of time-base settings. The SDS2000X Plus uses the versatile user interface of the higher performance SDS5000X series. This includes the capabilities of a 10” touch-screen, and external mouse/keyboard control. With waveform capture rates of up to 120,000 wfms/sec, the sequence mode boosts the capture rate to 500,000wfm/s to ensure the capture of critical events and rare signal anomalies.   A built-in 50MHz function generator is optionally available together with a free Bode plot function to deliver convenient and low cost frequency analysis.  The LAN port supports easy remote control via a built-in webserver using a web-browser or SCPI remote commands. The X Plus series also features a Power Analysis option for automatic on-screen performance analysis of common power supply characteristics. Siglent’s optional probes for current and differential voltage measurements make a valuable addition for power design applications.  When developing switch-mode power supplies (SMPS), Bode plots are a convenient way to measure the phase and gain margin of feedback loop systems to determine the stability of the design.  This is now easily performed on the SDS2000X Plus series. Read more: SAELIG ANNOUNCES THE 2/4-CHANNEL 100-350HZ SIGLENT SDS2000X PLUS SERIES OSCILLOSCOPES ### SAMSUNG ELECTRONICS UNVEILS ITS FIRST FAMILY OF ‘HUMAN-CENTRIC’ LED COMPONENTS TO ENHANCE INDOOR LIFESTYLES Lighting to energize or relax: new LED packages help improve alertness and the quality of sleep by adjusting melatonin levels. Samsung Electronics unveiled its first “human-centric” LED packages, collectively known as LM302N. Engineered with carefully created light spectra, the LM302N family helps human bodies adjust melatonin levels indoors, making people feel more energetic or relaxed depending on their daily life patterns. Melatonin, a hormone that regulates the sleep-wake cycle, responds to the cyan wavelength range of light. Brighter cyan-concentrated lighting suppresses the body’s production of melatonin, increasing concentration and enabling a greater overall sense of alertness. Similarly, a lower cyan light intensity minimizes disturbances to the natural onset of the body’s melatonin production, helping to promote sleep quality. Samsung’s LM302N utilizes precisely designed light spectra with optimized amounts of cyan to accommodate the lighting needs to the extent desired at any given point in time: the LM302N DAY improves alertness and the LM302N NITE enhances relaxation. Standardized at 3.0 × 3.0 mm, these offerings can fit in a wide range of lighting fixtures and are protected against humidity and heat. The LM302N DAY can suppress the body’s melatonin level more than 18 percent below that of conventional LED lighting. Available in a variety of color temperatures from 3000K to 6500K, the DAY package can be used in a diverse range of indoor applications, such as schools, offices, libraries and industrial sites, to enhance an individual’s sense of awakeness and energy level. The LM302N NITE can provide a proper level of brightness without hindering the release of melatonin, helping people to maintain the hormone level as if they were in a calm natural atmosphere at night. The body releases about five percent more melatonin under lights with the LM302N NITE packages than conventional LED packages, increasing relaxation. By comparison, spending a lot of time under conventional nighttime lighting can cause excessive alertness that makes it harder to fall asleep. Additionally, the LM302N NITE is offered in color temperatures between 1800K and 4000K, providing design flexibility to bring the benefits of relaxing light to a variety of lighting spaces. Read more: SAMSUNG ELECTRONICS UNVEILS ITS FIRST FAMILY OF ‘HUMAN-CENTRIC’ LED COMPONENTS TO ENHANCE INDOOR LIFESTYLES ### SEGGER APPWIZARD ENABLING ADVANCED GUI DESIGN IN NEXT GENERATION EMBEDDED APPLICATIONS SEGGER has released AppWizard, presenting engineers with a powerful new tool for creating complete, ready-to-run applications for the company’s popular emWin embedded graphics library. AppWizard is intuitive to operate and comes with its own built-in resource management capabilities. It facilitates the use of all of emWin’s core functions, such as the rendering of animations, language management, widgets, etc. One of AppWizard’s notable features is the ‘What You See is What You Get’ (WYSIWYG) editor. This allows engineers to design application interfaces, along with their related interactions and events, and immediately see what these applications will actually look like. In addition, AppWizard integrates a play mode for easy testing of created applications in a simulated environment. Simply pressing F5 runs the current state of the application, just like debugging in an IDE. The construction of embedded GUI applications with AppWizard is made very straightforward, requiring little to no prior experience with emWin or even C-programming. By applying signals and slots/interactions, the application’s behavior can be defined with ease. For example, creating a button to change a value is done with just a few clicks. With its integrated resource management, all resources (such as fonts and images) are automatically converted to internal formats and added to the project. Resources can be stored in internal memory or offloaded to external media. Support for board-level packages enables AppWizard to generate ready-to-use target applications. These packages include the setup of the target hardware and display for a seamless start, as well as SEGGER’s comprehensive emFile file system to make placing of resources on an SD card or some other form of external memory simple. AppWizard outputs a bundle of C source files to work with any target system that has at least 32kByte of RAM and 128kByte of ROM. A MS Visual Studio simulation project enables debugging of the application and the adding of custom code to be carried out even if the final target hardware is not (yet) available. Read more: SEGGER APPWIZARD ENABLING ADVANCED GUI DESIGN IN NEXT GENERATION EMBEDDED APPLICATIONS ### SEH TECHNOLOGY LAUNCHES NEW DONGLE SERVERS FOR VIRTUALISATION AND OUTSOURCING IN THE DIGITAL AGE Advancing digitalisation continues to produce huge challenges for businesses across all industries. Businesses want to stay ahead of the curve and remain competitive. System houses, data centers, consultants, and vendors demand solutions that can handle the increased data volume. To fulfill these market demands and adapt to new working conditions, SEH Technology has introduced its next generation dongle servers with USB 3.0. With its extensive capabilities, the next generation dongle servers will satisfy customer demands for increased performance and functional product design. Flexible chassis channels data streams in data centers SEH replaces both models of the USB Dongleserver family with brand-new versions: the dongleserver Pro replaces the myUTN-80 while the dongleserver ProMAX fills the shoes of the myUTN-800. The updated hardware combines the best of the previous generation with innovative improvements, which have been identified in detailed customer interviews as well as market analyses. Leading dongle manufacturers have pushed the first USB 3.0 dongles onto the market. Thus in order to fulfill customer requests and be future-proof, the new SEH models feature USB 3.0 SuperSpeed. Completely new CPUs assure that this standard can be used to the fullest potential, meaning USB 3.0 dongles with integrated storage can now be embedded perfectly. The RJ-45 network connectors have been moved to the back, to ensure installation in office environments as well as in data centers is much easier. This design change assures that the new dongle servers fit perfectly into rack wiring management and changes are no longer required. The new rack mount kit allows for optimal installation of the dongle server Pro into a rack and its “push to open” technology provides easy access for regular handling and maintenance. The dongleserver ProMAX can also be installed into a rack immediately and extended with the RMK3 for ultimate usability. Low-maintenance bodyguard for maximum security The entire USB communication between client and dongle servers can now be encrypted. Whereas before only payload was encrypted, control and protocol data are now protected from illegal access as well. In addition, it is easier to configure the encryption—previously it had to be activated for each port individually, now it’s one click. The USB port key feature has also been redesigned. Formerly, only one key could be assigned to a port and then had to be entered in order to unlock the port and use the connected USB dongle. Now not only two keys can be assigned to one USB port, but each key also supports a time slot. This feature accommodates mainly Software-as-a-Service (SaaS) providers who use them to provide automated time restricted access to dongle-based applications such as demo versions or accounting software. Read more: SEH TECHNOLOGY LAUNCHES NEW DONGLE SERVERS FOR VIRTUALISATION AND OUTSOURCING IN THE DIGITAL AGE ### ROHM WITH NEW 2.8W HIGH POWER SPEAKER AMP ICS FOR ADVANCED INSTRUMENT CLUSTERS ROHM recently announced the AEC-Q100 qualified 2.8W output Class AB monaural speaker amplifiers the BD783xxEFJ-M series (BD78306EFJ-M, BD78310EFJ-M and BD78326EFJ-M) ideal for instrument clusters – used in vehicles equipped with autonomous driving and ADAS. In recent years, technological innovations in the automotive field – such as autonomous driving and ADAS – require a greater variety of sounds, such as warning sound when departuring from the lane or for surrounding obstacles. As a result, even audio output systems in the instrument cluster are utilizing speaker amps to generate sound with an MCU, instead of relays that produce blinker sounds and electronic buzzers that emit warning sounds. However, until now it was difficult to ensure safe, stable sound output at loud volumes. ROHM developed the BD783xxEFJ-M series for vehicle clusters – requiring various sound outputs at high volume, including warning sounds, turn signals, welcome tones and voice guidance. Also, adopting a new type of over current protection (OCP) circuit provides protection against output shorts (damage due to accidental terminal contact) to deliver high 2.8W output that was difficult to achieve in the past, making it possible to deliver high 2.8W output. In addition to over current protection, built-in thermal shutdown and under voltage lock out (UVLO) ensures high reliability protection against abnormal conditions. Read more: ROHM WITH NEW 2.8W HIGH POWER SPEAKER AMP ICS FOR ADVANCED INSTRUMENT CLUSTERS ### Password Based Door Lock System Using Arduino SIMULINO UNO Security presents the primary challenge in today's modern society. Anyone has the ability to enter your personal residence at any moment in order to steal your belongings. In order to keep your home safe from burglars, you must ensure it is secure. A motor is installed on the door in this project to ensure that the door opens only if the password is correct. This project will help you understand the concept behind a relay. Relay functions as a mechanical switch for transferring very high voltage with control from a 3 or 5 volt signal using an npn transistor. Follow the circuit diagram to connect your hardware and then upload the hex file from the provided code to the Arduino Uno board. Password Based Door Lock System Using Arduino SIMULINO UNO (Code) #include #include // initialize the library with the numbers of the interface pins LiquidCrystal lcd(9, 8, 7, 6, 5, 4); const byte ROWS = 4; //four rows const byte COLS = 4; //four columns //define the cymbols on the buttons of the keypads char hexaKeys[ROWS][COLS] = { {'7','8','9','/'}, {'4','5','6','*'}, {'1','2','3','-'}, {'C','0','=','+'} }; byte rowPins[ROWS] = {3, 2, 19, 18}; //connect to the row pinouts of the keypad byte colPins[COLS] = {17, 16, 15, 14}; //connect to the column pinouts of the keypad //initialize an instance of class NewKeypad Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); const int LED_RED=10; //Red LED const int LED_GREEN=11; //Green LED const int RELAY=12; //Lock Relay or motor char keycount=0; char code[4]; //Hold pressed keys //================================================================= // SETUP //================================================================= void setup(){ pinMode(LED_RED,OUTPUT); pinMode(LED_GREEN,OUTPUT); pinMode(RELAY,OUTPUT); // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("Password Access:"); lcd.setCursor(0,1); //Move coursor to second Line // Turn on the cursor lcd.cursor(); digitalWrite(LED_GREEN,HIGH); //Green LED Off digitalWrite(LED_RED,LOW); //Red LED On digitalWrite(RELAY,LOW); //Turn off Relay (Locked) } //================================================================= // LOOP //================================================================= void loop(){ char customKey = customKeypad.getKey(); if (customKey && (keycount<4) && (customKey !='=') && (customKey !='C')){ //lcd.print(customKey); //To display entered keys lcd.print('*'); //Do not display entered keys code[keycount]=customKey; keycount++; } if(customKey == 'C') //Cancel/Lock Key is pressed clear display and lock { Lock(); //Lock and clear display } if(customKey == '=') //Check Password and Unlock { if((code[0]=='1') && (code[1]=='2') && (code[2]=='3') && (code[3]=='4')) //Match the password { digitalWrite(LED_GREEN,LOW); //Green LED Off digitalWrite(LED_RED,HIGH); //Red LED On digitalWrite(RELAY,HIGH); //Turn on Relay (Unlocked) lcd.setCursor(0,1); lcd.print("Door Open "); delay(4000); //Keep Door open for 4 Seconds Lock(); } else { lcd.setCursor(0,1); lcd.print("Invalid Password"); //Display Error Message delay(1500); //Message delay Lock(); } } } //================================================================= // LOCK and Update Display //================================================================= void Lock() { lcd.setCursor(0,1); lcd.print("Door Locked "); delay(1500); lcd.setCursor(0,1); lcd.print(" "); //Clear Password lcd.setCursor(0,1); keycount=0; digitalWrite(LED_GREEN,HIGH); //Green LED Off digitalWrite(LED_RED,LOW); //Red LED On digitalWrite(RELAY,LOW); //Turn off Relay (Locked) } Password Based Door Lock System Using Arduino SIMULINO UNO (Schematic Diagram) The key pad library for the arduino uno available in this link Keypad .This library is setup to do every function for the keypad . The simulation file for proteus 8  with arduino code can be downloaded from this link proteus simulation with code  This is very simple project . If you did not understood code please learn first AVR and it will be easy for you to understand arduino codes . you can learn AVR from this link https://www.electronify.org/learn-microcontrolleravr If you have any question or suggestion please comment below and do not forget to share this project . For another similar project visit here: Password Based Door Lock System Using Arduino SIMULINO UNO ### Selecting the Right Rigid-Flex PCB Manufacturer: Essential Criteria for Your Project Designing and conceptualizing an electrical project can be full of challenges, but what’s also quite challenging to handle is finding the right rigid flex PCB manufacturer that will handle your project to bring it to realization. That’s because only very professional rigid flex PCB manufacturers can produce high-quality rigid-flex circuit boards. Some manufacturers may promise too much but underdeliver in the end, and you don’t want that. In this article, you’ll learn the key criteria that can help you discern and select the right rigid-flex PCB manufacturer that can handle your electrical project from start to finish. The Perks of Securing a Deal with the Right Manufacturer Before we delve deeper into the topic of discussion, let’s cover first the perks of settling a deal with the right rigid flex PCB manufacturer. This section will cover the advantages that you will reap when you successfully secure a partnership with the right manufacturer. After all, knowing the advantages of a good deal or partnership should give you the necessary drive to pursue the ideal manufacturer. 1. Makes Way for Design Variations Choosing the right rigid flex PCB manufacturer can give way to design variations provided that they do customization services. As a result, you can provide specifics to your manufacturer regarding the PCB that will be utilized in your electronics project. They’ll be more than happy to provide you with design ideas on which PCB is the most practical to use on your device prototype. 2. Heightened PCB Quality and Cost Efficiency Securing the partnership of a professional rigid flex PCB fabricator ensures the best outcome of the PCBs that you’ll receive; resulting in high-quality PCBs arriving at your facility for use in your electronics design. In turn, high-quality PCBs ensure that your project’s prototypes will function properly. In addition to quality, securing a deal with an excellent rigid flex PCB factory can also save you some money and resources. Leave most of the work to your partnered manufacturer as they will source, procure, and manufacture the printed circuit boards for your project once you’ve managed to successfully negotiate with them. 3. Lessens or Eliminates the Likelihood of Design Flaws Assuming that your selected rigid flex PCB manufacturer can help you out with prototype designs; they can contribute to lessening the likelihood of encountering flaws in your design. Your manufacturer will carry out tests whether the design or prototype you’ve proposed is practical for use or isn’t. The manufacturer will let you know if one of the two outcomes happens. If the former, they will proceed further in assisting you in your project - manufacturing and further tests being notable steps they’ll take. If the latter case occurs, you’ll have to redesign or tweak your project’s design to make it less prone to design flaws. 4. Timely Completion of your Project Settling a deal or partnership with the right rigid flex PCB manufacturer also secures a timely completion of the PCBs for use in your project. They’ll give you a rough estimate of how long it will take for the PCBs to be completed and an estimated time of arrival when the circuit boards will arrive at your business address. Most of the time, the completion and delivery will be on schedule. If there are changes in the estimated time of your project’s completion, your partner manufacturer will let you know. How to Choose the Right Rigid Flex PCB Manufacturer? Now that you’re aware of the perks of settling a deal with the right rigid flex PCB manufacturer, let’s move on to knowing how to spot them. In this section, we’ll discuss the characteristics and traits that you need to see in a PCB fabricator or manufacturer and whether they are worth your time and money. Here are some of the characteristics that you could be settling a deal with the right rigid flex PCB fabricator: 1. Technological Capabilities and Experience If you are to find the ideal rigid flex PCB manufacturer, you would want to check whether the factories have access to advanced materials, the latest equipment, and the appropriate level of expertise to operate the equipment. Knowing that the manufacturer you plan to partner with has the technological capabilities and the right expertise ensures that the PCBs you’ll use for your prototype, and eventually products are designed and function as planned. In addition to their technological capabilities and expertise, be sure to check with the factory if they can handle your order volumes and timelines. Double-check with the manufacturer whether they are occupied with handling other orders by the time you plan to partner with them. The intent here is to ensure that they can handle your bulk PCB orders and have no interruptions that could delay their arrival. 2. Certified and Adheres to Industry Standards. The next criterion you’ll need to use in making an informed decision on selecting the rigid flex PCB manufacturer you wish to partner with is to check if they are certified. Certified factories and manufacturers can follow quality control processes and ensure that their products adhere to industrial standards. As a baseline, they should at least have quality certifications such as ISO 9001 and have operating procedures regarding inspection, testing, and the like. If you are working with specific niches such as aviation and others, they will need a specific certificate that allows the factory to operate for those types of clients. An example is AS9100D which are certifications that the manufacturer can produce aerospace or aviation equipment. 3. Excellent Communication Before, During, and After the Project Selecting the ideal rigid flex PCB fabricator must have the capability to communicate with their clients properly. The manufacturer must be capable of providing excellent customer support before, during, and after the duration of your project. Timely responses and excellently conveyed answers to your inquiries are key signs that you are dealing with a reputable manufacturer. 4. Access to Quality Materials The next criterion you’ll need to base on choosing the right rigid flex fabricator is that they need to have access to quality materials and components. Ideally, you would want a manufacturer that has a procuring or purchasing department that’s in charge of purchasing said materials wherein they will tap into their network of vendors and stores that could provide them high-grade materials. Settling with a manufacturer that has a way to procure quality materials for PCBs doesn’t only save you time because you aren't the one doing the negotiations in purchasing materials. But also, this saves you money because your manufacturer is doing the procurement which allows them to negotiate prices; and your end product which is your project will be less defective. 5. Can work with the Budget and Working Timeframe The last criterion that can act as a basis in selecting a rigid flex PCB manufacturer is to see whether they can work with the budget and the timeframe of your project. You will need to negotiate with the manufacturer to see whether they are fine with the budget you’ve provided and if they can handle your project within the provided time limit. Keep in mind that you might have to make budgetary and time-related adjustments to convince the manufacturer to collaborate with you. Otherwise, you might have to find someone else to handle your project if they can’t accept. The Right Manufacturer Makes for a Polished Project Selecting the right rigid flex PCB manufacturer can be a daunting process, however, if you utilize the criteria we’ve covered such as technological capabilities, certifications, and the like - you can narrow your list of choices to find the perfect factory or fabricator to partner with. Keep on narrowing your choices until you end up with the best options and then weigh the best manufacturers against each other to see which is the most advantageous choice. Once you’ve secured a deal with the right manufacturer, you can start reaping the benefits they can bring to your project, resulting in a polished and well-made prototype. ### SELPIC OFFERING PORTABLE PRINTERS AT 20% DISCOUNT ON THE EVE OF FATHER’S DAY Selpic is popularly known for its Portable Printers across the globe. The company recently announced Selpic P1, S1, and S1 Plus portable printers at an affordable price while carrying useful features. To celebrate Father’s Day, Selpic is offering a huge discount on Selpic S1 and S1+ portable printer at the ongoing discount extravaganza. The Selpic S1 is available at the reduced price of $199 and S1+ is available for $239. Both the handheld printers are a useful accessory that can help you to print text, images, QR codes, barcodes, graphics on any surface including wood, textiles, leather, ceramic, glass, walls, and carboards. These printers get easily paired with iOS and Android devices. Selic S1 houses a 40ml ink cartridge and can print 900 A4 appears with 5% ink coverage. The intuitive app allows you to easily print any graphic easily by aligning at the correct position and size. It supports multi-line printing which improves the speed and enables the ability to print menus and guest lists easily. Upon a single charge, Selpic S1 can work 6 hours non-stop and can remain on standby for 72 hours. It weighs only 260 grams. There are slight changes in the Selpic S1+ including the larger print head of 1.0″ which enables to print at the speed of 20~300 mm/s. IN layman terms, you can slide and print within a second at this speed. However, it carries same 40ml ink capacity cartridge which can print over 900 A4 appears. The portable printer features a 1200 mAh battery which can provide 6 hours of continuous usage. Read more: SELPIC OFFERING PORTABLE PRINTERS AT 20% DISCOUNT ON THE EVE OF FATHER’S DAY ### SELPIC P1 – THE WORLD’S SMALLEST HANDHELD PRINTER HITS INDIEGOGO FOR ONLY $99 Handheld printers are changing what we think we know about getting digital prints on an object/surface. They are allowing users to print whatever they want, from logos to pictures, on whatever surface they want, from clothes to books and merch, in a manner that we would have considered impossible a few years back. While they are super useful, these printers come in a fairly large size, which sometimes affects the kind of surface or object on which they can be used. To take out this little challenge, California based, leading smart printing products and solutions provider; Selpic is about to bring the world to a new height of disbelief, as they plan to unveil a brand new handheld, tiny, pen-like printer called the Selpic P1. The Selpic P1, which will be unveiled on INDIEGOGO very soon, is the world’s most portable printer pen,  small enough to fit in between the fingers and powerful enough to print anything on almost any surface. Measuring just 5.12 x 1.22 x  0.94 inches with about 0.4 pounds in weight, the pen-like handheld printer is ultra-lightweight and portable enough to be easily tucked into your pocket, bags, or lay on your table without taking up space. The small size and easy handling associated with the printer make it super versatile and easy to use on almost any object and surface, from Paper, metal, and textiles, to plastics, wood, leather, and other porous materials. The meter is also uniquely powerful, making it possible to print texts, photos, logos, barcode, QR code on these surfaces by simply moving it over the surface. Read more: SELPIC P1 – THE WORLD’S SMALLEST HANDHELD PRINTER HITS INDIEGOGO FOR ONLY $99 ### Signal Conditioners Offer Drop-in Sensor Solutions for Energy-Harvesting Designs Sensor data acquisition underlies many deeply embedded applications and plays a central role in the evolving Internet of Things (IoT). With the trend toward reliance on energy harvesting for power, sensor-based designs require increasingly effective solutions for processing sensor signals efficiently and accurately. Among available alternatives, specialized sensor-signal conditioning ICs such as those from Analog Devices, Maxim Integrated, and Texas Instruments offer a drop-in solution for sensor-signal acquisition. Sensors typically produce small signals that require amplification to boost the dynamic range of the signals, as well as compensation to correct for offset, temperature, and non-linearity response of the sensors themselves (Figure 1). To meet these challenges, designers can turn to a variety of digital and analog methods.   Figure 1: Integrated sensor-signal conditioner ICs combine analog signal paths with digital control features using dedicated digital-analog converters (DACs) to support excitation, compensation, and linearization required in sensor designs (Courtesy of Maxim Integrated). Sensor-signal processing Digital signal processing (DSP) methods offer a highly flexible alternative for sensor data acquisition. With a DSP-based approach, amplification, compensation, and correction all occur strictly in the digital domain after signal conversion by an analog-digital converter (ADC). With this approach, however, signals remain within a limited dynamic range, requiring more expensive, higher-resolution ADCs to achieve required precision levels. Furthermore, DSP methods shift design complexity to digital systems, resulting in higher memory requirements and greater software complexity than many deeply embedded applications the IoT can easily support. In contrast, signal conditioning performed in the analog domain achieves sensor calibration and temperature compensation without incurring the error associated with digital processing of a quantized signal. Yet, discrete solutions can quickly become highly complex with increased sensor complexity and more demanding application requirements. For example, more complex sensor types, such as bridge sensors, require amplifiers be able to amplify the differential-input voltage and reject the common-mode input voltage. Accordingly, engineers working with these types of sensors need to take extra care to ensure use of matched resistors and amplifiers.   For more detail: Signal Conditioners Offer Drop-in Sensor Solutions for Energy-Harvesting Designs ### SIMPLE ADAPTER BOARD TURNS A USB-C POWER SUPPLY INTO A VARIABLE VOLTAGE SOURCE Being able to turn a USB-C supply to a variable power supply is certainly a big deal for a simple ingenious board like the ZY12PDN board shared by Keneth Finnegan on his twitter handle recently. The ZY12PDN is a simple STM-powered adapter board that turns a USB-C supply to a universal power supply for almost any electronic device. We know that a USB-C, when it comes to power delivery, allows you to negotiate for 5, 9, 12, 15, 20 volts, with supply up to 100W which makes it possible to charge devices like laptops, phones, tablets, but the simplicity with which the ZY12PDN achieves it, brings lot of possibilities to the table. The ZY12PDN, a USB-C power delivery trigger board uses the USB-C power delivery protocols to negotiate the level of voltage you want. The ZY12PDN has an STM32 microcontroller that helps in negotiating for the PD protocol. It also has, on one of its sides, a USB-C connector and on another side, header pins, USB-A connector and landing patterns for screw terminals. Unlike some other USB power delivery adapters that need I2C communication for configuration, this power adapter board makes use of a push-button for setting the voltage you want to negotiate. “Finnegan” has created a video, that shows how the device works since the board does not come with any instructions. He explained that the board must first be configured anytime it is powered up with a sequence that helps to program the board, forcing it to stay powered-up in the desired mode. When connected, the USB power delivery uses a separate communication channel that automatically determines which becomes the supply and which the sink after which they negotiate the power profile they want to use in terms of voltage and current limits. Read more: SIMPLE ADAPTER BOARD TURNS A USB-C POWER SUPPLY INTO A VARIABLE VOLTAGE SOURCE ### SIMPLE FIXTURE DETERMINES LEAKAGE OF CAPACITORS AND SEMICONDUCTOR SWITCHES The circuit in Figure 1a comprises a voltage follower, IC1 , and the reference-voltage source of IC2. IC1 is an Analog Devices AD8661 op amp, which has a guaranteed input-bias current of no more than 1 pA and a typical input-bias current of 0.3 pA (Reference 1), and IC2 is an Analog Devices ADR391 precision voltage reference (Reference 2). The manufacturer trims the input offset voltage of this op amp not to exceed 100 µV, and the typical value is 30 µV. These properties suit this amplifier for observing self-discharging of almost any type of capacitor. The leakage currents of solid-tantalum capacitors and those having high-quality plastic dielectrics are well above the input-bias current of voltage follower IC1. The CUT (capacitor under test) initially charges to the reference-voltage level of 2.5V by connecting Point A to the output of IC2. Subsequently, at some convenient time, Point A disconnects from the source of the reference voltage. A DVM (digital voltmeter) measures the output voltage of the follower at some reasonable time. The measured voltage drop, VO, with regard to initial value, should be 0.1 to 0.5V. The leakage current, IO , is C×ΔVO /tMEAS , where C is the value of the CUT and tMEAS is the time between releasing the connection of the CUT to the 2.5V source and the instant of readout at the voltage drop of VO. The fixture also allows determining leakage currents of reverse-polarized diodes and of various switching devices in the off state, such as JFETs, MOSFETs, BJTs (bipolar-junction transistors), SCRs (silicon-controlled rectifiers), and IGBTs (insulated-gate bipolar transistors). In this case, the parallel combination of the DUT (device under test) and the added capacitor, CADD , replaces the CUT (Figure 1b). Read more: SIMPLE FIXTURE DETERMINES LEAKAGE OF CAPACITORS AND SEMICONDUCTOR SWITCHES ### SimScale is Teaching Electronics Engineers How to Test Designs with Cloud-based CFD SimScale is announcing a free webinar on 24th of January to teach electronics engineers how conjugate heat transfer simulation in the cloud can help better investigate the thermal response of electronic packaging. According to the Electrical and Electronic Manufacturing Market Briefing 2017 report from The Business Research Company (TBRC), the global electrical and electronics manufacturing market is expected to reach $3 trillion by 2020. In such an innovation-driven and competitive industry, engineers deal with increasingly stringent thermal requirements due to the rapid increase in high-power density electronics. Thermal integrity is one of the most important considerations for electronics packaging or enclosures that affect the product lifecycle. The thermal impact on the electronic packaging is a key factor in material selection, cooling and form-related decisions that eventually determine the weight, size, and cost of the final design. It is vital for designers to determine the heat signatures of their system. This can be done with the help of engineering simulation or computer aided engineering, saving weeks of design time and thousands of dollars in costs. Simulation, nevertheless, has been until recently expensive to use itself, and this a reason many engineers preferred to rely on hand calculations rather than invest over $40k in hardware and licenses of on-premises software. Cloud-based solutions have challenged the status-quo in recent years, however, and SimScale is one of the companies leading the democratization of computer-aided engineering. Based in Germany, the company makes very complex simulations easy and accessible to everyone around the globe. In a free 30-minute webinar on January 24th, SimScale’s CEO David Heiny will explain how conjugate heat transfer simulation with SimScale can help engineers better investigate the thermal response of electronic packaging by using only a web browser. This will allow them to troubleshoot and minimize their recurrent problems of electronics failure risks due to overheating. Read more: SimScale is Teaching Electronics Engineers How to Test Designs with Cloud-based CFD ### SKYLO PARTNERS WITH SONY SEMICONDUCTOR ISRAEL TO DEPLOY 5G-READY NARROWBAND-IOT CONNECTIVITY OVER SATELLITE Narrowband-IoT Connectivity over Satellite The partnership brings 5G-ready NB-IoT over satellite for the first time and delivers massive cost and interoperability advantages for the IoT industry Skylo, maker of the world’s most affordable and ubiquitous network that connects any machine or sensor, today announced a partnership with Sony Semiconductor Israel (Sony, formerly known as Altair Semiconductor). With the partnership, Skylo and Sony are the first to develop and deploy cellular IoT chipsets (branded “Altair”) that can connect via geostationary satellites and that leverage the standardized, 5G-ready, NB-IoT protocol. The partnership also makes significant contributions to 3GPP future specifications, which will help standardize and accelerate the adoption of NB-IoT over satellite. In addition, this innovative new use of Sony’s Altair cellular IoT chipsets dramatically reduces the cost for IoT applications to connect via traditional satellite networks; until the launch of this solution, satellite connectivity was cost-prohibitive and required custom-built protocols. Skylo, which was founded in late 2017 by foremost researchers including Dr. Andrew Kalman, is building an efficient, global NB-IoT network over satellite for millions of presently unconnected devices, machines, and sensors. Sony Semiconductor Israel is a leading provider of cellular IoT chipsets. Through this partnership, both parties have extended existing cellular IoT chipsets to communicate directly over Skylo’s hosted satellite network. Read more: SKYLO PARTNERS WITH SONY SEMICONDUCTOR ISRAEL TO DEPLOY 5G-READY NARROWBAND-IOT CONNECTIVITY OVER SATELLITE ### SKYTRAQ LAUNCHES TINY PX1122R MULTI-BAND RTK GNSS MODULE, ENABLING CENTIMETER ACCURACY A couple of years ago Skytraq launched the NavSpark mini, a tiny (17x17mm) GPS module, that sold for $6. However, the company has now launched an even smaller module called Skytraq PX1122R, which  measures at just 16x12mm, and offers support for GPS, Galileo, GLONASS, and Beidou signals, as well as Real-time Kinematic (RTK) relative positioning technique that enables 1-3cm positioning accuracy. The Skytraq PX1122R RTK GNSS module key features a SkyTraq PX100 Phoenix GNSS chipset. It Supports GNSS standards & bands – GPS L1/L2C, Galileo E1/E5b, Beidou  B1I/B2I, GLONASS L1/L2, QZSS L1/L2C. Its Integrated RTK offers 1cm + 1ppm RTK accuracy in seconds (under 10 seconds),  enhancing the precision of position data derived from satellite-based positioning systems. The module enables Up to 10Hz quad-GNSS RTK update rate. The module also enables Base or rover, which have a mode configurable. The module offers 3V LVTTL level for serial interface, 24x castellated holes with UART, RF input, 1PPS, Reset, 3.3V, GND (most pins not in use). Input Voltage clocks at 3.3V DC +/‐10%, while consuming 50mA of current. It is 16 x 12.2 mm in dimension, and weighs 1.7 grams, with a temperature Range of ‐40°C ~ +85°C. Application to the module’s centimeter-level precision includes: agriculture, machine control guidance (UAV), survey and GIS data collection, structure, and deformation monitoring. RTK applications need a base and a rover. The base can be a third-party RTK base station service, or a configured PX1122R module. The PX1122R module is also suitable for PPP services like OPUS, AUSPOS, CSR-PPP. This functions by presenting a dual-frequency RINEX log file converted from carrier phase raw measurement log file of a single PX1122R. Read more: SKYTRAQ LAUNCHES TINY PX1122R MULTI-BAND RTK GNSS MODULE, ENABLING CENTIMETER ACCURACY ### Smart Electricity Meter with Energy Monitoring and Feedback System for Theft Detection The project is basically to detect the theft from the energy meter used in households as well as in... Description The project is basically to detect the theft from the energy meter used in households as well as in the commercial sector. There is two based meter one for distribution line and one for the consumer side. Whenever the distribution line load reading does not match the consumer side reading; that means there is some kind of power leakage in between distribution and consumer line, leads to deference in energy readings, and theft will be detected. When the theft will occur, a notification will be sent to the app and consumer side power will be cut off. The data send to the Blynk Application Dashboard and display's the Voltage, Current, Power & total unit consumed in kWh with theft detection alert. https://youtu.be/-jI_iEl2B2o Project Used Hardware ESP32, ACS712 current sensor module, ZMPT101B voltage sensor module, Relay module, Connection Wires Project Used Software Arduino, Blynk IoT platform Project Hardware Software Selection I need to select the current sensor as well as the voltage sensor so that the current & voltage can be measured and thus I can know about the power consumption & total power consumed for theft detection with the help of ESP32 and IoT Blynk platform. ESP32: ESP32 microcontroller module offers a built-in Wi-Fi feature which is ideal for IoT projects since the project is based on the same. ZMPT101B: ZMPT101B is a high-precision voltage Transformer I use to measure the accurate AC voltage. ACS712: ACS712 is a fully integrated, hall effect-based linear current sensor use to measure the alternating current in this project. Relay Module: The relay module is used as a switch for the mains power line. It is controlled by ESP32, when theft is detected, the relay activates and cuts the mains power. Circuit Diagram Consumer side meter Schematics same for the Distribution side except for Relay (only use on the consumer side). Current Sensor & ZMPT101B Voltage Sensor VCC is connected to Vin of ESP32 which is a 5V Supply. The GND pin of both the modules is connected to the GND of ESP32. The output analog pin of the ZMPT101B Voltage Sensor and Current Sensor is connected to ESP32. The voltage sensor is connected in parallel with mains and the Current Sensor in series, also the relay as a switch for the output. Source: Smart Electricity Meter with Energy Monitoring and Feedback System for Theft Detection ### SPARKFUN LAUNCHES SPARKX QWIIC COMPATIBLE BOARD TO ENABLE STEPPER MOTOR CONTROL SparkFun has announced another experimental SparkX board design, which enables higher motor control on a Qwiic-compatible I2C bus, with support for a built-in emergency stop button, and the capability to drive motors requiring up to 2A. The Qwiic Step is the latest of SparkFun’s entry in the SparkX board family, which are ranges of experimental designs marketed as fully-operational devices, but without guaranteeing them being manufactured regularly in the company’s range, following the release of the Qwiic GPIO add-on board and BlackBoard C Arduino-compatible development board. The Qwiic Step is designed to enable additional functionality to a microcontroller’s I2C bus, which offers Simple control of stepper motors. The company gives explanations behind the idea of the board: Ever found controlling stepper motors confusing? There are a huge variety of wires to get connected right: power, motor coils, and control lines. And the tiny screwdriver to adjust the terminals is never where it should be. Qwiic Step simplifies the tangle. Just connect your motor to Qwiic Step using the ergonomic latch terminals, apply 8 – 35V to the barrel jack, and plug in Qwiic Step to your favourite RedBoard with a Qwiic cable. The company continues: Qwiic Step comes preprogrammed to accept simple I2C commands, handling all the complex stepper motor calculations and control. This firmware leverages the AccelStepper library to fine tune each step of the motor. The speed, acceleration, position, and micro-step mode can be configured by the user. Additionally, the hold and run voltage of the motor is adjustable. This allows the user to specify maximum hold and run currents. Read more: SPARKFUN LAUNCHES SPARKX QWIIC COMPATIBLE BOARD TO ENABLE STEPPER MOTOR CONTROL ### SPARKFUN’S USB TYPE-C 5-20V 5A POWER DELIVERY BOARD FEATURES QWIIC CONNECTOR USB Type-C introduced significant changes to the USB standard. The reversible connector eliminated the issue of trying to plug the connector in the right way every time. Another issue it addressed was allowing the flexibility to have USB power with an adjustable USB voltage from anywhere between 5V and 20V and up to 100W of power. The SparkFun Power Delivery Board takes advantage of the power delivery standard with the use of a standalone controller from STMicroelectronics, the STUSB4500. SparkFun has now introduced a new method for powering your projects. This is possible through the flexibility of the USB Power Delivery Standard, which is a standalone USB Type-C power board with three configurable power delivery profiles. Xtopher from SparkFun says Traditional power adapters can provide a wide range of current but the voltage stays fixed at 5V.” The company say “With the SparkFun Power Delivery Board’s USB-C connection it has the ability to achieve higher voltages, typically 5-20V and up to 100W of power. The Power Delivery Board uses a standalone controller to negotiate with the power adapters and have them switch to a higher voltage other than just 5V. This uses the same power adapter for different projects rather than relying on multiple power adapters to provide different output voltages. SparkFun Power Delivery Board is based on an STMicroelectronics STUSB4500 USB Power Delivery controller, which enables the negotiation of power delivery without an external microcontroller. However, SparkFun states that a microcontroller is still required for configuration, with the settings being stored in a non-volatile storage space on the controller itself. The controller board consists of input and output voltage ranges of 5-20V, with output current clocking up to 5A across three user-configurable power delivery profiles. It has a full USB Type-C Rev. 1.2 and USB Power Delivery Rev. 2.0 certification, and enables integrated VBUS voltage monitoring and PMOS switch gate drivers. Apart from its solderable pin headers, available also is a singular 3.3V Qwiic connector for solder-free connection into SparkFun‘s quick-connect I2C ecosystem. To configure the board, you will need the I2C bus. The Qwiic system makes it easy to connect the Power Delivery board to a microcontroller to set the NVM parameters to power your project via the Qwiic connector. Depending on your application, you can also connect to the I2C bus via the plated through holes for SDA and SCL. Read more: SPARKFUN’S USB TYPE-C 5-20V 5A POWER DELIVERY BOARD FEATURES QWIIC CONNECTOR ### Spell out affection for your Valentine with chocolates, LEDs, Attiny13 and Arduino IDE Well, sure, you could have put a post-it note with the same message inside that chocolate box :)  but it won't be nearly as cool, especially if your Valentine has a sweet spot for nerds. Come to think of it: of course she does, otherwise what is she doing still hanging out with you? If you are still reading this, I have to assume that the matter of "why-oh-why?!" has already been settled and you have decided to go a slightly harder but much cooler way of delivering the message: you will build a POV (Persistence Of Vision) display  inside that chocolate box which will spell “I HEART U”  when shaken (not stirred!). I would estimate start-to-finish time when you have all the parts ready to be about 1.5-2 hours. Here are the parts you will need: A box of chocolates with a transparent cover. I used the 2012 vintage Ferrero Rocher chocolate box. They failed me in 2013 - their Valentine's Day gift boxes were neither plastic nor did they have a transparent cover this year Atmel ATtiny13 MCU 6 x red LEDs 1 x tilt switch (a.k.a. ball switch, a.k.a. shake sensor) 1 x 14-pin IC socket 3 x 22 Ohm resistors 1 x 470K Ohm resistor CR2032 or similar 3V battery a holder for the above mentioned battery about 3' of thin red hookup wire (30AWG is perfect size) Please see the image with parts that I marked up below and I also have a more extensive explanation of the parts that have been chosen for the project on the POV display post on my blog Step 1: How does this work? POV displays use the LEDs uncanny ability to go from OFF to full brightness in a matter of microseconds (try that, incandescent bulb!) coupled to the human beings' pathetic slowness in reacting to the world changing around us. Visual events happening within approximately 1/30th to 1/20th of a second (33 ms - 50 ms) from one another are all jumbled together in our slow brains and we "see" (i.e. perceive) them as one. So, next time someone says: " it's all a big blur to me",  don't ridicule them. It's exactly how you waddle through your life, too, even on the clearest of days! So, the big goal is to light the LEDs 102 times in a  very particular sequence while your hand moves the chocolate box and provides the so called mechanical scanning of the columns of the dots that the image is comprised of. Why 102? I decided to base the design on the smallest and cheapest of the Atmel AVR microcontrollers - ATtiny13 and the amount of program storage is already pushing the memory limits of the little chip. After some experimentation I have settled on the pattern that involves 17 columns of 6 dots  (LED flashes) - hence 17x6=102 individual flashes that have to be completed in 50ms. This is the very basic calculation which you start any POV display project with: how many events you can "jam" into the time window of one smallest human timeframe - 50ms. Unlike many (most?) POV displays you've come across, our little POV display has another limitation because ATtiny13 has only 5 input/output lines (well, OK, it does have 6 but the last one is used as Reset and if we take is as an I/O, we won't be able to re-write the program without a high-voltage programmer).  Since we cannot have one LED per one output and light all 6 LEDs that make one column at once, we need to scan LEDs over time, i.e. light them one by one but still so quickly that all 102 flashes fit within the mandatory 50ms timeframe. This is why  timing becomes very critical in this project and it's very important to use the brightest red LEDs you can find - certainly go for 5000mcd+ brightness - because each LED only has 1/102 of the frame time to shine and still register in your brain. There's also another feature of this project that made it particularly interesting to me. Again, unlike most POV displays out there,  mechanical scanning for this Valentine's POV display is severely limited by our limbs' construction ( humans are just NOT very well suited to interface with electronics, I tell ya!). Since we don't have joints that rotate 360º (wouldn't that be something!), all we can muster is a reciprocal movement back and forth, However, the message we are trying to write should be read only left-to-right. In other words, the message should be only shown on the movement of your (or your Valentine's) hand from left to right and not  on the way back. I guess, "U HEART I" is also kinda sweet but not grammatically correct. By the way, I keep spelling HEART as a word but I'm sure you understand I actually mean the symbol in the shape of a stylized heart which is possible to show on the screen of your browser but Instructables' editor is preventing me from using HTML characters, such as ❤ which is what I actually need to show the heart symbol. I am telling you this because, unlike the word "HEART"  the actual heart symbol is symmetrical on its vertical axis and it would look OK as a mirror image, and so would the letters "I" and "U". However, I was thinking of using this display for other messages, too, such as "I HEART NYC" for example and in that case it would have been even more important to eliminate mirroring of the message on the way back. Ball tilt switch to the rescue! This cheap and simple little device has a dual use in this project.  We use it to wake the ATtiny13 from the battery-saving sleep and we also position it just the right way so that it closes contact every time your hand starts decelerating from the way back (right-to-left) and into accelerating on the way forward (left-to-right) For more detail: Spell out affection for your Valentine with chocolates, LEDs, Attiny13 and Arduino IDE ### Spotted Gecko Habitat Temperature Monitor/Thermostat W/Arduino & ESP8266 ESP12 Soooo....Wifey decided that it was time for a new pet. Spin the wheel....A Spotted Gecko!! Well, Geckos are apparently very temperature sensitive creatures so we invested in a UTH (Under Tank Heatpad) for those of us that are new to the world of reptiles. The purpose of said UTH is to provide warmth from below, to about 1/3rd of his enclosure...in this case a 10 gallon aquarium for the time being. The geckos like their bellies warm when they sleep from what I understand. This UTH only has ON/OFF and no temperature regulation. The thought of needing to check it every hour 24X7 and turning it on or off depending on his comfort wasn't gonna happen (nothing personal Mr. Gecko but 'been there done that' with my own human babies 20 years ago, please no more)...sooooo...ENTER ARDUINO and ESP8266 (and a few other goodies)! Automation of the temperature monitoring and regulating, and hosting a web page to display the current temperature statuses to any internet browser. Mr. Leonardo Gecko is happy...as am I! https://youtu.be/P9-Z1zm9V40 Step 1: What's Needed Substitute as needed for your individual requirements/parameters. Links to products are only for examples and not promotion. I did not use a resistor for the DS18B20. Please use your own judgement. 1. ESP8266 ESP12 NodeMCU SOC 2. Relay 3. DS18B20 Temperature Sensor 4. HeatPad (UTH) 5. NodeMCU Base Jumpers, USB Micro Cable Step 2: Software Setup - Initial (Assuming Arduino IDE Is Already Installed) We will also assume that you are familiar/comfortable with utilizing Arduino libraries. All libraries should be available via github for free, if not already installed in your IDE. You'll be needing the following libraries/etc: OneWire.h OneWire Library Download DallasTemperature.h DS18B20 Library Download ESP8266WiFi.h (ESP8266 IDE Library) ESP8266WebServer.h (ESP8266 IDE Library) If you do not have the ESP8266 libraries...head over here for the full details and install steps: ESP8266 Core OneWire Address Finder 1 Wire Address Finder You will be needing this to determine the unique address of your DS18B20 sensor(s). Step 3: Hardware Setup For this section, the steps explained are based on my setup. Adjust as needed. DS18B20=sensor Install NodeMCU board onto Node Base. (confirm the correct orientation by antenna locations matching on each or pin numbers matching if listed on base) Install female terminator connections on sensor(s). (I snipped, stripped, soldered and wrapped jumpers to the DS1820B's lines) Attach Posi of both sensors to same 3.3v rail on Node Base. (Assuming 2 sensors are present. If only one, then connect just the one) See Pic. Attach Neg of both sensors to same ground rail on Node Base. (Assuming 2 sensors are present. If only one, then connect just the one) See Pic. Attach Data of both sensors to same pin D3 rail on Node Base. (Assuming 2 sensors are present. If only one, then connect just the one) See Pic. Identify the DS18B20(s) unique device address: Temporarily disconnect one of the sensors from the NodeMCU. Follow the steps provided here:DS18B20 Device Address Finder It looks like a lot of steps but really is rather quick and painless...and DEFINITELY necessary. Mark the current sensor in some manner (piece of tape, etc) for later identification to match to address. Power off your Node and repeat step 1 with additional sensor(s) is needed. Reconnect all sensors as described in initial steps above. Step 4: Time to Check Some TEMPS! Assumptions/Pre-Req's: You have obtained and installed all necessary libraries from the Software Setup step of this Instructable. You have obtained the unique device addresses(s) of the sensors from the Hardware Setup step. Make/Confirm all connections and power up your Node. Load the attached NODE_DS18B20_Gecko_WEB_SHARE_12Aug17.ino I have called out via OBNOXIOUS comments in the source...all of the fields that need changing. Modify the code with your unique specific details for the following at the least: Your Network SSID and SSID Password DS18B20 device address(s) obtained in previous step. TCP Port (default is 80, the code is set to 6969 at this time) COMPILE! (I usually start praying at this point for no errors). Load it to your Node. Open Serial monitor. With any luck you are seeing data here, hopefully with temperatures. Force a Temp. change on the sensor probe to see if it is in fact fluctuating. Take note of the field names being displayed and personalize the source accordingly. Open a web browser to http://123.456.789.123:2017 (This was an example) EG - Mine loads with http://192.168.1.23:6969 Take note of the field names being displayed and personalize the source accordingly. Step 5: It's RELAY Time...SHOCKING! See what I did there? Relay...Electricity...SHOCKING. OK...nevermind! Haaaaaaa BE CAREFUL NOW. ELECTRICITY IS SERIOUS BUSINESS...NO KIDDING! When I work with relays, I mod an extension cord instead of risking harm to the wires of the 'device to be controlled'. For detailed steps on that process, head here first. (Added "how-to bonus" included in video) How to safely mod extension cord to attach to relay. Depending on your project requirements, the power connection has 2 options on the relay, 'Normal Open' or 'Normal Closed'. Consider your implementation for how to wire. "Will this only be turned on occasionally?" "Will it be on a lot?" "When do I want it to turn on or off?" etc... Modify your source code (IF statements in LOOP) with some high/low temperature thresholds.You may also need to change the logic depending on the relay wiring and your decisions. (Flipflopping the pin's HIGH and LOW setting). Trial and Error...Experiment...that is half the fun in learning here. (Without hurting yourself or anyone/anything in the process of course) Modify the Relay Data pin assignment in source to match the physical connection. Mine is D8. Connect everything up and take your project for a spin!! Relay Posi to Node 5v. Relay Neg to Node Ground Relay Data to Node D8. (Or your data pin) In my specific case, we have the relay connected to a UTH (UnderTank Heatpad) for our Gecko. One of the DS18B20 sensors is securely/safely laid flat against the substrate inside his enclosure. The Arduino logic is set for the UTH to turn off if temp>94 and turn on if temp<88. The second sensor is on the opposite side of the enclosure suspended/dangling to simply report air temp. We will attach the Hoodlight RED bulb to a second relay to turn on if air temp<70 and turn off if air temp>78. Source: Spotted Gecko Habitat Temperature Monitor/Thermostat W/Arduino & ESP8266 ESP12 ### How to Use the RPLIDAR 360° Laser Scanner With Arduino I enjoy creating sumo robots and am constantly searching for innovative sensors and materials to improve the speed and intelligence of my robots. I discovered the RPLIDAR A1, available for $99 on DFROBOT.com. I mentioned my interest in testing the sensor, and they offered me the opportunity to test it out. Once I obtained the LIDAR, I discovered that it is too costly to be used in the upcoming competition I intend to participate in. In this tutorial I'll give you a basic understanding of how this sensor works and how you can use it with an arduino. https://youtu.be/L1iulgiau0E Step 1: LIDAR What? Wikipedia had two different meanings for LIDAR:- LIght Detection And Ranging- Laser Imaging Detection And Ranging In general it can be seen as a distance sensor on a rotating base, which samples range data while continuously rotating. For each successful sample the measured distance is sent with the according angle.In this case the data is sent over UART. Step 2: Using an Arduino to Interface With the LIDAR The connection between the LIDAR and the Arduino's hardware serial port (UART) must be established, which prevents the UART data from being sent to the serial console in a simple Arduino setup. Because they only have one Serial port. An additional software serial port can be added to improve basic Arduino models with only one hardware serial port. The library described in this manual does not yet offer assistance for a software serial port. To debug and send serial data to the serial console, you will need an Arduino with multiple Serial ports. Examples include: Arduino Mega, Arduino M0 / Zero using SAMD21 chipset. If there is no need to upload information for debugging purposes, you have the freedom to choose any Arduino board. In this manual, I will showcase a more sophisticated version of Arduino - the Arduino M0 / Zero, which is equipped with the SAMD21 microcontroller. Needed components: Arduino M0 ebay link Breadboard ebay link jumper wires ebay link 5V power supply ebay link 24 Led ring ebay link First you'll need to install the RPLIDAR library from robopeak:https://github.com/robopeak/rplidar_arduino, this library offers 2 interesting examples on how to use the LIDAR. You can find more information on how to install a library in the arduino IDE in this article: https://www.arduino.cc/en/Guide/Libraries Now open the "simple_connect" example code that is included in the library. Make the necessary hardware connections from the LIDAR to the arduino:- Connect the RPLIDAR's serial port (RX/TX/GND) to your Arduino board (Pin 0 and Pin1)- Connect the RPLIDAR's motor ctrl pin to the Arduino board pin 3- Use an external 5V power supply to power the motor control pin and the LIDAR. In the void setup you'll have to change following code: "lidar.begin(Serial);" according to the used serial port. When using an Arduino M0 you should change "Serial" to "Serial1". This can be different for other Arduino's. The first picture is what the example sketch should look like, lines 60-63 contain the variable names which you can use to get the data from the LIDAR. If you want to know what this data looks like you can print this data to the serial monitor, with the code in the second picture. In the following step we'll make a very basic working project with the LIDAR and a LED ring. Step 3: Making the LIDAR LED Ring Project For this task, we will attach a controllable LED ring to the LIDAR. In this manner, we are able to represent the LIDAR information graphically. In this particular program, the LED will be activated towards the nearest detected signal. Watch this video at the following link: https://youtu.be/L1iulgiau0E The project's code is derived from a sample provided by robopeak. https://github.com/robopeak/rplidar_arduino/tree/m... The changed code for this project is included in the zip file in this step. Needed parts: - LED ring: with 24 LEDS big enough to fit over the LIDAR, inner diameter 70mm- Arduino Zero- LIDAR- Separate 5V power supply- 3D printed part: https://www.thingiverse.com/thing:3185216 Get all the needed parts Solder the wires to the LED ring Glue the LED ring to the 3d printed part Mount the 3D printed part onto the LIDAR, there are holes in the 3Dprinted part for M2.5 screws but I didn't had them laying around to I just used hot glue Connect the wires from the LIDAR to the arduino:GND -> GND5V -> 5V of separate power supplyDi -> pin D5 of arduino Upload the sketch and power up the external power supply Final result can be viewed here on youtube: https://www.youtube.com/watch?v=L1iulgiau0E Source: How to Use the RPLIDAR 360° Laser Scanner With Arduino ### STM32WB0 MCU Series: The Future of Bluetooth Low Energy 5.3 Wireless Connectivity The STM32WB0 microcontroller series allows for reliable wireless connectivity through a compact and energy efficient design. Certified to the Bluetooth Low Energy 5.3 standard, the STM32WB0 provides an outstanding wireless radio and low-power capabilities that make it well-suited for wireless applications where cost and energy efficiency are priorities. What the STM32WB0 offers The STM32WB0 offers high performance wireless connectivity through its best-in-class radio, providing robust and stable connections. It features an Arm Cortex-M0+ core that operates at 64 MHz along with 512 KB of flash memory and 64 KB of RAM. Wireless performance is certified and modular stacks developed by ST are robust and well-maintained. High data transfer speeds of up to 2 Mbps ensure fast and reliable transmission of data. The state-of-the-art radio delivers excellent sensitivity of up to -104 dBm and output power up to +8 dBm, along with direction finding support for accurate Bluetooth location solutions. Battery life is extended for IoT devices through the radio's high efficiency of 3.9 mA for transmission and 3.2 mA for reception at peak power, along with power control options. The Cortex-M0+ core consumes only 15.5 μA/MHz. Costs are lowered through an affordable price point. Integration is maximized through small packages including components like balun and capacitor-less 32 MHz crystals, reducing bills of materials and simplifying circuitry to allow for 2-layer PCBs. Development is streamlined using an extensive ecosystem that provides hardware designs, radio IPs, Bluetooth stacks, software, tools and resources. Product types The STM32WB09 microcontroller line, as the initial product in the STM32WB0 series, integrates ST's advanced 2.4 GHz radio IP to deliver outstanding wireless performance. The STM32WB09 line contains a highly efficient switched-mode power supply (SMPS) step-down converter that enables unrivaled battery life. Owing to its 512 KB flash memory, 64 KB RAM, along with intelligent peripherals such as the ADC and timers, the STM32WB09 can address basic to more sophisticated Bluetooth Low Energy applications in industrial and consumer markets. This wide range of capabilities makes it suitable for entry-level to complex wireless designs. Discover our portfolio ### STMICROELECTRONICS INTRODUCES STANDALONE VBUS-POWERED CONTROLLER FOR 5V USB-C CHARGING APPLICATIONS The STUSB4500L from STMicroelectronics is a small-footprint addition to the Company’s USB-C controller IC family designed and certified for pure 5 V sink-only applications. All mandatory features to use the USB-C connector as a 5 V universal power plug are integrated, allowing designers to implement USB-C charging solutions quickly and easily without studying the standard or writing code. USB-C is rapidly becoming established as a replacement for Micro-B or Mini-B plugs, for both power and data connections, as it offers the advantages of reversible orientation and greater robustness – up to 10,000 connect/disconnect cycles. ST’s new USB-C controller IC is a stand-alone, plug-and-play interface product, targeting low-voltage applications such as Bluetooth speakers, computer accessories, Wi-Fi access points, point-of-sale equipment, LED lighting, and USB dongles. It can also be used for powering equipment such as single-board computers and hardware development kits. The controller IC runs without additional code and requires no external support from the microcontroller, which eases adoption of the USB-C connector standard by saving time-consuming design work. The STUSB4500L is auto-powered via VBUS from the connected source and does not need to be supplied from a local battery or on-board power. Zero leakage current prevents draining the battery when not charging. Input over-voltage protection prevents low-voltage equipment being damaged if it is incorrectly connected, for example, to a 20 V source from a USB PD AC adapter rather than the required 5 V supply. Further features include ‘dead-battery’ support to ensure correct identification by the source when the battery is fully discharged, true cold-socket implementation which keeps the VBUS switch open by default until safe 5 V input power is supplied, source power-budget identification and error-recovery support to ensure correct re-starting when a fault is triggered. Read more: STMICROELECTRONICS INTRODUCES STANDALONE VBUS-POWERED CONTROLLER FOR 5V USB-C CHARGING APPLICATIONS ### STMICROELECTRONICS STM32H7A3/7B3 LINES OF MICROCONTROLLERS INCLUDE AN ARM® CORTEX®-M7 CORE The STM32H7A3/7B3 lines of microcontrollers include an Arm® Cortex®-M7 core (with double-precision floating point unit) running up to 280 MHz. The STM32H7A3/7B3 MCU lines provides 1 to 2 Mbytes Flash memory, 1.4 Mbytes of SRAM with the following architecture: 192 Kbytes of TCM RAM (including 64 Kbytes of ITCM RAM and 128 Kbytes of DTCM RAM for time-critical routines and data), 1.18 Mbytes of user SRAM, and 4 Kbytes of SRAM in backup domain to keep data in the lowest power modes and 64- to 225-pin packages in BGA and LQFP profiles. Performance 280 MHz fCPU/, 1414 CoreMark /599 DMIPS executing from Flash memory, with 0-wait states thanks to its L1 cache. L1 cache (16 Kbytes of I-cache +16 Kbytes of D-cache) boosting execution performance from external memories. Security STM32H7B3 MCUs include the following additional security features: Crypto/hash hardware acceleration On-the-fly decryption on Octo-SPI external serial flash memory Secure Firmware Install (SFI) embedded security services to authenticate and protect your software IPs while performing initial programming. Secure Boot Secure Firmware Update (SBSFU) Power Efficiency Dual-power domain architecture enables each power domain to be set in low-power mode to optimize power efficiency Embedded SMPS to scale down the supply voltage. It can also be used to supply external circuitry and can also be combined with the LDO for specific use cases 120 µA/MHz typical @ VDD = 3.3 V and 25 °C in Run mode (peripherals off) and SMPS 32 µA typical in STOP mode (low-power mode) 2.2 µA typical in Standby mode (low-power mode) 0.74 µA typical in VBAT mode with RTC (low-power mode) Graphics LCD-TFT controller interface with dual-layer support Chrom‑ART Accelerator™ boosts graphical content creation while saving core processing power, thus freeing up the MCU for other application needs Chrom-GRC™ optimizes RAM use JPEG hardware accelerator for fast JPEG encoding and decoding, off-loading the CPU Read more: STMICROELECTRONICS STM32H7A3/7B3 LINES OF MICROCONTROLLERS INCLUDE AN ARM® CORTEX®-M7 CORE ### STTS22H – LOW-VOLTAGE, ULTRA-LOW-POWER, 0.5 °C ACCURACY I2C/SMBUS 3.0 TEMPERATURE SENSOR The STTS22H is an ultra-low-power, high accuracy, digital temperature sensor offering high performance over the entire operating temperature range. The STTS22H is a band gap temperature sensor coupled with an A/D converter, signal processing logic and an I²C/SMBus 3.0 interface all in a single ASIC. This sensor is housed in a small 2 x 2 x 0.50 mm 6-lead UDFN package with exposed pad down for a better temperature match with the surrounding environment. The STTS22H is factory calibrated and requires no additional calibration efforts on the customer side. Features Key features Integrated high-accuracy temperature sensor Factory calibrated One-shot mode for power saving Electrical specifications Supply voltage: 1.5 to 3.6 V I²C, SMBus 3.0 with ALERT (ARA) support Programmable thresholds with interrupt pin Supports up to 1 MHz serial clock Up to 2 I²C/SMBus slave addresses Ultra-low current: 1.75 µA in one-shot mode Sensing specifications Operating temperature -40 °C to +125 °C Temperature accuracy (max.): ± 0.5 °C (-10 °C to +60 °C) 16-bit temperature data output Read more: STTS22H – LOW-VOLTAGE, ULTRA-LOW-POWER, 0.5 °C ACCURACY I2C/SMBUS 3.0 TEMPERATURE SENSOR ### Synchronized 2-Axis Motion With Variable Speed (Arduino + LEDs + 28BYJ-48) https://youtu.be/IiEz_sJd45E This tutorial shows how to move two stepper motors so they will synchronously arrive at defined destination point. There are many sophisticated solutions for doing this such as GRBL or Marlin. Using an Arduino, there are also dedicated “Multi Stepper” libraries that can support you. However, we will use a more basic approach here making it as easy as possible while adding a simple user interface using either three LEDs and some microswitches. Supplies 1 Arduino Nano (or Uno, with 328P CPU) 1 Breadboard (830 Holes) 14 Jumper Cables (male-to-male, 10...20 cm) 12 Jumper Cables (male to-female, 10...20 cm) 2 LEDs (5mm, 20mA, around 2V) 2 Resistors (220 Ohm) 2 Microswitches 1 Potentionmeter (5 or 10 kOhm) 1 5V Power Supply 2 28BYJ-48 Stepper Motors (5V Version) + ULN 2003 Driver Boards Step 1: Configure Your Breadboard Set-up your breadboard as shown in the pictures above: Connect GND and 5V to the according rails of the breadboard. Pins D2 to D5 of the Arduino go to In1 to In4 of the first ULN2003 board. Pins D6 to D9 of the Arduino go to In1 to In4 of the second ULN2003 board. Pin D10 of the Arduino goes to the + leg (longer leg) of the first LED (red). Connect the shorter leg (-) to a 220 Ω resistor and the other end of this resistor to the ground rail. Connect D11 the same way to the second LED and its resistor. Connect the Arduino pins A0, A1, and A2 to the microswitches. Connect the other side of the microswitches to GND. We will not use any pull-up resistors to avoid short circuits here, because we use the pull-up that are already integrated in the Arduino. Connect the left leg of the potentiometer to ground, the right leg to 5V and the middle leg to A3 of the Arduino. The Arduino itself will be powered through the USB port during the first tests. Nevertheless, the motors should not be powered through the USB port. Hence, connect a separated power supply to plus/ground rails on the other side of the breadboard. Connect the + pin and - pins of each ULN2003 board to these plus/ground rails. As a last step, make a bridge between the both ground rails. Step 2: A First Test Now we can do a first test of our set-up and the included “user interface”. Open the Arduino IDE and load the attached “Two_Steppers_-_First_Test.ino” file. It should compile without any additional libraries. Most of the code is pretty self-explanatory. The setup() method is only defining which pins will be used for input and out actions and open the serial connection to the PC. The loop() method now will continuously perform the following sequence: Read the value of the potentiometer from the analog input, scale for displaying values between 0 and 100%, read the buttons and print the status all input elements to the serial interface. Switch on one LED on and the other off. Using two for-loops, move each motor approximately a quarter of a full rotation (8 * 128 = 1,024 half-steps per quarter rotation; a full rotation is usually 4,076 half-steps for the 28BYJ-48 motors). During the every second run of loop(), the steps will be done in forward direction. During the other runs, the motors will go back to the initial position. The core concept of moving stepper motors is to switch on and off the coils in the motors using the digital output pins. On the Arduino, they are represented by the PORTB and PORTD registers, where D2…5 (= motor 1) are the bits 2…5 of PORTD, D7…8 (first two wires that go to motor 2) are bits 6…7 of PORTD and D9…10 (second two wires of motor 2) are bits 0…1 of PORTB. Hence, the lines PORTB = (PORTB & B11111100) | stepPatternB[k]; PORTD = (PORTD & B00000011) | stepPatternD[k]; “save” the current status of all pins that are not related to the motors (AND operation) and then apply the output pattern for the next (half) step (OR operation). The 28BYJ-48 motors are discussed many other web-sites, so more details – if required – can be found here, here or here. After compiling and uploading the code, select “Tools → Serial Monitor” in the Arduino IDE. You should see the motors running, the LEDs (on the breadboard and the ULN2003 boards) blinking. The response to pressing (and holding) / releasing the microswitches and turning the poti will be plotted to on the serial monitor window. But: we are not finished yet, as the system only goes back and forth. So let's do some theory next. Step 3: Motion Theory Consider we have two stepper motors called “x” and “y”. Both start at a position of 0 degrees. “x” wants move 1,000 steps, while “y” should only go for 250 steps. Together they should move at a speed of a maximum of 100 steps per second, and they are expected to stop at the same time. Now, there are two major obstacles: If both steppers are starting with a speed of 100 steps per second, “y” will only need a quarter of the time of “x”. Consequently, we apply that “maximum demanded speed” only to “x” while we reduce the speed of “y” to 25 steps per second. Hence, after 10 seconds both axes will arrive simultaneously at their destination. Generalizing this case, we must always find the axis that has to travel more steps than the other, and then limit the speed of this axis byspeed(axis with more steps) =speed(defined by user) * steps(axis with less steps) /steps(axis with more steps). If we start both axis with their full speed as calculated in the previous step, the axis will be expected to move with this speed immediately which is impossible due to inertia and friction of the motor, of it’s integrated gears and of anything that is driven by the motor. Additionally, the 28BYJ-48 motors are not really powerful. Hence, they could easily lose steps if we start at full speed – or even worse, the integrated gears could be damaged if the load is to big, because they are made from plastic in the most cases. Thus, we should smoothly accelerate each motor in each motion. This can be easily achieved using the AccelStepper library as shown in the next step. For compensating resulting acceleration delays, we apply the formula above not only to the speed but also the acceleration value of each axis. Step 4: Install the AccelStepper Library Within the Arduino IDE, go to “Tools → Manage Libraries…”. Browse for the AccelStepper library, select the latest version and hit “Install”. During the installation, the IDE may ask for other libraries that are needed to run the AccelStepper library. If so, just acknowledge to install these dependencies, too. Step 5: “The User Interface” or “How Our ‘Machine’ Will Work” The objective of our set-up is to move both motors from a given start position to a given end point synchronously. The AccelStepper library will provide a smooth acceleration – but what are the buttons for? The buttons, the potentiometer and the LED provide a simple user interface. The left button toggles through 5 “menus”. Each time you press it, the next “menu” will be activated. After the fifth menu, it will go back to the first one again. The middle and right buttons move the motors within these “menus”. The potentiometer sets the speed for the next movement. Now, what are these “menus”? The table in the picture above gives an overview. Using menus 1…4, you can move the single motors around. The start/end positions will be handled as follows: If you move the motors within menus 1 to 4, you will modify the corresponding start or end position If you do not move the motors within these menus but just toggle to the next menu using the left button, the stored positions will remain unchanged. This entire concept might look confusing, but it gets much clearer once you will test it on the board with the code provided in the next step. As an outlook, the idea behind these menus is to replace the LEDs by a small TFT display, which is presented in an upcoming instructable. Step 6: Make It Run - the Proper Code Now compile the “Two_Steppers_-_Proper_Code.ino” file attached to this step. For details you may refer to the comments in the code, so I will just give a rough overview here. The setup() method initializes the stepper objects from the AccelStepper library and input/output pins of the Arduino. The loop() method manages the “menus”: In the (initially set) menu 0, it makes the LEDs flashing and waits for either a switch to menu 1 (left button) or the start of a forward (middle button) or backward (right button) by calling the executeMotion() method. Just after power-up, calling this method will have no effect, because start and end positions are all set to 0. Hence, you must switch to the subsequent menus first. In all other menus, the main loop will call moveAxisManually() which provides single axis movements for defining the start and end positions for each motor. The executeMotion() method moves both motors synchronously applying the “theory” from step 3 of this instructable. During the movement, both LEDs will be switched on after which both motors will accelerate to their calculated speeds. By callingstepper[0]->run(); stepper[1]->run(); in a while() loop as fast as possible, the AccelStepper library is generating the required pulses to the ULN2003 boards. This process will go on until either the target position is reached or the left button is pressed for cancelling the motion. Please note that the speed can be only changed using the potentiometer before the motion is started. The executeMotion() method is used in menus 1…4 for moving the motors for- and backwards in order to set the start and end positions. As in executeMotion(), the stepper pulses are generated in a while loop which will be only left if the backward (middle) or forward button (right button) is released. The method waitUntilAllButtonsAreReleased() is called after each movement to make what it says: in order to avoid confusing button states, it waits until the user releases all buttons before the next interaction can be started. Step 7: Final Test and Applications A demonstration of the completed “machine” is shown in the video on top of this tutorial where one motor goes for three quarters of a rotation while the other one travels only one quarter rotation. You can recreate this "machine" using the attached mask. Simply print it, glue it to some cardboard, cut at the marked seams and use duct tape to fix the ULN2003 boards and the motors to it. As a last step, cut-out the arrows and stick/glue them to the motor shafts. You are now able to move the two steppers synchronously to a target position. A follow-up tutorial will show how to make the “machine” portable, add a TFT screen and a proper housing, and how to feed it by a single power source. In a third tutorial, this device will be used as a control unit for an ultra-low-cost, light-weight 2-axis GoPro/smartphone slider. Source: Synchronized 2-Axis Motion With Variable Speed (Arduino + LEDs + 28BYJ-48) ### TDK ANNOUNCES THAT SMARTBUG™ INTELLIGENT MULTI-SENSOR IOT MODULE IS NOW AVAILABLE GLOBALLY TDK announces worldwide availability of the InvenSense SmartBug, a compact, wireless multi-sensor solution designed for a plethora of commercial and consumer IoT applications. The out-of-the-box solution enables quick and easy access to reliable and smart sensor data without the need for programming, soldering, or extra modifications. SmartBug is an all-in-one sensor module that integrates TDK’s 6-axis IMU (gyroscope + accelerometer) with magnetometer, pressure, temperature, humidity and ultrasonic sensors, and high-precision algorithms. These algorithms include sensor fusion, HVAC filter monitoring, asset monitoring, gesture detection, activity classification, air mouse monitoring and smart door open/close detection. The SmartBug module enables accurate and remote monitoring via both BLE and WiFi, and provides autonomous SD card data logging capability for IoT applications with large data volumes. With its small size, flat base and wireless features, the SmartBug is a perfect one-size-fits-all solution that can be stuck almost anywhere, from a simple door to an industrial robot, providing high-quality remote data collection. “SmartBug will make the process of gathering intelligent multi-sensor data very simple and effective,” says Sahil Choudhary, Product Manager, Motion and Pressure Sensors – IoT, InvenSense, a TDK Group Company. “This module is designed as the smallest complete IoT solution available to deliver quick and easy ‘smart sensor data,’ and is the perfect enabler for any product developer across consumer and commercial IoT applications.” Read more: TDK ANNOUNCES THAT SMARTBUG™ INTELLIGENT MULTI-SENSOR IOT MODULE IS NOW AVAILABLE GLOBALLY ### Teardown, Analysis and Repair of an Agilent E4407B ESA-E Spectrum Analyzer https://www.youtube.com/watch?v=gb1QMJtwumQ&feature=em-subs_digest In this episode Shahriar takes a detailed look at an Agilent (Keysight) E4407B ESA-E Spectrum Analyzer. The instruments reports an “Unlock LO” error message which prevents internal alignments from being performed. Before the repair process can begin, the firmware of the instrument must be updated. The firmware upgrade requires the installation of additional flash memory ICs which is presented in the video. The main processor board with its various components are also described in the video.   For mroe detail: Teardown, Analysis and Repair of an Agilent E4407B ESA-E Spectrum Analyzer ### TEXAS INSTRUMENTS ANNOUNCES 300-MA, LOW-DROPOUT REGULATOR WITH FOLDBACK CURRENT LIMIT Texas Instruments launches new low-dropout (LDO) linear regulator. The TLV740P is a low quiescent current LDO with excellent line and load transient performance designed for power-sensitive applications. This device provides a typical accuracy of 1%. The TLV740P also provides inrush current control during device power up and enabling. The TLV740P limits the input current to the defined current limit to avoid large currents from flowing from the input power source. This functionality is especially important in battery-operated devices. The TLV740P is available in standard DQN and DBV packages. The TLV740P also provides an active pulldown circuit to quickly discharge output loads. Features Foldback overcurrent protection Packages: 1-mm × 1-mm, 4-pin X2SON (preview) 5-pin SOT-23 Very low dropout: 460 mV at 300 mA Accuracy: 1% Low IQ: 50 μA Input voltage range: 1.4 V to 5.5 V Available in fixed-output voltages: 1 V to 3.3 V Read more: TEXAS INSTRUMENTS ANNOUNCES 300-MA, LOW-DROPOUT REGULATOR WITH FOLDBACK CURRENT LIMIT ### Telecommunication and Computer Networks: Speed Regulation of DC Motor Using DTMF Keypad Introduction In the realm of telecommunication and computer networks, the application of Dual Tone Multi-Frequency (DTMF) technology has extended beyond traditional telephony into diverse fields, including industrial automation and control systems. One intriguing application of DTMF technology is in the speed regulation of DC motors. This project, titled "Speed Regulation of DC Motor Using DTMF Keypad," explores how DTMF signals can be leveraged to control the speed of a DC motor remotely. This commentary will delve into the project's objectives, methodologies, technical details, and potential implications in various sectors. Objectives The primary objective of this project is to design and implement a system that allows for the remote control of a DC motor's speed using a DTMF keypad. The key goals include: 1. Integration of DTMF Technology: Utilize DTMF signals, commonly used in telephone systems, for motor speed control. 2. Remote Operation: Enable the remote operation of the DC motor, thereby providing flexibility and convenience. 3. Precision Control: Achieve precise control over the motor speed, ensuring reliable performance for various applications. 4. User-Friendly Interface: Develop an interface that is easy to use and understand, making the technology accessible to a broad range of users. Methodology System Architecture The project employs a combination of hardware and software components to achieve the desired control over the DC motor. The core components of the system include: Figure 1. Block diagram of remote speed control of a DC motor by DTMF Keypad 1. DTMF Keypad: The primary input device for the system, allowing users to send specific DTMF tones corresponding to different speed levels. 2. DTMF Decoder: A hardware component that decodes the DTMF signals received from the keypad into binary digits. 3. Microcontroller: Serves as the central processing unit, interpreting the decoded DTMF signals and generating corresponding Pulse Width Modulation (PWM) signals to control the motor speed. 4. DC Motor: The output device whose speed is regulated based on the PWM signals generated by the microcontroller. 5. Motor Driver Circuit: An interface between the microcontroller and the DC motor, amplifying the PWM signals to a level suitable for driving the motor. Figure 2. Single Ended Input Configuration of MT8870 Working Principle The system operates on the principle of converting DTMF signals into PWM signals to control the motor speed. Here’s a step-by-step explanation of the process: 1. DTMF Signal Generation: When a user presses a key on the DTMF keypad, a unique tone combination is generated. Each key on the keypad corresponds to a specific frequency pair, which the DTMF encoder transmits as an audio signal. 2. Signal Decoding: The DTMF decoder receives the audio signal and converts it into a 4-bit binary code. Each binary code represents a specific key press. 3. Microcontroller Processing: The microcontroller reads the binary code and maps it to predefined speed levels. Based on the input, the microcontroller generates corresponding PWM signals. 4. Speed Control: The PWM signals are sent to the motor driver circuit, which adjusts the voltage and current supplied to the DC motor, thereby regulating its speed. Figure 3. Simulation Circuit Technical Details DTMF Technology DTMF technology, initially developed for touch-tone telephony, uses a combination of two distinct frequencies (one from a high-frequency group and one from a low-frequency group) to represent each key on the keypad. For instance, pressing the key '1' generates a combination of 697 Hz and 1209 Hz tones. This dual-tone system ensures robust and reliable signal transmission over telephone lines. DTMF Decoder A commonly used DTMF decoder IC is the MT8870, which can decode the audio tones into a 4-bit binary output. The IC has internal filters and logic circuits to accurately decode the signals, making it suitable for telecommunication applications. Figure 4. Top View of ULN2003A IC Microcontroller The microcontroller serves as the brain of the system, processing the decoded signals and generating appropriate PWM outputs. Microcontrollers like the Arduino or PIC series are ideal for this application due to their ease of programming and availability of PWM pins. Pulse Width Modulation (PWM) PWM is a modulation technique used to control the amount of power delivered to an electronic load, such as a DC motor. By varying the duty cycle of the PWM signal (the percentage of time the signal is high in a given period), the microcontroller can precisely control the motor speed. A higher duty cycle results in a higher average voltage and thus a higher motor speed. Motor Driver Circuit The motor driver circuit, often built around H-bridge configurations, acts as an interface between the microcontroller and the DC motor. It ensures that the low-power PWM signals from the microcontroller can effectively control the high-power motor. Figure 5. Complete Circuit of Project Implementation Applications and Implications Industrial Automation The ability to control motor speed remotely has significant implications for industrial automation. It allows operators to adjust the speed of conveyor belts, robotic arms, and other machinery from a central control room, enhancing operational efficiency and safety. Remote Control Systems In remote control systems, such as those used in unmanned aerial vehicles (UAVs) and remote-controlled robots, precise motor control is crucial. This project’s approach can be applied to enhance the reliability and responsiveness of these systems. Home Automation In the context of home automation, the technology can be used to control household appliances like fans and pumps. Integrating DTMF-based control with existing home automation systems can provide a convenient and cost-effective solution for users. Education and Research For educational and research purposes, this project serves as an excellent example of integrating telecommunication technologies with embedded systems. It provides students and researchers with hands-on experience in designing and implementing control systems. Challenges and Solutions Signal Interference One potential challenge is the interference of DTMF signals with background noise. To mitigate this, robust filtering techniques and error detection mechanisms can be employed to ensure accurate signal decoding. Latency Another challenge is the latency in signal processing and motor response. This can be addressed by optimizing the microcontroller code and using high-speed decoders and motor drivers to minimize delays. Scalability Scaling the system for more complex applications might require integrating multiple DTMF keypads and decoders. Designing a scalable architecture that can handle multiple inputs and outputs efficiently is crucial for broader applications. Future Prospects Integration with IoT Integrating this system with Internet of Things (IoT) platforms can significantly enhance its functionality. Users could control motor speeds via smartphone apps or web interfaces, providing greater flexibility and remote monitoring capabilities. Enhanced Security Incorporating security features such as encryption of DTMF signals and authentication mechanisms can prevent unauthorized access and ensure secure operation, particularly in sensitive industrial environments. Advanced Control Algorithms Implementing advanced control algorithms, such as PID (Proportional-Integral-Derivative) control, can improve the precision and stability of motor speed regulation, making the system more robust and reliable. Conclusion The "Speed Regulation of DC Motor Using DTMF Keypad" project exemplifies the innovative application of DTMF technology in the field of telecommunication and computer networks. By leveraging readily available DTMF signals for precise motor control, this project opens up new possibilities in industrial automation, remote control systems, home automation, and beyond. Despite challenges like signal interference and latency, the project's potential for integration with IoT and enhanced security features make it a promising solution for modern control systems. This project not only highlights the versatility of DTMF technology but also provides a practical approach to solving real-world problems through interdisciplinary engineering. Follow this link for complete project: Telecommunication and Computer Networks: Speed Regulation of DC Motor Using DTMF Keypad ### TEKTRONIX ADDS INDUSTRY-FIRST TECHNOLOGY WHICH ELIMINATES PULSE TUNING IN NEW ALL-IN-ONE 2601B-PULSE SYSTEM SOURCEMETER Tektronix, Inc. today announced the new 2601B-PULSE System SourceMeter® 10μs Pulser/SMU Instrument, integrating a high-speed current pulser with DC source and measurement functions in one instrument. The new system incorporates PulseMeter™ technology for sourcing current pulses as short as 10μsec at 10A and 10V without the need to manually tune the output to match device impedance up to 3μH. This is critical for minimizing device self-heating, which for optical devices, can result in erroneous measurements and the potential for damaging test equipment. The new 2601B-PULSE also includes all current and voltage source measure unit (SMU) ranges that are available in Keithley’s standard Model 2601B System SourceMeter® (40V, 3A DC, 10A Pulse). In addition, Tektronix is also releasing version 2.3 of Keithley’s Instrument Control Software “KickStart” to support the pulsing function of the 2601B-PULSE. The 2601B-PULSE System SourceMeter® affirms Tektronix’s commitment to the advancement of technology through leading test and measurement solutions,” says Chris Bohn, vice president and general manager at Keithley/Tektronix. “This new instrument will bring better testing capabilities for engineers, including those who rely on industry-first technology to take innovative strides in automotive applications, connected vehicles and autonomous driving. Advancement in Testing with LIDAR in Mind The 2601B-PULSE System SourceMeter® was developed to serve the needs and complications of testing vertical-cavity surface-emitting lasers (VCSELs), which are mission-critical for automotive light detection and ranging (LIDAR) applications. The instrument is ideal for testing VCSELs and LEDs, semiconductor device characterization, fault power management testing, surge protection testing and beyond. Built-in dual 1 MS/sec,18-bit digitizers enhance the pulser’s measurement function, enabling users to acquire both pulse current and voltage waveforms simultaneously, without the need to use a separate instrument. Read more: TEKTRONIX ADDS INDUSTRY-FIRST TECHNOLOGY WHICH ELIMINATES PULSE TUNING IN NEW ALL-IN-ONE 2601B-PULSE SYSTEM SOURCEMETER ### How To Build Arduino Thermal Camera I recently worked on an Arduino project to create a low-cost thermal camera using an IR sensor and pan/tilt hardware. When observing the device image on the left, you will notice an acoustic range finder attached to the top as well. The tool functions by scanning a pattern of dots and constructing the picture gradually. The result includes two images: 1) an acoustic image showing the distance to the objects in sight and 2) a thermal image displaying the temperature of the objects in sight. I utilize gnuplot for compiling the images. Check out the following scripts. My intention is to utilize the range finder for determining the spot size of the IR reader. The size of the spot increases proportionally with dh_o/dL=2sin(5). dh_o represents the variation in spot diameter while dL stands for the alteration in distance between the sensor and the object. The five is a constant determined by the 5-degree angle at which the IR sensor can view. I got the idea for the project from this site: http://www.cheap-thermocam.tk/   Assembly progression: Put together Pan/Tilt with servos. Employ medium-sized servos instead of small ones for the tilt action as the small servos were not powerful enough (observe jitteriness in the video). The servos need a 5V input. Connect the Ultrasonic transducer to a proto board by threading a wire through holes and soldering on both sides. (ensure holes are aligned on both boards) Place the ultrasonic sensor in the center of the main board so that the ir sensor will be aligned with the center of the ultrasonic sensor. Installed the laser mount onto the Pan/Tilt hardware with the two right angle mounting holes positioned on the top side for board connection. I utilized the extra screws from the servo to attach the laser mount. I started by making a hole that was just a little bit smaller than the diameter of the screw thread. Insert the laser completely into the laser holder. Halt and tinker with the laser and basic servo project. Next, install a 3V power line and ground line, ensuring there is excess wire for flexibility. The ultrasonic transducer is compatible with either 3V or 5V power supply, with the latter providing better resolution. The maximum voltage that the IR sensor is able to handle is 3V. My setup utilizes 3 volts for both the infrared and ultrasonic sensors. Carefully place the IR sensor and solder the leads without trimming them. Then, connect your 4.7K ohm resistors starting from the power source and leading them towards the ir sensor located on the opposite side of the board. Create the connections on the board at this point. Include three additional wires to connect from the board to the arduino. One is allocated for the ultrasound sensor and the ir sensor has two allocated. Attach the sensor to the laser mount. Utilize the openings on the laser mount. I utilized the additional screws from the servos to create corresponding holes on the sensor board through drilling. It is crucial that all things are aligned at perfect right angles. Connect the laser wires to the 3V power source (red wire) and ground (white wire). Now create the connections on the board. Include three additional wires to connect from the board to the Arduino. One is for the ultrasound sensor and the ir sensor have two. Attach the sensor to the laser mount. Utilize the openings on the laser bracket for proper installation. I utilized the surplus screws from the servos to create corresponding holes on the sensor board through drilling. It is imperative that everything is perfectly square. Attach the laser wires to the 3V power (red wire) and GND (white) for connection. Attach the two power cables and three data cables to an intermediary board (obtained from Radio Shack and cut in half with a coping saw). This middle board will facilitate your move to the arduino pins. I attach 3-pin male headers to this middle board in order to accommodate the servo connectors. Therefore, if a servo gets damaged, there is no need for me to solder it again. By utilizing the middle board, you are able to establish a shared foundation. Now, alter the plastic image container to accommodate the servo on the top and allow the wires to pass through the top. I located the middle of the top, marked the size of the servo, drilled holes, and cut out the opening. Next, I made holes to fasten it to the plastic using the hardware for mounting included with the servo. I also removed a rectangular piece from the side to accommodate the usb and power. I positioned the arduino inside the casing, outlined the overall shape, and once more utilized a coping saw to create the hole. I attached standoffs to the base of my Arduino and simply used hot glue to secure them to both the enclosure and the Arduino's bottom. Proceed by passing wires from the sensors through the holes to the middle board and then solder them. Additionally, attach cords to the middle board in order to link them to the arduino. I applied hot glue to the arduino wires to prevent them from becoming loose. Seal all openings and use hot glue along the perimeter of the casing to secure it. Insert USB and plug in power, then upload the code below. Arduino code: The program won't start until you open a serial connection and hit '1' and Enter. It will then outline the area of interest. To proceed hit '1' and Enter again. The arduino will begin to collect data in a 2d array that it will output to the screen when completed. //Arduino Thermal Camera #include #include Servo mvert; Servo mhorz; // Pins: 7=sonar; 4&5=ir sensor; 8=vert servo; 9=horz servo // // // const int pwPin = 7; const int dev = 0x5A<<1; long count = 0; ///Servo Ranges int home_p = 0; int j_done = 0; int even = 0; int xskip = 1; int yskip = 1; int xstart = 60; int xstop = 75; int ystart = 80; int ystop = 70; const int xnum = abs(xstart-xstop)+1; const int ynum = abs(ystart-ystop)+1; double therm[16][11]; double acous[16][11]; void setup(){ //sonar pin pinMode(pwPin, INPUT); //Servo pins mvert.attach(8); mhorz.attach(9); //Home position servos mvert.write(xstart); //1485 mhorz.write(ystart); //1530 Serial.begin(9600); Serial.println("Setup..."); i2c_init(); //Initialise the i2c bus PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups } void loop(){ int i,j,jt; int hpos,vpos,hpos2,vpos2; double tempData1 = 0x0000; // zero out the data double sonrData1 = 0x0000; if(Serial.available()){ if(home_p == 0){ i = 0; Serial.flush(); Serial.println("Sweeping Viewing Space"); Serial.println("Enter 1 to confirm space"); mvert.write(ystart); mhorz.write(xstart); delay(30); do { //This will sweep through window of view for(int hpos=xstart;hpos<=xstop;hpos++){ mvert.write(ystart); mhorz.write(hpos); delay(20); } for(int vpos=ystart;vpos>=ystop;vpos--){ mvert.write(vpos); mhorz.write(xstop); delay(20); } for(int hpos=xstop;hpos>=xstart;hpos--){ mvert.write(ystop); mhorz.write(hpos); delay(20); } for(int vpos=ystop;vpos<=ystart;vpos++){ mvert.write(vpos); mhorz.write(xstart); delay(20); } i=Serial.read(); }while (i<=0); Serial.println("Starting Calculation"); home_p=1; } if(j_done == 0){ for(int i=ystart;i>=ystop;i-=yskip){ for(int j=xstart;j<=xstop;j+=xskip){ if(even == 0){ jt = j; mhorz.write(j); delay(20); } else{ jt=xstop-(j-xstart); mhorz.write(jt); delay(20); } sonrData1 = readSonar(1); tempData1 = readMLX(1); //58uS per cm double cm = sonrData1; double celcius = tempData1 - 273.15; //double fahrenheit = (celcius*1.8) + 32; //Serial.print("temp,dist,i,j: "); //Serial.print(celcius); //Serial.print(", "); //Serial.print(cm); //Serial.print(", "); //Serial.print(ystart-i); //Serial.print(", "); //Serial.println(xstop-jt); //Serial.print("Fahrenheit,inches: "); //Serial.println(fahrenheit,inches); therm[xstop-jt][ystart-i] = celcius; acous[xstop-jt][ystart-i] = cm; delay(400); // wait a second before printing again } mvert.write(i); delay(20); if(even == 0){ even = 1; }else{ even = 0; } } //Output data Serial.println("Outputting Data"); for(int j=0;j USB type. The code for this prototype is uploaded below. It is thoroughly commented and is self explanatory. Now, we test if the circuit and code are functional. Press both the buttons, do the corresponding LEDs light up ? To test if the computer is actually receiving any MIDI signal from the button you just depressed, you need the software, MIDI OX, installed. In MIDI OX, go to Options -> MIDI Device, and select your device. Mine shows us as Teensy MIDI. Whenever, you press and release a button, an output similar to this should show up. Are you getting a similar output ? If everything goes fine, we conclude that all the components and code are working fine, and we can move on to building an enclosure for the project. Prototype_code.ino1 KB For more detail: Teensy MIDI USB foot controller for controlling Mobius Looper using Arduino ### TEENSY 4.1 IS THE FIRST MICROCONTROLLER BOARD TO COME WITH 100MBIT ETHERNET COUPLED WITH 600MHZ 32- BIT MICROPROCESSOR Teensy is another line of microcontroller boards designed to offer maximum I/O capabilities backed up by fully featured software libraries to run on Arduino. Loved by makers around the world for a number of reasons, these Arduino compatible boards have proven to be an astounding development platform in a small form capable of implementing many types of projects. They are usually built around high-performance 32-bit ARM chips that offer faster clock speeds, expanded set of hardware peripherals, and extended serial communication ports. Just like other popular platforms, Teensy development boards have gone through many iterations each with different computing power, pins, and performance specifications. Just last year, the Teensy 4.0 priced at $19.95 was released, and now v 4.1, an update of the already mighty 4.0 has been added to the league. One big addition to the newly released Teensy 4.1 is the fast Ethernet to support low latency and high bandwidth applications. It is a bigger size than the 4.0 but adds more peripherals, memory, and GPIOs. PJRC, however, says that both Teensy 4.1 and 4.0 serve different segments of the market, so one is not a replacement for the other. “Not every project requires so much or extra memory. Teensy 4.0 fills those needs. But when you do need more I/O, more memory, fast Ethernet, or connecting USB devices or fast SD card access, the larger Teensy 4.1 brings this extra I/O capability to a platform designed for real-time use with fast 600 MHz M7 performance.” One big addition to the newly released Teensy 4.1 is the fast Ethernet to support low latency and high bandwidth applications. It is a bigger size than the 4.0 but adds more peripherals, memory, and GPIOs. PJRC, however, says that both Teensy 4.1 and 4.0 serve different segments of the market, so one is not a replacement for the other.“Not every project requires so much or extra memory. Teensy 4.0 fills those needs. But when you do need more I/O, more memory, fast Ethernet, or connecting USB devices or fast SD card access, the larger Teensy 4.1 brings this extra I/O capability to a platform designed for real-time use with fast 600 MHz M7 performance.” Read more: TEENSY 4.1 IS THE FIRST MICROCONTROLLER BOARD TO COME WITH 100MBIT ETHERNET COUPLED WITH 600MHZ 32- BIT MICROPROCESSOR ### TEC MICROSYSTEMS INTRODUCES NEW THERMOELECTRIC COOLERS WITH ALUMINUM PLATES TEC Microsystems introduces the new 1MA10 Series of thermoelectric coolers, with aluminum plates instead of ceramics. All 1MA10 thermoelectric coolers have bare metal, aluminum plates instead of ceramics. Aluminum instead of ceramics is the key approach in TEC manufacturing. According to the company, aluminum is easy to machine, it has suitable thermal conductivity than ceramics, and it matches ideally by CTE with Aluminum heatsinks. An ideal combination for PCR and any application with long-term temperature cycling. 1MA10 TECs have the combination of classical bulk thermoelectric coolers technology with advanced high-density (HD) pellets placement. This combination allows reaching a 30W/cm2 cooling power density and creating 4x times smaller TEC solutions without compromises in cooling performance. More than 100W of TEC cooling capacity (Qmax) is possible now on just 20x20mm2 size instead of traditional 40x40mm2 or 50x50mm2. Read more: TEC MICROSYSTEMS INTRODUCES NEW THERMOELECTRIC COOLERS WITH ALUMINUM PLATES ### THE EASY WAY TO CREATE SECURE IOT DEVICE CONNECTIONS TO AMAZON WEB SERVICES Renesas Electronics’ new RX65N Cloud Kit provides a simple, application-ready platform for the development of IoT sensor devices which connect to the cloud via Amazon Web Services (AWS). The kit features an RX65N microcontroller, on-board Wi-Fi® wireless connectivity, environmental, light and inertial sensors, and support for Amazon’s FreeRTOS real-time operating system. Future Electronics is now offering RN65N Cloud Kits free to qualified customers. Apply today and get started quickly with your new cloud-connected product development. The RX65N kit provides a ready-made, secure connection to AWS. In Renesas’ e2 studio IDE, developers can create IoT applications by configuring Amazon FreeRTOS, all the necessary drivers, and the network stack and component libraries. The e2 studio IDE enables designers to develop IoT applications with powerful features, creating Amazon FreeRTOS projects from a GitHub directory and immediately building them. In the IDE, they can also set up an Amazon FreeRTOS network stack and component libraries, such as Device Shadow, without requiring detailed knowledge of the system. They can embed additional functions based on Amazon FreeRTOS, such as USB connectivity and a file system, on an IoT endpoint device. Features 32-bit, 120MHz RX65N MCU Silex Wi-Fi connectivity chipset on a Pmod module Cloud Option Board with: Two USB ports for serial communications and debugging Digital light sensor for ambient/infrared light measurement MEMS accelerometer/gyroscope MEMS gas, temperature, humidity, and pressure sensor Read more: THE EASY WAY TO CREATE SECURE IOT DEVICE CONNECTIONS TO AMAZON WEB SERVICES ### THE INDUSTRY’S FIRST HIGH-SPEED OP AMP THAT ELIMINATES OSCILLATION DUE TO LOAD CAPACITANCE New high-speed CMOS op amp ideal for anomaly detection added to high noise immunity EMARMOUR™ series ROHM recently announced a high-speed ground sense CMOS op amp, BD77501G, optimized for industrial and consumer equipment requiring high-speed sensing, such as anomaly detection systems used in measurement and control equipment along with sensors that work with very small signals. The proliferation of IoT in recent years has led to a significant increase in the number of electronic components used for advanced control in a variety of automotive and industrial applications. Among these, op amps are used and are capable of quickly amplifying minute sensor signals in anomaly detection systems that provide safety. However, board design can become problematic as conventional high-speed op amps are susceptible to oscillation due to capacitive loads (i.e. from wiring). At the same time, degradation of the noise environment resulting from increased electrification and mounting density is making it extremely difficult to implement noise design for small-signal devices. Read more: THE INDUSTRY’S FIRST HIGH-SPEED OP AMP THAT ELIMINATES OSCILLATION DUE TO LOAD CAPACITANCE ### THE NEW BLYST840 PACKS A SURPRISING AMOUNT OF IOT HARDWARE INTO ITS TINY, FINGERTIP SIZE BLYST Nano is a tiny ARM Cortex Module with Bluetooth and 30 I/O, but next product BLYST840 is a finger-tip size, 32-bit ARM Cortex-M4F module with Bluetooth 5 and 46 I/O; a powerful upgrade of a system on a module indeed. Built around the Nordic nRF52832 Bluetooth SOC and the powerful 64MHz ARM cortex- M4Fprocessor, the new BLYST840 from I-SYST can be described as an advanced and highly flexible chip solution to the rising demand in ULP wireless applications for IoT devices. With dimensions smaller than a US quarter coin, the 14 x 9 x 1.6 mm BLYST840 packages everything an IoT device needs into a fingertip-sized module. The BLYST840 contains a CPU ( ARM Cortex-M4F), 46 I/O pins exposed to pads around the module for easy assembly, coils for low-power DC/DC mode, built-in ceramic antenna,  encryption co-processor, NFC antenna, DC/DC converter, built-in 32 MHz and 32.768 MHz crystal for low power applications and requires no extra PCB space for supporting components. The BLYST840 also features an on-board regulator that accepts an input voltage of 5.5V and up to 25 mA for an external circuit. While the BLYST840 maintained a lot of similarities with I-SYST last product, the  BLYST Nano, it comes with several features that put it a few pedestals higher with 46 I/O pins, more wireless protocols like Thread and Zigbee added to the existing Bluetooth 5 support, and support for Micropython. The extensive availability of the memory (1MB flash and 256 KB RAM) together with the 32-bit ARM Cortex M4F running at 64 MHz also allows for quick and more efficient computation of complex functions. Read more: THE NEW BLYST840 PACKS A SURPRISING AMOUNT OF IOT HARDWARE INTO ITS TINY, FINGERTIP SIZE ### THE SCIENCE JOURNAL IS GRADUATING FROM GOOGLE! COMING TO ARDUINO THIS FALL Arduino and Google are excited to announce that the Google Science Journal will be transferring from Google to Arduino this September. Due to Arduino’s existing experience with the Science Journal and a long-standing commitment to open source and hands-on science, Google has agreed to transfer ownership of the open source project over to Arduino. The Google versions of the app will officially cease support and updates on 11th December 2020, with Arduino continuing all support and app development moving forward. Arduino Science Journal will include support for the Arduino Nano 33 BLE Sense Board, as well as the MKR WiFi 1010 Board included in the Arduino Science Kit, with students able to document science experiments and record observations using their own mobile device. The Science Journal actively encourages students to learn outside of the classroom, delivering accessible resources to support both teachers and students – a feature with huge importance in the current climate. For developers, the Arduino version will continue to offer abundant codes, APIs and Arduino open source firmware to help them create innovative new projects. Fabio Violante, Arduino’s CEO, comment “Arduino’s heritage in both education and open source makes us the ideal partner to take on and develop the great work started by Google with the Science Journal. The Science Journal’s core principles of enabling children to learn interactively, in a safe and inclusive environment, are totally aligned with Arduino’s philosophy and approach to education. Taking on the next generation of the Science Journal, we can continue providing the essential tools for STEAM classes that develop with students as they progress through school and university, preparing them for a successful future.” Read more: THE SCIENCE JOURNAL IS GRADUATING FROM GOOGLE! COMING TO ARDUINO THIS FALL ### THIS SIMPLE MEDIA PLAYER WILL INSPIRE BEGINNERS AND INVITE EXPERIMENTATION While it would have been considered science-fiction just a few decades ago, the ability to watch virtually any movie or TV show on a little slab that fits in your pocket is today no big deal. But for an electronics beginner, being able to put together a pocketable video player like this one would be quite exciting, and might even serve as a gateway into the larger world of electronics design. For inspiration, [Alex] from Super Make Something on YouTube looked to the Rickrolling keychain media players we featured back in January. His player is quite a bit larger and more capable, with a PCB design that allows the player to be built in multiple configurations, from audio-only to full video and a LiPo battery. The guts of the player center around an ESP32 module, with an audio amp and speakers plus a 1.8″ LCD screen with SD card reader for storing media files. Add in a few controls and switches and a little code, and you’ll be playing back media files in a snap. Build info and demo in the video below. https://youtu.be/67RFm2RMjC4 It may be a simple design, but we feel like that’s the whole point. [Alex] has taken pains to make this as approachable a build as possible. All the parts are cheap and easily available, and the skills needed to put it together are minimal — with the possible exception of soldering down the ESP32 module, which lacks castellated edge terminals. For a beginner, getting a usable media player by mixing together just a few modules would be magical, and the fact that it’s still pretty hackable afterward is just icing on the cake. Source: THIS SIMPLE MEDIA PLAYER WILL INSPIRE BEGINNERS AND INVITE EXPERIMENTATION ### TIEPIE ENGINEERING AUTOMOTIVE WIFISCOPES ATS610004DW-XMSG, ATS605004DW-XMS AND ATS5004DW TiePie engineering has introduced three new powerful high resolution Automotive Test Scopes with WiFi and LAN connection, the Automotive Test Scope ATS610004DW-XMSG, Automotive Test Scope ATS605004DW-XMS and Automotive Test Scope ATS5004DW. These new WiFiScopes mark a new, innovative development of TiePie engineering: the first and industry’s only WiFi connected Automotive Test Scopes with differential inputs. The differential Automotive WiFiScopes are every day oscilloscopes for automotive engineers and can be used via an ethernet connection (LAN, WiFi or WAN) but also still with a USB 2.0 / 3.0 connection. The built-in battery gives the Automotive WiFiScope the possibility to perform fully wireless differential measurements. Measurements can then be performed completely galvanically isolated, and over long distances. This wireless PC based data acquisition instrument offers the user more possibilities for measurement applications. With a WiFi connection, wireless measurements can be performed on a car, where the computer does not need to be right next to the car. Specific knowledge on networks is not required. The Multi Channel oscilloscope software gives an overview of the available USB instruments and network instruments. Simply tick the instrument and measuring can start. The WiFi oscilloscope has the following advantages: fully wireless differential measurements via WiFi are performed (galvanically isolated) because of the built-in battery mobile differential measurements are possible, e.g. on transport systems and moving installations LAN and WAN data acquisition is available for long distance differential measurements continuous real time high speed data acquisition over both Wifi and LAN / WAN are available USB differential measurements for stand-alone applications and high speed data acquisition up to 200 MSa/s The differential Automotive WiFiScope is so transparent that it appears that the ethernet connected instrument is connected directly to the computer. All hardware and software functions of the oscilloscope, spectrum analyzer, data logger and voltmeter remain available via the network. Specific network knowledge is not required. Again the TiePie engineering motto applies: Plug in and measure! To reduce PC-based data acquisition installation costs and increase flexibility, WiFi and LAN / WAN measuring instruments are the solution. Differential measurement applications that were previously not possible, for example long-distance measurements, measurements at unsafe or noisy places, measurements at a moving installation or reading instruments at different places are now available. With the new differential automotive WiFi oscilloscopes from TiePie engineering, reliable WiFi and LAN / WAN measurement solutions can now be obtained without compromising measurement quality. Read more: TIEPIE ENGINEERING AUTOMOTIVE WIFISCOPES ATS610004DW-XMSG, ATS605004DW-XMS AND ATS5004DW ### Arduino-based Ultrasonic Radar System via IOT Abstract RADAR is a system that detects objects by using radio waves to measure the distance, height, position, or velocity of objects. Radar systems are available in a range of sizes and come with various performance specifications. Certain radar systems are employed for managing air traffic at airports, while others serve for long-distance surveillance and early-warning purposes. A missile guidance system relies on a radar system as its core component. There are compact radar systems for one person to operate, as well as larger systems requiring multiple rooms. Radar was secretly developed by several nations before and during World War II. The term RADAR itself, not the actual development, was coined in 1940 by the United States Navy as an acronym for Radio Detection and Ranging. The term radar has since entered English and other languages; as a common noun radar loses all capitalization. The modern uses of radar are highly diverse, including: Air traffic control Radar astronomy Air-defense systems Antimissile systems Marine radars used to locate landmarks and other ships Aircraft anti-collision systems Ocean surveillance systems Outer space surveillance and rendezvous systems Meteorological precipitation monitoring Altimetry and flight control systems Guided missile target locating systems Ground-penetrating radar for geological observations High tech radar systems are associated with digital signal processing and are capable of extracting useful information from very high noise level. The technology is utilized by the Army, Navy, and Air Force. Recently, technology like this has been utilized in self-parking car systems introduced by Audi, Ford, and others, as well as in the soon-to-be-released driverless cars by Google, such as Prius and Lexus. The project we created is compatible with all systems desired by the customer, whether in a car, a bicycle, or any other device. Utilizing Arduino in the project enhances the versatility of the mentioned module to meet specific needs. The concept of developing an Ultrasonic RADAR emerged from research conducted on the operation and technology of "Future Cars". As EEE students, we have a constant interest in exploring new technology such as Arduino, Raspberry Pi, and Beagle-Bone boards. This led us to acquire an Arduino board, specifically the Arduino UNO R3, this time. Therefore, understanding the Arduino's powerful capabilities, we decided to create a versatile module for everyday applications, easily customizable and accessible to all. Moreover, in this fast moving world there is an immense need for the tools that can be used for the betterment of the mankind rather than devastating their lives. Hence, we decided to make some of the changes and taking the advantage of the processing capabilities of Arduino [1], we decided to make up the module more application specific. Hence, from the idea of the self driving cars came the idea of self-parking cars. The main problem of the people in India and even most of the countries is safety while driving. So, we came up with a solution to that by making use of this project to continuously scan the area for traffic, population, etc., as well as offer protection of the vehicles at the same time to prevent accidents or minor scratches to the vehicle Now we are connecting them with the IOT to gain access wirelessly via the Internet and cloud storage. Keywords: sonar + radar, ultrasonic, Arduino, processing, servo, 180 degree range, obstacle, IOT, cloud storage. INTRODUCTION TO THE COMPONENTS USED Introduction to Arduino The ATmega-based microcontroller board is known as Arduino. It includes 14 digital Input/Output pins (with 6 capable of PWM output), 6 analog inputs, a 16MHz ceramic resonator, USB connection, a power jack, an ICSP header, and a reset button. It includes all the necessary components for the microcontroller; just plug it into a computer using a USB cable or use an AC-to-DC adapter or battery to start. The Uno is unique among previous boards because it does not rely on the FTDI USB-to-serial driver chip. Instead, it showcases the Atmega16U2 configured as a USB-to-serial adapter. Changes in Uno R3 [4] 1. Pin out: added SDA and SCL pins that are near to the AREF pin and two other new pins placed near to the reset pin, the IOREF that allow the shields to adapt to the voltage provided from the board. In future, shields will be compatible with both the board that uses the AVR, which operates with 5v and with the Arduino due that operates with 3.3v. 2. Stronger RESET circuit. 3. ATmega16U2 replace the 8U2. "Uno" means one in Italian and is named to mark the upcoming release of Arduino 1.0. The Uno and version 1.0 will be the reference versions of Arduino, moving forward. The Uno is the latest in a series of USB Arduino boards, and the reference model for the Arduino platform; for a comparison with previous versions, see the index of Arduino Boards. Microcontroller ATmega328 specifications Operating Voltage: 5V Input Voltage (recommended): 7-12V Input Voltage (limits): 6-20V Digital I/O Pins: 14 (of which 6 provide PWM output) Analog Input Pins: 6 DC Current per I/O Pin: 40 mA DC Current for 3.3V Pin: 50 mA Flash Memory: 32 KB (of which 0.5 KB used by bootloader) SRAM: 2 KB EEPROM: 1 KB Clock Speed: 16 MHz AVR ATmega 328 The ATmega328 is a single chip micro-controller created by Atmel and belongs to the mega AVR series. The high-performance Atmel 8-bit AVR RISC-based microcontroller combines: 32 KB ISP flash memory with read-while-write capabilities; 1 KB EEPROM; 2 KB SRAM; 23 general purpose I/O lines; 32 general purpose working registers; three flexible timer/counters with compare modes; internal and external interrupts; serial programmable usart; a byte-oriented, 2-wire serial interface; spi serial-port; a 6-channel, 10-bit analog-to-digital converter (8 channels in tqfp and  qfn/mlf  packages); programmable watchdog timer with internal oscillator; and five software-selectable power saving modes. The device operates between 1.8-5.5 volts. By executing powerful instructions in a single clock cycle, the device achieves throughputs approaching 1 MIPS per MHz, balancing power consumption and processing speed. Crystal Oscillator A crystal oscillator is an electronic oscillator circuit that uses the mechanical resonance of a vibrating crystal of piezoelectric material to create an electrical signal with a very precise frequency. This frequency is commonly used to keep track of time (as in quartz wristwatches), to provide a stable clock signal for digital integrated circuits, and to stabilize frequencies for radio transmitters and receivers. The most common type of piezoelectric resonator used is the quartz crystal, so oscillator circuits incorporating them became known as crystal oscillators, but other piezoelectric materials including polycrystalline ceramics are used in similar circuits. Quartz crystals are manufactured for frequencies from a few tens of kilohertz to hundreds of megahertz. More than two billion crystals are manufactured annually. Most are used for consumer devices such as wristwatches, clocks,radios, computers, and cell phones. Quartz crystals are also found inside test and measurement equipment, such as counters, signal generators, and oscilloscopes. Servo Motor A servomotor is a rotary actuator that allows for precise control of angular position, velocity and acceleration. It consists of a suitable motor coupled to a sensor for position feedback. It also requires a relatively sophisticated controller, often a dedicated module designed specifically for use with servomotors. Servomotors are not a different class of motor, on the basis of fundamental operating principle, but uses servomechanism to achieve closed loop control with a generic open loop motor. Servomotors are used in applications such as robotics, CNC machinery or automated manufacturing. Voltage Regulator A voltage regulator is an electrical device that is created to automatically keep a steady voltage level. Apart from shunt regulators, all current electronic voltage regulators function by checking the real output voltage against an internal fixed reference voltage. Every discrepancy is magnified and utilized to govern the regulatory component. A negative feedback servo control loop is created by this. If the output voltage is inadequate, the regulating component is instructed to generate a higher voltage. The TO-220/D-PAK packaged 78XX series of three-terminal positive regulators come in various fixed output voltages, making them suitable for a wide variety of uses. Each variety includes internal current limiting, thermal shut down, and safe operating area protection, rendering it virtually indestructible. If proper heat dissipation is available, they are capable of delivering more than 1A of output current. While initially intended for maintaining a constant voltage, these devices can be modified with external parts to achieve variable voltages and currents. Please rewrite the text by using the same language and keeping the word count unchanged. Ultrasonic Sensor Ultrasonic sensors [7] (also known as transceivers when they both send and receive, but more generally called transducers) work on a principle similar to radar or sonar which evaluate attributes of a target by interpreting the echoes from radio or sound waves respectively. Ultrasonic sensors generate high frequency sound waves and evaluate the echo which is received back by the sensor. Sensors calculate the time interval between sending the signal and receiving the echo to determine the distance to an object. This technology can be used for measuring wind speed and direction (anemometer), tank or channel level, and speed through air or water. For measuring speed or direction a device uses multiple detectors and calculates the speed from the relative distances to particulates in the air or water. To measure tank or channel level, the sensor measures the distance to the surface of the fluid. Further applications include: humidifiers, sonar, medical ultra sonography, burglar alarms and non-destructive testing. Systems typically use a transducer which generates sound waves in the ultrasonic range, above 18,000 hertz, by turning electrical energy into sound, then upon receiving the echo turn the sound waves into electrical energy which can be measured and displayed. PRACTICAL IMPLEMENTATION Using the Arduino IDE The Arduino integrated development environment (IDE) is a cross-platform application written in Java, and is derived from the IDE for the Processing programming language and the Wiring projects. It is designed to introduce programming to artists and other newcomers unfamiliar with software development. It includes a code editor with features such as syntax highlighting, brace matching, and automatic indentation, and is also capable of compiling and uploading programs to the board with a single click. A program or code written for Arduino is called a "sketch". Arduino programs are written in C or C++. The Arduino IDE comes with a software library called "Wiring" from the original Wiring project, which makes many common input/output operations much easier. Users only need define two functions to make a run able cyclic executive program: Setup() : a function run once at the start of a program that can initialize settings Loop() : a function called repeatedly until the board powers off. Open the Arduino IDE software and select the board in use. To select the board: Go to Tools. Select Board. Under board, select the board being used, in this case Arduino Uno. Go to Tools and to Port and select the port at which the Arduino board is connected. Write the code in the space provided and click on compile. Once the code is compiled, click on upload to upload the sketch to the Arduino board. Using the Processing Software Processing is an open source programming language and integrated development environment (IDE) built for the electronic arts, new media art,and visual design communities with the purpose of teaching the fundamentals of computer programming in a visual context, and to serve as the foundation for electronic sketchbooks. The project was initiated in 2001 by Casey Reas and Benjamin Fry, both formerly of the Aesthetics and Computation Group at the MIT Media Lab. One of the stated aims of Processing is to act as a tool to get non-programmers started with programming, through the instant gratification of visual feedback. The language builds on the Java language,but uses a simplified syntax and graphics programming model. PRESENT AND FUTURE SCOPE OF PROJECT The concept of creating an Ultrasonic RADAR came to mind when observing the technology utilized in military branches and now in vehicles for features like automatic parking, accident prevention, etc. This technology has been utilized in self-parking systems released by Audi, Ford, and soon in driverless cars like Google's Prius and Lexus. The project we created is versatile and can be utilized in various systems such as cars, bicycles, or any other devices. Utilizing Arduino in the project allows for the versatility in utilizing the mentioned module based on the project's needs. Ultrasonic radar system and tracking results: Applications in Air Force In aviation, aircraft are equipped with radar devices that warn of aircraft or other obstacles in or approaching their path, display weather information, and give accurate altitude readings. The first commercial device fitted to aircraft was a 1938 Bell Lab unit on some United Air Lines aircraft. Such aircraft can land in fog at airports equipped with radar-assisted ground-controlled approach systems in which the plane's flight is observed on radar screens while operators radio landing directions to the pilot. Naval Applications Marine radars are used to measure the bearing and distance of ships to prevent collision with other ships, to navigate, and to fix their position at sea when within range of shore or other fixed references such as islands, buoys, and lightships. In port or in harbor, vessel traffic service radar systems are used to monitor and regulate ship movements in busy waters. Applications in Army Two video cameras automatically detect and track individuals walking anywhere near the system, within the range of a soccer field. Low-level radar beams are aimed at them and then reflected back to a computer, which analyzes the signals in a series of algorithms. It does this by comparing the radar return signal (which emits less than a cell phone) to an extensive library of “normal responses.” Those responses are modeled after people of all different shapes and sizes (SET got around to adding females in 2009). It then compares the signal to another set of “anomalous responses” – any anomaly, and horns go off. Literally, when the computer detects a threat, it shows a red symbol and sounds a horn. No threat and the symbol turns green, greeting the operators with a pleasant piano riff. Meteorological Applications Meteorologists [13] use radar to monitor precipitation and wind. It has become the primary tool for short-term weather forecasting and watching for severe weather such as thunderstorms, tornadoes, winter storms, precipitation types, etc. Geologists use specialized ground-penetrating radars to map the composition of Earth's crust. Final Project RADAR Screen REFERENCES [1] http://www.arduino.cc/ [2] http://www.arduinoproducts .cc/ [3] http://www.atmel.com/atmega328/ [4] http://en.wikipedia.org/wiki/File:16MHZ_Crystal.jpg [5]Google Images [6] http//:www.sproboticworks.com/ic%20pin%20configuration/7805/Pinout.jpg/ [7] http://www.sproboticworks.com/ic%ultrasonicsensor%20pinout.jpg [8] http://www.instructables.com/id/ATMega328-using-Arduino-/ [9] http://www.motherjones.com/files/blog_google_driverless_car.jpg [10] Google Images [11] http://www.radomes.org/museum/photos/equip/ANSPS17.jpg [12] http://www.wired.com/dangerroom/2011/07/ suicide-bombers-from-100-yards/ [13] Wikimedia [14] http://arduino.cc/en/Tutorial/BarGraph/ [15] http://arduino.cc/en/Tutorial/LiquidCrystal/ [16] http://fritzing.org/ Source :  Arduino-based Ultrasonic Radar System via IOT ### TINY NANOPI NEO3 SBC COMES WITH GBE AND USB 3.0 AND IS READY FOR NETWORK STORAGE The NanoPi NEO3 is another fun board developed by FriendlyELEC for makers, hobbyists and fans. Specifications: Soc: RockChip RK3328, Quad-core 64-bit high-performance Cortex A53 RAM: 1GB/2GB DDR4 LAN: 10/100/1000M Ethernet with unique MAC USB Host: 1x USB3.0 Type A and 2x USB2.0 on 2.54mm pin header MicroSD Slot: MicroSD x 1 for system boot and storage LED: Power LED x 1, System LED x 1 Key: User Key x 1 Fan: 2Pin JST ZH 1.5mm Connector for 5V Fan GPIO: 2.54mm pitch 26 pin-header, include I2C, UART, SPI, I2S, GPIO Serial Debug Port: 2.54mm pitch 3 pin-header, 1500000bps Power: 5V/1A, via Type-C or GPIO PCB Dimension: 48 x 48mm Working Temperature: -20℃ to 70℃ Weight: 22g tomshardware.com writes: Storage is available via a microSD card slot, sadly there is no space for any SATA or NVME storage options. GPIO access is provided via a 26 pin interface, which features I2C, UART, SPI and I2S. Operating system support is currently an unknown quantity, but it is a good bet that operating systems for other RockChip boards will be compatible. Read more: TINY NANOPI NEO3 SBC COMES WITH GBE AND USB 3.0 AND IS READY FOR NETWORK STORAGE ### USING A VENDING MACHINE BILL ACCEPTOR WITH ARDUINO We have all encountered bill acceptors like the one [Another Maker] recently removed from an arcade machine and sometimes struggled with them. Have you ever disassembled one to observe its functioning? If not, the video following this is an intriguing look at how this common device distinguishes between a genuine bill and a sheet of paper. But [Another Maker] goes a bit farther than just showing the internals of the device. He also went through the trouble of figuring out how to talk to it with an Arduino, which makes all sorts of money-grabbing projects possible. Even if collecting paper money isn’t your kind of thing, it’s still interesting to see how this gadget works on a hardware and software level. As mentioned in the video, a collection of belts is utilized to move the bill in front of multiple IR LEDs. The hardware relies on these tools to scan the bill and use some sort of mysterious sorcery to verify if it's a real piece of currency. [Another Maker] emphasizes that these readers must be updated with firmware periodically to accommodate new bill designs. Indeed, the unit he owns is extremely outdated to the point that it cannot process current $5 bills, possibly clarifying why he received it for no cost initially. https://youtu.be/Ot7_iEwcphg Years ago we saw one of these bill acceptors used to make a DIY Bitcoin ATM. Of course back then, a few bucks would get you a semi-reasonable amount of BTC. These days you would skip the paper currency and do it all digitally. Source: USING A VENDING MACHINE BILL ACCEPTOR WITH ARDUINO ### Controlling a clock with an Arduino Update: The Arduino system is fine; the only thing you have to take into consideration is the 9.54 hour rollover event, which Rob Faludi has provided an excellent solution for here. I made up a nice little over-analysis of the issue, available here. For a while, I've wanted to make a clock that can change its speed. This weekend, I bought a cheap clock from a thrift store and tried using an Arduino to control its pace. To sum up, I successfully initiated the process, however, there are specific issues with the Arduino program that will affect its precision when functioning as a clock. Explanation, source code following the division. Part 1 – Hardware The mechanical aspect is extremely simple. The clock functions similarly to a stepper motor, with the movement of the mechanical part being advanced a specific distance forward by charging an electric coil. In this situation, with each activation, the second hand moves forward one position while making the recognizable ticking noise. To turn on the electric coil, simply supply it with a voltage. The sole difficult aspect is reversing the voltage to advance the clock to the next stage. Accomplishing this requires using two Arduino pins and altering their polarity. (hint: make sure to click on the image to view the annotations). Inside the dismantled clock, I found a compact built-in controller. I used a razor blade to cut the copper wires connecting the connections to the electromagnet, which resulted in the original chip being disconnected, and then I left it. By supplying voltage to the coil, it initiates the production of current which results in the formation of a magnetic field surrounding the coil. The magnetic field causes a permanent magnet attached to a gear to experience a force, resulting in the magnet rotating and aligning with the electromagnet. This device undergoes a 180-degree rotation which is then transformed into a 6-degree rotation through a set of gears with a 1:30 reduction ratio. In the next stage, we must change the voltage polarity to create a magnetic field pointing in the opposite direction, causing the permanent magnet to rotate again. One can also imagine a setup with a spring and a ratchet to return the permanent magnet to its original position, but that is not how these clocks work. Therefore, with this understanding, we ought to be capable of linking both ends of the electromagnet to the Arduino in order to make it operational. Due to its low power consumption, it can be powered directly from the Arduino ports as it is designed to run on a single battery for several months, if not years. There are just two factors we need to take into account in the circuit. Initially, it is important to insert a resistor in the circuit together with the coil in order to restrict the flow of current. I selected two resistors with a 50 ohm value, and positioned one at either end of the coil. You might have to try different values to determine what is effective. Additionally, it is advised to place diodes from ground to each electromagnet to prevent high voltage spikes when discharging and charging the magnet, as it acts like an inductor. This will prevent the voltage from dropping below the diode's threshold of approximately .7 volts for the specific diodes selected. Key Elements of ProjectArduino For more detail: Controlling a clock with an Arduino ### TinyML: Slope Control for Robots With Arduino Pro. Building an Inclination Estimator System With Nicla Sense ME and Neuton The vacuum cleaner robot is one of the most useful inventions of the last decade and anyone who says differently means that he does not have one! This fantastic household appliance is a concentration of technology: a complex embedded system composed of some microcontrollers, many sensors, and a lot of… software! But how many times do you get the feeling that your robot is stupid? In particular, in situations when your little helper blocks itself over an obstacle like a home carpet, a drying rack, etc. How to recognize this before it’s too late? A hack to avoid this annoying situation is to calculate the robot’s path in real-time with respect to the floor and perform decisions according to its current position. For instance, if the slope is over 4° degrees, the robot stops itself and goes back. In this tutorial, I will approach this problem using a data-based technique, Machine Learning, and show how to implement an inclination estimator system based on an accelerometer using an ML model on an Arduino Pro board. To train and deploy this model on a microcontroller, I’ll use Neuton, a TinyML framework that allows to automatically build neural networks without any machine learning experience and embed them into small computing devices. Supplies The ML model will be deployed on the Arduino Nicla Sense ME board, a tiny and low-consumption Arduino board with strong computational power. It is based on a 32-bit microcontroller with 4 sensors: motion, magnetometer, pressure, and gas sensor. It is suitable for projects that need to combine sensor measurements and AI tasks on a small device. The perfect match for this experiment! Nicla is part of the Arduino Pro platform. To get started with Nicla, just use the Arduino IDE and download the “Arduino Mbed OS Nicla Boards” package from the board manager. Connect the Arduino board to your computer using a USB cable and… done! Your board is ready to communicate with the IDE. Before “getting your hands dirty” with Machine Learning, check if Nicla works correctly: open the “Nicla_Blink” sketch inside “Nicla_Sense_System” examples and upload it. The LED mounted on your Nicla will start to blink green. Accelerometer measurements will be performed by the Bosch BHI260AP: a 6-axis IMU sensor mounted on Nicla. To verify that all Nicla sensors are working correctly, download “Arduino_BHY2” library from the library manager and open the “Standalone” example. Upload this example on the Arduino board and see the results on the Serial plotter. This sketch configures and reads all sensors data (acceleration, temperature, gas, etc…). Now, the Nicla is really ready! Step 1: Model Building The system is designed to estimate inclination only along one axis and the slope value is expressed in degrees within the [0°; 5°] range.The model takes as input a dataset composed of 50 acceleration and 50 gyroscope measures sampled in a 1-second time window (Sampling time: 20ms — 50Hz). In the Machine Learning context, this task can be approached in two ways: Regression: is the problem to predict a continuous numeric value. The model calculates the inclination as a continuous value between 0° and 5° (e.g., 2.54°). Multiclass classification: is the problem of classifying inputs into one of three or more discrete classes.The model identifies 6 classes: 0°, 1°, 2°, 3°, 4°, and 5°. We will use both approaches and compare them. The experiment consists of three stages: Capture the training dataset Train the model using Neuton Deploy the model on Nicla Step 2: Capture the Training Dataset The first stage is to create the training dataset that will be used to train the neural network.For each inclination degree, 10 measurements will be captured and stored in a CSV file. Each measurement will be composed of 50 accelerometer and 50 gyroscope readings. An Arduino sketch is designed to create the dataset according to Neuton requirements. The program will acquire the measurements of each inclination degree and will print the sensor data on the serial port console. Each degree value to be captured will be inserted by the user through the input serial port. To create an accurate dataset, it will be necessary to perform the measurements by placing the Nicla board above the agent (in this case, the vacuum cleaner robot) and using a precise instrument to measure the real slope, such as, a digital inclinometer. If you don’t have it, you can use your smartphone and one of the many inclinometer apps available in the Android and iOS stores. In this project, I use the Measure iPhone app. Below, the Arduino program: Include headers, define project parameters and variables #include “Arduino.h” #include “Arduino_BHY2.h” #define NUM_SAMPLES 50 #define SAMPLE_TIME_MS 20 // IMU sensor handlers SensorXYZ acc(SENSOR_ID_ACC); SensorXYZ gyro(SENSOR_ID_GYRO); Setup serial port, IMU sensor and CSV header void setup() { // init serial port Serial.begin(115200); while (!Serial) { delay(10); } // init IMU sensor BHY2.begin(); acc.begin(); gyro.begin(); // print the CSV header (ax0,ay0,az0,…,gx49,gy49,gz49,target) for (int i=0; i=count_value) { digitalWrite(A0, HIGH); digitalWrite(A1, HIGH); //delay(200); } else { digitalWrite(A0, LOW); digitalWrite(A1, LOW); } } } else { lcd.clear(); lcd.setCursor(0, 0); lcd.print("FILL MORE WATER"); lcd.setCursor(0, 1); lcd.print(distance); digitalWrite(A1, HIGH); //digitalWrite(A0, LOW); } } else if(button1_State == HIGH && button2_State == HIGH) { prestate = 0; } } Smart Water heater Working By combining an Arduino Nano, a 16x2 display, a DS1820B temperature sensor, a buzzer, a push button, a single-channel relay, a potentiometer, and a mini water heater, you can create an impressive intelligent water heating system. Source: Arduino-Powered Smart Water Heater: A DIY Project ### TRANSFERFI LAUNCHES WIRELESS POWER NETWORK FOR LIGHTNING UP SENSORS UP TO 55 METERS AWAY For a while now, we have witnessed the use of wireless charging, by placing a phone or other devices that support wireless charging on a charging pad. Energous is one of the companies that started promoting their near-field, mid-field, and far-field wireless charging solutions, with far-field meaning within a room. But so far, they only have released near-field devkits and products. However, Singapore based TransferFi Pte has developed its own wireless charging solution called the TranferFi wireless power network (TFi WPN), aimed at powering sensors up to 55 meters away, and specifically aimed at building and factory automation to enable companies to save on installation and cabling costs. The TFi WPN functions with a gateway powering up and receiving data from sensors wirelessly, having a range of up to 55 meters.  The TFi Gateway Max Turin-1 has a range of up to 32 TFi Sense devices through multichannel beamforming, offering support for up to 16 channels and can be connected to Modbus, BACnet & Web services. TFi Sense Turin-1’s sensor node is powered by a secret Arm Cortex-M4 microcontroller, and it enables a 3-axis accelerometer, a microphone, temperature, pressure, humidity & TVOC (Total Volatile Organic Compounds) sensors. It also further equipped with proprietary encryption & AES-128, and transmit at up to 5 Hz. The TFi Sense Turin-1 is optimized to perform within the 860MHz – 940MHz frequency ranges. However, TransferFi can also offer the solution in the 2.4GHz – 5.8GHz bands on request. A representative of TransferFi Pte explains: Read more: TRANSFERFI LAUNCHES WIRELESS POWER NETWORK FOR LIGHTNING UP SENSORS UP TO 55 METERS AWAY ### Arduino Magic: Driving Stepper Motors using ULN2003 Driver Introduction Hello everyone, I hope all of you are doing well. This article gives guidance on constructing a circuit to control a stepper motor using an Arduino UNO and the ULN2003 motor driver. Listed below are three circuit diagrams along with their corresponding codes. You are free to choose and customize any of these circuits as you prefer. When the stepper motor turns to the right, it will trigger a notification to appear on the LCD screen. Conversely, if it spins clockwise, a different message will be displayed. Essentially, we are using Arduino to control the stepper motor. Consult the provided circuit diagrams for making the connections, and follow the instructions to upload the code. Components Required Absolutely! This is an altered form of the list. The microcontroller board known as Arduino UNO. Module for controlling motors using ULN2003 driver. Stepper motor designed for accurate movement I2C module used for communication. Visual output is provided by a 16×2 LCD display. Cables and a breadboard for making connections USB cable used to upload code to the Arduino board What is a ULN 2003 stepper motor Driver Certainly! Kindly give me the text you want me to reword. The Arduino will be used to control the stepper motor with assistance from the ULN2003 stepper motor driver. This particular motor driver module is controlled using the ULN2003 IC. Sometimes, the motors within the circuit need higher voltage to function correctly. The module has four connected LEDs that illuminate in response to signals from the driver module. When a microcontroller lacks the capability to power motors on its own, a motor driver is utilized. Numerous motor driver modules can be found in today's market, among them the ULN2003. This integrated circuit with 16 pins is typically found in a DIP (dual inline) package. Alternative choices for the ULN2003 driver are TPIC2701, ULN2001, L293d, ULN2004, and other alternatives. The IC is utilized in many ways, commonly for managing high current LEDs, relays, motors, specifically stepper motors. In this article, we explore the application of the driver module in operating a stepper motor with an Arduino. Circuit for Stepper Motor Controller /arduino with stepper motor circuit Below is the provided circuit diagram. Ensure that all connections are made accurately and securely. Simple Circuit for stepper motor and arduino Certainly! Kindly give me the content that you want me to rephrase. The Arduino will control the stepper motor by utilizing the ULN2003 stepper motor driver. The specific motor driver module is operated with the ULN2003 IC. Sometimes, the motors in the circuit need higher voltage to function correctly. The module has four LEDs connected to it which illuminate according to the signals received from the driver module. A motor driver is used when a microcontroller lacks the capability to power motors on its own. There are various motor driver modules accessible in today's market, such as the ULN2003. This integrated circuit with 16 pins is typically found in a DIP package, which stands for dual inline. Additional choices for the ULN2003 driver are TPIC2701, ULN2001, L293d, ULN2004, and other alternatives. The IC is frequently utilized in various applications, including the control of high current LEDs, relays, motors, and in particular, stepper motors. In this article, we explore the implementation of the driver module to operate a stepper motor alongside an Arduino. Arduino stepper motor Code // TECHATRONIC.COM // CheapStepper Library // https://github.com/tyhenry/CheapStepper #include CheapStepper stepper (8,9,10,11); void setup() { stepper.setRpm(12); } void loop() { stepper.moveDegreesCW (180); // you can set the angle delay(2000); stepper.moveDegreesCCW (160); // you can set the angle delay(2000); } stepper motor with lcd 16×2 Connect the Arduino pins to the 16x2 LCD according to the diagram provided. For a deeper comprehension of these links, you can consult our linked article. Start by connecting the 5-volt pin of the Arduino board to the VCC pin of the driver module. Afterward, create a link between the GND pin on the Arduino and the GND pin on the driver module. Connect the IN1, IN2, IN3, IN4 pins of the driver module to the digital-8, digital-9, digital-10, digital-11 pins of the Arduino. In conclusion, finalize the arrangement by linking the leftover pins of the stepper motor to the matching pins of the driver module. stepper motor project Code // TECHATRONIC.COM // CheapStepper Library // https://github.com/tyhenry/CheapStepper #include "LiquidCrystal.h" LiquidCrystal lcd(7,6,5,4,3,2); #include CheapStepper stepper (8,9,10,11); void setup() { stepper.setRpm(12); lcd.begin(16,2); pinMode(12,OUTPUT); pinMode(13,OUTPUT); lcd.setCursor(0,0); lcd.print("TECHATRONIC.COM "); delay(3000); lcd.setCursor(0,0); lcd.print(" Stepper Motor "); } void loop() { lcd.setCursor(0,1); lcd.print("Clock Wise Directon "); digitalWrite(13,HIGH); digitalWrite(12,LOW); stepper.moveDegreesCW (180); // you can set the angle delay(2000); lcd.setCursor(0,1); lcd.print("Anti-Clock Wise Directon "); digitalWrite(13,LOW); digitalWrite(12,HIGH); stepper.moveDegreesCCW (250); // you can set the angle delay(2000); } Circuit With 16×2 LCD And I2C Module Start by establishing connections between the I2C module pins and the 16x2 LCD pins. Next, link the 5-volt pin on the Arduino to the VCC pin on the driver module. Connect the ground pin of the Arduino to the ground pin of the driver module. Next, establish links between the IN1, IN2, IN3, IN4 pins of the driver module and the digital-8, digital-9, digital-10, digital-11 pins of the Arduino. Connect the VCC and GND pins of the I2C module to the Arduino's 5-volt and GND pins, respectively. To sum up, connect the servo motor pins to the driver module, and link the SDA, SCL pins of the I2C module to the analog-4 and 5 pins of the Arduino. This setup simplifies the Arduino project involving a stepper motor. Code // TECHATRONIC.COM // CheapStepper Library // https://github.com/tyhenry/CheapStepper // I2C LIBRARY //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library #include #include LiquidCrystal_I2C lcd(0x3F,16,2); // lcd(0x27,16,2); #include CheapStepper stepper (8,9,10,11); void setup() { stepper.setRpm(12); lcd.init(); // Arduino lcd.backlight(); pinMode(12,OUTPUT); pinMode(13,OUTPUT); lcd.setCursor(0,0); lcd.print("TECHATRONIC.COM "); delay(3000); lcd.setCursor(0,0); lcd.print(" Stepper Motor "); } void loop() { lcd.setCursor(0,1); lcd.print("Clock Wise Directon "); digitalWrite(13,HIGH); digitalWrite(12,LOW); stepper.moveDegreesCW (180); // you can set the angle delay(2000); lcd.setCursor(0,1); lcd.print("Anti-Clock Wise Directon "); digitalWrite(13,LOW); digitalWrite(12,HIGH); stepper.moveDegreesCCW (250); // you can set the angle delay(2000); } About the Code In this part, we delve into the Arduino code concerning the stepper motor, detailing the operation of the system and the utilization of its built-in functions. Firstly, we incorporate a library in order to utilize its pre-existing functions. After that, we develop an item, especially a stepper, and indicate the specific pins utilized. Pins 8, 9, 10, and 11 are allocated in a digital format. In the initialization of both the stepper and Arduino, we use the setRpm function to establish the motor's RPM. RPM stands for revolutions per minute and is used to indicate the rotational speed of the motor in terms of how many times it turns in one minute. As an example, we selected 12 as the starting point, but it can be adjusted to suit your preference. Within the loop function, we make use of a predetermined function to rotate the stepper motor in a clockwise direction to a specific angle. Following that, there is a waiting period before rotating the stepper motor counterclockwise to a set angle. We are confident that this explanation effectively explains the functioning of the code. Conclusion We hope you enjoyed this stepper motor controller project and understood how it works. If you have any questions about this article, please don't hesitate to ask them in the comments section. Furthermore, delve into additional projects that we have created in the list provided below.. ### Transform Your Home into a Futuristic Hub with This DIY Real-Time Clock and Temperature Display This project demonstrates building a real-time clock (RTC) with temperature display using an Arduino, DS3231 RTC chip, and SSD1306 OLED display (128x64 pixels). The DS3231 RTC chip provides more accuracy than the DS1307 and incorporates an onboard temperature sensor. It maintains timekeeping even without the main power, making it well-suited for this application. It communicates with the microcontroller (Arduino in this case) via the I2C interface. The DS3231 RTC and SSD1306 OLED share the same I2C bus but the microcontroller can only interact with one at a time depending on the address sent - 0x68 for the DS3231 and 0x3C for the SSD1306. Figure 1 shows the author's assembled prototype. Figure 2 provides a block diagram of the circuit, clarifying how the components interconnect and communicate. Overall, this project demonstrates using commonly available I2C devices - a precise RTC chip and graphic OLED - to readout the time, date and internal temperature via an Arduino-driven display UI. Fig. 1: Author’s prototype Fig. 2: Block diagram of the project Circuit and working The circuit diagram in Figure 3 details the construction of the Arduino real-time clock with temperature readout. At its core are the Arduino Uno microcontroller board (Board1) and DS3231 RTC module (RTC1). These communicate via the I2C interface. Power regulation is provided by a 7805 5V voltage regulator IC (IC1) along with smoothing capacitors C1 and C2. This stabilized power allows operation of the 3.3V logic devices. The 2.4cm OLED display (DIS1), an SSD1306 model, graphs the time/date/temperature information for the user. It connects to the I2C bus for data interaction. A few passive components like pull-up resistors R1-R2 complete the interfacing between devices. Overall, this diagram illustrates how commonly available ICs like the precise DS3231 RTC and graphic OLED panel are integrated via the Arduino's microcontroller to build an I2C-based real-time clock with temperature visualization functionality. Fig. 3: Circuit diagram of Arduino based real-time clock (Pins A4, A5, 5V of Board1) SSD1306 OLED display The OLED (organic light-emitting diode) display shown in Figure 4 is used in this project. OLEDs are thin, light-emitting panels that consist of organic thin films connected in series between two electric conductors. Compared to traditional LCD displays, OLEDs offer improved image quality with full viewing angles and high brightness/contrast. They can produce a wider color gamut while requiring lower power. Some key advantages of using this OLED model include its efficient and reliable operation. OLED technology provides better image quality and full visibility from any angle. It allows for higher luminosity with deeper blacks and richer colors versus LCD. Being lightweight and energy efficient, OLED is well-suited for portable and battery powered applications like this real-time clock project. In summary, this OLED panel leverages the enhanced display attributes that OLED technology enables, making for a clearer and more vibrant visual interface compared to older display types. Fig. 4: SSD1306 OLED display module LCD display modules are commonly found in electronic devices like computers, smartphones, game consoles, and televisions. They use liquid crystals to show text and images on a screen. These displays are widely available for purchase both in stores and online. Connecting an LCD module to an Arduino board requires only a simple four wire interface. A pair of wires provides power, while another two wires handle data transfer using the I2C protocol. Also called two wire interface (TWI), I2C uses just two data lines to communicate between devices. This makes integrating an LCD very easy, with minimal wiring needed between the Arduino and display module. DS3231 RTC module The DS3231 module provides a low-cost and highly precise real-time clock solution. It tracks time down to the hour, minute and second, as well as the day, month and year. The module automatically accounts for leap years and months with less than 31 days. The DS3231 can operate using either 3.3V or 5V power supplies, making it compatible with many microcontroller development boards. A common CR2032 3V battery powers the module, maintaining the time and date information for over a year. As seen in Figure 5, the DS3231 contains the clock crystal and battery connector on one side, and digital interface pins on the reverse. These features make it a suitable real-time clock component for a variety of projects. Fig. 5: DS3231 RTC module Connecting the DS3231 module to the Arduino board is simplified by the use of the I2C communication protocol. Only four pin connections are required: VCC and GND pins provide power from the Arduino to the module. The SDA and SCL pins handle bidirectional data transfer using the I2C standard. This two-wire interface streamlines the wiring between the devices. No additional pins are needed beyond the standard power and I2C signal lines. The DS3231's I2C functionality makes integrating it with the Arduino board a straightforward process using just four basic connections. Power supply The regulated power supply circuit uses a full-wave rectifier and voltage regulation components to safely power the project devices. A step-down transformer (X1) converts the 230V AC household voltage to a 12V-0-12V secondary output. Diodes (D1 and D2) form the full-wave rectifier, rectifying the AC to DC. Capacitors (C1 and C2) filter the pulsating DC to produce a smooth DC voltage. The 7805 voltage regulator IC (IC1) then regulates the DC voltage down to a stable 5V output. This 5V supply powers the DS3231 RTC module and the SSD1306 OLED display module. An additional 12V output from the rectifier circuit is used to power the Arduino Uno via its barrel power jack. Overall, the power supply circuit provides the necessary regulated voltages for the key project components in a safe, low-cost design. Arduino Uno At the core of the project is the Arduino Uno R3 development board. It features an ATmega328/ATmega328P microcontroller with 14 digital and 6 analog input/output pins. The board also includes 32KB of flash memory, a 16MHz crystal oscillator, USB connectivity, a power jack, ICSP header and reset button. Programming is done using the Arduino IDE software. Two push buttons, S1 and S2, act as inputs to the Arduino. S1 is used for setting the time and date values stored on the RTC module. S2 toggles the Arduino through different display modes on the OLED screen. The DS3231 Real Time Clock (RTC1) module and SSD1306 OLED display (DIS1) module both require a common ground connection to the Arduino board's ground. This ensures the components can reliably communicate via the I2C protocol. Overall, the Arduino forms the central control unit that interfaces the input buttons to update the RTC, and displays the time/date data on the OLED screen. Construction and testing Once all connections are made, test the circuit functionality. Press and release the mode button (S2) - the cursor on the display will begin flashing in the day-of-week field. Press and hold the set button (S1) to rapidly cycle through the days of the week, or press briefly to advance one setting at a time. Press and release S2 to move the cursor to the month. Here, press and hold S1 to quickly scroll months or press briefly to increment the month. Press S2 again and the cursor will move to the date. As with the other fields, hold or briefly press S1 to change the date. The RTC chip automatically accounts for the correct number of days per month. Advance to the year field by pressing S2, then hold or briefly press S1 to set the year between 2000-2099, with leap years handled automatically. Press S2 to set the hour, holding or briefly pressing S1 to increment. Only 24-hour time is used. Advance to minutes with S2 then use S1 to set. S2 moves the cursor to seconds, where S1 holds to freeze at zero or resets to zero on a brief press. This synchronizes the time. The DS3231 also measures temperature, shown along with the date, time, and temperature readings on the display (see Fig. 6). Pressing S2 and S1 cycles through and updates each field as needed to set the correct time. Fig. 6: Digital clock with temperature display Software The circuit operation is governed by software loaded onto the Arduino Uno's internal memory. The main_code.ino program provides all necessary functions. This program is written in the Arduino programming language and implements the project's logic. The Arduino IDE version 1.8.11 environment compiles and uploads the sketch onto the Arduino board. Once running on the microcontroller, the code dictates how the input buttons control the RTC time/date updating and display screen output. It integrates readings from the DS3231 module and drives the OLED display accordingly via I2C. In summary, the Arduino software acts as the brain that orchestrates communication between the circuit components based on button inputs, allowing real-time clock functions and temperature display on the easy-to-read OLED screen. Several header files are required to be included in the main_code.ino sketch to enable the necessary functionality. The #include header allows fast I2C communication with the two devices - the SSD1306 OLED display and DS3231 RTC module. Graphics generation is made possible through #include . This library permits shapes, inversions, symbols and .bmp images to be displayed. Specific commands for the SSD1306 display are provided by #include , allowing address mapping and alternating access to its eight pages of 128x64 pixels. Additionally, two external Adafruit libraries must be imported into the Arduino IDE before compiling the code: Adafruit-GFX-Library-master.zip and Adafruit_SSD1306-master.zip. Figures 7 and 8 show the printed circuit board layout and component placement designed to integrate the Arduino, RTC, display and other elements. With the proper header inclusions and library imports, the software enables the hardware interfacing and full functionality of the real-time clock and temperature display project. Fig. 7: PCB layout for real-time clock with temperature display Fig. 8: Components layout of the PCB ### TTGO ESP32-S2 WIFI IOT BOARD OFFERS AN OPTIONAL MICROSD CARD WITH A BATTERY SUPPORT For a while now, most popular ESP32-S2 boards available in the market are produced by Espressif Systems. This includes the ESP32-S2-Saola-1 and ESP32-S2-Kaluga-1. However, there is a new LilyGO TTGO ESP32-S2 board for sale. This micro board is much the same to the ESP32-S2-Saola-1 board, and it is produced in two versions, and features the same form factor, but the TTGO ESP32-S2 has a completely different pinout, and enables a MicroSD card socket and a battery cell connector on one of the boards. At first glance, it is easy to differentiate the two boards. The board with simple features is known as “ESP 32-S2 ESP32- S- WOOR,” and it is designed with ESP32-S2W ROOM component. However, the board with more features is the “TTGO ESP32-S2 ESP32-S,” which has its own integrated circuits designed around ESP32-SC WiSoc. The TTGO ESP32-S2 boards have many similar specs. They include: SoC – Espressif Systems ESP32-S2 single-core 32-bit Tensilica LX7 processor having 320 kB SRAM, 128 kB ROM System Memory – 8MB PSRAM Storage – 4MB flash; XY-ESP32-S only: MicroSD card socket Connectivity -2.4GHz 802.11b/g/n WiFi 4 connectivity -Antenna (i) XY-ESP32-S-WOOR: PCB antenna on module (ii)XY-ESP32-S:”3D” antenna USB – 1x USB-C port for power and programming via CH340C USB  to TTL chip Expansion Read more: TTGO ESP32-S2 WIFI IOT BOARD OFFERS AN OPTIONAL MICROSD CARD WITH A BATTERY SUPPORT ### TTI NOW STOCKING AMPHENOL’S FULL LINE OF CO2 AND INFRARED PARTICLE SENSORS TTI, Inc., a leading specialty distributor of electronic components, is now stocking Amphenol Advanced Sensor’s line of CO2 Sensors and Infrared Dust Particle Sensors. Amphenol’s Telaire CO2 module product line boasts over 30 patents related to the design and application of low-cost infrared gas sensing. With sensors specific to certain environments, Amphenol and TTI will be sure to have a sensor with the best calibration process, size, or performance for your application. Along with these gas and particle sensors, Amphenol offers a line of humidity and temperature sensors for environmental monitoring applications for home, office, and even indoor agriculture. Read more: TTI NOW STOCKING AMPHENOL’S FULL LINE OF CO2 AND INFRARED PARTICLE SENSORS ### Two-dimensional piezoelectric material forms basis of world’s thinnest electric generator Researchers from Columbia University and the Georgia Institute of Technology are laying claim to having observed piezoelectricity in an atomically thin material for the first time. The effect was demonstrated in the world's thinnest electric generator made from a two-dimensional molybdenum disulfide (MoS2) material, which had previously been predicted to exhibit such properties. Co-leader of the research, Zhong Lin Wang, has previously been involved in developing the world's first practical piezoelectric nanogenerator, followed by the first self-powered nanodevice with wireless data transmission, and a low-cost, large-scale nanogenerator. Now, with colleagues including fellow co-leader James Hone, Wang has been involved in developing the world's thinnest electric generator. The device was created by placing thin layers of MoS2, a material made up of a single layer of atoms, on flexible plastic substrates and using optical techniques to determine how the material's crystal lattices were oriented. This process is required because MoS2's crystalline structure makes the material piezoelectric only in certain orientations. It is also highly polar, meaning that an odd number of atomic layers are needed to ensure the piezoelectric effect isn't canceled out   For more detail:  Two-dimensional piezoelectric material forms basis of world’s thinnest electric generator ### Ultimate Mosquito Swatter Mod for Gamer: Add Kill Counter, Sound, Rechargeable Battery. Where I live, from spring to autumn we have to compete for territory against tiger mosquito. Local stores offer a impressive list of anti mosquito devices, candles, including sophisticated traps sold a few hundred euros, I even found one sold 2000€ - this give you an idea of how desperate people are to get rid of those invaders. https://youtu.be/_ZuR5MYr-M4 One of my favorite weapon to fight against mosquito is this cheap electric swatter, but to make this fight even more rewarding I thought I should upgrade my weapon. In this instructable, I will show and explain how to hack an electric swatter to : add electronic to detect kills. add a 4 digit counter. make it usb rechargeable. add sound for a better experience. My thought was that when an insect hits the wire mesh of the swatter and the electric arc occurs, there must be some electric variation on the swatter circuit. If I could find a place in the circuit that is readable by an arduino or attiny (that is between 0 and 5 volts) it would then be easy to count and display a score and to play some sound. We can easily add sound/music capabilities to an attiny with a dfplayer module Score would be displayed with a 4 digits 7 segment display which as an onboard tm1637 which allows to drive the display with only two wires (two IO pins of the attiny) Because those electronic modules run at 5V and the swatter are usually running from 2 x 1.5 v batteries, I also upgraded the power part of the swatter with a usb rechargeable battery. In other words, the upgrade is made with off-the-shelf electronic modules that are easily found, it is simple electronic, the only "complexity" is in the signal computation, but this is handled by the attiny through programming. In this instructable I assume you have some knowledge of ardiuno and how it is programmed, if not you can find good tutorials on arduino site or explore arduino project on instructables.com One more thing before starting, safety: electric swatter use high voltage (hundred of volts on the mesh when button is pressed) even if current is very low, be carrefull not to touch it or its internal circuit when battery is connected. The Sticker says Caution keep away from children (and yourself) Supplies For this Ultimate Mosquito Swatter Mod for Gamer you will need : an electric mosquito swatter (there are several type of swatter circuit, this instructable and the program I suggest is adapted to one type of swatter, check the step 'Open the swatter' to verify your swatter matches what I use) digispark pro (convenient board with attiny, easily found online) dfplayer (easily found online) resistors: 1Ω, 1kΩ 8 Ω speakers sd card (a small capacity should be enough to hold a few sound files) li-ion rechargeable battery : salvage battery battery charger, something like this one potentiometer (I used a 1MΩ, it is not very important but a high value will limit current consumption through the potentiometer) Four digits LED display with tm1637 (make sure it is a 4 digit display + the TM1637 and not a 4 digit display only) capacitor : 470 µF on/off toggle switch push button wires (reuse old phone or ethernet cables) For the tooling part, you will need a soldering iron, a hot glue gun and a 3D printer (or some creativity to modify the swatter handle...) Step 1: How an Electric Swatter Works, How Can We Upgrade It? Well, if you do not care about the way it work and just want your Ultimate Mosquito Swatter for Gamer, you can skip this step... Resources explaining how an electric swatter works can be found on internet. (ie https://www.homemade-circuits.com/mosquito-swatter-bat-circuit/) So it is oscillating circuit and a circuit to boost voltage up to hundreds of volts connected to the racket wire mesh. Unfortunately, I could not find much to hook a attiny here (high voltage side is not directly usable due to the 5 volt limit of the attiny). To work around this, my second thought was to measure current consumption. When an arc occurs on the net and the mosquito is fried, there must be some energy consumption that should be readable by an attiny. The best way to measure this energy is to measure current consumption, and the easiest way to measure current is to measure voltage across a resistor, which an attiny can do. So the only trick to count mosquitos is to insert a small resistor between the battery and the swatter circuit and monitor voltage across this resistor. Beside that, I used already made electronic modules (one for each function : the sound, the display, the charger etc) so its is a fairly simple electronic project. Step 2: Plan for the Circuit The main components added are    attiny (digispark pro)    dfplayer    USB charger and the battery    display    reset button    on/off switch    potentiometer for volume adjustment    two resistors and a capacitor We need to lay them out so they can fit in the handle, digispark and dfplayer can be kept close from each other, allow the right wire length for this other component based on where they will be located in the final mod (ie the usb charger has a usb port onboard that will need to be accessible for recharge) see images and photos Step 3: Open the Swatter Remove the battery and open the swatter (it should be only a few screws). It allows you to see how much room you have to place the add-on components but also check if your swatter matches what I use in this instructable... The major difference to care about it the "location" of the push botton of the swatter. On mine, it is located between the + of the battery and the swatter circuit. If this is the case you are good to go (see photo). On some swatter, this push button is located between the ground (-) and the circuit. In this case my modification and code will not work. I am pretty sure I can make it work with such swatter but it will need some adjustment on the hardware and software side. I will update this intructable once I have worked on this second type of swatter. Step 4: Modify the Swatter In this step we : - make some room for the battery in the compartment that was design for two AAA battery (and reuse the battery connector for the rechargeable battery) Step 5: Build the Circuit, Solder All Components Now that we know what is connected where, we can proceed with the soldering. Layout all components based on their final location in order to estimate the various wires lenght. In the previous step, for clarity purpose I did not draw the ground and VCC (5V) wires, but all ground need to be interconnected, all VCC need to be interconnected. For VCC, the digispark has 3 pin labeled 5V, they are linked together and can be used to redispatch to other components. Do not use the VIN of the digispark (VIN is a voltage input that need to be above 6V, we do not use that but rather the 5V ouptut from the battery charger). I suggest to start with the digispark : solder the digispark to the dfplayer. the digispark to the display, push button and potentiometer. use heat-shrink tubing to avoid contact and short cuts (like for the resistor between the digispark and the dfplayer). Then, proceed with the swatter circuit, battery chager, on/off switch: battery - to charger battery - input battery + to charger battery + input 1 ohm resistor on the swatter circuit (+) the capacitor on (+) and (-) of the swatter circuit, watch the capacitor polarity ! pin A12 of digispark to the push button (the push button has two connectors, one connected to the battery +, A12 goes to the other one) use heat-shrink tubing to avoid contact and short cuts (on the capacitor, on the resistor, etc ) See pictures for the progression... Step 6: Isolate the Display From the Swatter Circuit During my firsts tests I had display issues...the display would turn off or go crazy when a mosquito hit the mesh of the swatter. I suspect it was due to electronic disturbance generated by the high voltage variation impacting the display circuit and connections. The fix is simple, some tape on the circuit, aluminum foil (electromagnetic shield) and tape again. Of course, do not place the aluminum foil directly on the circuit or it will create shortcuts... Step 7: Load Sound on SD Card Sound played by the dfplayer are stored on an SD card. I kept it simple, formated the card and copy my selected sounds this is a sound played at power on ("get ready to the next fight") a "monster killed" sound a "level up" sound some sound files played randomly when a kill is detected. Once on the card dfplayer will play sounds based on a "track number". I could not find a clear description of the link between the dfplayer track number and the files on the SD card.  Based on observation, I suspect files are not sorted based on their name but rather with their inode number on the card (which can be seen with "ls -id" on linux) ls -id * | more 647 1_Monster_kill.mp3 648 2_mixkit-final-level-bonus-2061.wav 649 3_get_ready_to_the_newt_fight.mp3 650 mixkit-arcade-retro-scoring-counter-273.wav 651 mixkit-arcade-video-game-bonus-2044.wav 652 mixkit-arcade-video-game-scoring-presentation-274.wav 653 mixkit-game-bonus-reached-2065.wav 654 mixkit-game-experience-level-increased-2062.wav 655 mixkit-winning-an-extra-bonus-2060.wav I think that if you start from a freshly formated card, the sequence of track number / inode will be the order of the copy of the sound files (ie first file copied on the card will have tranck number 1) In my suggested code, the file/track selection is done with setTrack :  // 0 is random betwen tracks 4 to 9  // 1 is monster kill = track 1 (listed by inode on card (ls -id))  // 2 is level up  // 3 is power on  if (sound_type==0)  setTrack(int(random(4,9))); //SD card contains 9 files  if (sound_type==1)  setTrack(1); // monster kill  if (sound_type==2)  setTrack(2); //level up  if (sound_type==3)  setTrack(3); //power on So you could modify that part to have a match between the action (sound_type) and the track played. Step 8: Print a New Handle In case you are modifying the same swatter as used here, you could directly print my handle design. If not you will have to design your own... However some swatter have quite big handles with almost nothing in it, it might be possible to fit the add on circuit in without printing anything. You still need to find a place for the display and speaker. Step 9: Assemble Everything I used a hot glue gun to secure the parts in their final location. The speaker is also glued directly on the swatter. Step 10: Where Is the Mosquito ? Math and Stats to the Rescue Once again, if you do not care about the way it works and just want your Ultimate Mosquito Swatter for Gamer, you can skip this step...and maybe come back later. Once all components are soldered together if you load a simple program on the attiny that only do a analogRead(A12) and look at the raw data... it is a bit disappointing, raw data looks very noisy and you cannot tell where/when on the graph a mosquito (or something else, I did not wait for mosquitos to hit my racket to debug the code :) ) hit the mesh of the racket (see figure 1). Averaging if a good way to cleanup part of the noise, and my idea was to compare the last average to a "long term" average, but well it was a bit disappointing too (see figure 2). Next step is to read and learn what smarter people do...https://www.iese.fraunhofer.de/blog/change-point-detection/ This looks exactly what I am looking for, the calculation of the standard deviation of my signal should allow me the detect those kills (see the animation "Animation of change point detection via sliding window " on the link above). Applied to our setup it give the following results (figure 3). In my program I calculate the square of the standard deviation, we can see it reaches very high values when I push or release the racket button (this is expected, the signal goes from 0V to close to 5V), but once those phases are excluded, I can monitor this standard deviation and assume that if it goes to some high values, we have a disturbance in the circuit which must be a mosquito kill (figure 4) ! Now that we know how to find a kill, the rest is easy (play a sound, increase score). To be honest and more accurate, some more things were added : - a 470 uF capacitor (which by it self provide some more noise filtering and serve as some sort of power bank when high current is needed) - we have a two level averaging mechanism (you will see in the code that I measure 5 times in a raw the voltage on pin A12, average it and then store this averaged value for the sliding window of the standard deviation calculation)  Step 11: Load Program on the Digispark Pro This is pretty straighforward, the attiny can be programmed using the arduino IDE instructions : http://digistump.com/wiki/digispark/tutorials/connectingpro Some explanations on the code I am suggesting: in the setup() funtion, we initialize the serial communication needed for the dfplayer, read the potentionmeter value to adjust the volume (it is read only once at setup time to avoid using cycles for this, which means the swatter woud need to be power off /on to take into account a volume adjustment). Samething for the counter reset, I you want to reset score to zero, you need to push the reset button, power on the swatter and wait for the display to show "0". It then read the score stored in EEPROM. It sets Brightness of the display (otherwise it remains off). In the loop() function we basically process the average of the swatter power process_average() and the square of the standard deviation which tells us if we have a kill or not (process_std_dev() ) Step 12: Update the Digispark Micronucleus (optionnal) The digispark micronucleus is the piece of code in charge of "starting" the digispark. It checks if we are trying to upload a new program and if not start the program already loaded. The problem is that it waits for 6 seconds for this check, which is fairly long when your are waiting for your swatter to be ready for a hunt... Thanksfully there are some variants of the micronucleus with a different checking mechanism. If you update your micronucleus following those instructions (use the "recommended" config), the swatter will be ready after one or two seconds only. Instructions : https://github.com/ArminJo/micronucleus-firmware Reload your program after updating the micronucleus firmware. Step 13: Troubleshooting... Hopefully you will not have to read this but...some tips just in case... not much work...check wire and solder if the swatter restarts by itself (you hear the starting sound but have not switched on/off), recharge the battery the swatter shutoff by itself after about 30 seconds. some USB charger circuit have an automatic standby mode (that was the case for mine which is using chip IP5306) and will go in standy mode if less than some amount (45mA for the IP5306) of current is consumed. the first workaround possible is to press the swatter button on a regular basis...like every 20sec. this would maintain the power up the board (with IP5306) has a "key" feature allowing to power on or off. it is labeled "K" on the board. Solder this to pin 10 of the digispark. the watchdog() function on the code I suggested will keep the power up. if the swatter is really bad at detecting or wrongly detect...well you may have to do some code adjustment... I spent hours tuning this device and its code. The major difficulty is to monitor what is going on... If you want to use the USB port to display some variables, you have to modify the code in order to use the DigiCDC library and remove the SoftSerial (which is used for the 4 digit display). But more over when doing so, you get power from the USB port and not the battery charger port and this makes a big difference...The quality of VCC impacts a lot our calculated average and standard deviation... In other words any tuning performed while connected on the USB will probably not work when running from battery... One way to get some little information is to use the display itself (ie display the last standard deviation when the reset button is pressed) Knowing that, you can try to adjust the following values in the code which impact (a lot) our detections: the number of samples taken for a single read : int samples=10; The size of the average sliding window : int nbr_slot=15; int value[16];  // array of (nbr_slot + 1) The standard deviation thresholds : int threshold=110; int monster_threshold=250; Step 14: Improve the Swatter, Share Your Improvements Things could be done differently of course, If you improve the swatter, find simpler way to do it, design a handle for other models. Source: Ultimate Mosquito Swatter Mod for Gamer: Add Kill Counter, Sound, Rechargeable Battery. ### ULTRA-LOW DROPOUT LINEAR LED DRIVER FROM DIODES INCORPORATED EXTENDS LIGHTING STRIPS Diodes Incorporated today announced the BCR430UW6 linear LED driver with ultra-low dropout voltage and constant current regulation between 5mA and 100mA. This combination allows more LEDs to be driven from a low supply voltage, making the BCR430UW6 suitable for applications that require multiple LEDs to operate together, such as signage illumination and architectural lighting for commercial and retail installations. The ultra-low dropout voltage of 115mV and low operating current of just 285μA provides a greater level of system efficiency and scope to drive more LEDs per string reliably. These factors are particularly important in applications where the characteristics of the lighting are essential to the user experience, such as signage and architectural illumination. The device requires no external power transistors or capacitors, reducing the overall BoM cost and increasing system stability. Long-term reliability is also improved through the robust design, which is tolerant to overvoltage levels resulting from faults in the LEDs or supply transients. Integrated thermal protection limits the output current in the event of high operating temperatures, avoiding operational failure and maximizing the working lifetime of the LEDs. Features LED Current Tolerance of ±5% at 95mA Output Current Thermal Protection Reduces LED Current at Elevated Temperature Low Typical Saturation Voltage of 115mV at 50mA 5mA to 100mA Adjustable LED Current with an External Resistor 5V to 42V Supply Voltage High Power 1W Dissipation in SOT26 No External Capacitors Required for Stable Operation LED Dimming Using PWM Parallel Devices to Increase Regulated Current With an adjustable output current level between 5mA and 100mA, the BCR430UW6 can provide greater flexibility, allowing a single design to be used to drive various LED configurations. The output is highly stable, held at ±5% across temperature variations and supply voltage fluctuations. This stability delivers a uniform output lighting level under all operating conditions. Read more: ULTRA-LOW DROPOUT LINEAR LED DRIVER FROM DIODES INCORPORATED EXTENDS LIGHTING STRIPS ### Using Temperature, Rainwater, and Vibration Sensors on an Arduino to Protect Railways In modern-day society, an increase in rail passengers means that rail companies must do more to optimize networks to keep up with the demand. In this project we will show on a small scale how temperature, rainwater, and vibration sensors on an arduino board can potentially help increase the safety of passengers. This Instructable will step-by-step show the wiring for the temperature, rainwater, and vibration sensors on the arduino as well as show the MATLAB code required to run these sensors. Step 1: Parts and Materials 1. A computer with the latest version of MATLAB installed 2. Arduino Board 3. Temperature Sensor 4. Rainwater Sensor 5. Vibration Sensor 6. Red LED Light 7. Blue LED Light 8. Green LED Light 9. RBG LED Light 10. Buzzer 11. 18 Male-Male Wires 12. 3 Female-Male Wires 13. 2 Female-Female Wires 14. 6 330 ohm resistors 15. 1 100 ohm resistor Step 2: Temperature Sensor Wiring Above is the wiring and MATLAB code for the temperature sensor input as well. The wires from ground and 5V only need to be ran to the negative and positive respectively once for the entire board. From here on out, any ground connections will come from the negative column and any 5V connections will come from the positive column. The code below can be copy and pasted for the temperature sensor. %% TEMPERATURE SENSOR% For the temperature sensor we used the following source along with % EF230 website material to modify our temperature sensor to allow user % input and 3 LED light outputs with a graph. %This sketch was written by SparkFun Electronics, %with lots of help from the Arduino community. %Adapted to MATLAB by Eric Davishahl. %Visit http://learn.sparkfun.com/products/2 for SIK information. clear all, clc tempPin = 'A0'; % Declaring the analog pin connected to the temp sensor a=arduino('/dev/tty.usbserial-DA017PNO','uno'); % Define anonymous function that converts the voltage to temperature tempCfromVolts = @(volts) (volts-0.5)*100; samplingDuration = 30; samplingInterval = 2; % Seconds between temperature readings %set up vector of sampling times samplingTimes = 0:samplingInterval:samplingDuration; %calculate the number of samples based on the duration and interval numSamples = length(samplingTimes); %preallocate temp variables and variable for the number of readings it will store tempC = zeros(numSamples,1); tempF = tempC; % using input dialog box to store max and min rail temperatures dlg_prompts = {'Enter Max Temp','Enter Min Temp'}; dlg_title = 'Rail Temperature intervals'; N=22; dlg_ans = inputdlg(dlg_prompts,dlg_title,[1, length(dlg_title)+N]); % Storing the inputs from user and displaying that the input was recorded max_temp = str2double(dlg_ans{1}) min_temp = str2double(dlg_ans{2}) txt = sprintf('Your input has been recorded'); h=msgbox(txt); waitfor(h); % For loop to read the temperatures a specific number of times. for index = 1:numSamples % Read the voltage at tempPin and store as variable volts volts = readVoltage(a,tempPin); tempC(index) = tempCfromVolts(volts); tempF(index) = tempC(index)*9/5+32; % Convert from Celsius to Fahrenheit % If statements to make specific LED lights blink depending on which condition is met if tempF(index) >= max_temp % Red LED writeDigitalPin(a, 'D13', 0); pause(0.5); writeDigitalPin(a, 'D13', 1); pause(0.5); writeDigitalPin(a, 'D13', 0); elseif tempF(index) >= min_temp && tempF(index) < max_temp % Green LED writeDigitalPin(a, 'D11', 0); pause(0.5); writeDigitalPin(a, 'D11', 1); pause(0.5); writeDigitalPin(a, 'D11', 0); elseif tempF(index) <= min_temp % Blue LED writeDigitalPin(a, 'D12', 0); pause(0.5); writeDigitalPin(a, 'D12', 1); pause(0.5); writeDigitalPin(a, 'D12', 0); end % Display the temperatures as they are measured fprintf('Temperature at %d seconds is %5.2f C or %5.2f F.\n',... samplingTimes(index),tempC(index),tempF(index)); pause(samplingInterval) %delay until next sample end % Plotting the temperature readings figure(1) plot(samplingTimes, tempF,'r-*') xlabel('Time (Seconds)') ylabel('Temperature (F)') title('Temperature Readings from the RedBoard') Step 3: Temperature Sensor Output Above is the wiring and MATLAB code for the temperature sensor output. For this project we used three LED lights for the output of our temperature sensor. We used a red for if the tracks were too hot, a blue if they were too cold, and a green if they were in between. Step 4: Rainwater Sensor Input Above is the wiring for the rain water sensor and the MATLAB code is posted below. %% Water sensor clear all, clc a=arduino('/dev/tty.usbserial-DA017PNO','uno'); waterPin = 'A1'; vDry = 4.80; % Voltage when there is no water present samplingDuration = 60; samplingInterval = 2; samplingTimes = 0:samplingInterval:samplingDuration; numSamples = length(samplingTimes); % For loop to read the voltage for a specific amount of time (60 seconds) for index = 1:numSamples volt2 = readVoltage(a,waterPin); % Read voltage from water pin analog % If statement to sound a buzzer if water is detected. Voltage drop = water if volt2 < vDry playTone(a,'D09',2400) % playTone function from MathWorks % Display a warning to passengers if water is detected waitfor(warndlg('Your train may be delayed due to water hazards')); end % Display the voltage as it's measured by the water sensor fprintf('Voltage at %d seconds is %5.4f V.\n',... samplingTimes(index),volt2); pause(samplingInterval) end Step 5: Rainwater Sensor Output Above is the wiring for a buzzer that beeps whenever too much water falls on the track. The code for the buzzer is embedded within the code for the rainwater input. Step 6: Vibration Sensor Input Above is the wiring for the vibration sensor. Vibration sensors can be important for railway systems in the case of falling rocks on a track. The MATLAB code is posted below. %% Vibration Sensorclear all, clc PIEZO_PIN = 'A3'; % Declaring the analog pin connected to the vibration sensor a=arduino('/dev/tty.usbserial-DA017PNO','uno'); % Initializing the time and interval to measure vibration samplingDuration = 30; % Seconds samplingInterval = 1; samplingTimes = 0:samplingInterval:samplingDuration; numSamples = length(samplingTimes); % Using the code from the following source we modified it to turn on a % purple LED if vibration is detected. % SparkFun Tinker Kit, RGB LED, written by SparkFun Electronics, % with lots of help from the Arduino community % Adapted to MATLAB by Eric Davishahl % Initializing the RGB pin RED_PIN = 'D5'; GREEN_PIN = 'D6'; BLUE_PIN = 'D7'; % For loop to record voltage changes from the vibration sensor over a % specific time interval (30 seconds) for index = 1:numSamples volt3 = readVoltage(a,PIEZO_PIN); % If statement to turn a purple LED on if vibration is detected if volt3>0.025 writeDigitalPin(a,RED_PIN,1); % Creating a purple light writeDigitalPin(a,GREEN_PIN,0); writeDigitalPin(a,BLUE_PIN,1); else % Turn off LED if no vibration is detected. writeDigitalPin(a,RED_PIN,0); writeDigitalPin(a,GREEN_PIN,0); writeDigitalPin(a,BLUE_PIN,0); end % Display the voltage as it is measured. fprintf('Voltage at %d seconds is %5.4f V.\n',... samplingTimes(index),volt3); pause(samplingInterval) end % Cut off light when measuring vibrations is done writeDigitalPin(a,RED_PIN,0); writeDigitalPin(a,GREEN_PIN,0); writeDigitalPin(a,BLUE_PIN,0); Step 7: Vibration Sensor Output Above is the wiring for the RBG LED light used. The light will glow purple when vibrations are detected. The MATLAB code for the output is embedded within the code for the input. Step 8: Conclusion After following all of these steps you should now have an arduino with the ability to detect temperature, rainwater, and vibrations. While viewing how these sensors work on a small scale, it is easy to imagine how vital they could be to railway systems in modern life! Source: Using Temperature, Rainwater, and Vibration Sensors on an Arduino to Protect Railways ### Arduino ATtiny2313 Programming Shield Today, I constructed a compact 3x3x3 LED cube utilizing an ATtiny2313 that I acquired around 2 weeks ago. Every time I wanted to update the LED cube with better patterns, I had to bring out my breadboard, reconnect everything following ATtiny2313 pin-outs, and upload the updated code. I proceeded to search on eBay and Amazon for a device to program these chips since I intended to use them frequently in the future. I wasted an hour before realizing I couldn't justify spending 20-30 dollars on a basic shield. After some consideration, I opted to create a straightforward and convenient ATtiny2313 programming shield. Once it was constructed, all I had to do to reprogram any of my attinys was to place it in the programming shield and with just a few clicks, the code would be uploaded. There is no need to be concerned about whether all the connections are correct and ensure there are no short circuits or any other issue that could damage the chip or any other components. In this guide, I will demonstrate how to construct a shield like this for your own use! It requires minimal cost and can be made in just around 30 minutes. Let's begin now! Step 1: Materials   Tools required for this project; Soldering Iron Solder Glue Gun (Or just good glue) Step 2: Prototype and Pinout The diagram illustrates how to connect all components together by following the pin-out diagram, connecting everything to a protoboard with headers that can be placed on the arduino as a shield instead of directly. Ensure the pin-out diagram of the ATtiny2313 is close by while connecting everything to prevent potential forgetful mistakes. Image showing the pin configuration of ATtiny2313 sourced from http://blog.williambritt.com/uploads/attiny2313-pinout.png. Step 3: Working on the actual shield Begin by connecting the female headers to the middle of the protoboard, followed by inserting the male headers into the arduino. Next, place the protoboard onto the arduino to determine the precise location for soldering the male headers. Next, attach the male header pins to the female headers based on the pin-out diagram (Female headers will connect the ATtiny2313 while male headers will connect the shield to the Arduino). Next, attach the 2 LED's and the capacitor and wire them following the pin configuration. Ensure the correct orientation of the polarized capacitor. After everything is properly connected to the arduino and a test code is uploaded to ensure proper functionality (instructions for this in the next step), apply hot-glue to the solder joints to secure them and prevent any incorrect connections. Another option is to utilize electrical insulating gel/adhesive. Major Components in Project Materials required for this project; Protoboard 10 Micro Farad Capacitor (or similar value) 2 LED’s A couple of wires A single row pin header strip A single row female pin header strip For more detail: Arduino ATtiny2313 Programming Shield ### VACUUM TUBE PRE-AMPLIFIER RUNS ENTIRELY ON 3.3V, INCLUSIVE OF FILAMENT VOLTAGE Most vacuum tubes need about 6.3V high supply plus filament voltage to operate. Running at 3.3V inclusively of the filament voltage, the new vacuum tube amplifier from Albert van Dalen has proven it possible to have one with the capacity to operate on an entirely low power supply voltage and still work well. To be able to do experiments with vacuum tubes, I bought a cheap DIY 6J1 tube amplifier on Ali Express. Like most vacuum tube circuits, it uses a relatively high supply voltage of 60V. However, a high voltage is not always required for vacuum tubes, sometimes 12V is used. I was curious how far one can go with reducing the power supply. Nowadays the most common used power supply voltage for electronics is 3.3V and before this was 5V.” says van Dalen as he explains how he started with his design and was able to gradually decrease the voltage going from 60 V to 12 V to 5 V and then finally down to 3.3V partly by using a grid bias that looks like a bipolar transistor instead of the usual single-ended design. Van Dalen also added that asides being able to work with a low supply voltage, power the preamp can also be used for audio purposes and can easily be powered from a USB. Tube amplifiers are used for nostalgia reasons and to get the characteristic tube sound. For this purpose, this preamp is useful, and you can simply power it from USB. The gain is -3.5 and music sounds undistorted. Just the red light from the filament is dimmed. However, some of the oddities caused by this very low supply voltage as observed by van Dalen in his experiment included a positive grid-cathode voltage instead of being negative and a very high grid current of 0.3 mA. Read more: VACUUM TUBE PRE-AMPLIFIER RUNS ENTIRELY ON 3.3V, INCLUSIVE OF FILAMENT VOLTAGE ### High-Power Control: Arduino + N-Channel MOSFET Eventually you are going to find yourself holding a 12v solenoid, motor, or light and wondering “How the heck am I supposed to control this from my Arduino?” And we have covered this in the past. Today we are going to talk about another way of doing just that, this time with an N-Channel MOSFET metal–oxide–semiconductor field-effect transistor, specifically the RFP30N06LE MOSFET (You can pick these up from sparkfun). but you can use any N-Channel MOSFET exactly the same way. How this works Once the code is uploaded to the ESP32, you can start building the project by using a 3D printer to create a casing for the system. The enclosure's STL files have been shared, comprising two parts that can be assembled together. Kindly adhere to the provided instructions in order to properly arrange all the parts for a tidy and snug placement. Using precautions such as heat shrink tubing and insulation tape is recommended to ensure proper insulation and prevent possible short circuits. WARNING: I am going to make this really simple, so pay attention... my aim is to explain in easy terms what is happening. To begin with, a MOSFET is simply a unique type of transistor. If you are unfamiliar with transistors, they are components with three leads that serve two basic functions: switching and amplifying (in this case, it is configured as a switch). You have an Input labelled the Source, an Output called the Drain, and a Control named the Gate. Sending a HIGH signal to the gate causes the transistor to switch, enabling current to move from the source to the drain. Therefore, we connect our motor, solenoid, or light to the V+ terminal rather than the ground (V-) terminal. The ground is linked to the drain of the transistor. By sending a HIGH signal to the transistor's gate, the arduino activates the transistor, allowing current to flow between the drain and source, and forming a complete circuit for the motor, solenoid, or light. More Information If you want to know more, or actually know what is actually going on in there. Pete over at Sparkfun put out amazing video explaining MOSFETs for a solid 20min. Highly recommended. Hooking it up / What’s the diode used for? This circuit is pretty simple. The only part that looks funny is the resistor. This is a pull-down resistor. The resistor holds the gate low when the arduino does not send a high signal. This is here incase the arduino comes loose, or the wiring is bad it will default to off. You don’t want this pin to ever be floating as it will trigger on and off. You can see that in 2 of the 3 illustrations, there is a diode parallel to the device we are powering. Any time you are powering a device with a coil, such as a relay, solenoid, or motor, you need this guy, and don’t leave home without it. What happens is when you stop powering the coil, a reverse voltage, up to several hundred volts, spikes back. This only lasts a few microseconds, but it is enough to kill our MOSFET. So this diode (only allows current to pass one way) is normally facing the wrong direction and does nothing. But when that voltage spikes comes flowing the opposite direction, the diode allows it to flow back to the coil and not the transistor. We will need a diode fast enough to react to the kickback, and strong enough to take the load. A rectifier diode like the 1N4001 or SB560 should do the job. If you are looking for extra protection you could use an optoisolator between the Arduino and the transistor. An optoisolator optically isolates both sides (high and low power) of the circuit so the high-voltage can not possibly come back to the microcontroller. For more detail: High-Power Control: Arduino + N-Channel MOSFET ### VERSATILE NXP I.MX8 BASED FAMILY OF SCALABLE HUMMINGBOARD SINGLE BOARD COMPUTERS Featuring the HummingBoard Pulse & Ripple Carrier Platforms Designed for NXP’s Arm-based i.MX8M & i.MX8M Mini SoCs – The New Family Offers Ultimate Flexibility for Range of Multimedia, AI, Automation & IoT Applications. SolidRun today introduces iMX8-based HummingBoard-M family of single board computers, including the media & IoT centric HummingBoard Pulse and skimmer HummingBoard Ripple, designed for the NXP i.MX8M & i.MX8M Mini based SOMs. The new family offers a highly versatile and scalable variety of configurations for simple development and easy implementation for a wide range of audio-visual, IoT, industrial automation, machine vision, AI and IoT applications. The new family includes two SOMs (System on Modules) designed around NXPs powerful i.MX8 family of Arm processors. i.MX8M SOM offers high-end multimedia abilities including 4K@60 HDR, 20 audio channels, HDMI 2.0, and rich connectivity options. For even better power-efficiency and lower thermal envelope we’ve designed i.MX8M Mini SOM – offering a well-rounded foundation boasting best power-performance in its class. A further configuration for the new i.MX8M Mini SOM is the addition of a Gyrfalcon Lightspeeur® SPR2803 AI acceleration chip, turning it into a robust artificial intelligence building block for deployable AI inference at the edge. Supplementing the i.MX8 based SOMs, we have designed two deployment ready single board computers, developed around our popular HummingBoard design including Pulse & Ripple. HummingBoard Pulse has received a recent update and offers a range of connectivity options designed to get the most out of both SOMs, while HummingBoard Ripple is more cost effective and highlights the features supported by the i.MX8M Mini SOM. Both carrier boards are compatible with both SOMs, and together offer a scalable and flexible family of platforms allowing OEMs and developers fast time-to-market, lower developmental costs and simpler development cycle for realization of a wide range of solutions. The new HummingBoard-M family is a highly versatile, powerful and energy-efficient addition to our growing embedded platform fan-out” said Ilya Viten, SolidRun’s Industrial & IoT LOB Manager. “HummingBoard Pulse and Ripple with the remarkable i.MX8M and i.MX8M Mini based SOMs offer a strong leap forward for embedded solutions, with cutting-edge multimedia and AI capabilities and based on our popular HummingBoard and SOM form factor designs Read more: VERSATILE NXP I.MX8 BASED FAMILY OF SCALABLE HUMMINGBOARD SINGLE BOARD COMPUTERS ### VISHAY INTERTECHNOLOGY 30 V MOSFET HALF-BRIDGE POWER STAGE DELIVERS 11 % HIGHER OUTPUT CURRENT IN POWERPAIR® 3X3F Vishay Intertechnology, Inc. today introduced a new 30 V n-channel MOSFET half-bridge power stage that combines a high side TrenchFET® MOSFET and low side SkyFET® MOSFET with an integrated Schottky diode in one compact PowerPAIR® 3.3 mm by 3.3 mm package. For power conversion in computing and telecom applications, the Vishay Siliconix SiZF300DT delivers increased power density and efficiency, while reducing component counts and simplifying designs. The two MOSFETs in the device released today are internally connected in a half-bridge configuration. The Channel 1 MOSFET provides maximum on-resistance of 4.5 mΩ at 10 V and 7.0 mΩ at 4.5 V. The Channel 2 MOSFET features on-resistance of 1.84 mΩ at 10 V and 2.57 mΩ at 4.5 V. Typical gate charge for the MOSFETs is 6.9 nC and 19.4 nC, respectively. The SiZF300DT is 65 % smaller than dual devices in 6 mm by 5 mm packages with similar on-resistance, making it one of the most compact integrated products on the market. The device provides designers with a space-saving solution for point-of-load (POL) conversion, power supplies, and synchronous buck and DC/DC converters in graphic and accelerator cards, computers, servers, and telecom and RF networking equipment. Read more: VISHAY INTERTECHNOLOGY 30 V MOSFET HALF-BRIDGE POWER STAGE DELIVERS 11 % HIGHER OUTPUT CURRENT IN POWERPAIR® 3X3F ### VISHAY’S INTEGRATED RGBC-IR COLOR SENSORS WITH I²C INTERFACE IN LOW PROFILE PACKAGES Vishay Intertechnology, Inc.today broadens its optoelectronics portfolio with new RGBC-IR sensors for applications such as automatic white balancing and color cast correction in digital cameras; automatic LCD backlight adjustment; and active monitoring of LED color output for IoT and smart lighting. The new VEML3328 (top-looking) and VEML3328SL (side-looking) sensors offer better linearity and higher sensitivity compared to previous generation devices, as well as new features including an infrared (IR) channel. The sensors released today sense red, green, blue, clear, and IR light by incorporating photodiodes, amplifiers, and analog / digital circuits into a single CMOS chip. With the ability to calculate color temperature and sense ambient light, the devices offer a compact solution for adjusting backlighting in consumer electronics and notebook computers. They can also help to differentiate indoor from outdoor lighting environments to ensure that displays maintain consistent true color and ideal brightness levels based on the current environment lighting conditions. In addition to digital camera and TV applications, the VEML3328 and VEML3328SL will also be used in various industrial and consumer applications where their excellent temperature compensation capability will keep the sensors’ output stable under changing temperatures. The sensors’ built-in ambient light photodiode offers extremely high sensitivity, allowing the devices to operate in applications with dark lens designs. A programmable analog gain and integration time function, as well as the additional IR channel, allow designers to tailor the VEML3328 and VEML3328SL to their applications. Read more: VISHAY’S INTEGRATED RGBC-IR COLOR SENSORS WITH I²C INTERFACE IN LOW PROFILE PACKAGES ### WALNUT CASE SETS THIS CUSTOM ARDUINO-POWERED RPN CALCULATOR APART FROM THE CROWD How many of us have an everyday tool that’s truly unique? Likely not many of us; take a look around your desk and turn out your pockets, but more often than not, what you’ll find is that everything you have is something that pretty much everyone else on the planet could have bought too. But not so if you’ve got this beautiful custom RPN calculator in a wooden case. This one comes to us from [Shinsaku Hiura], who generally dazzles us with unique mechanical clocks and displays. This calculator solves a more practical problem — the dearth of RPN calculators on the market with the correct keyboard feel, specifically with the large keys and light touch he desired. Appropriately, the build started with a numeric keypad, which once liberated of its USB interface was reverse-engineered to figure out how the matrix was wired. Next up, a custom PCB to connect the keypad to an Arduino and a 20×4 LCD display was milled up, while a test case was designed and printed to check fitment. The final case was milled from a block of solid walnut and fitted with an acrylic window, for a sharp look with clean lines and pleasing colors. As for the calculator itself, the demo below shows it going through its paces. The code is clever because it leverages the minimal number of keys available by hiding all the scientific and engineering functions behind a “secret silver key” that was once the equals key and obviously not needed in RPN. Hats off to [Shinsaku] for a handsome and unique addition to his desk. Source: WALNUT CASE SETS THIS CUSTOM ARDUINO-POWERED RPN CALCULATOR APART FROM THE CROWD ### Creating a DIY device for monitoring power consumption using ESP32 Electrical appliances, such as smartphones chargers and room heaters, play a crucial role in our everyday routines. This includes larger devices like air conditioners and washing machines. With the ongoing worldwide energy crisis, it is essential to understand the electricity usage of these devices. Although our monthly electricity bills give us a broad view of our total energy usage, they do not give detailed information about the current power consumption of specific devices. Detecting both voltage and current draw from our appliances is crucial for accurately measuring and monitoring power usage. Commercial energy monitoring devices are widely accessible in the market for this intention, however, they frequently have a high cost and lack the practical learning and fun experience of a do-it-yourself method. This article will discuss how to make a simple device for tracking energy usage. This project aims to accomplish this objective by utilizing an ESP32 and easily available sensors. Materials needed to construct a Smart Power Consumption Meter ESP32 WROOM 32D Module HI LINK 5V 3W SMPS 0.96” 128X64 I2C LED ZMPT101B Voltage Sensor ACS712 Current Sensor 220V AC 3 Pin Socket MALE 220V AC 3 Pin Socket FEMALE 3D Printed Casing The functioning principle of the Smart Power Consumption Meter Our main goal in starting the project is to send voltage and current data to the ESP32 microcontroller. The data collected from the sensors will be processed by the ESP32 and sent to the OLED Display for the user to see energy usage. Furthermore, we will also include a HI-Link 5V SMPS Module to supply power to these components by efficiently converting 220V AC to 5V DC. ZMPT101B Voltage Sensor The ZMPT101B is a sensor that acts as a voltage transformer, reducing the voltage proportionately and offering an analog output to the user. It offers an isolation voltage of 4000V and a safe operating voltage of 1000V. Upon examining the schematic, it becomes apparent that the ZMPT Transformer's output is directed to an LM358N Low Power Dual Op-Amp IC, which serves to amplify the voltage peaks. ACS712 20A Current Sensor The ACS712 is a chip created for detecting current by using Hall effect sensors. It includes a Hall effect IC that detects changes in the magnetic field while current passes through, transforming these changes into a voltage that is proportional to the current. Then, the user is provided with this voltage output. After analyzing the Sensor Module schematic, it becomes evident that the IC comes with almost all the essential components built into it, needing just a few passive components to function. Among the three available variants of the IC (5A, 20A, 30A), we opted for the 20A version. This choice aligns with our current measurement needs, offering a balance between capacity and resolution that suits our purposes well. Diagram for Connecting the Power Consumption Monitoring Device The diagram illustrates the parallel connection of the Hi-link SMPS and the input terminal of the voltage sensor (ZMPT101B) to the AC Live and AC Neutral, with the current sensor (ACS712) forming a series connection with the live AC wire The OLED display is linked through the ESP32's I2C pins, while the Voltage and Current sensors are attached to Pin 34 and Pin 36 (VP), respectively. These pins have the capability to perform analog-to-digital conversion using the 12-BIT ADC integrated into the ESP32 All the components receive power from the 5V output of the Hi-Link module through the Vo+ and Vo- terminals Programming code for the Power Consumption Monitoring Device Installing Required Libraries We initiate the process by installing the Adafruit GFX and Adafruit SSD 1306 Library. You can conveniently access the library manager within the Arduino IDE by navigating to the tools menu We locate Adafruit GFX and Adafruit SSD1306 and proceed to install them with a simple click on the "Install" button. Next, we need to install the libraries for the ZMPT101B and ACS712 current sensor modules. These libraries share a similar codebase, and while you can find the original libraries [here], we've made slight modifications to adapt them to the new microcontroller and ensure compatibility with the ESP32's 12-bit 3.3V ADC. The installation procedure for both libraries follows the same steps. Just visit the respective libraries' GitHub repository and click on the "Download ZIP" button located under the dropdown menu of the "Code" button. After the ZIP file has been downloaded, open the Arduino IDE and navigate to Sketch >> Include Library >> Add ZIP Library. Find the downloaded ZIP file for the library and then click on it to open. The Arduino IDE will proceed to install the library. You can apply the same procedure for both libraries. Once these libraries are successfully installed, we can readily include them at the start of our code. #include "ZMPT101B.h" #include "ACS712.h" #include #include #include #include The Wire and SPI libraries come pre-installed in the IDE and are essential for the operation of the I2C bus, which is crucial for the OLED Display's functionality. Initialization Commands Now, we proceed to initialize objects for both the current and voltage sensors as follows: ZMPT101B voltageSensor(34); ACS712 currentSensor(ACS712_20A, 36); Furthermore, we initiate our OLED display using the subsequent lines of code #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); Subsequently, we declare and initialize several global variables that will prove essential in our code as we progress. float P=0; float U=0; float I=0; long dt=0; float CulmPwh=0; float units=0; long changeScreen=0; float lastSample=0; unsigned long lasttime=0; long ScreenSelect = 0; Void Setup Code In the initialization code, we set up the zero point and sensitivity parameters for our sensors and also start the display. Please be aware: The sensitivity value in the code should stay the same, but it might be needed to make changes to the zero point. To make this adjustment, uncomment each line of code identified as "Calibration Commands" individually, ensuring that there is no current or voltage on the module. The code will show a zero point on the screen, allowing you to modify the zero point value in the code. Both the Current and Voltage Sensors must undergo the calibration process separately. void setup() { Serial.begin(9600); delay(100); voltageSensor.setSensitivity(0.0025); voltageSensor.setZeroPoint(2621); currentSensor.setZeroPoint(2943); currentSensor.setSensitivity(0.15); if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); for(;;); } // Clear the buffer display.clearDisplay(); display.display(); //Caliberation Commands Need To Be Run On First Upload. //CalibCurrent(); //CalibVoltage(); } Void Loop Code In the setup code, we set the zero point and sensitivity parameters for our sensors, starting the display. Please be aware: The sensitivity value in the code should stay the same, but the zero point may need to be adjusted. In order to make this adjustment, remove the comments from the code lines identified as "Calibration Commands" individually, ensuring that there is no current or voltage on the module. The code will show a 0 point on the screen, allowing you to adjust the zero point value in the code. Both the Current and Voltage Sensors must be calibrated separately. . void loop() { // To measure voltage/current we need to know the frequency of voltage/current // By default 50Hz is used, but you can specify desired frequency // as first argument to getVoltageAC and getCurrentAC() method, if necessary U = voltageSensor.getVoltageAC(); if(U<55) { U=0; CulmPwh=0; } I = currentSensor.getCurrentAC(); dt = micros()- lastSample; if(I<0.15) { I=0; CulmPwh=0; } // To calculate the power we need voltage multiplied by current P = U * I; CulmPwh = CulmPwh + P*(dt/3600);///uWh units= CulmPwh/1000; if(millis()-changeScreen>5000) { ScreenSelect+=1; changeScreen=millis(); } if(millis()-lasttime>500) { if((ScreenSelect%4)==0) { displayVoltCurrent(); }//Volts and Current else if( (ScreenSelect%4)==1) { displayInstPower(); }//Instantaenous Power else if( (ScreenSelect%4)==2) { displayEnergy(); } //Energy else if( (ScreenSelect%4)==3) { displayUnits(); } //Units } lastSample=micros(); } User Defined Functions Reviewing the provided code, it becomes evident that we have employed functions such as: CalibCurrent(); CalibVoltage(); displayVoltCurrent(); displayInstPower(); displayEnergy(); displayUnits(); displayCenter(String,Position); We did not use the library's built-in functions for these functions; instead, we created them ourselves. Their goal is to aid in transmitting data to the OLED Module and to keep code organization intact. These specialized functions can be positioned after the void loop() function. void displayVoltCurrent() { display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(0,0); void displayVoltCurrent() { display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(3); displayCenter(String(U)+"V",3); display.setTextSize(3); displayCenter(String(I)+"A",33); display.display(); lasttime=millis(); } void displayInstPower() { display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(2); display.setCursor(0,0); displayCenter("Power",3); display.setTextSize(3); if(P>1000) { displayCenter(String(P/1000)+"kW",30); } else { displayCenter(String(P)+"W",30); } display.display(); lasttime=millis(); } void displayEnergy() { display.clearDisplay(); display.setTextColor(WHITE); if(CulmPwh>1000000000) { display.setTextSize(2); displayCenter("Energy kWh",3); display.setTextSize(3); displayCenter(String(CulmPwh/1000000000),30); } else if(CulmPwh<1000000000 && CulmPwh>1000000) { display.setTextSize(2); displayCenter("Energy Wh",3); display.setTextSize(3); displayCenter(String(CulmPwh/1000000),30); } else if(CulmPwh<1000000 && CulmPwh>1000) { display.setTextSize(2) displayCenter("Energy mWh",3); display.setTextSize(3); displayCenter(String(CulmPwh/1000),30); } else { display.setTextSize(2); displayCenter("Energy uWh",3); display.setTextSize(3); displayCenter(String(CulmPwh),30); } display.display(); lasttime=millis(); } void displayUnits() { display.clearDisplay(); display.setTextColor(WHITE); if(units>1000000) { display.setTextSize(2); displayCenter("Units",3); display.setTextSize(3); displayCenter(String(units/1000000),30); } else if(units<1000000 && units>1000) { display.setTextSize(2); displayCenter("MilliUnits",3); display.setTextSize(3); displayCenter(String(units/1000),30); } else { display.setTextSize(2); displayCenter("MicroUnits",3); display.setTextSize(3); displayCenter(String(units),30); } display.display(); lasttime=millis(); } void CalibCurrent() { while(1) { currentSensor.calibrate(); Serial.print("Zero Point Current :"); Serial.println(currentSensor.getZeroPoint()); display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(0,0); display.print("Current Zero Point :"); display.setCursor(0,20); display.setTextSize(2); display.print(currentSensor.getZeroPoint()); display.display(); delay(500); } } void CalibVoltage() { while(1) { voltageSensor.calibrate(); Serial.print("Zero Point Voltage :"); Serial.println(voltageSensor.getZeroPoint()); display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(0,0); display.print("Voltage Zero Point :"); display.setCursor(0,20); display.setTextSize(2); display.print(voltageSensor.getZeroPoint()); display.display(); delay(500); } } void displayCenter(String text, int line) { int16_t x1; int16_t y1; uint16_t width; uint16_t height; display.getTextBounds(text, 0, 0, &x1, &y1, &width, &height); // display on horizontal center display.setCursor((SCREEN_WIDTH - width) / 2, line); display.println(text); // text to display display.display(); } Assembly of the Energy Monitoring System Once the code is uploaded to the ESP32, you can start building the project by printing a 3D enclosure for the system. The enclosure's STL files have been shared, comprising two parts to be connected post assembly. Kindly adhere to the specified steps to properly arrange all the parts for a tidy and stable installation. Taking precautions such as utilizing heat shrink tubing and insulation tape is recommended to ensure adequate insulation and prevent possible short circuits. Code #include "ZMPT101B.h" #include "ACS712.h" #include #include #include #include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); ZMPT101B voltageSensor(34); ACS712 currentSensor(ACS712_20A, 36); float P=0; float U=0; float I=0; long dt=0; float CulmPwh=0; float units=0; long changeScreen=0; float lastSample=0; unsigned long lasttime=0; long ScreenSelect = 0; void setup() { Serial.begin(9600); delay(100); voltageSensor.setSensitivity(0.0025); voltageSensor.setZeroPoint(2621); currentSensor.setZeroPoint(2943); currentSensor.setSensitivity(0.15); if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); for(;;); } // Clear the buffer display.clearDisplay(); display.display(); //Caliberation Commands Need To Be Run On First Upload. //CalibCurrent(); //CalibVoltage(); } void loop() { // To measure voltage/current we need to know the frequency of voltage/current // By default 50Hz is used, but you can specify desired frequency // as first argument to getVoltageAC and getCurrentAC() method, if necessary U = voltageSensor.getVoltageAC(); if(U<55) { U=0; CulmPwh=0; } I = currentSensor.getCurrentAC(); dt = micros()- lastSample; if(I<0.15) { I=0; CulmPwh=0; } // To calculate the power we need voltage multiplied by current P = U * I; CulmPwh = CulmPwh + P*(dt/3600);///uWh units= CulmPwh/1000; if(millis()-changeScreen>5000) { ScreenSelect+=1; changeScreen=millis(); } if(millis()-lasttime>500) { if((ScreenSelect%4)==0) { displayVoltCurrent(); }//Volts and Current else if( (ScreenSelect%4)==1) { displayInstPower(); }//Instantaenous Power else if( (ScreenSelect%4)==2) { displayEnergy(); } //Energy else if( (ScreenSelect%4)==3) { displayUnits(); } //Units } lastSample=micros(); } void displayVoltCurrent() { display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(3); displayCenter(String(U)+"V",3); display.setTextSize(3); displayCenter(String(I)+"A",33); display.display(); lasttime=millis(); } void displayInstPower() { display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(2); display.setCursor(0,0); displayCenter("Power",3); display.setTextSize(3); if(P>1000) { displayCenter(String(P/1000)+"kW",30); } else { displayCenter(String(P)+"W",30); } display.display(); lasttime=millis(); } void displayEnergy() { display.clearDisplay(); display.setTextColor(WHITE); if(CulmPwh>1000000000) { display.setTextSize(2); displayCenter("Energy kWh",3); display.setTextSize(3); displayCenter(String(CulmPwh/1000000000),30); } else if(CulmPwh<1000000000 && CulmPwh>1000000) { display.setTextSize(2); displayCenter("Energy Wh",3); display.setTextSize(3); displayCenter(String(CulmPwh/1000000),30); } else if(CulmPwh<1000000 && CulmPwh>1000) { display.setTextSize(2); displayCenter("Energy mWh",3); display.setTextSize(3); displayCenter(String(CulmPwh/1000),30); } else { display.setTextSize(2); displayCenter("Energy uWh",3); display.setTextSize(3); displayCenter(String(CulmPwh),30); } display.display(); lasttime=millis(); } void displayUnits() { display.clearDisplay(); display.setTextColor(WHITE); if(units>1000000) { display.setTextSize(2); displayCenter("Units",3); display.setTextSize(3); displayCenter(String(units/1000000),30); } else if(units<1000000 && units>1000) { display.setTextSize(2); displayCenter("MilliUnits",3); display.setTextSize(3); displayCenter(String(units/1000),30); } else { display.setTextSize(2); displayCenter("MicroUnits",3); display.setTextSize(3); displayCenter(String(units),30); } display.display(); lasttime=millis(); } void CalibCurrent() { while(1) { currentSensor.calibrate(); Serial.print("Zero Point Current :"); Serial.println(currentSensor.getZeroPoint()); display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(0,0); display.print("Current Zero Point :"); display.setCursor(0,20); display.setTextSize(2); display.print(currentSensor.getZeroPoint()); display.display(); delay(500); } } void CalibVoltage() { while(1) { voltageSensor.calibrate(); Serial.print("Zero Point Voltage :"); Serial.println(voltageSensor.getZeroPoint()); display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(0,0); display.print("Voltage Zero Point :"); display.setCursor(0,20); display.setTextSize(2); display.print(voltageSensor.getZeroPoint()); display.display(); delay(500); } } void displayCenter(String text, int line) { int16_t x1; int16_t y1; uint16_t width; uint16_t height; display.getTextBounds(text, 0, 0, &x1, &y1, &width, &height); // display on horizontal center display.setCursor((SCREEN_WIDTH - width) / 2, line); display.println(text); // text to display display.display(); }   ### VERSALOGIC GRIZZLY IS AN EMBEDDED SERVER BOARD POWERED BY 16-CORE INTEL ATOM A rugged embedded server featuring an Intel 16-core processor, -40°C to +85°C operation, two 10 Gigabit Ethernet SFP+ ports, and up to 128 GB of ECC memory. It is ideal for high performance/high data bandwidth applications. Two Mini PCIe sockets and an M.2 site provide for expansion and on-board storage. The Grizzly is a rugged embedded server unit (ESU) featuring an Intel 16-core processor, full -40°C to +85°C operation, two 10 Gigabit Ethernet SFP+ ports, four Gigabit Ethernet ports, up to 128 GB of ECC memory and Intelligent Platform Management Interface (IPMI 2.0) functionality. This combination makes it ideal for edge server and HPEC applications requiring very high-performance processing and high data bandwidth. Additionally, two Mini PCIe sockets and a PCIe x4 M.2 site provide for on-board I/O expansion and high speed / high-capacity on-board storage. The Grizzly also contains additional interfaces including USB, serial and digital I/O, and SATA. The high-performance capability of the Grizzly makes it ideal for situations where data gathering and processing need to be kept local for security or latency reasons, or to provide local cloud capability. A 16-core processor coupled with up to 128 GB of ECC memory supports the use of hypervisors for running of virtual machines. The 10 Gigabit SFP+ ports permit very high speed connectivity. Networks can be created using plug-in copper, short-reach fiber, or long-reach fiber transceivers. The Grizzly is based on the COM Express Extended form-factor, but it is delivered as an assembled and tested, production-ready embedded computer. For hostile environments, the Grizzly is designed and tested for full industrial temperature operation (-40° to +85°C) and meets MIL-STD-202H specifications for shock and vibration. VersaLogic’s 10+ year product life support ensures long-term availability. This avoids expensive upgrades, redesigns, and migrations that come from shorter lifecycle products. Read more: VERSALOGIC GRIZZLY IS AN EMBEDDED SERVER BOARD POWERED BY 16-CORE INTEL ATOM ### Your way to simple and efficient power supply design with Linear Technology Record from SOS webinar - Your way to simple and efficient power supply design with Linear Technology Who is the winner of umodule demoboard from Linear technology? In addition to getting to know the winner, you can also watch the video record from webinar... Linear Technology’s family of DC/DC Module products simplifies your analog design. By integrating the DC/DC controller, power switches, magnetic, and a modest amount of capacitance, uModules power products will save precious space on the PCB and reduce the solution weight, development time, BOM qualification and procurement effort. You could find this out during webinar about Linear technology modules.   For more detail: Your way to simple and efficient power supply design with Linear Technology ### WIN ENTERPRISES ANNOUNCES IOT GATEWAY MINI-ITX PLATFORM WITH 9TH/8TH GEN INTEL® CORE™ PROCESSOR WIN Enterprises, Inc., a leading designer, and manufacturer of embedded x86 motherboards and appliances for electronic OEMs announce the MB-50050 a mini-ITX SBC to serve as the basis for a flexible, general-purpose IoT gateway or factory process-monitoring work station. The board features a 9th/8th Gen Intel Core processor for high performance, factory-process visualization support, and communications from factory line to Cloud. Additional expansibility for device and sensor support is also provided. Features 2 DDR4 2666MHz SODIMM up to 32GB Dual independent displays: DP++ + DP++, DP++ + HDMI, DP++ + LVDS/eDP, HDMI+ LVDS/eDP DP++ resolution supports up to 4096×2304 @ 60Hz Storage: 2 SATA 3.0 Multiple Expansion Capability: 1 PCIe x4 Gen 3, 1 mSATA, 1 M.2 2280 M Key, 1 M.2 2230 E Key Storage: 2 SATA 3.0 Rich I/O: 2 Intel GbE, 4 COM, 4 USB 3.1 Gen 1, 4 USB 2.0 Because IoT gateways need to provide rich serial communications capability to handle factory line input and communications, the MB-50050 was designed with robust serial communications that include 4 COM, 4 USB 3.1 Gen 1, and 4 USB 2.0, plus up to 4 expansion interfaces. The MB-50050 supports dual independent displays with one of these being high resolution (i.e., 4096×2304) to enable sophisticated process visualization of the factory-line processes. Read more: WIN ENTERPRISES ANNOUNCES IOT GATEWAY MINI-ITX PLATFORM WITH 9TH/8TH GEN INTEL® CORE™ PROCESSOR ### WIN ENTERPRISES ANNOUNCES MINI-ITX FORM FACTOR WITH 8TH GEN INTEL® CORE™ PROCESSOR FOR IOT AND PROCESS MONITORING WIN Enterprises, Inc., a leading designer, and manufacturer of embedded x86 motherboards and appliances for electronic OEMs announce the MB-50040. The MB-50040 is a high-performance Mini-ITX single-board computer (SBC) for graphically-oriented factory process monitoring and IoT applications that require high performance. Features 8th Generation Intel® Core™ Processor Mini-ITX DDR4 2400MHz SODIMM up to 64GB Supports 3 independent displays: LVDS + DP/HDMI + DP/HDMI (Auto-detecting) DP++ resolution supports up to 4096×2304 @ 60Hz Multiple expansion: 1 PCIe x4, 1 M.2 M Key (SATA/PCIe), 1 M.2 E key (PCIe/USB) Storage: 2 SATA 3.0 Rich I/O: 2 Intel GbE, 4 USB 3.1, 4 USB 2.0 15-Year CPU Life Cycle Support Until Q1′ 31 Three independent displays are supported for factory-line visualization. One display has DP++ resolution up to 4096 x 2160 @ 60Hz. To meet the requirements of a complete IoT architecture, the unit supports 2 SATA 3.0 for plenty of storage and communication to the Cloud. The 8th Generation processor provides a wide variety of performance-based on 2-, 4- or 8-core processing capabilities. Robust network and device connectivity is provided by 2x Intel GbE LAN, 4x USB 3.1, and 4x USB 2.0 along with multiple expansion capabilities. Read more: WIN ENTERPRISES ANNOUNCES MINI-ITX FORM FACTOR WITH 8TH GEN INTEL® CORE™ PROCESSOR FOR IOT AND PROCESS MONITORING ### WINSYSTEMS UNVEILS FANLESS IP65-RATED PANEL PC FOR RUGGED OPERATING ENVIRONMENTS Truly Industrial, Highly Reliable PPC12-427 Panel PC Solution Withstands Shock, Vibration, Dust And Low-Pressure Wash Downs; Provides Abundant Connectivity And Added Security In A Low-Profile Design Embedded computing pioneer WINSYSTEMS today introduced its multitouch, feature-packed PPC12-427 rugged display platform with an IP65-rated sealed front bezel and gasket for mounting in an enclosure. Based on the Intel E3950 processor, it is designed to deliver outstanding continuous performance in operating temperatures of -30 to +85C, as well as within environments where dust, water or airborne contaminants could damage other units. Its low-profile (35mm) yet robust design includes dual gigabit Ethernet controllers, two USB 3.0 channels, two USB 2.0 ports, and offers a wide voltage range for input power – from +10 to 50 volts DC. The U.S.-made panel PC also contains a soldered-down TPM 2.0 module for authenticating root of trust and security. With the power for Windows 10 IoT and Linux operating systems, our new PPC12-427 embedded system enables the 15-year product life cycles required for digital signage, Industrial IoT, food processing, energy management, and transportation solutions,” said WINSYSTEMS’ Technical Sales Director George T. Hilliard. “It can also drive two additional displays through its dual DisplayPort and support Human Machine Interface within difficult environments – even in outside temperature extremes where other panel PCs can’t operate. This extension of WINSYSTEMS’ SYS-427 packaging gives designers the uninhibited performance and reliability they need without sacrificing flexibility. Unlike other systems that require attachment to an external heatsink or fan, the PPC12-427 was specifically built to operate fanlessly for temperatures ranging from -30 to +85C when equipped with automotive DRAM. It also features an industrial temperature LCD touchscreen and expansion through Mini-Card connectors. And, with its sealed front bezel fully protecting against ingress of dust and moisture, this complete touch panel PC stands up to wash-down environments such as those in food processing. Read more: WINSYSTEMS UNVEILS FANLESS IP65-RATED PANEL PC FOR RUGGED OPERATING ENVIRONMENTS ### Wireless Communication of Multiple Variables Between 2 Arduinos Using HC-12 In this tutorial, I will show you how to achieve wireless communication of variables between 2 Arduinos using the HC-12 module, that operates from 433,4-473 Mhz. HC-12s are wireless modules for arduino to arduino communication, because they can send multiple variables over long distances-ones up to 1km-using only 2 digital pins, not even PWM pins, which is much better than the NRF24 pinout, making them ideal for wireless projects. I couldn't find any tutorials out there showing this, so I decided to make one. My inspiration for the code is this project by RootSaid, but I have modified it to make it easy to understand and to integrate into any project. Supplies -2 HC 12 modules -2 Arduino boards of your choice -Wires -Whatever else you want to add to your wireless project Step 1: Understand and Upload These Codes to Your Arduinos Here is the code for the transmitter: #include #include SoftwareSerial HC12(12, 13);//tx,rx int variable1;//variables that will get sent int variable2; int variable3; int variable4; int variable5; void setup() {   HC12.begin(9600);//Sets the hc 12 communication to 9600 baud, which is their factory default   Serial.begin(9600);   pinMode(A0, INPUT);   pinMode(A1, INPUT);   pinMode(A2, INPUT);   pinMode(A3, INPUT);   pinMode(A4, INPUT); } void loop() {   variable1 = analogRead(A0);//assigns the variables that will be sent the value read on the analog pins   variable2 = analogRead(A1);//you can change this to other data, such as a digital pin's read   variable3 = analogRead(A2);   variable4 = analogRead(A3);   variable5 = analogRead(A4);   //Uncomment the following lines if you want the remote to also send the analog input data to the serial monitor, to check if the data is being read properly   //If you do, It will look the same as it should on the other end's serial monitor   //Serial.print(variable1);   //Serial.print(",");   //Serial.print(variable2);   //Serial.print(",");   //Serial.print(variable3);    //Serial.print(",");    //Serial.print(variable4);   //Serial.print(",");   //Serial.print(variable5);   //Serial.println("");   HC12.print(variable1);//sends the variables   HC12.print(",");   HC12.print(variable2);   HC12.print(",");   HC12.print(variable3);//if you just need to send 2 variables,simply change this value and the following to 0   HC12.print(",");   HC12.print(variable4);//if you just need to send 3 variables,simply change this value and the next to 0   HC12.print(",");   HC12.print(variable5);//if you just need to send 4 variables,simply change this value to 0 //if you need 5 or less variables, disregard comments below, but keep the next line of code, it is essential   HC12.println("");//you can add even numbers of variables, ex add 2, 4, 6 ...(so 3, 5, 7, 9... variables in total) before this line by adding a variable line, then a comma line, another variable line then a second comma line under the 5th variable line but before the println. //for the purpose of simplicity, it is easier to add in groups of 2, so that less modification is necessary on the other end //if you have more variables than you are using, change the variable to 0, as above explained, again for the purpose of simplicity // This change must be reflected on receiver end: see below   delay(100); } Here is the code for the Receiver: #include #include SoftwareSerial HC12(12, 13);//tx,rx int variable1=0; int variable2=0; int variable3=0; int variable4=0; int variable5; String input; int boundLow; int boundHigh; const char delimiter = ','; void setup() {   Serial.begin(9600);   HC12.begin(9600); } void loop() {   if(HC12.available())   {   input = HC12.readStringUntil('\n');   if (input.length() > 0)       {         Serial.println(input);                boundLow = input.indexOf(delimiter);         variable1 = input.substring(0, boundLow).toInt();              boundHigh = input.indexOf(delimiter, boundLow+1);         variable2 = input.substring(boundLow+1, boundHigh).toInt();         boundLow = input.indexOf(delimiter);//you can add 2 variables, or 4... by adding these 4 lines         variable3 = input.substring(0, boundLow).toInt();//you can add 2 variables, or 4... by adding these 4 lines              boundHigh = input.indexOf(delimiter, boundLow+1);//you can add 2 variables, or 4... by adding these 4 lines         variable4 = input.substring(boundLow+1, boundHigh).toInt();// under this line              variable5 = input.substring(boundHigh+1).toInt();//but before this one //if you change the number of variables, follow instructions in comments above //duplicating the lines as explained adds 2 variables, then you can duplicate them again, and then change the variable names so they are in the right order    delay(10);       }//after this you can choose what to do with each variable, which will now have the same value as it's value on the transmitter end   } } Basically, the way it works is that the first transmitter sends the variables in order, with commas in between, forming a string, and the receiver knows the order(because you program it with the order in mind), and takes apart the string to assign the values to their corresponding variables. So, the first number/variable sent will be the first one in the string that gets received, and the second, the second... Step 2: Modify the Codes to Your Liking to Fit With Your Project Now that you have both Arduinos communicating, modify the codes so the receiver can use the variables to control lights, motors and more, specific to your project. I used this for an RC boat, but it can be used for many things. Step 3: Demonstration of the Code Working https://youtu.be/U8UrWVOWjrc This video shows this code working: The remote sends the variables, and then the HC-12 on the receiver end receives the string, and prints it on the arduino serial monitor. It does not process the code, but the codes are saved into variables on the receiving arduino. Step 4: Wire Everything for Your Project Now that the code is uploaded, start to wire your project: On the transmitter side, attach your analog inputs to A0-A4, and then attach the TX pin of HC 12 to pin12, and RX to pin 13. Then connect the VCC to 3.3volts(or 5v, but 3.3 is safer) and the GND to GND. On the Receiver, attach the TX pin of HC 12 to pin12, and RX to pin 13. Then connect the VCC to 3.3volts(or 5v, but 3.3 is safer) and the GND to GND, exactly the same way as for the transmitter. Then attach the other components of you project that will function based on the variables the HC 12 receives. Step 5: Make a Housing for the Remote Attached is an .stl file of a remote housing and it's lid, which fits an Arduino Nano, a 9v battery to power it, an HC 12 at the end, 2 potentiometers and a joystick, which has holes for screwing it in. Step 6: Explanation of the Functioning of This System, for Personal Understanding or If Used As Science Fair Project First, one arduino sends the value of x number of variables(in the above example 5), through serial transmission, to an HC-12 wireless module. This module emits these variables, spaced by commas in a string, in the form of a radio waves, not to be confused with sound waves. Then, the second HC-12 picks up these strings, from the radio waves it receives, which are sent every 100ms, and sends them to the receiving arduino through serial, that decodes these strings and can then process them. HC-12 uses 433.4 Mhz frequency on factory default, which means that the signal contains 433 400 000 waves every second. One wave goes from the middle of the bottom wave, to the middle of the next bottom wave(see illustration). Frequency is the number of waves per second. It is also used in AC electricity: 60Hz means that the current switches from positive to negative 60 times per second. The wavelength of this signal is 691 mm, because the Frequency(Hz)=Velocity(m/s)/wavelength, and radio waves move at the speed of light, so Wavelength = Velocity/Frequency Wavelength = 299 792 458/433 400 000 Wavelength(m) = 0.691 = 691 mm Radio waves can travel through space, contrary to sound waves, with can only travel through matter. Source: Wireless Communication of Multiple Variables Between 2 Arduinos Using HC-12 ### Arduino Timer Millis ; A timer without delay Every month, we will post a list of updates to our projects, which are being worked on daily. PDF is a beneficial resource for use without an internet connection. The majority of tech enthusiasts are requesting the complete Arduino projects PDF. We will provide a direct link to download the PDF file with details on the release date and the number of projects.   Introduction of timer without delay arduino: Don't use delay( ) When delay() is utilized, your system becomes unresponsive as it waits for the delay to finish. Yet, caution is needed when replacing delays. This page details how to substitute Arduino delay() with a non-blocking alternative, enabling your code to run uninterrupted during the delay period. These simple sketches illustrate turning on an LED when the Arduino board is powered up or reset, and then turning it off after 10 seconds. The initial one serves as a demonstration of how the code should NOT be written. The second code functions correctly, while the third utilizes the millisDelay library to streamline the code. Examples of both one-time and repetitive timers can be found as well. If you are already aware of the reasons to avoid using delay() in Arduino, understand the significance of using unsigned longs, overflow, and unsigned subtraction, you can proceed directly to using the millisDelay library in Step 4. The millisDelay library offers features for delays and timers, making it user-friendly and straightforward for beginners in Arduino. This instructable is also on-line at How to code Timers and Delays in Arduino Step 1: How Not to Code a Delay in Arduino Here is how NOT to code a delay in a sketch. int led = 13;
unsigned long delayStart = 0; // the time the delay started bool delayRunning = false; // true if still waiting for delay to finish void setup() { pinMode(led, OUTPUT); // initialize the digital pin as an output. digitalWrite(led, HIGH); // turn led on delayStart = millis(); // start delay delayRunning = true; // not finished yet } void loop() { // check if delay has timed out after 10sec == 10000mS if (delayRunning && ((millis() - delayStart) >= 10000)) { delayRunning = false; // // prevent this code being run more then once digitalWrite(led, LOW); // turn led off Serial.println("Turned LED Off"); } // Other loop code here . . . Serial.println("Run Other Code"); } In the setup() method, which Arduino calls once on starting up, the led is turned on. Once setup() is finished, Arduino calls the loop() method over and over again. This is where most of your code goes, reading sensors sending output, etc. In the sketch above, the first time loop() is called, the delay(10000) stops everything for 10secs before turning the led off and continuing. If you run this code you will see that the Run Other Code is not printed out for 10sec after the startup, but after the led is turned off (ledOn equals false) then is printed out very fast as a loop() is called over and over again. The point to note here is that you really should not the delay() function at all in the loop() code. It is sometimes convenient to use delay() in the setup() code and you can often get away with very small using very small delays of a few milliseconds in the loop() code, but you really should avoid using them at all in the loop() method. Step 2: How to Write a Non-blocking Delay in Arduino The previous drawing employed a blocking delay, meaning it halted all other code execution until the delay elapsed. This upcoming example illustrates how to create a delay in the code that does not block, allowing it to keep executing while waiting for the delay to finish. int led = 13; unsigned long delayStart = 0; // the time the delay started bool delayRunning = false; // true if still waiting for delay to finish void setup() { pinMode(led, OUTPUT); // initialize the digital pin as an output. digitalWrite(led, HIGH); // turn led on delayStart = millis(); // start delay delayRunning = true; // not finished yet } void loop() { // check if delay has timed out after 10sec == 10000mS if (delayRunning && ((millis() - delayStart) >= 10000)) { delayRunning = false; // // prevent this code being run more then once digitalWrite(led, LOW); // turn led off Serial.println("Turned LED Off"); } // Other loop code here . . . Serial.println("Run Other Code"); } In the sketch above, in the setup() method, the delaystart variable is set to the current value of millis(). millis() is a built-in method that returns the number of milliseconds since the board was powered up. It starts at 0 each time the board is reset and is incremented each millisecond by a CPU hardware counter. More about millis() later. Once setup() is finished, Arduino calls the loop() method over and over again. Each time loop() is called the code checks a) that the delay is still running, and b) if the millis() has moved on 10000 mS (10sec) from the value stored in delaystart. When the time has moved on by 10000mS or more, then delay running is set to false to prevent the code in the if the statement is executed again and the led turned off. If you run this sketch, you will see Run Other Code printed out very quickly and after 10sec the Led will be turned off and if you are quick you might just see the Turned LED Off message before it scrolls off the screen. See Step 4, below for how the millisDelay library simplifies this code. Step 3: Unsigned Long, Overflow and Unsigned Subtraction The previous drawing employed a blocking delay, meaning it halted all other code execution until the delay elapsed. This upcoming example illustrates how to create a delay in the code that does not block, allowing it to keep executing while waiting for the delay to finish. (millis() - delayStart) >= 10000 This test has to be coded in this very specific way for it to work. Unsigned Long and Overflow Both the delayStart variable and the value returned from the millis() function are of type unsigned long. This is a number ranging from 0 to 4,294,967,295. Adding 1 to the highest value of an unsigned long, 4,294,967,295, will result in the value becoming 0. The number overflowed and then reset to 0. The overflow bit is simply discarded in this scenario. For instance, in a 3-bit unsigned integer, 111 represents the highest value (7). If 1 is added to this value, it becomes 1000 (8), but the first 1 exceeds the storage limit of 3 bits and is therefore not included, resulting in a wrap-around back to 000. This implies that when the CPU increments the it variable storing the millis() result by one more, it will reset to 0. Millis() will reset to 0 and begin counting again. If you let your Arduino board stay on for 4,294,967,295 milliseconds, which is approximately 49 days and 17 hours, or simply 50 days, then this scenario will occur. Now let's explore a different method of encoding the test as (millis() - delayStart) >= 10000 Mathematically, this test is equivalent to millis() being greater than or equal to (delayStart + 10000) But if you initiate the delay after around 50 days, such as when millis() shows 4,294,966,300 mS, delayStart + 10000 will cause an overflow to 995. This will make the condition millis() >= (delayStart + 10000) true right away, resulting in no delay. Therefore, this particular test method is not consistently effective. Unfortunately, it is improbable that you will encounter this situation while conducting your tests, but it could unexpectedly arise in a device that runs continuously for months, such as a garage door control system. Using it will lead to a similar issue. The time when the delay will end is equal to the current time in milliseconds plus 10000 milliseconds. and afterwards, the assessment (millis() >= delayEnd) In conclusion, the delayStart variable should be of type unsigned long. Using a long (i.e. long int), int, or unsigned int will result in a smaller maximum value compared to the unsigned long returned by millis(). In the end, millis() will exceed the capacity of the variable storing it, causing time to suddenly move backwards. If unsigned int is used for startDelay, it will occur after 65 seconds on an Uno board as an example. Unsigned Subtraction Another interesting aspect is the outcome of millis() - delayStart when delayStart is set to 4,294,966,300 and we require a 10000mS waiting period. The millis() function will reset to zero before that occurs. Keep in mind that increasing the maximum value an unsigned long can hold by 1 will result in it starting back at 0. An alternative perspective on the calculation millis() - delayStart when millis() has looped back and is less than delayStart is: "What value needs to be added to delayStart to match millis() (post-wraparound)?" In other words, what is the unknown X in the equation delayStart + X == millis() To illustrate with a 3-bit unsigned variable once more, when computing 2 – 4 (unsigned), imagine a clock starting at 0 and incrementing all the way to 111 (7) before resetting to 0. To go from 4 to 2, you must increase by 6. This is how the calculation works, but the CPU will execute it differently. The gap between two unsigned longs will consistently result in a non-negative value ranging from 0 to 4,294,967,295. If startDelay is set to 1 and millis() resets to 0 (after 50 days), the result of millis() - startDelay will be 4,294,967,295. You can set a DELAY_TIME between 0 and 4,294,967,295 milliseconds, and (millis() - delayStart) >= DELAY_TIME will function correctly no matter when the delay began Step 4: Using the MillisDelay Library To install the millisDelay library. Downloaded the millisDelay.zip file. Unzip this file to your Arduino/libraries directory (open the IDE File->preferences window to see where your local Arduino directory is). Some times the instructions for How to Install a Library - Automatic installation work, but not always. Unzipping the file manually is safest. Once you install the millisDelay library, there will be three interactive examples available that you can load on your Arduino board and then open the Serial Monitor (within 5sec) at 9600baud to use them. Here is the previous non-blocking delay sketch re-written using the millisDelay library. #include "millisDelay.h" int led = 13; millisDelay ledDelay; void setup() { pinMode(led, OUTPUT); // initialize the digital pin as an output. digitalWrite(led, HIGH); // turn led on ledDelay.start(10000); // start a 10sec delay } void loop() { // check if delay has timed out if (ledDelay.justFinished()) { digitalWrite(led, LOW); // turn led off Serial.println("Turned LED Off"); } // Other loop code here . . . Serial.println("Run Other Code"); } If you look at the millisDelay library code you will see that the previous sketch's code has just been moved to the start() and justFinished() methods in the library. Is this a ledDelay or a ledTimer? You can use whichever term you like. I tend to use ...delay for single-shot delays that execute once and use …timer for repeating ones. Step 5: Delay and Timer Examples Here are two simple delay and timer examples along with their corresponding millisDelay library versions. These instances pertain to a one-time delay and a recurring delay/timer. Single-Shot Delay A one-time shot delay occurs only once before coming to a halt. It serves as a direct substitute for the Arduino delay() function. You initiate a pause, and upon completion, you take action. BasicSingleShotDelay is the naked code while SingleShotMillisDelay utilizes the millisDelay library. BasicSingleShotDelay This sketch is available in BasicSingleShotDelay.ino int led = 13; // Pin 13 has an LED connected on most Arduino boards. unsigned long DELAY_TIME = 10000; // 10 sec unsigned long delayStart = 0; // the time the delay started bool delayRunning = false; // true if still waiting for delay to finish void setup() { pinMode(led, OUTPUT); // initialize the digital pin as an output. digitalWrite(led, HIGH); // turn led on // start delay delayStart = millis(); delayRunning = true; } void loop() { // check if delay has timed out if (delayRunning && ((millis() - delayStart) >= DELAY_TIME)) { delayRunning = false; // finished delay -- single shot, once only digitalWrite(led, LOW); // turn led off } } In the code above the loop() continues to run without being stuck waiting for the delay to expire. During each pass of the loop(), the difference between the current millis() and the delayStart time is compared to the DELAY_TIME. When the timer exceeds the value of the interval the desired action is taken. In this example, the delay timer is stopped and the LED turned off. SingleShotMillisDelay Here is the BasicSingleShotDelay sketch re-written using the millisDelay library. This sketch is available in SingleShotMillisDelay.ino Here is the millisDelay version where the code above has been wrapped in class methods of the millisDelay class. #include

int led = 13; // Pin 13 has an LED connected on most Arduino boards. millisDelay ledDelay; void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); digitalWrite(led, HIGH); // turn led on // start delay ledDelay.start(10000); } void loop() { // check if delay has timed out if (ledDelay.justFinished()) { digitalWrite(led, LOW); // turn led off } } Repeating Timers These are simple examples of a repeating delay/timer. BasicRepeatingDelay is the plain code and RepeatingMillisDelay uses the millisDelay library. BasicRepeatingDelay This sketch is available in BasicRepeatingDelay.ino int led = 13; // Pin 13 has an LED connected on most Arduino boards. unsigned long DELAY_TIME = 1500; // 1.5 sec unsigned long delayStart = 0; // the time the delay started bool delayRunning = false; // true if still waiting for delay to finish bool ledOn = false; // keep track of the led state void setup() { pinMode(led, OUTPUT); // initialize the digital pin as an output. digitalWrite(led, LOW); // turn led off ledOn = false; // start delay delayStart = millis(); delayRunning = true; } void loop() { // check if delay has timed out if (delayRunning && ((millis() - delayStart) >= DELAY_TIME)) { delayStart += DELAY_TIME; // this prevents drift in the delays // toggle the led ledOn = !ledOn; if (ledOn) { digitalWrite(led, HIGH); // turn led on } else { digitalWrite(led, LOW); // turn led off } } } The reason for using delayStart += DELAY_TIME; to reset the delay to run again, is it allows for the possibility that the millis()-delayStart may be > DELAY_TIME because the millis() has just incremented or due to some other code in the loop() that slows it down. For example a long print statement. (See the Adding a Loop Monitor in Step 7) Another point is to start the delay at the end of startup(). This ensures the timer is accurate at the start of the loop(), even if startup() takes some time to execute. RepeatingMillisDelay Here is the BasicRepeatingDelay sketch re-written using the millisDelay library. This sketch is available in RepeatingMillisDelay.ino #include int led = 13; // Pin 13 has an LED connected on most Arduino boards. bool ledOn = false; // keep track of the led state millisDelay ledDelay; void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); // initialize the digital pin as an output. digitalWrite(led, LOW); // turn led off ledOn = false; // start delay ledDelay.start(1500); } void loop() { // check if delay has timed out if (ledDelay.justFinished()) { ledDelay.repeat(); // start delay again without drift // toggle the led ledOn = !ledOn; if (ledOn) { digitalWrite(led, HIGH); // turn led on } else { digitalWrite(led, LOW); // turn led off } } } Step 6: Other MillisDelay Library Functions In addition to the start(delay), justFinished() and repeat() functions illustrated above, the millisDelay library also has stop() to stop the delay timing out, isRunning() to check if it has not already timed out and has not been stopped, restart() to restart the delay from now, using the same delay interval, finish() to force the delay to expire early, remaining() to return the number of milliseconds until the delay is finished and delay() to return the delay value that was passed to start() Microsecond version of the library millisDelay counts the delay in milliseconds. You can also time by microseconds. It is left as an exercise for the reader to write that class. (Hint: rename the class to microDelay and replace occurrences of millis() with micros() ) Freezing/Pausing a Delay You can freeze or pause a delay by saving the remaining() milliseconds and stopping the delay and then later un-freeze it by restarting it with the remaining mS as the delay. e.g. see the FreezeDelay.ino example mainRemainingTime = mainDelay.remaining(); // remember how long left to run in the main delay mainDelay.stop(); // stop mainDelay NOTE: mainDelay.justFinished() is NEVER true after stop() … mainDelay.start(mainRemainingTime); // restart after freeze Step 7: Word of Warning – Add a Loop Monitor Unfortunately, many of the standard Arduino libraries use delay() or introduce pauses, such as AnalogRead and SoftwareSerial. Usually the delays these introduce are small but they can add up so I suggest you add a monitor at the top of your loop() to check how quickly it runs. The loop monitor is very similar to the blink example. A small piece of code at the top of the loop() method just toggles the Led each time loop() is executed. You can then use a digital multimeter with at Hz scale to measure the frequency of the output on the LED pin (pin 13 in this case) The code is:- // Loop Monitor – this checks that the loop() is executed at least once every 1mS // (c)2013 Forward Computing and Control Pty. Ltd. // www.forward.com.au> // // This example code is in the public domain. int led = 13; // don't use on FioV3 when battery connected // Pin 13 has an LED connected on most Arduino boards. // if using Arduino IDE 1.5 or above you can use pre-defined // LED_BUILTIN instead of 'led' // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); // add your other setup code here } // the loop routine runs over and over again forever: void loop() { // toggle the led output each loop The led frequency must measure >500Hz (i.e. <1mS off and <1mS on) if (digitalRead(led)) { digitalWrite(led, LOW); // turn the LED off by making the voltage LOW } else { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) } // add the rest of your loop code here } You can download the monitor code here. When I run this code on my Uno board, the multimeter on the Hz range connected between pin 13 and GND reads 57.6Khz. i.e. about 100 times >500hz. As you add your code to loop() the Hz reading will reduce. Just check it stays well above 500Hz (1mS per loop() execution) in all situations. Step 8: Word of Warning – Add a Loop Monitor Unfortunately many of the standard Arduino libraries use delay() or introduce pauses, such as AnalogRead and SoftwareSerial. Usually the delays these introduce are small but they can add up so I suggest you add a monitor at the top of your loop() to check how quickly it runs. This loop timer can be either the hardware one shown below OR the loopTimer class(also in the SafeString library), used in the Simple Multi-tasking in Arduino tutorial, that prints out the time your loop takes to execute. A one-time shot delay operates just once before ceasing. It serves as the most straightforward substitute for the Arduino delay() function. You begin the waiting period and then proceed to act once it is over. BasicSingleShotDelay is the simple code while SingleShotMillisDelay utilizes the millisDelay library. The hardware loop monitor closely resembles the blink example. A short snippet of code located at the beginning of the loop() function simply switches the state of the Led whenever the loop() function runs. Next, you can utilize a digital multimeter set at the Hz scale to gauge the frequency of the output on the LED pin (specifically pin 13). The code is:- // Loop Monitor – this checks that the loop() is executed at least once every 1mS
// (c)2013 Forward Computing and Control Pty. Ltd. //
www.forward.com.au> // // This example code is in the public domain. int led = 13; // don't use on FioV3 when battery connected // Pin 13 has an LED connected on most Arduino boards. // if using Arduino IDE 1.5 or above you can use pre-defined // LED_BUILTIN instead of 'led' // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); // add your other setup code here } // the loop routine runs over and over again forever: void loop() { // toggle the led output each loop The led frequency must measure >500Hz (i.e. <1mS off and <1mS on) if (digitalRead(led)) { digitalWrite(led, LOW); // turn the LED off by making the voltage LOW } else { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) } // add the rest of your loop code here } You can download the monitor code here. When I run this code on my Uno board, the multimeter on the Hz range connected between pin 13 and GND reads 57.6Khz. i.e. about 100 times >500hz. As you add your code to loop() the Hz reading will reduce. Just check it stays well above 500Hz (1mS per loop() execution) in all situations. Source: Arduino Timer Millis ### World Environment Day on June 5: How to Save the Environment – and Money – Using the Internet of Things The Internet of Things (IoT) as a concept is not new, but while our phones and our televisions got smarter over the last few years, our homes haven’t changed as much. There are now a growing number of IoT startups in India, such as connected-car accessory-make CarIQ, and smart-bulb maker Cube26, but does using such devices actually make life any better, or is being able to control your lights using a smartphone just a gimmick? Smart devices aren’t just about convenience – IoT can help both your pocket, and the environment too. Using your smartphone to switch the lights or fans on and off is cool, but the actual savings it can bring is cooler. And each small improvement leads to long term good for the environment. If you can cut down your carbon footprint without any real effort, and save money too, wouldn’t you? The question is, how much of an impact does switching to smart devices actually make. For most people, this is a difficult question to answer. We were able to find out with a simple DIY project. Numerous programmable boards are available in the market and you can use these to set up a simple experiment. This is how the experiment worked for us, and the results were very clear. We used an Arduino Uno, which you can get for under Rs. 500, and it was programmed to control two things – a tube-light that uses 40W per hour, and a desert cooler that consumes 170W per hour. The Arduino was programmed to count the number of hours each device was used in week 1 and week 3, and control the devices ‘smartly’ in week 2 and week 4 – the tube-light would turn off if there was no activity in the room, while the desert cooler would turn off if the room’s temperature went below a specified level. We generally tend to leave the lights switched on when we’re going out of the room temporarily. Sometimes, this ‘temporary’ period get longer too. With the IoT setup being deployed, the Passive Infrared (PIR) sensor automatically gets to know whether there’s any activity in the room or not and as per the condition, it will automatically switch the lights off. At times, we may also forget to turn off any thing when going out of the house. In such cases, IoT provides you an excellent option to turn off any of those appliances from your smartphone simply by visiting a website that was specially created for this purpose, reducing the unnecessary consumption of electricity. On the other hands, desert coolers provide a continuous flow of air – but once the room has cooled, you don’t need to keep this off. Getting up at night to switch it off manually is highly inconvenient, but with the IoT setup, whenever the temperature falls below 22 degrees Celsius (or as defined), it automatically turns the cooler off, and also turns it on whenever the temperature gets above 22 degrees Celsius. With all this in mind, what was the impact of converting just two devices into IoT gadgets? You can see in the chart below: The highlight of the experiment was the 40 percent reduction in electricity consumption for the desert cooler. The electricity consumption also decreased for tube-light at a considerable 15 percent reduction. This means that if you can apply these solutions across your house, you’re looking at a considerable saving in terms of your electricity bill. That’s not all though – we’re also making a big impact on our carbon footprint. Generating electricity has a big impact on the environment – generating energy with fossil fuels produces nearly 2 pounds (just under 1kg) of carbon dioxide per kilowatt hour. That means that our simple IoT setup saved 9.5Kg of carbon dioxide. In simple words, an IoT setup can help you make your devices smart and more convenient to use, allowing you to drastically reduce electricity consumption, saving you money, and cutting down your carbon footprint as well. Future of smart homesAre we any close to smarter homes? We definitely are. We’ve already seen how we could control our appliances from anywhere, and even made them smart enough to respond on their own to the surroundings. Environment has been a major concern for past decade and IoT is a way that indirectly protects the environment while also reducing our electricity consumption. As an added benefit, it also makes our lives easier. There are hurdles that lie in the path of adoption, but the benefits are clear, and we can expect to see it soon, leading to smarter way of living in your own home. Source: World Environment Day on June 5: How to Save the Environment – and Money – Using the Internet of Things ### WORLD’S FIRST MOS FET RELAY MODULE “G3VM-21MT” WITH SOLID STATE RELAY IN “T-TYPE CIRCUIT STRUCTURE” OMRON Corporation of Kyoto, western Japan globally released its new MOS FET (*1) relay module “G3VM-21MT” on December 2, 2019. The product is the first electronic component in the world (2) to adopt a “T-type circuit structure” (3). With a T-type circuit structure consisting of compact-size and longer-lifecycle solid-state relays that output signals using no physical contact, the relay module minimizes the leakage current (*4) that has long been a problem with semiconductor test equipment. G3VM-21MT allows high-precision measurement and improves the productivity of electronic components. Features Contribute to reduce the mounting space on the print circuit board by small package Current leakage when the main line is open and sub line is close :1 pA (Maximum) at VOFF =20 V Contact form: 1a (SPST-NO) + T-switch function Surface-mounting G3VM-21MT enables switching measurement signals in test equipment mainly used to perform electrical tests for semiconductor devices. In addition to the MOS FET relay features of compact size and longer lifecycle, G3VM-21MT is the world’s first MOS FET relay module with “T-type circuit structure” which consists of three MOS FET relays that help reduce the leakage current to a minimal level without affecting test equipment’s inspection accuracy while allowing high-precision measurement and decreasing maintenance frequency of test equipment. Read more: WORLD’S FIRST MOS FET RELAY MODULE “G3VM-21MT” WITH SOLID STATE RELAY IN “T-TYPE CIRCUIT STRUCTURE” ### WORLD’S SMALLEST FERRITE CHIP BEADS TARGET AUTOMOTIVE POWER SUPPLY APPLICATION Murata Manufacturing Co., Ltd. has introduced the BLM18SP_SH1 series of the world’s smallest chip ferrite beads (for noise suppression) for use in automotive power supply applications. The company has started shipping samples, and volume production is scheduled to begin in June 2020. In recent years, in keeping with the progress of automobile electrification, cars have been equipped with an increasing number of electronic components such as cameras, radar, LiDAR and ECUs in order to support ADAS and autonomous driving. To ensure that the numerous in-vehicle components function properly and that a high degree of safety is maintained, it is essential to employ countermeasures against noise in power supply circuits and to ensure a stable power supply to each component. As the number of in-vehicle components increases, needs are growing for improved noise suppression capabilities as well as for miniaturization. With a new structural design that utilizes internal electrode fabrication technology, the new series realizes improved impedance acquisition efficiency along with lower resistance, which leads to a large current. In addition, commercialized in 0603(1608) inch (mm) size (1.6mm × 0.8mm) package, this series has a 50% smaller base area compared to conventional products which are typically packaged in 0805(2012) inch (mm) size (2.0mm × 1.25mm). This provides manufacturers with more flexibility when designing automotive power supply circuits and helps to support more sophisticated autonomous driving with smaller in-vehicle components. Read more: WORLD’S SMALLEST FERRITE CHIP BEADS TARGET AUTOMOTIVE POWER SUPPLY APPLICATION ### WORLD’S SMALLEST INTEL MINI PC HAS AN INTEL CELERON N4100 PROCESSOR, 6GB LPDDR4 RAM AND 128GB ROM Despite its size, CHUWI’s yet-to-be-released LarkBox ultra-mini PC offers decent computing performance without extra heat. With 6GB LPDDR4 system memory and up to 128GB storage capacity, the LarkBox mini PC can handle daily multitasks easily without breaking a sweat.  So far, we have seen quite a number of small Intel mini PCs, one of the smallest being the ECS LIVA Q2 micro PC with Intel Celeron N4000 Gemini Lake processor, 4GB RAM, and 32GB eMMC flash storage housed in a 160 mm3 enclosure. While the LarkBox mini PC maintained quite some similarities with the ECS LIVA Q2, the compact, and easy-to-carry-around Intel mini PC from CHUWI comes with certain specifications that place it some steps ahead of the ECS LIVA Q2 micro PC. The LarkBox is expected to come with smaller body size, higher efficiency Celeron processor, more storage capacity, and better video output. By comparison, features and specifications of Chuwi LarkBox mini PC include: Features CHUWI LarkBox ECS LIVA Q2 System on Chip Intel Celeron N4100 quad-core Gemini Lake processor with Intel UHD Graphics 600; 6W TDP Intel Celeron N4000 dual-core Gemini Lake processor with 12EU UHD Graphics 600; 6W TDP System memory 6GB LPDDR4 2 or 4 GB LPDDR4 Storage 128 GB SSD storage, MicroSD card 32 or 64GB eMMC flash storage, Micro SD slot up to 128GB Connectivity Bluetooth 5.0,802.11ac WiFi Gigabit Ethernet,Bluetooth 4.1, 802.11ac WiFi USB Port 2x USB 2.0 ports,1x USB Type-C port 1x USB 3.1 General port,1x USB 2.0 port Video output HDMI up to 4K resolutions HDMI 2.0 Power supply TBD via USB-C port 12v / 2A Dimension 61 x 61 x 43 mm 70 x 70 x 33.4 mm Even with its small size, the LarkBox, just like the ECS LIVA Q2 comes with an ultra-silent cooling system that keeps it cool at all times and ensures that the PC works stably under any workload. There are no details concerning the operating system but most likely the mini PC should be able to run Ubuntu 18.04 and other Linux distributions quite well. Read more: WORLD’S SMALLEST INTEL MINI PC HAS AN INTEL CELERON N4100 PROCESSOR, 6GB LPDDR4 RAM AND 128GB ROM ### ARDUINO MPPT SOLAR CHARGE CONTROLLER ( Version-3.0) Greetings to my solar charge controller tutorial series. Two versions of my PWM charge controller have been shared. If you're new, please check out my previous tutorial to grasp the fundamentals of a charge controller. 1. Version-1 2. Version-2 This tutorial will demonstrate the process of making an Arduino Solar MPPT charge controller that includes an LCD screen, LED lights, data logging via Wi-Fi, and the ability to charge different USB gadgets. It contains various protections to avoid harm in unusual situations. This controller uses the Arduino Nano microcontroller. This layout is suitable for a 50W solar panel to charge a regularly used 12V lead acid battery. Additional Arduino boards like Pro Mini, Micro, and UNO are also suitable for use. The most cutting-edge solar charge controller available at present is Maximum Power Point Tracking (MPPT). The MPPT controller is more expensive and complicated, but it provides numerous advantages compared to conventional controllers. It is more efficient in colder temperatures by 30 to 40%, but it is harder to produce than PWM controllers and needs knowledge of power electronics. I put in a lot of effort to make it easier to comprehend. If you're already familiar with the fundamentals of MPPT charge controller, you can bypass the initial procedures. The MPPT circuit is based on a synchronous buck converter circuit that lowers the solar panel's higher voltage to match the battery's charging voltage. The Arduino aims to maximize the power output from the solar panel by adjusting the duty cycle to maintain the panel's peak performance. Specification of version-3 charge controller : 1.Based on MPPT algorithm 2. LED indication for the state of charge 3. 20x4 character LCD display for displaying voltages,current,power etc 4. Overvoltage / Lightning protection 5. Reverse power flow protection 6. Short Circuit and Over load protection 7. Wi Fi data logging 8.USB port for Charging Smart Phone /Gadgets Electrical specifications : 1.Rated Voltage= 12V 2.Maximum current = 5A 3.Maximum load current =10A 4. In put Voltage = Solar panel with Open circuit voltage from 12 to 25V 5.Solar panel power = 50W This project is consists of 40 steps.So for simplicity I divided the entire project in to small sections.Click on the link which you want to see. 1. Basics on MPPT charge controller 2. Buck circuit working and design calculation 3. Testing the Buck Circuit 4. Voltage and Current Measurements 5.LCD display and LED indication 6.Making the Charging Board 7.Making the Enclosure 8. Making the USB Charging Circuit 9. Wi Fi Data Logging 10. MPPT algorithm and flow chart I have spent a lot of time to make this charge controller project.If you like it ,please vote for me in all the competitions.It will be very helpful for me.Thank you in advance. Step 1: PARTS AND TOOLS REQUIRED: Show All 24 Items 1. Arduino Nano ( eBay) 2.Current Sensor ( ACS712-5A ) 3.Buck Converter ( LM2596 ) 4.Wifi Module ( ESP8266 ) 5. LCD display ( 20x4 I2C ) 6 .MOSFETs ( 4x IRFZ44N ) 7. MOSFET driver ( IR2104 ) 8. 3.3V Linear regulator ( AMS 1117 ) 9. Transistor ( 2N2222 ) 10.Diodes ( 2x IN4148 , 1 x UF4007 ) 11.TVS diode ( 2x P6KE36CA ) 12.Resistors ( 3 x 200R ,3 x330R,1 x 1K, 2 x 10K, 2 x 20K, 2x 100k, 1x 470K ) 13.Capacitors ( 4 x 0.1 uF, 3 x 10uF ,1 x100 uF ,1x 220uF) 14.Inductor ( 1x 33uH -5A ) 15. LEDs ( 1 x Red ,1 x Yellow ,1 x Green ) 16.Prototype Board 17.Wires and Jumper wires ( Female -Female ) 18.Header Pins (Male Straight ,female , Right angle ) 19. DIP Socket ( 8 pin ) 19.Screw Terminals ( 3 x2 pin ,1 x 6pin ) 20.Fuses ( 2 x 5A) 21. Fuse Holders (2 nos) 22. Push Switch ( 2 nos) 23.Rocker /Toggle Switch ( 1 no) 24.Female USB port ( 1no) 25. JST connector ( 2pin male -female ) 26.Heat Sinks 27.Enclosure 28.Plastic Base and studs 29. Screws/Nuts/Bolts TOOLS REQUIRED : 1.Soldering Iron 2. Glue Gun 3. Dremel 4.Hobby Knife 5.Wire Cutter 6.Wire Stripper 7.Screw Driver 8. Ruller and pencil Step 2: Basics on MPPT charge controller The voltage output of a solar panel changes depending on several factors like: Original: "The new restaurant in town has a modern vibe and serves a variety of international cuisines." Paraphrased: "The modern-themed new restaurant in the area offers a range of international dishes." The amount of sunlight. The company's profits have doubled compared to last year. The load is linked. Rewrite the given text using the same language and ensuring the word count remains the same: 3. Paraphrase the following text using the same input language and keep the same amount of words: The temperature of the solar panel. Throughout the day and with changing weather conditions, the solar panel will consistently produce varying levels of voltage. For every voltage level, the solar panel will produce a specific current in Amperes. The Amps produced for a certain voltage can be found on the IV curve of a solar panel's specification sheet, which typically looks similar to the figure-1 displayed above. The blue line in figure-2 shows a voltage from solar panels of around 30V, paired with a current of about 6.2A. A current of 5A is indicated by a voltage of 35V on the green line. The relationship between power, voltage, and current is that power is equal to voltage multiplied by current. In the picture above, while tracing the red curve, you will reach a point where the result of Voltage multiplied by its corresponding Current is greatest compared to any other point on the curve. The solar panel's Maximum Power Point (MPP) is the term used for this. What Is MPPT ? The voltage produced by a solar panel varies according to different factors such as... 1. The level of sunlight 2. The electrical load connected 3. The panel's temperature. MPPT is an acronym that stands for Maximum Power Point Tracking. MPPT charge controllers are utilized to maximize power output from PV modules in specific circumstances. To delve deeper into this concept, we must analyze the power curve traits of a solar panel. Refer to the image above, downloaded from the internet, for a visual explanation of MPPT. Thus far, we have observed that the peak power point (MPP) of a solar panel is located at the intersection of the current and voltage curve. A 12V solar panel may fluctuate between 12V and 21V depending on the connected load and sunlight brightness, due to its internal resistance reacting to varying irradiance levels. Solar panels only operate at their rated power output at a specific voltage and load, which varies with fluctuations in sunlight intensity. For instance, consider a 100 watt solar panel with a rating of 18V at 5.55 amps. The Solar panel requires a load of 3.24 ohms, calculated using the 18 V at 5.5 amps rating. If a different load is connected, the panel will output less than 100 watts. Connecting a static load with a resistance different from the panel's internal resistance at MPP will result in drawing less power from the panel than its maximum capacity. Taking a simple example say we connected the above 100W panel directly to a 12V lead acid battery, the panel voltage would be dragged down near to the load voltage of the battery as the batteries resistance is lower than the panels, but the current stays the same at 5.55 amps.This happens because Solar Panels behave like current sources, so the current is determined by the available sunlight. Now the power (P)= V x I = 12x5.55=66.6W. So the Solar panel is now behaving like a 66 watt panel. This equates to a loss of 100W-66.6W = 34W ( 33.4%). This is where MPPT comes into play. MPPT circuits can be based on various switch mode power supply (SMPS) topologies, they generally have a fixed frequency but varying duty cycle. The duty cycle is controlled via an algorithm so as to track the changing MPP. Step 3: BUCK CONVERTER WORKING A buck converter is essentially a DC to DC converter. The key principle in a buck converter is the inductor's resistance to changes in current. The output voltage of a buck converter will never exceed the input voltage. The above image displays a basic diagram of a buck converter. Working Principle : When the MOSFET is ON The inductor (L) has current flowing in a clockwise direction to the load (R) and charges the output capacitor (C) when the mosfets are activated. At this moment, the diode's cathode has a positive voltage, which puts the diode (D) in reverse bias and stops current from flowing. The current gradually increases as energy is stored in the inductor's magnetic field, causing a slow start to flow into the load from Vin. Hence, the energy is conserved in the inductor when the mosfet is turned on. When the MOSFET is OFF The polarity of the voltage across the inductor changes when the mosfet is switched off. The decline of the inductor's magnetic field results in the discharge of stored energy, allowing current to flow from the inductor to the load. The diode is currently in forward bias because a negative voltage is connected to the cathode. Therefore, the present flow originating from the inductors releases in a clockwise direction across the load before returning through the diode. Once the inductor loses a certain amount of energy, the load's voltage decreases, and the capacitor becomes the main source of current, supplying power to the load until the next cycle begins. To continue conduction mode, the inductor must not be fully discharged before the mosfet switches on again, and this cycle is repeated. What is Synchronous Buck Converter ? The diode is replaced by another mosfet in synchronous design to improve circuit efficiency by eliminating losses from the diode's forward voltage drop. Executing this task is a bit trickier because the activation of the second mosfet must be coordinated with the activation of the first mosfet. It is important to make sure that both are not activated at the same time, as this could lead to a direct path to ground, causing a short circuit. The mosfet switching happens in the opposite phase at 180 degrees, separated by a short pause called a Dead-Band. Step 4: BUCK CONVERTER DESIGN Designing the buck converter circuit begins with considering the output parameters of the system and its load. The decision was made to target a 12 V output (battery voltage) for a 50W solar panel design. The frequency of operation, inductor size, and output capacitor size are crucial factors in determining the current and voltage ripple size in a buck circuit calculation. Having minimal current and voltage ripple is preferred. Typically, smaller inductor and output capacitor sizes result in lower system costs due to higher frequency. On the other hand, increasing PWM frequencies can reduce the effectiveness of the system because of switching losses in the mosfets, requiring a balance that aligns with the end system's design limitations. A PWM frequency of 50kHz was selected for this design. From our previous conversation, we have determined that a buck converter consists of. 1.Inductor 2.Capacitor 3.MOSFETS In the next few steps I will discuss how to choose these components. Step 5: INDUCTOR CALCULATION Determining the inductor value is of utmost importance when designing a buck converter. Firstly, presume that the converter is operating in continuous conduction mode (CCM), as is typically the situation. CCM suggests that the inductor does not completely drain during the off-time of the switch. The next equations are based on a perfect switch (zero resistance when on, infinite resistance when off, and instant switching time) and a perfect diode. Assume We are designing for a 50W solar panel and 12V battery Input voltage (Vin) =15V Output Voltage (Vout)=12V Output current (Iout) =50W/12V =4.16A = 4.2A (approx) Switching Frequency (Fsw)=50 KHz Duty Cycle (D) =Vout/Vin= 12/15 =0.8 or 80% Calculation L= ( Vin-Vout ) x D x 1/Fsw x 1/ dI Where dI is Ripple current For a good design typical value of ripple current is in between 30 to 40 % of load current. Let dI =35% of rated current dI=35% of 4.2=0.35 x 4.2 =1.47A So L= (15.0-12.0) x 0.8 x (1/50k) x (1/1.47) = 32.65uH =33uH (approx) Inductor peak current =Iout+dI/2 = 4.2+(1.47/2) = 4.935A = 5A (approx) So we have to buy or make a toroid inductor of 33uH and 5A. You can also use a buck converter design calculator So 33uH is enough for our design. Step 6: HOW TO WIND A TOROIDAL INDUCTOR Show All 7 Items I gathered several toroidal cores from an old computer power supply. I decided to create an inductor at home using them. Although it was time-consuming, I gained valuable knowledge and had fun in the process. Here are some tips I picked up that will make it easier for you to do the same. How to Wind the wire : The first step in creating the buck converter circuit involves examining the system's output parameters and load. A 12 V output (battery voltage) was chosen for a 50W solar panel design. I developed a simple tool using a popsicle stick to wind toroidal cores because hand winding is uncomfortable and makes it challenging to achieve tight windings. This device is efficient and enables precise and safe winding. Before creating the inductor, it's crucial to understand the core's requirements and the necessary number of turns. The crucial factors of a toroidal core are 1. Outer diameter(OD) 2.Inner diameter(ID) 3.Height (H) 4.Al value As I did not know the part number,I used a indirect method to identify it.First I measure the OD and ID of the unknown core by using my vernier caliper,it was around OD= 23.9mm (.94'") , ID= 14.2mm(.56") ,H= 7.9mm( .31") and yellow white in color. I used a toroid core chart (page-8) to identify the unknown core.I have attached this toroid size chart in the bellow.It contains a lot of information for the inductor design.The PDF version is attached bellow. Finding the part number : I searched the Physical dimension table from the chart. From the table it was found that the core is T94 Finding the mix number : The color of the core is indication for mix number.As my core is is yellow/white in color,it is confirmed that the mix number is 26 So the unknown core is T94-26 Finding Al value : From the Al value table for a T94-26 core it is 590 in uH/100 turns. After selecting the core now time to find out the number of turns required to obtain the desired inductance. Number of turn (N) = 100 x sqrt( desired inductance in uH / Al in uH per 100 turns) => N= 100 sqrt(33/590) = 23.65 = approximately 24 turns You can also use this online calculator for finding the number of turns.Only you have to know the part number and mix number. Then I wind a 20 AWG copper wire (24 turns) around the the toroid core.At the both end of the winding leave some extra wire for connection lead.After this remove the enamel insulation from the lead. I used my leatherman file for removing the insulation. See the above picture for better understanding. Note : Making a good inductor is not so simple.I am still in learning stage.If you are not so confident I will recommend to buy a ready made inductor. toroid core size.pdf4 MB Step 7: CAPACITOR CALCULATION Output capacitance is necessary in order to reduce the voltage overshoot and ripple found at the output of a buck converter. Insufficient output capacitance leads to significant overshoots, and inadequate capacitance and high equivalent-series resistance (ESR) in the output capacitor result in large voltage ripple. Therefore, in order to adhere to the ripple requirements of a buck converter circuit, you need to have an output capacitor that has sufficient capacitance and low ESR. Calculation : The out put capacitor ( Cout)= dI / (8 x Fsw x dV) Where dV is ripple voltage Let voltage ripple( dV ) = 20mV Cout= 1.47/ (8 x 50000 x 0.02 ) = 183.75 uF By taking some margin, I select 220uF electrolytic capacitor. The equations used for calculation of inductor and capacitor is taken from a article LC Selection Guide for theDC-DC Synchronous Buck Converter LC selection.PDF889 KB Step 8: MOSFET SELECTION The vital component of a buck converter is MOSFET.Choosing a right MOSFET from the variety of it available in the market is quite challenging task. These are few basic parameters for selecting right MOSFET. 1.Voltage Rating : Vds of MOSFET should be greater than 20% or more than the rated voltage. 2.Current Rating: Ids of MOSFET should be greater than 20% or more than the rated current. 3.ON Resistance (Rds on) : Select a MOSFET with low ON Resistance (Ron) 4.Conduction Loss : It depends on Rds(ON) and duty cycle.Keep the conduction loss minimum. 5.Switching Loss: Switching loss occurs during the transition phase.It depends on switching frequency,voltage ,current etc.Try to keep it minimum. These are few links where you can get more information on selecting the right MOSFET. 1.MOSFET selection for Buck Converter 2.A simple guide to selecting power MOSFETs In our design the maximum voltage is solar panel open circuit voltage(Voc) which is nearly 21 to 25V and maximum load current is 5A. I have chosen IRFZ44N MOSFET. The Vds and Ids value have enough margin as well as it has low Rds(On) value. You can check the other parameters of IRFZ44N from the data sheet IRFZ44N DATA SHEET.pdf104 KB Step 9: MOSFET DRIVER Why we need a gate driver ? A Mosfet driver enables a low current digital output signal from a Microcontroller to control the gate of a Mosfet. Using a driver, a high voltage mosfet can be switched by a 5 volt digital signal. The gate capacitance of the MOSFET must be charged in order for it to turn on, and discharged to turn off. The more current provided to the gate, the quicker the switching on/off process, hence the need for a driver. Fore more details you can read about MOSFET Basics For this design I am using a IR2104 Half Bridge driver. The IC takes the incoming PWM signal from the micro controller, and then drives two outputs for a High and a Low Side MOSFET. How to use it ? From the data sheet I have taken the image shown above. Input : First we have to provide power to the gate driver.It is give on Vcc (pin-1) and its value is in between 10-20V as per data sheet. The high frequency PWM signal from Arduino goes to IN (pin-2) . The shut down control signal from the Arduino is connected on SD ( pin 3). Output : The 2 output PWM signals are generated from HI and LO pin. This gives the user the opportunity to fine tune the dead-band switching of the MOSFETs. Charge Pump Circuit : The capacitor connected between VB and VS along with the diode form the charge pump.This circuit doubles the input voltage so the high switch can be driven on. However this bootstrap circuit only works when the MOSFETs are switching. The data sheet of IR2104 is attached here IR2104 data sheet.pdf137 KB Step 10: SCHEMATIC AND WORKING The screw terminals JP1 and JP2 are utilized for linking the solar panels to the power input and battery output, in that order. JP3, the third terminal, is designated for the connection of the load. The safety fuses F1 and F2 have a rating of 5A. The buck converter is made up of the synchronous MOSFET switches Q2 and Q3, inductor L1, and capacitors C1 and C2. The inductor and capacitor C2 aid in smoothing out the switching current and the output voltage. Capacitor C8 and resistor R6 work together to create a snubber network, which helps decrease the inductor voltage ringing caused by the switching current. In my old charge controller, a diode was used to block battery power from flowing back into the solar panels at night, but now a third MOSFET Q1 has been added for the same function. Because diodes exhibit a voltage drop, a MOSFET is much more effective. Q1 is triggered by the passage of voltage through D1 which results in the activation of Q2. When Q2 deactivates, R1 releases the voltage from Q1's gate resulting in its deactivation. Diode D3 (UF4007) is a fast diode that starts conducting electricity before Q3 is activated. The objective is to improve the effectiveness of the converter. The IC IR2104 serves as a gate driver for a half bridge MOSFET. The IR2104 is employed to regulate the high and low side MOSFETs using the PWM signal from the arduino (Pin -D9). The Arduino on pin 3 can also disable it with a control signal (low on pin -D8). D2 and C7 form part of the bootstrap circuit that generates the high side gate drive voltage for Q1 and Q2. The program watches over the PWM duty cycle to prevent it from reaching 100% or staying on constantly. It constrains the PWM duty cycle to 99.9% to maintain functioning of the charge pump. Two voltage divider circuits, consisting of R1 and R2 for measuring solar panel voltage and R3 and R4 for measuring battery voltage, are employed. The voltage signal is sent to Analog pin-0 and Analog pin-2 by the dividers. Ceramic capacitors C3 and C4 aid in the removal of high frequency spikes. Mosfet Q4 is used for regulating the load. The driver consists of a transistor along with resistors R9, R10. Diodes D4 and D5 act as transient voltage suppression (TVS) diodes to safeguard against overvoltage originating from both the solar panel and the load side. The current sensor ACS712 identifies the current from the solar panel and transmits it to analog pin-1 on the Arduino. The microcontroller's digital pins are linked to the 3 LEDs, serving as an output interface to show the charging status. The reset button comes in handy when the code becomes unresponsive. The purpose of the back light switch is to manage the back light of the LCD display. . mppt controller_schema.pdf31 KB Step 11: Test the gate driver and MOSFETs Switching Hey, I believe I have covered the theory extensively. Let's switch to practical experiments now. Like I mentioned before, the Buck Converter is the core of the MPPT charge controller. If the buck converter circuit functions properly, everything else will be much easier. Let's start by testing the Mosfets switching and the driver. I always ask to solder on a breadboard before proceeding. I have accidentally blown many MOSFETs while testing, so please be cautious with the connections. Connect all components according to the provided schematic. TVS diode, current sensor, and voltage divider can be excluded. After plugging in all components, measure the resistance across the input rail. It should show a reading of multiple kiloOhms. If the resistance measures below 1K, revisit the circuit's connections. Attach the text file with the code and upload it to the Arduino for testing the sketch. Next, establish the connection of the scope between the Q1 source and GND. The outcome needs to be a PWM signal traveling at a rate of 50KHz. The waveforms gathered during my experiments are displayed up there. If everything goes according to plan, continue with the assembly of the bulk converter circuit by adding the inductor and capacitor. test_code.txt843 bytes Step 12: Test the Buck Converter Show All 8 Items After determining the ratings for the inductor and capacitor in previous steps, we are now ready to utilize and test them. Install the 33uH inductor and 100uF input and 220uF output electrolytic capacitor according to the diagram. Additionally, you may include 0.1uF ceramic capacitors alongside the input and output capacitors for improved performance. However, this step is optional. Next, create the snubber circuit with a 0.1uF ceramic capacitor and a 200ohm resistor. Once more, test the resistance between the input rail. It should be in the range of kiloohms. Now provide the input rail and Arduino with power. Attach the scope's probe between the output capacitor. The outcome is displayed above. The output must be a consistent direct current. Vout equals the product of Duty Cycle and Vin. When a 12V input supply is given a 50% duty cycle, the output on the scope should read 6V. Once it has been verified that everything is functioning properly, we can now install the blocking mosfet Q1. This component is utilized to prevent reverse power flow from the battery to the solar panel at night. Insert the third mosfet Q3 in accordance with the diagram. Next, position the 470k resistor and IN4148 diode. Make sure to review the output once more to ensure it remains identical. Finally, place the scope between the Q1 gate and Gnd. Are you aware that you have completed the most crucial aspect of this project? Step 13: VOLTAGE MEASUREMENT Show All 7 Items Voltage Measurement : Arduino's analog inputs can detect 0-5V DC voltage using a 5V analog reference, which can be extended with a voltage divider consisting of two resistors. The voltage divider decreases the voltage to a level appropriate for the Arduino analog inputs. This can be used to measure the voltages of the solar panel and battery. For a voltage divider circuit Vout = R2/(R1+R2) x Vin Vin = (R1+R2)/R2 x Vout The analogRead() function reads the voltage and converts it to a number between 0 and 1023 Example code : // read the input on analog pin 0 ( You can use any pin from A0 to A5) int Value = analogRead(A0); Serial.println(value); The bove code gives an ADC value in between 0 to 1023 Calibration : We’re going to read output value with one of the analog inputs of Arduino and its analogRead() function. That function outputs a value between 0 (0V in input) and 1023 (5V in input) that is 0,0049V for each increment (As 5/1024 = 0.0049V) Vin = Vout*(R1+R2)/R2 ; R1=100k and R2=20k Vin= ADC count*0.0049*(120/20) Volt // Highlighted part is Scale factor Note : This leads us to believe that a reading of 1023 corresponds to an input voltage of exactly 5.000 volts. In practical you may not get 5V always from the arduino pin 5V .So during calibration first measure the voltage between the 5v and GND pins of arduino by using a multimeter,and use 1ADC = measured voltage/1024 instead of 5/1024 Check your voltage sensor by a test code attached bellow Voltage_mesurement_code.ino784 bytes Step 14: CURRENT MEASUREMENT For current measurement I used a Hall Effect current sensor ACS 712 (5A). The ACS712 sensor read the current value and convert it into a relevant voltage value, The value that links the two measurements is sensitivity.You can find it on the datasheet. As per data sheet for a ACS 712 (5A) model : 1. Sensitivity is 185mV/A. 2. The sensor can measure positive and negative currents (range -5A…5A), 3. Power supply is 5V 4. Middle sensing voltage is 2.5V when no current. Calibration: Value = (5/1024)*analog read value // If you are not getting 5V from arduino 5V pin then, value = ( Vmeasured/1024 ) * analog read value // Vmeasured is the voltage in between Arduino pin 5V and GND. You can measure it by a multimeter. But as per data sheets offset is 2.5V (When current zero you will get 2.5V from the sensor's output) Current in amp = (value-2.5)/0.185 Test it by a sample code for ACS712 attached bellow. Step 15: LCD Display and LED Indication LCD display : A 20-character by 4-line LCD is used for monitoring the solar panel, battery, and load parameters. We have chosen an I2C LCD display for simplicity. Just 4 wires are needed to establish a connection with the Arduino. In an earlier iteration, the LCD screen was consuming a considerable amount of energy. The main factor was the LCD backlight. I choose to put in a push button in order to control the backlight. The default setting will turn off the backlight. Pressing the switch will activate it for 15 seconds before shutting off. Vcc--> 5V , GND-->GND, SDA-->A4 and SCL-->A5 Column-1: Solar panel voltage, Current and Power Column-2: Battery Voltage, Charger state, and SOC column-3: PWM duty cycle and load status For testing the LCD download the test code attached bellow. You download the library from LiquidCrystal_I2C . LED indication : Red, Green and Yellow LEDs are used to indicate the battery voltage level. Low Voltage -- > Red led Normal Voltage --> Green Led Fully Charged --> Yellow Led Step 16: HARDWARE AND SOLDERING Before soldering you should clear about the Power and Control Signal. Do not mix up between them. Otherwise, you will fry everything. Power Signal : 1.Solar panel -> Fuse -> Current sensor -> Mosfets Q1,Q2 ,Q3 -> Inductor -> Battery. 2.Battery -> Fuse -> Load -> Mosfet Q4 Control Signals : 1.The signal from the different Sensors to Arduino 2. Signals from the Arduino to the Mosfet drivers, LED and LCD 3. The signal between the Arduino and ESP8266 I used red and black thick wires ( 0.5 to 0.75 sq mm) for power and ground connections respectively. All the colored thin wires are for control signals. Tips: Print the PDF format Schematics before soldering. Keep it in front of you during soldering for reference. Step 17: Drill Holes for Mounting First, hold the prototype board by a vice. Then drill 4 holes (3mm) at the 4 corners of the prototype board. Step 18: Add the Input and Out Put Terminals : First solder the three screw terminals for solar panel, battery and load connection. The left one is for solar panel, the middle one is for battery and the right one is for load connection. Step 19: Add the Fuse Holders On the extreme left and right solder the two fuse holders.( One in the solar panel side and other on the load side) Then connect the left terminal of the solar screw terminal with one leg of the fuse holder. Step 20: Solder the MOSFETS and Input Capacitor Place all 4 MOSFETs evenly spaced on the top of the prototype board and ensure there is enough room for attaching heat sinks. Next, include a 100uF capacitor in the circuit. I created extra room between the fuse holder and capacitor for future installation of the current sensor. Connect wires with solder in the following manner: Between the positive end of the input capacitor (C) and the gate of the mosfet Q1. Between drains of mosfet Q1 and Q2. Then in between source of Q2 and drain of Q3. Step 21: Mounting the Arduino Nano Start by cutting two rows of female and male header pins, each with 15 pins. I utilized a diagonal nipper for cutting the headers. Next, attach the male header pins. Ensure that the spacing between the two rails is suitable for the Arduino Nano. Keep a space of two rows next to the female header before soldering the two male headers. After that, connect the matching male and female pins. I overlooked this step while soldering. Female headers are utilized to attach the Arduino nano while male headers connect externally to the Arduino. Step 22: Make the Power Supply Energy is needed to run the Arduino, as well as different sensors, LED, LCD, and the wifi module (ESP8266). Every module can function with a 5V power source, except for the ESP8266 module, which needs a maximum of 3.7V. Operating it at a voltage of 3.3V is recommended. Despite having a 3.3V pin, the Arduino Nano cannot provide sufficient power (around 200mA to 300mA) for the ESP8266 module. Hence, it is necessary to have an independent 3.3V power supply that can provide a minimum of 300mA. 5V Power Supply : I previously utilized a LM7805 linear voltage regulator to reduce the battery voltage to 5V for the power supply, but it generated excess heat. Therefore, I opted for a highly efficient buck converter in this iteration. Modify the output voltage of the buck converter. Initially, attach the battery to the input terminal of the buck converter and then fine-tune the potentiometer to achieve an output of 5 volts. Look at the picture above. Get ready 4 male headers with 2 pins each and solder them to the designated holes in the converter. Place the converter on top of the four header pins and secure it by soldering. Make sure the side with the input is towards the battery screw terminal. Position capacitor C2 near the terminal of the battery screw. Make sure the left side of the capacitor is where the positive terminal is located. Then, connect the input of the buck converter to the battery screw terminal and the output to the 5V and GND pins of the Arduino Nano. Confirm the configuration by positioning the Arduino Nano on the header pin and linking the 12V battery to the screw terminal. If performed accurately, the Arduino power LED will light up. Lastly, attach two rows of male header pins on the edge of the Arduino 5V and GND pins to allow for external connections. 3.3V Power Supply : I am planning to use a voltage regulator AMS1117 to step down from 5V to 3.3V. Solder the voltage regulator first, then add two 10uF capacitors. One on the input and other on the output side. See the above schematic. Step 23: Solder the Mosfet Driver Circuit First solder the 8 pins DIP socket just above the arduino header pins. Add 10uF capacitor and and a 0.1uF capacitor in between the pin-1 and pin-4. Solder the diode (D2) in between pin -1 and 8.The diode cathode should be connect to the pin-8. Solder the capacitor (C7) in between pin-8 and pin-6. Solder two 200ohm resistors ( R7 and R8) just side to the pin-2 and pin-3. Solder one 470K resistor (R1) near to the mosfet Q1 and a diode (D1) in between gates of mosfets Q1 and Q2.The diode cathode connects to the gate of Q1. After this complete the circuit by soldering wires as per the schematics. Step 24: Solder the Voltage Sensors Solder solar panel voltage divider near to the fuse and battery voltage divider near to the output capacitor. Then solder two ceramic capacitors ( C3 and C4) across the 20k resitors. Then solder a wire between middle point of the solar panel side voltage divider and arduino pin A0. Finally solder a wire between middle point of the battery side voltage divider and arduino pin A2. Step 25: Solder the Inductor and Snubber Circuit First solder the resistor (R6) and capacitor ( C8) in series just above the output capacitor( C2). Then solder the inductor parallel to it. Inductor is the heavier component in the entire circuit.To sit it firmly, apply glue at the base. Then solder the ultra fast diode (D3) . Step 26: Solder the Load Mosfet (Q4) Driver Solder the 2N2222 transistor near the gate of the mosfet (Q4). Then add a 10k resistor (R9) near to the collector and a 1k resistor( R10) near to the base. Then connect the points as per schematic. Step 27: Adding the Current Sensor Solder two thick wire in between the solar panel side fuse and capacitor (C1). Then screw the wire in to the ACS712 screw terminal. Step 28: Solder the TVS Diodes I do not have spare TVS diode.So I solder it later.You can solder it earlier also. One TVS diodes, D4 near the connector JP1 and D5 near the connector JP3. Note : I am using bidirectional TVS diode.So no polarity mark is there. Step 29: Connect the GND After soldering all the components, connect all the grounds (GND) shown in the schematic. I am using thick black wires. Step 30: Make the USB Charging Circuit The buck converter used for power supply can deliver maximum current 3A. So the power supply have sufficient margin for charging the USB gadgets. Make the Circuit : Solder the male JST connector close to the buck converter and connect two pins together with positive (5V) and negative. (Ground) comes out of the converter. Look at the picture. Insert the USB port and switch into their assigned openings, then secure them in place with hot glue. Connect the positive red wire from the JST connector to one switch terminal, then link a small red wire from another switch terminal to the USB Vcc terminal. Finally, attach the JST connector's black negative wire to the USB GND. Check the diagram for the layout of USB pins. You are also able to take this step beforehand. Step 31: Make the Wifi Module ( ESP8266 ) Circuit Start by cutting two female headers, each with four pins. The solder is positioned next to the fuse holder on the side where the load is connected. Use the diagram to complete the circuit. Be careful when soldering this part. This module will be damaged if the voltage goes above 3.7 V because it operates at 3.3 V. I plan to utilize a 3.3 V regulator (AMS1117) to deliver power to this module, making sure the voltage stays within the specified limit for the serial lines. A voltage divider circuit is used to lower the 5V transmit voltage of the Arduino to match the 3.3V receive voltage of the ESP8266. Setting up the ESP8266 : The first thing you want to do with ESP8266 is to establish communication.You can see this example project for setting up the ESP8266.Then connect it to your WiFi router. Hey now you are ready to upload your data to the web. You can see the following projects to get some idea to use ESP8266 for data uploading to web. https://www.instructables.com/id/ESP8266-Wifi-Tempe... http://www.element14.com/community/groups/internet... The ESP8266 connection schematic is taken from http://www.martyncurrey.com Step 32: WiFi Data Logging and Scientific Exploration As the solar panel are installed at remote location,monitoring systems parameter is vital for us.This gives me the idea to add the data logging feature to my controller. The WiFi module( ESP8266 ) automatically uploads live power generation, voltage,Current data to the Web( https://thingspeak.com/ ).Then the web application graph and tabulate data in live.You can download the feeds from the website in the form of a Xcel sheet.Then explore these data for further analysis.I attached a sample of feeds downloaded from thingspeak. The test code is attached bellow.Hey if you are really excited to see how the tiny WiFi module upload data to the web.Just upload the test code attached bellow.You can test it without any sensor hook to the arduino.Though you will get arbitrary values.It is just for fun :) See the graphs on thingspeak.com .Interesting ?? Note : You can use this test code for other multi sensor system like: weather station .Just you have to calibrate your sensors accordingly. Go to Data Import/Export and then click on Download.See the above pics. If you are app developer,then develop a apps for Android, iPhone and Windows Mobile to see these useful data.If you make please share me.I am not a developer. Step 33: Make the LED Panel Take a small size rectangular prototype board and drill holes at both end for mounting on the enclosure. Solder the Leds with equally spaced. Then solder the 330 ohm resistors (R11,R12 and R13) and 4pin male headers. Finally complete the circuit as per schematics. Step 34: Make the Back Light and Reset Switch Take 5 female -female jumper wires and cut one side headers in all. Insert heat shrink tube in all jumper wires. Reset Switch : Solder two jumper wires directly to the two pin of the push switch. Back Light Switch : Solder two jumper wires to the two pins of the switch. Solder a 10k resistor to any one pin of the switch. Then solder a jumper wire to the other end of the resistor. Finally cover the joints with heat shrink tube and apply hot air. Step 35: Prepare the Enclosure I used a 6" x 8" plastic enclosure. Identify the sizes of the LCD, USB, and Switch. Next, using a Dremel, trim out the rectangular section. Complete the edges by using a hobby knife at the end. Next, use a pencil to indicate the location of the mounting holes for the LCD, LED panel, switches, and external screw terminal. Make holes at every designated spot. Please take note that the holes for LEDs are 5mm in size, switches are 7mm, and all others are 3mm. Step 36: Make the External Connection Terminal The external connector is used for outside access of all the 3 screw terminals in the controller board. Mark the hole positions for mounting and 6 wires. Then screw the wires in all the terminals.Use different color to distinguish between positive and negative terminal. Step 37: Mount Everything To mount the controller board I used 4 plastic bases.Screw the main board over the base. Mount the LCD and Led panel by screw and bolts. Then mount the two switches. Step 38: Connect All the Panel and Switches After mounting everything connect the panels,switches and external connector. Use female-female jumper wires for connecting the panels. Refer schematics for connection. Finally box up the enclosure. Step 39: Software and Algorithm The Maximum Power Tracker utilizes an iterative approach to find the ever-changing Maximum Power Point (MPP). The Perturb and Observe technique, also referred to as the hill climbing algorithm, is employed for Maximum Power Point Tracking. The controller adjusts the voltage a little bit coming from the solar panel and examines the power. When power rises, further adjustments are made in that direction until power levels off. In the beginning, the voltage to the solar panel is increased; if the output power increases, the voltage is further increased until the output power starts to decline. When the output power decreases, the voltage to the solar panel will decrease until it reaches its maximum power. This process will continue until Maximum Power Point Tracking is reached. This result is a variation in the power output at the peak power point. Get all the software that is downloadable from my GitHub page. Step 40: Version-4 Design Ideas and Planning I want to express gratitude to the new project members Keth Hungerford and Petar for their active involvement. Keith is taking on the main role in designing the new version of the Charge controller. We currently intend to implement the following modifications in the current version of the charge controller. Changes at the moment are: 1.Increase panel voltage rating to allow for panels with 60 cells (i.e up to 40 V, so-called "grid connect" panels); 2.Higher current rating, at least 20 amps and preferably 40 amps; 3.Metering current on the battery and load; 4.Improve design robustness to ensure external conditions do not cause any failures; 5. Design that allows multiple controllers to feed into a power distribution switchboard; 6. Optimal battery management for several different battery types, such as Lead Acid (several variants), NiFe, LiFePO; 7. Ability to control more than one load output – either to allow for greater capacity, or timing control of when the output is on or off. 8.Real time clock with date to enable time stamping of statistics and timer control of loads. 9.Operational configuration capability (buttons or via WiFi?); 10.Greater data collection to get illumination statistics, battery performance statistics, load statistics. 11.Higher battery voltage (to 24 or 48 V) and associated higher solar panel voltages; 12.Much higher panel voltage (to 150 V or so) 13.Multiple Load outputs regulated to close to 12 V 14.Panel safety and overload disconnect In addition there are some "internal" matters that are worthy of investigation: Focus on maximising efficiency Fail-safe software or self-recovery features MPPT algorithm refinements will it all fit in Arduino Nano? or selecting another Arduino Board ? All the ongoing activities are given in Arduino-MPPT-V4 folder ( .rar file). I request to all of my followers,team members and viewers to give suggestions on it. You can write your suggestions/feedback in the comment section below. Step 41: Overview of Version-3.1 After lot testing we observed that MOSFET ( Q3 ) in ver-3.0 design is burning repeatedly.We tried to modify the existing software but not find any satisfactory result. The other problem was that MOSFET Q1 ( in V-3.0) conduct even when there is no solar input. To solve the above problems and enhance the power handling capability we are modifying both the hardware and software.This is named as Version-3.1 Charge Controller. This version is not completed yet.So wait until it is complete. Don't worry we are making a solution for those who have made the V-3.0 prototype.After little modification we will able to use the new software. You can see the updates on Hackaday.com This version have 3 options. 1. 5 Amp version : A T94-26 toroidal core requires 48 turns of AWG20 wire in order to achieve an inductance of 135 uH, which corresponds to almost 1.5 meters of wire. Three sets of IRFZ44N MOSFET pairs (totaling 6 MOSFETs) include Q1, Q2, and Q3. C1 will consist of three 220 uF low ESR capacitors connected in parallel, while C2 will be a singular 220 uF low ESR capacitor. One ACS712 alone on the panel side according to version 3.0. 2. 8 Amp version : T106-26 toroid wound with 23 turns of a compound wire made from 3 strands of AWG20 wire twisted together to give 47 uH (this takes about 3.1 m of wire). Q2 will be a pair of FDP150N10A MOSFETs in parallel. C1 will be 5 * 220 uF low ESR capacitors in parallel,C2 will be a single 220 uF low ESR capacitor Two ACS712, one on the panel side as per version 3.0 and one in series with the battery. 3 10 Amp version : T130-26 toroid wound with 23 turns of a compound wire made from 4 strands of AWG18 wire twisted together to give 41 uH (this takes about 4.5 m of wire). Q2 will be a pair of FDP150N10A MOSFETs in parallel. C1 will be 6 * 220 uF low ESR capacitors in parallel,C2 will be 2 * 220 uF low ESR capacitors in parallel. Three ACS712, one on the panel side as per version 3.0, one in series with the battery and one in series with the load. The drive circuitry (common to all 3 versions) will use 3 separate IR2104 driver chips, one for each of Q1, Q2 and Q3. We drive the Q1 and Q2 drivers from pin D9 and HO1 and HO2, and drive Q3 from pin D10 and LO3. In driver chips 1 and 2, pins IN and SD are driven in parallel by Arduino output pin D9. In the case of driver 1 (for Q1) there is a low pass RC filter in series, with a time constant of about 1 ms. Driver 2 is driven directly (as in the current circuit, but probably with a slightly higher series resistor to allow more current for the Q1 driver and its RC filter). In driver chip 3, IN is driven by D9 and SD is driven by D10. Separate drivers for Q2 and Q3 are used so that we can turn OFF Q3 to function in Asynchronous mode at low current levels when the controller is in DCM (Discontinuous Current Mode). There might be a more efficient solution, but for the limited time we have, this straightforward option is quick, easy, and dependable to execute. Each of the 3 models will come equipped with LCD screens, WiFi capabilities, and LED lights (potentially with a more elaborate system to differentiate between DCM and CCM). Each of the three variations must be capable of handling panels rated at either 18 V or 30 V, and they are equipped with algorithms that prevent damage in case the panel generates excessive current beyond its rating. All of this can be automatically detected. Every part that comes into contact with panel voltage must have a rating of at least 40 V, especially C1 and our buck converter which provides 12V for the drivers and control electronics. Step 42: Conclusion I have put in my utmost effort to create this instructable. I am still expanding my knowledge on MPPT. If I have made any errors, please forgive me and leave a comment. I will fix it promptly. I enjoy receiving comments on my work! The previous iteration of charge controllers has garnered extensive feedback, with numerous users sharing images of their configuration. Please share pictures and videos if you create your own controller following this Instructable. Finally, I want to express my gratitude to timnolan. I have acquired knowledge and applied various elements from his design. Source: ARDUINO MPPT SOLAR CHARGE CONTROLLER ( Version-3.0) ### ALTIUM’S PCB DESIGN SHARING & VISUALIZATION TOOL HELPS TO VIEW POPULAR CAD FORMATS IN YOUR BROWSER Altium has launched a new, cloud-based application – the A365 Viewer –   that redefines the way that printed circuit board designs are shared between designers, part suppliers, and manufacturers. Adding the Altium 365 Viewer has significantly enhanced the user experience when navigating the product documentation on our website. Now Arduino users can freely browse schematics, PCB layout and even 3D models of the Arduino boards and modules online, without the need to download or install anything additional. The capability of being CAD-agnostic will shorty allow Arduino to add the online design viewer to every product page, including the ones designed in Autodesk Eagle.” – Fabio Violante, CEO, Arduino Altium, a global leader in PCB design software, announced the launch of a new cloud-based application that redefines the way that printed circuit board designs are shared between designers, part suppliers, and manufacturers. The A365 Viewer, powered by the Altium 365 cloud platform, is a brand new, and innovative way to view and share electronic designs through a browser on any web-enabled desktop, phone or tablet. Schematics, PCB layout, and 3D visualization provide an interactive eCAD experience with no downloads or installations required. The A365 Viewer is part of Altium’s cloud strategy and newly launched Altium 365 cloud platform. Simplicity Is The Ultimate Sophistication Until now, designers have been forced to share their PCB designs through PDFs or static images. With the new A365 Viewer, an interactive experience is created that retains all of the key relevant information that’s typically lost when sharing static files. For example, the A365 Viewer allows users to search for, select, cross-probe and inspect components and nets while moving seamlessly between schematic, PCB and 3D views of their board. Using the A365 Viewer requires no CAD tools or experience. The A365 Viewer is designed to work with multiple eCAD formats, currently supporting Autodesk®️ Eagle™ and Altium Designer™.  Other popular PCB design software formats will be supported in the near future. Visually stunning, interactive CAD centric renditions of user PCBs, including Schematic, PCB, 3D and BOM all easily available through a browser on any web-enabled device. Easily Embedded On Your Website Anyone can easily embed the viewer on their website, free of charge, by visiting www.altium.com/viewer/. As an example, a well-known developer of electronics hardware and software kits, Arduino, is helping engineers and makers to easily and quickly visualize the PCB designs and assemblies available in their product kits, by embedding the A365 Viewer on the Arduino website. Read more: ALTIUM’S PCB DESIGN SHARING & VISUALIZATION TOOL HELPS TO VIEW POPULAR CAD FORMATS IN YOUR BROWSER ### AMD RYZEN BASED CONGATEC COM EXPRESS MODULE FOR THE INDUSTRIAL TEMPERATURE RANGE congatec – a leading vendor of embedded computing technology – introduces its new conga-TR4 COM Express Type 6 module with AMD Ryzen Embedded V1000 Series processors for the industrial temperature range from -40°C to +85°C. It is available with optional burn-in & cold-soak stress screening services for the highest reliability. The most demanding graphics and compute workloads benefit from the modules’ 4 cores, 8 threads and 8 GPU compute units delivering the well-reputed massive processing throughput of AMD’s Zen microarchitecture in an ultra-rugged shape. The TDP is scalable from 12W to 25W enabling truly immersive 4k UHD system designs with passive cooling only. Typical applications for the new industrial-grade COM Express modules can be found in rugged edge computing with embedded vision and artificial intelligence (AI), autonomous vehicles, railcars and wagons, outdoor equipment in the oil and gas industries, mobile ambulance equipment, broadcasting vans, or insecurity and video surveillance, as well as base station equipment for 5G, to name just a few. The maximum performance of the new conga-TR4 COM Express Type 6 module depends on the environmental conditions and is specified with 1.6 GHz to 2.8 GHz turbo boost in the sub-zero temperature range, and 2.0 GHz to a maximum of 3.6 GHz in the positive temperature range. The impressive performance of the ultra-rugged conga-TR4 Computer-on-Modules has been made available in a real-time capable design and also includes real-time hypervisor support by Real-Time Systems for virtual machine deployments and workload consolidation in edge computing scenarios. The feature set in detail The new conga-TR4 high-performance module with COM Express Type 6 pinout is based on the latest AMD Ryzen Embedded V1404I multi-core processor for the industrial temperature range. It supports up to 32GB energy-efficient and fast dual-channel DDR4 memory with up to 3200 MT/s and optional ECC for maximum data security. The integrated AMD Radeon Vega graphics with 8 compute units marks the cutting edge of embedded graphics. It supports up to four independent displays with up to 4k UHD resolution and 10-bit HDR, as well as DirectX 12 and OpenGL 4.4 for 3D graphics. The integrated video engine enables hardware-accelerated streaming of HEVC (H.265) video in both directions. Thanks to HSA and OpenCL 2.0 support, deep learning workloads can be assigned to the GPU. In safety-critical applications, the integrated AMD Secure Processor helps with hardware-accelerated RSA, SHA, and AES encryption and decryption. Read more: AMD RYZEN BASED CONGATEC COM EXPRESS MODULE FOR THE INDUSTRIAL TEMPERATURE RANGE ### AN AFFORDABLE EDGE-COMPUTING DEVICE FOR HIGH-PERFORMANCE AND POWER-EFFICIENT ROBOTICS AUTOMATION Industrial automation offers greater quality control, flexibility and safety for manufacturing. snickerdoodle is a customisable, affordable, palm-sized device that minimises the time, effort and cost of setting up industrial robotics. Older manufacturing systems lack the benefits of new digital sensing and connectivity technologies (robotics and Internet of Things). But upgrading infrastructure necessitates building hardware-software platforms and customising for performance, power and component integration requirements. This involves significant capital and personnel investments, planned well in advance. These investments need to be weighed against the risks of manufacturing downtime, avoidable equipment damage and process inefficiencies. Under the snickerdoodle project, krtkl (pronounced ‘critical’) created the first, full-stack development board for robotic systems. This houses a central ‘brain’ for various manufacturing component and subsystem connectivity, integration, control and monitoring operations. As the underlying hardware is software reconfigurable, snickerdoodle simplifies the challenge of enabling interfaces for a wide array of sensors, actuators and communication protocols. This offers operators easy-to-understand information and control options. EU SME Instrument funding enabled the project to complete a feasibility assessment and a go-to-market strategy and establish a manufacturing supply chain. Simplified Implementation And Development Time snickerdoodle is comprised of multiple processors, software which can be customised by end users who can program the built-in FPGA and wireless connectivity. All this is contained in a device the size of a business card. The main processor runs general purpose and/or real-time operating systems to take care of higher-level tasks, such as machine-to-machine networking or motor control loops. The programmable logic, or FPGA (the ‘brain’), allows both customisation of a system’s inputs and outputs, ranging from interfacing with motors and sensors to becoming a pure video-processing machine. This can be useful in production line monitoring, or computer vision, for example. The FPGA also runs complex control and data-processing algorithms. The system has built-in Wi-Fi and Bluetooth to make integration with modern networks more straightforward. “After years of working in mechatronics and embedded systems, developing one-off solutions for companies to bring new automation products to market, it became obvious that what was needed was a central ‘brain’. This needed to be quickly and easily adaptable to meet the requirements of each specific application,” explains project coordinator Ryan Cousins. Read more: AN AFFORDABLE EDGE-COMPUTING DEVICE FOR HIGH-PERFORMANCE AND POWER-EFFICIENT ROBOTICS AUTOMATION ### AN ULTRA-COMPACT, HIGH PERFORMANCE SOM FOR IOT EDGE DEPLOYMENT IN SMART APPLICATIONS Arrow Electronics and Exor Embedded have announced the availability of nanoSOM nS02, a high-performance, energy-efficient system on module (SOM) for IoT edge deployments. nS02 is based on the 800MHz version of STMicroelectronics’ STM32MP1 microprocessor. The module serves as a full production design and Arrow is also offering a supporting development kit. The nanoSOM nS02 is an innovative, ultra-compact and cost-effective SOM based on the STM32MP1 with dual Arm® Cortex® -A7 cores and a Cortex-M4 core plus a 3D graphics-processing unit (GPU) that supports advanced human-machine interface (HMI) development. The nS02 is well suited for applications requiring IoT connectivity, multimedia capabilities and high security in connectivity, especially as an Industry 4.0 embedded solution. The nS02 is a rugged solution and is soldered directly onto the main carrier board, without the need for separate connectors that could reduce the reliability of the system. At only 25.4 x 25.4 x 3.0mm, nanoSOM nS02 provides flexibility for developers of the new generation of smart IoT products, enabling them to design products that are extremely compact and ultra-slim. Target applications include smart IoT controllers and gateways, cloud edge interfaces, and building automation. The nanoSOM nS02 includes a production-ready Linux RT board support package (BSP) and fully supports the Exor XPlatform, which includes Exor Embedded Open HMI software, Corvina Cloud IIoT platform and IEC61131 CODESYS or Exor xPLC runtime. Read more: AN ULTRA-COMPACT, HIGH PERFORMANCE SOM FOR IOT EDGE DEPLOYMENT IN SMART APPLICATIONS ### ANALOG DEVICES ANNOUNCES 42V, 15A SYNCHRONOUS STEP-DOWN REGULATOR SILENT SWITCHER 2 Analog Devices announced the release of a new synchronous step-down regulator, LT8648S, that features second generation Silent Switcher architecture designed to minimize EMI emissions while delivering high efficiency at high switching frequencies. This includes the integration of input and boost capacitors to optimize all the fast current loops inside and make it easy to achieve advertised EMI performance by reducing layout sensitivity. This performance makes the LT8648S ideal for noise sensitive applications and environments. The fast, clean, low overshoot switching edges enable high efficiency operation even at high switching frequencies, leading to a small overall solution size. Peak current mode control with a 25 ns minimum on-time allows high step down ratios even at high switching frequencies. External compensation via the VC pin allows for fast transient response at high switching frequencies. The VC pin also enables current sharing and a CLKOUT pin enables synchronizing other regulators to the LT8648S. Burst Mode operation enables low standby current consumption, forced continuous mode can control frequency harmonics across the entire output load range, or spread spectrum operation can further reduce EMI emissions. Soft-start and tracking functionality is accessed via the SS pin, and an accurate input voltage UVLO threshold can be set using the EN/UV pin. Features Silent Switcher 2 Architecture Ultralow EMI Emissions on Any PCB Eliminates PCB Layout Sensitivity Internal Bypass Capacitors Reduce Radiated EMI Optional Spread Spectrum Modulation High Efficiency at High Frequency Up to 95.5% Efficiency at 1 MHz, 12 VIN to 5 VOUT Up to 93% Efficiency at 2 MHz, 12 VIN to 5 VOUT Wide Input Voltage Range: 3 V to 42 V 15 A Output Current Low Quiescent Current Burst Mode® Operation 100 µA IQ Regulating 12 VIN to 5 VOUT Output Ripple < 10 mVP-P External Compensation: Fast Transient Response and Current Sharing Fast Minimum Switch On-Time: 25 ns Low Dropout Under All Conditions: 35 mV at 1 A Forced Continuous Mode Adjustable and Synchronizable: 200 kHz to 2.2 MHz Output Soft-Start and Power Good Safely Tolerates High Reverse Current Small 36-Lead 7 mm × 4 mm LQFN Package AEC-Q100 Qualification in Progress Read more: ANALOG DEVICES ANNOUNCES 42V, 15A SYNCHRONOUS STEP-DOWN REGULATOR SILENT SWITCHER 2 ### ADVANTECH RELEASES NXP I.MX8 QUADMAX ROM-7720, QSEVEN MODULE FOR AI AND MACHINE VISION APPLICATION Advantech, a global leader in the embedded computing market, is pleased to announce its first NXP i.MX8 product: ROM-7720, an Arm-based Qseven module powered by the NXP Arm® CortexTM-A72 i.MX8 high-performance processor. ROM-7720 supports 4K resolution via HDMI 2.0 with H.265 H264 hardware accelerator engines for video decoding and additional GPU for image processing. Using OpenVX, it is ideal for AI, machine vision, and big data processing and analytics applications in the IoT era. Powerful Computing Performance for Visual Processing ROM-7720 adopts NXP i.MX8 Quad Max SoC, which integrates two CortexTM-A72, four Cortex-A53 and two Cortex-M4F processor cores and the Vivante GC7000XS/VX graphics engine, which supports OpenGL ES, OpenCL and OpenVL (vision) SDK for developing images, data processing, and analytics applications. ROM-7720 supports display output with HDMI2.0 (3840 x 2160 @60Hz), dual 24bit LVDS for multiple displays, and 2 + 4 lanes MIPI-CSI camera input. It supports a high resolution display and meets the camera requirements of different machine vision applications. New High Speed Interface for AI and Machine Vision Applications ROM-7720 offers new high speed I/O, including USB 3.0, PCIe 3.0 and SATA 3.0. It provides efficient interfaces for extending peripheral devices, such as the SSD, 5G cellular card, and FPGA IC to empower new AI and machine vision development. Value-Added Embedded Software Services: AIM-Android Services Advantech will support allied, industrial and modular (AIM) frameworks for Linux applications that help accelerate software development via flexible, long-term support. AIM-Linux services offer verified embedded OS platforms and industrial-focused apps and SDKs through which users can easily select the embedded software tools they need to focus on their vertical software development. Read more: ADVANTECH RELEASES NXP I.MX8 QUADMAX ROM-7720, QSEVEN MODULE FOR AI AND MACHINE VISION APPLICATION ### ADVANTECH RELEASES SOM-9590: DEFENCE-GRADE COM EXPRESS FOR EMPOWERING DEFENCE & COMMUNICATION APPLICATIONS Advantech, a leading embedded computing solutions provider, is thrilled to announce the release of its new Type 7 COM Express Basic Module designed for a ruggedized applications, SOM-9590. The SOM-9590 provides an ideal foundation for new product designs due to its server-grade computing capability. With all solder-down design components, SOM-9590 meets the requirements of users requiring a reliable, high-performance solution. Target applications include railway transit, defence, mining, and communications requiring high computing power, data bandwidth, and the ability to work in harsh indoor and outdoor environments. Integrated Server Performance And Enhanced Security Protection SOM-9590 delivers powerful server-grade performance powered by Intel ® Xeon® processors and integrated with two 10GBASE-KR interfaces to help fulfill ever-increasing computing application demands in the area of edge networks. Users can take advantage of SOM-9590’s native 10GBASE-KR interface to design 10GbE carrier boards. TPM 2.0 is secured with 128bit capability (up to 256bit), a secure boot, and frozen BIOS to provide the best possible protection for user applications. Reliability Guaranteed For Mission-Critical Applications SOM-9590 features many design elements that fulfill the requirements of demanding environments. All components, including the processor, DDR4 memory, and SSD storage use onboard design, meet industrial-grade standards, and are IPC-A-6012 class 3 compliant in the hardware and layout phase. With certification from the MIL-STD-810G standard, SOM-9590 meets the exact demands of military applications. It’s capable of survival at vibration 7.7Grms (Method 514.7C-4), operating at a 50,000 feet altitude (Method 500.6 Procedure II), and it can perform in a -40 ~ 85°C temperature range. SOM-9590 has the IPC-A-610G Class 3 qualification—defined by IPC-org as fulfilling the highest quality product demands for critical applications. Read more: ADVANTECH RELEASES SOM-9590: DEFENCE-GRADE COM EXPRESS FOR EMPOWERING DEFENCE & COMMUNICATION APPLICATIONS ### Aergia: Android controlled TV Remote(with Speech Recognition) using Arduino Have you ever faced this situation while sitting on your favorite spot on the couch or recliner, comfortably watching your favorite TV program? You're snugly tucked under the blanket, the air conditioning is pleasantly cool, the sun outside is shining it's delicate warm golden rays on the closed window, the air (from the air vents) is refreshing and gravity seems infinite...... It's almost like nature doesn't want you to get off your couch....... Then all of a sudden a horrible commercial pops up on the TV and you desire to switch the channel immediately. However, the TV remote which is located just beyond your arm's length seems to be many miles away and you do not have the energy nor the will power to reach for it. You then look with disappointment at your aging Android phone which is near you and hope that you could use it to control your TV. If you're like me, then you're faced with this situation quite often......... in fact EVERYDAY! As a solution to this quite serious problem, I have devised 'Aergia' (named after the Greek goddess of laziness and sloth), a gadget which with the help of an Android phone can control my TV, set top box, stereo or any other device which uses an IR remote. Besides, this device can be built at a cost of just $20 and the skills required to build it are bare minimum (basic knowledge about electronics and the Arduino IDE). So let's get lazing....... I mean building! Step 1: Parts Needed The following parts are needed to build this project :- Supplies : 1. Arduino Uno 2. Bluetooth Module (I have used the HC-05) 3. IR LED 4. IR Receiver 5. Resistors (1pc 100 ohms, 1pc 10K ohms and 1pc 20K ohm) 6. PCB 7. Electrical Wire 8. 9v Battery 9. 9v Battery Snap 10. Male Header Pins (both straight and bent) 11. Steel Wire 12. Insulation Tape 13. Heat Shrink 14. Project Enclosure Tools : 1. Soldering Wire 2. Soldering Iron 3. Soldering Wax 4. Drill 5. Hacksaw Step 2: Preparing the Project Enclosure In this step you will drill the holes on the project enclosure to mount the Arduino, IR LED and IR Receiver. A lot of the auto-makers these days follow a design language. For instance, the Lincolns which look like a baleen whale, and the BMWs which look like a daredevil pig hat has smashed its nose against a wall. I too follow a design language in my projects which I call the 'Lunch Box' Design. I have carried forward the same design language to this instructable as well and hence used a 'Lunch Box' as my project enclosure. 1. Drill four holes at the bottom of the project enclosure to secure the Arduino Uno. 2. Drill a hole on the left wall of the enclosure big enough for the USB port of the Arduino to protrude out of the enclosure (Refer to pic. 1). 3. Drill a hole on the right wall for the IR Receiver (Refer to pic. 2). 4. Drill four holes on the right wall for the IR LED stem. Two of the drilled holes are for the IR LED, while the other two are to anchor the IR LED Stem to the project enclosure (Refer to pic. 2). Step 3: Power Supply Circuit The Arduino Uno used in this project is powered by a 9v battery. The Arduino has an on board regulator which can receive an input voltage within the range of 6v - 20v. Due to this, we do not need any additional circuit to regulate the input voltage to the Arduino when connected to a 9v battery. 1. Solder the bent Male Header Pins to the two wires of the 9v battery snap. 2. Cover the soldered points on the wire with insulation tape or heat shrink. The header pins soldered to the battery snap must look like pic. 2. You are now done with the power supply circuit for the Arduino. Step 4: IR Receiver Circuit The IR Receiver is used to detect and decode the IR pulses sent from the TV remote. The decoded IR signals are then stored in the Arduino Uno. 1. Carefully bend the three leads of the IR Receiver backwards at a right (90 degrees) angle (Refer to pic. 2 and pic. 3). 2. Solder three wires to the leads of the IR Receiver. Ensure that you insulate each of the leads of the IR Receiver so that there no possibility of the pins shorting in case they come in contact with each other (Refer to pic. 4). 3. Solder the bent Male Header Pins to the other end of the wires. The completed circuit must look like pic. 1. Step 5: Bluetooth Transceiver - Part 1: Bluetooth Module The Bluetooth Module enables the Arduino to connect and communicate wirelessly with the Android phone. I strongly suggest to purchase a Bluetooth Module which is soldered to a breakout board. Purchasing only the Bluetooth Module without the breakout board means that you will have to do the tricky soldering part which could damage the module if it is not done witht the right tools. If you have only purchased the Bluetooth Module, visit Step 4 of this instructable for details about the soldering. If you have purchased the Bluetooth Module with the breakout board but do not have the Female Header Pins to connect to the module, then you can use the following Top Tip: Briefly heat the ends of the wire over a candle to partially melt and loosen up the insulation on the wire. Then force each of the wires into the Vcc, Gnd , Tx and Rx pins of the Bluetooth Module. Connect the Female Header Pins to the Vcc, Gnd , Tx and Rx pins of the Bluetooth Module. Step 6: Bluetooth Transceiver - Part 2: Level Shifter Circuit The Arduino Uno has a serial input/output of 5v through its pins, whereas the Bluetooth Module operates at 3.3v logic. Due to this, a voltage divider circuit ( level shifter ) is required to convert this 5v output to 3.3v. 1. Cut a small piece of PCB and solder two Male Header Pins (Straight) to it. Refer to pic. 2 2. Solder the 10K ohms and 20K ohms resistors according to the circuit diagram in pic.5 3. The final completed circuit should look like one in pic. 4 You have now completed the Bluetooth Transceiver.   For more detail: Aergia: Android controlled TV Remote(with Speech Recognition) using Arduino ### ALTIUM ACCELERATES IOT AND AI HARDWARE DEVELOPMENT THROUGH GEPPETTO AND SEEED COLLABORATION All the prototyping tools you need in Geppetto workspace on SEEED platform Altium, announces that Seeed, the IoT hardware enabler, has embedded the Geppetto electronic design application into its Seeed platform.  Seeed users can now go straight from creating a design, to manufacturing a working printed circuit board in just one session. Geppetto is a ground-breaking cloud-based design tool that allows anyone to design electronics. Until now, Gumstix was the only company using Geppetto to create and manufacture custom electronics.  Now users can create Geppetto-based designs and have them manufactured by Seeed. A hardware design can be completed in minutes, and ready to ship from 7 – 20 working days. Exciting new electronics are being conceived by programmers who are putting their innovative software in specialized devices,” said W. Gordon Kruberg, M.D., head of Modular Hardware, Altium, LLC.” We are thrilled to be working with Seeed to put Geppetto’s power of authorship and design in the hands and minds of this new generation of makers. Geppetto Key Capabilities: Custom Web-design tool – embedded directly into the Seeed ecosystem, Geppetto provides a simple drag and drop design platform for all levels of designers enabling them to quickly build production-ready prototypes for IoT and AI applications. Design to Build – Geppetto allows Seeed users, makers or professional engineers, to design custom hardware from the Seeed component library. The Board Builder is a menu driven application that allows users to rapidly populate a Geppetto board, making the design/prototype process trivially easy. Rapid Manufacturing – Seeed can manufacture and deliver custom hardware directly, or with partners. About Geppetto Geppetto® is a free online design tool that lets almost anyone create electronic device designs. Hardware design can be created in minutes, complete with BOM documentation and pricing. Users can create multiple projects and go straight from a design to a production ready order in one session. To learn more about Geppetto’s web design tool integration into Seeed visit  http://geppetto.seeedstudio.com/ Read more: ALTIUM ACCELERATES IOT AND AI HARDWARE DEVELOPMENT THROUGH GEPPETTO AND SEEED COLLABORATION ### AIR VELOCITY SENSORS WITH DIGITAL I2C OUTPUT FOR THERMAL MANAGEMENT AND FILTER MONITORING APPLICATIONS Posifa Technologies announced the new PAV3000 series of economical, high-performance air velocity sensors with digital I2C output and a surface-mount footprint for thermal management and filter monitoring in even the most space-constrained locations. Unlike thermistor-based solutions, the PAV3000 has a MEMS sensor core that is minimally affected by ambient temperature changes and which provides instant real-time feedback on proper air flow at critical locations. Air velocity data perfectly complement temperature information to provide the best insight into thermal efficiency. Because the PAV3000 helps identify areas that require unusually high air flow to maintain stable temperatures, layouts for rack enclosures with air cooling – such as those found in data centers – can be modified to reduce cooling demands for increased energy savings. In applications such as HVAC systems, air velocity measurements can be used to determine when filters need to be replaced. This ensures hardware is adequately protected during heavy use, and it allows customers with light usage requirements to benefit from extended change intervals. Key Specifications And Benefits: Digital I2C output Compact, robust surface-mount package Solid-state sensing core No moving parts Eliminates the need for a surface cavity or fragile membrane Resistant to clogging and pressure shock Feature Posifa’s third-generation thermal flow die Measure air velocity at 7 m/s (PAV3005V) and 15 m/s (PAV3015V) Extremely fast response times of 125 ms typical Excellent repeatability of 1 % FS High accuracy of 5 % FS Supply voltage from 5 VDC to 5.5 VDC Supply current of 20 mA Operating temperature range of -25 °C to +85 °C temperature range PAV3000 series devices feature Posifa’s third-generation thermal flow die, which uses a pair of thermopiles to detect changes in temperature gradient caused by mass flow. The result is excellent repeatability of 1% FS and an accuracy of 5% FS. The solid-state thermal isolation structure on the sensor die eliminates the need for a surface cavity or the fragile membrane used in competing technologies, making the sensor resistant to clogging and pressure shock. Read more: AIR VELOCITY SENSORS WITH DIGITAL I2C OUTPUT FOR THERMAL MANAGEMENT AND FILTER MONITORING APPLICATIONS ### ADVANTECH RELEASES HIGH-PERFORMANCE 3.5” SBC MIO-5373 WITH 8TH GEN. INTEL® CORE™ PROCESSORS Advantech (2395.TW), a leading global provider of IoT systems and embedded platforms, is pleased to announce the latest 3.5” SBC MIO-5373 based on the 8th Gen. Intel Core platform with low-power SoC. Featuring compact 146 x 102mm dimensions, the MIO-5373 design not only offers impressive I/O functionality but also provides domain-focused features like CANBus and wide-ranging power input. It is ideally suited for use in application fields like medical equipment, automation control systems, outdoor kiosks, and areas requiring small-size adoption with Intel Core-level computing performance. Quad-Core Performance and High Speed NVMe x4 The new 8th Gen. Intel Core low-power SoC (codename: Whiskey Lake-U) is the first generation to double the computing cores from dual to quad. This new generation provides double the computing performance with 15W power consumption. Featuring a built-in Gen9LP graphics engine, MIO-5373 supports three simultaneous displays through LVDS/eDP, HDMI, and DisplayPort interfaces up to 4K resolution, as well as H.265/HEVC, H.264/AVC, MPEG2 hardware decode/encode. Dual channel DDR4 supports up to 32GB/64GB* and the M.2 M-Key 2280 NVMe x4 supports high-speed PCIe SSDs to provide an extremely high data rate for computing and storage. Enhancing overall system performance—rather than just that of the core processor—makes it well-suited for image processing in medical applications and heavy loading content kiosk displays. Domain-Focused I/O and Flexible Expansion MIO-5373’s built-in iManager3.0 is based on Advantech’s EIO-201 embedded controller which integrates power sequence control for higher reliability and generic functions including GPIO, hardware monitoring, smart fan control, and watchdog timer. It also has domain-focused features like high-speed RS-232/422/485 up to 1Mbps, I2C (100kb/400kb/1Mb), and CANBus. iManager provides I/O functionality in company with drivers and software APIs on both the Windows and Linux operating systems to make it easier for software development. MIO-5373 provides adequate expansion for a variety of function cards, including: M.2 E-Key for WiFi+BT, or AI acceleration card; M.2 B-Key for 3G/LTE modules, or SATA SSD; and M.2 M-key NVMex4 with optional SATA SSD. What’s more, Advantech’s MIO Extension interface provides 4 x PCIe x1/USB/LPC/SMBus slots for vertically-focused or customized expansion. The MIOe-260 I/O module provides an additional 2 x GbE, 8 x UART, 4 x USB, and 2 x CANBus with isolation, miniPCIe socket, and a M.2 B-key socket. Together with MIO-5373 and MIOe-260, it enables factory automation processes for AGV, CNC machines, and medical equipment I/O requirements. Read more: ADVANTECH RELEASES HIGH-PERFORMANCE 3.5” SBC MIO-5373 WITH 8TH GEN. INTEL® CORE™ PROCESSORS ### ACROMAG COMBINES A/D, D/A, DIGITAL I/O AND COUNTER/TIMER CHANNELS ON ACROPACK Acromag adds another military-grade measurement and control module to its AcroPack series of ruggedized mini PCIe I/O modules. The new AP730 multi-function I/O module performs analog input, analog output, discrete I/O and counter/timer functions. A variety of carrier cards can host up to four modules and are available in PCIe, VPX, XMC, CompactPCI-Serial, and mini-ITX embedded computing platforms. These boards are designed for commercial off-the-shelf (COTS) applications in defense, aerospace, and industrial systems to provide a high-density mix of I/O signal interfaces in compact computing environments. With the AP730’s single-module combination of analog and digital I/O functions, system integrators can use remaining carrier mezzanine slots for serial, Ethernet, avionics, and CAN interfaces, or FPGA signal processing with other AcroPack modules. Each AP730 module features a high-density mix of 28 I/O channels and 32-bit counter/timers in a 30 x 70mm card. Eight differential analog inputs (0-10V, ±10V ranges) feed a 16-bit A/D converter capable of sampling at nearly 800KHz. Four analog output channels have individual 16-bit D/A converters with a 7.5µS settling time. Programmable I/O ranges, sequencing, interrupts, memory allocation, and other controls are supported, as well as external triggering. The bidirectional digital I/O is configured as two 8-channel groups with TTL-compatible thresholds and programmable change-of-state or level interrupts. Counter/timers perform quadrature, frequency, and period measurement functions plus pulse width modulation and waveform generation operations. DMA transfer support efficiently moves data between module memory and the PCIe bus to unburden the system CPU and increase performance. Increasing demand for more efficient size, weight, and power (SWaP) computing is driving the need for high-density, multi-function I/O modules like the AP730,” stated Robert Greenfield, Acromag’s Business Development Manager. “The compact yet rugged AcroPack mezzanine is ideal for interfacing a mix of signals in the tightest footprint on PCIe servers, VPX chassis or small form factor computers. Read more: ACROMAG COMBINES A/D, D/A, DIGITAL I/O AND COUNTER/TIMER CHANNELS ON ACROPACK ### Adafruit's Metro RP2040 Packs a Raspberry Pi RP2040 and Extras Into an Arduino UNO Form Factor Adafruit has announced a new entry in its Metro line of Arduino UNO form factor microcontroller development boards, and this time it's playing host to a Raspberry Pi RP2040 dual-core Arm Cortex-M0+ chip — and it's called, unsurprisingly, the Adafruit Metro RP2040. "This is the RP2040 Metro Line, making all station stops at 'Dual Cortex M0+ mountain,' '264k RAM round-about' and '16 Megabytes of Flash town,'" Adafruit enthuses of its latest Metro design. "This train is pile[d] high with hardware that complements the Raspberry Pi RP2040 chip to make it an excellent development board for projects that want Arduino-shape-compatibility or just need the extra space and debugging ports." As with other entries in the Metro line, the Metro RP2040 is designed to be pin- and footprint-compatible with the Arduino UNO line of microcontroller development boards. It's not a clone, though: as well as the new microcontroller at its heart, the board includes a USB Type-C connector rather than full-size USB, a microSD slot for storage, a dedicated debug port, a STEMMA QT port for expansion to external boards, and an on-board RGB LED in addition to the usual Pin 13 LED. The RP2040 microcontroller gives the board two 32-bit Arm Cortex-M0+ cores running at a stock 133MHz and 264kB of static RAM (SRAM), plus a smart Programmable Input/Output (PIO) block which can run state machines independently of the CPU cores. There's 16MB of off-chip quad-SPI flash, and 24 general-purpose input/output (GPIO) pins broken out with four doubling as analog inputs. For those looking to pick a board up, though, Adafruit offers a couple of notes. The first is that the microSD slot, connected over SPI, offers hardware support for SD Input/Output (SDIO) operation, but that there's no corresponding software support in Arduino, MicroPython, or CircuitPython. The second is a change to the pinout compared with a true Arduino UNO: Pins A4 and A5, the fifth and sixth analog inputs on an Arduino UNO, are on the Metro RP2040 digital inputs instead. There's also a receive-transmit switch, not found on an original Arduino UNO. "We added this because traditional Arduino board start counting the GPIO for the digital pins with 0-7 and then 8-13. However, the D0/D1 pins are also traditionally the hardware UART Serial1, where D0 is Rx and D1 is Tx," the company explains. "On the RP2040, however, the UART pins are the other around: D0 is Tx and D1 is Rx. Thus a DPDT [Double-Pole Double-Throw] switch: flip one way to have the GPIO go in order of 0-7, flip the other way to have the logical locations of the hardware UART correct but now the pin order is 1, 0, 2, 3…7." The board design has been finalized but hardware has not yet launched; those interested can sign up to be notified when the Metro RP2040 goes on sale on the Adafruit Store, where it is listed at $14.95 before volume discounts. Source: Adafruit's Metro RP2040 Packs a Raspberry Pi RP2040 and Extras Into an Arduino UNO Form Factor ### ADVANTECH LAUNCHES AIMB-233 “THIN” MINI-ITX INDUSTRIAL MOTHERBOARD WITH 8TH GEN. INTEL® CORE™ Advantech, a leading industrial solutions provider, is pleased to release AIMB-233, a low-profile industrial-grade “THIN” Mini-ITX motherboard to enable graphics processing and computing power in limited space applications.   AIMB-233 is powered by an 8th Gen. Intel® Core™ Processor, features diverse I/O ports, and utilizes an optimized thermal solution. With an overall height of just 25 mm (.08 in), this motherboard is an excellent choice for applications in nursing carts, patient care systems, Human-Machine Interfaces (HMI), and mobile devices. Featuring Dual Ethernet and Numerous I/O for Diverse Applications Advantech AIMB-233 features multiple high-speed I/O — including 8 USB ports (1x type C USB 3.1, 3x USB 3.1, 2x USB 3.0, 2x USB 2.0), 2x SATA III, PCIe x1, 1x M.2 M-Key, and 1x M.2 E-key (optional full-size MiniPCIe) — to consolidate legacy and modern peripheral devices on a motherboard. Additionally, this motherboard has 8-bit digital programmable I/O, 6x COM ports (one port for RS-232/422/485), and a 2W dual-channel audio amplifier. AIMB-233 is further equipped with dual Gigabit Ethernet ports that deliver up to 1000 Mbps of bandwidth for two network segment applications. These features allow AIMB-233 to support a wide range of peripherals and network connections in a myriad of applications. Read more: ADVANTECH LAUNCHES AIMB-233 “THIN” MINI-ITX INDUSTRIAL MOTHERBOARD WITH 8TH GEN. INTEL® CORE™ ### ADVANTECH LAUNCHES NXP I.MX8M ROM-5720 SMARC MODULE FOR NEXT GENERATION MULTIMEDIA APPLICATIONS Embedded Modules & Design-in Services Advantech, a global leader in the embedded computing market, is pleased to announce ROM-5720, a SMARC 2.0 module powered by the NXP ARM Cortex-A53 i.MX8M processor with excellent graphics performance and low power consumption. The ROM-5720 supports 4Kp60 resolution via HDMI 2.0 and 4Kp60 H.265 decoding with HDR. It features a variety of interfaces: USB3.0, PCIe, Dual Gigabit Ethernet, two MIPI-CSI, and a four-lane MIPI-DSI. ROM-5720 provides an ideal solution for a wide range of industrial applications such as infotainment, automation, HMI, and healthcare. Excellent Graphics Performance for Machine Vision and Multimedia Applications ROM-5720 adopts NXP i.MX8M SoC, which features up to four ARM Cortex-A53s and one additional general-purpose Cortex-M4 core processor for low-power processing. The ARM Cortex-A cores can be powered off while the Cortex-M4 subsystem performs low power, real-time system monitoring. The Vivante GPU supports the latest OpenGL ES, OpenCL , OpenVG, and Vulkan for advanced graphics and accelerated compute workloads such as the Deep Learning Inference. ROM-5720 supports display output with HDMI2.0 (4096 x 2160 @60Hz), 1×4 lanes MIPI-DSI for multiple display, and two MIPI-CSI camera input. It provides a high resolution display and meets camera requirements for different machine vision and multimedia applications. High-Speed Connectivity Interfaces To extend the flexibility of various applications, ROM-5720 offers a range of interfaces, such as dual USB3.0, dual Giga Ethernet, PCIe2.1, and four RS232. It provides efficient interfaces for extending peripheral devices like high-speed storage, camera, wireless modules, and it works with touch and legacy devices to empower self-service kiosks and interactive multimedia applications. Value-Added Embedded Software Services: AIM-Linux Services Advantech supports allied, industrial, and modular (AIM) frameworks for Linux to accelerate software development with flexible and responsive long-term support. AIM-Linux Services offers verified embedded OS platforms and industrial-focused apps and SDKs through which users can easily select the embedded software tools they need to focus on their vertical software development. Read more: ADVANTECH LAUNCHES NXP I.MX8M ROM-5720 SMARC MODULE FOR NEXT GENERATION MULTIMEDIA APPLICATIONS ### ADVANTECH LAUNCHES UNO-247 FANLESS ENTRY-LEVEL EDGE COMPUTER FOR IT APPLICATIONS Advantech, a leading provider of industrial computing platforms, is pleased to announce the UNO-247—a fanless entry-level Internet of Things (IoT) edge computer aimed at information technology (IT) applications. Equipped with an Intel Celeron J3455 processor, comprehensive I/O ports, and VGA, and HDMI display interfaces, UNO-247 is designed to deliver edge computing power at a competitive price. To ensure flexible configuration and easy deployment for diverse industries, the system I/O includes 4 x USB, 2 x GigaLAN, 4 x RS-232, and 2 x RS-485 ports. The fanless design reduces the accumulation of dust and foreign contaminants in harsh environments, while the threaded DC jack enables locking to prevent unexpected power disconnections or interruptions. Overall, the UNO-247 provides a reliable edge gateway solution that can be configured according to specific applications, such as factory automation and environment monitoring. Optimized Form Factor for Easy Assembly and Convenient Maintenance Advantech’s UNO-247 is a compact platform that ensures convenient installation with high applicability and integration potential. The entire form factor has been optimized for internal space savings, an increased mean time before failure (MTBF), more reliable signal transmissions, and higher shock and vibration tolerance. Moreover, to reduce system downtime and ensure convenient maintenance, the platform’s mechanical design has been improved to enable memory installation/swapping without disassembling the entire chassis. Fanless Platform with Lockable DC Jack for Industrial Environments The UNO-247 features a fanless design that reduces the accumulation of dust and foreign contaminants, making it suitable for operation in harsh industrial environments. To prevent unexpected power disconnections or interruptions, the UNO-247 power adaptor is equipped with a threaded DC jack that allows the connector to be locked in place, ensuring a stable and reliable power supply. Cost-Efficient Software-Ready Solution with Comprehensive I/O Powered by an Intel® Celeron J3455 processor equipped with 4 x USB, 2 x GigaLAN, 4 x RS-232, and 2 x RS-485 ports, as well as 1 x VGA and 1 x HDMI, UNO-247 delivers comprehensive I/O to facilitate a wide range of applications. Moreover, UNO-247 supports the Windows 10 LTSC and Linux operating systems, and can be equipped with Advantech’s WISE-PaaS/DeviceOn software solution to enable remote monitoring and management. The extensive system features and software-ready design make the UNO-247 a cost-efficient intelligent edge gateway ideal for diverse IoT operations. Read more: ADVANTECH LAUNCHES UNO-247 FANLESS ENTRY-LEVEL EDGE COMPUTER FOR IT APPLICATIONS ### A Hardware CTF on Arduino: Abhinav Pandagale's BSidesSF '23 Badge (No Spoilers!) A cozy night in with a hardware capture-the-flag challenge, embedded in a gorgeous PCB conference badge! This year, I had the pleasure of interviewing Abhinav Pandagale about his full-color PCB badges for this year's RSA Conference and BSides SF security events in San Francisco. He showed me some cool demos and info about the UV printing used on both badges: Abhinav has posted tutorials for both badges on his Hackster profile: RSA Sandbox badge, with remotes BSides CTF badge As he mentions in the interview, the RSA badge is compatible with a set of custom remotes that activate LEDs corresponding to different villages, while the BSides badge contains an embedded capture-the-flag challenge (CTF). Plus, if you completed the CTF during the conference, you got a little add-on with a UFO abducting a cow! It took me until this November to actually try it out, but it made for a great evening of nerdy fun with my partner, T. We started by turning the badge off, plugging it into my computer over Micro USB, and firing up the Arduino IDE. Then, we launched the Serial Monitor with the required settings and sent three stars (***) to start the challenge. Immediately, we were greeted with the first piece of ASCII art and a "system error": the first of five challenges. With each completed challenge, a different area of the badge lit up, which was thematically linked to that challenge. I love that little design tie-in! Here are my tips for anyone attempting the CTF: Bring a code buddy. Since T has a lot more programming experience than me – which came in handy several times – he recognized the initial "error code" as a particular type of encrypted text... and that's all I'll say about that. You may use spaces in your answer. The hints were perfect – we did end up using the last three, especially because it was getting late near the end! If you're kinda stuck but don't want to use the hints yet, try poking around the website a little. Difficulty-wise, the challenge was very approachable. It took us about 3 hours, from 11pm to 2am, including a bit of a side quest where we decided to try installing Kali Linux on a Raspberry Pi in case it came in handy. (It did not – you really only need the board, the Arduino IDE, and a standard browser. But don't let that stop you!) If you can't get your hands on this board, you can try similar challenges at conferences like RSA, DEF CON, and Hardwear.io (a dedicated hardware security conference). I tried one a few years ago at Hardwear.io that involved using thermoformed plastic beads to create a simple utility key, dumping the program flashed to an Arduino board, and re-balling a BGA chip... which is a great way to learn how to blow tiny silver solder balls everywhere with a heat gun. As for this challenge, the art alone was well worth the effort! I learned a few techniques, and it was satisfying to contribute a bit of non-programming knowledge to the team. Plus, it feels like I've finally earned my little UFO cow. I hope Abhinav does another CTF; you can see more cool badges on his Hackster profile, and follow more of his work over at hackerwares.in and on social media. Source: A Hardware CTF on Arduino: Abhinav Pandagale's BSidesSF '23 Badge (No Spoilers!) ### A LORAWAN THEFT RECOVERY SYSTEM FOR STOLEN BIKES USING A LOW-COST DRAGINO LGT-92 Simon Kemper has published a guide for making use of the low-cost Dragino LGT-92 LoRaWAN asset tracking system to help track a bike when it’s stolen for easy recovery, while running for years on a single battery. Dragino LGT-92 is built for asset tracking across a LoRaWAN connection (a long-range low-power radio standard). The Dragino LGT-92 integrates a LoRaWAN radio with GPS-based location tracking. For the device to keep the power usage down, it utilizes an accelerometer to wake from sleep . This means that location fixes and updates are limited to when the device has detected movement. Kemper states: The LGT-92 is available in two versions. One of these versions offers the complete product, but without a case.” He continues “This variant can be used to build your own products based on the LGT-92. Further individualization are available: Connection of external antennas for LoRaWAN and GPS; terminal strip for connection of battery pack. Use the screw terminal to connect high-capacity batteries, for example D-Cells from Saft Batteries. These come with capacities of over 15.000mAh (15 Ah!) and are theoretically capable of operating the LGT-92 for several years. With board and battery available, all that is needed is to connect it with the item to be tracked. Kemper further explains: I have equipped my bike with an LGT-92. When I park the bike, the LGT-92 goes to sleep. If someone tries to grab my bike, the sensor wakes up and tells the platform to send an alarm immediately… Periodic reporting about once per hour indicates that the device is still within range of a LoRaWAN network and working properly. Again, you can react to these messages by setting a rule to indicate the absence of these hourly messages. Read more: A LORAWAN THEFT RECOVERY SYSTEM FOR STOLEN BIKES USING A LOW-COST DRAGINO LGT-92 ### A NEW DUAL CHANNEL TEMPERATURE SENSOR WITH RESISTOR PROGRAMMABLE TEMPERATURE SWITCHES Texas Instruments has announced a new IC that is a part of family of ultra-low power, dual channel, resistor programmable temperature switches that enable protection and detection of system thermal events from –40 °C to 125 °C. The TMP390-Q1 offers independent overtemperature (hot) and undertemperature (cold) detection. The trip temperatures (TTRIP) and thermal hysteresis (THYST) options are programmed by two E96-series resistors (1% tolerance) on the SETA and SETB pins. Each resistor can range from 1.05 kΩ to 909 kΩ, representing one of 48 unique values. The values of the resistor to ground on SETA input sets the TTRIP threshold of Channel A. The value of the resistor to ground on SETB input sets the TTRIP threshold of Channel B, as well as the THYST options of 5 °C, or 10 °C for both channels, to prevent undesired digital output switching. Resistors accuracy has no impact to TTRIP accuracy. To enable customer board-level manufacturing, the TMP390-Q1 supports a trip test function where the digital outputs are activated by exercising the SETA or SETB pin. Features AEC-Q100 qualified with the following results: Temperature grade 1: –40 °C to +125 °C operating temperature range Resistor programmable temperature trip points and hysteresis options Resistor tolerances contribute zero error Hysteresis options: 5 °C, and 10 °C Separate outputs for overtemperature or undertemperature detection Channel A (overtemperature): +30 to +124 °C, 2 °C steps Channel B (undertemperature): –50 to +25 °C, 5 °C steps Accuracy without calibration ±1.5 °C (maximum) from 0 °C to +70 °C ±3.0 °C (maximum) from –40 °C to +125 °C Ultra-low power consumption: 0.5 μA typical at 25 °C Supply voltage: 1.62 to 5.5 V Open-drain outputs Trip test function enables in-system testing Available in an SOT-563 (1.60-mm × 1.20-mm), 6-pin package Read more: A NEW DUAL CHANNEL TEMPERATURE SENSOR WITH RESISTOR PROGRAMMABLE TEMPERATURE SWITCHES ### A simple temperature control system (for 3D print or other constant temperature control purpose) [Note: if you are using smartphone or portable device to browser this post, some math formula might not appear properly. To see the math in correct form, scroll down to the bottom and click "View web version"]   After finishing the mini CNC laser engraver, the next thing in my mind is 3D printer. One of the most important part of a 3D printer is the plastic filament extruder, composed by a cold end constantly supplying plastic filament, and a hot end melting the plastic and feeding the liquid plastic through a small nozzle. For PLA or ABS plastic filaments (most common materials used in home-made 3D printers), the hot end needs to be at a temperature of about 200C (or 180C for PLA, 220C for ABS). It is important to keep this temperature (roughly) constant, so is the plastic melting speed and then a controllable plastic feeding rate. Therefore two components are essential: a heater, and a temperature sensor. The heater heats up the hot end nozzle, and the sensor monitors the temperature. The heater is on when the nozzle temperature is too low, and is switched off when the nozzle is too hot. I plan to build a home-made 3D printer controlled by my Raspberry Pi, which, unfortunately, does not have any analog data acquisition pin. Therefore I decide to build a stand-alone temperature control system. The idea is very simple. I use a power resistor as the heater and a thermistor as the temperature sensor. The system contains an LM324 quad op-amps chip. One op-amp is used as a comparator to compare the thermistor resistance with a nominal resistance and output LOW or HIGH as the comparison result. The other three op-amps inside the LM324 are used to perform some linear transformation and output a voltage that is proportional to the thermistor temperature. This voltage is applied to a 0-30V voltmeter so one can read the temperature. A N-Channel MOSFET transistor is used to control on/off of the heater.   For more detail: A simple temperature control system (for 3D print or other constant temperature control purpose) ### Getting Started With the ESP8266 ESP-01 The ESP8266 ESP-01 is a module for Wi-Fi that enables microcontrollers to connect to a Wi-Fi network. This module is an independent SOC (System On a Chip) that does not require a microcontroller for managing inputs and outputs like you would typically do with an Arduino, as the ESP-01 functions as a miniature computer. It is possible to have a maximum of 9 GPIOs on the ESP8266, depending on the version. Hence, we can enable a microcontroller to connect to the internet similar to the Wi-Fi shield enabling the Arduino, or we can code the ESP8266 to not just connect to a Wi-Fi network, but also function as a microcontroller. This feature gives the ESP8266 a lot of flexibility, potentially reducing costs and saving space in your projects. This tutorial will demonstrate the process of setting up the ESP-01 Wi-Fi module, configuring it, and ensuring communication with another device is successful. Step 1: Materials These are the components that you will need: ESP8266 Wi-Fi Module ESP-01 Male/female jumper wires Breadboard Arduino UNO Step 2: ESP-01 Setup When purchasing the ESP8266 ESP-01, it comes with AT firmware already installed. It is feasible to reprogram the chip with alternative firmware like NodeMCU, for instance. Nonetheless, the AT firmware works with the Arduino IDE, making it the firmware choice for this tutorial. To learn how to install an alternative firmware, refer to the Miscellaneous section in this guide. Begin by using the jumper wires to link the Wi-Fi module to the Arduino as demonstrated in the provided pictures. Step 3: ESP-01 Setup Continued Upload the BareMinimum example to ensure that no previous programs are running and using the serial communication channel. Next, open the serial monitor and type the following command: AT You should get an “OK” response. This means that the module is working and that you are good to go. Now we are ready to test a two way communication between the module and another device. Step 4: Basic AT Commands The ESP8266 ESP-01 module has three operation modes: Access Point (AP) Station (STA) Both The Wi-Fi module in Access Point (AP) functions as a Wi-Fi network, enabling other devices to link up to it. This doesn't imply that you can access your Facebook through your device when the ESP-01 module is in AP mode. It creates a two way communication link between the ESP8266 and the connected device through Wi-Fi. When operating in STA mode, the ESP-01 has the ability to link up with an Access Point like the Wi-Fi network at your residence. This enables every device on the network to interact with the module. The module can function as both an AP and a STA in the third operating mode. Step 5: Basic AT Commands - STA Mode In this tutorial, we are going to set the module to operate in STA mode by typing the following command: AT+CWMODE=1 The corresponding number for each mode of operation is as follows: STA = 1 AP = 2 Both = 3 Step 6: Basic AT Commands - Check Mode If you want to check what mode your Wi-Fi module is in, you can simply type the following command: AT+CWMODE? This will display a number (1, 2, or 3) associated with the corresponding mode of operation. Step 7: Basic AT Commands - Connecting Wi-Fi NetworkOnce we have the ESP-01 operating in STA mode, we need to connect to a Wi-Fi network. First we can check if we are already connected to one by sending the command: AT+CIFSR This will display the station IP address of our ESP-01 module. If you don’t get an IP address after entering the previous command, use the following command to connect to your network: AT+CWJAP= “Wi-FiNetwork”,“Password” Type the name of your Wi-Fi network and the password to connect to it. Make sure you include the quotation marks. After a couple of seconds, you should get an "OK" response. You can check again to see if you have an IP address using the AT+CIFSR command. Step 8: Basic AT Commands - Enable Connections Then we need to enable multiple connections before we can configure the ESP8266 ESP-01 module as a server. Type the next command: AT+CIPMUX=1 Once again, each number is associated with a type of connection: Single = 0 Multiple = 1 The following step is to start the server at port 80: AT+CIPSERVER=1,80 The first number is used to indicate whether we want to close server mode (0), or open server mode (1). The second number indicates the port that the client uses to connect to a server. We chose port 80 because this is the default port for HTTP protocol. Step 9: Basic at Commands - Response Now, when we open a web browser and type the IP address of our ESP module we get the following response as shown in the image above. This is the HTTP request that our computer sends to the server to fetch a file. It contains some interesting information such as what file you want to retrieve, name of the browser and version, what operating system you are using, what language you prefer to receive the file in, and more. Step 10: Basic AT Commands - Send and Display Data We can now use the following commands to send some data and display it in our web browser’s window: AT+CIPSEND=0,5 The “0” indicates the channel through which the data is going to be transferred; while “5” represents the number of characters that are going to be sent. When we hit enter, the symbol “>” appears. This indicates that we can now type the characters that we want to send to the browser. In this example we chose “hello.” After a couple of seconds we get the response "SEND OK." This means that the data has been transmitted successfully to the client. However, nothing appears on the web browser’s window yet. This is because it is required to close the channel first in order to display the characters. We use the following command to close the channel: AT+CIPCLOSE=0 “0” indicates the channel that is being closed. Once we hit enter, our message is displayed on the web browser’s window as shown in the image above. You can refer to the following site to see the ESP8266 AT Command Set:http://www.pridopia.co.uk/pi-doc/ESP8266ATCommands... Read more: Getting Started With the ESP8266 ESP-01 ### 40V SYNCHRONOUS BUCK CONVERTERS FROM DIODES DELIVER HIGH EFFICIENCY WITH LOW EMI Diodes Incorporated announces the AP64350Q/AP64351Q/AP64352Q series of automotive-compliant, 3.5A, synchronous buck converters for point of load (POL) applications. Diodes Incorporated today announced the AP64350Q/AP64351Q/AP64352Q series of automotive-compliant, 3.5A, synchronous buck converters for point of load (POL) applications. The AP6435xQ combines a low quiescent current with a wide input voltage range of 3.8V to 40V. The devices have been developed for use in automotive applications including infotainment systems, instrument clusters, telematics, advanced driver assistance systems (ADAS), and forward lighting. With a fully integrated 75mΩ high-side power MOSFET and 45mΩ low-side power MOSFET, AP6435xQ provides high-efficiency step-down DC-DC conversion. The design of the AP6435xQ’s gate drive/bootstrap enables the devices to operate in low drop out (LDO) mode, allowing near 100% duty cycle. To increase efficiency as the load current approaches zero, the devices enter pulse frequency modulation (PFM), resulting in a quiescent current of just 22μA. They also feature frequency spread spectrum (FSS) with a switching frequency jitter of ±6% and a proprietary gate driver scheme, which reduces high frequency radiated EMI noise caused by MOSFET switching. The AP64350Q, AP64351Q, and AP64352Q have distinct additional feature sets that optimize performance in slightly different ways. The AP64350Q and AP64352Q have an adjustable switching frequency (100kHz – 2.2MHz) and can also be synchronized to an external clock. This provides the design flexibility to deliver a choice of low frequency with extremely high efficiency, or high frequency for small form factor solutions whose switching frequency is outside the AM band. The AP64351Q and AP64352Q have programmable soft-start, which reduces in-rush currents, while the AP64350Q and AP64351Q have external compensation to optimize loop response. Read more: 40V SYNCHRONOUS BUCK CONVERTERS FROM DIODES DELIVER HIGH EFFICIENCY WITH LOW EMI ### 650 V HALF-BRIDGE SOI DRIVER FAMILIES WITH INTEGRATED BOOTSTRAP DIODES OFFERS SUPERIOR ROBUSTNESS Infineon Technologies AG broadens its EiceDRIVER™ portfolio with the 650 V half-bridge gate drivers based on Infineon’s unique silicon on insulator (SOI) technology. The products provide leading negative transient voltage immunity, monolithic integration of a real bootstrap diode, and superior latch-up immunity for MOSFET and IGBT based inverter applications. These unique features enable more robust and reliable designs at reduced BOM cost. The high output current family 2ED218x is tailored for high frequency applications like induction cooking, air conditioning compressors, SMPS, and UPS. The low output current family 2ED210x is targeting home appliances, power tools, motor control and drives, fans and pumps. 2ED218x is the 2.5 A high current EiceDRIVER family, while 2ED210x is the 0.7 A low current family. They include variants with shutdown functionality and separate logic and power ground. The integrated bootstrap diode offers ultra-fast reverse recovery with a typical 30 Ω on-resistance. A negative VS immunity of -100 V with repetitive 300 ns wide pulses provides superior robustness and reliable operation. Additionally, integrated dead-time with cross-conduction logic and independent under-voltage lockout (UVLO) for high and low side voltage supplies support safe operation. The propagation delay of the gate driver family amounts to 200 ns. Features Operating voltages (VS node) up to +650V Negative VS transient immunity of 100V Integrated ultra-fast, low resistance bootstrap diode, lower the BOM cost High and low voltage pins separated for maximum creepage and clearance Separate logic and power ground Floating channel designed for bootstrap operation Maximum supply voltage of 25V Independent under voltage lockout (UVLO) for both channels 200ns propagation delay HIN, LIN input logic Logic Operational up to –11V on VS Pin Negative Voltage Tolerance On Inputs of –5V The floating channel can be used to drive an N-channel MOSFET, SiC MOSFET or IGBT in the high side configuration Read more: 650 V HALF-BRIDGE SOI DRIVER FAMILIES WITH INTEGRATED BOOTSTRAP DIODES OFFERS SUPERIOR ROBUSTNESS ### 3D MAGNETIC FIELD SENSOR ALLOWS THE SELECTABLE MEASUREMENT OF X, Y, AND Z MAGNETIC FIELDS The Belgium-based global supplier of micro-electronic semiconductor solutions, Melexis has announced the MLX90395 Triaxis Magnetometer Node, an automotive-grade (AEC-Q100) monolithic sensor that uses the Hall effect to provide contactless 3D sensing in three dimensions. The dual-die version of the MLX90395 provides redundancy for demanding scenarios, such as gear lever position sensing in automotive applications. The functionality of the MLX90395 is defined through the system processor, rather than hardwired into the device itself. In terms of its applicability to position sensing, it has practically unlimited scope. The MLX90395 offers both I2C and SPI interfaces, making it simple to integrate into an automotive or industrial control environment. Both medium-field (50 mT) and high-field (120 mT) versions are available in three package options: SOIC-8, TSSOP-16 (dual-die for redundancy) and QFN-16 (with wettable flanks). All package options are qualified to AEC-Q100 covering the extended temperature range for -40°C to +125°C and are RoHS compliant. The selectable digital output provides 16-bit resolution for X, Y and Z magnetic field measurements, enabling the host processor, DSP, microcontroller or digital signal controller to decode the absolute position of any magnet as it passes the sensor. The MLX90395 is smaller and more power-efficient than alternative Hall effect sensors, thanks in large part to Melexis’ Triaxis technology. Read more: 3D MAGNETIC FIELD SENSOR ALLOWS THE SELECTABLE MEASUREMENT OF X, Y, AND Z MAGNETIC FIELDS ### Sound Localization using Arduino In theory, it is quite simple to perform sound localization by measuring the phase difference of signals received by two microphones that are far apart in space. The devil is always in the details. I have not come across any project made for Arduino like this before, and I am wondering if it is even possible. In short, I want to introduce my project that answers this question with a resounding YES! I want to emphasize that the project is based on phase delay, not TDOA. Results of measurements indicate that the current version of the software has a minimum detectable phase offset of 1 degree, as shown in both copies of the source code linked below, which differ only in filtering techniques. This provides incredible specific clarity. An instance is a 10 kHz sound wave, with a 34-millimeter length in the air, divided by 360 degrees to give roughly 0.1 millimeters per degree of phase shift. Certainly, the further an object moves from the microphones, the less accurate the measurements will be. The crucial aspect is the ratio of the distance to the object compared to the distance between the two microphones (base). The device shown in the video has a base of 65 millimeters and is able to accurately detect location along a horizontal line with a precision of 1 meter up to a distance of 650 meters. In theory. Additionally, the amount of electronic components does not vary significantly from those I utilized in my last blog post. When you compare the two drawings, you will see that only 4 resistors and 4 electret microphones were included. The entire setup consists of only a small number of capacitors, 9 resistors, a single integrated circuit, and microphones. To be honest, when I wrote a remix of the oscilloscope, I was experimenting with the analog inputs of an Arduino. My goal was to eventually use it along with electret microphones in future projects, such as sound pressure measurements, voice recognition, or something amusing in the "Color Music / Tears of Rainbow" series. What they refer to as a "pilot" project? When utilizing 4 channels (specifically settings 7, 8, and 9 Time/Div) for fast rate sampling, the simplest oscilloscope encounters some issues, as previously mentioned. In order to address this, I have slightly decreased the sampling rate to 40 kHz. audio mic audio mic light dscf0145 dscf0146 dscf0148 power motors Note: *The same applies to Arduino Leonardo in all of the above cases. The hardware and software requirements vary for arduino boards depending on the different chips used, and must feature pre-amplifiers with AtMega328 microcontroller. Another crucial point to note in this brief introduction is the utilization of the FFT algorithm for phase calculation. Arduino can not only track a flying object in 3D space, but it can also differentiate the object based on its spectral characteristics of the emitted sound. It can identify whether it's an aircraft or helicopter, determine the type/model, and even distinguish between male and female insects. SOFTWARE As I say above, I choose 40 kHz for sampling rate, which is a good compromise between accuracy of the readings  and maximum audio frequency, that Localizator could hear. Getting signals from two mic’s simultaneously, upper limits for audio data is 10 kHz. No real-time, “conveyor belt” include 4 major separate stages: sampling X dimension, two mic’s (interleaving); FFT phase calculation delay time extracting sampling Y dimension, two mic’s; FFT phase calculation delay time extracting 4 mic’s split in 2 groups for X and Y coordinate consequently. Picking up 4 mic’s simultaneously is possible, but would reduce audio range down to 5 kHz, so I decided to process two dimension (horizontal and vertical planes)  separately, in series. Removing vertical tracking from the code, if it’s not necessary, would increase speed and accuracy in leftover plane. I’d refer you for description of the first and second stages to other blogs, FFT was brought w/o any modification at all. Essential and most important part of this project, stages 3 and 4. Phase Calculation (3). I am not skilled at teaching mathematical concepts, so it is recommended to find another source for a tutorial on the topic. The heart of the process is the arctangent function. This link contains information about several cycles. In just two words – too sluggish. Look Up Tables, known as LUTs, are the optimal choice for non-floating point microprocessors to efficiently perform intricate mathematical calculations at high speeds with a decent level of accuracy. The limitation of LUT is its small size, so it may be stored in FLASH memory, which is also restricted in the next stage. This is how I approached the "resource management" aspect: 1 kWords (16-bit integers, 2 kBytes), 32 x 32 (5 x 5 bits) LUT, increased to 512 for improved "integer" precision. A few values in the upper-right corner have merged because their variations are less than "1" (not visible in the picture on the right). The least favorable resolution is found in the upper-left corner, where the granularity has reached 256, or half of the dynamic range is deemed unacceptable. In order to avoid this corner, I installed a "Rainbow Noise Canceler" that includes a single line with an "IF" statement to disqualify any BIN with FFT magnitude under 256. IF (((sina * sina) + (cosina * cosina)) < 256) phase = -1; I named it "Rainbow" due to its shape, where the "red line" is an arc that stretches from 16 on the top line to 16 on the left side. Additionally, the "Gain Reset" setting, originally 6 bits for an FFT size of 128, was decreased to 5 bits to improve sensitivity. These two configurations, 5-bit and 3.5 bit magnitude (256) constraint, establish a "threshold" for faint spectral peaks. Essentially, the adjustment of both values can vary in different ratios based on the application. There are two types of tracking techniques, one with microphones installed on a moving platform and the other with stationary microphones. The first one is slightly simpler to comprehend and construct, it measures the relative direction to the sound source. This is what I have accomplished. When the laser pointer (or filming camera) is moving by itself, the stationary microphone's method needs to determine the exact direction of the sound source and must involve step #5 - calculating the angle using the known delay time. Mathematics is quite straightforward, using the arccsine function, and at this stage of the program, only one calculation every few frames would be required, so floating point mathematics would not be a problem. No Look-Up Table (LUT) will be used, no scaling, and no rounding or truncation will be performed. All you require is a basic understanding of elementary school geometry. Delay Time Extraction (4). Phase difference is generated by subtracting the phase value of one "qualified" microphone's data pull from another. To convert phase difference to delay time, the BIN number is divided. We will name this process "Denominator" operation. The denomination is crucial as all data, regardless of wavelength variations in each bin, will be grouped and processed together after this step. There is a simple formula that relates frequency and wavelength: Wavelength = Velocity / Frequency, with the velocity being the speed of sound wave in the air (340 m/sec at room temperature). The constant distance between two microphones causes sound waves with varying wavelengths (frequencies) to have different phase offsets, which then become proportional through calculation. (WikiPedia would definitely provide a clearer explanation, but remember, I am a Magician, not a mathematician). The initial image on the right side displays the correction for "Nuisance 3: Incorrect arctan." In the code concerning stage #3, there are two "IF" statements. The second image illustrates the need for an additional correction in stage #4. When subtracting one arctan function from another, a rectangular "pulse" is generated when one function changes sign while the other (delayed version) does not. (Difference in correction shown in violet line) There is no abnormality in the light blue line (DIFF(B)). Math is easy, just two lines with the same "IF" statements, only this time with constants that are twice as big. 2048 on my scale is equivalent to 2 times PI, 1024 is equal to PI, and 512 is equal to PI divided by 2. Arduino features a single ADC, resulting in a fixed delay of one sampling period ( T = 1/40 kHz = 25 microseconds), which must also be accounted for (either subtracted or added, depending on how you assign input 1 and 2 - left / right side microphone). Filtering. In order to combat reverberation and noise, I opt for a Low Pass Filter, which I would refer to as a "Rolling Filter" in this context. My investigation on standard LPF has revealed that this category of filters is not suitable at all for this kind of data because they are highly prone to "spikes", or sudden increases in magnitude level. When the system receives consistent readings from 2-3 test frequencies at low levels, averaging the results can be disrupted by a single spike of +2000 during the next 60-100 frames. The Median Filter effectively removes abrupt spikes, yet it significantly consumes CPU resources due to its use of the "sort" algorithm every time a new sample is added to the data set. With 64 frequencies and filter kernel set at 5 – 8 samples, Arduino would be overwhelmed sorting at nearly 40 ksps. Processing all frequency data at once and sorting a single array of 64 elements is still a very time-consuming task. After some contemplation, I reached the conclusion that the "Rolling Filter" is nearly as effective as Median, but instead of needing to be sorted, it only requires 1 additional operation! In the long term, the output value will gradually move towards and stabilize around the center of the pull. ( Experiment with this in LibreOffice. ) By changing the "step" of the "Rolling Filter," you can easily control responsiveness, a task that is nearly impossible with Median Filters. Tasks include adapting filters and making real-time adjustments based on the quality of input data. Source: Sound Localization using Arduino ### Arduino Starter Kit Multi-language Introduction The Arduino platform has lowered the entry barrier for physical computing and IoT development. However, learning to code is also key. The Arduino Starter Kit Multi-language addresses this with an all-in-one solution for exploring Arduino through multiple programming languages. Included Hardware The kit includes an Arduino Uno, breadboard, jumper wires, LEDs, resistors, and buttons for hands-on learning. Choosing the reliable Uno allows for focusing on coding without complex hardware specifics. This standardized assortment establishes a consistent foundation for users. A Multi-Faceted Approach to Programming Rather than a single language, example code, and instructions are divided into sections for C/C++, Python, and JavaScript used with Arduino. Exposing learners to options side-by-side broadens their skills and sparks more engagement through variety. Each language deserves attention to detail. C/C++ Fundamentals for Arduino The C/C++ portion covers Arduino-specific functions, data types, and structures. It also explains how to use Arduino IDE for editing, compiling, and uploading code to Uno, establishing best practices for Arduino development. Python and JavaScript Integration Other sections delve into language-specifics like Python libraries for Arduino integration or JavaScript coding workflows. This comprehensive treatment equips users well regardless of which language they pursue primarily. All-in-One Development Environment Housing tutorials, code snippets, and blank project space on an included SD card empower learning anywhere without installation hassles. Users can keep their work organized conveniently in one portable location. Building Interactive Circuits Examples range from LED blinks to responsive inputs like buttons and sensors. Hands-on circuitry reinforces coding principles with tangible feedback. This inspires greater understanding through engaged problem-solving. Continued Learning Beyond Basics With learners armed with diverse skills, they can join the vast Arduino community online. Resources guide the exploration of more boards, shields, and language capabilities. Conclusion Through a multifaceted yet accessible approach, the Arduino Starter Kit Multi-language successfully introduces physical computing fundamentals. Users gain the basis to create with Arduino, backed by the project’s thorough yet beginner-friendly design. It establishes an engaging onramp into the exciting world of coding hardware. FAQ What programming languages does the kit cover? The kit introduces three common languages used with Arduino: C/C++, Python, and JavaScript. The included learning materials have separate sections dedicated to each language. Do I need to know how to code already? No prior coding experience is required. The project is designed for complete beginners and will teach you the fundamentals of each language from scratch through clear instructions and example projects. What hardware is included? It has an Arduino Uno board, Breadboard, Jumper wires, LED, Resistor, and Buttons are all the necessary things required to compile the example circuits and work on interactive projects. How do I access and install the software? The Arduino IDE, example code libraries, and your own saved projects are all housed on an included SD card. You can simply insert the card into any computer and start coding right away without any downloads required. Can I continue learning beyond the basics? Absolutely. The kit provides a strong foundation in multiple languages that you can build upon through the extensive online Arduino community. You'll have the skills to explore more advanced boards, shields, and capabilities. What kind of projects will I make? Examples range from simple LED blinking to responsive circuits incorporating buttons, sensors and actuators. You'll gain experience pairing hardware and coding concepts through interactive hands-on builds. Is the kit compatible with other Arduino boards? While the Uno is included, the coding skills and principles taught apply universally to all Arduino boards. You'll be prepared to continue your learning journey with any Arduino development board. ### SITWAY You are never to old to learn and try new things. I think one of the best days in my life was the day I discovered the Instructables web site. It opened up a whole new world to me. This is my third instructable . I really enjoy building anything that I can ride on or get in to. I bought an Arduino Uno and was planning on building a balancing Robot. I was really impressed with the Balancing Skate Board that was published by Xenon John. It had most of the code that I would need to build a balancing something. That something evolved from a Robot to a Sit Down Segway clone, which I named the SITWAY. I want to at this time thank John for all the help and patience he showed me in building and testing this ible. This is my second project involving a discarded electric wheel chair. The motors have great torque and are very reliable. They use 24 volts and have great range using two U1 type garden tractor batteries. You can't go any cheaper than that. The build went pretty smoothly. Thankfully Xenon John pitched in and helped me modify his code to work with my wheel chair motors. After running all the tests I felt were needed I elected to have a young neighbor take the first ride. It turned out to be a real blast. So far eight or ten people have ridden it, the youngest being 12, and the oldest 81 (me). The training wheels limit the speed by limiting the forward tilt. I plan to keep the rear training wheels on permanently because I don't need a lot o speed going backwards. The SITWAY appears to be pretty safe, but it does not have all the built in backup systems that a real Segway has, I have only tested it on my smooth driveway at this time. I have driven over small objects, and it still stayed stable. Any one can learn to drive it in about 5 or10 minutes. With all the testing and driving we have done I have yet had to charge the batteries. The original wheel chair had a published range of 20 miles.. HAVE FUN!!! Step 1: MATERIALS AND COSTS Item                                                                        Source                                                                                         Cost1. Donor electric wheelchair                                  Various places                                                   $50 to $200 Depending on condition 2. Arduino Uno                                                      Maker Store                                                       $30 3. Arduino Uno Proto-shield                                  Spark Fun                                                         $15 4. 5 degrees of freedom  IMU                                Spark Fun                                                         $49 5. Sabertooth 2X25                                               Dimension Engineering                                     $129 6. Two surface mount LED's                                  Radio Shack                                                     $1.29 7. Two Momentary contact switch's  (trim)             Radio Shack                                                      $1.29 (normally open) 8. Two micro switches for Steering                        Radio Shack                                                      $3 (normally open) 9. Single pole single throw  power switch             Radio Shack                                                      $1 10 13X20X1/4" plate for base                                Local                                                                 $10 11. 1/2" steel tubing for seat frame                        Local                                                                 $10 12. Vinyl and foam for seat                                    Local                                                                 $4 13. Asst hook up wire                                             Local                                                                 $3 14. One can spray paint                                         Local                                                                 $3 Total                                                                                                                                                 $309 to $459(note) I actually bought my used wheelchair for $35 at a yard sale It was pretty beat up but the motors were good and even included A 24 volt charger. My project cost less than $300. Step 2: Salvaging parts from the donor wheelchair Save the motors and drive wheels, they are usually one piece. Also salvage the connectors and wiring from the motors to the battery., leave the leads as long as possible. Keep the electronics if you want them for future use. Mine were trash. I never throw away wheels, they always come in handy. Most wheelchairs have two castoring wheels for steering, and two for stability when getting on the chair. Save the two stability wheels for training wheels on the project. Save the battery box and battery cover, you will use these. Dis-card the rest of the chair unless you think you will have use for it in the future. I threw most of it out to reduce clutter. Step 3: Build the frame and mount the wheels and motors I guess you could make this frame out of plywood, but I like to use steel. it's a lot stronger and welding is a lot of fun. The base is a 1/2" plate measuring 12X20". The uprights and seat frame is made of 1" steel tubing. Don't forget the 45 deg. braces in the corners. the four holes in the seat braces are for mounting the plywood seat support. The holes for mounting the motors are slotted about 6" long . At this point you do not exactly know where the C.G. will be. The motors can be adjusted fore and aft to adjust the C.G. The small wheels are used as training wheels and to keep the machine from falling over when not in use. Now is a good time to paint the frame You can make the frame any size you want. I designed this one to fit through an interior door. Cut the seat from 3/4" plywood . Pad and upholster a seat cushion to be bolted to the frame uprights. Step 4: STEERING CONTROLLER I originally used John's hand held steering controller, but found it was not practical for a sit down balancing machine. You need something  very rigid to hang onto when riding. The machine does a good job of balancing if you don't fight it by trying  to balance it your self.. The stick is rigid in the fore and aft position , and will move side to side in the lateral position. a compression spring centers the stick. Two set screws provide stops, and two more act as limit switches for the two micro switches that control the steering. This could be done simpler by mounting the micro switched on the outside of the stick, but I wanted to have them hidden inside the stick. I have access to a vertical mill and I never miss a chance to use it.  The micro switches are available from Radio Shack for 3 or 4 dollars.The adjustable front training wheel serves two purposes. first it keeps you from pitching forward during any sudden stops, and secondly it limits the forward speed by limiting the pitch angle until you get comfortable with riding it. The rear wheel is fixed limiting reverse travel to a safe speed. Step 5: ELECTRONICS The electronics consist of the following Arduino Uno Shield Sabertooth 2X25 5 Degree's of freedom IMU Asst. LED's and switches 10K pull down resistors (5) 4 conductor cable and hook up wireI don't like to solder directly to my Arduino. Instead I used a shield. This allows me to make solid solder connections instead of plugs that can come loose due to handling or vibrations.A good place to begin is to solder the (5) 10k resisters to the shield. These are the pull down resisters for the balance trim, steering, and dead man circuits. (Note) The following wires are connected to the Arduino digital pins pin 9 is for the dead man switch circuit pin 7 is for nose down trim  circuit pin 6 is for  nose up trim circuit pin 5 is for steer left circuit pin 4 is for steer right circuit The other end of the resisters goes to circuit ground pin 13 connects to the S1 input of the Sabertooth Motor Controller The following wires are connected to the Arduino Analog pins pin 0 to Y Rate 4.5 on the IMU pin 2 to X Rate on the IMU pin 3 to Y Rate on the IMU pin 4 to ZACC un the IMU +5 volts to he Steering controller +3.3 volts to the IMU (NOTE) do NOT apply 5 volts to the IMU GND to the IMU All the Analog connections can be soldered directly to the shield. The Digital connections can be made either by plugging directly into the headers or using a connecter. I found some in the Sparkfun catalog that fit snugly into the headers (See above pic) I found some four conductor ribbon cable at Radio Shack that worked well for me. It is stiff enough to hold it's shape, and the color coding makes life easier. You can use ribbon cable from an old computer just as well except for the color coding . Mount the IMU to a small block either wood or phenolic to the floor of the machine at approximately the center line of the axles. Be sure to mount it correctly. The factory drilled mounting hole must be pointed towards the ground The component side of the IMU must face forward If you mount the IMU incorrectly bad things will happen. The plate can be shimmed fore and aft to adjust for level balance Fashion an aluminum plate to hold the power switch, and the trim and steer switches and mount it to be reached conveniently  while seated. I installed a power indicator LED (with a Pull down resister)  to verify Arduino power (12 volts) Step 6: WIRING Generally wheelchairs operate on 24 VDC.. Main power is obtained from two U1 type lead acid batteries. They are used in lawn mower or lawn tractors. They are cheap ($40) and easy to get . There are four voltages used in this project 24 VDC for the motors 12VDC for the Arduino Uno 5 VDC for the steering and trim circuits 3.3 VDC for the IMU 24 VDC is connected to the Sabertooth 2X25 . A power switch is installed in the negative leg. Be VERY  careful to maintain the correct polarity. The Sabertooth will be permanently damaged if you hook it up with the wrong polarity. The warranty will also be voided. The 12 VDC is obtained with a tap between the two batteries terminated with a plug for the Arduino power input. Do not use the USB circuit as a power source, strange things happen to the gyro when you use the USB for power. The 5VDC and 3.3VDC is obtained from the Arduino Uno. A 5 volt source  powers  the dead man, left and right turning, and both trim switches. 3.3 volts from the Arduino powers the IMU Bolt the Sabertooth, the IMU mounted to a block, and the Arduino Uno and it's shield to the floor of the frame Connect the motors to the Sabertooth. The left motor connects.  to M1A and M1B. The right motor to M2A and M2B. S1 on the Sabertooth connects to Arduino pin 13. Connect Sabertooth ground to Arduino ground. This completes the Sabertooth wiring for now. These connections will be verified during the Motor test procedure a little later. Be sure and set the Sabertooth DIP switches for Simplified Serial operation. Set switches 1,3,5, and6 to the on position Switches 2, and 4 are set to the off position. These settings support using lead acid batteries. Route the five wires from Digital pins 4,5,,and 9 plus a 5 VDC source to the steering handle. Connect the 5 volts to one side of the two momentary on steering switches and to one side of the dead man switch. Connect the other side of the switches to the wires coming from Arduino pins 4, 5, and 9. Route the wires from Arduino pins 6, and 7 to the little plate with the trim switches. Connect one side to 5 VDC and the other to Arduino pins 6, and 7.Route the wires from the main power switch to this plate and attach them to a 40 amp SPST switch. Install a surface mounted LED indicator and power it with 5VDC to ground through a 10k resistor. Install the batteries using the battery box or covers you salvaged from the wheelchair and this pretty much completes the basic construction of the project.. If you saved the charging plug from the wheel chair, install it in a handy place and wire it up to the 24 VDC source. Pad and upholster a seat cushion to be bolted to the frame uprights.   For more detail: SITWAY   ### Arduino Weight Measurement using Load Cell and HX711 Module Today, we will be measuring weight by connecting a Load Cell and HX711 Weight Sensor with Arduino. Weight machines can be found in various stores, and they show the weight when an item is placed on the weighing platform. Thus, we are constructing a weighing device with Arduino and load cells capable of measuring up to 40kg. The Load cell of higher capacity can increase the limit even more. Required Components: Arduino Uno assemblage Load sensor (40kg) HX711 Load Cell Amplification Module LCD with a size of 16 by 2. Linking cables Cable for connecting via USB Prototyping platform for electronic circuits. Nuts, screws, structure, and foundation Load Cell and HX711 Weight Sensor Module: A load cell is a sensor that converts force or pressure into an electrical signal. The size of the electrical output is directly related to the amount of force applied. Load cells contain strain gauges that bend when pressure is exerted on them. The strain gauge produces an electrical signal when deformed due to a change in its resistance. Typically, a load cell is made up of four strain gauges arranged in a Wheatstone bridge setup. Load cells are available in different capacities such as 5kg, 10kg, 100kg, and others; in this case, we are using a load cell that can measure up to 40kg. Now the electrical signals generated by Load cell is in few millivolts, so they need to be further amplify by some amplifier and hence HX711 Weighing Sensor comes into picture. HX711 Weighing Sensor Module has HX711 chip, which is a 24 high precision A/D converter (Analog to digital converter). HX711 has two analog input channels and we can get gain up to128 by programming these channels. So HX711 module amplifies the low electric output of Load cells and then this amplified & digitally converted signal is fed into the Arduino to derive the weight. The load cell is linked to the HX711 Load Cell Amplifier using four wires. The Red, Black, White, and Green/Blue wires are these four wires. Colors of wires may differ slightly between modules. Underneath are the specifics of the connection and a visual representation. The E+ terminal is where the RED Wire is attached. The E- terminal is where the BLACK Wire is connected. The wire that is white is connected to A-. The A+ terminal is connected to the GREEN Wire. Fixing Load Cell with Platform and Base: You may choose to skip this step by placing the weights directly on the Load cell without a Platform and simply clamping it without securing it to a base. However, it is recommended to use a platform for placing larger items and securing it on a base to ensure stability. Therefore, we must construct a frame or platform for placing objects in order to measure their weight. A foundation is necessary to attach the load cell on top of it using nuts and bolts. In this case, we utilized a sturdy cardboard for the frame to support items and a wooden board as the bottom surface. Once you connect the components according to the circuit diagram, you are all set to proceed. Circuit Explanation: Connections for this project are easy and the schematic is given below. 16x2 LCD pins RS, EN, d4, d5, d6, and d7 are connected with pin numbers 8, 9, 10, 11, 12, and 13 of Arduino respectively. HX711 Module’s DT and SCK pins are directly connected with Arduino's pins A0 and A1. Load cell connections with the HX711 module are already explained earlier and also shown in the below circuit diagram. Working Explanation: The operation method of this Arduino Weight Measurement project is simple. Before we delve into specifics, we need to adjust this system to ensure accurate weight measurement. Upon powering on, the system will initiate automatic calibration. To manually calibrate the device, the user can press the push button. We have developed a function named calibrate() with void return type for calibration purposes, please see the code provided below. To calibrate, look for the LCD display to show when placing a 100 gram weight on the load cell, as illustrated in the picture below. Once the LCD displays "put 100g," place the 100g weight on the load cell and wait. The calibration process will be complete in a few moments. Following calibration, the user can place any weight up to 40kg on the load cell and view the corresponding value in grams on the LCD screen. Arduino was employed to regulate the entire process in this project. The load cell detects the mass and provides a voltage signal to the HX711 Load Amplifier Module. HX711 is a 24-bit analog-to-digital converter that boosts and converts the output from the Load cell digitally. Next, the Arduino receives this increased value. Arduino now processes the HX711 output, converting it into weight in grams and displaying it on an LCD screen. A push-button is employed to calibrate the system. We've created an Arduino program for the entire process, make sure to review the Code and demo Video located at the conclusion of this tutorial. Arduino Weighing Scale Code: The programming aspect of this project may be challenging for those new to coding. For this project, we opted not to utilize any libraries when connecting the HX711 load sensor to Arduino. We have recently adhered to the specifications of HX711 and accompanying documentation. Despite the existence of libraries for this task, you can simply include the library and obtain the weight in just one line of code. Initially, we incorporated a LCD header file and designated the pins for the LCD. Also, for push-button. Next, some variables were initialized for the purpose of calculation. #include LiquidCrystal lcd(8, 9, 10, 11, 12, 13); #define DT A0 #define SCK A1 #define sw 2 long sample=0; float val=0; long count=0; After it, we have created the below function for reading data from the HX711 module and return its output. unsigned long readCount(void) { unsigned long Count; unsigned char i; pinMode(DT, OUTPUT); digitalWrite(DT,HIGH); digitalWrite(SCK,LOW); Count=0; pinMode(DT, INPUT); while(digitalRead(DT)); for (i=0;i<24;i++) { digitalWrite(SCK,HIGH); Count=Count<<1; digitalWrite(SCK,LOW); if(digitalRead(DT)) Count++; } digitalWrite(SCK,HIGH); Count=Count^0x800000; digitalWrite(SCK,LOW); return(Count); } After it, we have initialized LCD and give directions to input and output pins in void setup(). void setup() { Serial.begin(9600); pinMode(SCK, OUTPUT); pinMode(sw, INPUT_PULLUP); lcd.begin(16, 2); lcd.print(" Weight "); lcd.setCursor(0,1); lcd.print(" Measurement "); delay(1000); lcd.clear(); calibrate(); } Next in void loop() function, we have read data from HX711 module and converted this data into weight (grams) and sent it to the LCD. void loop() { count= readCount(); int w=(((count-sample)/val)-2*((count-sample)/val)); Serial.print("weight:"); Serial.print((int)w); Serial.println("g"); lcd.setCursor(0,0); lcd.print("Weight "); lcd.setCursor(0,1); lcd.print(w); lcd.print("g "); if(digitalRead(sw)==0) { val=0; sample=0; w=0; count=0; calibrate(); } } Before this, we have created a calibration function in which we have calibrated the system by placing the 100gm weight over the Load cell. void calibrate() { lcd.clear(); lcd.print("Calibrating..."); lcd.setCursor(0,1); lcd.print("Please Wait..."); for(int i=0;i<100;i++) { count=readCount(); sample+=count; Serial.println(count); } ..... .... ..... ..... So here we have learned the basic Interfacing of Load cell and HX11 Weight Sensor with Arduino to measure the weights. In our text tutorials, we will create some applications based on weight measurement like Smart container, Automatic gate etc. Code #include LiquidCrystal lcd(8, 9, 10, 11, 12, 13); #define DT A0 #define SCK A1 #define sw 2 long sample=0; float val=0; long count=0; unsigned long readCount(void) { unsigned long Count; unsigned char i; pinMode(DT, OUTPUT); digitalWrite(DT,HIGH); digitalWrite(SCK,LOW); Count=0; pinMode(DT, INPUT); while(digitalRead(DT)); for (i=0;i<24;i++) { digitalWrite(SCK,HIGH); Count=Count<<1; digitalWrite(SCK,LOW); if(digitalRead(DT)) Count++; } digitalWrite(SCK,HIGH); Count=Count^0x800000; digitalWrite(SCK,LOW); return(Count); } void setup() { Serial.begin(9600); pinMode(SCK, OUTPUT); pinMode(sw, INPUT_PULLUP); lcd.begin(16, 2); lcd.print("    Weight "); lcd.setCursor(0,1); lcd.print(" Measurement "); delay(1000); lcd.clear(); calibrate(); } void loop() { count= readCount(); int w=(((count-sample)/val)-2*((count-sample)/val)); Serial.print("weight:"); Serial.print((int)w); Serial.println("g"); lcd.setCursor(0,0); lcd.print("Weight            "); lcd.setCursor(0,1); lcd.print(w); lcd.print("g             "); if(digitalRead(sw)==0) { val=0; sample=0; w=0; count=0; calibrate(); } } void calibrate() { lcd.clear(); lcd.print("Calibrating..."); lcd.setCursor(0,1); lcd.print("Please Wait..."); for(int i=0;i<100;i++) { count=readCount(); sample+=count; Serial.println(count); } sample/=100; Serial.print("Avg:"); Serial.println(sample); lcd.clear(); lcd.print("Put 100g & wait"); count=0; while(count<1000) { count=readCount(); count=sample-count; Serial.println(count); } lcd.clear(); lcd.print("Please Wait...."); delay(2000); for(int i=0;i<100;i++) { count=readCount(); val+=sample-count; Serial.println(sample-count); } val=val/100.0; val=val/100.0;        // put here your calibrating weight lcd.clear(); } Video Read More:  Arduino Weight Measurement using Load Cell and HX711 Module ### The Nerd Help keep your IoT pet alive via the Internet! Story If you had an IoT pet, what would it eat? WiFi SSIDs, of course! The Nerd is a wireless electronic pet that survives by collecting WiFi SSIDs along with some rest and sunlight. In order for it to thrive, you must balance offline and online mode with light and darkness to ensure that it has a proper daily eat-sleep-Nerd routine. If it is out of WiFi for too long, it will communicate an SOS in Morse code using its built-in piezo speaker. The longer it is offline, the more it will beep. In a Nutshell The Nerd will wake up each half hour to scan the networks around it. If it detects new networks, it will store them and go back to sleep in low power mode (to save battery life). Otherwise it will complain by making noise with the buzzer until you either feed it or put it in the dark. It will also understand when it's at home by connecting to your wifi network. When at home the Nerd will be able to connect to internet and get the current time and date. If not fed for more than two days, it will die dramatically, making a lot of noise. Components RGB LED Phototransistor Buzzer Battery 220 Ohm resistor Learning Goals Managing full WiFi functionalities Storing data in Flash Memory Managing time and Real Time Clock Managing Low Power mode Want to Know More? This tutorial is part of a series of experiments that familiarise you with the MKR1000 and IoT. All experiments can be built using the components contained in the MKR IoT Bundle. I Love You Pillow Puzzle Box Pavlov's Cat The Nerd Plant Communicator Set up the Board In order to implement all the functionalities we are going to use the following libraries: WiFi101 // to connect to internet and scan the networks FlashStorage // to save values so that they don't get erased at each reboot RTCZero // to manage time triggered events ArduinoLowPower // to save battery power WiFiUdp // to get the time and date from internet You can download them from the library manager as explained in this guide. Scanning WiFi Networks The Nerd is hungry for networks! Scanning network is pretty easy, just upload this example sketch or go to > examples > WiFi101 > ScanNetworksAdvanced for a more extended version. #include #include void setup() { //Initialize serial and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // scan for existing networks: Serial.println(); Serial.println("Scanning available networks..."); listNetworks(); } void loop() { delay(10000); // scan for existing networks: Serial.println("Scanning available networks..."); listNetworks(); } void listNetworks() { // scan for nearby networks: Serial.println("** Scan Networks **"); int numSsid = WiFi.scanNetworks(); if (numSsid == -1) { Serial.println("Couldn't get a WiFi connection"); while (true); } // print the list of networks seen: Serial.print("number of available networks: "); Serial.println(numSsid); // print the network number and name for each network found: for (int thisNet = 0; thisNet < numSsid; thisNet++) { Serial.print(thisNet + 1); Serial.print(" SSID: "); Serial.println(WiFi.SSID(thisNet)); Serial.flush(); } Serial.println(); } Store Values in Flash Memory Surely you don't want the Nerd to die each time it goes out of battery! To avoid this behaviour we will save some variables (as the food amount) in the Flash memory so that they can be retrieved even after the board has been turned off and turned on again. You can understand the basic functionalities by using : example > FlashStorage > FlashStoreAndRetrieve We will save the names of the networks so that the Nerd will eat them only once, also we will use the array in which these SSIDs are saved to count the amount of food it ate during the day. Values saved on the Flash memory will survive a reset of the board but not the upload of a new sketch. Each time you upload a new sketch the flash memory will be emptied as well. This sketch will scan the networks and save the SSID in the flash memory. #include #include #include #define MAGIC_NUMBER 0x7423 // arbitrary number to double check the saved SSID #define MaxNet 30 // max amount of network to be saved int PosToBeSaved = 0; // Variable used to navigate the array of networks int daily_amount_of_food = 12; // The amount of food per day needed to survive // Struct of variable to be saved in flash memory typedef struct { int magic; boolean valid[MaxNet]; char SSIDs[MaxNet][100]; } Networks; FlashStorage(my_flash_store, Networks); Networks values; void setup() { Serial.begin(115200); while(!Serial); // wait until the Serial montior has be opened delay(2000); values = my_flash_store.read(); // Read values from flash memory if (values.magic == MAGIC_NUMBER) { // If token is correct print saved networks Serial.println("saved data:"); Serial.println(""); for (int a = 0; a < MaxNet; a++) { if (values.valid[a]) { Serial.println(values.SSIDs[a]); } else { PosToBeSaved = a; } } } } void loop() { // Temporarly save the number of networks int networks_already_saved = PosToBeSaved; getNetwork(); if (PosToBeSaved >= daily_amount_of_food) { Serial.println("Enough food for today"); } delay(5000); } // Feed the Nerd with networks's SSID void getNetwork() { // scan for nearby networks: Serial.println("\n*Scan Networks*\n"); int numSsid = WiFi.scanNetworks(); delay(1000); if (numSsid == -1) { Serial.println("There are no WiFi networks here.."); } else { Serial.print("number of available networks: "); Serial.println(numSsid); // print the network number and name for each network found: for (int thisNet = 0; thisNet < numSsid; thisNet++) { Serial.print("SSID: "); Serial.println(WiFi.SSID(thisNet)); delay(500); char* net = WiFi.SSID(thisNet); bool canBeSaved = true; // check if the network has already been saved for (int a = 0; a < PosToBeSaved ; a++) { if (values.valid[a]) { if (strncmp(net, values.SSIDs[a], 100) == 0 || strnlen(net, 100) == 0) { Serial.println("Not saved"); canBeSaved = false; } } } // Store ssid name if (canBeSaved && PosToBeSaved < MaxNet) { if (strlen(net) + 1 < 100 && strlen(net) > 0) { // check if the SSID name fits 100 bytes memset(values.SSIDs[PosToBeSaved], 0, sizeof(values.SSIDs[PosToBeSaved])); // set all characters to zero memcpy(values.SSIDs[PosToBeSaved], net, strlen(net) + 1); // copy "net" to values.SSDs[thisNet] values.valid[PosToBeSaved] = true; values.magic = MAGIC_NUMBER; my_flash_store.write(values); Serial.println(String(values.SSIDs[PosToBeSaved]) + " saved in position " + String(PosToBeSaved)); PosToBeSaved ++; } else { Serial.println(" network skipped"); } } } } } Note how we defined a maximum amount of networks that can be saved, so to avoid memory space issues: #define MaxNet 30 int PosToBeSaved = 0; has been used to navigate the array in which networks names are saved and to measure the amount of food already eaten. Managing Time We can combine the functionalities of the Real Time Clock (RTC) with the WiFi to get the current time and date and then set the inner clock of the board. In this way we can trigger time based events in a long timeframe without using the millis() function which can be tricky when you have to convert milliseconds into days. We will get the time from a Network Time Protocol (NTP) time server and then set the RTC with it. Note that the time received is in epoch format, which is the amount of seconds since January 1th 1970. Read more: The Nerd   ### VivoGame VivoGame (something like "liveGame" in english) is a funny 2 players game whose goal is hit a target with a automated dart. One player wear a "glasses" that doesn't let him see the target. 3 leds that replace each lens, allow the other one, who see the target, moving the first player's head with a joystick (strange but very funny!). When, for instance, the joystick is moved to the left, a led is turned on in front of the left eye of the player with the glasses. Other leds allow moving up, down and to the right. Upon the glasses, there is a dart launcher automated through a servo motor. Pressing the joystick button, the player can trigger the servo and throw the dart. Step 1: Assembling the Glasses To assembly the glasses you'll need: cardboard, paint, elastic cord, rubber bands, scissors, a servo motor, hot glue and a lot of creativity! With the cardboard, the paint and the scissors, assemble and paint the body of the glasses (Tip: You can use a thin box and adapt it to fit the face). Use the elastic cord to hold the glasses on the head. To assemble the dart launcher, paste the servo motor upon the glasses and use some rubber bands with the ends attached at the glasses' body as a slingshot. Step 2: Assembling the "lens" To assemble the lens, you'll need: 2 styrofoam blocks, 6 leds, 4 resistors (100 ohm) and a five-wires cable (we've used an UTP cable). Attach the leds at the styrofoam blocks as in the illustration and assemble, with the leds and the resistors, the circuit shown in the schematic. Attach each connector (G, L, U, D e R) at a wire of the cable. Step 3: Coding! We've used a DragonBoard 410c and a 96Boards Sensors Mezzanine adapter attached to it. Firstly we have to prepare the DragonBoard for program the Mezzanine (an ATMEGA328p microcontroller). At this link you can find how to configure the board and some examples using the Mezzanine: https://github.com/96boards/Sensor_Mezzanine_Getti... Connect the wires from the leds to the Mezzanine as follow (CONNECTOR, MEZZANINE PORT): (L,4); (R,7); (U,5); (D,6); (G, GND). For the joystick, we've used this module. Connect it to the Mezzanine in this way (MODULE PIN, MEZZANINE PORT): (X, A0); (Y, A1); (GND, GND); (VCC, VCC). At the Dragon board, launch the Arduino IDE, compile the code and download to the Mezzanine. At now, we have a lot of idle fire power with the DragonBoard. We can use it to link the game to a web application. But it is for another instructable. Source: VivoGame ### Sweep Sweeps the shaft of a RC servo motor back and forth across 180 degrees. This example makes use of the Arduino servo library. Hardware Required Arduino Board (1) Servo Motor hook-up wire Circuit Servo motors have three wires: power, ground, and signal. The power wire is typically red, and should be connected to the 5V pin on the Arduino board. The ground wire is typically black or brown and should be connected to a ground pin on the Arduino board. The signal pin is typically yellow, orange or white and should be connected to pin 9 on the Arduino board. images developed using Fritzing. For more circuit examples, see the Fritzing project page Schematic Code // Sweep // by BARRAGAN // This example code is in the public domain. #include Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be created int pos = 0; // variable to store the servo position void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object } For more detail: Sweep ### Old Sole Old Sole interrupts normal youthful days to force young people to interact with their environment in a different way. If the young shoe-wearer takes significantly more steps than the elderly individual with the walker, the shoes light up and vibrate uncomfortably, reminding the young person that somebody on the other end of the old sole is not able to keep up. Limiting the speed of the shoes to the speed of the walker forces the young person to interact with whatever’s there, as someone with mobility issues may have to. This is not meant to be a user-centered product, or particularly useful in any way. Rather, it is meant to make us aware of age, aging and dying as we walk. One day, the wearer of the shoe will be with the walker and will slow down the shoe walker, bringing the Old Sole full circle. Design Process Brainstorming We spent a lot of time brainstorming, trying to build and jump off ideas. Our original idea was to tackle a targeted user group that usually does not benefit from technology. We thought about building attachments for walking sticks for the blind, wheelchairs, and walkers. Eventually, we settled on the idea of the walker. Original ideas around the walker were dark -- we were in the design noir mindset. We considered building motors that inhibited walker movement based on bad signs from the world -- falling stock prices, bad weather, etc. Then, we went on a tangent and explored ideas around a social walker; we imagined a series of walkers networked together so the elderly could meet up or navigate. Ultimately, we combined these two ideas, marrying the social aspect with the design noir to come up with the Old Sole. Hard at work, designing System Architecture The walker records the average amount of fluctuations in the FSR over an interval, as does the shoe with its own FSR. The walker sends POST requests to a server, which here is a DataStream on data.sparkfun.com, with how many steps it has taken in the last time period. The shoes then read the step counts from the server via GET requests. Read More:   Old Sole   ### Flip Flip Intro There is something kind of magical about swimming when you are a child. Do you remember growing up and watching your shadow as you swam in the pool, trying to mimic a perfect dolphin kick and imagining you were a mermaid rather than human?  We all shared these sorts of memories and a few of us decided to create something that enhanced the sense of wonder kids’ get when they play and swim under water. Value Proposition 1. Swimming is a great form of exercise. One of the core objectives of Flip is to help kids to become healthy and competent swimmers. 2. However, another goal of this design is to make kids learn and care about water animals. Traditionally, aquariums have been a way of bringing people, and especially children, closer to sea life. By triggering a sense of wonder and appreciation in visitors, aquariums are an effective way of teaching people about sea-life preservation, and it’s also just really fun to learn about these animals and their habitats. Ideation We saw an opportunity to create a device that not only encouraged children to swim more, but also generated their interest in preserving sea creatures and their habitats through a fun interaction.  We eventually imagined designing a pair of webbed aquatic gloves that would track acceleration.  It would then sync with an educational mobile app in order to generate animal profiles real-time.  Our desire is to promote learning through animal-metrics. In our works-alike glove (see images below), we used simple material like fabric, Velcro and a pre-made fin to mock-up a simple casing that would be easy to work with. Aqua Glove Demonstration Prototype Glove mock-up. But for our actual prototype, we imagined using materials like silicone, which composes the glove and fin, and an elastomer material for the wristband. The wristband houses all the hardware that stimulates the child's magical experience.  It hides everything that doesn't want to be seen.  The screen is the only component that is exposed, which would be waterproofed so children can, of course, swim with the glove. Read More:  Flip   ### DeCart Description DeCart is an attachment to a shopping cart that uses social pressure to make the shopping a more productive, connected experience for society as a whole. List of Materials Although the entire premise of the project is simple, the implementation, however, is not and requires a lot of patience and system building. LCD Display. For us, we used Sparkfun's Basic 16x2 Character LCD - White on Black 5V. See  https://www.sparkfun.com/products/709. 11 x LED lights. One to indicate selfishness (we used red), the other ten to indicate progress bar (we used yellow; colors are up to your discretion). Speaker circuitry and any 8-ohm speaker. Specifically, this breakout board https://www.sparkfun.com/products/11125 and amplifierhttps://www.sparkfun.com/products/11125. Bluetooth Modem - BlueSMIRF module from Sparkfun - https://www.sparkfun.com/products/12582. Materials needed to construct the box. In our case, we used simple wood. Arduino Mega 2560. 1x Piezo drum sensor. Step by Step of our Build Process (Hardware) Step 1: Familiarize yourself with the Circuitry! Test each individual circuit and get a handle of the connections. For example, try turning on the LCD display, controlling the progress bar, flashing the selfish light, etc. Step 2: Construct the Design! See the roughDesign.DXF file. For us, we made our product by laser cutting wood. Step 3: The Interface Components Hot glue all the components that have slits for them! Example: the LCD display, speaker, and the LED lights. Make sure that they fit snugly in and they don't protrude outwards. Step 4: Wire them! Each LED light needs to be connected in series to a 200 ohm resistor and not to mention that all their grounds need to be shared. For the LCD display and speaker, I would recommend using a protoboard. For me, I created a makeshift shield for the Arduino Mega, soldered on the speaker circuitry, and had all wires eventually lead into this board.   Read More:  DeCart   ### BOXZ BOXZ is is an open source robot platform for interactive entertainment! We connected Arduino, Plexiglass(or cardboard) Origami and your idea together, so we can easily and quickly build a remote robot by ourself! You can assembled it like LEGO! We can use it to playing football game, racing, fighting or some other interesting things! Follow the step, I will show you how to build a BOXZ Base Here are the drawing, skin of Mario, Android Client and Arduino code in the Att. Version info: BOXZ Base: Easy and funny, made by cardboard BOXZ Pro: Support more sensor and use plexiglass Size info: The Cube of BOXZ: 128x128x128MM The Skin of BOXZ: 130x130x130MM Some more update: http://letsmakerobots.com/node/34221 Everything you can find it here, include the draw, Arduino code and skin...Have fun! Github https://github.com/leolite/BOXZ [Updating 2012.09.13] And here is the Step by Step how to make a skin http://www.instructables.com/id/BOXZCreeper/ Some of Skins are reference from the web: http://www.cubeecraft.com/ Author: Leo License: Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0 http://creativecommons.org/licenses/by-nc-sa/3.0/ BOXZ base 20120704.pdf237 KB BOXZ_Skin_0001_Mario20120620.zip848 KB BoxzController_20120630.zip2 KB boxz-android-client-1.0.2.rar24 KB boxz-android-client-src.zip25 KB Step 1: What we need? We need a piece of cardboard which thickness is 2MM, some A4 pape and your idea! We also need the following items Electronic Boards 1x Arduino (Seeeduino or  Arduino 328P 2009) 1x Driver Board (ladyada.net) 1x BT board (seeedstudio.com)Mechanical Component and some others 2x Analog Servor TowerProSG90  5V 4x bolts M2x10 8x nuts M22x bearing 623(3*10*4) 2x bolts M3x10 2x nuts M31x battery case 4 x AA(min) or 5 x AA (7.5V DC) 2x bolts M2x30 2x nuts M2 2x TT Reduction Gear 1:48 or higher 2x DC Motor 130, 6V 2x Wheel 65MM 4x bolts M3x30 4x nuts M3 4x Hexagonal pillars M3+6 4x Hexagonal pillars M3x6 4x bolts M3x6 4x Breadboard Cable 5-10CM BTW: some words in the photo is Chinese Step 2: Before start 1/2 At the beginning, let's have a look the structure of BOXZ Totally we have 14 piece parts of board 1x P001 Main support board 1x P002 Front support board 2x P003 Motor support board 2x P004 Wheel side vertical board 2x P005 Wheel covers horizontal board 1x P008 Arduino pallet board 1x P020 Peripheral front board 1x P030 Peripheral back board 2x P041 Peripheral side board [+ servo slot] 1x P050 Peripheral roof board 1Notice: the parts P006 and 007 have been deleted! Step 3: Before start 2/2 Than we should know the I/O define of our Arduino boardBTW: IIC is very usefull for our BOXZ Pro Step 4: Preparing to Cut the cardboard 1. First, we need print the drawing on A4 paper, you can download from Github. or here! The most important things is print with 100%, measure the maximum of the length of the part is 128MM!2. Cut the drawing, left 20MM spare space is better3. Pasted the drawing to cardboard with double-sided adhesive (prefer the width is 5MM) For more detail: BOXZ   ### How to Build a Vibration Motor Circuit This project will demonstrate the process of creating a circuit for a vibration motor. A vibration motor is a motor that will vibrate once it receives enough power. It is a motor that truly vibrates. It is highly effective for making objects vibrate. It has practical applications in various devices. For instance, cell phones are a common item that vibrates when receiving a call in vibration mode. A cellphone is a perfect illustration of an electronic device that includes a vibration motor. Another instance is a rumble pack in a gaming controller that vibrates, mimicking the movements in a game. One option for adding a rumble pack as an accessory is the Nintendo 64 controller, which included rumble packs to simulate gaming actions by vibrating. Another instance could be a toy like a furby that shakes when a person performs actions like petting or squeezing it, etc. Vibration motor circuits possess numerous practical applications that can cater to various needs. It is very easy to cause a vibration motor to vibrate. All that is required of us is to supply the necessary voltage to both terminals. A vibrating motor typically has 2 connectors, most commonly a red wire and a blue wire. Polarity is not relevant for motors. We will utilize a Precision Microdrives vibration motor for our project. The motor requires a power source within the voltage range of 2.5-3.8V to operate. So if we connect 3 volts across its terminal, it will vibrate really well, such as shown below: This is everything required to cause the vibration motor to vibrate. 2 AA batteries connected in series can supply 3 volts. Nevertheless, our goal is to elevate the vibration motor circuit's complexity and have it managed by a microcontroller like the arduino. In this manner, we are able to exert greater dynamic influence on the vibration motor, enabling us to adjust its vibration frequency either on a scheduled basis or in response to specific events. We will demonstrate how to connect this motor to an arduino in order to generate this kind of control. In this project, our goal is to construct the circuit and program it to make the motor vibrate once per minute. Parts Needed Board of Arduino Motor for creating vibrations 1N4001 Rectifying Diode 0.1 microfarad ceramic capacitor 1 kilo-ohm resistor 33 Ohm Resistor 2N2222 is an NPN transistor. USB plug The vibration motor we will use is the shaftless vibration by Precision Microdrives. This can be obtained from Sparkfun at the following link: Sparkfun- Vibration Motor. The part number is ROB-08449. The vibration mechanism and all moving parts are protected within the metallic housing encasing of the motor. For sturdiness and strength, the wires are reinforced and there is a 3M adhesive on its back surface. The motor will vibrate considerably when supplied with 3V. The datasheet for this vibration motor is at the following link: Precision Microdrives Vibration Motor Datasheet. Almost any NPN transistor can be used to provide current amplification. If you do not have a 2N2222 NPN at hand, then substitute it for a 2N3904. Vibration Motor Circuit The vibration motor circuit we will build is shown below: The schematic diagram for this circuit is: When driving a motor with a microcontroller such as the arduino we have here, it is important to connect a diode reverse biased in parallel to the motor. This is also true when driving it with a motor controller or transistor. The diode acts as a surge protector against voltage spikes that the motor may produce. The windings of the motor notoriously produce voltage spikes as it rotates. Without the diode, these voltages could easily destroy your microcontroller, or motor controller IC or zap out a transistor. When simply powering the vibration motor directly with DC voltage, then no diode is necessary, which is why in the simply circuit we have above, we only use a voltage source. The 0.1µF capacitor absorbs voltage spikes produced when the brushes, which are contacts connecting electric current to the motor windings, open and close. The reason we use a transistor (a 2N2222) is because most microcontrollers have relatively weak current outputs, meaning they don't output enough current to drive many different types of electronic devices. To make up for this weak current output, we use a transistor to provide current amplification. This is the purpose of this 2N2222 transistor we are using here. The vibration motor needs about 75mA of current to be driven. The transistor allows this and we can drive the motor. To make sure that too much current does not flow from the output of the transistor, we place a 1KΩ in series with the base of the transistor. This attenuates current to a reasonable amount so that too much current isn't powering the motor. Remember that transistors usually provide about 100 times the amplification to the base current that enters through. If we don't place a resistor at the base or at the output, too much current can be damaging to the motor. The 1KΩ resistor value isn't precise. Any value can be used up to about 5KΩ or so. We connect the output that the transistor will drive to the collector of the transistor. This is the motor as well as all components it needs in parallel with it for protection of the electronic circuitry. Now that you understand why we use all the components which we do, let's go to the code that allows the motor to vibrate every minute. Vibration Motor Code The code that vibrates the motor every minute is shown below: Code to vibrate the motor every minute const int motorPin = 3; void setup() { pinMode(motorPin, OUTPUT); } void loop() { digitalWrite(motorPin, HIGH); delay(1000); digitalWrite(motorPin, LOW); delay(59000); } The following code, again, vibrates the motor every minute for 1 second of a duration of time. The first line of code declares that the motor is connected to arduino pin D3. The second block of code sets the digital pin D3 as output. This output represents the motor. The third block of code turns the motorPin HIGH and delays it 1000ms. This represents the motor turning on for 1 second. The second half of this block then turns the motorPin LOW and delays it 59,000ms. This represents the motor being shut after being on for a second and staying off for 59 seconds. So, in total, the motor turns on every minute for 1 second of time. This is just one type of circuit that can be built. There are many variations which can be done, including the motor shaking when a certain action is done such as noise being detected or motion being detected. With a microcontroller such as an arduino, we have more control. Also note that the 3.3V terminal on some arduinos may supply enough current to power the vibration motor. So you may be able to run this same circuit without the transistor setup. However, if you are powering multiple motors (in parallel), then a transistor may then be absolutely necessary. For more detail: How to Build a Vibration Motor Circuit   ### A Guide to Building Your Own Single-Axis Solar Tracking System Introductions of single axis solar tracker: A commonly favored Arduino project is a solar tracker system that follows the intensity of sunlight. It is divided into two primary categories: the single-axis solar tracker and the dual-axis solar tracker. The solar tracker with only one axis is operated by one motor, enabling movement in two directions. On the other hand, the dual-axis tracker can pivot in four different directions because of its movement in two axes. A Preview image of Single axis solar tracker Greetings everyone, we are Shahid and Adnan welcoming you back to Techatronic. We believe that all of you are in good health. We are delighted to introduce an extremely thrilling project to you today – the Single Axis Solar Tracker project. Normally, solar panels are stationary, constantly oriented towards the sunrise. Nevertheless, this orientation leads to a decrease in the quantity of incoming light. Our exceptional solar tracker, conversely, functions in a different manner. Throughout the afternoon and evening, it adapts to track the movement of the sun, maximizing sunlight exposure and harvesting more solar energy. What is a Single Axis solar tracker? The single-axis solar tracker project serves as a great example of a small-scale electronics project. It has become extremely popular recently. Essentially, this solar tracker system adjusts to the movement of sunlight. By putting this mechanism into place, it maximizes the amount of solar energy captured by solar panels by increasing their exposure to sunlight. This system, which has a solar panel, follows light movement in two dimensions. As the sun rises during the morning, the system adapts accordingly and replicates this motion for the evening's setting. The system tracks the sun's movements to maximize solar power collected by ensuring optimal exposure. Solar panels produce more electricity when exposed to higher levels of sunlight intensity. An LDR sensor is employed in the solar tracker to recognize and adjust to different levels of light intensity. How does it work? Working of single axis solar tracker  The solar tracker system with one axis uses servo motors to move in two directions along a specific axis. When positioned on the x-axis, it travels in both the positive (+x) and negative (-x) directions, usually up to 60 degrees in each direction. This is the process the project follows: The system utilizes a light-dependent resistor (LDR) sensor that changes the resistance of the circuit in response to light. Two LDR sensors are incorporated in the circuit, placed on opposite sides. The motor moves in the direction where the LDR shows decreased resistance. Every LDR sensor consistently sends its data to the Arduino device. Following this, the Arduino processes the data from the LDR sensors and sends instructions to operate the servo motors as needed. PCBWay PCB Prototyping Services The entire circuit is now established on a breadboard. Yet, PCBWay offers Rapid PCB Prototyping tailored for research endeavors due to the inefficiency of breadboard assembly for this specific project. I support PCBWay because they allow you to get your first boards in just 24 hours, helping you start your project quickly. The prototyping stage is essential for both engineers, students, and enthusiasts. PCBWay speeds up your board production while also guaranteeing accuracy and cost-effectiveness. This greatly decreases costs and speeds up the schedule for your electronic project. PCBWay provides a variety of PCB choices, ranging from 2 Layer boards to sophisticated HDI and flex boards. Although the boards have different uses and purposes, I am pleased with their quality, on-time delivery, and affordability. I believe that the information given above gives enough insight into how the single-axis solar tracker project operates. Components Used in Single Axis Solar tracker Definitely! Here is an alternative version of the necessary components: - Arduino Uno board with Atmega328P microcontroller - A pair of Light Dependent Resistors (LDR sensors) - A pair of resistors with a resistance of 10,000 Ohms each - A pair of Servo Motors - Photovoltaic Panel - Cables used for connecting components - A board for holding and connecting electronic components. Circuit Diagram for single axis solar tracker Fritzing is used to create circuit diagrams for a single-axis solar tracker to help with understanding connections. If you face any challenges, do not hesitate to contact us through the comment section for help. Connection Table of single axis solar tracker Arduino UNO Servo Motor D9 Pin Out Pin +5V VCC GND GND Arduino UNO LDR 1 LDR 2 10k ohm Resistor, 2 p A0 Pin Terminal 1 Terminal 1 A0 Pin Terminal 1 Terminal 1 +5V Terminal 2 Terminal 2 GND Terminal 2 Learn How to use Single axis solar tracker using Arduino code // Single axis solar tracker // Techatronic.com #include //including the library of servo motor Servo sg90; int initial_position = 90; int LDR1 = A0; //connect The LDR1 on Pin A0 int LDR2 = A1; //Connect The LDR2 on pin A1 int error = 5; int servopin=9; //You can change servo just makesure its on arduino’s PWM pin void setup() { sg90.attach(servopin); pinMode(LDR1, INPUT); pinMode(LDR2, INPUT); sg90.write(initial_position); //Move servo at 90 degree delay(2000); } void loop() { int R1 = analogRead(LDR1); // read LDR 1 int R2 = analogRead(LDR2); // read LDR 2 int diff1= abs(R1 – R2); int diff2= abs(R2 – R1); if((diff1 <= error) || (diff2 <= error)) { } else { if(R1 > R2) { initial_position = –initial_position; } if(R1 < R2) { initial_position = ++initial_position; } } sg90.write(initial_position); delay(100); } ### DIY SWR and Power Meter Homebrew SWR and power meter To begin with, this SWR meter featured in this article is not completely homemade, as I used the circuit design from the schematic in the highly regarded book Arduino Projects of Amateur Radio. Despite purchasing the book and honoring the authors' copyright, I will still provide my own diagram here. What is the reason? Initially, the design featured in the book is not entirely unique and is inspired by designs found in other sources. An illustration is provided here. Secondly, I made modifications, eliminated some elements, and incorporated new features according to my preferences, resulting in a design that is no longer identical. he setup utilizes two AD8307 log amplifiers, connected to the directional coupler's forward and reflected ports. The AD8307 amplifier provides a voltage of approximately 25mV per decibel of the incoming signal, and this signal is then amplified using an LM324 op-amp. The opamp plays a role in supplying the reference voltage for the Arduino's AREF, ensuring the A/D converters utilize their full range. I utilized the fourth opamp within the quad LM324 for input voltage monitoring. This is the reason why the PCB in the image is equipped with two power jacks. One input leads to one output. In that manner, I am aware of the voltage required for the radio's operation. My main intention is to utilize this device for my Softrock. I designed the schematic and the board in Eagle, then sent the gerbers to Elecrow. I got 10 PCBs in approximately 25 days. The board is not much larger than a standard 20x4 LCD. I opted for using an Arduino nano instead of installing an AVR328 on the circuit and dealing with USB converters. I am happy that I did it. I made a single error on the board though. The Arduino did not receive power from the 5V line. The issue occurred due to a mistake in the Eagle footprint for the Arduino Nano. I recently downloaded the footprint file without verifying its validity. Besides that, it was okay. Another issue was the occurrence of oscillations in the LM324 opamps that were linked to the AD8307. The frequency of the oscillations was approximately 40KHz, with an amplitude of around 400mVpp superimposed on the DC signal. Therefore, calibrating the device was not possible. Desoldering the output capacitors on the LM324 was the solution. I believe they are not necessary for a DC design. This was my initial SMT design, and I am quite satisfied with how it turned out. The SWR and power readings appear to be precise. I employed the Arduino program in the book and made changes to incorporate a bigger screen and additional components. You may observe that the device does not have any buttons. At first, my intention was to utilize a rotary encoder and multiple menus, but as mentioned on the Soldersmoke podcast, menus are designed for eateries. I completely agree. Moreover, it is completely crazy to add various features to the device. This is merely a basic SWR meter. The files are available here, should you be interested. Note that there is an error in the schematic. The Arduino is missing +5V, but it should be easy to fix. Source : DIY SWR and Power Meter ### Arduino simulator using Proteus as project simulation Barebone Arduino in Proteus I use Proteus design a Barebone Arduino: ▲ Barebone Arduino The Barebone Arduino pin completely modeled on the Arduino UNO and Duemilanove: Download Sample ardduino Simulation design file ▲ Arduino UNO I have a bad memory, not remember the the Arduino with ATmega328P between, pin correspondence between the Proteus simulation before Arduino ATmega328P with Arduino pin corresponding figure had often had to check very troublesome. With this Barebone Arduino, you want to simulate Arduino much more convenient. The Barebone Arduino design file ( BareboneArduino.dsn ), under the URL: http://tinyurl.com/3lncep3 Proteus Design Suite Version 8 Proteus 8 was created after more than three years of development with a strong emphasis on integrating the product. It consists of: A fresh application framework allows users to see Proteus modules as tabs within one window or as individual windows through drag and drop, enabling a side-by-side view. A fresh shared database for components allows information to be exchanged between schematic and PCB in order to immediately update data changes in the software. A fresh live netlist allows for immediate updates to the PCB, Bill of Materials, and Design Explorer whenever there are changes to the schematic's connectivity. The latest VSMStudio IDE combines your firmware project with your schematic design, and Active Popups allow you to bring the schematic into your VSMStudio debug session. How to use the Barebone Arduino? Very simple. If you want to use the Digital Output pins connected Actuators, for example, connected to pin 13 on a LED, to do so: If you use the Digital Input pins connected Sensors, for example, pin 2 connected to a Button to do so: If you want to use the Analog Input pins connected Sensors, such as Analog pin 0 (A0) then a variable resistor, then you do so: I included a Virtual Terminal (VT) in my Barebone Arduino, which serves the same purpose as the Serial Monitor in the Arduino IDE. This allows you to monitor and test Serial communication if your program requires it. ▲ In the simulation, point "Debug> Virtual Terminal" to open the Virtual Terminal   For more detail: Arduino simulator using Proteus as project simulation ### Yet Another Daft Punk Coffee Table (5x5 LED Matrix) using arduino Yes, I know this has been done before, but I wanted to build my own, using as few parts as possible.  I built this as a table top or wall mount model, but it can be scaled up to make a coffee table.  I built it as a study for a more ambitious project, which will be an 8x8 RGB coffee table.  In designing this project, I wanted to keep the part count and cost as low as possible, and also to design the software for speed and minimal memory usage. The code I used in the Arduino sketch demonstrates direct port manipulation, which is a fast and powerful alternative to digitalWrite(). Update 3/10/2011 : Finished adding the Music Synchronization section of this Instructable. Update 3/20/2011:  I decided to build Lampduino instead of the coffee table. Note that the flickering in the video below was caused by my video camera. When viewed with the naked eye, no scanning is perceived, and the lights do not flicker. Step 1: Acquire the Parts Parts List 25 LED's - I used warm white 5mm LED's purchased on eBay 5 resistors - I used 100 ohm, but the exact value will depend on what LED's you use. I will explain how to calculate in the Wiring step. NOTE: You may need also need 10 diodes and different resistors, especially if you are using white LED's... please the Troubleshooting section in step 3 for details. Arduino - I used a Duemilanove clone - in Step 7, I switch to a much cheaper alternative. wire white foam board .005" thick matte drafting film - I bought a sheet from a local artist's supply store.  The smallest sheet they had was way more than I needed - 24x36" If you want to implement music synchronization capabilities, you will also need some more parts, as discussed in the Music Synchronization step. Tools Needed hot glue gun mat knife soldering iron solder pliers/wire cutters The LED's I used were point source water clear.  If you don't want to deal with hotspots in your display, diffused would be better.  I had to put blobs of hot glue on mine to diffuse them.  The photo below only shows bits of the foam board, because I forgot to photograph the parts before I started.  The piece I used was about 16x20" to start with. Step 2: Build the Display I used foam board, which was recycled from one of my kids' science fair projects. It is a sandwich of white paper with a foam core, 3/16" thick. The overall size is approximately of our project is approximately 10x10x2".  I cut the parts with a mat knife, and hot glued it together. To make the grid, cut 8 identical 2x10" pieces.  Then cut 4 equally spaced slits into each one.  The slits should be 1" deep,  the same width as the foam board.  Interlock the pieces to create the 5x5 grid. Next, cut a 10x10" piece of foam for the back.  Hot glue it to the 5x5 grid. Cut 2 more 2x10" pieces to form the sides, and glue them on. Finally, cut the 2 (10 3/8)x2" pieces for the top and bottom.  My foam was 3/16" thick, so I had to add 3/8" to the length to make them long enough to cover the sides.  Hot glue them on. Note that in the photo below which includes the top & bottom & sides, the LED's are already installed and wired up.  This is because I didn't attach the top/bottom/sides until I was in the testing phase, but it's easier to deal with if you glue them on earlier in the process. Step 3: Wire it up Cut small diagonal slits in the center of each cell, and insert one LED in each cell. Make sure to orient them the same way in each cell. This will make it less confusing when wiring it up. I laid mine out w/ the flat side (cathode) facing the bottom right corner. Using diagonal slits for the pins makes it easier to wire it up without shorting the wires, since we are going to wire it as a crossbar. While one can use any of the I/O pins on the Arduino, I chose the pins specifically to allow me to use very compact code to turn on the columns. This will be explained in detail later. To drive our 5x5 LED matrix, we directly drive the LED's using 10 digital I/O pins on the Arduino. The anodes are connected to pins.  Some existing designs, such as the one in the Arduino Playground  don't bother to use current limiting resistors.  This is not a good design practice, and can result in burned out LED's, or worse yet, a burned out Arduino.  Each I/O pin on the Arduino can source or sink up to 40mA of current.  The LED's which I used have the following electrical characteristics: Forward Voltage  = 3.2 ~ 3.4V Max Continuous Forward Current = 20mA So if we want to drive the LED's for maximum brightness, we need to target 20mA of current. To calculate the proper resistor value, we use Ohm's Law: R = (Vcc - Vf) / If where R = resistor value in ohms Vcc = supply voltage = 5V for the Arduino Duemilanove Vf = LED forward voltage.  I used the average, 3.3V If = LED current in amperes = .020A Plugging in the values, we get R = (5 - 3.3) / .02 = 85 ohms.  The nearest available standard resistor value is 100 ohms.  Always round up instead of down, because if you round down, you will exceed the maximum allowable current. Notice that we only use 5 resistors.  We don't have to put one at each LED, because we will only be driving one row, a maximum of 5 LED's at a time.  I said above that each I/O pin can drive 40mA of continuous current, so why can't we drive the whole LED array at once?  It's because another constraint is that the total drive current summed up across all the pins can't exceed 200mA.  If we turn on all 25 LED's at once, then 25*20mA = 500mA flow, which is way over spec. So maybe we can turn on 1 row at a time, and scan the rows, like the way a CRT works?   If we turn on a whole row of LED's at once, the current is 20mA * 5 = 100mA.  This, at first, appears to be OK, because each column (anode) pin is only sourcing 20mA, and we're below the Atmega368P's total 200mA current limit.  However, upon more analysis, we can't even drive 5 LED's at once.  Why?  Because the cathodes of all 5 LED's in a row are connected together into a single I/O pin, and we're not allowed to sink more than 40mA per pin.  Therefore, we will write our software so that no more than 2 LED's are turned on at a time, so the row (cathode) pins will sink a maximum of 40mA each.  Now, even though we're at the allowable continuous current limit, it's generally not good practice to run a device at its maximum limits.  However, since we're going to pulse each LED briefly, and let persistence of vision create the illusion that they're all on at once, it's OK. Note:  I tried running mine w/ 5 LED's lit per row for several hours, and it worked fine, but it's always best to design your circuits within specifications, to ensure long term reliability. The circuit diagram is below.  To summarize the connections: LED Columns (anodes) col 0 connects to digital pin 12 (via a 100 ohm resistor) col 1 connects to digital pin 11 (via a 100 ohm resistor) col 2 connects to digital pin 10 (via a 100 ohm resistor) col 3 connects to digital pin 9 (via a 100 ohm resistor) col 4 connects to digital pin 8 (via a 100 ohm resistor) LED Rows (cathodes) row 0 connects to digital pin 7 row 1 connects to digital pin 6 row 2 connects to digital pin 5 row 3 connects to digital pin 4 row 4 connects to digital pin 3 I used simple point to point wiring, fastened with hot melt glue to the back of the display.  I know it's messy looking, but it won't be seen, anyway. Troubleshooting If your matrix doesn't function properly, first, you should double check your wiring.   The sketch also has a testing mode, which cycles through the LED's one by one slowly enough that you can see it.  You can enable it by uncommenting the following line in the sketch: //#define TESTMODE // continuously sequence thru the LED's by removing the leading //. One potential mistake is accidentally swapping the columns and rows.  If your matrix looks like this video http://www.youtube.com/watch?v=JpLgLbWMrWo in TESTMODE, then you've made this error, and need to swap the row and column connections to your Arduino.  Thanks to Instructables user 303_addict for posting the video. If your wiring is correct, and you are getting more than one LED at a time lighting up, you might be one of the unlucky ones who has LED's that have a high leakage current when reverse biased.  White LED's are particulary susceptible to this problem.  If this is the case, you will need to add series blocking diodes on the inputs to all the columns, as well as on all the row outputs.  So you will need 10 diodes.  Any small signal diode will work, such as 1N4001, 1N914, 1N4148, etc.  You will also need to adjust the resistor values, because  two series diodes will add ~1.4V voltage drop.  So in my equation above, use 3.6 for VCC.  For my 3.3V LED's you end up with R = (5-1.4-3.3V)/20mA = 15 ohms.  I didn't have any 15 ohm resistors handy, so I substituted 10 ohms instead, and using an ammeter, measured 19.5mA .. still within spec.  See the last attached image. Step 4: Diffusing the LED's I used point source LED's, because that's what I had in my parts bin.  This caused hot spots in the display.  If you like it that way, you don't have modify them.  I wanted more even lighting. The two most common ways of converting point source LED's to diffused is to either sand them or just encase them in hot melt glue.  I decided to use hot melt glue.  Just put a big blob of hot glue on each LED.  I found that it looks more even if you can keep the glue blob smooth.  The shape doesn't have to be perfectly round, but if you apply it in layers, the edges between the layers tend to cause variations in the brightness.  In the photo below, the LED in the top right cell has hot glue on it, while the rest are bare.  Note that it does a decent job of evening out the light. At first, I used white copier paper to cover the LED's.  It darkened the display to bit too much, and looked grainy.  Then I went to an art store, and found .005" thick matte drafting film.  It looks a lot better.  I cut a 10 3/8 x 10 3/8" piece and glued it to the front.   For more detail : Yet Another Daft Punk Coffee Table (5x5 LED Matrix) ### Wireless nunchuk controlled animatronic doll This instructable will attempt to show you how to make an animatronic doll controlled by a wireless nunchuk. This doll can only move its head though. I'm sure there are plenty of people out there who can take this and expand on it and make it much better, and I encourage that completely. :) This instructable will focus more on the coding and wiring than on the building. Since the doll you use for this project will play a major role in how you mount and house the components and the doll you use most likely will not be the same one I used, the exact way I mounted the components may not work for you. Step 1: Main materials 1. Arduino Duemilanove Board NOTE:  I origianlly tried to do this with an Arduino Uno but the code wouldn't work for the newer version. You also have to use the arduino 18 software to compile and load the code2. Bread board for test wiring3. universal blank circuit board 4. servo, this one is a pan/tilt 5. wireless Kama nunchuk NOTE: I know that this code works for this brand of wireless chuk. I cannot say for sure if other brands will work. The code I used was based on code written specifically for this brand of chuk. 6. Nunchuk extender cable NOTE: This is what i used to connect the nunchuk to the Arduino, there are adapters you can buy that will get the job done as well. I'm not sure if all the wiring will be the same though 7. soldering Iron and solder 8. doll NOTE: I got mine from Hobby Lobby, the limbs and head are plastic and the body is cloth 9.  power switch 10. momentary switch use for reset 11. small cardboard box to house Arduino and circuit board 12. 3" PVC pipe cut to fit in doll 13. battery, this one is 7.2 Volts 14. backpack NOTE: not necessary, used to hold extra components and the nunchuk 15.  small speaker NOTE: used with the wireless microphone to provide a way to make the doll "talk" 16. wireless microphone 17. wall wort NOTE: needed to cut off the end to attach to the battery to be able to power the arduino with it, must be center positive 18. RC 7.2V battery connector repair kit NOTE: used to connect to the battery so that we can splice this cable instead of the actual battery cable 19. wire for soldering to circuit board 20. various tools including screw driver, screws, drill, small saw, wrie cutters, wire strippers, electrical tape, bracket, wire, needle nose pliers. etc. 21. needle, thread, scissors, cloth (I used an old pillow case) 22. length of chain, length of material that looks like back pack straps NOTE: optional to make back pack and add chains to pants Step 2: Nunchuk Extender Cable connection The extender cable is used to connect the wireless nunchuk to the Arduino board. This section is basically a repeat of parts of another instructable, some photos have been taken from said instructable. See link below: http://www.instructables.com/id/Wireless-Wii-Nunchuck-control-of-Arduino-projects/step2/How-to-connect-these-wires-to-board/1. cut off the male plug end of the cable2. strip the white wire insulation to reveal the inner wires 3. expose the inner wires: my cable only had 5 colored wires and some strands of exposed wire wrapped in some white paper 4. Now that you have access to all the wires, strip a portion of each one to expose the wires inside 5. Only 4 of the wires are used. Look in the female end of the cable. There are 6 contact points: 3 on top, 3 on bottom. The outside 4 are used while the 2 middle ones are not. See diagram above. 6. Now you need to find out which wire is which contact point. To do this, you can use a multimeter set to measure resistance. Use one lead of the multimeter to make contact with one of the points in the female socket of the cable and use the other lead to make contact with the exposed portion of a colored wire. When you find the wire that coresponds to the contact point in the socket, the multimeter will read 0 ohms. See the video if you are confused. 7. when you have discovered which wires are which, label them so you wont forget. I cut off the unused wire to keep it out of the way. 8. you may want to solder the ends of the wires a little to make a stronger solid wire that is easier to plug into the Arduino than the thin splayed wires the way they are. Here is a link to a video on how to solder for those of you who are like me before this project and have never used a soldering iron: http://www.youtube.com/watch?v=BLfXXRfRIzY Be sure not use too much solder or the wire will be too thick to plug into the arduino Step 3: Setting up the Bread Board for testing wiring In this step we will wire everything up to the breadboard and the arduino 1. attach jumper cables to the servos. you will need one for the power, ground, and control for each servo. 2. use the bread board to power the servos and the nunchuk. You can wire your bread board how ever works best for you, but I have provided my wiring set up for your reference. Here is a video on bread board basics for those of you new to this: http://www.youtube.com/watch?v=q_Q5s9AhCR0&feature=related 3. wire the Arduino: this will include power and ground from the breadboard, SDA and SCK of the extender cable from the bread board, and the control jumpers from the servo. 4. go ahead and plug the nunchuk receiver into the extender cable 5.Once everything is wired you are ready to load the code and test it out Step 4: The code In this step we will compile and load the code and test our wiring. 1. connect the arduino to the computer 2. open the  Arduino 18 program. If you dont already have it, you can download it from the Arduino webpage: http://arduino.cc/en/Main/Software 3. make sure you have the correct board type selected and the correct usb port selected before continuing 4. copy and paste the code found below. This code was written using code from user bradlight on this forum and code from my instructor but I'm not sure who wrote it: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1259091426 5. compile the code 6. If there are no errors (there shouldn't be), upload the code to the arduino 7. when the code loads you should now be able to control the servo by tilting the nunchuck left, right, up, or down. If the servo is not responding, hold the reset button, sync the nunchuk, then release the reset button. I have found that the nunchuk must be synced before the code starts running or the servo gets stuck. This is why my design includes a momentary switch for a reset button.   For more detail: Wireless nunchuk controlled animatronic doll ### Wireless nunchuk controlled animatronic doll using Arduino This instructable will attempt to show you how to make an animatronic doll controlled by a wireless nunchuk. This doll can only move its head though. I'm sure there are plenty of people out there who can take this and expand on it and make it much better, and I encourage that completely. :) This instructable will focus more on the coding and wiring than on the building. Since the doll you use for this project will play a major role in how you mount and house the components and the doll you use most likely will not be the same one I used, the exact way I mounted the components may not work for you. Step 1: Main materials 1. Arduino Duemilanove Board NOTE:  I origianlly tried to do this with an Arduino Uno but the code wouldn't work for the newer version. You also have to use the arduino 18 software to compile and load the code 2. Bread board for test wiring 3. universal blank circuit board 4. servo, this one is a pan/tilt 5. wireless Kama nunchuk NOTE: I know that this code works for this brand of wireless chuk. I cannot say for sure if other brands will work. The code I used was based on code written specifically for this brand of chuk. 6. Nunchuk extender cable NOTE: This is what i used to connect the nunchuk to the Arduino, there are adapters you can buy that will get the job done as well. I'm not sure if all the wiring will be the same though 7. soldering Iron and solder 8. doll NOTE: I got mine from Hobby Lobby, the limbs and head are plastic and the body is cloth 9.  power switch 10. momentary switch use for reset 11. small cardboard box to house Arduino and circuit board 12. 3" PVC pipe cut to fit in doll 13. battery, this one is 7.2 Volts 14. backpack NOTE: not necessary, used to hold extra components and the nunchuk 15.  small speaker NOTE: used with the wireless microphone to provide a way to make the doll "talk" 16. wireless microphone 17. wall wort NOTE: needed to cut off the end to attach to the battery to be able to power the arduino with it, must be center positive 18. RC 7.2V battery connector repair kit NOTE: used to connect to the battery so that we can splice this cable instead of the actual battery cable 19. wire for soldering to circuit board 20. various tools including screw driver, screws, drill, small saw, wrie cutters, wire strippers, electrical tape, bracket, wire, needle nose pliers. etc. 21. needle, thread, scissors, cloth (I used an old pillow case) 22. length of chain, length of material that looks like back pack straps NOTE: optional to make back pack and add chains to pants Step 2: Nunchuk Extender Cable connection The extender cable is used to connect the wireless nunchuk to the Arduino board. This section is basically a repeat of parts of another instructable, some photos have been taken from said instructable. See link below: http://www.instructables.com/id/Wireless-Wii-Nunchuck-control-of-Arduino-projects/step2/How-to-connect-these-wires-to-board/ 1. cut off the male plug end of the cable 2. strip the white wire insulation to reveal the inner wires 3. expose the inner wires: my cable only had 5 colored wires and some strands of exposed wire wrapped in some white paper 4. Now that you have access to all the wires, strip a portion of each one to expose the wires inside 5. Only 4 of the wires are used. Look in the female end of the cable. There are 6 contact points: 3 on top, 3 on bottom. The outside 4 are used while the 2 middle ones are not. See diagram above. 6. Now you need to find out which wire is which contact point. To do this, you can use a multimeter set to measure resistance. Use one lead of the multimeter to make contact with one of the points in the female socket of the cable and use the other lead to make contact with the exposed portion of a colored wire. When you find the wire that coresponds to the contact point in the socket, the multimeter will read 0 ohms. See the video if you are confused. 7. when you have discovered which wires are which, label them so you wont forget. I cut off the unused wire to keep it out of the way. 8. you may want to solder the ends of the wires a little to make a stronger solid wire that is easier to plug into the Arduino than the thin splayed wires the way they are. Here is a link to a video on how to solder for those of you who are like me before this project and have never used a soldering iron: http://www.youtube.com/watch?v=BLfXXRfRIzY Be sure not use too much solder or the wire will be too thick to plug into the arduino Step 3: Setting up the Bread Board for testing wiring In this step we will wire everything up to the breadboard and the arduino 1. attach jumper cables to the servos. you will need one for the power, ground, and control for each servo. 2. use the bread board to power the servos and the nunchuk. You can wire your bread board how ever works best for you, but I have provided my wiring set up for your reference. Here is a video on bread board basics for those of you new to this: http://www.youtube.com/watch?v=q_Q5s9AhCR0&feature=related 3. wire the Arduino: this will include power and ground from the breadboard, SDA and SCK of the extender cable from the bread board, and the control jumpers from the servo. 4. go ahead and plug the nunchuk receiver into the extender cable 5.Once everything is wired you are ready to load the code and test it out Major Components in Project1. Arduino Duemilanove Board NOTE:  I origianlly tried to do this with an Arduino Uno but the code wouldn’t work for the newer version. You also have to use the arduino 18 software to compile and load the code 2. Bread board for test wiring 3. universal blank circuit board 4. servo, this one is a pan/tilt 5. wireless Kama nunchuk NOTE: I know that this code works for this brand of wireless chuk. I cannot say for sure if other brands will work. The code I used was based on code written specifically for this brand of chuk. 6. Nunchuk extender cable NOTE: This is what i used to connect the nunchuk to the Arduino, there are adapters you can buy that will get the job done as well. I’m not sure if all the wiring will be the same though 7. soldering Iron and solder 8. doll NOTE: I got mine from Hobby Lobby, the limbs and head are plastic and the body is cloth 9.  power switch 10. momentary switch use for reset 11. small cardboard box to house Arduino and circuit board 12. 3″ PVC pipe cut to fit in doll 13. battery, this one is 7.2 Volts 14. backpack NOTE: not necessary, used to hold extra components and the nunchuk 15.  small speaker NOTE: used with the wireless microphone to provide a way to make the doll “talk” 16. wireless microphone 17. wall wort NOTE: needed to cut off the end to attach to the battery to be able to power the arduino with it, must be center positive 18. RC 7.2V battery connector repair kit NOTE: used to connect to the battery so that we can splice this cable instead of the actual battery cable 19. wire for soldering to circuit board 20. various tools including screw driver, screws, drill, small saw, wrie cutters, wire strippers, electrical tape, bracket, wire, needle nose pliers. etc. 21. needle, thread, scissors, cloth (I used an old pillow case) 22. length of chain, length of material that looks like back pack straps NOTE: optional to make back pack and add chains to pants   For more detail: Wireless nunchuk controlled animatronic doll using Arduino ### Wireless Doorbell Receiver This project describes the second part of the following two projects: A wireless doorbell transmitter as described in the Wireless Doorbell Transmitter Instructable. This Instructable also gives some introduction to these projects. A wireless doorbell receiver described in this Instructable. The wireless doorbell receiver will make a sound and will blink a LED 5 times after it has received a valid message from the wireless doorbell transmitter. The sound produced by this receiver sounds like ding-dong although but you can call it ‘8-bit audio’ because of its simplicity. The device is powered by the 230 Volt AC mains using a 5 Volt step down converter that generates the 5 Volt DC voltage. Although it could have been designed to work on a battery, I did not need that. It should be possible to power it with three 1.5 AA batteries since both the receiver and the microcontroller should work well on 4.5 Volt or even 3.6 Volt in case of rechargeable batteries. Also here I built this project around my favorite micro controller the PIC but you can also use an Arduino. Step 1: Required Components You need tohave the following components for this project: A piece of breadboard PIC microcontroller 12F617, see win-source Electrolytic capacitor 47uF/16V Ceramic capacitors: 2 * 100nF, 1 * 680 nF 433 MHz ASK RF Receiver Resistors: 1 * 33k, 2 * 1k, 2 * 220 Ohm 2 * diode 1N4148, see win-source Transistors: BC639, BC640 LEDs: 1 Red, 1 Amber 1 loudspeaker 8 Ohm A plastic housing For mains power (not shown on the schematic diagram): 5 Volt power supply Fuse holder + fuse 100mA Slow Switch See the schematic diagram on how to connect the components. Step 2: Designing and Bulding the Electronics All control is performed by the PIC12F617 in software. As mentioned earlier I designed this project so that it is powered by the mains using a step down converter. In this case be very careful not to touch the 230 V! A simple amplifier is used to drive the 8 Ohm loudspeaker. Building the circuit can easily be done on a small breadboard with suitable housing. In the pictures you can see the circuit as I built it on the breadboard including the final result when put in a plastic housing. This housing has a connector that can be directly plugged into the mains. Step 3: The Sofware and Final Operation https://youtu.be/CyLAokPjtiw As already mentioned, the software is written for a PIC12F617. It is written in JAL. In this project the PIC runs on an internal clock frequency of 8 MHz. The software does the following: Decode the received message via the RF link. Since the wireless doorbell transmitter will repeat the same message 3 times, the receiver will only use one of the messages by checking the sequence number of the message. Timer 2 is used by the Virtual Library to decode the received RF messages with a bit rate of 1000 bits/s. When a valid message is received, generate a ding-dong sound with the frequencies 1667 Hz and 1111 Hz and blink the LED 5 times. Timer 1 is used to generate the ding-dong sound. In the video you can see and hear the wireless doorbell receiver in action. The JAL source file and the Intel Hex file are attached. If you are interested in using the PIC microcontroller with JAL – a Pascal like programming language – please visit the JAL download site Have fun building your own project and looking forward to your reactions. Source: Wireless Doorbell Receiver ### The Ultimate Altimeter – A compact, Arduino altimeter Please vote for this Instructable if you think it deserves it! Thanks! The Ultimate Altimeter is a super-compact, Arduino controlled altimeter capable of measuring the altitude with an accuracy of 0.3 meters, and saving the highest and lowest values it has measured. It is powered by a 40 mAh Lithium Polymer battery, uses a tiny LCD Bubble Display, and measures altitude with a MPL3115A2 Altitude Sensor. It's very simple and fairly easy to build with just six major components. Additionally, an optional 3D printed case can house the Altimeter. The Altimeter has a couple of different modes: current altitude, highest altitude, lowest altitude, difference in altitude (highest minus lowest), and standby (turns display off to save power for ~6 hr battery life, not shown in video). The entire build adds up to around $30, but you may have some or most of the parts lying around already. You can make this! It is not a very difficult project, and could be good practice for through-hole soldering, and coding (if you want to do modifications). Read on and create! Step 1: Materials List Parts: Arduino Pro Mini MPL3115A2 Altitude Sensor Bubble Display 40 mAh LiPo battery Button Switch JST connector Tools and other materials: Soldering iron Solder Flush cutters or wire cutters Wire strippers Electrical tape Liquid electrical tape or other insulative paint (you could also use regular electrical tape or heat shrink tubing) 24 guage stranded wire Hot glue gun FTDI Basic Step 2: Solder the Bubble Display The Bubble Displays are set up to be put into a breadboard, but since we will be soldering it directly onto the pins on the back of our Arduino, the leads need to be bent flat with a pair of pliers. Once bent, rest the display on a flat surface, and make sure it lays flat and all of its leads touch the surface. This will ensure that they will make good contact with the pins on the Arduino.   For more detail: The Ultimate Altimeter – A compact, Arduino altimeter ### Two-dimensional piezoelectric material forms basis of world's thinnest electric generator Researchers from Columbia University and the Georgia Institute of Technology are laying claim to having observed piezoelectricity in an atomically thin material for the first time. The effect was demonstrated in the world's thinnest electric generator made from a two-dimensional molybdenum disulfide (MoS2) material, which had previously been predicted to exhibit such properties. Co-leader of the research, Zhong Lin Wang, has previously been involved in developing the world's first practical piezoelectric nanogenerator, followed by the first self-powered nanodevice with wireless data transmission, and a low-cost, large-scale nanogenerator. Now, with colleagues including fellow co-leader James Hone, Wang has been involved in developing the world's thinnest electric generator. The device was created by placing thin layers of MoS2, a material made up of a single layer of atoms, on flexible plastic substrates and using optical techniques to determine how the material's crystal lattices were oriented. This process is required because MoS2's crystalline structure makes the material piezoelectric only in certain orientations. It is also highly polar, meaning that an odd number of atomic layers are needed to ensure the piezoelectric effect isn't canceled out. Metal electrodes were then patterned onto the flakes and the current flows as the samples were mechanically deformed were measured. Confirming theoretical predictions published last year, the team found that the output voltage reversed sign when the direction of applied strain was changed, with the voltage disappearing entirely in samples with an even number of layers. "What’s really interesting is we’ve now found that a material like MoS2, which is not piezoelectric in bulk form, can become piezoelectric when it is thinned down to a single atomic layer," says Lei Wang, a postdoctoral fellow in Hone’s group. This is because bulk MoS2 is made up of successive layers that are oriented in opposite directions, thereby generating positive and negative voltages that cancel each other out. For more detail: Two-dimensional piezoelectric material forms basis of world's thinnest electric generator ### Turn your Arduino into a 4 voice wavetable synth Multiple synthesizer projects have been done for the Arduino, but few have been able to utilize the full power of the Arduino processor. DZL from GeekPhysical wrote a 4 voice wavetable synthesizer that is one of the more advanced software based synths for the Arduino.  It has wavetables included (sine, saw, square and triangle) and envelopes to create beats. This instructable will show you how to make a simple sequencer that plays a little melody. You can hear how it sounds here: It is up to you to modify the code to do many other things. Possible examples could be a midi controlled synth (sample code included), it could be a strange noise machine like this one: Or you could detect touch and convert it into sound patterns: Step 1: Parts You should use the following parts: Arduino board BreadBoard Wires 2.2k Resistor 100n Capacitor 100u Capacitor Jack where left and right channel has one wire and one wire to ground A pair of computer speakers Don't worry if you don't have the exact values. It will probably work, but might be with lower sound quality. The Arduino is not powerful enough to drive a pair of headphones so you will need some kind of preamp for that - e.g. a headphone preamp like this one. Step 2: Add the components to your breadboard Start out with adding the components to the breadboard as the picture depicts. If you want diagram based instructions look at the third slide in this step. Step 3: Connect to the Arduino board Connect one wire from pin 6 to the breadboard and one wire from ground to the breadboard. Step 4: Connect to the speakers Connect the jack connector to the breadboard as shown and plugin the jack from the speakers. For more detail: Turn your Arduino into a 4 voice wavetable synth ### The CoaTracker using Arduino Has this ever happened to you? You wake up in the morning and realize that you're terribly late for work/class/your weekly pedicure/whatever. You throw on a t-shirt and flip flops, sprint around your warm, heated house grabbing your belongings, and race out the door...where you suddenly find yourself surrounded by a cold, biting wind encompassing you in a horrible vortex of snow. You're completely unprepared for this weather, but it's too late to go back now. You must suffer through the wintery day, freezing and looking like a crazy person who can't figure out how to put on a coat. This instructable will show you how to create your very own CoaTracker, an interactive coat rack that tells you the local weather conditions with a single glance, so you'll never again be unprepared. The CoaTracker is not only useful, but also an aesthetically pleasing and thoroughly modern addition to your home. Step 2: Software You'll need to download a few different kinds of software to run the code: Arduino software http://arduino.cc/en/Main/Software Processing software http://processing.org/download/ Follow the instructions for your operating system. After both softwares have been installed successfully, you'll also need to download Firmata, a standard Arduino firmware that makes it possible to control the Arduino through Processing. Follow all of the instructions here: http://www.arduino.cc/playground/Interfacing/Processing Step 3: Code Attached is the code file that you'll need to control your CoaTracker. You won't be able to test it until you've set up the arduino, though. The code is commented so it should be pretty clear. Basically, it takes the weather from an XML feed of your choice (which you can find here: http://www.weather.gov/xml/current_obs/), parses out the weather condition, and uses that condition to light the correct EL wire on the CoaTracker. The only part you have to change is the url of the XML feed for your location. CoaTracker_Code.pde20 KB Step 4: The Circuit Now you'll need to connect the EL Wire to your Arduino. Here, you'll need a lot of wire, plus the Relays and Inverters you bought. The diagram of the circuit is attached. Be sure to test all the wires and the code before incorporating them into the coat rack structure. You can do this by attaching the arduino to your computer with the USB cord it came with. Then press the Play button in the Processing code window to transfer the code to the Arduino. Major Components in Project What you’ll need To begin, you’ll need to order an Arduino. LadyAda (www.adafruit.com) has a great starter kit for $65 that will provide you with everything you need to use the Arduino. You’ll also need to buy: 4 5V Relays (available at RadioShack) 4 3 ft pieces of Electroluminescent Wire, small to medium sized, any color 2 Inverters (you can order the EL Wire and inverters from any EL Wire site, I ordered mine from www.elwirepros.com/) Now for the construction stuff. You can get creative here, but this is what I used (available at most arts and crafts stores): 1 packet of 4 12″x12″ cork boards 1 flat wooden coat rack with 4 pegs Now, you should be all set to get started! For more detail: The CoaTracker using Arduino ### Switch Statement used with serial input using Arduino An if statement allows you to choose between two discrete options, TRUE or FALSE. When there are more than two options, you can use multiple if statements, or you can use the switch statement. Switch allows you to choose between several discrete options. This tutorial shows you how to use switch to turn on one of several different LEDs based on a byte of data received serially. The sketch listens for serial input, and turns on a different LED for the characters a, b, c, d, or e. Circuit Five LEDs are attached to digital pins 2, 3, 4, 5, and 6 in series through 220 ohm resistors. To make this sketch work, your Arduino must be connected to your computer. Open the Serial Monitor, and send the characters a, b, c, d, or e, or anything else. image developed using Fritzing. For more circuit examples, see the Fritzing project page Schematic: Code /* Switch statement  with serial input Demonstrates the use of a switch statement.  The switch statement allows you to choose from among a set of discrete values of a variable.  It's like a series of if statements. To see this sketch in action, open the Serial monitor and send any character. The characters a, b, c, d, and e, will turn on LEDs.  Any other character will turn the LEDs off. The circuit: * 5 LEDs attached to digital pins 2 through 6 through 220-ohm resistors created 1 Jul 2009 by Tom Igoe Major Components in Project Hardware Required Arduino Board (5) LEDs (5) 220 ohm resistors breadboard hook-up wire For more detail: Switch Statement used with serial input using Arduino ### Step-down switching regulator minimizes EMI/EMC Features Silent Switcher® Architecture Ultralow EMI/EMC Emissions Spread Spectrum Frequency Modulation High Efficiency at High Frequency Up to 96% Efficiency at 1MHz Up to 95% Efficiency at 2MHz Wide Input Voltage Range: 3.4V to 42V 5A Maximum Continuous Output, 7A Peak Transient Output Ultralow Quiescent Current Burst Mode® Operation 2.5μA IQ Regulating 12VIN to 3.3VOUT Output Ripple < 10mVP-P Fast Minimum Switch-On Time: 40ns Low Dropout Under All Conditions: 100mV at 1A Safely Tolerates Inductor Saturation in Overload Adjustable and Synchronizable: 200kHz to 3MHz Peak Current Mode Operation Output Soft-Start and Tracking Small 18-Lead 3mm × 4mm QFN   For more detail: Step-down switching regulator minimizes EMI/EMC ### Step-by-step guide for making a very simple temperature and humidity meter In this blog post, I am providing you step by step instructions to build a very simple temperature and relative humidity meter for indoor use. All you need to build this project are an Arduino Uno or compatible board, a DHT11 sensor, and a MAX7219 based 8-digit serial 7-segment LED display. The temperature is displayed in degree Celsius and relative humidity in percentage. Things required to build this project Arduino Uno board I am using Crowduino Uno SD board, which is manufactured by Elecrow and is fully compatible with Arduino Uno board. Crowduino has the following additional features that the standard Arduino Uno board doesn’t have. 1 Reset button is placed on the left side edge, and thus more convenient to access. 2 Improved power supply circuit with selectable 3.3V and 5.0V for operation. 3 Uses the mini USB connector to avoid the potential risk of connecting to the shield plugged in. 4 Micro SD card slot on board, which makes this board useful for data logging applications. DHT11 sensor DHT11 is an ultra low cost digital sensor for measuring temperature and relative humidity. It operates from 3.0-5.0V and provides calibrated digital outputs for temperature (in degree Celsius) and humidity through a single wire serial interface. It can measure humidity ranging from 20-80% with 5% accuracy, and temperature ranging from 0-50 degree Celsius with 2% accuracy. When it is active, the maximum current consumption is 2.5mA. The sensor has 4 pins with 0.1” spacing as shown below. MAX7219-based seven segment display The next thing required to do this project is two rows of 4-digit seven segment LED displays for displaying temperature and humidity simultaneously. This project uses SPI7SEGDISP8.56-2R display module, which is MAX7219 driven and allows you to control all 8 digits through a 3-wire serial interface. The display brightness can also be adjusted through software commands. In addition, library routines are available for interfacing the SPI7SEGDISP8.56-2R module to Arduino. This project, in particular, uses the LedControl library.   For more detail: Step-by-step guide for making a very simple temperature and humidity meter ### Step-by-step guide for making a very simple temperature and humidity meter with 7-segment LED displays In this blog post, I am providing you step by step instructions to build a very simple temperature and relative humidity meter for indoor use. All you need to build this project are an Arduino Uno or compatible board, a DHT11 sensor, and a MAX7219 based 8-digit serial 7-segment LED display. The temperature is displayed in degree Celsius and relative humidity in percentage. Things required to build this project Arduino Uno board I am using Crowduino Uno SD board, which is manufactured by Elecrow and is fully compatible with Arduino Uno board. Crowduino has the following additional features that the standard Arduino Uno board doesn’t have. 1 Reset button is placed on the left side edge, and thus more convenient to access. 2 Improved power supply circuit with selectable 3.3V and 5.0V for operation. 3 Uses the mini USB connector to avoid the potential risk of connecting to the shield plugged in. 4 Micro SD card slot on board, which makes this board useful for data logging applications. DHT11 sensor DHT11 is an ultra low cost digital sensor for measuring temperature and relative humidity. It operates from 3.0-5.0V and provides calibrated digital outputs for temperature (in degree Celsius) and humidity through a single wire serial interface. It can measure humidity ranging from 20-80% with 5% accuracy, and temperature ranging from 0-50 degree Celsius with 2% accuracy. When it is active, the maximum current consumption is 2.5mA. The sensor has 4 pins with 0.1” spacing as shown below. MAX7219-based seven segment display The next thing required to do this project is two rows of 4-digit seven segment LED displays for displaying temperature and humidity simultaneously. This project uses SPI7SEGDISP8.56-2R display module, which is MAX7219 driven and allows you to control all 8 digits through a 3-wire serial interface. The display brightness can also be adjusted through software commands. In addition, library routines are available for interfacing the SPI7SEGDISP8.56-2R module to Arduino. This project, in particular, uses the LedControl library. Read More:  a very simple temperature and humidity meter with 7-segment LED displays ### Standalone Arduino chip on breadboard If you're like me, after I got my Arduino and performed a final programming on my first chip, I wanted to pull it off my Arduino Duemilanove and put it on my own circuit. This would also free up my Arduino for future projects. The problem was that I'm such an electronics newbie that I didn't know where to start. After reading through many web pages and forums, I was able to put together this Instructable. I wanted to have the information I learned all in one place, and easy to follow. Comments and suggestions are welcome and appreciated as I'm still trying to learn all this stuff. Edit: Fellow Instructable member, Janw mentioned to me that it's always a good idea to add a capacitor or 2 near your power. He mentioned using a couple of 100nF capacitors should work. I'm very grateful he pointed this out to me, because my first production circuit that I'm building upon this circuit, was having a little bit of strange behavior. So I hooked up one 10uF capacitor near my power, and it started behaving correctly! I don't know why it didn't affect my 'blinking LED' test, but I do know that I'm grateful for Janw for pointing this out to me. Thanks Janw. Edit2: Building upon the previous edit, I wanted to mention that Instructable member, kz1o brought out some more information regarding the capacitors. Please see his comment below, dated February 14th, 2010 @ 10:52 am. Update - This Instructable is on Hack a Day! Step 1: Parts needed I bought my parts from Digikey and Sparkfun Electronics - they're 2 of my favorite places to buy components. Anyway, here's the list: #1 - (Qty: 1) - ATMega328 chip with Arduino bootloader pre-installed ($5.50) #2 - (Qty: 1) - 5VDC Switching power supply ($5.95) (Note: If you don't use a switching power supply, you must add in a voltage regulator and a couple of capacitors...see below) #3 - (Qty: 2) - 22 pF ceramic disc capacitors ($.24 / ea) #4 - (Qty: 1) - 16MHz Crystal ($1.50) #5 - (Qty: 1) - Power jack ($.38) (Optional) #6 - (Qty: 1) - Breadboard (hopefully you have one laying around, but if not, here's one. ($8.73) #7 - Small pieces of 22 awg solid wire. If you don't have any, you can probably pick some up at your favorite electronics store. Total cost for above before tax/shipping: about $14 (not including breadboard). Alternatives / options: Option / Alternative #1: If you want to use an existing power supply you have around the house, make sure it is between 5V - 16V. If you are not sure if it is a regulated switching power supply, then you must use the following components too: #1 option - (Qty: 1) - 5V Voltage Regulator (or another similar 5V voltage regulator) ($.57) and #1 option - (Qty: 2) - 10 uF Aluminum Capacitor ($.15 / ea) (See below reference links for how to hook them up) Option / Alternative #2: If you don't want to use standard items #3 and #4, you can replace those with: #2 option - (Qty: 1) - 16 MHz Ceramic Resonator (w/cap) ($.54) This part looks like a ceramic capacitor, and you hook the 2 outside pins up to where you would hook the crystal up (covered later in the Instructable), and the middle pin goes to ground. At least this is what I've read - I haven't tried it yet. But as you may note, it is a little cheaper to go this route. :) Ok, let's start hooking stuff up! Step 2: Hooking up power Go ahead and connect your power jack as shown in the first photo if you are using a power jack. Next, hookup a couple of wires as shown in the photo connecting the respective power (+ and -) rails together. Step 3: Chip (microcontroller) placement Now we want to put the microcontroller on your breadboard as shown in the photo. If this is a brand new chip, you have to bend both rows of pins in a little bit. What I do, is I hold the chip from both sides, and press the chip a little bit against a flat surface like a desk, and do this on both sides so that both sides are bent in equailly. You most likely won't have to do this if you're pulling your chip from your Arduino - they're already bent from being in the socket. Please note the orientation of the chip - in the photos and for this Instructable, please place the chip so that the little half-round 'notch' is on the left. Step 4: Bringing power to the chip First hook up 3 wires as shown in the photo. One is going to be ground/negative (the black wire shown), and 2 will be to the positive. If you can't tell which pins are being connected on the chip, look at the 5th image in this step which is a pin mapping that I pulled from Arduino's website to reference. Going by that, you can see that our ground/negative (black) wire is going to pin 22, and the 2 positives (the red wires) are going to pins 20 and 21. Next hook up 1 more positive (red) wire and 1 more negative (black) wire as shown in the 3rd/4th photos (they're the same thing...just one is zoomed in more). Again, if you can't tell, look at the Arduino mapping, and you can see that we're connecting our ground/negative (black) wire to pin 8, and the positive (red) wire to pin 7. Major Components in Project ATMega328 chip with Arduino bootloader pre-installed 5VDC Switching power supply 22 pF ceramic disc capacitors 16MHz Crystal For more detail: Standalone Arduino chip on breadboard ### Standalone Arduino / ATMega chip on breadboard If you're like me, after I got my Arduino and performed a final programming on my first chip, I wanted to pull it off my Arduino Duemilanove and put it on my own circuit. This would also free up my Arduino for future projects. The problem was that I'm such an electronics newbie that I didn't know where to start. After reading through many web pages and forums, I was able to put together this Instructable. I wanted to have the information I learned all in one place, and easy to follow. Comments and suggestions are welcome and appreciated as I'm still trying to learn all this stuff. Edit: Fellow Instructable member, Janw mentioned to me that it's always a good idea to add a capacitor or 2 near your power. He mentioned using a couple of 100nF capacitors should work. I'm very grateful he pointed this out to me, because my first production circuit that I'm building upon this circuit, was having a little bit of strange behavior. So I hooked up one 10uF capacitor near my power, and it started behaving correctly! I don't know why it didn't affect my 'blinking LED' test, but I do know that I'm grateful for Janw for pointing this out to me. Thanks Janw. Edit2: Building upon the previous edit, I wanted to mention that Instructable member, kz1o brought out some more information regarding the capacitors. Please see his comment below, dated February 14th, 2010 @ 10:52 am. For more detail: Standalone Arduino / ATMega chip on breadboard ### SmartMesh - Arduino and Android Controlled Pneumatic Facade This project was part of Multimodal Media Madness 2014, hosted by the chair for Computer Aided Architectural Design (CAAD) and the Media Computing Group of RWTH Aachen University. For more Smart Skins, please check this page: http://hci.rwth-aachen.de/m3_ss14 During this project, the students were asked to develop smart, intelligent facade elements under the general topic "Home Automation" which should then be used as addable elements for small houses (study rooms) which are constructed after the open source concept of the WikiHouse (see WikiHouse for more information). Our group got the idea to create the "SmartMesh" which is basically an arduino controlled facade element that contains two balloons which can be filled with air and evacuated using small handy pumps in coordination to the inputs of two temperature sensors (one outside and one inside the house), as well as a light sensor. PURPOSE The SmartMesh reacts to the outside and inside environment and ensures a pleasant indoor climate - thermal comfort. It controls the light and heat transfer between the inside and outside and also provides the inside with fresh air. The smart facade senses bad weather and closes in order to prevent for example inside water damages. The grouping of more smart elements provides an aesthetic architectural value trough the fragmented surface. Note: We are going to update the Instructable from time to time in the following days. by Hasan Ayhan, Tobias Welschenbach, Snezhina Shukina Step 1: Component List & Project Cost The main components (electronical parts only, for the constructing materials refer to step 3 of this Instructable) are as follows: A StarterKit+ for Arduino containing an Arduino Uno microcontroller and several parts to begin with. Watterott 35,50 EUR (Any Arduino Uno will do, however you might have to buy some parts which were already contained in this set, seperately) 4x magnetic valves Pollin 2,50 EUR each 2x 12V ROB-10398 Vacuum Pump Sparkfun (around 15 EUR each from German Sparkfun retailers) SeeedStudio Bluetooth Shield Watterott 21,80 EUR (other BT Shields or BT modules might also work but there has to be some changes done in the code) 6x MOSFET IRLZ24N (We had to use one from the StarterKit because one of the others turned out to be defective but the ones from the StarterKit should also suffice for our project.) 6x Diode 1N4007 (5 pcs are included in each kit, we had two of them) 6x 10K Ohm resistor 1/4W , 10 pcs included in the kit so enough of them :) 2x LM35CZ temperature sensor Watterott 3,00 EUR each 1x TSL2561 light sensor Watterott 7,74 EUR 1x TDK Lambda LS100-12 power supply Conrad 25,11 EUR 6x 220 Ohm resistor (included in the kit) 1x DC Connector Conrad 1,79 EUR 2x Digital Taster (any taster should do, as long as not too much force is needed to activate it, because the balloon has to activate it) Additionally, the project used the following smaller components and accessories: A copper plate for making the printed circuit board wires The following tools were used: Solder Drill Step 2: Constructing the facade element chassis COMPONENTS (ARCHITECTURE) 1. An optional (wooden) frame with the dimensions 562 x 562 x 281 mm, which makes it easier to build the panel and also a way of grouping the elements for the development of larger facades. In my opinion a grouping without the frame looks better. 2. An inner chassis, that gives the form of the mesh and also serves its purpose of integrating the electronics and vacuum pumps for each pneumatic fragment. 3. A group of two fragments, which gives the structure. Each one is filled with one latex balloon. 4. An extra strong latex balloon Ø 55cm or more - the longer the form is the better. It has to fill in the inner form of the mesh structure. In order to fix the balloon you will need a thin brass pipe (2.0-2.5mm) for each balloon. 5. Because of the outside conditions like rain the mesh needs a small pitch but only on the upper side, so that water flows down and not gets inside the mesh and provides any damage. MACHINES USED For building of one facade element a CNC milling machine and a Laser Cutter are used. The inner chassis is cut from a MDF panel by the CNC milling machine, but the inside of the chassis is hollow with enough space for all the electronics that you want to integrate. It is important that the material exposed to the outside environment is water and weather resistant. For our model we used MDF panels. In this case a weather resistant coating is needed from the outside and a nice looking wooden coating from the inside. The mesh structure (3) is made by 2D "stripes" (in the form of the mesh) arrayed with a distance between each other from around 50 mm. This structure gives more space inside the inner chassis, is lighter but still stable and allows an easy revision and maintenance of the panels' intergrated stuff. MATERIALS inside wood - MDF panel and a coating by choice (f.e. a wooden one) outside aluminium - wood or wood with a coating is optional - in any case water resistant HOW TO BUILD THE ELEMENT Step I: get all the stuff you need You are going to use the frame in order to build the element. The inner chassis is cut by the CNC machine. The mesh structure is cut by the laser cutter. For the chassis you need a MDF plane about 1000 x 700 mm (the square parts you do not need to cut with the CNC, but you might). For the mesh structure you need 3x planes of a water and weather resistant material 1mm thick. Here you will also find attached the 2D files for both machines. You also need glue for all the materials you have and a standard cutter. Step II: building the chassis Once you have cut all parts start building the element into the frame from the outside to the inside. First connect/glue the chassis parts - the MDF ones cut by the CNC machine. When you have done this, you are going to have the 6 parts (4 corners and the 2 middle parts), where you want to integrate the electronic stuff later. If you want to take off the frame later, you should not glue the 6 parts permanently to the frame but fix them by using just a little glue. Now you have the frame and the chassis build, but you still have the big holes in the middle, where you will put the mesh structure. Step III: building the mesh structure The mesh structure is cut in stripes, so you are going to array the mesh stripes and connect the parts by coating them from the outside. You may have noticed that the stripes in the cut-file are separated in I (inside) and A (outside) stripes. First you need to glue the inner stripes, but be careful! you might want to put your electronics first. So first the inner stripes and the outside mesh structure (see cut-file 1 and 2) and then you can put the outside stripes, which gives the final form of the two fragments. From this point what has to be done is connect all the electronics and close the two fragments by coating them (see cut-file 3). For an instruction of how to connect the electronics refer to step 5 of this Instructable. Step IV: connecting the balloon Connect the ballon with the vacuum pump by fixing it to the top. (Additionally you can also fix the balloon to the bottom of each fragment, too, but we only connected the balloon to the hosepipe that comes from the pumps and then fixed the hosepipe to the top.) We did not test this but fixing it also to the bottom of each fragment might provide a greater outer view because the balloon no longer just hangs down on the loosen side (bottom). So if you do this, you might also fix it to the side with the detailed space for it. In order to do this you put the thin brass pipe into the balloon. The pipe has to take the form of the meshes curve and to be fixed again. This enhances the look because the balloon will be filled with air starting from the fixed side developing to the other side. Step V: getting rid of the annoying frame (additional) Finally you can take of the frame by loosing it with a cutter - just cut between frame and element and it should loosen up, so that you can take out the element from the frame. (we did not do this either, again consider as additional) Step VI: closing the element (consider this last step as additional also, for our project we did not do this, yet it might provide a better experience for under real-life conditions) Close the two fragments from both sides, where the frame has been earlier. You will notice that you can still get to the electronics through the sides now when the frame is gone. This is going to be helpful for connecting more than one element in both directions - makes grouping possible not only visually but by wires. Notes: The materials for the outer side of the panel (chassis and mesh structure) have to be water proved and weather resistant. A such coating can be used. The joints between chassis and mesh structure have to be absolutely waterproved especially to the outside environment. Fräsdatei.dwg278 KB Laserdatei 2.dwg301 KB Laserdatei 1.dwg298 KB Laserdatei 3.dwg291 KB Step 3: Constructing and Soldering the Printed Circuit Board (PCB) Construction: a small introduction: This was the first slightly complex thing we had to do because we had never done something like that before and few to none experience with electrical circuits and the electronic stuff :) After figuring out how everything had to be connected, we began to create an early version of an Eagle shematic. For those who don't know, Eagle is a free software which let's you create shematics of electronic circuits to be then printed on a board. After a few improvements the following eagle shematic was created (maybe it's not the most elegant shematic you might find but hey, it does work :) Below you can also download the eagle file for creating the exact same board. a few words to the logics of the circuit: Basically there are 6 MOSFETs in parallel each placed like for example in this great tutorial http://bildr.org/2012/03/rfp30n06le-arduino/http://bildr.org/2012/03/rfp30n06le-arduino/ with the exception that we placed the diodes in parallel not to the pumps or valves but to Drain and Source of the MOSFETs, which also works. We also added to each of the MOSFETs a 220 Ohm resistor in between the Gate and the Arduino's digital pins, in order to not let high voltage damage the Arduino. For more details and reasons why there have to be diodes on each MOSFET as well as what a MOSFET is, I suggest reading some tutorials. The above mentioned is a good starting point and should suffice for our purposes. So now came the part which might not be redoable for everyone (in fact only for a small part of people). We have the advantage in our university of having a PCB milling machine which does all the milling and creating of the board automatically once given the eagle file of the board. If you are interested in how this works you can watch the attached video, where we filmed the machine's cutting of our board :) Why even bother with creating such a PCB you might ask yourself? Well, firstly, the breadboard which came with our StarterKit does not allow current above 1A. Since our Pumps and Valves are in parallel the used current sums up so we had more than 1A definitely of current flowing and thus it was convenient to use an extra board for this whole project. Also we did not want to have several parts like MOSFETs etc. flowing around just connected by wires. Soldering: We assume for this step, that you know how to solder (if not we suggest you to first watch some tutorials for learning it) and just give you an explanation on what has to be soldered to which pin on the board. You have to solder 2x 7 pin connectors (in the picture the above ones), 1x 7 pin connectors (in the picture the bottom). Also you have to solder all the components (resistors, MOSFETs, diodes) exactly as in the picture with the notations and then you should be finished with the board. The other picture shows the other side of the board. MosfetPlatine.zip284 KB For more detail: SmartMesh - Arduino and Android Controlled Pneumatic Facade ### Self-Contained 7x7x7 LED Cube LED cubes are true 3D displays that work by lighting up points in a 3D lattice of LEDs. On the 3D display you can produce some truly mesmerizing animations.  This Instructable will walk you through creating an LED cube for yourself that is completely self-contained and powered by an Arduino Mega.  Once you have it programmed, all you have to do is plug it into the wall and it will display whatever you tell it to!  This cube avoids the complication of multiplexers and instead uses an Arduino Mega to directly control transistor circuits. Without further ado, here's a video of the cube in action: (Although there are limitations to taking a 2D video of a 3D display) We'll start by making the physical cube and then turn to programming it. ----------------------------------------------------------------------------------------------------------------- Besides being for fun, this project is an entry for the Make-to-Learn, Lighting, and Epilog Challenge V Contests.  I would really appreciate your vote!   **Please click on the orange vote ribbon in the upper right-hand corner of this page if you enjoy this Instructable.**  ----------------------------------------------------------------------------------------------------------------- What would you do if you were to win the Epilog Zing Laser? My high school got an Epilog Laser this year, and on it I had my first experience using a laser cutter.  I was immediately struck by how effective it was at turning designs into reality. I first used it last December to cut ornate snowflake Christmas ornaments out of acrylic and wood, some of which are pictured in photo 2 on step 12. Not only did it inspire me to teach myself Illustrator, but the results were delightful, and I hope to share the process in a future Instructable. I went on to use the laser cutter to slice Stanford's logo out of sticky felt to decorate the top of my graduation cap, as well as to make acrylic coasters, place mats and the LED layer template the box for this project. Unfortunately, since I have now graduated, I have lost access to the laser cutter.  Laser cutters have the precision to make things that would be essentially impossible to fabricate otherwise, such as the radially symmetric lines on the snowflake ornaments or the pinpoint holes that allow the legs of the LED cube to rest through the lid of the box.  If I were to win the Epilog Laser, I would continue to use it to fabricate neat items too delicate and too complex to be made otherwise.  In short, I'd love to win the laser to continue my adventure of learning how to create objects with computer controlled machinery. ----------------------------------------------------------------------------------------------------------------- Below are my answers to the contest  Make-to-Learn Youth Contest questions: What did you make? I built and programmed a 7x7x7 LED cube from scratch.  The description above and the rest of the Instructable tell the story much better than is possible in the short answer to a question.  Therefore, please refer to the rest of the Instructable for a more complete answer to this question. How did you make it? I was originally inspired by chr's Instructable (here), which first introduced me to LED cubes and how neat they are.  I wanted to make a LED cube that was self-contained--that you could just plug into the wall and have run--rather than one that requires input from a computer. I co-opted the idea of using the legs of the LEDs to form the framework of the lattice that most other LED cubes use, but I came up with the rest of the physical and circuitry design on my own.  I built and assembled the whole cube from scratch. Several of the routines that the cube runs were inspired by chr's, but I wrote the code myself or in conjunction with teaching my cousin to program. The only major change of plans I had while building the cube was to use an Arduino Mega instead of a Due.  The Due has the advantage of a higher clock speed, but I realized that I needed 5V for the digital out pins to be able to fully switch the transistors in my circuit.  Otherwise, the voltage drop across the LEDs would have been capped at 2.6V rather than the 3.3V they were rated to. Where did you make it? I did the majority of the work on this project in the lab and shop at my high school, as this was my second semester project for my Applied Science Research Class.  We have a laser cutter in our school lab, which I used to cut out the acrylic box. I did some of the soldering at home as well. What did you learn? A lot!  I learned how to used Adobe Illustrator to create things with the laser cutter. In terms of electronics, I came to really understand how transistors work while working on this project, and it was by far the largest and most complex circuit I have ever designed. On the programming side, I learned how to use pointers and memory management to write the C++ code that controls the cube.  It was neat to see a real-world application of polymorphism and to learn about the virtual keyword in C++. More generally, this project taught me the value of building a smaller-scale prototype and the power of digital circuits coupled with a microprocessor. My cousin was with me while I was programming the cube.  He had no programming experience, but I taught him enough that with some help he was able to write two of the eight routines that are displayed on the cube.  More on that in the programming section! Step 1: Skills Required The skills required for this project are actually pretty minimal; most can be learned along the way, especially given that you have plans to work off of. That being said, you should really have some experience with basic electronics and also with soldering, since this project requires a lot of that. My programs should work for you out of the box, but if you want to write your own display routines, some experience with object-oriented programming in C++ (Arduino) would be helpful. Step 2: How it Works! In its simplest form, an LED cube is a three dimensional array of lights in space, with each light either on or off at any given moment in time.  To achieve complete control over those lights, each LED needs to appear to be controlled individually. Doing this directly, however, is not feasible. If x is the number of LEDs on each side of the LED cube, we'd need x3 digital output ports to control each LED individually.  This might work for smaller cubes, but for larger values of x, this quickly exceeds the number of ports directly available on any standard microcontroller.  For this 7x7x7 cube, 343 ports would be needed. This problem is commonly resolved by flickering through the layers of the LED cube quickly enough to create the illusion of being able to control every LED independently.  Let's look at how this would reduce the number of ports needed: In each colored layer in the photo above, the cathode (to ground) leg of each LED is connected.  The anode (voltage in) legs of all the LEDs in each column are also connected.  Without going into details yet, assume that the microcontroller can connect and disconnect each column from power and each layer from ground. To display something on the cube, we would first ground the red layer and apply voltage to the columns we want to turn on.  Then we would disconnect everything and repeat the process for the orange layer, this time applying voltage only to the columns of the LEDs we want to light up in that layer. By quickly flickering through the layers, every layer will appear to be lit at once.  The flicker fusion threshold, the rate above which flickering lights appear constant, in humans is about 60Hz, so the cube needs to cycle through every layer at least 60 times per second. Switching the LEDs in layers and columns makes larger cubes feasible.  A total of x2 + x digital outputs are needed to control such a cube: x2 for the columns and x for the layers.  Therefore, to build a 7x7x7 cube, 56 ports are needed, rather than 343.  The Arduino Mega has 70 pins that can be used as digital I/O ports, leaving 14 ports open for external push button switches to switch the pattern being displayed on the cube. Step 3: Tools In order to do the electronics you will need: Good soldering iron Patience Wire stripper 2 Pairs of needle-nose pliers Eye protection, etc. Alligator clips and a power supply are handy, as is an ohmmeter for checking connections. I used a laser cutter to build my acrylic box and to make the template I used for soldering.  I'm sure an inventive person could get by without, but the laser cutter was tremendously helpful. Calipers are also helpful but not necessary. As always, make sure you know how to safely use a tool before using it.   For more detail: Self-Contained 7x7x7 LED Cube ### Self-Contained 7x7x7 LED Cube using Arduino LED cubes are true 3D displays that work by lighting up points in a 3D lattice of LEDs. On the 3D display you can produce some truly mesmerizing animations.  This Instructable will walk you through creating an LED cube for yourself that is completely self-contained and powered by an Arduino Mega.  Once you have it programmed, all you have to do is plug it into the wall and it will display whatever you tell it to!  This cube avoids the complication of multiplexers and instead uses an Arduino Mega to directly control transistor circuits. Without further ado, here's a video of the cube in action: (Although there are limitations to taking a 2D video of a 3D display) We'll start by making the physical cube and then turn to programming it. ----------------------------------------------------------------------------------------------------------------- Besides being for fun, this project is an entry for the Make-to-Learn, Lighting, and Epilog Challenge V Contests.  I would really appreciate your vote!   **Please click on the orange vote ribbon in the upper right-hand corner of this page if you enjoy this Instructable.**  ----------------------------------------------------------------------------------------------------------------- Below are my answers to the contest  Make-to-Learn Youth Contest questions: What did you make? I built and programmed a 7x7x7 LED cube from scratch.  The description above and the rest of the Instructable tell the story much better than is possible in the short answer to a question.  Therefore, please refer to the rest of the Instructable for a more complete answer to this question. How did you make it? I was originally inspired by chr's Instructable (here), which first introduced me to LED cubes and how neat they are.  I wanted to make a LED cube that was self-contained--that you could just plug into the wall and have run--rather than one that requires input from a computer. I co-opted the idea of using the legs of the LEDs to form the framework of the lattice that most other LED cubes use, but I came up with the rest of the physical and circuitry design on my own.  I built and assembled the whole cube from scratch. Several of the routines that the cube runs were inspired by chr's, but I wrote the code myself or in conjunction with teaching my cousin to program. The only major change of plans I had while building the cube was to use an Arduino Mega instead of a Due.  The Due has the advantage of a higher clock speed, but I realized that I needed 5V for the digital out pins to be able to fully switch the transistors in my circuit.  Otherwise, the voltage drop across the LEDs would have been capped at 2.6V rather than the 3.3V they were rated to. Where did you make it? I did the majority of the work on this project in the lab and shop at my high school, as this was my second semester project for my Applied Science Research Class.  We have a laser cutter in our school lab, which I used to cut out the acrylic box. I did some of the soldering at home as well. What did you learn? A lot!  I learned how to used Adobe Illustrator to create things with the laser cutter. In terms of electronics, I came to really understand how transistors work while working on this project, and it was by far the largest and most complex circuit I have ever designed. On the programming side, I learned how to use pointers and memory management to write the C++ code that controls the cube.  It was neat to see a real-world application of polymorphism and to learn about the virtual keyword in C++. More generally, this project taught me the value of building a smaller-scale prototype and the power of digital circuits coupled with a microprocessor. My cousin was with me while I was programming the cube.  He had no programming experience, but I taught him enough that with some help he was able to write two of the eight routines that are displayed on the cube.  More on that in the programming section! Step 1: Skills Required The skills required for this project are actually pretty minimal; most can be learned along the way, especially given that you have plans to work off of. That being said, you should really have some experience with basic electronics and also with soldering, since this project requires a lot of that. My programs should work for you out of the box, but if you want to write your own display routines, some experience with object-oriented programming in C++ (Arduino) would be helpful. Step 2: How it Works! In its simplest form, an LED cube is a three dimensional array of lights in space, with each light either on or off at any given moment in time.  To achieve complete control over those lights, each LED needs to appear to be controlled individually. Doing this directly, however, is not feasible. If x is the number of LEDs on each side of the LED cube, we'd need x3 digital output ports to control each LED individually.  This might work for smaller cubes, but for larger values of x, this quickly exceeds the number of ports directly available on any standard microcontroller.  For this 7x7x7 cube, 343 ports would be needed. This problem is commonly resolved by flickering through the layers of the LED cube quickly enough to create the illusion of being able to control every LED independently.  Let's look at how this would reduce the number of ports needed: In each colored layer in the photo above, the cathode (to ground) leg of each LED is connected.  The anode (voltage in) legs of all the LEDs in each column are also connected.  Without going into details yet, assume that the microcontroller can connect and disconnect each column from power and each layer from ground. To display something on the cube, we would first ground the red layer and apply voltage to the columns we want to turn on.  Then we would disconnect everything and repeat the process for the orange layer, this time applying voltage only to the columns of the LEDs we want to light up in that layer. By quickly flickering through the layers, every layer will appear to be lit at once.  The flicker fusion threshold, the rate above which flickering lights appear constant, in humans is about 60Hz, so the cube needs to cycle through every layer at least 60 times per second. Switching the LEDs in layers and columns makes larger cubes feasible.  A total of x2 + x digital outputs are needed to control such a cube: x2 for the columns and x for the layers.  Therefore, to build a 7x7x7 cube, 56 ports are needed, rather than 343.  The Arduino Mega has 70 pins that can be used as digital I/O ports, leaving 14 ports open for external push button switches to switch the pattern being displayed on the cube. Step 3: Tools In order to do the electronics you will need: Good soldering iron Patience Wire stripper 2 Pairs of needle-nose pliers Eye protection, etc. Alligator clips and a power supply are handy, as is an ohmmeter for checking connections. I used a laser cutter to build my acrylic box and to make the template I used for soldering.  I'm sure an inventive person could get by without, but the laser cutter was tremendously helpful. Calipers are also helpful but not necessary. As always, make sure you know how to safely use a tool before using it. Major Components in Project Materials You’ll need the following for this project: 1x              Arduino Mega –The brains of our project 1000x       3mm diffused blue LEDs **Buy these off of eBay and make sure to get the diffused variety.  They’ll be much cheaper that way (~$25), and diffused LEDs have a much better view angle than normal LEDs. 1x              5V Wall Wart power supply –This will supply power to the project. **eBay is a great place to get these.  I got a 2A one, but 1A should work just fine. 1x              DC female power jack –Get power from the wall wart **Make sure the jack size matches the size of the jack on the power supply you bought.  Like here. 8x              Momentary pushbutton switches –User input to switch programs **I got mine at RadioShack here. 1x              Switch rated to at least 1A that mounts through a hole –On/Off Switch **I used a DPDT switch, but other kinds would work just fine. 2x              Prototype Board **Get the ones that have some holes already connected.  It will save you a ton of time.  I got mine here. ~               Header pins –For connecting PCBs and for connecting ribbon cable to the Arduino. **Get a bunch of the male ones and some smaller sockets like those on the Arduino. 6ft             7+ conductor ribbon cable 3ft             35+ conductor ribbon cable 1pkg        Adhesive velcro –Secure boards down inside box 53x          100Ω resistor 53x          560Ω resistor 9x            4.7kΩ resistor 8x            10kΩ resistor 9x            TIP31C NPN power transistor –For switching layers 53x          2N3904 NPN transistor –For switching columns ~3ft         24 and 22 gauge insulated wire 1x           Acrylic Sheet –For case 4x           3″ by 1/8″ Stainless steel screws with acorn caps –For case 1x           1/8″ Particle board –For soldering template 1 ton       Solder 1x            Tube of epoxy 2x            Male jumper wires **Could substitute wire and header pins The total cost should be somewhere around $150. For more detail: Self-Contained 7x7x7 LED Cube using Arduino ### SDWebServer – enc28J60 and Arduino In the previous blog post, you learned how to send big files (html pages, images…) with your ENC28J60 shield. Today I’m going to show you a complete webserver!3 Description The user’s browser sends a request, through the network, to the ENC28J60 module. The request is analyzed by the sketch that is running on the Arduino, which also prepares the response. Both the ENC28J60 module and the SD card one are connected to the Arduino via SPI bus: The webserver handles both static and dynamic resources: the static resources (html pages, images…) are fetched from the SD card the dynamic resources (AJAX requests…) are handled by the sketch itself The sketch leverages the method described in my previous post to send static resources of any size. Connections Both the SD module and the ethernet one uses the SPI bus. That bus allows to connect more than one device at a time; thanks to a PIN (called chip-select) Arduino can decide which device will handle the command it is sending on the bus. You therefore need to connect the CS PINs of the different modules to different PINs of your Arduino and to configure the libraries accordingly. Unfortunately I noticed that often the shields use the same PIN (for example PIN 10) as CS PIN or that – worse – they don’t allow to stack other SPI shields.I was forced to use two modules (instead of shields) and to connect them using wires: The connections are: power supply (5V and ground); MOSI (Arduino->Device), PIN 11 MISO (Device->Arduino), PIN 12 CLK (clock), PIN 13 CS (chip select) ->for the SD module PIN 4, for the ENC28J60 modyule PIN 10 The two PINs I chose to be chip select PINs are configured at the top of the sketch:   For more detail: SDWebServer – enc28J60 and Arduino ### SDWebServer – enc28J60 and Arduino (20) In the previous blog post, you learned how to send big files (html pages, images…) with your ENC28J60 shield. Today I’m going to show you a complete webserver! Description The user’s browser sends a request, through the network, to the ENC28J60 module. The request is analyzed by the sketch that is running on the Arduino, which also prepares the response. Both the ENC28J60 module and the SD card one are connected to the Arduino via SPI bus: The webserver handles both static and dynamic resources: the static resources (html pages, images…) are fetched from the SD card the dynamic resources (AJAX requests…) are handled by the sketch itself The sketch leverages the method described in my previous post to send static resources of any size. Connections Both the SD module and the ethernet one uses the SPI bus. That bus allows to connect more than one device at a time; thanks to a PIN (called chip-select) Arduino can decide which device will handle the command it is sending on the bus. You therefore need to connect the CS PINs of the different modules to different PINs of your Arduino and to configure the libraries accordingly. Unfortunately I noticed that often the shields use the same PIN (for example PIN 10) as CS PIN or that – worse – they don’t allow to stack other SPI shields. I was forced to use two modules (instead of shields) and to connect them using wires: The connections are: power supply (5V and ground); MOSI (Arduino->Device), PIN 11 MISO (Device->Arduino), PIN 12 CLK (clock), PIN 13 CS (chip select) ->for the SD module PIN 4, for the ENC28J60 modyule PIN 10 The two PINs I chose to be chip select PINs are configured at the top of the sketch: #define SD_CS_PIN 4 #define ETH_CS_PIN 10 Static resources from the SD card To read the SD card, I chose the tinyFAT library instead of the built-in one because it needs less RAM memory. In the setup(), I configure the Arduino PIN connected to the chip select one of the SD module and initialize the library: file.setSSpin(SD_CS_PIN); res = file.initFAT(); When a file is requested, at first the sketch verifies if the file exists on the SD card; if not a 404 error (= file not found) is sent back to the browser: if(!file.exists(filename)) { [...] bfill.emit_p(PSTR("HTTP/1.0 404 Not Found\r\n\r\nNot Found")); If the file exists, it is opened and read using blocks of 512 bytes. Each block is sent (one block => one packet) to the client: res = file.openFile(filename, FILEMODE_BINARY); [...] bytesRead = file.readBinary(); uint8_t* payloadBuffer = ether.tcpOffset(); for(int i = 0; i < bytesRead; i++) payloadBuffer[i] = file.buffer[i]; Default webpage A particular static resource is the default webpage: when you type an Internet address in the browser, the request it sends to the server is simply GET /. The server administrator can define which is the default page that is sent if the incoming request doesn’t include a specific one. In my sketch, the default webpage is defined as a constant: For more detail: SDWebServer – enc28J60 and Arduino (20) ### REMOTE-CONTROL KINETIC SAND TABLE USES A SINGLE ARDUINO There’s nothing fun about a Sisyphean task unless you’re watching one being carried out by someone or something else. In that case, it can be mesmerizing like this Arduino-driven kinetic sand table. Like many of these builds, it all started with an ordinary coffee table from the hacker’s favorite furnitüre store. [NewsonsElectronics] opened it up and added a 3mm-thick board to hold the sand and another to hold the rails and magnets. After designing some pieces to connect the rails and pulleys together, [NewsonsElectronics] let the laser cutter loose on some more 3mm stock. A pair of stepper motors connected to a CNC shield do all of the work, driving around a stack of magnets that causes the ball bearing to trudge beautifully through the sand. Be sure to check out the videos after the break. The first is a nice demonstration, and the second is the actual build video. In the third video, [NewsonsElectronics] explains how they could write the world’s smallest GRBL code to swing this with a single Arduino. Hint: it involves removing unnecessary data from the g-code generated by Sandify. Don’t have a laser cutter? Here’s a sand table built from 3D printer parts. Source: REMOTE-CONTROL KINETIC SAND TABLE USES A SINGLE ARDUINO ### Program your Arduino with an Android device Hi, in this Instructable I want to show you, how you can program your Arduino with your Android device. It is very simple and cheap. Also it allows us to program our Arduino where ever we want, this is usefull for permanently installed Arduino boards, like in light controllers... So lets get started! :) Step 1: Materials and Tools Materials: A USB-A to USB-B cable ( http://www.amazon.de/AmazonBasics-USB-2-0-Kabel-A-... ) A USB-Host cable (OTG cable) ( http://www.amazon.de/USB-OTG-Adapterkabel-Adapter-... ) An Arduino( http://de.farnell.com/ ) 1 LED (for testing) A Android device with Android 4.0.0+ (or with host aviability) Software: ArduinoDroid or ArduinoCommander from the Google Play store Step 2: The USB-Host cable Such a USB-Host cable is basicaly just a USB cable, but just with a few changed resistors in the mikro USB plug. The internal resistors let the Android device activate the USB-Host mode, in this mode you can also use USB-Sticks or other usb applications on the device. That is very useful, now you could plug a usb-printer in. The problem is now, that every USB device which you plug in, will now run on the energy of your device, what realy can bring the akku down. Step 3: Connections This step is very simple and doesn´t require much text. Just plug the USB-A to USB-B cable into the female USB of the Host cable. Then plug the USB-B plug into the Arduino and the Mikro USB into the Android device. Step 4: Arduino power up Now it should look like the connections on the picture. Also your Arduino should now power up and load the last code you uploaded. On my Arduino was the Blink sketch. If it doesn´t power up, check connections. Step 5: The apps Now your Arduino is ready to get coded, but your Android device isnt... Lets change that! Currently there are 2 apps which allow us to work with our Arduino via the Host mode. To get them we have to go to the Play Store, then type into the search bar "Arduino". Now tap on "Apps", now there should be only apps. We want the apps "ArduinoDroid" and "ArduinoCommander". Install them and launch "ArduinoDroid", it has to update the IDE, that will need some time. "ArduinoCommander" should be ready sofortly. Note: We dont need both apps, i just want to show you both! :)   For more detail: Program your Arduino with an Android device ### PICOCORE MX8MM FEATURES I.MX8 MINI AND RUNS LINUX F&S Elektronik Systeme has unveiled its 40 x 35mm “PicoCore MX8MM” module which runs Linux on a quad-A53, 1.8GHz i.MX8 Mini with up to 8GB LPDDR4 and 32GB eMMC plus WiFi/BT, a GbE controller, PCIe, and optional -40 to 85°C support. The PicoCore MX8MM is a i.MX8M variant with lower video resolution, but a faster clock rate. The PicoCore MX8MM has the same 40 x 35mm footprint as other F&S PicoCore models such as the i.MX7-based PicoCore MX7ULP. There are also i.MX6 and i.MX6 UL based PicoCore modules, which like the PicoCore MX8MM feature a Yocto Project-based Linux BSP. The stack includes Buildroot and UBoot. Windows 10 IoT Core will be available by the end of the year, and the i.MX8 Mini’s real-time, Cortex-M4 core supports FreeRTOS. The PicoCore MX8MM features USB 2.0 host and OTG ports and offers 4x UART, 4x I2C, 4x SPI, and 8x PWM. The power feature is listed as “+3.8V bis 5.5VDC,” and runs at 3 Watts. The module incorporates an RTC and is available in both 0 to 70°C and -40 to 85°C variants. Availability for the module extends to 2029. The module supports 1, 2, and 4-core Cortex-A53 configurations of the Mini. The module offers up to 8GB LPDDR4 RAM, which is in contrast to the 1GB LPDDR3 present on the PicoCore MX7ULP. The module offers up to 512MB SLC NAND flash and up to 32GB eMMCflash, with a GbE controller on board along with 802.11ac and Bluetooth 5.0. The PicoCore MX8MM dual 100-pin connectors consist of a subsection of “Interfaces-FIX” pins that are similar to other PicoCore modules. This provides some backward compatibility. The PicoCore MX8MM enables LVDS or 4-lane MIPI-DSI with analog resistive and PCAP touch available via I2C. The analog and digital audio I/O comes in variety, like I2S and S/PDIF, as well as PCIe expansion and MIPI-CSI camera input. Pricing or availability are not provided for the PicoCore MX8MM, but more information should be further revealed soon. PicoCore MX8MM Specifications: SoC – NXP i.MX 8M Mini single, dual, quad core Arm Cortex-A53 @ 1.8 GHz processor, Cortex-M4 real-time core @ 400 MHz, 512KB L2-Cache, 2D/3D GPU System Memory – Up to 8GB LPDDR4 Storage – Up to 512MB SLC NAND flash or up to 32GB eMMC flash Video Decode – 1080p60 HEVC H.265, VP9, H.264, VP8 Connectivity 802.11ac + Bluetooth 5.0 module Atheros AR8035 Gigabit Ethernet transceiver Interfaces via 2x 100-pin board to board connectors 1x external SD Card 10/100/1000Mb Ethernet USB – 1x USB host, 1x USB 2.0 OTG Up to 4x UART, up to 4x I2C, up to 2x SPI Audio – Line In, Line Out, Mic, Headphone,I2S, SPDIF, ESAI, SAI, SSI ADR/ DATA Bus Display LVDS up to Full HD Up to 4-lane MIPI DSI Touch Panel – analog resistive and PCAP touch ext. via I2C Camera analog/digital – MIPI CSI PCIe Up to 8x PWM, Watchdog Supply Voltage – +3.8V bis 5.5VDC Power Consumption – 3W typ. Dimensions – 40 x 35 mm Weight – 10 grams Operating Temperature – 0°C – +70°C; opt. -40°C – +85°C Source: PICOCORE MX8MM FEATURES I.MX8 MINI AND RUNS LINUX ### Pete's Blog If you've poked around the internets where electronics hobbyists collect, it is likely that you are acutely aware of our incontrovertible affinity for building timekeeping clocks.  It is similarly unlikely that you have been able to evade the plenitude of nixie tube based projects.  There is a reason for this. Nixie tubes are cool.  They have great aesthetic appeal with their difficult-to-photograph, warm orange glow, and dem curvy numerals.  They add an organic je ne sais quoi to a hobby with ostensibly digital design cues.  Further, they pose technical challenges in the way of producing and switching the ~175 V DC needed to light each tube element.  And as far as I am aware, there are no new nixie tubes being produced; as such, procurement can be a challenge unto itself.  My N.O.S. nixies came from Russia thru Ebay, and only 3 were duds.  Incidentally the seller replaced those 3, FOC. The strike thru text above results from a tip from +nicholasStock  who points out new nixie tubes ae in fact being produced: http://www.daliborfarny.com/  The linked tubes are really impressive from a technical standpoint as well as asthetics.  They seem to amplify all of the design cues we love about NOS nixies and the results speak for themselves.  Might still be an issue with procurement, however... Fortunately, not all nixie tube clocks are implemented the same.  In fact, look around at all the schematics for nixie clocks, and you will realize there are more permutations in methodology than there are models of nixie tubes.  This is how it should be.  We ( DIY electronics people ) like to put our own spin on things. My version of the Nixie Clock has a few of its own nifty features.  The list includes: Single microcontroller design. Software based RTC. Software driven boost converter for ~175 V DC supply. Time, Date, and behavior configuration via USB Windows application for clock configuration. Time, Date, Temperature, and AC Power line frequency display. For More Details: Pete's Blog ### Palm Arduino Board V3 I design and create this Palm Arduino V3 prototype PCB, as I was tired of recreating Arduino Compatible on perf board every time I prototyping a new project, especially when I had to spend  a lot of time tracing the wiring to see that I made the right connection. I design this Palm Arduino (version 3) prototype PCB to be encased by Lego bricks, especially Lego Technic Bricks, for the reason that I was hooked by the Lego after my first Lego project - R/ C Lego Car. And I am working on a couple projects that are using Lego Technic components with Arduino. (I will post instructables as the project is ready to post.) Also, I want to be able to use Palm Arduino in wide variety fashions. For example I could use either right angle female connectors or straight female connectors. or could use straight power switch or right angle power switch. etc. By doing this, I would facing the challenge of the enclosure designs to fit all of the mentioned criterial, and not very cost effective since we have to make 3D Print for each individual case. For these reason Lego bricks are the best option to be used as the case of Palm Arduino Version 3. Step 1: Schematics and Pin Configurations Palm Arduino and Palm Arduino II Original Palm Arduino and Palm Arduino II, have a straight forward pin configurations. The order of the pin configuration were the same as the order of the pins of ATmega328 micro controller (28 pins) 1   - RESET          28 - A5 (SCL) 2   - D0 (RX)         27 - A4 (SDA) 3   - D1 (TX)          26 - A3 4   - D2                  25 - A2 5   - D3                  24 - A1 6   - D4                  23 - A0 7   - VCC              22 - GND 8   - GND              21 - AREF 9   - XTAL1           20 - AVCC 10 - XTAL2          19 - D13 (SCK) 11- D5                  18 - D12 (MOSI) 12 - D6                 17 - D11 (MISO) 13 - D7                 16 - D10 (SS) 14 - D8                 15 - D9 Both Palm Arduino and Palm Arduino II requires an addition of power regulator (5V and 3.3V). Palm Arduino Version 3 In Palm Arduino Version 3, I used the same pin configuration that I designed for my other Arduino compatible board, RevIO, by grouping the communication ports (I2C, Serial Comm. Ports and SPI) on one side of the board, and leave the rest of the pins (Digitals, and Analogs) line up on the other side of the board sequentially (image 1). I also group the serial comm. pins (TX, RX, VCC, GND) on the rail to to be compatible with the XBee breakout board, such as XB-Buddy Basic Kit,  Adafruit's XBee Adapter Board (ID-126), or Sparkfun's Bluetooth Mate Gold (WRL-09358), etc. Palm Arduino V3, added voltage regulators (5V and 3.3V) circuitry onto the PCB. I designed the Palm Arduino Version 3 to have its dimension compatible with the Lego's modular system. Instead of using an ordinary standoff holes on four corner of the PCB, I added four larger holes that can accommodate the Lego's stud, so the PCB could hold on to the Lego's bricks or plates. Step 2: Design Processes PCB and Case Design Lego Modular System has been in my interest long before I created my first Lego project, R/C Lego Car.  I have been researching on Lego bricks and components for a while, I also build my own Virtual Lego Bricks and Plates, and components according to the real dimensions, now I have good amount of components in my Lego Bricks and Plates library. Since I planned to build Palm Arduino V3, I could use the Virtual Lego Bricks and Plates from my library to good use. First, I design (virtual) Palm Arduino PCB in EagleCAD, using exactly the same components as in my other Arduino compatible board, RevIO. The RevIO PCB is larger than Palm Arduino V3. I planned the layout of Palm Arduino V3 to have the dimension fit with the Lego Modular System, and created the PCB in EagleCAD. Then send the Gerber files to make the sample PCBs (I ordered four of them). After I finished with the PCB layout I created Virtual PCB with CAD program (Autodesk's 3DS Max 8). To make a complete virtual PCB, I also created all the (virtual) electronics components that were necessary in Palm Arduino exactly with the real dimensions. And placed them on the virtual PCB. The silkscreen on the PCB came from the rendered image from PCB fabricator. I used the image as a texture map on the Virtual PCB. To design the case, I imported the necessary Lego Bricks and Plates into the virtual PCB and design the variations of the components configurations and different case styles, as presented in the following Steps.. Major Components in Project78L052 ATMEGA328 For more detail: Palm Arduino Board V3 ### Does your op amp oscillate? We analog designers take great pains to make our amplifiers stable when we design them, but there are many situations that cause them to oscillate in the real world.  Various types of loads can make them sing.  Improperly designed feedback networks can cause instability.  Insufficient supply bypassing can offend.  Finally, inputs and outputs can oscillate by themselves as one-port systems. This article will address common causes of oscillation and their remedies. Some Basics Figure 1a shows the block diagram of a non-rail-to-rail amplifier.  The inputs control the gm block which drives the gain node and is buffered at the output.  The compensation capacitor Cc is the dominant frequency response element.  The return of Cc would go to ground if there were such a pin; however op amps traditionally have no ground and the capacitor current will return to one or both supplies. The input gm’s output current is sent through a “current coupler” that splits the drive current between the output transistors.  Frequency response is dominated by the two Cc /2s, which are effectively in parallel.  These two topologies describe the vast majority of op amps that use external feedback.   For more detail: Does your op amp oscillate? ### Nixie Tube Clock If you've poked around the internets where electronics hobbyists collect, it is likely that you are acutely aware of our incontrovertible affinity for building timekeeping clocks.  It is similarly unlikely that you have been able to evade the plenitude of nixie tube based projects.  There is a reason for this. Nixie tubes are cool.  They have great aesthetic appeal with their difficult-to-photograph, warm orange glow, and dem curvy numerals.  They add an organic je ne sais quoi to a hobby with ostensibly digital design cues.  Further, they pose technical challenges in the way of producing and switching the ~175 V DC needed to light each tube element.  And as far as I am aware, there are no new nixie tubes being produced; as such, procurement can be a challenge unto itself.  My N.O.S. nixies came from Russia thru Ebay, and only 3 were duds.  Incidentally the seller replaced those 3, FOC. The strike thru text above results from a tip from +nicholasStock  who points out new nixie tubes ae in fact being produced: http://www.daliborfarny.com/  The linked tubes are really impressive from a technical standpoint as well as asthetics.  They seem to amplify all of the design cues we love about NOS nixies and the results speak for themselves.  Might still be an issue with procurement, however... Fortunately, not all nixie tube clocks are implemented the same.  In fact, look around at all the schematics for nixie clocks, and you will realize there are more permutations in methodology than there are models of nixie tubes.  This is how it should be.  We ( DIY electronics people ) like to put our own spin on things. My version of the Nixie Clock has a few of its own nifty features.  The list includes: Single microcontroller design. Software based RTC. Software driven boost converter for ~175 V DC supply. Time, Date, and behavior configuration via USB Windows application for clock configuration. Time, Date, Temperature, and AC Power line frequency display. For More Details: Nixie Tube Clock ### Monitor - Thinking Skins using Arduino This project was part of Multimodal Media Madness 2014, hosted by the chair for Computer Aided Architectural Design (CAAD) and the Media Computing Group of RWTH Aachen University. For more Thinking Skins, please check this page: http://hci.rwth-aachen.de/m3_ss14 Given were small shared space containers for 6/8 students, built with the WikiHouse technology. A standard facade panel of 562 x 562mm had to be developed, acommodating useful technology that would make the functionality and the “life” in the shared space better. Sensors and micro-controllers had to be used in order to acomplish this assignment. The Idea of our monitoring panel is to give essential information of the inner conditions of the shared space to the outside. Since numerous small containers are to be spread around campus it was important to outline criteria for choosing which one exactly is suitable for every individual. Occupancy, temperature, noise level and air quality are the most important of them and our panel provides real time information for those. Wireless sensors spread around the shared space communicate constantly to an arduino module. The values are being estimated and simplified information is displayed on the front panel that is embeded in the facade itsself. Step 1: Things you will need Parts: • Arduino Uno (starter kit for the prototype) • 4 meter LPD8806 Digital RGB LED Weatherproof Strip • PCB material (double-sided) • pappel 4mm (Box) and some remains from former jobs • chopper wire (different colors for less confusion) • 3 potentiometer (0.2 inch space between pins) • 4x PSK 254/W3 , 2x /W2, 1x /W4 plug connection • 20x crimp contact • 1x flip switch (on/off switch) • 2x powercables (5V, 1.5 to 3 A each) • 1x power jack RASM 722X • 4x crimp header 2.54mm • 1x2, 1x8, 1x6 pin strip • shrinking hose • wood glue • 1x pin wire Tools: • soldering iron • Laser-cutter • PCB mill • crimp tool • wire stripper • sandpaper The source code and all important files for the PCB milling machine and the laser cutter are provided in my github repository. In addition to those files, you have to download the library for the LED strip first. The Adafruit tutorial page provides a nice overview of how the strip works. Step 2: Design the Panel The MONITOR is a LED-backlit wooden panel with milled symbols in it. A layer of frosted glass separates the wooden front and the LEDs and diffuses their light. Since you could use the technology to display literary ANY information you first need to design the front panel and the alignment of the shining symbols. Note: Do that AFTER you get your hands on the LED strip since the pieces have certain dimentions that you can not overlap when it comes to positioning. When you know the exact dimentions of the LED pieces you could start positioning the symbols. In our case we used Nemetschek Allplan for the CAD drawings. There are of course free CAD alternatives here. Our panel has 4 info groups describing the conditions in the shared space room - temperature, noise level, occupancy and air quality. Step 3: Understanding the LEDs After installing the Arduino IDE and libraries, you can start with connecting the strip to the Arduino Uno as follows. Every 5 meter of the strip comes with a male connector with 4 pins, Ground (GND), 5 Volt input (5V), Data input (DI) and Clock input (CI). Connect 5V and GND to the corresponding pins on your Arduino. For now, connect DI to digital pin 2 and CI to digital pin 3. If you have set up your IDE correctly, you can open an example for the LPD8806 strip with File -> Examples -> LPD8806 -> Strandtest. Compile and upload the program. (Hint: Change the nLEDs variable from 32 to your number of LEDs). For the layout of the facade you need to separate the strip after every pair of LEDs in order to achieve the necessary distance between the segments for temperature, seats and air. First you have to cut it and then solder it back together with the desired length.I use red for 5V, black for GND, green for DI and yellow for CI. Once you fixed the LEDs on the cardboard and cut out your preferred front-face you are almost done. Make sure to separate the LEDs that belong to the different symbols with cardboard stripes so that a chairs’ LED wont shine through a temperature bar symbol. To achieve a smooth and diffuse illumination you can use cartridge paper. Step 4: Fake Data To make sure that your LED design works you could fake some sensor data and let the panel shine. You will need the Arduino starter kit. the LPD8806 and of course the cardboard with the LEDs. To fake the sensor values use three potentiometers for the occupancy, temperature and the air quality. Use random values for the loudness. Connect the potentiometers via a breadboard to the Arduino as shown in the picture. Open the monitor.ino file and load it to the Arduino. You should be able to control the temperature, seats and air values. Step 5: The Circuit Boards To make everything smaller and more compact you could make your own halfshield for the Arduino. For constructing the halfshield as well as the circuit board for the potentiometers and the flip switch you have to install Eagle and open the Halfshield.sch file (or PotiBoard.sch for the potentiometer). More important is the access to a PCB milling machine. Be sure you use both sided circuit boards for the halfshield. I recommend to start with soldering the vias by using the ends of a normal resistor shown in the pictures. Continue with the pin strips, the power jack and the plug connections. If this is the first time you use a soldering iron, I recommend to watch some tutorials. The board for the potentiometer only needs one side of copper. Solder the 3 potentiometers, the plug connection and the female headers to the board as you can see in the picture.   For more detail: Monitor - Thinking Skins using Arduino ### MOKEYLASER: A DIY LASER ENGRAVER THAT YOU CAN EASILY BUILD [Mark aka Mokey] borrowed his friend’s open-frame laser engraver for a while, and found it somewhat lacking in features and a bit too pricey for what it was. Naturally, he thought he could do better (video, embedded below.) After a spot of modelling in Fusion 360, and some online shopping at the usual places, he had all the parts needed to construct an X-Y bot, and we reckon it looks like a pretty good starting point. [Mark] had a Sainsmart FL55 5.5W laser module kicking around, so that was dropped into the build, together with the usual Arduino plus CNC shield combo running GRBL. [Mark] has provided the full F360 source (see the mokeylaser GitHub) and a comprehensive bill-of-materials, weighing in at about $400, and based upon the usual 2040 aluminium extrusions. This makes MokeyLaser a reasonable starting point for further development. Future plans include upgrading the controller to something a bit more modern (and 32-bits) as well as a more powerful laser (we do hope he’s got some proper laser glasses!) and adding air assist. In our experience, air assist will definitely improve matters, clearing out the smoke from the beam path and increasing the penetration of the laser significantly. We think there is no need for more optical power (and greater risk) for this application. [Mark] says in the video that he’s working on an additional build video, so maybe come by later and check that out? Obviously, MokeyLaser is by no means the only such beast we’ve featured, here’s the engravinator for starters. For even more minimalism, we covered a build with some smart optics doing all the work. But what if you don’t happen to have a 5W laser module “lying around” then perhaps try a more natural heat source instead? Source: MOKEYLASER: A DIY LASER ENGRAVER THAT YOU CAN EASILY BUILD ### MOKEYLASER: A DIY LASER ENGRAVER THAT YOU CAN EASILY BUILD [Mark aka Mokey] borrowed his friend’s open-frame laser engraver for a while, and found it somewhat lacking in features and a bit too pricey for what it was. Naturally, he thought he could do better (video, embedded below.) After a spot of modelling in Fusion 360, and some online shopping at the usual places, he had all the parts needed to construct an X-Y bot, and we reckon it looks like a pretty good starting point. [Mark] had a Sainsmart FL55 5.5W laser module kicking around, so that was dropped into the build, together with the usual Arduino plus CNC shield combo running GRBL. [Mark] has provided the full F360 source (see the mokeylaser GitHub) and a comprehensive bill-of-materials, weighing in at about $400, and based upon the usual 2040 aluminium extrusions. This makes MokeyLaser a reasonable starting point for further development. Future plans include upgrading the controller to something a bit more modern (and 32-bits) as well as a more powerful laser (we do hope he’s got some proper laser glasses!) and adding air assist. In our experience, air assist will definitely improve matters, clearing out the smoke from the beam path and increasing the penetration of the laser significantly. We think there is no need for more optical power (and greater risk) for this application. [Mark] says in the video that he’s working on an additional build video, so maybe come by later and check that out? Obviously, MokeyLaser is by no means the only such beast we’ve featured, here’s the engravinator for starters. For even more minimalism, we covered a build with some smart optics doing all the work. But what if you don’t happen to have a 5W laser module “lying around” then perhaps try a more natural heat source instead? Source: MOKEYLASER: A DIY LASER ENGRAVER THAT YOU CAN EASILY BUILD ### Minimal Arduino-based wavetable synth Multiple synthesizer projects have been done for the Arduino, but few have been able to utilize the full power of the Arduino processor. DZL from GeekPhysical wrote a 4 voice wavetable synthesizer that is one of the more advanced software based synths for the Arduino.  It has wavetables included (sine, saw, square and triangle) and envelopes to create beats.This instructable will show you how to make a simple sequencer that plays a little melody. You can hear how it sounds here: It is up to you to modify the code to do many other things. Possible examples could be a midi controlled synth (sample code included), it could be a strange noise machine like this one:   For more detail: Minimal Arduino-based wavetable synth ### Mini BillBoard Designing a Mini BillBoard using LED Lights(different colors) , Arduino and Bread Board. Thought of creating a mini billboard, that could display my name ("Josh") . This is for one of the build nights (required us to use LED lights). This billboard would blink in out josh several times just like any big billboard. Here is a link to the video of the project Mini BillBoard . Follow me on twitter @SJTGs Step 1: Tools Needed for This Project Tools needed for this project : Two Bread Boards LED lights with different Colors 220Ω Resistors Jumper Wires Card Box optional Arduino uno Power source (Laptop or 5v adapter) All the mentioned tools are basic need for the project to work. Step 2: Connecting the Dots This step will require you to connect the LED lights to the board. I connect mine in form of letters. Next connect the 220Ω Resistors as shown in the above image. Connecting the jumper wires to the board. This will provide connection between the Arduino to the bread board. Connect one of the jumper wires to the GND (negative) and the one of the positive like that in the diagram The above diagram shows how the cables and tools need to be connected. If you are unclear ask!!!!!!! Step 3: the Source Code This part of the step will require the user to input in the source code to make the the mini billboard work. I have include the source needed for this project. This code is self explanatory. Read more: Mini BillBoard ### Mini BillBoard using Arduino Designing a Mini BillBoard using LED Lights(different colors) , Arduino and Bread Board. Thought of creating a mini billboard, that could display my name ("Josh") . This is for one of the build nights (required us to use LED lights). This billboard would blink in out josh several times just like any big billboard. Here is a link to the video of the project Mini BillBoard . Follow me on twitter @SJTGs Step 1: Tools needed for this project Tools needed for this project : Two Bread Boards LED lights with different Colors 220Ω Resistors Jumper Wires Card Box optional Arduino uno Power source (Laptop or 5v adapter) All the mentioned tools are basic need for the project to work. Step 2: Connecting the Dots This step will require you to connect the LED lights to the board. I connect mine in form of letters. Next connect the 220Ω Resistors as shown in the above image. Connecting the jumper wires to the board. This will provide connection between the Arduino to the bread board. Connect one of the jumper wires to the GND (negative) and the one of the positive like that in the diagram The above diagram shows how the cables and tools need to be connected. If you are unclear ask!!!!!!!   For more detail: Mini BillBoard using Arduino ### Making Music with Makeblock Makeblock is an aluminum extrusion based construction system that provides an integrated solution for aspects of mechanics, electronics and software design. With Makeblock you can make professional robots, toy machines or even art-ware. It's super easy-to-use and helps bring your creations to life. The only limit is your imagination. For more information, please visit Makeblock website listed below: www.makeblock.cc The Music Robot was built with the timing belt, sliding rail, step motor, electromagnet, motor driver and an Arduino Uno. And even you can build a play the piano robot with Makeblock by yourself. So far the robot can be controlled by application via USB cable installed on computer, and it can also be controlled by the Smartphone through the Bluetooth. The special application for Android Phone is in planning. Getting Started This instructable, Making Music with Makeblock, will show you the step-by-step instructions on how to build a robot to play the Xylophone by Makeblock. Now let's have some fun! Step 1: Materials list Major Components in Project Materials list: 1 × Beam 0808-144 3 × Beam 0824-64 7 × Beam 0824-80 4 × Beam 0824-96 1 × Beam 0824-128 4 × Bracket 3×3 1 × Bracket P3 1 × Step Motor Bracket 2 × Timing Pulley 90T 4 × Timing Pulley Slice 90T 1 × Link Rod 1 × Rubber band 2 × Slider 496 1 × Timing Belt 8 × Bearing for Slider 4 × Flange Bearing 4×8×3mm 1 × Shaft Connector 4mm 2 × Threaded Shaft 4×31mm 2 × Shaft Collar 4mm 2 × Headless Screw M3×5 2 × Copper Stud M4-15 12 × Plastic Rivet R4120 4 × Plastic Rivet R3075 2 × Countersunk Screw M3×8 14 × Screw M4×8 49 × Screw M4×14 8 × Screw M4×22 26 × Nut M4 Electronic Modules List: 1 × Arduino 1 × Acrylic Arduino Bracket 1 × Me – Motor Driver 1 × Limit Switch 1 × Step Motor 1 × Step Motor Controller 1 × Solenoid – 12v 1 × Wall Adapter Power Supply – 12VDC Jumper Wires Xylophone: 1 × Xylophone 1 × Xylophone Hammer Step 2: Tools  Tools 1.5mm Hexagonal Screwdriver 3mm Hexagonal Screwdriver Cross Screwdriver Slotted Screwdriver Pincer Pliers Scissors Glue Gun Adhesive Tape Step 3: Driven Pulley Holder Materials List: 3 × Beam 0824-80 2 × Beam 0824-96 1 × Bracket 3×3 1 × Timing Pulley 90T 2 × Timing Pulley Slice 90T 4 × Plastic Rivet R4120 2 × Flange Bearing 4×8×3mm 1 × Threaded Shaft 4×31mm 1 × Shaft Collar 4mm 1 × Headless Screw M3×5 2 × Screw M4×8 1 × Nut M4 10 × Screw M4×14 Procedure: 1. Install the Beam 0824-80 on Beam 0824-96 by using a Screw M4×14. 2. Install the other 3 Screw M4×14. 3. Install another Beam 0824-80 on Beam 0824-96 with 4 Screw M4×14. 4. Install the Beam 0824-80 on Beam 0824-96 to make a Driven Pulley Holder. 5. Install the Bracket 3×3 on Beam 0824-96 with 2 Screw M4×8. 6. Put a Timing Pulley Slice 90T on the Timing Pulley 90T. 7. Insert a Plastic Rivet R4120 into the holes on the Timing Pulley Slice 90T and the Timing Pulley 90T. 8. Insert the other 3 Plastic Rivet R4120. 9. Turn over the Timing Pulley Slice 90T and the Timing Pulley 90T. 10. Put the other Timing Pulley Slice 90T on the Timing Pulley 90T. 11. Press the Plastic Rivet R4120. 12. Insert the Threaded Shaft 4×31mm into the Flange Bearing 4×8×3mm. 13. Insert the Threaded Shaft 4×31mm with the Flange Bearing 4×8×3mm into the Timing Pulley 90T. 14. Insert the other Flange Bearing 4×8×3mm into the Timing Pulley 90T. 15. Put the Shaft Collar 4mm on the Threaded Shaft 4×31mm. 16. Insert a Headless Screw M3×5 into the Shaft Collar 4mm. 17. Install the Driven Pulley on the holder. Step 4: Cut Link Rod Materials list: 1 × Link Rod Procedure: Cut the Link Rod by using the Pincer Pliers. Step 5: Slider Device and Music Play Arm Materials List: 1 × Beam 0808-144 1 × Beam 0824-64 2 × Beam 0824-80 2 × Bracket 3×3 1 × Bracket P3 8 × Bearing for Slider 2 × Flange Bearing 4×8×3mm 1 × Threaded Shaft 4×31mm 1 × Shaft Collar 4mm 1 × Headless Screw M3×5 2 × Copper Stud M4-15 1 × Link Rod 5 × Screw M4×8 9 × Screw M4×14 8 × Screw M4×22 22 × Nut M4 1 × Solenoid - 12v Procedure: 1. Insert the Screw M4×22 into the Bearing for Slider. 2. Insert the other 3 Screw M4×22 into the Bearing for Slider. 3. Insert and tighten Nut M4 per screw. 4. Insert the 4 Screw M4×22 with Bearing for Slider and Nut M4 into the Beam 0824-64. 5. Insert and tighten Nut M4 per screw on the Beam 0824-64. 6. Do the same as 1~5 discribe to install another Slider Device. 7. Insert 2 Screw M4×14 into the Beam 0824-64 to install it on the Slider Device. 8. Insert 2 Screw M4×14 into the Bracket 3×3 and the Beam 0824-64 to install them on the other Slider Device. 8. Insert 2 Screw M4×14 into the Bracket 3×3 and the Beam 0824-64 to install them on the other Slider Device. 9. Install 2 Copper Stud M4-15 on the Beam 0824-64 by 2 Screw M4×14. 10. Put the Solenoid - 12v on the Beam 0824-64 next to the Copper Stud M4-15. 11. Use the Link Rod and 2 Screw M4×14  to fix the Solenoid on the Beam 0824-64. 12. Insert the Flange Bearing 4×8×3mm into the Bracket P3. 13. Insert the Threaded Shaft 4×31mm into the other Flange Bearing 4×8×3mm. 14. Insert the Threaded Shaft 4×31mm with the Flange Bearing 4×8×3mm into the Bracket P3. 15. Put the Shaft Collar 4mm on the Threaded Shaft 4×31mm. 16. Insert a Headless Screw M3×5 into the Shaft Collar 4mm. 17. Tie the electromagnet core of the Solenoid - 12v to the Beam 0808-144 by Iron Wire. 18. Install the Rubber Band into the Bracket 3×3. 19. Install the Music Play Arm on the the Bracket 3×3. 20. Insert a Screw M4×14 into the Beam 0808-144 with a Nut M4. 21. Connect the Bracket 3×3 and the Beam 0808-144 by the Rubber Band. 22. Install the other Bracket 3×3 on the Bracket P3. Step 6: Step motor and electronic modules Holder Materials List: 2 × Beam 0824-64 2 × Beam 0824-80 2 × Beam 0824-96 1 × Beam 0824-128 1 × Bracket 3×3 2 × Screw M4×8 1 × Limit Switch 16 × Screw M4×14 Procedure: 1. Install the Beam 0824-64 on Beam 0824-96 by using a Screw M4×14. 2. Install the other 3 Screw M4×14. 3. Install another Beam 0824-64 on Beam 0824-96 with 4 Screw M4×14. 4. Install the Beam 0824-128 on Beam 0824-96 with 4 Screw M4×14. 5. Use the Glue Gun to install the Limit Switch on the Bracket 3×3. 6. Install the Bracket 3×3 with the Limit Switch on Beam 0824-64. 7. Install the Beam 0824-80 on Beam 0824-64 to make the Step Motor Holder. 8. Install another Beam 0824-80 on Beam 0824-128 to make the Electronic Modules Holder. Step 7: Install to the Slider Materials List: 2 × Slider 496 8 × Screw M4×14 Procedure: 1. Install the Slider Device to the Slider. 2. Install the Driven Pulley Holder to the Slider. 3. Install the Step Motor and Electronic Modules Holder to the Slider.   For more detail: Making Music with Makeblock ### How to Make a Makeblock Music Robot with the Music Robot Kit(NEW) Makeblock is an aluminum extrusion based construction system that provides an integrated solution for aspects of mechanics, electronics and software design. With Makeblock you can make professional robots, toy machines or even art-ware. It's super easy-to-use and helps bring your creations to life. The only limit is your imagination. For more information, please visit Makeblock website here. The Music Robot was built with the timing belt, sliding rail, step motor, electromagnet, motor driver and an Arduino Uno. And even you can build a play the piano robot with Makeblock by yourself. So far the robot can be controlled by application via USB cable installed on computer, and it can also be controlled by the Smartphone through the Bluetooth. The special application for Android Phone is in planning. Getting Started This instructable, Making Music with Makeblock, will show you the step-by-step instructions on how to build a robot to play the Xylophone by Makeblock. Now let's have some fun! Step 1: Materials list Materials list: 1 × Beam 0808-80 1 × Beam 0808-128 3 × Beam 0824-64 5 × Beam 0824-80 7 × Beam 0824-96 1 × Beam 0824-128 1 × Plate 7x9 1 × Bracket 3×6 4 × Bracket 3×3 1 × Step Motor Bracket 2 × Timing Pulley 90T 4 × Timing Pulley Slice 90T 1 × Link Rod 2 × Slider 496 1 × Timing Belt 2m 8 × V-slot Bearing 4 × Flange Bearing 4×8×3mm 1 × Shaft Connector 4mm 2 × Threaded Shaft 4×31mm 2 × Shaft Collar 4mm 5 × Headless Screw M3×5 15 × Plastic Rivet R4120 4 × Plastic Rivet R3075 20 × Plascic Ring 4x7x2mm 10 × Plastic Ring 4x8x1mm 4 × Countersunk Screw M3×8 15 × Screw M4×8 50 × Screw M4×14 10 × Screw M4×22 20 × Nut M4 20 × Nylon Lock Nut 4mm 1 × Cross Screwdriver 1 × Screwdriver 3mm 2 × Screwdriver 1.5mm 5 × Nylon Cable Ties Electronic Modules List: 1 × Meduino 1 × Acrylic Arduino Bracket 1 × Me-BaseShield 1 × Solenoid-12V 1 × Stepper Motor 1 × Me-Stepper Motor Driver 1 × Me-Limit Switch 1 × USB Cable 2 × 6P6C cable 20cm 1 × Wall Adapter Power Supply - 12VDC Xylophone: 1 × Xylophone 1 × Xylophone Hammer Step 2: Tools Tools: 1.5mm Hexagonal Screwdriver 3mm Hexagonal Screwdriver Cross Screwdriver Slotted Screwdriver Pincer Pliers Scissors Glue Gun Adhesive Tape Step 3: Driven Pulley Holder Major Components in Project Materials List: 3 × Beam 0824-80 2 × Beam 0824-96 1 × Bracket 3×3 1 × Timing Pulley 90T 2 × Timing Pulley Slice 90T 4 × Plastic Rivet R4120 2 × Flange Bearing 4×8×3mm 1 × Threaded Shaft 4×31mm 1 × Shaft Collar 4mm 1 × Headless Screw M3×5 2 × Screw M4×8 1 × Nut M4 10 × Screw M4×14 Step 4: Cut Link Rod Materials list: 1 × Link Rod Procedure: Cut the Link Rod by using the Pincer Pliers.   For more detail: How to Make a Makeblock Music Robot with the Music Robot Kit(NEW) ### Make A G Meter using Arduino I have a late 80's VW and the gauge cluster has 5 dummy LED locations underneath the other warning lights.  Well I was tired of the m not doing anything, so I decided to do something about it.  I came up with the idea to put a lateral gravitational force mater (G Meter)  in there place Step 1: Gather up the needed supplies If you wish to use your Arduino: 1- Arduino 5- RedGrenBlue LEDs (Mine are common anode) 1- Project box (if you don't want it in your dash) 1- 9v Battery 1- Accelerometer (I used ADXL 335 from Adafruit)   http://www.adafruit.com/products/163 1- piece of Perf board 5- Resistors 1K ohm 5- Resistors 500 ohm And some small wires for jumpers. All parts needed if you wish to make it standalone: 1 -Circuit Board 1- ATmega168/328 1- 28 Pin socket 5- RGB LEDs (Mine were common anode) 5-Resistors 1K ohm 5-Resistors 500 ohm 1- 16MHZ Resonator 1- 104 cap 1- 10uf cap 1- 3.3v rg. (LM1117T) 1- ribbon cable 1- header connectors 1- Acceleromoter 1- 9v Batt. Connector Here is the picture of the wiring needed for a breadboard setup. The orange wires hook to the 500 ohm resistors and then hook to the RED LED cathode. The Green wires hook to 1kohm resistor the hook to the GREEN LED cathode. The common anode is hooked to +3.3v X axis output of ADXL335 goes to PIN 0  (Picture is slightly different) +3.3v and Gnd are hooked to power and ground pins of ADXL335 The AREF pin on the Arduino is hooked to +3.3v Step 2: Because I used COMMON ANODE LEDs:"digitalWrite(led1G, HIGH);"    turns the LEDs to OFF not ON. If you use common cathode you will need to change the code.If you wish to change the pin number just change the beginning of the code:int led1G = 2; int led1R = 3; int led2G = 4; int led2R = 5; int led3G = 6; int led3R = 7; int led4G = 8; int led4R = 9; int led5G = 10; int led5R = 11; int X_AXIS = 0; For more detail: Make A G Meter Using Arduino   ### LTC Design Note: Inverting DC/DC controller converts a positive input to a negative output with a single inductor There are several ways to produce a negative voltage from a positive voltage source, including using a transformer or two inductors and/or multiple switches. However, none are as easy as using the LTC3863, which is elegant in its simplicity, has superior efficiency at light loads and reduces parts count compared to alternative solutions. Advanced Controller Capabilities The LTC3863 can produce a –0.4V to –150V negative output voltage from a positive input range of 3.5V to 60V. It uses a single-inductor topology with one active P-channel MOSFET switch and one diode. The high level of integration yields a simple, low parts-count solution. The LTC3863 offers excellent light load efficiency, drawing only 70μA quiescent current in user-programmable Burst Mode operation. Its peak current mode, constant frequency PWM architecture provides positive control of inductor current, easy loop compensation and superior loop dynamics. The switching frequency can be programmed from 50kHz to 850kHz with an external resistor and can be synchronized to an external clock from 75kHz to 750kHz. The LTC3863 offers programmable soft-start or output tracking. Safety features include overvoltage, overcurrent and short-circuit protection, including frequency foldback. –5.2V, 1.7A Converter Operates from a 4.5V to 16V Source The circuit shown in Figure 1 produces a –5.2V, 1.7A output from a 4.5V–16V input. Operation is similar to a flyback converter, storing energy in the inductor when the switch is on and releasing it through the diode to the output when the switch is off, except that with the LTC3863, no transformer is required. To prevent excessive current that can result from minimum on-time when the output is short-circuited, the controller folds back the switching frequency when the output is less than half of nominal. FOr More Details: LTC Design Note: Inverting DC/DC controller converts a positive input to a negative output with a single inductor ### Internet Devices for Home Automation This instructable shows the principles involved in making devices to control home automation over the internet. We're going to construct a device (or several of them), that talk to each other over the internet to control lights, motors for curtains/blinds, power sockets etc. In contrast to devices controlled from a web browser or phone, these are designed to be simple, Arduino based devices that are capable of talking to each other bi-directionally. They may be in the same house or in different buildings and may have one way communication (e.g. a light switch and light) or two way (e.g. an automation controller). It's possible to have local Device/Relay combinations to control Mains socket power to TVs, Computers etc.. Also you could see this working in building control. Commercial examples that work over local or proprietary interfaces are : Clipsal C-Bus, X10, Bus-SCS. The Picture shows an example of what we're trying to achieve using the commercial C-Bus devices as an example. (http://en.wikipedia.org/wiki/File:CBus_Wiring.gif). But in our case the C-Bus is replaced by the Internet or a Local Network. Practically speaking, it would make most sense to have one device per room with several switches, sensors and possibly low-voltage motors wired into it, and one device at the distribution board controlling relays or dimmers. A major factor in Energy Waste is having Lights on too brightly during periods when a room is adequately lit from Natural Light. Adding a Light Sensor Device in a Room with a Dimmable Light Device significantly increases Energy Efficiency by controlling the Room Light in response to the sensed light in the room. ========== By the way. If you like this Instructable, you might also like: Digital Thermometer for your Home: http://www.instructables.com/id/An-Arduino-Thermometer-with-Digital-Display/ Internet-Radio: http://www.instructables.com/id/Arduino-Raspberry-Pi-Internet-Radio/ Make your own "Wii-Remote" like control of a PC Flight Simulator http://www.instructables.com/id/Flight-Simulator-with-Arduino-and-Python/ ========== Step 1: You Will Need For each Device you will need: * An Arduino (Uno) * An Ethernet shield (or Wifi)To prototype: * A breadboard * Some LEDs, Wires and Switches For Mains Control: * A Mains Relay Arduino Shield (e.g. http://www.dfrobot.com/index.php?route=product/product&product_id=496) We won't be covering the Mains Control because it's covered in lots of  tutorials and there are a lot of shields available. Step 2: Prototyping the Arduino Internet Device We'll be concentrating on the principles of the Device itself. To do that we'll be prototyping it with LEDs and Switches. Once the Arduinos are talking and controlling LEDs, making it work with Mains Relay shields and motor shields is straight forward. We're going to construct a device with switches and LEDs, and we'll connect 2 of them over Ethernet. That way we'll be protoyping both the Switch function and the Light Control function at the same time and demonstrating bi-directional comm's. For many Devices we should connect them via a Router. If we only have 2 devices (as we do here) then we can connect them to each other. The Ethernet IC takes care of the required Crossover. We need to give some thought to how one device knows the address of the device it wants to communicate with. Here's how we'll approach it: Each Device has its own static-IP address. Each Device "knows" which device it wants to talk to. Therefore we can hard-code the Static-IP address of the destination device in the Arduino Code of the Transmitting Device. Not the most elegant solution. But completely practical. Step 3: Connect the Circuit Build an example Device as shown in the diagrams. In fact, build two of them. We'll need one to talk to the other. Each Device consists of: 1. An Arduino (Uno) 2. An Ethernet Shield 3. An LED and Resistor to represent an Output Light. 4. Two Switches to represent an ON/OFF  Switch panel or UP/DN Dimmer (for example). Once you've built them plug both into your PC USB for programming. Plug an Ethernet cable from Device 1 to Device 2 (the crossover is taken care of in the Ethernet Shield).   For more detail: Internet Devices for Home Automation ### Internet Devices for Home Automation using Arduino This instructable shows the principles involved in making devices to control home automation over the internet. We're going to construct a device (or several of them), that talk to each other over the internet to control lights, motors for curtains/blinds, power sockets etc. In contrast to devices controlled from a web browser or phone, these are designed to be simple, Arduino based devices that are capable of talking to each other bi-directionally. They may be in the same house or in different buildings and may have one way communication (e.g. a light switch and light) or two way (e.g. an automation controller). It's possible to have local Device/Relay combinations to control Mains socket power to TVs, Computers etc.. Also you could see this working in building control. Commercial examples that work over local or proprietary interfaces are : Clipsal C-Bus, X10, Bus-SCS. The Picture shows an example of what we're trying to achieve using the commercial C-Bus devices as an example. (http://en.wikipedia.org/wiki/File:CBus_Wiring.gif). But in our case the C-Bus is replaced by the Internet or a Local Network. Practically speaking, it would make most sense to have one device per room with several switches, sensors and possibly low-voltage motors wired into it, and one device at the distribution board controlling relays or dimmers. A major factor in Energy Waste is having Lights on too brightly during periods when a room is adequately lit from Natural Light. Adding a Light Sensor Device in a Room with a Dimmable Light Device significantly increases Energy Efficiency by controlling the Room Light in response to the sensed light in the room. ========== By the way. If you like this Instructable, you might also like: Digital Thermometer for your Home: http://www.instructables.com/id/An-Arduino-Thermometer-with-Digital-Display/ Internet-Radio: http://www.instructables.com/id/Arduino-Raspberry-Pi-Internet-Radio/ Make your own "Wii-Remote" like control of a PC Flight Simulator http://www.instructables.com/id/Flight-Simulator-with-Arduino-and-Python/ ========== Step 2: Prototyping the Arduino Internet Device We'll be concentrating on the principles of the Device itself. To do that we'll be prototyping it with LEDs and Switches. Once the Arduinos are talking and controlling LEDs, making it work with Mains Relay shields and motor shields is straight forward. We're going to construct a device with switches and LEDs, and we'll connect 2 of them over Ethernet. That way we'll be protoyping both the Switch function and the Light Control function at the same time and demonstrating bi-directional comm's. For many Devices we should connect them via a Router. If we only have 2 devices (as we do here) then we can connect them to each other. The Ethernet IC takes care of the required Crossover. We need to give some thought to how one device knows the address of the device it wants to communicate with. Here's how we'll approach it: Each Device has its own static-IP address. Each Device "knows" which device it wants to talk to. Therefore we can hard-code the Static-IP address of the destination device in the Arduino Code of the Transmitting Device. Not the most elegant solution. But completely practical. Step 3: Connect the Circuit Build an example Device as shown in the diagrams. In fact, build two of them. We'll need one to talk to the other. Each Device consists of: 1. An Arduino (Uno) 2. An Ethernet Shield 3. An LED and Resistor to represent an Output Light. 4. Two Switches to represent an ON/OFF  Switch panel or UP/DN Dimmer (for example). Once you've built them plug both into your PC USB for programming. Plug an Ethernet cable from Device 1 to Device 2 (the crossover is taken care of in the Ethernet Shield). Major Components in ProjectFor each Device you will need: * An Arduino (Uno) * An Ethernet shield (or Wifi) To prototype: * A breadboard * Some LEDs, Wires and Switches For Mains Control: * A Mains Relay Arduino Shield (e.g. http://www.dfrobot.com/index.php?route=product/product&product_id=496) We won’t be covering the Mains Control because it’s covered in lots of  tutorials and there are a lot of shields available For more detail: Internet Devices for Home Automation using Arduino ### iAndroidRemote - Control Android mobile using an Apple Remote I love to integrate devices which are not supposed to be integrated and this guide shows you how you can control an Android mobile using Apple’s Remote. (Who said Apple devices work only with Apple products ;) ) Also this is my entry to the Sparkfun microcontroller context. If you like this guide, please do vote for me. (Voting starts from Feb 14th) Basic Architecture This is the basic architecture of how we will be setting up different pieces so that they can talk to each other. Apple Remote -> IR Receiver -> Arduino -> Bluetooth Shield -> Amarino -> Android Step 1: What do you need Libraries used IR Remote Amarino Programming Skills Basic Arduino programming Basic Android programming skill (Optional) Step 2: Arduino Arduino - Connecting the IR Receiver The first step is to connect the IR Receiver to Arduino. The IR Receiver has three legs (Vcc, Gnd and signal). Connect the Vcc pin of IR Receiver to Arduino’s Vcc pin Connect Gnd pin of IR Receiver to Gnd pin in Arduino Connect the signal pin of IR Receiver to Arduino digital pin 11 Arduino - Code The next step is to write the code in Arduino called as sketch. The code should do the following Read the signal from IR Receiver Identify the button that was pressed Send the button code using Bluetooth Arduino - Libraries In order to do the above steps, we will be using the following two libraries. IR Remote This library allows us to identify which button was pressed by reading the signal from IR Receiver. Download the library from its home page and copy it to your Arduino library folder. Amarino This library allows us to connect Arduino and Android using Bluetooth. Download the library from its home page and copy it to your Arduino library folder. Create a new Arduino sketch and copy the below code. You can also download the code from the github page . #include #include #include int IR_PIN = 11; // IR Receiver Pin const long Plus = 2011254788; const long Next = 2011258884; const long Minus = 2011246596; const long Prev = 2011271172; const long Center = 2011275268; const long Menu = 2011283460; MeetAndroid meetAndroid; IRrecv irrecv(IR_PIN); decode_results results; void setup () { Serial.begin(115200); irrecv.enableIRIn(); // Start the receiver } void loop() { meetAndroid.receive(); // you need to keep this in your loop() to receive events if (irrecv.decode(&results)) { // if an IR signal is obtained from IR receiver if (results.value == Plus) { meetAndroid.send("Plus"); } if (results.value == Minus) { meetAndroid.send("Minus"); } if (results.value == Next) { meetAndroid.send("Next"); } if (results.value == Prev) { meetAndroid.send("Prev"); } if (results.value == 2011275268) { meetAndroid.send("Center"); } if (results.value == Menu) { meetAndroid.send("Menu"); } irrecv.resume(); // Receive the next value } } After creating the Arduino sketch compile and upload it to your board. Once it is uploaded you should disconnect the USB to serial cable which connects the Arduino to the computer. Arduino - Connecting Bluetooth shield The next setup is to connect the Bluetooth shield to Arduino. Please note that before you connect the Bluetooth you should disconnect the computer USB to Arduino cable, otherwise it will not work. The Bluetooth shield has 6 pins and it should be connected like how it is explained below. Connect the Vcc Pin of Bluetooth shield to Arduino’s Vcc pin Connect the Gnd Pin of Bluetooth shield to Arduino’s Gnd Connect the Rx (Receiver) pin of Bluetooth shield to Tx (Transmitter) pin of Arduino. Connect the Tx (Transmitter) pin of Bluetooth shield to Rx (Receiver) pin of Arduino. Short the CTS -1 and RTS -0 Pin of Bluetooth shield. Major Components in ProjectArduino Board (Either Uno or Duemilanove) Arduino Bluetooth Shield IR Receiver Apple Remote Android Phone For more detail: iAndroidRemote - Control Android mobile using an Apple Remote ### HOW TO TIME DRONE RACES WITHOUT TRANSPONDERS Drone racing is nifty as heck, and a need all races share is a way to track lap times. One way to do it is to use transponders attached to each racer, and use a receiver unit of some kind to clock them as they pass by. People have rolled their own transponder designs with some success, but the next step is ditching add-on transponders entirely, and that’s exactly what the Delta 5 Race Timer project does. The open-sourced design has a clever approach. In drone racing, each aircraft is remotely piloted over a wireless video link. Since every drone in a race already requires a video transmitter and its own channel on which to broadcast, the idea is to use the video signal as the transponder. As a result, no external hardware needs to be added to the aircraft. The tradeoff is that using the video signal in this way is trickier than a purpose-made transponder, but the hardware to do it is economical, accessible, and the design is well documented on GitHub. The hardware consists of RX508 video receiver PCBs modified slightly to enable them to communicate over SPI. Each RX508 is attached to its own Arduino, which takes care of low-level communications. The Arduinos are themselves connected to a Raspberry Pi over I2C, allowing the Pi high-level control over the receivers while it serves up a web-enabled user interface. As a bonus, the Pi can do much more than simply act as a fancy stopwatch. The races themselves can be entirely organized and run through the web interface. The system is useful enough that other projects using its framework have popped up, such as the RotorHazard project by [PropWashed] which uses the same hardware design. While rolling one’s own transponders is a good solution for getting your race on, using the video transmission signal to avoid transponders entirely is super clever. The fact that it can be done with inexpensive, off the shelf hardware is just icing on the cake. Source:HOW TO TIME DRONE RACES WITHOUT TRANSPONDERS ### Hookup an LCD to an Arduino Adding an LCD display to Arduino projects can add real value but the cost of doing so can be significant. Not a financial cost - you can pick up 16 (characters) x 2 (rows) LCD for as little as £3.50. The cost is the pin count it can take to drive them. Using the built-in LiquidCrystal Display library it can take as many as 6 pins! That does not leave much for your sensors, motors and other components. There are many projects that discuss using alternatives - such as a much more expensive Serial LCD (£10 up). Other projects discuss using two-wire interfaces, increasing the complexity of your code. The simplest way to drive the HD44780 style LCDs, in my opinion, is to use a 74HC595 shift register, taking the pin count down to 3. In any case, connecting an LCD either using the 595 Shift Register or the more traditional way takes a lot of wiring which is not only a super mess (unless you use a ribbon cable I guess), it takes time. This shield is simplifies this process - all that is required is power and three wires back to the Arduino - ie. connect the LCD in under 6 seconds! Step 1: Required Components This is an extremely easy board to make and should take you no more than 15 minutes to solder up and have running. Component List 1 x 74HC595 Shift Register 1 x BC547 NPN (or MOFSET or similar NPN) 1 x 10k Trimmer Potentiometer 6 x Male headers (I used right angle connectors) 16 x Female headers Strip/Vero-board 17 strips x 13 holes (I used 15 for cable support) Hookup wire Your soldering kit Step 2: Stripboard Preparation !! Remember, you are cutting the other side of the breadboard so you need to cut the INVERSE of these graphics. A simple way to get this right is to download the image, flip it horizontally then use it as your cutting guide. !! There are 18 cuts in total you need to make on your stripboard. To cut the tracks of these boards you can use a "track cutter" which is available from most electronic component retails, use a drill bit or knife to cut across them or bring out your trusty Dremel and use one of the myriad of tools they have for doing this. The board size needs to be, at minimum, 17 strips x 13 holes. That said, I used 15 holes to give my cables some extra support. Double check all track cuts for bridges! Step 3: Soldering Components Now comes the fun part of soldering all the components. The attached images will help you place each of the wires and components easily. These are "top-view" images, i.e. your board should look exactly the same from above. Start by soldering the wires first. Then the 74HC595 Shift Register, Potentiometer then the NPN. Lastly, solder in the headers. The NPN collector pin has been bent backwards slightly and is placed behind the base pin. This is easily seen in the second image. Double check all track cuts again and your soldering for bridges! Major Components in Project1 x 74HC595 Shift Register 1 x BC547 NPN (or MOFSET or similar NPN) 1 x 10k Trimmer Potentiometer For more detail: Hookup an LCD to an Arduino ### Hookup an LCD to an Arduino in 6 seconds with 3, not 6 pins Adding an LCD display to Arduino projects can add real value but the cost of doing so can be significant. Not a financial cost - you can pick up 16 (characters) x 2 (rows) LCD for as little as £3.50. The cost is the pin count it can take to drive them. Using the built-in LiquidCrystal Display library it can take as many as 6 pins! That does not leave much for your sensors, motors and other components. There are many projects that discuss using alternatives - such as a much more expensive Serial LCD (£10 up). Other projects discuss using two-wire interfaces, increasing the complexity of your code. The simplest way to drive the HD44780 style LCDs, in my opinion, is to use a 74HC595 shift register, taking the pin count down to 3. In any case, connecting an LCD either using the 595 Shift Register or the more traditional way takes a lot of wiring which is not only a super mess (unless you use a ribbon cable I guess), it takes time. This shield is simplifies this process - all that is required is power and three wires back to the Arduino - ie. connect the LCD in under 6 seconds! Step 1: Required Components This is an extremely easy board to make and should take you no more than 15 minutes to solder up and have running. Component List 1 x 74HC595 Shift Register 1 x BC547 NPN (or MOFSET or similar NPN) 1 x 10k Trimmer Potentiometer 6 x Male headers (I used right angle connectors) 16 x Female headers Strip/Vero-board 17 strips x 13 holes (I used 15 for cable support) Hookup wire Your soldering kit Step 2: Stripboard Preparation !! Remember, you are cutting the other side of the breadboard so you need to cut the INVERSE of these graphics. A simple way to get this right is to download the image, flip it horizontally then use it as your cutting guide. !! There are 18 cuts in total you need to make on your stripboard. To cut the tracks of these boards you can use a "track cutter" which is available from most electronic component retails, use a drill bit or knife to cut across them or bring out your trusty Dremel and use one of the myriad of tools they have for doing this. The board size needs to be, at minimum, 17 strips x 13 holes. That said, I used 15 holes to give my cables some extra support. Double check all track cuts for bridges! Step 3: Soldering Components Now comes the fun part of soldering all the components. The attached images will help you place each of the wires and components easily. These are "top-view" images, i.e. your board should look exactly the same from above. Start by soldering the wires first. Then the 74HC595 Shift Register, Potentiometer then the NPN. Lastly, solder in the headers. The NPN collector pin has been bent backwards slightly and is placed behind the base pin. This is easily seen in the second image. Double check all track cuts again and your soldering for bridges! Step 4: Connections Overview the entire board (again) for any bridges to ensure there are no short circuits. Now it is time to connect this up and test it. Connect the power (5v and ground). Connect the wires to the shift register, if you use the library as default you will connect Green to Arduino Pin 7, Blue to Arduino Pin 8, Yellow to Arduino Pin 9. The pin between Green and Blue is not used. It is placed there to enable 4-pin connectors if that is the cabling you have and to make soldering much easier (trying to solder 1 pin then 2 pins is painful). Next attach the LCD so it covers the board - this will ensure you are connecting it the correct way. Contrast is adjusted using the Potentiometer. Step 5: Software The method of using a shift register to drive these displays with only 3 pins seems to have originally documented by Stephen Hobley. He did a great job of adjusting the built-in LiquidCrystal Library so it works brilliantly with the 595 Shift Register. I have now updated this library to be compatible with Arduino 1.x and adjusted some of the Shift Register pin assignments to be easier to prototype with. You need to download the latest code. It is feature complete and should be a drop-in replacement for any project you already have. Here is the test Arduino sketch to show you how to use the new library, replacing the LiquidCrystal 6-pin with a great 3-pin version. Step 6: Conclusion This shield really does allow you to use just 3 pins of your Arduino to drive an LCD display - and it takes less than 6 seconds to connect it up. Don't want to commit to a shield just yet? Wish to do this with only 3 components and breadboard? I understand that you may not wish to make a shield before trying this method out - that is completely understandable. For you, I have this documented for breadboards too. Sure, you will have to deal with more hookup wire, but it gives you a great way of at least trying this 3-pin method without any soldering. That layout, more code and wiring explanations are available from http://rowansimms.com/article.php/lcd-hookup-in-seconds That's it. Enjoy your sub-6-second hookups! Major Components in Project1 x 74HC595 Shift Register 1 x BC547 NPN (or MOFSET or similar NPN) 1 x 10k Trimmer Potentiometer For more detail: Hookup an LCD to an Arduino in 6 seconds with 3, not 6 pins ### Homemade Dual H-Bridge - L298 Breakout Board using Arduino This is my homemade Dual H-Bridge using the IC L298N. For control DC motors or step Motors ao other purposes just like you need. Breakout L298N.ppt1 MB Step 1: Hardware and Materials COMPONENTS: 1 x perf  board 13x26 holes (3,5 x 7,0 cm) 2 x AK300/3 connector 1 x 8 Header female connector for Arduino 1 x L298N (Multiwatt15) 8 x 1N4001 Diode 2 x 100nF capacitor 2 x 0,47Ohm x 1W Resistor Wire (green and blue colors) Step 2: Schematic This is the basic schematic. It works perfectly. A more advanced schematic and board for eagle cad, you can download from the link below. http://www.4shared.com/file/T17oVW-z/PONTE_H_L298N.html http://www.4shared.com/file/6VdOTgv5/PONTE_H_L298N.html Step 3: 1st Step - Perfboard, holes location Make a Board with 3,5 x 7,0 cm or 13 x 26 holes. Locate in this board, all holes that we will use for the components. Step 4: 2nd Step - Components After sanding and cleaning the board, put all components in it according of the diagram above and schematic. For this, bend components properly. Do the soldering for each group of components independently, for example: diodes first and then connectors and then capacitors and resistors and finally the L298N IC; or in what order you want or you are used to do. Major Components in Project1 x perf  board 13×26 holes (3,5 x 7,0 cm) 2 x AK300/3 connector 1 x 8 Header female connector for Arduino 1 x L298N (Multiwatt15) 8 x 1N4001 Diode 2 x 100nF capacitor 2 x 0,47Ohm x 1W Resistor Wire (green and blue colors)   For more detail: Homemade Dual H-Bridge - L298 Breakout Board using Arduino ### HB-LED flashing beacon repurposes switching regulator This flasher/beacon circuit can be employed as a distress signal on highways, a direction pointer for parking lots, hospitals, and hotels, etc. The circuit uses a power LED, and provides more light than a typical incandescent lamp flasher. Use of a 6V or 12V SLA lantern battery makes the circuit portable. The heart of the circuit is an MC34063 monolithic switching regulator subsystem, originally intended for use in DC-DC converters. This device contains a voltage reference, comparator, controlled duty cycle oscillator with an active peak current limit circuit, driver, and a high current output switch, all in an 8-pin DIP. The circuit briefly flashes a 1W power LED from a 6V to 12V DC supply – at about 5% duty-cycle. Current limiting to the LED is accomplished by monitoring the voltage drop across R1, a 1Ω sense resistor placed between VCC and the output switch, pin 1.   For more detail: HB-LED flashing beacon repurposes switching regulator ### Does your op amp oscillate We analog designers take great pains to make our amplifiers stable when we design them, but there are many situations that cause them to oscillate in the real world.  Various types of loads can make them sing.  Improperly designed feedback networks can cause instability.  Insufficient supply bypassing can offend.  Finally, inputs and outputs can oscillate by themselves as one-port systems. This article will address common causes of oscillation and their remedies. Some Basics Figure 1a shows the block diagram of a non-rail-to-rail amplifier.  The inputs control the gm block which drives the gain node and is buffered at the output.  The compensation capacitor Cc is the dominant frequency response element.  The return of Cc would go to ground if there were such a pin; however op amps traditionally have no ground and the capacitor current will return to one or both supplies. Figure 1b is a block diagram of the simplest amplifier with rail-to-rail output.  The input gm’s output current is sent through a “current coupler” that splits the drive current between the output transistors.  Frequency response is dominated by the two Cc /2s, which are effectively in parallel.  These two topologies describe the vast majority of op amps that use external feedback. Figure 1c shows the frequency responses of our ideal amplifiers, which display similar behavior although they are electrically different.  The single-pole compensation created by gm and Cc gives a unity-gain-bandwidth product frequency of GBF=gm/(2p Cc).   The phase lag of these amplifiers drops from -180 to -270° around GBF/Avol, where Avol  is the open-loop amplifier DC gain.  The phase hangs in at -270° for frequencies well above this low frequency.  This is known as “dominant pole compensation,” where the  Cc pole dominates the response and hides various frequency limitations of the active circuitry. For more detail: Does your op amp oscillate ### Daft Punk Coffee Table 5x5 LED Matrix using an Arduino Yes, I know this has been done before, but I wanted to build my own, using as few parts as possible.  I built this as a table top or wall mount model, but it can be scaled up to make a coffee table.  I built it as a study for a more ambitious project, which will be an 8x8 RGB coffee table.  In designing this project, I wanted to keep the part count and cost as low as possible, and also to design the software for speed and minimal memory usage. The code I used in the Arduino sketch demonstrates direct port manipulation, which is a fast and powerful alternative to digitalWrite(). Update 3/10/2011 : Finished adding the Music Synchronization section of this Instructable. Update 3/20/2011:  I decided to build Lampduino instead of the coffee table. Note that the flickering in the video below was caused by my video camera. When viewed with the naked eye, no scanning is perceived, and the lights do not flicker. Music Sync Mode: Arvid "Try (fenomenon remix)" Step 1: Acquire the Parts Parts List 25 LED's - I used warm white 5mm LED's purchased on eBay 5 resistors - I used 100 ohm, but the exact value will depend on what LED's you use. I will explain how to calculate in the Wiring step. NOTE: You may need also need 10 diodes and different resistors, especially if you are using white LED's... please the Troubleshooting section in step 3 for details. Arduino - I used a Duemilanove clone - in Step 7, I switch to a much cheaper alternative. wire white foam board .005" thick matte drafting film - I bought a sheet from a local artist's supply store.  The smallest sheet they had was way more than I needed - 24x36" If you want to implement music synchronization capabilities, you will also need some more parts, as discussed in the Music Synchronization step. Tools Needed hot glue gun mat knife soldering iron solder pliers/wire cutters The LED's I used were point source water clear.  If you don't want to deal with hotspots in your display, diffused would be better.  I had to put blobs of hot glue on mine to diffuse them.  The photo below only shows bits of the foam board, because I forgot to photograph the parts before I started.  The piece I used was about 16x20" to start with. Step 2: Build the Display I used foam board, which was recycled from one of my kids' science fair projects. It is a sandwich of white paper with a foam core, 3/16" thick. The overall size is approximately of our project is approximately 10x10x2".  I cut the parts with a mat knife, and hot glued it together. To make the grid, cut 8 identical 2x10" pieces.  Then cut 4 equally spaced slits into each one.  The slits should be 1" deep,  the same width as the foam board.  Interlock the pieces to create the 5x5 grid. Next, cut a 10x10" piece of foam for the back.  Hot glue it to the 5x5 grid. Cut 2 more 2x10" pieces to form the sides, and glue them on. Finally, cut the 2 (10 3/8)x2" pieces for the top and bottom.  My foam was 3/16" thick, so I had to add 3/8" to the length to make them long enough to cover the sides.  Hot glue them on. Note that in the photo below which includes the top & bottom & sides, the LED's are already installed and wired up.  This is because I didn't attach the top/bottom/sides until I was in the testing phase, but it's easier to deal with if you glue them on earlier in the process. Step 3: Wire it up Cut small diagonal slits in the center of each cell, and insert one LED in each cell. Make sure to orient them the same way in each cell. This will make it less confusing when wiring it up. I laid mine out w/ the flat side (cathode) facing the bottom right corner. Using diagonal slits for the pins makes it easier to wire it up without shorting the wires, since we are going to wire it as a crossbar. While one can use any of the I/O pins on the Arduino, I chose the pins specifically to allow me to use very compact code to turn on the columns. This will be explained in detail later. To drive our 5x5 LED matrix, we directly drive the LED's using 10 digital I/O pins on the Arduino. The anodes are connected to pins.  Some existing designs, such as the one in the Arduino Playground  don't bother to use current limiting resistors.  This is not a good design practice, and can result in burned out LED's, or worse yet, a burned out Arduino.  Each I/O pin on the Arduino can source or sink up to 40mA of current.  The LED's which I used have the following electrical characteristics: Forward Voltage  = 3.2 ~ 3.4V Max Continuous Forward Current = 20mA So if we want to drive the LED's for maximum brightness, we need to target 20mA of current. To calculate the proper resistor value, we use Ohm's Law: R = (Vcc - Vf) / If where R = resistor value in ohms Vcc = supply voltage = 5V for the Arduino Duemilanove Vf = LED forward voltage.  I used the average, 3.3V If = LED current in amperes = .020A Plugging in the values, we get R = (5 - 3.3) / .02 = 85 ohms.  The nearest available standard resistor value is 100 ohms.  Always round up instead of down, because if you round down, you will exceed the maximum allowable current. Notice that we only use 5 resistors.  We don't have to put one at each LED, because we will only be driving one row, a maximum of 5 LED's at a time.  I said above that each I/O pin can drive 40mA of continuous current, so why can't we drive the whole LED array at once?  It's because another constraint is that the total drive current summed up across all the pins can't exceed 200mA.  If we turn on all 25 LED's at once, then 25*20mA = 500mA flow, which is way over spec. So maybe we can turn on 1 row at a time, and scan the rows, like the way a CRT works?   If we turn on a whole row of LED's at once, the current is 20mA * 5 = 100mA.  This, at first, appears to be OK, because each column (anode) pin is only sourcing 20mA, and we're below the Atmega368P's total 200mA current limit.  However, upon more analysis, we can't even drive 5 LED's at once.  Why?  Because the cathodes of all 5 LED's in a row are connected together into a single I/O pin, and we're not allowed to sink more than 40mA per pin.  Therefore, we will write our software so that no more than 2 LED's are turned on at a time, so the row (cathode) pins will sink a maximum of 40mA each.  Now, even though we're at the allowable continuous current limit, it's generally not good practice to run a device at its maximum limits.  However, since we're going to pulse each LED briefly, and let persistence of vision create the illusion that they're all on at once, it's OK. Note:  I tried running mine w/ 5 LED's lit per row for several hours, and it worked fine, but it's always best to design your circuits within specifications, to ensure long term reliability. The circuit diagram is below.  To summarize the connections: LED Columns (anodes) col 0 connects to digital pin 12 (via a 100 ohm resistor) col 1 connects to digital pin 11 (via a 100 ohm resistor) col 2 connects to digital pin 10 (via a 100 ohm resistor) col 3 connects to digital pin 9 (via a 100 ohm resistor) col 4 connects to digital pin 8 (via a 100 ohm resistor) LED Rows (cathodes) row 0 connects to digital pin 7 row 1 connects to digital pin 6 row 2 connects to digital pin 5 row 3 connects to digital pin 4 row 4 connects to digital pin 3 I used simple point to point wiring, fastened with hot melt glue to the back of the display.  I know it's messy looking, but it won't be seen, anyway. Troubleshooting If your matrix doesn't function properly, first, you should double check your wiring.   The sketch also has a testing mode, which cycles through the LED's one by one slowly enough that you can see it.  You can enable it by uncommenting the following line in the sketch: //#define TESTMODE // continuously sequence thru the LED's by removing the leading //. One potential mistake is accidentally swapping the columns and rows.  If your matrix looks like this video http://www.youtube.com/watch?v=JpLgLbWMrWo in TESTMODE, then you've made this error, and need to swap the row and column connections to your Arduino.  Thanks to Instructables user 303_addict for posting the video. If your wiring is correct, and you are getting more than one LED at a time lighting up, you might be one of the unlucky ones who has LED's that have a high leakage current when reverse biased.  White LED's are particulary susceptible to this problem.  If this is the case, you will need to add series blocking diodes on the inputs to all the columns, as well as on all the row outputs.  So you will need 10 diodes.  Any small signal diode will work, such as 1N4001, 1N914, 1N4148, etc.  You will also need to adjust the resistor values, because  two series diodes will add ~1.4V voltage drop.  So in my equation above, use 3.6 for VCC.  For my 3.3V LED's you end up with R = (5-1.4-3.3V)/20mA = 15 ohms.  I didn't have any 15 ohm resistors handy, so I substituted 10 ohms instead, and using an ammeter, measured 19.5mA .. still within spec.  See the last attached image. Major Components in Project25 LED’s 5 resistors Arduino wire white foam board For more detail: Daft Punk Coffee Table 5x5 LED Matrix using an Arduino ### Custom OBD II Gauge in With OEM Look https://github.com/stirobot/arduinoModularTFTgaugesI built a custom OBD II (on board diagnostics version 2 http://en.wikipedia.org/wiki/On-board_diagnostics) gauge in the clock of my Subaru BRZ (GT86, FRS) and a lot of people wanted me to build them one. Here is how you can build one of your own. My wife is about to give birth to our second son and all the code is open source, so I have nothing to lose by posting this. (I still may sell the installation as a service or possibly the packaging of a kit in the future, but that won't prevent others from using the open source pieces to do what they want in their own installations, other cars, other displays, etc. and frankly there is no money to be had in this. So, I'd rather share it with the DIY community at large.) I'll try to point out where I did things that are specific to my model of car and where you might want to change things to suit your needs. Hopefully this will allow others to build on what I've done. The all important github link:https://github.com/stirobot/arduinoModularTFTgauges/blob/master/oledOBDgaugesSmallIrvinedLib.ino And more generically my code is here: https://github.com/stirobot/arduinoModularTFTgauges The car specific forum where all of this is getting discussed: http://www.ft86club.com/forums/showthread.php?p=1967204#post1967204 Step 1: What you will need to do this (parts/tools/software/etc) Parts (generic/specific): -An Arduino or Arduino clone – I specifically use the adafruit pro-trinket for its small form factor and 5v logic.https://www.adafruit.com/products/2000 -STN1110/ELM327 board. I chose the Sparkfun one because it is stable, uses UART for communication and doesn't cost and arm and a leg. https://www.sparkfun.com/products/9555 -Assorted hookup wire -128x32 SPI monochrome OLED display. I used the adafruit one. The ebay ones may work just as well, but I haven't tested them. -Your OEM clock. I used the OEM clock from a Scion FRS that I got on ebay. -Some resistors (for the button setup) -Optional – sensors (autometer oil temp, autometer oil pressure, acceleromter, pressure, temperature). I have some arduino code that will let you plug analog sensors into a system like this. I'll make one of the “steps” pages about this. Tools: -Soldering Iron -Wire stripers -Wire crimpers -Helping hands -scissors -dremel tool Code libraries used: -Arduino ELM327 library: https://www.clusterfsck.io/blog/2014/05/23/arduino-elm327-library/ . I thrashed around with the UART comms to the OBD II board for a long time. (you can see it in my crummy code for the 1.8” TFT version of this). This saved my project and my sanity. -The Adafruit libraries for the OLED screen and tutorials: https://learn.adafruit.com/monochrome-oled-breakouts I love supporting this vendor as they always provide a lot of extras when you buy from them (support, working code (emphasis on working), tutorials, etc.) Software: Sublime Text2 Stino plugin (because real syntax highlighting is refreshing) - http://robot-will.github.io/Stino/ the dot factory – for making monochrome bitmaps into arrays so you can display them on the screen (That's how I got my icons) windows paint – for drawing icons and splash screens For more detail: Custom OBD II Gauge in With OEM Look ### Control Android mobile by an Apple Remote using Arduino I love to integrate devices which are not supposed to be integrated and this guide shows you how you can control an Android mobile using Apple’s Remote. (Who said Apple devices work only with Apple products ;) ) Also this is my entry to the Sparkfun microcontroller context. If you like this guide, please do vote for me. (Voting starts from Feb 14th) Basic Architecture This is the basic architecture of how we will be setting up different pieces so that they can talk to each other. Apple Remote -> IR Receiver -> Arduino -> Bluetooth Shield -> Amarino -> Android Step 1: What do you need Components needed Arduino Board (Either Uno or Duemilanove) Arduino Bluetooth Shield IR Receiver Apple Remote Android Phone Libraries used IR Remote Amarino Programming Skills Basic Arduino programming Basic Android programming skill (Optional) Step 2: Arduino Arduino - Connecting the IR Receiver The first step is to connect the IR Receiver to Arduino. The IR Receiver has three legs (Vcc, Gnd and signal). Connect the Vcc pin of IR Receiver to Arduino’s Vcc pin Connect Gnd pin of IR Receiver to Gnd pin in Arduino Connect the signal pin of IR Receiver to Arduino digital pin 11 Arduino - Code The next step is to write the code in Arduino called as sketch. The code should do the following Read the signal from IR Receiver Identify the button that was pressed Send the button code using Bluetooth Major Components in ProjectArduino Board (Either Uno or Duemilanove) Arduino Bluetooth Shield IR Receiver Apple Remote Android Phone Libraries used IR Remote Amarino Programming Skills Basic Arduino programming Basic Android programming skill (Optional)   For more detail: Control Android mobile by an Apple Remote using Arduino ### A compact, Arduino altimeter for RC Planes Please vote for this Instructable if you think it deserves it! Thanks! The Ultimate Altimeter is a super-compact, Arduino controlled altimeter capable of measuring the altitude with an accuracy of 0.3 meters, and saving the highest and lowest values it has measured. It is powered by a 40 mAh Lithium Polymer battery, uses a tiny LCD Bubble Display, and measures altitude with a MPL3115A2 Altitude Sensor. It's very simple and fairly easy to build with just six major components. Additionally, an optional 3D printed case can house the Altimeter. The Altimeter has a couple of different modes: current altitude, highest altitude, lowest altitude, difference in altitude (highest minus lowest), and standby (turns display off to save power for ~6 hr battery life, not shown in video). The entire build adds up to around $30, but you may have some or most of the parts lying around already. You can make this! It is not a very difficult project, and could be good practice for through-hole soldering, and coding (if you want to do modifications). Read on and create! Step 1: Materials List Parts: Arduino Pro Mini MPL3115A2 Altitude Sensor Bubble Display 40 mAh LiPo battery Button Switch JST connector Tools and other materials: Soldering iron Solder Flush cutters or wire cutters Wire strippers Electrical tape Liquid electrical tape or other insulative paint (you could also use regular electrical tape or heat shrink tubing) 24 guage stranded wire Hot glue gun FTDI Basic Step 2: Solder the Bubble Display The Bubble Displays are set up to be put into a breadboard, but since we will be soldering it directly onto the pins on the back of our Arduino, the leads need to be bent flat with a pair of pliers. Once bent, rest the display on a flat surface, and make sure it lays flat and all of its leads touch the surface. This will ensure that they will make good contact with the pins on the Arduino. Next, put down a piece of electrical tape as shown in order to prevent unwanted connections between the board and the display. Temporarily tape the display down to the Arduino in order to keep it in place while you solder the leads to the corresponding pins on the Arduino. The leads don't actually go through the holes; they can just rest on top and be connected with solder. Step 3: Add the Button Bend out two of the adjacent leads on the button and snip them off. Then solder the remaining leads to GND and PIN 3 on the Arduino. You can trim the button shaft to the length of your liking. If you a snipping device, the shaft will break uncleanly. I used a thin saw to cut it, and then filed it smooth. Step 4: Add the JST Connector and Switch IMPORTANT: Read this whole step before starting it. It is put together strangely because I had to change and fix the project as I built it. Also, there are some things in the photos that haven't been covered yet because the order in which I built it is different from the order of this Instructable. Solder the JST connector into the GND and RAW pins on the Arduino. Then, cut the lead that goes to RAW in half. This is where the switch circuit will be added so we can turn the device on and off Glue the switch into place. Push it right up against the button so there is enough space to program the Arduino with FTDI later. I used superglue to stick it in place. We won't be using any of the pins that it is covering up so you can glue it right onto the board. Next, twist the JST connector so it is facing the rest of the board instead of the switch. This will allow the battery to plug in (there wasn't enough space before). Only one of the leads of the connector is in the Arduino now, so it should be easy to twist. You may need to do some supergluing to get the metal pins that stick into the plastic part of the JST connector to stay in place. Solder the button into the cut lead of the JST connector as shown in the picture, and you are done with the power circuit! Step 5: Connect the Altitude Sensor Connect the Altitude Sensor's SDA, SCL, VCC, and GND pins to the Arduino's A4, A5, VCC, and GND pins respectively with stranded wire. This can be tricky. I looped all the wires but the ground wire around underneath the sensor board to make it easier to work with as well as providing extra support to the board to keep it from rocking. I routed the ground wire directly from one GND pin to the other. Make sure nothing is shorted. If there are any exposed wires that are close to each other, you can slip a piece of electrical tape between them and make sure it sticks. After testing that your sensor is working and connected properly with some example code, glue it in place with hot glue. The sensor uses air pressure to detect altitude to make sure to leave space for air to reach the sensor. I just glued under each corner. Step 6: Prepare and Install the Battery Next, the battery's wires need to be made much shorter so it will fit in the remaining space we have. Strip, cut and re-solder the wires so that they are very short. Because of the short length of the wires that you are stripping, the rubber casing of the wire may come off completely. To fix the now-bare wires, I used liquid electrical tape, an insulative paint type material. This will keep the wires from shorting. You could also use heat-shrink tubing or regular electrical tape. Now, all the electronics are in place. The last thing to do is the code.   For more detail: A compact, Arduino altimeter for RC Planes ### CoaTracker Using Arduino Has this ever happened to you? You wake up in the morning and realize that you're terribly late for work/class/your weekly pedicure/whatever. You throw on a t-shirt and flip flops, sprint around your warm, heated house grabbing your belongings, and race out the door...where you suddenly find yourself surrounded by a cold, biting wind encompassing you in a horrible vortex of snow. You're completely unprepared for this weather, but it's too late to go back now. You must suffer through the wintery day, freezing and looking like a crazy person who can't figure out how to put on a coat. This instructable will show you how to create your very own CoaTracker, an interactive coat rack that tells you the local weather conditions with a single glance, so you'll never again be unprepared. The CoaTracker is not only useful, but also an aesthetically pleasing and thoroughly modern addition to your home. Step 1: What you'll need To begin, you'll need to order an Arduino. LadyAda (www.adafruit.com) has a great starter kit for $65 that will provide you with everything you need to use the Arduino. You'll also need to buy: 4 5V Relays (available at RadioShack) 4 3 ft pieces of Electroluminescent Wire, small to medium sized, any color 2 Inverters (you can order the EL Wire and inverters from any EL Wire site, I ordered mine from www.elwirepros.com/) Now for the construction stuff. You can get creative here, but this is what I used (available at most arts and crafts stores): 1 packet of 4 12"x12" cork boards 1 flat wooden coat rack with 4 pegs Now, you should be all set to get started! Step 2: Software You'll need to download a few different kinds of software to run the code: Arduino software http://arduino.cc/en/Main/Software Processing software http://processing.org/download/ Follow the instructions for your operating system. After both software's have been installed successfully, you'll also need to download Firmata, a standard Arduino firmware that makes it possible to control the Arduino through Processing. Follow all of the instructions here: http://www.arduino.cc/playground/Interfacing/Processing Step 3: Code Attached is the code file that you'll need to control your CoaTracker. You won't be able to test it until you've set up the arduino, though. The code is commented so it should be pretty clear. Basically, it takes the weather from an XML feed of your choice (which you can find here: http://www.weather.gov/xml/current_obs/), parses out the weather condition, and uses that condition to light the correct EL wire on the CoaTracker. The only part you have to change is the URL of the XML feed for your location. Step 4: The Circuit Now you'll need to connect the EL Wire to your Arduino. Here, you'll need a lot of wire, plus the Relays and Inverters you bought. The diagram of the circuit is attached. Be sure to test all the wires and the code before incorporating them into the coat rack structure. You can do this by attaching the Arduino to your computer with the USB cord it came with. Then press the Play button in the Processing code window to transfer the code to the Arduino. Step 5: Making the CoaTracker Okay, this is the creative part. I constructed the CoaTracker structure using cork board and a wooden coat rack I bought at a crafts store. For the background, I created a landscape and sky scene using 2 11"x17" files in Adobe Illustrator. You can make your own, or use my files which are attached. You'll need a printer that can print on 11"x17" paper. First, paint the wooden coat rack whatever color you choose. I painted mine white. Next, attach the cork boards to each other, side by side, using staples and tape - or whatever method you like. After you've printed the background pictures, attach them to the cork board using staples or glue. Then cut off the extra cork board around the pictures. Finally, center the coat rack on the cork board background with a little bit of overlap, and attach them using a strong glue (gorilla glue is a good choice).   For more detail: The CoaTracker Using Arduino ### Cell phone text using an Arduino Arduino text‘in. Key Features: 24 relays controlled by 4 I/O lines! Cell phone text using your Arduino. This project hacks a cell phone to text using normally open relays. After investigating cellular modules on the internet I decided it looks not only rather pricy, but also like a possibility that even after I had it working that a cellular provider might not let me put the device on their network. It seemed like a good cell phone hack was in order to make this work for me. Step 1: Purchase a cheap prepaid flip phone, activate and charge it. Mine was $20.00. Flip phones are fairly easy to disassemble. You will need a very small screw driver set. The button pads on the inside are still large enough to allow for soldering wires in place without too much trouble. The prepaid plans let you text for pretty cheap too if you pick the right plan. Plus because its prepaid you can just let it run out whenever you are finished with it and best of all no contract. Turn on the flip phone and take some notes about how it operates. Yours may access menus and things differently then mine does and its nice to know as you move forward with this. Figure out what keys you still want to have access to once the phone is mounted. Because I used a prepaid phone I have to access it now and then to add more air time. It is also helpful to know how things are going with the phone when you can turn it on and activate it with the buttons after it is mounted to the board. The buttons on your cell phone board will be connecting directly to the phone. This way you can access the phone even if the rest of the circuit is off or maybe just doing other things. Safety First. Remove the battery from the phone. Tear apart the flip phone. The circuit board inside is pretty delicate and has some sharp parts so use some caution. Do not break the LCD displays and be very careful not to destroy the very small ribbon cables that interconnect things. The part of the phone that houses the LCD, microphone and usually the camera will need to be taken completely out of the case. The flip phone I purchased had enough room to flip the camera around so that it can still take pictures. The case for the main board of the phone (where the battery is) will need to stay more or less intact. This makes it easier to put the battery back in and your not messing with the built in antenna so it should still have its normal signal strength. Step 2: Purchase / scavenge some electronics parts. 1 - Arduino Uno 24 - Normally Open buttons. These will replace the buttons on the phone. 3 - 74HC374 Octal D-Type Flip-Flop chips. 24 - Reed relays. I had a bunch laying around. 24 - NPN general purpose. I used 2N2222. 24 - 20 K Ohm resistors 24 to 48 General purpose diodes You don’t have to go overkill like I did. At minimum you need one diode across the relay coil to prevent voltage spikes when the coil turns off. 1 - Board to mount relay stuff. 1 - Board to mount cell phone A bunch of jumper wires. Keep them neat. It makes it easier to trouble shoot. 1 - 12 volt power for relays. 1 - 5 volt power for 74hc374’s and Arduino. Step 3: Layout your buttons on your board more or less like they are laid out on the cell phone. This makes it easier to know what buttons you are pressing. Notice that I have not used a few of the buttons. Step 4: Find some small fairly flexible cable to use for all of the interconnecting soldering you are going to be doing. I used some spare ribbon cable. I cut it longer then I would need. I then tinned and  trimmed the end to go to the phone. Leave your wires long here because it is easier to cut wire off then it is to try to re-solder them. The circuit board on the phone can easily be damaged by too much heat so use caution. I found it easier to start with the button pads closest to my new buttons and move my way up from there. Step 5: Once you have the part of the phone that houses the LCD apart you may need to cut or drill a hole in the mounting board for the ribbon cable to go through. The LCD will be mounting on the same side as the new buttons. I used some two sided tape to mount it. The main part of the cell phone will be mounted on the other side so it is closer to the relays. Major Components in ProjectPurchase / scavenge some electronics parts. 1 – Arduino Uno 24 – Normally Open buttons. These will replace the buttons on the phone. 3 – 74HC374 Octal D-Type Flip-Flop chips. 24 – Reed relays. I had a bunch laying around. 24 – NPN general purpose. I used 2N2222. 24 – 20 K Ohm resistors 24 to 48 General purpose diodes You don’t have to go overkill like I did. At minimum you need one diode across the relay coil to prevent voltage spikes when the coil turns off. 1 – Board to mount relay stuff. 1 – Board to mount cell phone A bunch of jumper wires. Keep them neat. It makes it easier to trouble shoot. 1 – 12 volt power for relays. 1 – 5 volt power for 74hc374’s and Arduino.   For more detail: Cell phone text using an Arduino ### BINAURAL HEARING MODELED WITH AN ARDUINO You don’t have two ears by accident. [Stoppi] has a great post about this, along with a video you can see below. (The text is in German, but that’s what translation is for.) The point to having two ears is that you receive audio information from slightly different angles and distances in each ear and your amazing brain can deduce a lot of spatial information from that data. For the Arduino demonstration, cheap microphone boards take the place of your ears. A servo motor points to the direction of sound. This would be a good gimmick for a Halloween prop or a noise-sensitive security camera. Math-wise, if you know the speed of sound, the distance between the sensors, and a few other pieces of data, you wind up with a fairly simple trigonometry problem. In non-math terms, it is easy to get a feel for why this works. If the sound hits both microphones at once, it must be coming from straight ahead. If it hits the left microphone first, it must be closer to that microphone and vice versa. If the sound were right in line with both microphones but closer to the left, the time delay would be exactly due to the speed of sound over the distance between the sensors. If the time is less than that, the sound must be somewhere in between. The microphone modules have both analog outputs and digital outputs. The digital output triggers if the sound level exceeds a limit set by a potentiometer. By using these modules, the circuit is trivial. Just an Arudino, the two modules, and the servo motor. https://youtu.be/-67zhaJvJVQ Now imagine that you wanted all this spatial detail to come through your headphones. Recording binaural audio is a thing. You can 3D print a virtual head if you are interested. We’ve seen projects for this several times. Source: BINAURAL HEARING MODELED WITH AN ARDUINO   ### ARDUINO RF power & SWR meter This drawing will display RF power and SWR readings from any SWR bridge, such as the 'monimatch' type. Since this type of bridge, called 'monimatch,' varies with frequency, the meter needs to be adjusted for each bandwidth. My main focus was on VHF/UHF/SHF, so I had planned for 6m, 4m, 2m, 70 cm, 23cm, and 13cm bands, while also utilizing the ARDUINO readout for HF. If you plan on constructing your own HF or VHF bridge, you can find various designs online: I recommend taking a look at the information here,  here , here and there ! The meter will operate in 3 modes: display instantaneous power forward in Watt en dBm, display SWR display PEP power forward (peak holding with decay) display instantaneous power forward in Watt, display SWR, and emit 'beeps' corresponding to SWR value: low tone beeps at slow rate for low SWR, high tones at fast rate for high SWR. Very handy to tune an antenna when you can't have your eyes on the meter while fiddling on the antenna! When the band is switched, the screen shows the complete range of the power measurement. I bought a bridge from a local flea market that works well up to 2.4 GHz. It has power ranging from 1kW on the 6m band to 400mW on the 13cm band. Another option is to construct a directional coupler, numerous designs are available online. Using my coupler, it is entirely feasible to measure the WiFi access point output in the PEP power measurement mode. Adding some resistive voltage dividing to the network can increase the power range since the maximum input on ARDUINO is +5v. However, the identical power needs to provide identical voltage, whether in 'forward' or 'reflected' mode (when the coupler is reversed). The meter is indented to be battery powered, therefore there is a circuit to control the LCD backlight (drawing a lot of current) and monitor the battery voltage. Front panel of PWR & SWR meter. Left = power switch, middle = mode select push-button, right = band change push-button Forward power is 23.3 W  corresponding to +43.6 dBm Below is the sketch  or download it here .   It was compiled with version 0022. Download the connection diagram (as pdf) here  or  a better schematic drawn by Vlado Z32AN here. See the meter in action on YouTube  http://www.youtube.com How to calibrate the power indication ? If you use a non-frequency compensated directional coupler, the forward voltage (representing power) will vary with frequency. In a 'monimatch' configuration, the voltage will rise as the frequency increases, meaning that the meter will be more responsive at higher frequencies as long as it stays within its designated range. Arduino can only measure up to +5v of voltage, so if needed, a voltage divider should be included to limit the range, same for the REFL side, depending on frequency, power, and coupler. To calibrate the sketch, follow the simple procedure below : uncomment the calibration routine lines, this will show the VoltFWD value.  Replace 2x the asterisks by a slash like below, and load the sketch in ARDUINO. //CALIBRATION ROUTINE FORWARD VOLTAGE  //////////////////// // This routine prints on LCD the FWD voltage measured. // When no power applied, the FWD voltage displayed will be the diode voltage in mV // To calculate the calibration factor, take the reading (including diode voltage) // Uncomment this routine to enter calibration mode lcd.setCursor(0, 0); lcd.print("VoltFWD= "); lcd.print(VoltFWD, DEC); delay(500);  //   ///////////////////////////////////////////////////// Use a well-known "reference power" for each desired band, and connect the coupler to a dummy load (SWR = 1:1). This will result in an output of VoltFWD, between 0 and 5000 (possibly slightly above 5000 due to the inclusion of the diode voltage drop) - presented in milliVolts. Ideally, aim for a readout between 2000 and 4000 ('mid-scale) and adjust the reference power as needed. Assume we record 2500mV at 145MHz with 10w power, and make a note of this measurement. repeat for each band Now calculate - for each band - the calibration factor PowCALXX   (XX= band), using the formula : PowCal=(VoltFWD²/Power) / 1000  (where power is expressed in Watt) In our case : PowCal = 2500 x 2500 / 10 / 1000 = 625 Enter this value in the sketch, for the respective bands. #define PowCal2m     (625)    // 2m band comment again the calibration routine, by replacing the two slashes by asterisks: /*CALIBRATION ROUTINE FORWARD VOLTAGE  //////////////////// // This routine prints on LCD the FWD voltage measured. // When no power applied, the FWD voltage displayed will be the diode voltage in mV // To calculate the calibration factor, take the reading (including diode voltage) // Uncomment this routine to enter calibration mode lcd.setCursor(0, 0); lcd.print("VoltFWD= "); lcd.print(VoltFWD, DEC); delay(500); */   ///////////////////////////////////////////////////// save the sketch, and reload into ARDUINO Test the readout with the 'reference power levels'  - DONE ! Remarks : It is possible to determine power by rectifying a sample of the RF and measuring the voltage directly, instead of using the 'FWD' voltage over the coupler. This method should be less affected by frequency changes compared to the coupler method. It's your job to incorporate this into your sketch... utilizing a different ARDUINO analog input pin. This could work on HF and VHF ... but could present challenges on UHF and higher frequencies - so this method was not implemented in this project. Depending on how your coupler is designed, you may need to "load it" in order for the output to be at ground level when there is no RF power applied. When using ARDUINO analog inputs, it's important to note that they have a high impedance, leading to potential random readouts or 'beep-beep' sounds when stray voltage is detected. To prevent this issue, connect a 220k or 470k resistor from the FWD and REFL inputs to the ground. Naturally, all connections to the adapter need to be shielded and RF-decoupled correctly! **************************************************************      *        POWER & SWR meter on 2x16 char LCD display          *     *                  By ON7EQ  Aug 2011                        *     **************************************************************    The circuit:     * LCD RS pin to digital pin 7  * LCD Enable pin to digital pin 8  * LCD D4 pin to digital pin 9  * LCD D5 pin to digital pin 10  * LCD D6 pin to digital pin 11  * LCD D7 pin to digital pin 12  * LCD R/W pin to ground  * GND to LCD VO pin (pin 3) (contrast)    * pin 13 = LCD backlight control (1= backlight ON). Use an emittor follower (like BC639) to control LCD backlight (this draws about 120mA)   * pin 4 = connect a piezo buzzer (other end to ground)   * pin A0 : SWR probe FWD  voltage input (SWR bridge type 'MONIMATCH')  * pin A1 : SWR probe REFL voltage input        ! Set the diode forward voltage in variable 'Diode'.  For 1SS99 or other Schottky diodes, it is around 130mV @ 0,1mA  * pin A5 : Power Supply Voltage input   MODE SELECT : there are 2 possibilities to select mode : -------------------------------------------------------- 1° with 3 position toggle switch: * pin Digital 2 : 'bip' Sound Switch : when grounded -> SWR 'bip' tone mode * pin Digital 3 : PEP mode Switch : when grounded -> PEP mode   When switch in center position : normal power/swr mode, instant power & dBm readout   When using a center toggle switch, Pin 5 must be connected to +5v    If a 3-way toggle switch is present, it will be automatically detected and the variable 'PushButton' set accordingly.    2° with push button for cyling modes: * pin Digital 5 : Mode push button : when grounded (pulse), next mode is selected When using a push button, Pins 2 and 3 must be connected to +5v !  ! the mode is stored in EEPROM & memorized for next boot BAND SELECT :  ------------- It can be necessary to apply different parameters / calibration factors per band. * pin Digital 6 : BAND push button : when grounded (pulse), next band is selected  ! the band is stored in EEPROM & memorized for next boot  */ // include the LCD library code: #include  // include math functions #include "math.h" // include EEPROM write #include  // variables #define TonePin      (4)    // Pin for beeper #define ToneSwitch   (2)    // one end of 3 way toggle switch #define PEPswitch    (3)    // the other end of 3 way toggle switch #define ModeSwitch   (5)    // push button switch (no 3 way toggle switch) #define BANDSwitch   (6)    // push button switch band change #define LCDbacklight (13)   // output to power the LCD backlight #define VoltSupplyMini (66) // minimum battery voltage expressed in 100mV (if lower, alarm is generated) //                          // for µ7805, minimum 7v required // voltage divider at A5  - select proper values so that voltage never exceeds 5v on A5 ! // With R1 = 1k2 and R2 = 4k7, max input voltage = 25v #define R1           (12)   // from GND to A5, express in 100R (12 = 1200 Ohm) #define R2           (47)   // from + power supply to A5, express in 100R (47 = 4700 Ohm) // calibration variables for forward power :  //     PowCal=(VoltFWD²/Power) / 1000  (where Power = Power over 50 Ohm in Watt) // Carry out calibration with sufficient power ! #define PowCalHF     (100)    // HF band #define PowCal6m     (21)     // 6m band #define PowCal4m     (30)     // 4m band --> pmax @ 5000mV = 833 W (as example) #define PowCal2m     (117)    // 2m band #define PowCal70     (57)     // 70cm band #define PowCal23     (3165)   // 23cm band #define PowCal13     (64800)  // 13cm band char* myStrings[]={" HF ", " 6m ", " 4m "," 2m ", " 70cm"," 23cm"," 13cm"}; /////////////////////// 3 way-mode switch or pushbutton ? /////////////////////////////////// int PushButton = (1); // 1 = Pushbutton / 0 = toggle switch                                 // there is an automatic detection in the display subroutine //////////////////////////////////////////////////////////////////////////////////////////// // modes byte PEP = (1); // 0 if PEP measured byte Tone = (1); // 0 if tone SWR tune (bip) byte MODE = (0); // Mode 0 = instant power / Mode 1 = PEP / Mode 2 = Bip byte BAND =(0); // BAND 0 = HF / 1 = 6m / 2 = 4m / 3 = 2m / 4 = 70cm / 5 = 23cm / 6 = 13cm unsigned long DisplayTime = 0; // timer display refresh unsigned long PeakTime = 0; // timer peak (PEP) detect unsigned long BacklightTime = 0; // backlight LCD hold time unsigned long BandTime = 0; // band display hold time float VoltFWD = 0; float VoltFWDmax = 0; float VoltPEP = 0; float VoltREF = 0; unsigned int Diode = 130; // diode forward voltage, expressed in mV unsigned int PowCal = 103 ; // calibration factor for power: PowCal=(VoltFWD²/Power)*1000 unsigned long PWR = 0; // power (expressed in 100 mW) unsigned int PowDis = 0; // power for display float SWR = 0; // SWR float Vratio = 0; // Voltage ratio VoltREF/VoltFWD int SWRDis = 0; // power calculation for showing in display int VoltFWDmini = 0; unsigned long PWRmax = 0; // the maximum power range, band dependant int beeponce = (0); // emit only 1 beep for modechange int beepband = (0); // emit only 1 beep for bandchange int SWRtonePitch = (800); // low lone = low SWR int SWRtoneLenght = (100); // long tone = low SWR int debugled = (0); // LED at pin13 = debug int decay = (0); // PEP decay rate unsigned int SupplyVoltage = (0); // Power supply voltage byte RunOnce =(1); // detect wether in SETUP or LOOP mode byte DisplayCycle = (0); // counts the cycles in display mode (for low volt alert) // initialize the library with the numbers of the interface pins LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // *************************************************************    // ********************  S  E  T  U  P  ************************ // *************************************************************    void setup() {   //setup pins   pinMode(LCDbacklight, OUTPUT); //Backlight LCD display   pinMode(PEPswitch, INPUT); // if grounded --> 'PEP' mode   pinMode(ToneSwitch, INPUT); // if grounded --> 'Bip' mode   pinMode(ModeSwitch, INPUT); // if grounded --> cycle through modes   pinMode(BANDSwitch, INPUT); // if grounded --> cycle through bands   // set up the LCD's number of columns and rows:   lcd.begin(16, 2);  // READ mode from EEPROM & set parameters  MODE = EEPROM.read(1);        if (MODE == 0) { // normal instant power & SWR               Tone = 1;               PEP = 1; }        if (MODE == 1) { // Tone tune SWR               Tone = 1;               PEP = 0; }        if (MODE == 2) { // PEP power               Tone = 0;               PEP = 1; }  // READ band from EEPROM   BAND = EEPROM.read(2);         if (BAND == 0) {               BAND = 3;            // No HF for time being, default = 2m               PowCal = PowCalHF;}         if (BAND == 1) {               PowCal = PowCal6m;}             if (BAND == 2) {               PowCal = PowCal4m;}         if (BAND == 3) {               PowCal = PowCal2m;}             if (BAND == 4) {               PowCal = PowCal70;}         if (BAND == 5) {               PowCal = PowCal23;}             if (BAND == 6) {               PowCal = PowCal13;} // calculate max range for this band              double PWRmax = pow((5000 + Diode),2) ; PWRmax = PWRmax / PowCal / 1000; // calculate minimum power for 'SWR < 1.5' indication threshold  // SWR = 1.5 means PWRref / PWRFwd = 0.2 // this means that VoltFWD = diode voltage / SQRT (0.2) // for threshold SWR = 3 : replace 0.45 by SQRT (0.5) = 0.71          VoltFWDmini = (Diode / 0.45); VoltFWDmini = 2* VoltFWDmini;  // safety factor, required in practice // Print a message to the LCD. digitalWrite(LCDbacklight,1) ; // turn backlight on lcd.setCursor(0, 0); lcd.print("Pwr & SWR Meter"); lcd.setCursor(0, 1); lcd.print(" 6m - 13cm "); pinMode(TonePin, OUTPUT); tone(TonePin,1200); delay(150); tone(TonePin,1600); delay (150); tone(TonePin,2000); delay (150); noTone (TonePin); delay (2000); // lcd.setCursor(0, 1); // lcd.print("by ON7EQ 08/2011"); // delay (2000); //Power SupplyVoltage measure & display measuresupplyvolt (); delay (1500); // print max power lcd.clear(); lcd.setCursor(2, 0); lcd.print("QRV on"); lcd.print( myStrings[BAND]); clearline1(); lcd.setCursor(2, 1); lcd.print("Pmax = "); // if > 1kw, 1kW is enough :o) if (PWRmax >= 1000) { lcd.print(" 1 kW "); } else { if (PWRmax < 1) { PowDis = PWRmax * 1000; if (PowDis > 100) { //round PowDis up to ten PowDis = PowDis / 10; PowDis = PowDis * 10; } // if (PowDis < 100) { // lcd.print(" "); // } // if (PowDis< 10) { // lcd.print(" "); // } lcd.print((PowDis), DEC); lcd.print("mW "); } else { PowDis = PWRmax ; //format PowDis if (PowDis > 100) { //round PowDis up to ten PowDis = PowDis / 10; PowDis = PowDis * 10; } // if (PowDis < 100) { // lcd.print(" "); // } // if (PowDis< 10) { // lcd.print(" "); // } lcd.print((PowDis), DEC); lcd.print("w "); } } delay (4000); lcd.clear(); // set timers DisplayTime = millis (); BacklightTime = millis (); } // end of setup // ************************************************************* // *********************** L O O P ************************ // ************************************************************* void loop() { RunOnce = 0; // Now we are in loop // Check if mode to be cycled if (digitalRead (ModeSwitch) == 0) { // Mode cycle pushbutton depressed digitalWrite(LCDbacklight, 1) ; // turn backlight on BacklightTime = millis (); //reset timer to light LCD if (beeponce == 0 ) { tone(TonePin,1750); delay (100); tone(TonePin,1000); beeponce = 1; delay (20); } delay (50); // give tone & debounce noTone (TonePin); if (digitalRead (ModeSwitch) == 1) { // released beeponce = 0; MODE = MODE + 1; if (MODE >= 3) MODE = 0; EEPROM.write(1,MODE); // store new mode permanently if (MODE == 0) { // normal instant power & SWR Tone = 1; PEP = 1; } if (MODE == 1) { // Tone tune SWR Tone = 1; PEP = 0; } if (MODE == 2) { // PEP power Tone = 0; PEP = 1; VoltFWDmax = (0); PeakTime = millis (); } } } // Check if band to be cycled if (digitalRead (BANDSwitch) == 0) { // BAND cycle pushbutton depressed digitalWrite(LCDbacklight, 1) ; // turn backlight on BacklightTime = millis (); //reset timer to light LCD if (beepband == 0 ) { tone(TonePin,1200); delay(100); tone(TonePin,1600); delay (100); tone(TonePin,2000); beepband = 1; delay (50); } delay (50); // give tone & debounce noTone (TonePin); if (digitalRead (BANDSwitch) == 1) { // released beepband = 0; BAND = BAND + 1; if (BAND >= 7) BAND = 1; // set 0 if HF is enabled ! EEPROM.write(2,BAND); // store new mode permanently if (BAND == 0) { //set proper calibration constants PowCal = PowCalHF;} if (BAND == 1) { PowCal = PowCal6m;} if (BAND == 2) { PowCal = PowCal4m;} if (BAND == 3) { PowCal = PowCal2m;} if (BAND == 4) { PowCal = PowCal70;} if (BAND == 5) { PowCal = PowCal23;} if (BAND == 6) { PowCal = PowCal13;} //show band lcd.setCursor(11, 1); lcd.print( myStrings[BAND]); //show Pmax for this band clearline0(); lcd.setCursor(0, 0); lcd.print("Pmax = "); // calculate max range for this band double PWRmax = pow((5000 + Diode),2) ; PWRmax = PWRmax / PowCal / 1000; // if > 1kw, 1kW is enough :o) if (PWRmax >= 1000) { lcd.print(" 1 kW "); } else { if (PWRmax < 1) { PowDis = PWRmax * 1000; if (PowDis > 100) { //round PowDis up to ten PowDis = PowDis / 10; PowDis = PowDis * 10; } // if (PowDis < 100) { // lcd.print(" "); // } // if (PowDis< 10) { // lcd.print(" "); // } lcd.print((PowDis), DEC); lcd.print("mW "); } else { PowDis = PWRmax ; //format PowDis if (PowDis > 100) { //round PowDis up to ten PowDis = PowDis / 10; PowDis = PowDis * 10; } // if (PowDis < 100) { // lcd.print(" "); // } // if (PowDis< 10) { // lcd.print(" "); // } lcd.print((PowDis), DEC); lcd.print("w "); } } BandTime = millis(); // reset display timer for bandchange display // delay (1000); } } // read sensors if (PushButton == 0) { // Read 3 way switch Tone = digitalRead (ToneSwitch); // read tone button PEP = digitalRead (PEPswitch); // read PEP button } VoltFWD = analogRead(A0); // Read FWD sensor voltage VoltREF = analogRead(A1); // Read REFL sensor voltage // PEP detect if (VoltFWD > VoltFWDmax) { VoltFWDmax = VoltFWD; PeakTime = millis (); decay = 1; } // decay else if ((millis() - PeakTime) > 400) { // 400 = PEP Peak hold time VoltFWDmax = VoltFWDmax / (decay + 0.3); PeakTime = millis (); decay = decay + 1; //decay } // LCD refresh if no tone mode if (((millis() - DisplayTime) > 200) and (Tone == 1)){ //200 = display refresh rate in PEP & dBm mode DisplayTime = millis (); refreshdisplay(); } if (Tone == 0) { // in tone mode, refresh triggered by tone decay = 0; refreshdisplay(); } } // ========================================================= // ************ Refresh LCD display Routine **************** // ========================================================= void refreshdisplay () { // check for low battery DisplayCycle = DisplayCycle ++ ; if (DisplayCycle >= 50) { // every 50 display cycles, check battery voltage DisplayCycle = (0); measuresupplyvolt (); } // check if band change and display to hold if (((millis() - BandTime) < 3000)) return; // show band change parameters // Check if toggle switch for mode is present, default is push button if ((digitalRead (ToneSwitch) == 0) or digitalRead (PEPswitch) == 0) { PushButton = (0); // toggle switch is present } // LCD Backlight if (VoltFWD>0) { digitalWrite(LCDbacklight,1) ; // turn backlight on BacklightTime = millis (); //set timer } else if (((millis() - BacklightTime) > 8000)) { // 8 seconds backlight digitalWrite(LCDbacklight, 0) ; // turn backlight off } // Overrange detect if ((VoltFWD>1022) and (digitalRead (ModeSwitch) == 1) ) { lcd.clear(); lcd.setCursor(1, 0); lcd.print("- Overrange -"); lcd.setCursor(2, 1); lcd.print("Pmax = "); // calculate max range for this band double PWRmax = pow((5000 + Diode),2) ; PWRmax = PWRmax / PowCal / 1000; // if P > 1kw, 1kW is enough :o) if (PWRmax >= 1000) { lcd.print(" 1 kW "); } else { if (PWRmax < 1) { // We are measuring milliwatts PowDis = PWRmax * 1000; if (PowDis > 100) { //round PowDis up to ten PowDis = PowDis / 10; PowDis = PowDis * 10; } if (PowDis < 100) { lcd.print(" "); } if (PowDis< 10) { lcd.print(" "); } lcd.print((PowDis), DEC); lcd.print(" mW "); } else { PowDis = PWRmax ; // We are measuring watts //format PowDis if (PowDis > 100) { //round PowDis up to ten PowDis = PowDis / 10; PowDis = PowDis * 10; } if (PowDis < 100) { lcd.print(" "); } if (PowDis< 10) { lcd.print(" "); } lcd.print((PowDis), DEC); lcd.print(" w "); } } tone(TonePin,2500); delay (200) ; noTone(TonePin); if (digitalRead (ModeSwitch) == 1) delay (2000) ; lcd.clear(); return; } // process FWD voltage VoltFWD = map(VoltFWD, 0,1023,0,5000); VoltFWD = (VoltFWD + Diode); //correct for diode voltage drop //process REF VoltREF = map(VoltREF, 0,1023,0,5000); VoltREF = (VoltREF + Diode); //correct for diode voltage drop // POWER Display lcd.setCursor(0, 0); lcd.print("Pwr "); /* CALIBRATION ROUTINE FORWARD VOLTAGE //////////////////// // This routine prints on LCD the FWD voltage measured. // When no power applied, the FWD voltage displayed will be the diode voltage in mV // To calculate the calibration factor, take the reading (including diode voltage) // Uncomment this routine to enter calibration mode lcd.setCursor(0, 0); lcd.print("VoltFWD= "); lcd.print(VoltFWD, DEC); delay(500); */ ////////////////////////////////////////////////////// //calcultate Power Max, we will need it later double PWRmax = pow((5000 + Diode),2) ; PWRmax = PWRmax / PowCal / 1000; if (PEP == 1) { // Instant POWER MODE double PWR = pow(VoltFWD,2) ; PWR= PWR / PowCal / 1000; if (VoltFWD<(Diode+2)) { PWR = 0; } if (PWRmax < 1) { // milliwatt readout PowDis = PWR * 1000; if (PowDis < 100) { lcd.print(" "); } if (PowDis < 10) { lcd.print(" "); } lcd.print((PowDis), DEC); lcd.print(" mW "); if ((PWR > 0) & (Tone == 1)) { if ((10*log10(PWR*1000)) >= 0) {lcd.print("+");} // + dBm lcd.print(10*log10(PWR*1000)); // dBm calculation } else if (Tone == 1) { lcd.print("(dBm)"); } if (Tone == 0) lcd.print("(Bip)"); } else { PowDis = PWR * 10; if (PowDis/10 < 100) { lcd.print(" "); } if (PowDis/10 < 10) { lcd.print(" "); } lcd.print((PowDis/10), DEC);lcd.print("."); lcd.print((PowDis)%10, DEC); lcd.print("w "); if ((PWR > 0) & (Tone == 1)) { if ((10*log10(PWR*1000)) >= 0) {lcd.print("+");} // + dBm lcd.print(10*log10(PWR*1000)); // dBm calculation } else if (Tone == 1) { lcd.print("(dBm)"); } if (Tone == 0) lcd.print("(Bip)"); } } else if (PEP == 0) { // PEP POWER MODE Tone == 1; // Reset Tone mode VoltPEP = map(VoltFWDmax, 0,1023,0,5000); VoltPEP = (VoltPEP + Diode); //correct for diode voltage double PWR = pow(VoltPEP,2) ; PWR= PWR / PowCal / 1000; if (VoltPEP<(Diode+2)) { PWR = 0; } if (PWRmax < 1) { //milliwatt readout PowDis = PWR * 1000; if (PowDis < 100) { lcd.print(" "); } if (PowDis < 10) { lcd.print(" "); } lcd.print((PowDis), DEC); lcd.print(" mW (PEP)"); } else { PowDis = PWR * 10; if (PowDis/10 < 100) { lcd.print(" "); } if (PowDis/10 < 10) { lcd.print(" "); } lcd.print((PowDis/10), DEC);lcd.print("."); lcd.print((PowDis)%10, DEC); lcd.print("w (PEP)"); } } // SWR Display // print the band lcd.setCursor(11, 1); lcd.print( myStrings[BAND]); lcd.setCursor(0, 1); lcd.print("SWR "); if ((VoltFWD <= (Diode+2)) or (PEP == 0)) { // No power = no SWR to detect lcd.print(" -.- "); } else if ( (VoltFWD > (Diode+1)) & (VoltFWD < (VoltFWDmini)) & (VoltREF <= (Diode+1))){ // at low power no SWR display or < 1.5 lcd.print("<1.5 "); } else { Vratio = VoltREF / VoltFWD; // Check ROUTINE //lcd.print(VoltREF, DEC); // DEBUG //lcd.print(Vratio, DEC); // DEBUG SWR = ((1 + Vratio)/ (1 - Vratio)); if ((SWR > 3.1) & (PEP == 1)) { lcd.print(" > 3 "); tone(TonePin,2500); delay (60); noTone(TonePin); } else { SWRDis = SWR * 10; if (SWRDis < 10){ // SWR cannot be lower than 1.0 SWRDis = 10 ; } if (SWRDis/10 < 10) { lcd.print(" "); } lcd.print((SWRDis/10), DEC);lcd.print("."); lcd.print((SWRDis)%10, DEC); lcd.print(" "); /// SWR 'Bip' MODE if ((Tone == 0) and (digitalRead (ModeSwitch) == 1)) { SWRtonePitch = map((SWRDis*SWRDis),100,900,300,2200); SWRtoneLenght = map((SWRDis*SWRDis),100,900,300,60); tone(TonePin,SWRtonePitch); delay (SWRtoneLenght); noTone(TonePin); } } } if ((Tone == 0) and (digitalRead (ModeSwitch) == 1)){ delay (SWRtoneLenght/3); // leave silence between SWR beeps, only if no mode change required } } void clearline0 () { // subroutine clear top line display lcd.setCursor(0, 0); lcd.print(" "); } void clearline1 () { // subroutine clear bottom line display lcd.setCursor(0, 1); lcd.print(" "); } void measuresupplyvolt () { // Power SupplyVoltage measure SupplyVoltage = analogRead(A5); // Read power supply voltage SupplyVoltage = map(SupplyVoltage, 0,1023,0,(50*(R2+R1)/R1)); if (SupplyVoltage <= 50) return; // not running on batteries ! if (SupplyVoltage >= 84) SupplyVoltage=SupplyVoltage+6 ; // running on ext power, correct for diode voltage drop 0.6v // print power supply voltage if startup or low battery condition if ((RunOnce == 1) or (SupplyVoltage <= VoltSupplyMini)) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Batt Volt="); if (SupplyVoltage < 100) { lcd.print(" "); } if (SupplyVoltage < 10) { lcd.print(" "); } lcd.print((SupplyVoltage/10), DEC); lcd.print("."); lcd.print((SupplyVoltage)%10, DEC); lcd.print("v"); if (SupplyVoltage <= VoltSupplyMini) { lcd.setCursor(2, 1); lcd.print("LOW BATTERY !"); } delay (1500); } } Source: ARDUINO RF power & SWR meter ### AXIOMTEK’S ALL-IN-ONE MACHINE VISION SOLUTION FOR AIOT – MVS900-511-FL Axiomtek – a world-renowned leader relentlessly devoted in the research, development and manufacture of series of innovative and reliable industrial computer products of high efficiency – is proud to introduce the MVS900-511-FL, its all-in-one fanless machine vision system with the real-time vision I/O and camera interfaces. Its vision I/O includes trigger input, trigger output, LED lighting control, quadrature encoder input, and isolated DIO. Equipped with four IEEE802.3at GbE LAN ports (PoE) for popular GigE cameras, this powerful vision system can support area scan and line scan for automated optical inspection (AOI). By adding the support of the Intel® OpenVINO™ toolkit, it can be trained and perform inference to catch defects, flawed parts, making sure every product leaving a production line meets all quality criteria. With its integrated vision elements, the high-precision MVS900-511-FL addresses the needs and requirements of smart manufacturing and AIoT applications. The MVS900-511-FL has scalable processing powers with a choice of LGA1151 socket 7th/6th generation Intel® Core™ processors or Celeron® processor (up to 65W) with the Intel® H110 chipset. This high-performance machine vision system can operate under sequential control and can be synchronized with four cameras. Meanwhile, the MVS900-511-FL enables easy integration of any light source. Its integrated lighting controller comes with both the strobe mode and trigger mode, which can support various kinds of LEDs and reduce the overall cost of system integration. These advanced features allow system integrators to configure and deploy vision applications faster and easier. Read more: AXIOMTEK’S ALL-IN-ONE MACHINE VISION SOLUTION FOR AIOT – MVS900-511-FL ### Frequency and Phase Locked Loops (PLL) The purpose of a PLL is to generate a frequency and phase-locked output oscillation signal. To accomplish this objective, past methods primarily worked by adjusting the PLL output frequency often based on the phase error (i.e. the faster/slower phase relationship) to produce a temporary, non-constant frequency and phase-locked output oscillation signal. The constant fluctuation in VCO frequency leads to noticeable Jitter and extended settling time as the correct phase often coincides with an incorrect frequency, and vice versa. 1. Field of the Invention The current invention pertains to Phase Locked Loops (PLL), which utilize both voltage-controlled oscillators (VCO) and digital-controlled oscillators (DCO). 2. Description of Prior Art Analog phase-locked loops typically consist of a phase detector, a low-pass filter, a voltage-controlled oscillator, and a frequency divider arranged in a negative feedback setup. Digital phase-locked loops typically consist of a time-to-digital converter, a digital loop filter, a digitally controlled oscillator (DCO), and a frequency divider within a negative feedback setup. A VCO or DCO efficiently provides oscillation waveform with variable frequency. PLL synchronises VCO / DCO frequency to input reference frequency feedback. VCO output frequency Fvco = Kvco * Vctl, where Kvco is constant gain over most of the usable control voltage range, and Vctl is VCO control voltage. A crucial component of a PLL is the phase detector or time-to-digital converter. This involves comparing the phase of both inputs to the detector and generating a corrective voltage signal to regulate the oscillator to achieve zero phase difference between the inputs. Normally, the phase detector receives input from the reference signal and the divided VCO or DCO output. The purpose of PLL is to generate a frequency and phase locked output oscillation signal. However, prior art cannot achieve the desired purpose because (1) VCO and DCO are frequency variable and controllable, they are not phase variable and controllable and (2), using phase error to correct frequency is improper because it is a conflict control and leads to infinite jitter in PLL output (i.e. deviation of VCO/DCO output edges from their ideal placement in time). Due to these two reasons, neither frequency nor phase will actually be locked – making PLL performance difficult to improve. Prior art essentially functioned by frequently changing the PLL output frequency according to the phase error (i.e. the faster/slower phase relationship) to generate a momentary, but not static, frequency and phase locked output oscillation signal. This change in VCO frequency creates significant jitter and a longer settling time. Summary of the Invention A perfect PLL should produce a highly consistent output oscillation signal with a genuinely locked frequency, and a genuinely locked phase (meaning both frequency and phase remain constant over time). Two signals must have identical frequencies or be within a small range of each other to achieve true phase locking where their phase remains constant over time. This can be more clearly explained by following mathematical equations. Let ∆Φ(t) = relative phase error, ω1 = frequency1, ω2 = frequency2, (ω1- ω2) = frequency error, θ1 is ω1’s initial phase (constant), θ2 is ω2’s initial phase (constant), and t = time, Ref(t) = M * sin (ω1*t + θ1) = M * sin (∆θ1(t)+ θ1),                  (1-1) Div(t) = N * sin (ω2*t + θ2)  = N * sin (∆θ2(t)+ θ2),                (1-2) ∆Φ(t) = (ω1- ω2)*t +(θ1 – θ2) = (∆θ1(t) – ∆θ2(t)) +(θ1 – θ2),     (1-3) According to equation (1-3), at any time, when ω1= ω2 or (ω1- ω2) = 0, ∆Φ(t) = θ1 – θ2 becomes a constant, the two signals will have a fixed phase relationship and, therefore, no jitter, otherwise, relative phase error ∆Φ(t) will change with t, ω1 or ω2 – meaning that the distance between Ref(t) ’s and Div(t)’s rising or falling edges will change with time and therefore, jitter will happen. Prior art (faster/slower feedback control) can be expressed by the following advanced mathematical equation. ∆Φ(t) = ∫∆ω(t)*dt = ∫(ω1(t)- ω2(t))*dt when phase is locked, mathematically, ∆Φ(t) ≈ constant (even ω1(t) – ω2(t) ≠ 0, the integral result ∆Φ(t) is still possible to be a constant). But in reality, ∆Φ(t) will change (within a narrow, allowable range) with t, ω1(t) or ω2(t). That is why jitter will be inevitable. The new method in this invention changes the single loop PLL with a frequency-locked loop and a phase-locked loop. The frequency loop is controlled by frequency error, while the phase-locked loop is controlled by dynamic phase error rather than static phase error. The frequency-locked loop targets a frequency variable unit/device such as VCO and DCO. The phase-locked loop's controlling goal is a unit/device that can vary in phase delay. Furthermore, it offers an enhanced proportional and integral feedback control method and a basic but effective frequency error detector for the mentioned frequency-locked loop. Thirdly, it offers a flexible phase error identification and rectification for the mentioned phase-locked loop. The current invention offers various benefits: enabling separate control over frequency and phase, achieving true locking with minimal error (ideally zero), reducing jitter significantly (without utilizing phase error for VCO or DCO control), providing swift output response with minimal or no frequency overshot/undershot, and ensuring high-frequency precision when locked, all while maintaining a straightforward design that is simple to manufacture. Preferred Embodiment In Figure 1, a frequency-locked loop is built of frequency detect, logic 1, D/A1, D/A2, VCO/DCO, phase control, Divider A, Divider B, and Divider C. An embodiment of the block diagram for the frequency and phase locked loops, according to the present invention. A phase locked loop is built of phase detect, logic 2, phase control, Divider A, Divider B, and Divider C. A frequency and phase locked loop is built of connecting the output of the frequency locked loop Out’(t) with the input of the phase locked loop to output a frequency and phase locked signal Out(t). In the frequency locked loop, Out(t) is first divided by Divider A to generate a signal CLK. CLK is provided to Divider B for further dividing and to frequency detect as high speed sampling clock for Ref(t) and Div(t). The output of Divider B generates a signal slope. Slope is provided to the logic, D/A1, D/A2 as a clock of a counter used for frequency coarse tune and to Divider C for further dividing. Because the frequency of signal slope will determine the rising speed of the counter’s outputs which are converted to a frequency control voltage by D/A1 for frequency proportional/coarse control, it is named slope. Changing Divider B can change the slope of proportional frequency control. Divider C generates signal Div(t). Div(t) is provided to frequency detect where its frequency is compared with and subtracted by reference signal Ref(t). Frequency detect generates a frequency error signal Er1 and an enable signal EN2. Er1 is the frequency difference / error between Ref(t) and Div(t) and is provided to logic 1, D/A1, D/A2 for setting the D/A1’s output at the end of proportional control (coarse tune)and for D/A2’s integral control (fine tune) so that Er1 will be or approximate to zero and frequency can be locked. EN2 is an enable signal which will become ‘1’ when frequency is locked and is provided to phase detect to enable phase error detect. The output of logic 1, D/A1, D/A2 block is provided to control VCO/DCO. The output of VCO/DCO , Out’(t) is a frequency locked signal which is provided to phase control. The output of phase detect is provided to Logic 2. Logic 2 generates a phase control signal which decides whether to increase or decrease phase delay and is provided to phase control. Phase control will add or subtract delay to the VCO/DCO output signal Out’(t) accordingly and output a frequency and phase locked signal Out(t). In Figure 2, TDC1 and TDC2 comprise two identical counters which will be reset at Ref(t) and Div(t) rising edges respectively, then start to count CLK and stop at Ref(t) and Div(t) falling edges respectively. Referring to Figure 4, at the end, TDC1’s output is the CLK pulse numbers counted during D1, TDC2’s output is the CLK pulse numbers counted during D2. In this way, high resolution time to digital conversions are achieved (D1 and D2 can have phase difference). TDC1 and TDC2 comprise two identical counters which will be reset at Ref(t) and Div(t) rising edges respectively, then start to count CLK and stop at Ref(t) and Div(t) falling edges respectively. SUB1 receives digitized inputs D1 and D2. SUB1 takes the difference between D1 and D2, providing the absolute value as Er1 frequency error, and triggers EN2 high when Er1 reaches zero for the first time. Er1 is given for digital addition and logic functions. In logic, the initial rising edge from Er1 will produce a start signal to begin coarse tune/proportional frequency control and activate the counter. At the same time, the starting output value of D/A2 is configured to be half of its highest value. The counter is designed as a pre-set up/down counter, where it counts down if the current value is higher than the pre-set one, counts up if lower, and stops if they are equal. The preset counter value is determined by the target frequency and control voltage of the VCO/DCO and is adjusted at the beginning of each coarse tune. When the counter reaches its pre-set value, the logic will produce a stop signal to finish the coarse tune and halt the counter, while also sending a high EN1 signal to COMP1 to start the fine-tune/integral frequency control. The counter will maintain its output value to create an output voltage V1 through D/A1 to achieve a coarse adjustment. V1 is given for analog addition. Once EN1 is activated, COMP1 checks if D1 is greater than, less than, or equal to D2, generating corresponding up, down, or both signals accordingly. Digital ads receive both upward and downward signals. In digital addition, the current value Er1 is added/subtracted to the previous output value D read back from D/A2 based on the up/down signal. The outcome will be utilized to revise D and produce the following V2(t). This procedure will persist until Er1 reaches zero or falls within an acceptable range. The analog add receives the output, V2(t), from D/A2. Analog combines V2 with V1 to create a proportional and integral frequency control voltage V1 for VCO/DCO. VCO produces an output signal Out'(t) that is locked to a frequency when Er1 equals zero. Since TDC1 and TDC2 are the same and share the same clock signal, any timing errors from the clock can be mostly eliminated by SUB1 (even with a phase difference). When D1 and D2 are equal, this will result in a very reliable frequency error Er1, so there is no need for an extra ring oscillator to create the clock signal. This will greatly streamline design while offering high resolution, minimal error time for digital conversion even during loop transient period. When EN2 goes high, AND2 is chosen as the initial delay selection. SUB2 will transform the time gap between Reset1/t1 and Reset2/t2 into a digital constant phase error denoted as Er2. The initial static phase error/first Er2 value will be stored in SUB2’s register as Er0, to be used as a benchmark for future comparisons. COMP2 is given Er2. COMP2 will produce an up signal high if Er2 is lower than Er0, a down signal high if Er2 is higher than Er0, and both signals low if Er2 equals Er0. The upcoming Er2 value will be compared to Er. Signal waveform relation according to the present invention. SHIFT Reg receives signals that go both upwards and downwards. If both the up event and up signals are high, AND3 will be chosen to introduce a delay to Out’(t); if both the down event and down signals are high, AND1 will be chosen to decrease the delay to Out’(t); if both the up and down signals are low, there will be no alteration. Just one AND gate will be chosen out of the three options. This ensures that the relative phase difference between Ref(t) and Div(t) stays near Er0 or is locked. As a result, Out(t) is locked in frequency and phase. Adding more delay stages can enhance the precision of the phase-locked loop. There is no requirement to eliminate the static phase error Er0 to zero when using PLL as a frequency synthesizer. However, if needed, the static phase error Er0 can be reduced to zero by synchronizing the VCO output with D1's rising or falling edge after both frequency and phase are locked, while also ensuring Er0 is set to zero. Once the frequency is set, whenever the phase goes beyond the control limit, frequency fine-tuning will be activated. In case of a change in frequency band, the coarse tune will start and a different pre-set value will be given to the counter. The diagrams shown here are simply illustrations. There could be numerous modifications to these diagrams or the steps (or operations) explained here without losing the essence of the invention. All of these different versions are seen as belonging to the invention that has been claimed. Even though the main version of the innovation has been explained, it is acknowledged that experts in the field, both currently and in the future, can introduce different enhancements that are covered by the following claims. These claims should be construed to maintain the proper protection for the invention first described. I claim: Frequency and Phase-locked Loops for controlling the frequency and phase of an output signal Out(t) in response to an input signal Ref(t), comprising: (a) A frequency feedback control loop for controlling the frequency of an output signal Out(t) in response to an input Ref(t) signal frequency according to a frequency error Er1 between its divided output signal Div(t) and input signal Ref(t) and for generating an EN2 high signal to initiate phase feedback control when frequency error Er1 becomes zero or frequency is locked. (b) A phase feedback control loop for controlling the phase of a divided output signal Div(t) in alliance to/to match with an input signal Ref(t) phase according to the first static phase error Er0 between its divided output signal Div(t) and input signal Ref(t) and to the phase error between the first static phase error Er0 and the subsequent static phase error Er2 and for initiating frequency integral control when phase control is out of range. The apparatus of claim 1, where in said frequency feedback control loop comprises: An open proportional control loop and a close integral control loop. The apparatus of claim 2, where in said open proportional control loop comprises: Means for changing the slop and controlling the time length of proportional control and for initiating frequency integral control when counter’s output value is equal to its pre-set value. The apparatus of claim 3, where in said means for changing the slope comprises: To change slope by changing Divider B’s constant dividing value. The apparatus of claim 3, where in said means for controlling the time length of open loop proportional control comprises: Logic generates an EN1 high to hold proportional control and to enable frequency integral control when up/down counter’s output value becomes equal to its pre-set value. The apparatus of claim 2, where in said close loop frequency integral control comprises: Means for frequency error Er1 generation and integral control. The apparatus of claim 6, where in said frequency error generation comprises: Using a high frequency CLK from the feedback Divider A to drive two identical counters combining with logic control within TDC1 and TDC2 to achieve time to digital conversion, to generate a frequency error Er1 and to generate an EN2 high signal to initiate phase feedback control after Er1 becomes zero. The apparatus of claim 6, where in said close loop frequency integral control comprises: Means for adding or subtracting the next frequency error Er1 with previous result D and updating D. The apparatus of claim 1, where in said phase feedback control loop comprises: Means for using first static phase error of Er2 value as a reference phase error Er0 to compare with subsequent Er2 to add or subtract phase delay to frequency feedback loop’s input signal Out’(t) and output a frequency and phase locked signal Out(t). Source: Frequency and Phase Locked Loops (PLL) ### ARDUINO VOLTMETER USING SH1106 OLED DISPLAY A voltmeter is an important tool on the workbench of every electronics hobbyist, maker or hardware design engineer. As its name suggests, allows the user to measure the voltage difference between two points.  For today’s tutorial, we will look at how you can build an Arduino based DIY voltmeter, for use in situations where you don’t have the standard meters around. Measuring a DC voltage, should probably be as easy as connecting the voltage to be measured to an analog pin on the Arduino, but this becomes complicated when voltages are higher than the Arduino’s operational voltage (5V). When applied to an analog pin, Arduino will not only give a false reading but it could also damage the board. To solve this, today’s project uses the principle of voltage divider such that only a fraction of the voltage to be measured is applied to the Arduino. This fraction of voltage that goes in is determined by the ratio of the resistors used, as such, there is usually a limit to the maximum voltage that can be applied. For this tutorial, we will use a combo of a 100k and 10kresistor, with the 10k resistor on the “output side”. Feel free to experiment with other resistor values as well. To make the voltmeter fully functional, we will add a third part, which is an SH1106 controller-based, 1.3″ OLED display, to show the value of the voltage being measured by the voltmeter. It is important to note that this voltmeter can only monitor DC voltages within the range of 0-30v due to the values of the voltage divider used. It will require a voltage conversion circuit to be able to measure AC voltages. Let’s dive in. REQUIRED COMPONENT The following components are required to build this project; An Arduino UNO board 1.3″ (132×64) OLED Display 10k Resistor 100k Resistor A breadboard Jumper wires These components can be bought from any electronics component store online. SCHEMATICS The schematics for this project is pretty straightforward. The output of the voltage divider is connected to an analog pin on the Arduino while the OLED display is connected to the I2C bus on the Arduino. Connect the components as shown in the schematics below: As usual, a pin to pin description of the connection between the Arduino and the OLED display is illustrated below. OLED – Arduino VCC - 5v GND - GND SDA - A4 SCL - A5 Go over the connections once again to ensure everything is as it should be. CODE With the schematics complete we can now write the code for the project. The idea behind the code is simple, read the analog value, process it, then determine the Vin using the voltage divider equation and display it on the OLED display. To reduce the complexity of the code to interact with the OLED, we will use the U8glib library. The library contains functions which make displaying text and images on the display easy. To do a quick explanation of the code; We start as usual by including the library that will be used for the project, which in this case is, just the U8glib library. #include "U8glib.h" // U8glib library for the OLED Next, we specify the analog pin to which the output of our voltage divider is connected and also create variables to hold different parameters including the Vout, Vin and the values of the resistors, correctly initializing their values. Read more: ARDUINO VOLTMETER USING SH1106 OLED DISPLAY ### Arduino text'in Arduino text‘in. Key Features: 24 relays controlled by 4 I/O lines! Cell phone text using your Arduino. This project hacks a cell phone to text using normally open relays. After investigating cellular modules on the internet I decided it looks not only rather pricy, but also like a possibility that even after I had it working that a cellular provider might not let me put the device on their network. It seemed like a good cell phone hack was in order to make this work for me. Step 1: Purchase a cheap prepaid flip phone, activate and charge it. Mine was $20.00. Flip phones are fairly easy to disassemble. You will need a very small screw driver set. The button pads on the inside are still large enough to allow for soldering wires in place without too much trouble. The prepaid plans let you text for pretty cheap too if you pick the right plan. Plus because its prepaid you can just let it run out whenever you are finished with it and best of all no contract. Turn on the flip phone and take some notes about how it operates. Yours may access menus and things differently then mine does and its nice to know as you move forward with this. Figure out what keys you still want to have access to once the phone is mounted. Because I used a prepaid phone I have to access it now and then to add more air time. It is also helpful to know how things are going with the phone when you can turn it on and activate it with the buttons after it is mounted to the board. The buttons on your cell phone board will be connecting directly to the phone. This way you can access the phone even if the rest of the circuit is off or maybe just doing other things. Safety First. Remove the battery from the phone. Tear apart the flip phone. The circuit board inside is pretty delicate and has some sharp parts so use some caution. Do not break the LCD displays and be very careful not to destroy the very small ribbon cables that interconnect things. The part of the phone that houses the LCD, microphone and usually the camera will need to be taken completely out of the case. The flip phone I purchased had enough room to flip the camera around so that it can still take pictures. The case for the main board of the phone (where the battery is) will need to stay more or less intact. This makes it easier to put the battery back in and your not messing with the built in antenna so it should still have its normal signal strength. Step 2: Purchase / scavenge some electronics parts. 1 - Arduino Uno 24 - Normally Open buttons. These will replace the buttons on the phone. 3 - 74HC374 Octal D-Type Flip-Flop chips. 24 - Reed relays. I had a bunch laying around. 24 - NPN general purpose. I used 2N2222. 24 - 20 K Ohm resistors 24 to 48 General purpose diodes You don’t have to go overkill like I did. At minimum you need one diode across the relay coil to prevent voltage spikes when the coil turns off. 1 - Board to mount relay stuff. 1 - Board to mount cell phone A bunch of jumper wires. Keep them neat. It makes it easier to trouble shoot. 1 - 12 volt power for relays. 1 - 5 volt power for 74hc374’s and Arduino. Step 3: Layout your buttons on your board more or less like they are laid out on the cell phone. This makes it easier to know what buttons you are pressing. Notice that I have not used a few of the buttons. Step 4: Find some small fairly flexible cable to use for all of the interconnecting soldering you are going to be doing. I used some spare ribbon cable. I cut it longer then I would need. I then tinned and  trimmed the end to go to the phone. Leave your wires long here because it is easier to cut wire off then it is to try to re-solder them. The circuit board on the phone can easily be damaged by too much heat so use caution. I found it easier to start with the button pads closest to my new buttons and move my way up from there. Step 5: Once you have the part of the phone that houses the LCD apart you may need to cut or drill a hole in the mounting board for the ribbon cable to go through. The LCD will be mounting on the same side as the new buttons. I used some two sided tape to mount it. The main part of the cell phone will be mounted on the other side so it is closer to the relays. Step 6: Before soldering the wires to the button pads on the phone check to be sure you are using normally open buttons also verify the way you have them soldered. The buttons on the phone board will also be going off to the relay board so your going to need some more ribbon cable. I found it was easier if I mounted the cell phone body and LCD before I soldered to the buttons on the cell phone board. Be careful not to scratch the phones LCD. Once you have all of the buttons on the phone board soldered and interconnected to the cell phone pads you can move on to getting the relay board assembled. Step 7: RELAY BOARD I love to expand the I/O on things as far as I can. I use to have a few 74HC164 serial in, parallel out shift registers. I tried to order some more through a local electronics place and two years later I am still waiting for them to get in. Geographical oddity or something. So one day as I was looking at the circuit diagram for the 74hc164. I noticed it was similar to the 74hc374 except there would have to be some jumpers to make it function properly. The cool part about these is that it only takes two I/O (clock and data) to control up to eight outputs! If you take more then one chip and tie all of the data lines together and only clock the one you want to have responding you can do even more. I tied 3 chips together and have 24 relays at the cost of 4 I/O. I love that!The 74hc374's needs 5 volts to operate. I built a regulator circuit with a 7805 voltage regulator and a few other components. Plus you can take the input 12 volts for powering the relays to run your 5 volt regulator. For more detail: Arduino text'in ### Arduino Sound Alarm I’ve just completed my second Arduino project, a sound level detector which sets off an “alarm” when there’s the sound level is to high for too long.  I built it for use in a school that wants to provide visual feedback to students when they are being too loud.  The “alarm” is a string of flashing LEDs that’s controlled by an IR-remote, which I reverse engineered using the the arduino itself and the excellent IRremote library to figure out which codes activate the LED string. The IRremote library includes an example that dumps the codes and code types that remotes typically use.  So I just ran that example with my arduino hooked up to an IR detector from adafruit.  It was really quite easy to do. It’s been a fun project because it’s quite flexible and configurable.  Here’s a short video of the finished product: For anyone who wants to build one of these here’s a bread-board diagram that I made using the very cool Fritzing package: The Adruino sketch that powers this is available on github. Here are some details on the circuitry.  The sound detector is based on the ZX-Sound board. Here’s a nice post on the arduino.cc site that I used as my starting place for building the sound part of this board.  The video helpfully includes a parts list which I sourced from Allied electronics, all except for the mic.  The LCD is the $10 16×2 from Adafruit (their tutorial on wiring it up was great), and I also used their electret microphone.  One note about the microphone is that it’s polarity matters.  If you get it in backwards, it’s much less sensitive.  I found this out purely by accident!  I also used their IR LED. Here are some photos of assembling the project.   Major Components in ProjectArduino   For more detail: Arduino Sound Alarm ### Arduino Sketch RemoteStation This sketch demonstrates Internet-based remote communication using a companion ‘bridge’ program running on the attached host which sends and receives messages via an online MQTT server. This allows connecting one Arduino to another over arbitrary distances, which we can use as a starting point for building collaborative telepresence. Full Source Code The full code is all in one file RemoteStation.ino. // RemoteStation.ino : demonstrate communication across the Internet using a Python-based MQTT bridge and MQTT server // This example sends and receives data over the host serial port representing // I/O messages. The arduino_mqtt_bridge.py Python application can be run on // the attached host to relay these messages to a remote system using an MQTT // server as a messaging hub. //================================================================ const int switchPin = 6; // Specify a pin for user switch input. const long BAUD_RATE = 115200; // The baud rate is the number of bits per second transmitted over the serial port. //================================================================ // This function is called once after reset to initialize the program. void setup() { // Initialize the Serial port for host communication. Serial.begin(BAUD_RATE); // Initialize the digital input/output pins. pinMode(switchPin, INPUT); pinMode(LED_BUILTIN, OUTPUT); } //================================================================ // Polling function to process messages received over the serial port from the // remote Arduino. Each message is a line of text containing a single integer // as text. void serial_input_poll(void) { while (Serial.available()) { // read the text and convert to an integer int value = Serial.parseInt(); // drive the LED to indicate the value if (value) { digitalWrite(LED_BUILTIN, HIGH); } else { digitalWrite(LED_BUILTIN, LOW); } // flush any remaining characters until the line end Serial.find('\n'); } } //================================================================ // Polling function to transmit data both periodically and whenever the input // changes. void hardware_input_poll(void) { static int last_switch_input = 0; const unsigned long message_timeout = 2000; // send every 2 seconds at minimum static unsigned long last_time = 0; // capture the current state int switch_input = digitalRead(switchPin); unsigned long now = millis(); // if the state changed or the timer expired, send data if ((switch_input != last_switch_input) || ((now - last_time) > message_timeout)) { last_time = now; last_switch_input = switch_input; // send the message as a single integer on a text line Serial.println(switch_input); } } /****************************************************************/ /// Standard Arduino polling function to handle all I/O and periodic processing. /// This loop should never be allowed to stall or block so that all tasks can be /// constantly serviced. void loop() { serial_input_poll(); hardware_input_poll(); } /****************************************************************/ Source: Arduino Sketch RemoteStation ### Arduino Sketch Remote User Interface This sketch demonstrates Internet-based remote communication using a companion ‘bridge’ program running on the attached host which sends and receives messages via an online MQTT server. This allows connecting one Arduino to another over arbitrary distances, which we can use as a starting point for building collaborative telepresence. This example is configured to provide for up to five channels of output, each ranging from 0 to 100 inclusive. If this is used in conjunction with the MQTT Plotter (PyQt5) utility, the data will be interpreted as “X Y R G B”, where X and Y are point coordinates and R, G, and B define a color. This example will need to be customized for your hardware. It implements a default mapping from three sensors to the outputs, but at minimum the scaling and data rates will need to be adjusted. References: Arduino-MQTT Bridge (PyQt5), companion app to communicate over the network MQTT Plotter (PyQt5), utility app to display broadcast data MQTT Monitor (PyQt5), utility app for debugging MQTT programs Full Source Code The full code is all in one file RemoteUserInterface.ino. // RemoteUserInterface.ino : demonstrate communication across the Internet using a // Python-based MQTT bridge and MQTT server. // This example implements a networked user interface by sending sensor data // over the host serial port. These can be forwarded to a remote MQTT server // using the arduino_mqtt_bridge.py Python application on an attached computer. // The messages are broadcast to all clients subscribed to the message stream. // The details of remote connection are managed by the bridge application; all // this Arduino sketch needs to manage is sending and receiving lines of text // over the serial port. // This example is configured to provide for up to five channels of output, each // ranging from 0 to 100 inclusive. If this is used in conjunction with the // qt_mqtt_plotter.py utility, the data will be interpreted as "X Y R G B", // where X and Y are point coordinates and R, G, and B define a color. // This example also supports receiving messages from the network. The default // implementation turns the on-board LED on or off based on an integer input, // but could be extended, e.g. to produce sounds. //================================================================ // Hardware definitions. You will need to customize this for your specific hardware. const int tiltSwitchPin = 6; // Specify a pin for a tilt switch user input. const int sonarTriggerPin = 7; // Specify a pin for a sonar trigger output. const int sonarEchoPin = 8; // Specify a pin for a sonar echo input. const int photoInput = A0; // Specify the analog channel for a photoreflector input. //================================================================ // Current state of the five output channels. Each may range from 0 to 100, // inclusive. Illegal values will be clamped to this range on send. The // specific relationship between your sensor inputs and these values will need // to be customized for your hardware. int x_value = 50; // Initial position is the center of the plot (50, 50). int y_value = 50; int r_value = 0; // Initial color is pure black (0,0,0). int g_value = 0; int b_value = 0; // Set the serial port transmission rate. The baud rate is the number of bits // per second. const long BAUD_RATE = 115200; //================================================================ // This function is called once after reset to initialize the program. void setup() { // Initialize the Serial port for host communication. Serial.begin(BAUD_RATE); // Initialize the digital input/output pins. You will need to customize this // for your specific hardware. pinMode(LED_BUILTIN, OUTPUT); pinMode(tiltSwitchPin, INPUT); pinMode(sonarTriggerPin, OUTPUT); pinMode(sonarEchoPin, INPUT); } //================================================================ // This function is called repeatedly to handle all I/O and periodic processing. // This loop should never be allowed to stall or block so that all tasks can be // constantly serviced. void loop() { serial_input_poll(); hardware_input_poll(); } //================================================================ // Polling function to process messages received over the serial port from the // remote Arduino. Each message is a line of text containing a single integer // as text. void serial_input_poll(void) { while (Serial.available()) { // When serial data is available, process and interpret the available text. // This may be customized for your particular hardware. // The default implementation assumes the line contains a single integer // which controls the built-in LED state. int value = Serial.parseInt(); // Drive the LED to indicate the value. if (value) digitalWrite(LED_BUILTIN, HIGH); else digitalWrite(LED_BUILTIN, LOW); // Once all expected values are processed, flush any remaining characters // until the line end. Note that when using the Arduino IDE Serial Monitor, // you may need to set the line ending selector to Newline. Serial.find('\n'); } } //================================================================ // Polling function to read the inputs and transmit data whenever needed. void hardware_input_poll(void) { // Calculate the interval in milliseconds since the last polling cycle. static unsigned long last_time = 0; unsigned long now = millis(); unsigned long interval = now - last_time; last_time = now; // Poll each hardware device. Each function returns true if the input has // been updated. Each function directly updates the global output state // variables as per your specific hardware. The input_changed flag will be // true if any of the polling functions return true (a logical OR using ||). bool input_changed = (poll_tilt_switch(interval) || poll_sonar(interval) || poll_photosensor(interval) ); // Update the message timer used to guarantee a minimum message rate. static long message_timer = 0; message_timer -= interval; // If either the input changed or the message timer expires, retransmit to the network. if (input_changed || (message_timer < 0)) { message_timer = 1000; // one second timeout to guarantee a minimum message rate transmit_packet(); } } //================================================================ // Poll the tilt switch at regular intervals. Filter out switch bounces by // waiting for a new value to be observed for several cycles. bool poll_tilt_switch(unsigned long interval) { static long switch_timer = 0; switch_timer -= interval; if (switch_timer < 0) { switch_timer = 10; // 100 Hz sampling rate static bool last_value = false; // last stable value static int debounce_counter = 0; // number of samples of changed value observed // Read the digital input. bool value = digitalRead(tiltSwitchPin); // If the value has changed, count samples. if (value != last_value) { debounce_counter += 1; if (debounce_counter > 5) { // Change state if a new stable value has been observed. last_value = value; debounce_counter = 0; // Update the network data. The following will need to be customized for your hardware: r_value = 100 * value; // The data is changed, so report true. return true; } } else { // If the observed value is the same as the last transmitted, keep resetting the debounce counter. debounce_counter = 0; } } return false; // No change in state. } //================================================================ // Poll the sonar at regular intervals. bool poll_sonar(unsigned long interval) { static long sonar_timer = 0; sonar_timer -= interval; if (sonar_timer < 0) { sonar_timer = 250; // 4 Hz sampling rate // Generate a short trigger pulse. digitalWrite(sonarTriggerPin, HIGH); delayMicroseconds(10); digitalWrite(sonarTriggerPin, LOW); // Measure the echo pulse length. The ~6 ms timeout is chosen for a maximum // range of 100 cm assuming sound travels at 340 meters/sec. With a round // trip of 2 meters distance, the maximum ping time is 2/340 = 0.0059 // seconds. You may wish to customize this for your particular hardware. const unsigned long TIMEOUT = 5900; unsigned long ping_time = pulseIn(sonarEchoPin, HIGH, TIMEOUT); // The default implementation only updates the data if a ping was observed, // the no-ping condition is ignored. if (ping_time > 0) { // Update the data output and indicate a change. y_value = map(ping_time, 0, TIMEOUT, 0, 100); return true; } } return false; // No change in state. } //================================================================ // Poll the photosensor at regular intervals. Filter out repeated values to // minimum the network traffic when sitting idle. bool poll_photosensor(unsigned long interval) { static long photosensor_timer = 0; photosensor_timer -= interval; if (photosensor_timer < 0) { photosensor_timer = 200; // 5 Hz sampling rate // Read the analog input. int value = analogRead(photoInput); // If the value has changed, report it. static int last_value = 0; // last stable value if (value != last_value) { last_value = value; // Update the network data. The following will need to be customized for // your hardware: x_value = map(value, 0, 1023, 0, 100); // Data has changed, so report true. return true; } } return false; // No change in state. } //================================================================ // Send the current data to the MQTT server over the serial port. The values // are clamped to the legal range using constrain(). void transmit_packet(void) { Serial.print(constrain(x_value, 0, 100)); Serial.print(" "); Serial.print(constrain(y_value, 0, 100)); Serial.print(" "); Serial.print(constrain(r_value, 0, 100)); Serial.print(" "); Serial.print(constrain(g_value, 0, 100)); Serial.print(" "); Serial.println(constrain(b_value, 0, 100)); } //================================================================ Source: Arduino Sketch Remote User Interface ### ARDUINO REDUCES HEATING COSTS While almost everyone has a heater of some sort in their home, it’s fairly unlikely that the heat provided by a central heating system such as a furnace is distributed in an efficient way. There’s little reason to heat bedrooms during the day, or a kitchen during the night, but heating systems tend to heat whole living space regardless of the time of day or the amount of use. You can solve this problem, like most problems, with an Arduino. [Karl]’s build uses a series of radiator valves to control when each room gets heat from a boiler. The valves, with a temperature monitor at each valve, are tied into a central Arduino Mega using alarm wiring. By knowing the time of day and the desired temperature in each room, the Arduino can control when heat is applied to each room and when it is shut off, presumably making the entire system much more efficient. It also has control over the circulating pump and some of the other boiler equipment. Presumably this type of system could be adapted to a system which uses a furnace and an air handler as well, although it is not quite as straightforward to close vents off using a central unit like this as it is to work with a boiler like [Karl] has. With careful design, though, it could be done. Besides replacing thermostats, we can’t say we’ve ever seen this done before. Source: ARDUINO REDUCES HEATING COSTS ### Arduino quiz show buzzer A good friend of mine who's a teacher was doing quizzes in her class making students compete to answer questions... resulting in them complaining they raised their hands before the others. I decided to give her this quiz show type buzzer for Christmas to solve her problems. When one of the players press it's button (the fastest player wins this), the led of the right colour lights up saying he's in control... and no other buttons from the other players work, until the master of the game decides if the answer is good or not by pressing a little button on the main unit, giving a point or not to the player in control. If you have any questions, comments, constructive criticism... don't hesitate to write :) Oh and you can like my video on YouTube, that would be nice :) P.S. There is a little problem with the display that I couldn't figure out how to solve. When playing a tune, the display doesn't light up anymore, like if no current goes to it anymore... anybody has an idea what the problem could be or how to fix it in code ? See the video if you don't understand what I mean. Step 1: Components Rocker Switch ATmega328 Ceramic Resonator 16MHZ 5V wall adapter power supply Barrel jack Hook-up wire (black, red, green, white, yellow) Heat shrink tubing Big buttons (green, blue, yellow, red) Some LEDs Serial 8 Characters x 7 Segment LED Display Prototyping board Tamiya connectors (male, female) Some resistors (1x100ohm (for the speaker), 5x150ohm (for the leds), 6x10KOhm (for the buttons)) Push buttons (2) Speaker wire Step 2: The Plan Sorry for my writing... I know it's not a very professional plan, but if I have more time I will make a better one and replace it... feel free to ask me anything about it if it's not clear ;)   For more detail: Arduino quiz show buzzer ### Arduino Lens Controller - Synchronized Zoom/Focus with Wii Classic Controller My Lumix GH2 Micro Four Thirds camera not only shoots fantastic high definition videos, but with inexpensive adapters I can use it with older manual lenses that are cheap and often very high quality. I shoot a lot of performance videos for my daughter's dance studio, and I use an f3.5 Nikon 28-85mm zoom lens because it provides a good zoom range and a fast aperture for a zoom lens. The problem with this setup is that I have to zoom and focus the lens manually, and though I try to minimize zooming while shooting, there are times when it is essential for maintaining proper framing and for showing off the dancers' skills. I've managed to learn to zoom manually without introducing excessive camera jitter (usually), but since I am also focusing manually, it's a bit of a chore to quickly and smoothly adjust the focus after zooming in or out. To overcome this shortcoming I decided to build a power zoom and focus controller for my camera (which many others have done), with the critical goal of being able to automatically maintain the proper focus as the lens smoothly zooms in and out.  After many months of prototyping I arrived at a great solution that uses an Arduino clone that accepts input from a Wii Classic controller, and which uses 2 hobby servos to move the lens. The total cost of the final product is less than $100. The design that I eventually implemented has a number of advanced features: - 2 joysticks provide continuously-variable speed lens control. Moving the right stick forward and back controls synchronized zoom and focus, and moving the left stick side to side controls just focus. The implementation of speed control also helps keep the servo noise down to acceptable levels. - There are 6 programmable "goto" zoom/focus settings that can be programmed on the fly from the Wii Classic, and that will move the zoom and focus to the desired position just by pushing a button (left shoulder for widest zoom, right shoulder for most zoom, and a, b, x and y for any zoom/focus position). - The maximum lens movement settings can also be programmed on the fly to ensure that the servos don't try to rotate beyond the limits of the lens's zoom and focus positions. - D-pad provides single degree movements of zoom (up and down pad) and focus (left and right pad) to make precise adjustments for critical focus/zoom. Here's a demonstration of how the synchronized zoom - focus works on my GH2 with a Nikon 28 - 85mm zoom lens: In this instructable I'll cover the basics of how to build your own version of this controller, including the Arduino code and instructions for mounting the servos to a rail-based camera rig. I'll mention how I built my rig, but since I'm not really happy with it, I won't go into detailed steps on that and will leave it to you to figure out your own solution based on the pictures of my rig and some notes about how I made it. This was my first attempt at building something with Arduino, though I've had some programming experience so it wasn't too difficult for me to learn the basics of Arduino code. However, if you want to tackle this project and you haven't already gained familiarity with setting up and programming an Arduino, I recommend that you go through the tutorials on the Arduino site, especially those for Servos. http://arduino.cc/en/Tutorial/HomePage Step 1: Getting Started: Tools and Materials You can complete the electronics for this project with just some wire strippers and a soldering iron. But to make the servo mounting arms it helps to have access to a bandsaw and a drill press (though careful work with a hand drill can negate the need for the latter). I also used a tablesaw to cut the sheet plastic and a table-mounted router with a 1/2 diameter core-box bit to cut the grooves in the plastic to match the rails on my home-made camera rail system. Here is a list of the major supplies you'll need to complete this project, but please go through the whole instructable before buying anything so that you'll understand what to purchase in order to fit your own needs. - Arduino or Arduino clone (I used a Seeeduino because it was a little cheaper than the Arduiino and provides the same functionality). - Wii Classic Controller. I bought mine from eBay for around $10 shipped. - Wiichuck Adapter (a little circuit board that plugs into your Wii Classic so you don't have to cut the cable). I got this from FunGizmos for $4: http://store.fungizmos.com/items/212 - 2 standard sized hobby servos with nylon gears and ball bearings. The nylon gears are quieter and the ball bearings provide better support for the shaft when handling the load of stiffer zoom lenses. I bought some surplus servos from a local RC store for $5 each, but am replacing them with 360 degree digital servos that should be even quieter and more accurate, and those cost me $20 each from eBay. - 2 lens gears to mount on your lens's zoom and focus rings. I used the flexible ones that I found on eBay for $10 each, and made my own spacer rings to provide better resolution and a bit more mechanical advantage for the servos. You can also spend about twice as much and get lens gear rings that have built-in spacers, and these are also available on eBay. just search for "lens gear follow focus". - 2  Drive gears to mount on the servos to drive the lens gears. These need to be 32p or mod .8 gear pitch (which is the standard pitch for lens gears). I fashioned my own drive gears by fitting some $4 RC spur gears to the original servo control arms, but that required some work on a mini lathe that not everyone has. A better option would be to buy the servo-mountable gears from Servo City for just a few dollars more: http://www.servocity.com/html/32_pitch_hitec_servo_gears.html. While you're ordering those, you'll save yourself some trouble is you also buy a pair of male servo leads to make it easier to connect your servos to your Arduino and to swap servos if the need arises. - 1/2 inch thick sheet plastic or 3/4" thick aluminum to make the servo mounts. I used an old plastic cutting board, but if you do, make sure that it's the harder ridgid kind (you should not be able to dent the surface at all with your thumbnail). The softer kind is UHMW and will not machine well enough for this purpose. - knobs and matching carriage bolts for clamping the servo mounts to the rails. Step 2: Choosing Gears and Servos for Your Lenses Before you purchase your servos or gears, you need to understand some things about servos. Servos have a limited range of motion (typically 180), so if you want to be able to control your lens throughout its entire zoom and focus range, you need to do a little calculation based on your lens's ring movement and the diameter of the lens gear that the servo will be driving. I think it's best to just go through the process that I went through, so you can follow the same approach for your own system's needs. My lens's focus and zoom rings move about 90 degrees from end to end, and with the spacers and lens gear the total diameter of the gear being driven by the servo is 4.25 inches. I used a circumference calculator from this web site (http://math.about.com/library/blcirclecalculator.htm) to get a circumference of  13.35 inches.  Since 90 degrees is 1/4 of 360, I can calculate that my servo needs to provide about 3.4 inches of travel (13.35 / 4). I used standard 180 degree servos, so I know that the circumference of my servo drive gears had to be at least 6.8 inches (180 degrees is half of 360, so my servos will only be able to provide movement that is half the total circumference of the servo drive gears). Using the circumference calculator again, I know that I need gears that are at least 2.2 inches diameter. I actually ended up using a slightly smaller lens gear because I don't need the full range of focus motion and I wanted to have a little finer control of focus since that is more critical than zoom for me. This is another consideration to keep in mind - the closer you are to 1:1 between drive gear and lens gear, the less resolution you have. For example, in my setup a 1 degree servo step = 1/2 degree lens step, but if my drive gear diameter was equal to the lens gear the lens would move 1 degree for each servo degree. You also need more servo torque for a 1:1 drive:lens ratio that you do for a 1:2 drive:lens ratio. You should also know that there is another variable that you can introduce - servo rotation. My servo control code is written for standard servos that rotate 180 degrees, but I've ordered a pair of digital servos that rotate 360 degrees and that will allow my controller to handle lenses that require more travel. You can get servos that rotate up to 3 turns, which should be enough to handle most lenses while maintaining low drive to lens gear ratios. Of course you'll have to make some minor changes to the code to handle the increased degree range, but it should be pretty straightforward. If you want full turn or multi-turn servos, search for "winch servo" on eBay. Step 3: Prepare Your Arduino (or Clone) Once you have your Arduino (or equivalent), your Wiichuck connector, your servos and leads, and your Wii Classic controller, you're ready to start putting things together and to load the code onto your Arduino. Here's the outline: wire the Wiichuck connector and servo leads so you can start testing everything together (that step requires some soldering). Once you have things connected, set up the Arduino IDE on your computer, plug in your Arduino, and start loading the libraries and examples you need. Then the fun starts. Wiring the WiiChuck Adapter: This part is pretty easy, if you don't do what I did and lose the little 4 pin header that comes with it. You just solder the header in place, then plug it into the Arduino as illustrated in the image on the FunGizmos web site. To connect your Classic controller, just make sure that the indentation on the controller plug lines up with the "nc" on the Wiichuck adapter. Wiring the Servos: I originally purchased a motor controller board because I first tried to build this project with stepper motors rather than servos (because I thought they wold be quieter, which turned out to be quite wrongheaded). The board has 2 hobby servo connectors, so I didn't have to do any soldering to connect my servos. But the process is for wiring them straightforward: you simply connect the power leads of both servos (black is negative, red is positive) to ground and VCC of your board. You have several locations from which you can choose. Then connect one of the signal (yellow) wires of one servo to pin 9, and the other to pin 10. These are the default PWM pins that provide default pulse width modulation outputs that are required to tell the servo how far to turn. Once you're done with the wiring, you can connect everything together, connect your Arduino to your computer via the USB cable, and start loading code. Step 4: Program your Board: Get the Libraries and My Code and Start Playing Before you load the code that I wrote for my lens controller, you need to get the Arduino IDE set up on your computer and load the libraries that you need. The Servo control library is included with the Arduino IDE, so you don't need to do anything for that. However, my code also uses a user-contributed Wii Classic Controller library that is available on the Arduino playground. http://arduino.cc/playground/Main/WiiClassicController10 You can follow the steps on the page to add this to your library, or just download the zip file that I've attached and unzip it into your Arduino libraries folder. Mine is in this path: ..\Documents\Arduino\arduino-1.0\libraries\I created a folder called MiconoWiiClassic in the \libararies folder, and saved the "WiiClassic.h" file in that folder. You can just unzip the MiconoWiiClassic.zip file that I've included here to your Arduino-1.9\libraries folder.UPDATES: 1) Since first posting this Instructable, I've figured out how to double the resolution of the servos, which makes them smoother and more accurate. I did this by tweaking the Servos library that is installed by Arduino. You can either tweak the library yourself, or you can download the Servo.zip file and extract the Servo.cpp file into your ..\Arduino\arduino-1.0\libraries\Servo folder and overwrite the Servo.cpp file that's there. If you want to tweak the file yourself, you can just open the file from your library in Notepad, and replace all instances of "180" with "360".  If you downloaded my sketch before I made this update, you should re-download FocusController_gp.zip and extract it to your sketch folder. It will add focus_zoom_controller_servo_final_2xresolution.ino to that folder. 2) After you unzip the files you need to change one thing in the WiiClassic.h file in order to make the library work as expected with my code.The WiiClassic.h library contains a DEFINE_ON_HOLD feature that must be uncommented in order to ensure that the button presses are reported just once. To uncomment this, you have to open the ..\arduino-1.0\libraries\MiconoWiiClassic\WiiClassic.h file in Notepad and change the following line: //#define REPORT_ON_HOLD to #define REPORT_ON_HOLD If you don't do this, you will notice that the D-pad button presses will keep moving the servos as you hold the button, whereas it should only move the servo one step per press. This error may also cause strange behavior from other button presses. 3) If you're plugging the WiiChuck adapter in to Analog pins 2,3,4 and 5, you need to configure 2 and 3 as ground and power, by adding the following to the setup section of your code (thanks to Phillip James for catching this ommision) "pinMode(16, OUTPUT);" Sets digital 16 pin (aka Analog 2) as ground pin "digitalWrite(16, LOW);" "pinMode(17, OUTPUT);" Sets digital 17 pin (aka Analog 3) as +5V pin "digitalWrite(17, HIGH);" Once you have that library in place, you can also download my project code and unzip it to your main Arduino folder, and the next time you launch the Arduino IDE, my projects will show up in your Sketchbook folder. My Arduino folder is in my documents folder, like this: ..\Documents\Arduino\ MiconoWiiClassic.zip4 KB FocusController_gp.zip5 KB Servo.zip3 KB Step 5: Test Things Out: Wii Classic Controller With the electronic parts connected and your code in place, it's time to start testing things out and tweaking the code, if necessary. Start by loading the WiiClassicTestValues sketch from your Sketchbook (File > Sketchbook > WiiClassicTestValues). Before loading it onto your board, compile it to make sure that you've installed the WiiClassic.h library properly (you should also be able to see it in your libraries list (Sketch > Import Library). If it compiles properly, load it onto your board. The program outputs the value of each of your sticks on the Wii Classic to the Serial Monitor, so you'll need to open the Serial Monitor (Tools > Serial Monitor). Let the controller run with the sticks at rest to see what the values are at the center positions, then methodically push both sticks all the way forward for a few seconds, then all the way down, then all the way left, then all the way right. Once you've done that, you can turn Autoscrolling off in the monitor window and copy the results to Notepad and save the file for further review. You're now ready to ensure that the controller code is calibrated to your Wii Classic Controller. Step 6: Load the Lens Controller Code and Adjust for your Wii Controller Now you can load the controller code and ensure that the expected controller values match your Wii Classic Controller. Start by loading my controller sketch from File > Sketchbook > focus_zoom_controller_final. Once it's loaded, scroll to line 101 of the code to see the settings for the controller stick values, shown below: // the right stick has 1/2 the resolution of the left - these values may vary from one // controller to another, so you'll need to run a test program to discern the values of // each stick position int yCenterRight = 15; int yMinRight = 2; int yMaxRight = 28; int xCenterRight = 15; int xMinRight = 3; int xMaxRight = 28; int centerOffsetRight = 3; int endOffsetRight = 0; int yCenterLeft = 32; int yMinLeft = 6; int yMaxLeft = 55; int xCenterLeft = 31; int xMinLeft = 6; int xMaxLeft = 55; int centerOffsetLeft = 6; int endOffsetLeft = 0; Check these values against the read out from your controller, and change any values as necessary. Make sure you save your changes. Step 7: It's time to test out the code with your servos.  In my code I have the Zoom servo attached to pin 9 of the Arduino, and the Focus servo attached to pin 10. You can easily change that in the code by changing the numbers here: void setup() { Serial.begin(9600);           // set up Serial library at 9600 bps //attach servos and set them to initial positions for mounting the servos to the lens zoomServo.attach(9); focusServo.attach(10); Once that is done and your servos are connected, plug your board into the USB port on your computer and download the code to your board. When it's done downloading and booting, the Zoom servo will move to 180 degrees and the Focus servo will move to 0. You can now start playing with the sticks and buttons to see what happens, and can try programming the various servo positions and the focus ratio. Some of the buttons have default values, but you can program any button by pressing, HOME, then the button and the program will remember the setting until the board is reset or powered off. Once you're satisfied that the controller is working correctly to move the servos, you can grab your camera and lens and assess whether the servo directions for the stick movements are correct. Pushing the right stick forward should turn the servo in the correct direction to zoom the lens, and pulling it back should do the opposite. At the same time it should move the focus in the direction that is needed to keep the camera in focus when the zoom is moved. I have mine set up so that when I zoom in (push the right stick forward), I have to move the focus stick to the right to correct the focus, and when I zoom out (pull the right stick back), I have to move the focus stick to the left to correct the focus. This seemed like the most intuitive arrangement. By setting the servos next to your camera and lens in the way you plan to mount them on the camera rig, you can tell whether they are moving in the right direction given how your lens moves. If they don't, there are instructions in the code on how to change the direction of servo movement relative to each stick movement. I have future plans to hack the Servo library to make this easier, but for now it's not as easy as flipping a switch, but it's also not overly complicated. Step 8: Put It Together for a Real Test Here's where it really gets fun. Once your satisfied that you have the servos moving in the right direction for your camera, there's really no reason not to mount everything an see how it works with your camera and lens. You can make enclosures and add switches, power connectors, and pretty lights once everything is working to your satisfaction, but there's really no point in doing that until you see whether your setup is able to drive your lens the way you want. I did this with several iterations of my project, including a stepper-based version that was a complete disaster and caused me to change course and switch to servos. The idea is to fail fast, before you've committed too much work on a final product that still needs tweaking. Start by mounting the servo drive gears and the lens gears. This is all pretty straightforward, but if you find that your lens gear is slipping at all (as mine did), it may help to know that you can increase the grip of anything with the rubber backing that's easily peeled off the back of a cheap, thin mousepad. The same stuff can also be used to deaden noise from the servos. Along those lines, adding some plastic-safe grease to the servo gearbox can also help reduce the servo noise. I used fishing reel grease that is designated as plastic safe, and it really quieted my zoom servo. For more detail: Arduino Lens Controller - Synchronized Zoom/Focus with Wii Classic Controller ### Arduino camera Lens Controller My Lumix GH2 Micro Four Thirds camera not only shoots fantastic high definition videos, but with inexpensive adapters I can use it with older manual lenses that are cheap and often very high quality. I shoot a lot of performance videos for my daughter's dance studio, and I use an f3.5 Nikon 28-85mm zoom lens because it provides a good zoom range and a fast aperture for a zoom lens. The problem with this setup is that I have to zoom and focus the lens manually, and though I try to minimize zooming while shooting, there are times when it is essential for maintaining proper framing and for showing off the dancers' skills. I've managed to learn to zoom manually without introducing excessive camera jitter (usually), but since I am also focusing manually, it's a bit of a chore to quickly and smoothly adjust the focus after zooming in or out. To overcome this shortcoming I decided to build a power zoom and focus controller for my camera (which many others have done), with the critical goal of being able to automatically maintain the proper focus as the lens smoothly zooms in and out.  After many months of prototyping I arrived at a great solution that uses an Arduino clone that accepts input from a Wii Classic controller, and which uses 2 hobby servos to move the lens. The total cost of the final product is less than $100. The design that I eventually implemented has a number of advanced features: - 2 joysticks provide continuously-variable speed lens control. Moving the right stick forward and back controls synchronized zoom and focus, and moving the left stick side to side controls just focus. The implementation of speed control also helps keep the servo noise down to acceptable levels. - There are 6 programmable "goto" zoom/focus settings that can be programmed on the fly from the Wii Classic, and that will move the zoom and focus to the desired position just by pushing a button (left shoulder for widest zoom, right shoulder for most zoom, and a, b, x and y for any zoom/focus position). - The maximum lens movement settings can also be programmed on the fly to ensure that the servos don't try to rotate beyond the limits of the lens's zoom and focus positions. - D-pad provides single degree movements of zoom (up and down pad) and focus (left and right pad) to make precise adjustments for critical focus/zoom. Here's a demonstration of how the synchronized zoom - focus works on my GH2 with a Nikon 28 - 85mm zoom lens: In this instructable I'll cover the basics of how to build your own version of this controller, including the Arduino code and instructions for mounting the servos to a rail-based camera rig. I'll mention how I built my rig, but since I'm not really happy with it, I won't go into detailed steps on that and will leave it to you to figure out your own solution based on the pictures of my rig and some notes about how I made it. This was my first attempt at building something with Arduino, though I've had some programming experience so it wasn't too difficult for me to learn the basics of Arduino code. However, if you want to tackle this project and you haven't already gained familiarity with setting up and programming an Arduino, I recommend that you go through the tutorials on the Arduino site, especially those for Servos. http://arduino.cc/en/Tutorial/HomePage Step 1: Getting Started: Tools and Materials You can complete the electronics for this project with just some wire strippers and a soldering iron. But to make the servo mounting arms it helps to have access to a bandsaw and a drill press (though careful work with a hand drill can negate the need for the latter). I also used a tablesaw to cut the sheet plastic and a table-mounted router with a 1/2 diameter core-box bit to cut the grooves in the plastic to match the rails on my home-made camera rail system. Here is a list of the major supplies you'll need to complete this project, but please go through the whole instructable before buying anything so that you'll understand what to purchase in order to fit your own needs. - Arduino or Arduino clone (I used a Seeeduino because it was a little cheaper than the Arduiino and provides the same functionality). - Wii Classic Controller. I bought mine from eBay for around $10 shipped. - Wiichuck Adapter (a little circuit board that plugs into your Wii Classic so you don't have to cut the cable). I got this from FunGizmos for $4: http://store.fungizmos.com/items/212 - 2 standard sized hobby servos with nylon gears and ball bearings. The nylon gears are quieter and the ball bearings provide better support for the shaft when handling the load of stiffer zoom lenses. I bought some surplus servos from a local RC store for $5 each, but am replacing them with 360 degree digital servos that should be even quieter and more accurate, and those cost me $20 each from eBay. - 2 lens gears to mount on your lens's zoom and focus rings. I used the flexible ones that I found on eBay for $10 each, and made my own spacer rings to provide better resolution and a bit more mechanical advantage for the servos. You can also spend about twice as much and get lens gear rings that have built-in spacers, and these are also available on eBay. just search for "lens gear follow focus". - 2  Drive gears to mount on the servos to drive the lens gears. These need to be 32p or mod .8 gear pitch (which is the standard pitch for lens gears). I fashioned my own drive gears by fitting some $4 RC spur gears to the original servo control arms, but that required some work on a mini lathe that not everyone has. A better option would be to buy the servo-mountable gears from Servo City for just a few dollars more: http://www.servocity.com/html/32_pitch_hitec_servo_gears.html. While you're ordering those, you'll save yourself some trouble is you also buy a pair of male servo leads to make it easier to connect your servos to your Arduino and to swap servos if the need arises. - 1/2 inch thick sheet plastic or 3/4" thick aluminum to make the servo mounts. I used an old plastic cutting board, but if you do, make sure that it's the harder ridgid kind (you should not be able to dent the surface at all with your thumbnail). The softer kind is UHMW and will not machine well enough for this purpose. - knobs and matching carriage bolts for clamping the servo mounts to the rails. Step 2: Choosing Gears and Servos for Your Lenses Before you purchase your servos or gears, you need to understand some things about servos. Servos have a limited range of motion (typically 180), so if you want to be able to control your lens throughout its entire zoom and focus range, you need to do a little calculation based on your lens's ring movement and the diameter of the lens gear that the servo will be driving. I think it's best to just go through the process that I went through, so you can follow the same approach for your own system's needs. Major Components in Project– Arduino or Arduino clone (I used a Seeeduino because it was a little cheaper than the Arduiino and provides the same functionality). – Wii Classic Controller. I bought mine from eBay for around $10 shipped. – Wiichuck Adapter (a little circuit board that plugs into your Wii Classic so you don’t have to cut the cable). I got this from FunGizmos for $4: http://store.fungizmos.com/items/212 – 2 standard sized hobby servos with nylon gears and ball bearings. The nylon gears are quieter and the ball bearings provide better support for the shaft when handling the load of stiffer zoom lenses. I bought some surplus servos from a local RC store for $5 each, but am replacing them with 360 degree digital servos that should be even quieter and more accurate, and those cost me $20 each from eBay. – 2 lens gears to mount on your lens’s zoom and focus rings. I used the flexible ones that I found on eBay for $10 each, and made my own spacer rings to provide better resolution and a bit more mechanical advantage for the servos. You can also spend about twice as much and get lens gear rings that have built-in spacers, and these are also available on eBay. just search for “lens gear follow focus”. – 2  Drive gears to mount on the servos to drive the lens gears. These need to be 32p or mod .8 gear pitch (which is the standard pitch for lens gears). I fashioned my own drive gears by fitting some $4 RC spur gears to the original servo control arms, but that required some work on a mini lathe that not everyone has. A better option would be to buy the servo-mountable gears from Servo City for just a few dollars more: http://www.servocity.com/html/32_pitch_hitec_servo_gears.html. While you’re ordering those, you’ll save yourself some trouble is you also buy a pair of male servo leads to make it easier to connect your servos to your Arduino and to swap servos if the need arises. – 1/2 inch thick sheet plastic or 3/4″ thick aluminum to make the servo mounts. I used an old plastic cutting board, but if you do, make sure that it’s the harder ridgid kind (you should not be able to dent the surface at all with your thumbnail). The softer kind is UHMW and will not machine well enough for this purpose. – knobs and matching carriage bolts for clamping the servo mounts to the rails. For more detail: Arduino camera Lens Controller ### Arduino Board Sound Alarm I’ve just completed my second Arduino project, a sound level detector which sets off an “alarm” when there’s the sound level is to high for too long.  I built it for use in a school that wants to provide visual feedback to students when they are being too loud.  The “alarm” is a string of flashing LEDs that’s controlled by an IR-remote, which I reverse engineered using the the arduino itself and the excellent IRremote library to figure out which codes activate the LED string. The IRremote library includes an example that dumps the codes and code types that remotes typically use.  So I just ran that example with my arduino hooked up to an IR detector from adafruit.  It was really quite easy to do. It’s been a fun project because it’s quite flexible and configurable.  Here’s a short video of the finished product: For anyone who wants to build one of these here’s a bread-board diagram that I made using the very cool Fritzing package: The Adruino sketch that powers this is available on github. Here are some details on the circuitry.  The sound detector is based on the ZX-Sound board. Here’s a nice post on the arduino.cc site that I used as my starting place for building the sound part of this board.  The video helpfully includes a parts list which I sourced from Allied electronics, all except for the mic.  The LCD is the $10 16×2 from Adafruit (their tutorial on wiring it up was great), and I also used their electret microphone.  One note about the microphone is that it’s polarity matters.  If you get it in backwards, it’s much less sensitive.  I found this out purely by accident!  I also used their IR LED. Here are some photos of assembling the project. First the prototyping phase: Major Components in Project Arduino Uno: https://www.adafruit.com/products/50 ($29.95) Makershed Arduino Enclosure:  http://www.makershed.com/Clear_Enclosure_for_Arduino_p/mkad40.htm ($15.00) 9V powersupply: https://www.adafruit.com/products/63 ($6.95) 100K Potentiometer: Radioshack ($1.69) pushbutton switch: Radioshack ($.99) Breadboard PCB: https://www.adafruit.com/products/589 ($3.00) Electret Mic: https://www.adafruit.com/products/1064 ($1.50) IR LED: https://www.adafruit.com/products/387 ($.75) LCD 2×16: https://www.adafruit.com/products/181 ($9.95) Components: (~$5) resistors: 1k ohm x 2; 100k ohm x 2; 12 ohm; 39k ohm; 22k ohm; 230 ohm (for IR led) capacitors: 470uf 16v; 0.1uf 50v; 22uf 25v Dual op amp IC: TLC272 Total Price: ~$70   For more detail: Arduino Board Sound Alarm ### AppNote: Inverting DC/DC controller converts a positive input to a negative output with a single inductor There are several ways to produce a negative voltage from a positive voltage source, including using a transformer or two inductors and/or multiple switches. However, none are as easy as using the LTC3863, which is elegant in its simplicity, has superior efficiency at light loads and reduces parts count compared to alternative solutions. Advanced Controller Capabilities The LTC3863 can produce a –0.4V to –150V negative output voltage from a positive input range of 3.5V to 60V. It uses a single-inductor topology with one active P-channel MOSFET switch and one diode. The high level of integration yields a simple, low parts-count solution. The LTC3863 offers excellent light load efficiency, drawing only 70μA quiescent current in user-programmable Burst Mode operation. Its peak current mode, constant frequency PWM architecture provides positive control of inductor current, easy loop compensation and superior loop dynamics. The switching frequency can be programmed from 50kHz to 850kHz with an external resistor and can be synchronized to an external clock from 75kHz to 750kHz. The LTC3863 offers programmable soft-start or output tracking. Safety features include overvoltage, overcurrent and short-circuit protection, including frequency foldback. –5.2V, 1.7A Converter Operates from a 4.5V to 16V Source The circuit shown in Figure 1 produces a –5.2V, 1.7A output from a 4.5V–16V input. Operation is similar to a flyback converter, storing energy in the inductor when the switch is on and releasing it through the diode to the output when the switch is off, except that with the LTC3863, no transformer is required. To prevent excessive current that can result from minimum on-time when the output is short-circuited, the controller folds back the switching frequency when the output is less than half of nominal. For more detail: AppNote: Inverting DC/DC controller converts a positive input to a negative output with a single inductor ### Android talks to Arduino This project slightly modifies the Google Android sample app called "Bluetooth Chat" so you can type a message in the Android app and that same message will appear on an LCD attached to an Arduino Uno. Functionality:  Android  talks to Arduino 1. Run the Android "Bluetooth Chat" sample app (after we modify the app in this instructable).  Type a message in the app's text box and press the "send" button.  The message you typed echoes on the app display. 2. Message travels through the air from the built-in Android Bluetooth modem to the Bluetooth modem connected to the Arduino Uno. 3. Arduino Uno receives the typed message. 4. The Arduino Uno prints the typed message on the LCD. Functionality:  Arduino talks to Android 1. Every 30 seconds, the Arduino sends a message ("hello from Arduino") to the Android phone via Bluetooth. 2. The Arduino message appears on the Android "Bluetooth Chat" sample app display. Why?  Just an easy way to test the Arduino's ability to not only receive messages from, but send messages to the Android phone.  You can take the example sketch and change it however you want. Here's the full video instruction that we'll break out into steps: Step 1: Hardware list Hardware - Arduino Uno (328, 16MHz, 5V). - Bluetooth Modem: BlueSMiRF Gold, aka FireFly (Sparkfun sku: WRL-00582). - Parallel LCD (Sparkfun sku: LCD-09051 but you can use pretty much any parallel LCD). - 10k Potentiometer. - Wires to connect electronic components. - Computer and FTDI chip (to change BAUD rate). - Android Phone (I used a Motorola Droid - operating system v2.2.2 - but Google has sample code for all versions). Assemble your circuit as shown in the diagram.  You don't have to assemble anything between circle #1 and circle #2: that is the message going through the air from Android to the Bluetooth modem.  Hey, I'm an Arduino beginner so I'm not assuming anything.  :) Step 2: Software List Software - Arduino Source code from this project (bluetooth_chat_LCD.pde attached below) - NewSoftSerial library from Mikal Hart: http://arduiniana.org/libraries/newsoftserial/ - Eclipse - Android Development Kit (explicitly follow all of Google's installation instructions) - "Bluetooth Chat" Android sample code from Google: http://developer.android.com/resources/samples/BluetoothChat/index.html - Hyperterminal or TeraTerm to change BAUD rateAndroid Beginners (like me): Make sure you do at least a couple tests before you execute the rest of this instructable: - Create a "hello, world" app (lots of examples out there) to make sure you have Android/Eclipse setup correctly to run an app on a virtual device. - Plug in your Android phone and ensure that you can copy the "hello, world" app to your phone.  Make sure your phone has debugging turned on. Settings --> Applications --> Development --> USB debugging (turn it on)After you successfully copy an Android app to your actual phone, you can proceed with this instructable.  Keep in mind that you are not going to be able to run this instructable on a virtual device; you have to have a real phone to deploy the "Bluetooth Chat" code. bluetooth_chat_LCD.pde7 KB Step 3: Change BAUD rate on BlueSMiRF Gold Change the BAUD rate from the default 115.2k to 57.6k.  If you leave the BAUD at 115.2k, the parallel LCD will display gibberish when you send a message from Android to Arduino.  If you set the BAUD below 57.6k, the Android phone will "cut up" the message that the Arduino sketch sends every 30 seconds.  So 57.6k BAUD is just right. *Commands to set BAUD: http://www.sparkfun.com/datasheets/Wireless/Bluetooth/rn-bluetooth-um.pdf *Video instructions on how to change BAUD: http://www.instructables.com/id/Change-BAUD-rate-on-BlueSMiRF-Gold/ FTDI Basic chip: http://www.sparkfun.com/products/9716 Major Components in ProjectArduino Uno – Bluetooth Modem – Parallel LCD For more detail: Android talks to Arduino ### Android talks to Arduino board This project slightly modifies the Google Android sample app called "Bluetooth Chat" so you can type a message in the Android app and that same message will appear on an LCD attached to an Arduino Uno. Functionality:  Android  talks to Arduino 1. Run the Android "Bluetooth Chat" sample app (after we modify the app in this instructable).  Type a message in the app's text box and press the "send" button.  The message you typed echoes on the app display. 2. Message travels through the air from the built-in Android Bluetooth modem to the Bluetooth modem connected to the Arduino Uno. 3. Arduino Uno receives the typed message. 4. The Arduino Uno prints the typed message on the LCD. Functionality:  Arduino talks to Android 1. Every 30 seconds, the Arduino sends a message ("hello from Arduino") to the Android phone via Bluetooth. 2. The Arduino message appears on the Android "Bluetooth Chat" sample app display. Why?  Just an easy way to test the Arduino's ability to not only receive messages from, but send messages to the Android phone.  You can take the example sketch and change it however you want. Step 1: Hardware list Hardware - Arduino Uno (328, 16MHz, 5V). - Bluetooth Modem: BlueSMiRF Gold, aka FireFly (Sparkfun sku: WRL-00582). - Parallel LCD (Sparkfun sku: LCD-09051 but you can use pretty much any parallel LCD). - 10k Potentiometer. - Wires to connect electronic components. - Computer and FTDI chip (to change BAUD rate). - Android Phone (I used a Motorola Droid - operating system v2.2.2 - but Google has sample code for all versions).Assemble your circuit as shown in the diagram.  You don't have to assemble anything between circle #1 and circle #2: that is the message going through the air from Android to the Bluetooth modem.  Hey, I'm an Arduino beginner so I'm not assuming anything.  :) Step 2: Software List Software - Arduino Source code from this project (bluetooth_chat_LCD.pde attached below) - NewSoftSerial library from Mikal Hart: http://arduiniana.org/libraries/newsoftserial/ - Eclipse - Android Development Kit (explicitly follow all of Google's installation instructions) - "Bluetooth Chat" Android sample code from Google: http://developer.android.com/resources/samples/BluetoothChat/index.html - Hyperterminal or TeraTerm to change BAUD rateAndroid Beginners (like me): Make sure you do at least a couple tests before you execute the rest of this instructable: - Create a "hello, world" app (lots of examples out there) to make sure you have Android/Eclipse setup correctly to run an app on a virtual device. - Plug in your Android phone and ensure that you can copy the "hello, world" app to your phone.  Make sure your phone has debugging turned on. Settings --> Applications --> Development --> USB debugging (turn it on) After you successfully copy an Android app to your actual phone, you can proceed with this instructable.  Keep in mind that you are not going to be able to run this instructable on a virtual device; you have to have a real phone to deploy the "Bluetooth Chat" code. bluetooth_chat_LCD.pde7 KB Step 3: Change BAUD rate on BlueSMiRF Gold Change the BAUD rate from the default 115.2k to 57.6k.  If you leave the BAUD at 115.2k, the parallel LCD will display gibberish when you send a message from Android to Arduino.  If you set the BAUD below 57.6k, the Android phone will "cut up" the message that the Arduino sketch sends every 30 seconds.  So 57.6k BAUD is just right. Major Components in Project Hardware – Arduino Uno (328, 16MHz, 5V). – Bluetooth Modem: BlueSMiRF Gold, aka FireFly (Sparkfun sku: WRL-00582). – Parallel LCD (Sparkfun sku: LCD-09051 but you can use pretty much any parallel LCD). – 10k Potentiometer. – Wires to connect electronic components. – Computer and FTDI chip (to change BAUD rate). – Android Phone (I used a Motorola Droid – operating system v2.2.2 – but Google has sample code for all versions).Assemble your circuit as shown in the diagram.  You don’t have to assemble anything between circle #1 and circle #2: that is the message going through the air from Android to the Bluetooth modem.  Hey, I’m an Arduino beginner so I’m not assuming anything.  :) Step 2: Software List Software – Arduino Source code from this project (bluetooth_chat_LCD.pde attached below) – NewSoftSerial library from Mikal Hart: http://arduiniana.org/libraries/newsoftserial/ – Eclipse – Android Development Kit (explicitly follow all of Google’s installation instructions) – “Bluetooth Chat” Android sample code from Google: http://developer.android.com/resources/samples/BluetoothChat/index.html – Hyperterminal or TeraTerm to change BAUD rateAndroid Beginners (like me): Make sure you do at least a couple tests before you execute the rest of this instructable: – Create a “hello, world” app (lots of examples out there) to make sure you have Android/Eclipse setup correctly to run an app on a virtual device. – Plug in your Android phone and ensure that you can copy the “hello, world” app to your phone.  Make sure your phone has debugging turned on. Settings –> Applications –> Development –> USB debugging (turn it on) After you successfully copy an Android app to your actual phone, you can proceed with this instructable.  Keep in mind that you are not going to be able to run this instructable on a virtual device; you have to have a real phone to deploy the “Bluetooth Chat” code. bluetooth_chat_LCD.pde7 KB   For more detail: Android talks to Arduino board ### Physical Computing and DC Motor Control Managing a DC motor through an Arduino is a straightforward task. Beyond employing a basic electric switch, there are diverse approaches to engage with a motor. Moreover, the conventional electromechanical relay can be readily substituted with a carefully chosen transistor, enabling software-based speed control. This chapter will investigate multiple strategies for DC motor control, encompassing both the conventional method of electromechanical switching via a relay and the contemporary solid-state control utilizing a transistor. Additionally, we will explore the conventional technique of speed adjustment through a potentiometer and delve into the functionality of a force-sensitive resistor. Both the potentiometer and the photocell qualify as input devices for physical computing, thus meriting a comprehensive discussion within this chapter. By integrating the previously discussed electronic principles from earlier units with the forthcoming topics, I will elucidate both electronic prototyping and software development's supplementary remix techniques within this Project. Arduino Duemilanove or equivalent TIP31C NPN Power Transistor or TIP120 NPN Darlington Transistor 2N2222 NPN Transistor 10K trimmer potentiometer 2 10K resistors 1K resistor CdS photocell Tactile push-button switch 1N4001 diode 3VDC or 6VDC motor 16-pin IC socket +5VDC electromechanical relay Small solderless breadboard 22 AWG solid wires Digital multimeter Oscilloscope (optional) Electronic tools How It Works Prior to the adoption of transistors as direct drivers for electronic circuits, electromechanical relays served as the mechanism to regulate high-current electrical loads. Commencing the discourse on physical-computing DC motor control, I will initiate with a practical investigation of a transistor relay driver circuit. Figure 4-4 illustrates a schematic block diagram of a fundamental transistor relay driver circuit. Figure 3 displays a circuit schematic outlining the standard configuration of a transistor relay driver block diagram. A Base Biasing Transistor Driver Circuit Depressing switch PB1 initiates the flow of current via resistor R1, thereby facilitating biasing of the transistor. This approach to managing current through the transistor is recognized as base biasing. The simplicity of this biasing method arises from the presence of a sole resistor linked in series with a +5VDC power source and the transistor's base circuit. The current coursing through the resistor proves ample for either activating the NPN transistor or placing it in a state of saturation mode. To compute the biasing or base current within the transistor driver circuit, one may employ the subsequent analytical equation: Ib= (Vcc- Vbe )/Rb where IB is the base current.  VCC is the collector supply voltage.  VBE is the base-emitter junction voltage.  RB is the base resistor (R1is equal to RB in this design). Utilizing Figure 3 in conjunction with the equation provided earlier, you have the means to ascertain IB. The subsequent activity illustrates the sequential procedures essential for accomplishing this task: 1. First, write down the original analysis equation: Ib= (Vcc-Vbe)/ Rb 2. Next, substitute circuit parameter values into the analysis equation: Ib= (5VDC- 0.7V )/1K 3. Finally, solve for IB: Ib= 4.3VDC/1K Ib= 0.0043A or 4 .3mA By utilizing the Multisim circuit simulation software, you can effortlessly construct a virtual transistor circuit. When the electrical switch is in the open position, the base current remains exceedingly minute (on the order of picoamperes [pA]), leading to the electromechanical relay remaining unpowered, as portrayed in Figure 4(a). The 69.8Ω resistor symbolizes the resistance of the electromechanical relay coil as it would be measured using an ohmmeter. Upon closing the electrical switch, biasing of the transistor takes place, thereby energizing the electromechanical relay. This scenario of transistor base biasing is illustrated in Figure 4(b). Operating in saturation mode, the NPN transistor establishes a pathway for the current originating from the +5VDC power source. This current flows through both the electromechanical relay's coil and the collector-emitter junctions of the NPN transistor (2N2222), eventually grounding itself. As the current courses through the coil of the electromechanical relay, it transitions into a conductive state referred to as energization. The flow of current within the coil windings generates a magnetic field, thereby inducing the coil to attract its moveable contact, known as the armature. This attraction is heightened through the use of a robust iron core within the relay, intensifying the connection between the coil and the armature. The armature, responding to the magnetic field, establishes contact with the normally open (NO) contact of the electromechanical relay. Consequently, the Vmotor power supply (+5VDC) is effectively routed into the external control circuit, permitting the current to course through the DC motor and thereby activating it. Releasing switch PB1 results in an open circuit at the base, effectively removing the current bias applied to the NPN transistor. As the current supply to the coil is interrupted, the electromechanical relay's contacts disengage, leading to their de-energization. The magnetic field, previously generated during the energization process, dissipates, allowing the armature to revert to its normally closed (NC) position contact. Consequently, the external control circuit disengages, halting the rotation of the DC motor. It's worth noting that the electromechanical relay's contacts possess an ampacity rating, enabling them to manage high-current components such as incandescent bulbs and low-power motors. These contacts can have ampacity ratings ranging from as low as 1A to as high as 10A. This characteristic empowers the Arduino to readily execute industrial control applications on a workbench setting. D1: Flyback Diode The electromechanical relay coil essentially functions as an inductor with the capacity to retain electric current within its winding structure. Upon energization and subsequent de-energization of the coil, the inductor experiences charging and discharging processes accordingly. Upon de-energization of the electromechanical relay coil, the accumulated energy (electric current) necessitates release or discharge through a designated grounding pathway. In the context of a relay driver circuit, this grounding route is facilitated by the transistor. The stored electric current within the relay coil attains its maximum amplitude (IP [peak current]) and can pose significant risk to delicate electronic components during the discharge process, potentially leading to severe damage when energy is dissipated into a grounding medium. The transistor functions as a conduit for grounding the electromechanical relay, making it susceptible to potential damage from the maximum IP value. The inclusion of a diode across the coil serves to channel this electrical energy back through the relay windings using a flyback technique for suppressing electric current. This flyback approach enables the diode to absorb the peak current generated by the inductor during the charging phase and that of the coil when the electromechanical relay is de-energized. As the transistor transitions to the off state, particularly during the de-energization process of the electromechanical relay, the diode becomes forward biased. This bias redirects the peak current away from the transistor, enabling it to travel through the coil of the electromechanical switch. A flyback diode is alternatively referred to as a snubber, freewheeling, suppressor, or catch diode. Illustrated in Figure 5 is the Multisim circuit representation of an electromechanical relay coil paired with a parallel-connected flyback diode. In Figure 5(a), the relay undergoes energization, signifying the charging of the inductor. Conversely, Figure 5(b) portrays the de-energized state of the relay, indicative of the inductor's discharge. Notably, the peak current during discharge is considerably more substantial in terms of magnitude and electrical units (measured in milliamperes) when compared to the coil's energization phase (measured in nanoamperes). Figure 5 depicts Multisim circuit models for transistor drivers: (a) inductor charging (relay coil energized), and (b) inductor discharging (relay coil de-energized). The diagrams show an unbiased transistor in (a) and a base-biased operation in (b). Experimenting with a Transistor Relay Driver DC Motor Control Circuit Constructing a DC motor control circuit using a transistor relay driver in conjunction with an Arduino is a straightforward task. The Arduino assumes the role of an intelligent processing interface, receiving control signals from tactile push-button switches and issuing commands to activate the transistor relay driver, thereby governing the DC motor's operation. The circuit schematic diagram for this uncomplicated DC motor control setup is illustrated in Figure 6.The button sketch employed in the bird project is transferred to the Arduino, enabling the activation of the DC motor through the transistor relay driver circuit. Let's delve deeper into the physical-computing aspects of the DC motor control circuit. The resistor in tandem with the tactile push-button switch functions as an input transducer or sensor. This is due to the conversion process that occurs, translating mechanical action (pressing the switch's internal contacts using a mini-plunger-spring mechanism) into the generation of a digital-level electrical control signal (either +5VDC or a binary 1 logic level). Once the tactile switch button is released, the mini-plunger-spring mechanism prompts it to return to its original position, causing the binary 1 logic level control signal to transition into a 0 logic level signal. The configuration where the tactile push-button switch is positioned before the 10K resistor is recognized as an active-high digital input circuit. If an inverse or contrary transducer operation is necessary, rearranging the positions of the push-button switch and the 10K resistor accomplishes this specification. This reversed electrical control signal function is referred to as an active-low digital input circuit. Figure 7 illustrates the analysis of the Multisim circuit model, presenting the outcome in the form of output voltage readings showcased on a digital voltmeter. Meanwhile, Figure 8 showcases a physical-computing DC motor control system based on Arduino, featuring an active-low digital input circuit. For contrast, an active-high digital input circuit for the Arduino-based physical-computing DC control is displayed in Figure 9. Figure 7. presents the voltage of an active-high digital input circuit with the switch in an open state, along with the voltage of an active-low digital input circuit with the switch also open (b). Notably, the measured voltages exhibit an inversion between the active-high and active-low digital input circuit configurations. Figure 8. showcases the schematic diagram of a physical-computing DC motor control system utilizing an active-low configuration. Figure 9 displays the schematic diagram of a physical-computing DC motor control system employing an active-high configuration. Electromechanical Relay Preparation During the phase of prototyping fundamental physical-computing DC motor control circuits on a solderless breadboard, you have the option to enhance the connection quality of the +5VDC electromechanical relay pins with the internal spring terminals. A viable strategy involves placing the electromechanical relay within an IC socket, which enhances the contact force of the electrical pins and eliminates the potential for intermittent circuit connections during the project assembly. This approach is depicted in Figure 11. Figure 10 showcases the pinout information clearly labeled on both faces of the electromechanical relay. Figure 11 depicts the utilization of an IC socket to enhance the ease of inserting the electromechanical relay onto the solderless breadboard. As the project involves only a small number of components, you have the flexibility to position them in close proximity, as demonstrated in Figure 12. Employing stranded core wire along with preformed jumper wires facilitates the organization of circuit connections on both the breadboard and the Arduino. The Arduino board itself serves as the source of +5VDC supply, powering both the control circuit and the DC motor.   Figure 11 displays the implementation of an IC socket for the purpose of enhancing. The setup depicted in Figure12  is configured as an active-high digital input circuit. Upon pressing and holding the tactile push-button switch, the Arduino generates an output control signal (approximately +5VDC). This signal biases the 2N2222 NPN transistor, initiating the activation of the electromechanical relay. Consequently, the contacts of the electromechanical relay transition from the normally closed (NC) position to the normally open (NO) position, enabling the +5VDC power supply to engage the DC motor. Releasing the button discontinues the biasing current within the transistor relay driver circuit, leading to the interruption of the +5VDC power source from the DC motor and thus halting its rotation. The Basics of Physical Computing with Electric Motors The initial pages of this chapter elucidated the notion of controlling a DC motor through the integration of a transducer (or sensor), microcontroller, and transistor relay driver, demonstrated through simulated circuits and an actual control project. Utilizing an electromechanical relay aligns with the conventional method for propelling electric motors, primarily due to the relay's switching contacts capable of managing substantial currents, often measuring in amperes. Electric motors fundamentally function as electromechanical devices, as they convert electrical signals (comprising voltage and/or current) into mechanical motion. To surmount the challenges inherent in rotation mechanics, a considerable inrush current must be sourced from the power supply responsible for propelling the electromechanical component. In the instance of the discussed straightforward physical-computing DC motor control project, the electromechanical relay shouldered the responsibility of supplying power by means of a set of contacts with a high ampacity rating. However, an alternate method exists for motor control: substituting the electromechanical relay with a power transistor. Electric motors hinge on two pivotal parameters - torque and speed - necessitating an adept means of control for these factors. Here, a microcontroller combined with a power transistor emerges as a proficient and streamlined strategy, ensuring consistent and precise regulation of torque and speed for electric motors. Embedded within the Arduino is a specialized computational and mathematical approach that employs a well-established procedure (algorithm) to ensure precise control of torque and speed for electric motors. An algorithm represents a systematic series of steps for performing calculations. The microcontroller constantly supervises the output of the electric motor, employing feedback from a transducer or sensor that yields voltage or current signal data associated with the motor's torque and/or speed. The microcontroller's embedded software perpetually monitors these signal data for any deviations and, if such deviations arise, it implements adjustments to the output signal responsible for controlling the driving circuit. Hence, the transducer or sensor, entrusted with monitoring the motor's output parameters, indirectly contributes to the physical-computing activity exerted upon the electric motor. This relationship is illustrated in Figure 13, portraying a standard system block diagram for a DC motor controller founded on physical computing principles. Figure 13 illustrates the system block diagram delineating the control of the DC motor. Achieving Motor Speed Control with Physical Computing Up until this point in the chapter, the focus has been primarily on the fundamental control of DC motors, essentially involving their activation and deactivation. The subsequent sections of this chapter will delve into the realm of regulating the motor's speed through the application of physical-computing methods. You will engage with input sensor circuits, specifically employing a potentiometer and a photocell, to facilitate interaction with the DC motor and attain speed control. Potentiometer Input Control By toggling the base at a predefined frequency, the transistor is enabled to deliver an averaged current to the stator of the DC motor, effectively regulating the speed of the electromechanical unit. Illustrated in Figure 14 is a common approach to controlling DC motor speed, utilizing the Arduino as the generator of the PWM signal. Figure 14 displays the schematic diagram of a physical-computing DC motor speed controller. The assembly of the circuit on the solderless breadboard involves a minimal number of components and wiring. Additionally, just two jumper wires are required to connect the potentiometer and the base of the 2N2222 transistor to the Arduino's single inline header connectors. The conclusive motor speed controller prototype is depicted in Figure 15. Figure 15 illustrates a DC motor speed controller based on physical computing, assembled using a solderless breadboard. As previously explained, motor speed control is achieved using the 10KΩ potentiometer. Tweaking this component enables the ATmega328 microcontroller of the Arduino to generate a seamless sequence of pulses. These pulses serve to bias the 2N2222 transistor effectively, allowing it to efficiently drive the small DC motor. To observe the PWM signal, connecting an oscilloscope involves attaching one test lead to the base of the transistor driver and the other lead to a ground point. Figure 16 demonstrates the configuration for attaching an oscilloscope to the base lead of the 2N2222 NPN transistor. The practical arrangement for these measurements is presented in Figure 17. Rotating the shaft of the potentiometer induces a corresponding alteration in the duty cycle value, which varies proportionally with the degree of resistance. As the resistance of the potentiometer increases, the duty cycle value expands. With a resistance set to its maximum value (10KΩ), the duty cycle attains 100 percent, causing the small DC motor to operate at its full-rated speed. Figure 16 illustrates the circuit schematic diagram depicting the Arduino-controlled DC motor setup, complete with an oscilloscope for observing the PWM signals. Figure 17 displays the circuit schematic diagram outlining the procedure for connecting an oscilloscope to visualize the PWM signals generated by the Arduino.   Figure 18 provides a detailed view of the PWM control signal generated by the Arduino, revealing a sequence of well-defined square-wave pulses. Figure 18 illustrates the PWM control signal generated by the Arduino to regulate motor speed. The 2N2222 Transistor Pinout It's crucial to emphasize that not all NPN transistors share identical characteristics. The pinout arrangement of the 2N3904 NPN transistor places the emitter on the left side of the three-pin component. The base occupies the central lead, while the collector resides on the immediate right. Conversely, for the 2N2222 transistor, the emitter is situated on the right side, and the collector is positioned on the left side. Figure 17 outlines the pinout configuration for the 2N2222 transistor, ensuring the accurate operational functionality of both the speed control circuit and the basic motor control project. Figure 19 presents the pinout diagram for the 2N2222 NPN transistor (adapted from ON Semiconductor datasheet). The Motor Speed Control Software Having assembled the electronic hardware, the next step involves implementing the sketch to finalize the project construction. This sketch empowers the Arduino to interpret the analog position of the potentiometer and subsequently generate a PWM signal correlated to the angular positioning of the wiper arm. The sketch is thoughtfully annotated, thereby simplifying potential adjustments to the analog or digital port pins. The motor speed control sketch is depicted in Listing 1 for reference. Listing 1. The Motor Speed Control Sketch  int motorPin = 9; // motor connected to digital pin 9 int analogPin = 0; // potentiometer connected to analog pin 0 int val = 0; // variable to store the read value void setup() { pinMode(motorPin, OUTPUT); // sets the pin as output } void loop() { val = analogRead(analogPin); // read the input pin analogWrite(motorPin, val / 4); // analogRead values go from 0 to 1023, analogWrite ➥ values from 0 to 255 } A concluding point concerning the functioning of the physical computing-based controller: upon uploading the motor speed control sketch to the Arduino, the behavior of the electromechanical component may initiate at a low, medium, or high speed, contingent upon the positioning of the 10KΩ potentiometer. Light Detection Input Control In the concluding phase of the project that delves into human interaction and control within the physical realm, we will fine-tune the speed of the DC motor utilizing light. By establishing a proportional voltage grounded in the resistance of the CdS photocell, the appropriate duty cycle for the PWM output control signal is achieved through the Arduino computing platform. When ambient light is present, positioning an object (such as a hand) over the CdS photocell will amplify the DC motor's speed. In scenarios where the light sensor detects the absence of an object, the DC motor will rotate at a moderate pace. Conversely, if a light source illuminates the sensor, the DC motor will come to a complete stop. Figure 20 outlines the circuit schematic diagram for the light-activated DC motor speed controller. The motor speed control sketch maintains its structure, except for the substitution of the 10KΩ potentiometer with the light detection circuit portrayed in the circuit schematic diagram illustrated in Figure 20. The ultimate project assembly is presented in Figure 21. The strategic arrangement and orientation of the CdS photocell yield optimal results, facilitated by the swift responsiveness of the Arduino computing platform in adapting the DC motor's speed in accordance with fluctuating light levels. The transition in motor speed, characterized by a gradual acceleration and deceleration based on shifts in ambient lighting, unfolds smoothly with minimal or negligible instances of acceleration adjustment hesitation. Final Testing of the Devices Within this chapter, a sequence of testing procedures was outlined to identify potential flaws during the construction of hardware circuits. Employing tools like a Digital Multimeter (DMM) and an oscilloscope, these testing methodologies can be verified on the workbench. It's important to note that the results might exhibit a variance of up to +/-10 percent contingent on the specific manufacturer of the testing instruments. During the testing process, ensure the correctness of the wiring before applying voltage to the Arduino and the accompanying circuits. The "How it Works" segment within this chapter serves as a valuable resource to confirm the accurate functionality of the circuit on the breadboard. Additionally, scrutinize the sketch within the Arduino IDE editor for any typographical errors that could lead to improper operation of the hardware device. Further Discovery Methods Numerous avenues for exploration are available within the context of the two projects featured in this chapter. One such avenue involves altering the operational dynamics of the basic DC motor control facilitated by a transistor relay driver circuit. Rather than employing an active-high switch for control, consider employing an active-low digital input configuration. Figure 8, as presented earlier in the chapter, serves as a guide for the configuration's wiring arrangement during this exploration. For the second task, consider rearranging the placement of the 10K resistor and the CdS photocell to enable the motor speed to escalate in response to ambient (usual) light conditions, illustrated in Figure 4-21. Moreover, substitute the 2N2222 transistor with either a TIP31C or TIP120 transistor. Incorporate a DC motor with a higher operational current and voltage rating and take note of the ensuing speed control dynamics. As you undertake these modifications, it's advisable to comprehensively document the design process within a lab notebook. Record the adjustments made to the sketch for the novel DC motor speed controller that you've devised.         ### Creating Mini Digital Roulette Games with Arduino. Crafting straightforward electronic games becomes effortless with the Arduino. Within the scope of this chapter, I will demonstrate the possibility of constructing an interactive mini casino game using fundamental digital electronic circuits within a mere two-hour timeframe. By leveraging just nine distinct electronic elements and an Arduino board, you'll find it a breeze to assemble a pair of captivating Mini Digital Roulette games. Parts List 1 Arduino Duemilanove or equivalent 1 LED bar display (also called a bar graph LED display) 1 2x8 330W DIP resistor IC 1 big LED 1 push-button switch (tactile or equivalent) 1 10K trimmer potentiometer 1 10K resistor 1 7490/74LS90 Decade Counter IC 1 7447/74LS47 Seven-Segment Decoder Driver IC 1 Common Anode Seven-Segment LED Display (MAN 72) 1 small solderless breadboard 22 AWG solid wire Digital multimeter Oscilloscope (Optional) Electronic tools Within this chapter, I'll demonstrate how the two devices exemplify a design approach in which a novel product emerges from a more straightforward blueprint. This innovative "remix" design method empowers product designers and developers to expedite their market entry without extensively overhauling the bill of materials (BOM). Refer to Figures 2-2 and 2-3 for the system block diagrams of the two Mini Digital Roulette games. Examining the system block diagram more closely unveils the circuit schematic of the LED roulette game, as depicted in Figure 2-4. The numerals positioned above the arrows indicate the count of pins employed between the two modules. This data will prove significant in the context of the mini roulette game's seven-segment LED display variant. How It Works The LED roulette game operates by having the Arduino detect a rising edge from a simple push-button switch. When the +5VDC control signal is received, the Atmega328 microcontroller, programmed with specific software, initiates the sequential switching of the three LEDs within the LED bar display. The software rapidly activates the LEDs according to a predetermined switching pattern, gradually decelerating until only one LED remains illuminated. With each press of the push-button, the switching cycle repeats, lighting up a different LED each time. To ensure the Arduino's Atmega328 microcontroller detects the +5VDC, a 10K pulldown resistor is incorporated in series with the push-button switch. The circuit schematic diagram in Figure 2-4 outlines the specific wiring orientation for each LED within the bar display. The adopted wiring convention guarantees proper illumination of the LEDs based on the corresponding switched output port (D8, D11, D13) through a process known as forward biasing. Note: Take note that a rising edge in a digital control signal denotes a shift from 0V to either +3.3V or +5V. The term "pulldown" signifies the application of the supply voltage across the connected resistor, guaranteeing that the microcontroller's input port pin recognizes it as a valid binary logic "1" data value. This recognition is crucial for accurate processing of the control signal. Forward Biasing a LED Take note that a rising edge in a digital control signal denotes a shift from 0V to either +3.3V or +5V. The term "pulldown" signifies the application of the supply voltage across the connected resistor, guaranteeing that the microcontroller's input port pin recognizes it as a valid binary logic "1" data value. This recognition is crucial for accurate processing of the control signal. LED Circuit Analysis The current resulting from forward biasing, as depicted on the virtual ammeter in Figure 2-6, can be manually computed (using pen and paper) utilizing the subsequent equation: where • IFD is the forward current of the LED. • V1 is the supply voltage. • VFD is forward voltage drop of the LED (Note: 1.66 V is the value for this component parameter). • R1 is the series limiting resistor. So, making the appropriate substitutions into the equation IFD= (5V -1.66V )/330Ω IFD=3.34V / 330 Ω IFD= 0.01012A or 10.12mA The practical solution carried out using the Windows Calculator is illustrated in Figure 2-8. The LED Bar Display Illustrated in Figure 2-4, the visual representation of the Mini LED Roulette game adopts a bar display design. LED bar displays encompass an assortment of separate solid-state indicators, varying from 4 to 10 components within a single Dual In-Line Package (DIP). In the context of this Arduino-based electronic game, the employed DIP IC package contains 10 distinct LEDs, as exemplified in Figure 2-9. The anode pins of the DIP IC package are situated on the side bearing the part number. Verifying an LED bar display can be effortlessly accomplished by utilizing a Digital Multimeter (DMM) configured to measure resistance. Contemporary DMMs come equipped with a diode test feature, which proves useful for LED testing. To initiate the test, select the diode testing mode on the DMM, then attach the red test lead of the measuring device to the anode pin, while connecting the black test lead to the cathode. The configuration for connecting the DMM to the LED bar display is depicted in Figure 2-10. While the DMM's LCD may indicate an open circuit, the individual LED linked to it will actually illuminate. This illumination occurs due to the slight current supplied by the ohmmeter, which forward biases the LED and thus causes it to emit light. The testing methodology covered in this discussion can be employed for assessing a seven-segment LED display. In addition to demonstrating the testing process for the seven-segment LED display, I will provide an explanation of the operational principles behind this optoelectronic component. Note   Optoelectronics encompasses a technology that amalgamates light and electronic circuits, incorporating elements like LEDs, seven-segment LED displays, and LCDs as prime instances. Mini Roulette Game, Version 1 Depicted within the circuit schematic diagram of Figure 2-4, the initial iteration of the Mini Digital Roulette game demonstrates a relatively straightforward electronic design. This design holds an experimental nature; it offers an avenue for self-discovery through the addition of LEDs and the modification of sketches to accommodate supplementary solid-state indicators. Employing a solderless breadboard in conjunction with the Arduino, the prototype game's construction is facilitated. Figure 2-12 provides a visual representation of the finalized prototype game. Upon a momentary press of the push-button switch, the trio of LEDs commences a swift lighting sequence, each swiftly activating. This sequence iterates several times before gradually slowing the switching rate. Upon reaching this output stage, one of the LEDs remains illuminated, denoting the conclusion of the game with the designated winning number. The specific LED that remains lit is determined by a randomly selected switching pattern governed by the embedded sketch. When assembling the Mini Digital Roulette game, the LED bar display and the 330 Ω DIP resistor are both affixed onto the compact solderless breadboard, maintaining suitable spacing to accommodate jumper wires. A DIP package typically contains eight 330 Ω resistors, as depicted in Figure 2-13. These resistors serve the purpose of regulating the current flow through each individual LED within the bar display IC. Positioned between parallel pins, each resistor ensures proper current distribution. For confirmation of component arrangement, employ an ohmmeter to test. Connect the red and black test leads of the ohmmeter to the parallel pins, as illustrated in Figure 2-14. The ohmmeter's LCD screen will display the resistance measurement of a single 330 Ω resistor, and this identical measurement technique can be employed to validate the remaining 330 Ω resistors. Adding the Game Software The conclusive stage in completing the first version of the Mini Digital Roulette game involves incorporating the sketch. The sketch for the mini roulette game is presented in Listing 2-1. Listing 2-1. The Mini Digital Roulette Game Sketch /*Arduino LED Roulette Posted by changb3 in Class Notes Connect 3 LED's to digital output pins 8, 11, and 13 (with resistors in serial with each).Connect a push-button to pin 2 (and don't forget the pulldown resistor). [code] Modified by Don Wilcher 11/17/11 /* random light */ const int buttonPin = 2; int lightpins[3] = {8,11,13};//Change sequence of LEDs Here! int state=0; void setup() { pinMode (buttonPin,INPUT); pinMode (lightpins[0],OUTPUT); pinMode (lightpins[1],OUTPUT); pinMode (lightpins[2],OUTPUT); digitalWrite (lightpins[0],LOW); digitalWrite (lightpins[1],LOW); digitalWrite (lightpins[2],LOW); } void loop () { int reading = digitalRead (buttonPin); int blinktime=20; boolean done; if (reading == HIGH) { if (state==0) { state=1; done=false; blinktime=20; blinktime+= 3; while (!done) { for (int j=0;j<3;j++) { blinktime += random(3); digitalWrite(lightpins[j],HIGH); if (blinktime>200) { done=true; break; } delay(blinktime); digitalWrite(lightpins[j],LOW); delay(blinktime); } } } } { else {state=0; } } What makes the Arduino computing platform truly remarkable is the extensive community of developers generating open-source software tailored for a wide array of hardware gadgets and devices. I discovered that the remix approach to software development was notably straightforward to execute, primarily owing to the abundance of sketches accessible online through forums and virtual communities of hobbyists. The provided sketch serves as an illustrative instance of remixing due to its incorporation of random bit selection once the game concludes. The code lines responsible for generating the randomized LED displays are outlined as follows: blinktime += random(3); digitalWrite(lightpins[j],HIGH); if (blinktime>200) Following the cessation of the game, the initial sketch maintains the presentation of the last bit on the LED bar display. A fresh sequence for the LED display can be implemented through the utilization of the subsequent code line: ```cpp int lightpins[3] = {8,11,13};//Modify LED sequence Here! ``` Modifying the arrangement of digital output pins (8, 11, 13) will result in distinct visual effects for the Mini Digital Roulette game. The Seven-Segment LED Display Basics While the LED bar display offers a distinctive method of depicting a spinning roulette ball, comprehending the chosen number can prove challenging due to its binary format. The forthcoming enhancement for the Mini Digital Roulette game entails substituting the LED bar display with a numeric digit. This design modification enhances the electronic product by ensuring clear visibility of the numbers throughout the game. The seven-segment LED bar display shares similarities with the LED bar display, but with the added feature that each segment is positioned to exhibit a number or character. Figure 2-15 provides a depiction of the internal configurations of every LED segment within the optoelectronic display. Observe that all anodes are linked to a shared electrical node, forming a central connection. This configuration designates the display package as a common anode seven-segment LED display. Conversely, a common cathode display exists, where all individual LED cathodes are interconnected to a solitary electrical point or pin on the DIP component. Another prominent physical attribute is the count of distinct LEDs—seven in total within a single package—hence the name seven-segment LED display. A representative example of a seven-segment LED display component is illustrated in Figure 2-16. Testing the Seven-Segment LED Display You'll observe that testing a seven-segment LED display follows a pattern akin to assessing a basic silicon diode. When you connect the red test lead of the ohmmeter to the common anode pin and attach the black test lead to one of the cathode pins on the seven-segment LED display, the optoelectronic component will be forward biased by the meter. Figure 2-17 outlines the configuration for testing a seven-segment LED display, employing a Digital Multimeter (DMM) set in ohmmeter mode. As a result of forward biasing, the individual LED segment will illuminate. In the testing scenario depicted in Figure 2-18, the lower-left segment is activated. Another noteworthy aspect of seven-segment LED displays is the assignment of letters to each distinct LED element. These segments are designated with seven letters, ranging from A to F. By interconnecting these letters in various combinations, you can form alphanumeric characters and numerals. In the enhanced iteration of the Mini Digital Roulette game, numbers 0-9 will be showcased on the seven-segment LED display. This method of representing the spinning ball within the roulette wheel elevates the game's visual appeal, surpassing the repetitive scanning of three LED bars. Note  Prior to the advent of solid-state seven-segment LED displays, digital data was conveyed through Nixie Tubes, reminiscent of compact vacuum tubes containing neon light segments arranged within their glass enclosures.   Multisim (or a comparable circuit simulation software) serves as a valuable tool for demonstrating the procedure to test a seven-segment LED display. Rather than activating the specific LED segment in question, the ohmmeter will indicate an exceedingly high resistance value (measured in giga-ohms) for a faulty LED (open circuit). Conversely, a functional LED segment will exhibit a resistance in the range of several hundred mega-ohms on the ohmmeter. Although the seven-segment LED display models within Multisim exhibit accuracy, Figure 2-19 provides a visual representation of a properly functioning LED segment (in forward biasing mode) juxtaposed with a malfunctioning optoelement depicted in reverse biasing mode. Build an Arduino-based Seven Segment LED Display Flasher-Tester Creating a digital clock using the Arduino alongside a straightforward seven-segment LED tester is a seamless endeavor. The pulse or flashing frequency of the digital clock can be finely tuned through the utilization of a potentiometer. Configuring the seven-segment LED display to represent a particular alphanumeric character or numeral permits the examination (flashing) of intended segments on the optoelectronic unit. The block diagram of the Arduino Flasher-Tester is depicted in Figure 2-20. The system block diagram's circuit schematic is depicted in Figure 2-21. Altering the resistance of the potentiometer introduces varying input voltages, influencing the flash rate of the seven-segment LED display. Within the Arduino's microcontroller, a range of corresponding analog-to-digital count values extends from 0 to 1024 bits. These values are employed by the embedded sketch within the Arduino's Atmega328 microcontroller to generate a distinct flash rate for the digital clock signal at pin D13. The chosen LED segments designated for visual presentation will pulsate according to the predefined rate set by the sketch. Rotating the 10 K potentiometer either clockwise or counterclockwise instigates the seven-segment LED display to alternate between slower and faster flashing speeds. For setting up the common anode seven-segment LED display as depicted in the circuit schematic diagram, the pinout is illustrated in Figure 2-22. Note that some pins are omitted; this should not be mistaken for a defective or faulty seven-segment LED display. Constructing the complete Arduino Flasher-Tester circuit is straightforward on a compact solderless breadboard, as exemplified in Figure 2-23. Adding an element of amusement, a large blue LED can be integrated into the circuit assembly, as showcased in Figure 2-24. Tweaking the potentiometer to achieve a rapid flash rate imparts a stroboscopic effect to the blue LED. The Arduino community boasts a substantial size, with contributors consistently introducing fresh sketches and tutorials on a daily basis. The flashing control sketch featured in Listing 2-2 originates from this community of dedicated volunteer software developers and contributors. Listing 2-2. The Arduino Seven-Segment LED Flasher-Tester's Potentiometer LED Control Sketch /* Analog Input Demonstrates analog input by reading an analog sensor on analog pin 0 and turning on and off a light emitting diode(LED) connected to digital pin 13. The amount of time the LED will be on and off depends on the value obtained by analogRead(). The circuit: * Potentiometer attached to analog input 0 * center pin of the potentiometer to the analog pin * one side pin (either one) to ground * the other side pin to +5 V * LED anode (long leg) attached to digital output 13 * LED cathode (short leg) attached to ground * Note: because most Arduinos have a built-in LED attached to pin 13 on the board, the LED is optional. Created by David Cuartielles Modified 4 Sep 2010 By Tom Igoe This example code is in the public domain. http://arduino.cc/en/Tutorial/AnalogInput */ int sensorPin = A0; // select the input pin for the potentiometer int ledPin = 13; // select the pin for the LED int sensorValue = 0; // variable to store the value coming from the sensor void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); } void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH); // stop the program for < sensorValue > milliseconds: delay(sensorValue); // turn the ledPin off: digitalWrite(ledPin, LOW); // stop the program for < sensorValue > milliseconds: delay(sensorValue); } As discussed earlier, the potentiometer provides the analog-to-digital count (ADC) values using this line of instruction: sensorValue = analogRead(sensorPin); The Arduino pin used to obtain the potentiometer- control voltage levels is A0. Based on the ADC value, the sketch produces a delay that corresponds to the flash rate using this line of instruction: delay(sensorValue); Pin D13 is driven LOW based on this line of instruction and the one that follows: digitalWrite(ledPin, LOW); The flash rate remains at the specified switching value until the potentiometer’s resistance is changed. The 7447 BCD-to-Decoder IC Basics In the ultimate version of the Mini Digital Roulette game, a distinct integrated circuit (IC) is utilized, designed to receive a four-bit binary input and translate it into its corresponding decimal counterpart. Employing a binary weighted value system of 8-4-2-1, this setup facilitates the display of numbers 0 through 9 on a seven-segment LED display. The four inputs, designated by the letters D, C, B, and A, can be transformed into numerical representations ranging from 0 to 9. Figure 2-25 provides an illustration of the seamless conversion of four-bit binary values into their equivalent decimal form, known as Binary Coded Decimal (BCD). Take note that D corresponds to 8, C corresponds to 4, B corresponds to 2, and A corresponds to 1. By incorporating any value associated with a binary value of 1, achieving numbers from 0 to 9 can be effortlessly accomplished. Example: Convert binary 1001 to its equivalent decimal number. Solution: Step 1 involves examining the weighted values within the BCD-to-decimal converter table and gathering the numbers that possess a "1" beneath them. 8 and 1 have a binary value of 1 Step 2. Add the weighted values together. 8 + 1 = 9 Hence, binary 1001 corresponds to the decimal value 9. It truly is that straightforward! Through the 7447 BCD-to-Decoder driver circuit, the appropriate segments of the seven-segment LED display can be illuminated in accordance with the binary four-bit data value detected at its input pins. The uncomplicated diagram featured in Figure 2-26 delineates the binary coded decimal inputs as well as the seven-segment outputs of the 7447 BCD-to-Decode driver IC, facilitating the activation of a seven-segment LED display. Build a BCD-to-Decimal Circuit with Seven Segment LED Display Presently, an enhancement can be introduced to the Mini Digital Roulette game by adopting a seven-segment LED display, offering improved number visibility for players as compared to the LED bar display. The driving of segments within this setup relies on the 7447 IC, which responds to a four-bit binary count value originating from its input pins. To generate the essential four bits for the BCD-to-Decoder driver chip, a 7490 Decade Counter IC is employed. This 7490 Decade Counter effectively generates a maximum of ten count states, leveraging the four-bit binary pattern illustrated in Figure 2-25. The Arduino serves as the source of the digital clock signal, essential for incrementing the count values to be presented on the seven-segment LED display. Referencing Figure 2-27, the circuit schematic diagram for the BCD-to-decimal circuit incorporating the seven-segment LED display is depicted. Pressing the momentary tactile switch PB1 initiates the counting sequence, commencing from 0. The highest count exhibited on the seven-segment LED display is 9, and the counting sequence perpetually cycles through this range. Assembly of the Final Circuit on the Breadboard Figure 2-28 illustrates the construction of the enhanced Mini Digital Roulette game. As emphasized in Chapter 1, ensuring appropriate lengths for components and jumper wire leads contributes to a tidy circuit arrangement. To achieve orderly wiring, it's advisable to position the components on the solderless breadboard in a manner that facilitates optimal jumper routing. In line with this strategy, an extra mini solderless breadboard was utilized for accommodating the other IC components, yet the overall circuit dimensions remained manageable, as depicted in Figure 2-28. Adding the Mini Digital Roulette Game Software Listing 2-2 displays the script for enhancing the Mini Digital Roulette game. The pivotal aspect of implementing this script centers around utilizing pin 13 on the Arduino computing platform, designated for clocking both the counter circuit and the seven-segment LED display. The pace at which the game progresses is governed by the ensuing line of instruction: int blinktime = 20; delay(blinktime); Through alteration of the integer value within the "blink time" variable, the delay instruction will generate the necessary pulsating switching required to operate the 7490 and 7447 digital ICs. As an exploratory endeavor, partake in crafting diverse switching patterns and document the ensuing outcomes by adjusting the value of the "blink time" variable. Final Testing of the Mini Digital Roulette Game Within this chapter, I delineated a product development methodology that transforms the Arduino into an educational instrument for comprehending electronics. As established in the preceding sections, every interface circuit and output driver component can undergo examination with fundamental electronics testing tools like a DMM and oscilloscope. Upon the successful functioning of each sub-circuit, the ultimate testing phase (with the Arduino sketch uploaded) entails verifying the correct output responses of the final product. In the scenario of the Mini Digital Roulette games, the rate at which alterations occur in the displayed data on both the LED bar and seven-segment LED displays relies on specific directives designed to generate delay-based clock pulses. When conducting tests, a critical aspect to note is the unpredictability of the numbers exhibited upon game completion. It is essential to ensure that identical numbers are not concurrently showcased on both visual displays. Furthermore, careful attention should be paid to the speed at which the game concludes and this should be adjusted accordingly. A game that concludes swiftly may fail to retain the player's engagement. Conversely, if the device takes an extended time to come to a halt, the player's interest could wane. Timing holds paramount significance. Should the segments on the seven-segment LED display show interruptions, it is advisable to scrutinize the wiring to confirm proper connectivity of IC pins to the optoelectronic component. Additionally, a review of the sketch inputted into the Processing Editor should be conducted to identify any typographical errors that could potentially lead to improper operation of the Arduino. Further Discovery Method Suggestions In order to sustain the thrill of delving into electronics with Arduino, I propose the incorporation of a potentiometer, enabling the player to fine-tune the pace of the game's execution. Figure 2-29 illustrates the block diagram outlining this fresh addition to the game's mechanics. Upon pressing the button, the game is set into motion, incrementing the count values on the seven-segment LED display. Releasing the button prompts the optoelectronic device to reveal a displayed number. Depressing and subsequently releasing the button ought to unveil a distinct number on the seven-segment display. Engaging in a self-discovery endeavor entails devising a circuit schematic diagram based on the system block diagram depicted in Figure 2-2. The sketch provided in Listing 2-1 can be employed to evaluate the functionality of this novel circuit design. ### The NetP Project: Creating a Network of Processors with Arduino Mini Pro Boards Narrative Arduino is truly remarkable; I have a deep fondness for it. It can be likened to the "Lego" of the electronics and automation world. Presently, I'm engrossed in a project where numerous MCU boards are orchestrated to form an interconnected network of processors, aptly named NetP. These boards establish communication via the i2c bus. The selection comprised Arduino Mini Pro boards operating at a voltage of 3.3V. To facilitate the transfer of sketches from the Arduino IDE to the Mini Pros, a USB to serial FTDI board is indispensable. Additionally, in order to accommodate the keyboard, a TTL level converter is employed to shift from 3.3V to 5V. At the moment, several functionalities have been successfully implemented, while there remains a list of pending tasks. Furthermore, certain aspects are awaiting ingenious solutions, aligned with our aspirations. Accomplishments thus far include: The most prominent component is the console, comprised of a keyboard and a scrolling display. This facilitates interaction with the nearby MCU, Netp0 (Console), which, in turn, enables communication with other constituents of the local i2c network—Netp1 (SD), Netp2 (Updater), Netp3 (Clock), and so forth. Alternatively, you have the option to forgo the console's display and keyboard by establishing a Bluetooth connection with a smartphone. This enables remote control, and I have impeccably configured the app "Serial Bluetooth Terminal 1.31" for this purpose, although alternative apps are also viable options.   Each member of the Netp MCU ensemble is assigned distinct attributes: an individualized i2c bus address (0x0a), a designated name (CONSOLE), a unique ID (p0), and a corresponding number (0). It's worth noting that the i2c bus may also accommodate additional elements, currently limited to an EEPROM and a Real Time Clock board. It's imperative to allocate separate i2c addresses for each member or constituent. The overarching design principle is plug-and-play functionality. Adding a new Netp member to the setup seamlessly integrates it into the network, a process readily discernible through the "scan" command, which identifies newly connected members. Functionality of the CONSOLE (p0): scan: Initiating a scan [inquiry into the i2c bus, e.g., scan, generates a roster of active addresses on the bus presented as "DDD (0xEE)"... culminates with "'n' found"]. ckpower: Querying power status [e.g., ckpower, yields "v3=3.3 v5=5.0 vraw=7.0-12.0"]. ?: Requesting command elucidation [e.g., ?, retrieves a catalogue of available commands on the board along with available memory]. reset: Enforcing a reboot [e.g., reset compels the MPU to undergo a reset]. : Dispatching to processor [e.g., SD dir /, delivers the outcome of from processor ]. The "Scan" command is automatically activated at 30-second intervals, facilitating seamless plug-and-play integration. To ascertain availability, simply execute the "scan" command, revealing names and addresses of active components. Employ the "?" command to unveil the array of implemented commands on the console. For insights into the commands operational on the SD member, initiate the "p1 ?" command. If you wish to obtain a listing of files on the SD, executing "p1 dir /" will suffice—similarly for other functionalities. Functionality of the SD (p1): ?: Request assistance [e.g., ?, provides an inventory of accessible commands on the board along with available memory]. mw/mwa: mw = [initiates composition/modification of Value within file name, e.g., mw temp01=24 (FileName=Value), yields "written"] (mwa will append Value to the file) mr/mra: mr [extracts Value from corresponding file name, e.g., mr temp01 (FileName is temp01, Value is 24, returns 'Value' or "not found")] (mra will retrieve multi-line Value from the file) reset: reset [initiates MPU reset, e.g., reset] dir: dir [scans for file names commencing from 'path', e.g., dir /], provides a roster of file 'names' along with their 'size'... concludes with 'n found'] mkdir: mkdir [constructs a fresh directory (including relevant subdirectories), e.g., mkdir /music, sdmkdir /logic/params/binary, yields "built" or "error"] rmdir: rmdir [erases a directory, for example, rmdir /music, produces "removed" or "error or not empty"] rename: rename [renames a file, i.e. rename myfile.txt bestfile.txt, returns "renamed" or "not found"] del: del [delete a file, i.e. del myfile.txt, returns "deleted" or "not found"] type: type [reads a file and displays in mode 0=CHR, 1=BIN, 2=HEX, i.e. type myfile.txt CHR, returns the content of the file... and filesize 'n' and bytes red 'n' at the end] eeupl: eeupl [read a file and upload it to the EEPROM, write and verify all data, i.e. eeupl /mysketch.hex, returns upload, written, verified...] As a result of limited memory availability, certain commands have been deactivated, retaining only those essential for my needs. My past encounters have emphasized the importance of refraining from pushing memory usage close to its maximum capacity, as this may lead to unforeseeable MCU behavior. For the SD sketch, I believe I've meticulously optimized the code to conserve memory space, but there might still be room for further improvements. The mw and mr commands function within the /MEMORY/ subdirectory, whereas mwa and mra are applicable within the /LOG/ subdirectory. Functionality of the UPDATER (p2): ?: ? [ask for help, i.e. ?, returns a list of available commands on board and free memory] reset: reset [resets MPU, i.e. reset] Functionality of the CLOCK (p3): ?: ? [ask for help, i.e. ?, returns a list of available commands on board and free memory] reset: reset [resets MPU, i.e. reset] red: red [switch on or off the red LED, i.e. red on, returns "ON" or "OFF"] green: green [switch on or off the green LED, i.e. green on, returns "ON" or "OFF"] dht: dht [get temperature and humidity from DHT board, i.e. DHT, returns the values] gettemp: gettemp [get temperature from RTC board, i.e. gettemp, returns the temperature value] gettime: gettime [get time from RTC board, i.e. gettime, returns the time value as per DD/MM/YYYY HH:MM:SS] settime: settime [set the time to RTC board, i.e. settime 31/12/2018 10:20:30, returns the time value as per DD/MM/YYYY HH:MM:SS] List of Components: 4 x Arduino Mini Pro 3.3v Micro SD Card adapter MicroSD memory card RTC zs-042 module DHT-11 sensor Protoboard power supply from 7-12V to 3.3V and 5V 4 x protoboards Red LED Green LED 2 x 470uF 25V capacitors 100nF capacitor HC05 bluetooth module FTDI USB-Serial converter Display 2.4" TFT LCD 240x320 RGB, driver IC ILI9341 USB mini keyboard TTL level converter 3.3V <-> 5V for keyboard USB USB female + cable Active buzzer EEPROM i2c 1024 Push button 100 ohm resistor 4 x 5k1 ohm resistors 2k2 ohm resistor 6k8 resistor 2 x 120 ohm resistor Many wires.. i2c Communication Bus Protocol: Netpx members establish communication through the i2c BUS utilizing the Wire.h library, employing a customized protocol based on messages and events. When a command like "SD dir /" is inputted from the console keyboard, the name "SD" is initially translated into the corresponding address (e.g., 0x0b) by referencing the netRegisterNames[] matrix. This address is then dispatched onto the BUS using the askCommandOnPx() function. On the recipient end, a receiveEvent() event is triggered, leading to the local execution of the requested command and the subsequent transmission of its data. The identifier for these messages is the chr(7) BEL byte. Furthermore, during the scan command, an additional message is conveyed through the BUS using the whois() function in conjunction with Wire.requestFrom(). This message is employed to solicit the name and supplementary details from a potential Netpx member at a designated address, such as 0x0c. In the absence of a suitable response, the device is categorized as an "other device." On the receiving side, a netWhoIsEvent() event is triggered. The identifier for these messages is the chr(5) ENQ byte. Pending Tasks (My Wishlist): First and foremost, a command request queue is of utmost importance. Currently, when commands are dispatched from the console, the execution of subsequent commands is often neglected if sent in quick succession following the initial one. This proposed feature entails amassing all commands within a queue and subsequently executing them one by one, maintaining their appropriate sequence. The second enhancement on my agenda involves the implementation of a scheduler. This scheduler would comprise a compilation of commands earmarked for execution at specific times or intervals. This list of commands could be interactively modified through console interactions, endowing a dynamic and responsive scheduling mechanism. Lastly, my most ambitious aspiration pertains to the facilitation of storing updated or new sketches within a designated directory on the SD card. This revamped setup would involve the UPDATER overseeing the transfer of these sketches to the EEPROM before deployment onto the target MCU. To enable such functionality, the destination MCU, slated for the update, should be equipped to autonomously read from the EEPROM and perform the required autoupdate. However, achieving this functionality necessitates the modification of the conventional bootloader for seamless integration. Do you have any thoughts or recommendations? As I gather new developments, enhancements, additional components, or fresh concepts, I will share these updates within these sections. I eagerly await your insights and feedback on this ongoing project. Code /* Arduino Net-P (i2c processors network) by Zonca Marco 2020 * 'netMyNAME' ("CLOCK ") max 8 char, 'netMyID' (p9) max 2 char, * address='netMyAddress' (0x16) max 0xFF, 'netMyPx' (9) * * implemented commands (* = to do): HELP | ?, dht, gettemp, gettime, settime, red, green * */ #include #include // RTC real time clock #include const int netMyPx = 9; // netMyPx 0-9 const int netMyAddress = 0x16; // i2c address 0x16=HEX 22=DEC const char *netMyID = "p9"; // netMyID const char *netMyNAME = "CLOCK "; // netMyNAME const int GreenLedPin=8; const int RedLedPin=9; const int DHTPin=14; const int ResetPin=17; // A3 put low for reset char _CR[2]=""; // CR char _BEL[2]=""; // BEL char _ENQ[2]=""; // ENQ char _ACK[2]=""; // ACK char _SPACE[2]=""; // SPACE char _MYADDR[2]=""; // netMyAddress char lineString[65]=""; char recCommand[65]=""; byte recAddress=0; byte recType=0; char data[2]=""; bool isNetDataWaiting=false; bool isKnownCommand = false; bool isRedOn=false; bool isGreenOn=false; bool isBusy=false; struct ts t; // RTC dht DHT; // HG + Temp sensor void setup() { //Serial.begin(38400); Wire.begin(netMyAddress); Wire.onReceive(receiveEvent); // i2c event Wire.onRequest(netWhoIsEvent); // i2c whois _CR[0] = 13; // CR _BEL[0] = 7; // BEL _ENQ[0] = 5; // ENQ _ACK[0] = 6; // ACK _SPACE[0] = 32; // SPACE _MYADDR[0] = netMyAddress; pinMode(GreenLedPin, OUTPUT); pinMode(RedLedPin, OUTPUT); digitalWrite(RedLedPin,LOW); digitalWrite(GreenLedPin,LOW); DS3231_init(DS3231_INTCN); // RTC DHT.read11(DHTPin); // DHT } // end setup() void loop() { if (isNetDataWaiting == true) { execNetCommand(); } } // end loop() void execNetCommand() { // executes received command isBusy=true; char park[65]=""; char command[65]=""; if (recType == _BEL[0]) { // char(7) = BEL command type isKnownCommand=false; if (s_compare(recCommand,"")==0) { // empty command just do nothing isKnownCommand=true; prompt(); } s_substring(park,sizeof(park),recCommand,sizeof(recCommand),0,3); // red if (s_compare(park,"red ") == 0) { s_substring(command,sizeof(command),recCommand,sizeof(recCommand),4,strlen(recCommand)-1); if (strcmp(command, "on") == 0 || strcmp(command, "off") == 0 || strcmp(command, "?") == 0) { isKnownCommand=true; ledred(command); } } s_substring(park,sizeof(park),recCommand,sizeof(recCommand),0,5); // green if (s_compare(park,"green ") == 0) { s_substring(command,sizeof(command),recCommand,sizeof(recCommand),6,strlen(recCommand)-1); if (strcmp(command, "on") == 0 || strcmp(command, "off") == 0 || strcmp(command, "?") == 0) { isKnownCommand=true; ledgreen(command); } } s_substring(park,sizeof(park),recCommand,sizeof(recCommand),0,4); // reset if (s_compare(park,"reset") == 0) { isKnownCommand=true; reset(); } s_substring(park,sizeof(park),recCommand,sizeof(recCommand),0,2); // dht if (s_compare(park,"dht") == 0) { isKnownCommand=true; dht(); } s_substring(park,sizeof(park),recCommand,sizeof(recCommand),0,6); // gettemp if (s_compare(park,"gettemp") == 0) { isKnownCommand=true; gettemp(); } s_substring(park,sizeof(park),recCommand,sizeof(recCommand),0,6); // gettime if (s_compare(park,"gettime") == 0) { isKnownCommand=true; gettime(); } s_substring(park,sizeof(park),recCommand,sizeof(recCommand),0,7); // settime if (s_compare(park,"settime ") == 0) { s_substring(command,sizeof(command),recCommand,sizeof(recCommand),8,strlen(recCommand)-1); if (strlen(command) == 19) { isKnownCommand=true; settime(command); } } s_substring(park,sizeof(park),recCommand,sizeof(recCommand),0,0); // ? if (s_compare(park,"?") == 0) { isKnownCommand=true; help(); } if (isKnownCommand == false) { s_assign(lineString,"unknown cmd",sizeof(lineString)); dispLine(); prompt(); } } // endif recType s_clear(recCommand,sizeof(recCommand)); recType=0; recAddress=0; isNetDataWaiting=false; isBusy=false; } // end execNetCommand() void reset() { // ------------------------------------------------------------ RESET analogWrite(ResetPin,LOW); } void help() { // ---------------------------------------------- HELP s_assign(lineString, "red ", sizeof(lineString)); dispLine(); s_assign(lineString, "green ", sizeof(lineString)); dispLine(); s_assign(lineString, "dht", sizeof(lineString)); dispLine(); s_assign(lineString, "gettemp", sizeof(lineString)); dispLine(); s_assign(lineString, "gettime", sizeof(lineString)); dispLine(); s_assign(lineString, "settime
", sizeof(lineString)); dispLine(); s_assign(lineString, "reset", sizeof(lineString)); dispLine(); sprintf(lineString,"(free=%d)",s_freemem()); dispLine(); prompt(); } // end help() void ledred(const char *_s) { // ---------------------------------------------- RED if (strcmp(_s, "on")==0) { digitalWrite(RedLedPin,HIGH); isRedOn=true; } if (strcmp(_s, "off")==0) { digitalWrite(RedLedPin,LOW); isRedOn=false; } if (isRedOn) { sprintf(lineString, "%s","ON"); } else { sprintf(lineString, "%s","OFF"); } dispLine(); prompt(); } // end ledred() void ledgreen(const char *_s) { // ---------------------------------------------- GREEN if (strcmp(_s, "on")==0) { digitalWrite(GreenLedPin,HIGH); isGreenOn=true; } if (strcmp(_s, "off")==0) { digitalWrite(GreenLedPin,LOW); isGreenOn=false; } if (isGreenOn) { sprintf(lineString, "%s","ON"); } else { sprintf(lineString, "%s","OFF"); } dispLine(); prompt(); } // end ledgreen() void dht() { // ---------------------------------------------- DHT float temp=0; int iintt=0; int idect=0; int iinth=0; int idech=0; DHT.read11(DHTPin); // DHT temp = DHT.temperature; // read DHT temp C iintt=temp; idect=float((temp-iintt)*100); temp = DHT.humidity; // read DHT humidity iinth=temp; idech=float((temp-iinth)*100); sprintf (lineString, "%d.%dC %d.%d", iintt, idect, iinth, idech); s_concat(lineString,"%",sizeof(lineString)); dispLine(); prompt(); } // end gettemp() void gettemp() { // ---------------------------------------------- GETTEMP float temp=0; int iint=0; int idec=0; temp = DS3231_get_treg(); // read RTC temp C iint=temp; idec=float((temp-iint)*100); sprintf (lineString, "%d.%dC", iint, idec); dispLine(); prompt(); } // end gettemp() void gettime() { // ---------------------------------------------- GETTIME DS3231_get(&t); // read RTC date & time sprintf(lineString, "%02d/%02d/%04d %02d:%02d:%02d", t.mday, t.mon, t.year, t.hour, t.min, t.sec); dispLine(); prompt(); } // end gettime() void settime(const char* _s) { // ---------------------------------------------- SETTIME char park[5]=""; s_substring(park, sizeof(park), _s, strlen(_s), 0,1); t.mday=atoi(park); s_substring(park, sizeof(park), _s, strlen(_s), 3,4); t.mon=atoi(park); s_substring(park, sizeof(park), _s, strlen(_s), 6,9); t.year=atoi(park); s_substring(park, sizeof(park), _s, strlen(_s), 11,12); t.hour=atoi(park); s_substring(park, sizeof(park), _s, strlen(_s), 14,15); t.min=atoi(park); s_substring(park, sizeof(park), _s, strlen(_s), 17,18); t.sec=atoi(park); DS3231_set(t); // write RTC gettime(); // answer with new time } // end settime() void prompt() { // prompt, ready for commands sprintf(lineString,"%d>\r",netMyPx); dispLine(); } // end prompt() void dispLine() { // print information s_concat(lineString, _CR, sizeof(lineString)); txBackToSender(); // tx s_clear(lineString, sizeof(lineString)); delay(100); } // end dispLine() void receiveEvent(int howMany) { // i2c event incoming requests if (isBusy==false) { int counter=0; s_clear(recCommand, sizeof(recCommand)); // sender command recAddress=0; // sender address recType=0; // sender cmd type if (howMany == 0) { // ignores empty requests isNetDataWaiting=false; } else { while (Wire.available()) { data[0]=Wire.read(); if (counter==0) { recType = data[0]; } // 1st char = cmd type if (counter==1) { recAddress = data[0]; } // 2nd char = sender address if (counter >1) { // other chars = command s_concat(recCommand, data, sizeof(recCommand)); } counter++; } isNetDataWaiting=true; } }//endisBusy } // end receiveEvent() void netWhoIsEvent() { // i2c event: 11 bytes = 1=char(5) ENQ, 2-9=netMyNAME 10=netMyPx 11=netMyAddress if (isBusy==false) { char ccommand[65]=""; char park[3]=""; s_assign(ccommand, _ENQ, sizeof(ccommand)); // ENQ s_concat(ccommand, netMyNAME, sizeof(ccommand)); // netMyNAME s_concat(ccommand, itoa(netMyPx,park,10), sizeof(ccommand)); // netMyPx s_concat(ccommand, _MYADDR, sizeof(ccommand)); // netMyAddress Wire.write(ccommand); } } // end netWhoIsEvent() void txBackToSender() { // tx back to sender char ccommand[65]=""; s_assign(ccommand, _ACK, sizeof(ccommand)); // ACK=answer data s_concat(ccommand, _MYADDR, sizeof(ccommand)); // netMyAddress s_concat(ccommand, lineString, sizeof(ccommand)); // data Wire.beginTransmission (recAddress); Wire.write (ccommand); Wire.endTransmission (true); } // end txBackToSender() //------------------------------------------------------------------------- CLEAR void s_clear(char *dest_source_string, const int dest_sizeof) { // fills-up with NUL=chr(0) memset(dest_source_string, 0, dest_sizeof); } // end s_clear() //------------------------------------------------------------------------- ASSIGN bool s_assign(char *dest_string, const char *source_string, const int dest_sizeof) { // copies source to dest int _LenS=strlen(source_string); // how many bytes if (_LenS > (dest_sizeof - 1)) { return true; // err 1 } else { strcpy(dest_string, source_string); return false; // ok 0 } } // end s_assign() //------------------------------------------------------------------------- SUBSTRING bool s_substring(char *dest_string, const int dest_sizeof, const char *source_string, const int source_sizeof, const int source_from, const int source_to) { // copies source(from, to) to dest if ((source_from < 0) || (source_to < source_from) || ((source_to - source_from + 1) > (dest_sizeof - 1)) || (source_to >= (source_sizeof-1)) || ((source_to - source_from + 1) > (strlen(source_string)))) { dest_string[0]=0; // NUL return true; // err 1 } else { int _Count=0; for (int i=source_from;i<(source_to+1);i++) { dest_string[_Count]=source_string[i]; _Count++; } dest_string[_Count]=0; // ends with NUL return false; // ok 0 } } // end s_substring() //------------------------------------------------------------------------- CONCAT bool s_concat(char *dest_string, const char *source_string, const int dest_sizeof) { // append source to dest int _LenS=strlen(source_string); // how many bytes source int _LenD=strlen(dest_string); // how many bytes dest if ((_LenS + _LenD) > (dest_sizeof - 1)) { return true; // err 1 } else { strcat(dest_string, source_string); return false; // ok 0 } } // end s_concat() //------------------------------------------------------------------------- COMPARE bool s_compare(const char *dest_string, const char *source_string) { // compares source with dest int _LenS=strlen(source_string); // how many bytes source int _LenD=strlen(dest_string); // how many bytes dest if (_LenS != _LenD) { // different length return true; // are different 1 } else { if (strcmp(dest_string, source_string) == 0) { return false; // are the same 0 } else { return true; // are different 1 } } } // end s_compare() //------------------------------------------------------------------------- FREEMEM int s_freemem() { extern int __heap_start,*__brkval; int v; return (int)&v -     ### BO Motor With Encoder Gives Precise Movement For precise BO motor control or for crafting budget-friendly projects utilizing PID, the integration of such encoders with motors holds great promise. Story Geared DC motors find extensive application in hobby projects, such as constructing robotic cars and moving robotics. Yet, for meticulous movement, the utilization of specialized motors becomes paramount. Take the case of a balancing robot, where stepper motors are essential to achieve the requisite wheel stepping accuracy. The intricate movement demands of balance cannot be adequately met by standard motors. However, there exists a solution to this quandary: when the need for precision movement arises without resorting to stepper motors, encoders can be seamlessly integrated with BO motors. This encoder solely captures the rotational speed and direction, subsequently translating them into pulses that can be harmonized with a microcontroller and driver. This synchronization facilitates the precise modulation of voltage levels in accordance with the requisite pulses. These controlled pulses ultimately govern the motor's movement speed, making the utilization of BO motors an economically efficient resolution. How magnetic encoder works: An electronic magnetic rotary encoder employs magnetic fields for gauging the rotation of an object. This mechanism comprises a magnetized rotor alongside a stationary sensor. When the rotor undergoes rotation, the sensor identifies alterations in the magnetic field and subsequently translates them into electrical signals. These signals undergo processing to ascertain crucial aspects like the object's rotational position, speed, and direction. The sensor's foundation can draw upon diverse technologies like Hall effect sensors or magneto-resistive sensors, designed to identify fluctuations in the magnetic field. Through meticulous analysis of these signals, the encoder delivers precise rotational data, rendering it indispensable for motor control, robotics, and industrial automation applications. A basic encoder comprises four wires (two for power supply, one for interrupt, and another for rotation direction). In this setup, the microcontroller doesn't actively monitor encoder motion; instead, the encoder autonomously generates an interrupt signal that notifies the microcontroller, thereby recording each step. Motor Encoder A, denoted as C1 with PinA, establishes a link with Arduino's pin 2. Arduino's pin 2 serves to log instances of rising digital signals stemming from Encoder A. As for Motor Encoder B, identified as C2 with PinB, it interfaces with Arduino's pin 3. The signal gleaned from Arduino's pin 3 determines the motor's direction, indicating either forward or reverse movement. Gear motor and Encoder Specs: Presently, I possess a BO motor sourced from DF Robot. This motor is equipped with gearing, sporting a gear ratio of 120:1 (translating to one output shaft movement for every 120 motor rotations). An embedded quadrature encoder accompanies the motor, furnishing a resolution of 8 pulses per round, thus yielding a peak output of 960 pulses within a single rotation. Gear ratio: 120:1 No-load speed @ 6V: 160 rpm No-load speed @ 3V: 60 rpm No-load current @ 6V: 0.17A No-load current @ 3V: 0.14A Max Stall current: 2.8A Max Stall torque: 0.8kgf.cm Rated torque: 0.2kgf.cm Encoder operating voltage: 4.5 to 7.5V Encoder Value Computation: Pulses per revolution for the encoder = 8 A single rotation of the output shaft = Pulses per revolution for the encoder × Gear Ratio Hence, pulses per one rotation = 8 × 120 = 960 pulses per revolution. Code for Pulse Calculation: // Encoder output to Arduino Interrupt pin. Tracks the pulse count. #define encoder0PinA 2 // Keep track of the number of right wheel pulses volatile long right_wheel_pulse_count = 0; void setup() { // Open the serial port at 9600 bps Serial.begin(9600); // Set pin states of the encoder pinMode(encoder0PinA , INPUT_PULLUP); // Every time the pin goes high, this is a pulse attachInterrupt(digitalPinToInterrupt(encoder0PinA), right_wheel_pulse, RISING); // 2Nd method to use Interuppt pin (Either use PIN 0 or use funtion digitalPinToInterrupt } void loop() { Serial.print(" Pulses: "); Serial.println(right_wheel_pulse_count); } // Increment the number of pulses by 1 void right_wheel_pulse() { right_wheel_pulse_count++; } Code for Velocity of motor: This code resets the encoder counter following each rotation, providing an accurate count of motor revolutions per unit of time. //The sample code for driving one way motor encoder #include #include #include #define OLED_RESET 1 Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET); const byte encoder0pinA = 2; //A pin -> the interrupt pin 0 const byte encoder0pinB = 3; //B pin -> the digital pin 3 byte encoder0PinALast; //Store the previous state of pin int duration; //the number of the pulses boolean Direction;//the rotation direction void setup() { Serial.begin(9600);//Initialize the serial port EncoderInit(); //Initialize function for encoder Wire.begin(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); } void loop() { Serial.print("Pulse:"); Serial.println(duration); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,0); display.print("Pulse:"); display.display(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(50,30); display.print(duration/2); display.display(); duration=0; delay(300); } void EncoderInit() { Direction = true; //default -> Forward pinMode(encoder0pinB,INPUT); attachInterrupt(0, wheelSpeed, CHANGE); // digitalPinToInterrupt(interruptPin) instead of 0 // syntax of interrupt will be = interrupt pin, function to be executed, Condition of Function HIGH, LOW, CHANGE, RISING AND FALLING } void wheelSpeed() { int Nstate = digitalRead(encoder0pinA); if((encoder0PinALast == LOW) && Nstate==HIGH) { int val = digitalRead(encoder0pinB); if(val == LOW && Direction) { Direction = false; //Reverse } else if(val == HIGH && !Direction) { Direction = true; //Forward } } encoder0PinALast = Nstate; if(!Direction) duration++; else duration--; } Circuit: I discovered a compatible circuit configuration for the encoder design, which inherently outlines the pragmatic methodology. Within it, two Hall effect sensors are visible, serving to quantify alterations in the magnetic field corresponding to motion. The sensor's output interfaces with the microcontroller's interrupt pin. Incorporating resistors serves two purposes: aligning transistor levels and providing safeguarding against overcurrent. Both the motor and encoder can draw power from a shared source, but it's crucial to bear in mind the upper limits of voltage readings. Additionally, the motor can function autonomously without the encoder. In this scenario, simply connect the motor wires to the power supply, and it will operate as a standard unit. My Arduino: Presenting my self-designed Arduino board, with a more recent version having been recently released. This fully compatible DIY board offers enhanced functionality. JLCPCB, headquartered in China, specializes in the production of PCB, PCBA, stencils, 3D printing, SMT assembly, and metal CNC services. You have the option to manually solder the PCB by arranging the components or you can opt for a pre-assembled PCB with all components from JLCPCB. If you decide to undertake the assembly yourself, a majority of the required components are accessible online. You can refer to the Bill of Materials (BOM) file provided in the download folder for further guidance. Testing: I've uploaded the velocity code, which yields the pulse count relative to the motor's speed. The code incorporates an automatic encoder value reset every 0.3 seconds. It's important to note that the motor's speed and subsequently the pulse count are contingent on the operating voltage. My DC motor was operated at 5 volts, and the results are depicted in the accompanying image. Schematics Code //The sample code for driving one way motor encoder #include #include #include #define OLED_RESET 1 Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET); const byte encoder0pinA = 2; //A pin -> the interrupt pin 0 const byte encoder0pinB = 3; //B pin -> the digital pin 3 byte encoder0PinALast; //Store the previous state of pin int duration; //the number of the pulses boolean Direction;//the rotation direction void setup() { Serial.begin(9600);//Initialize the serial port EncoderInit(); //Initialize function for encoder Wire.begin(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); } void loop() { Serial.print("Pulse:"); Serial.println(duration); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,0); display.print("Pulse:"); display.display(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(50,30); display.print(duration/2); display.display(); duration=0; delay(300); } void EncoderInit() { Direction = true; //default -> Forward pinMode(encoder0pinB,INPUT); attachInterrupt(0, wheelSpeed, CHANGE); // digitalPinToInterrupt(interruptPin) instead of 0 // syntax of interrupt will be = interrupt pin, function to be executed, Condition of Function HIGH, LOW, CHNAGE, RISING AND FALLING } void wheelSpeed() { int Nstate = digitalRead(encoder0pinA); if((encoder0PinALast == LOW) && Nstate==HIGH) { int val = digitalRead(encoder0pinB); if(val == LOW && Direction) { Direction = false; //Reverse } else if(val == HIGH && !Direction) { Direction = true; //Forward } } encoder0PinALast = Nstate; if(!Direction) duration++; else duration--; }     ### Ez Arduino 12 DOF Quadruped Robot - Robot Dog Lassie Since Boston Dynamics presented their quadruped robot named Spot, everybody wants their own robot dog. There have been several efforts to create a robot with the same features. Many are costly and quite challenging to understand and create. This guide aims to provide a do-it-yourself option utilizing affordable hardware and electronic components through 3D printing. Everyone should be able to easily afford to create one, check out the assembly videos in steps 6 - 8. You can control and operate this robot with your smartphone. Visit the software section to get the app. Step 1: Printing 3D Models You can download the 3D-printed STL models here. The built robot shown here is printed in PLA. Suggested parameters for slicing the models to print are as follows. You may adjust them to fit the 3D printer you're using. bottom/top thickness: 1mm shell thickness: 1.2mm layer height: 0.2mm infill density: 10% support: yes adhesion type: skirt or brim Step 2: Hardware/Electronic Components To build this robot you need the following hardware and electronic components: a HuaDuino board, it is Arduino Nano compatible with enhanced features. It integrates everything on a single PCB. It's a lot easier for people to make a bot with it. Embedded battery charging circuit, battery charging is more convenient. It can be found on Amazon. See the full product description here, highly recommend you read it. It will save you trouble in using it. a single 3.7V 18650 lithium ion battery with XH2.54 connector. 12 x Tower Pro MG90s or compatible clone servos. a 5V buzzer a Bluetooth module, see below for details a female-female du point wire or anything you can figure out for connecting two pins some m2x6, m2x10 tapping screws some M3x6,M3x14,M3x20 flat head screws and M3 nuts Bluetooth Module an HC-06, HC-05, and SPP-CA classic Bluetooth 4.0 SPP module, if you use this type of Bluetooth module; must use the virtual-gamepad-SPP Android app for control; the baud rate must be set to 115200; see this tutorial to configure the baud rate using AT commands; Or a BT-05 CC2540 Bluetooth LE module. There are many BLE modules named differently, but they are built with a CC254x chip. Examples such as HM-10 and CC41-A are the typical ones you can find in the market. Since the firmware is different, the AT command set may vary too. You may use this code to identify them. To work with the robot code and the apps, the baud rate is required to be set to 115200; service UUID must be set to 0xDFB0 and characteristic UUID must be set to 0xDFB1 using the AT commands. Below is the code intended to do that automatically but it may not work if you have different to use here. The following stand-alone Arduino program issues AT commands setting BT-05 BLE module service UUID, characteristic UUID, and baud rate, assuming the BLE default baud rate is 9600. void setup() { Serial.begin(9600); //change to fit your ble initial baud_rate, usually is 9600 Serial.println("AT+UUID0xDFB0\r"); // set service UUID delay(50); Serial.println("AT+CHAR0xDFB1\r"); // set characteristic UUID delay(50); Serial.println("AT+BAUD8\r"); // set baud rate to 115200 } void loop() {} Step 3: Software - Upload Robot Firmware https://youtu.be/wwuX1sYgTzU Robot Firmware - Download this zip package and upload the firmware to HuaDuino as the video shows. The source code is in Github, check out the Lassie branch and look at the source_arduino folder. Control Apps - goBLE iOS app on Apple Store; for Bluetooth LE module virtual-Gamepad-BLE Android app for Bluetooth LE module; compatible to Android 5.0 and latest. virtual-gamepad-SPP Android app for HC-06, HC-05 and SPP-CA classic Bluetooth 4.0 SPP module; compatible to Android 4.0 and above Step 4: Wiring By uploading the firmware to HuaDuino, connecting A6 to the 5V pin with a dupoint wire and attaching servos to the designated pins will position all servos at the default angle, resulting in the robot assuming a posture similar to the figures shown below. The default angle is the angle of reference needed for proper execution of any type of movement. 2. After assembling the robot, take out the DuPoint wire to make sure it stands upright as the third finger; otherwise, you will need to readjust the servo. Servo Pins - front right shoulder servo -> D2 front right upper joint servo -> D3 front right lower joint server -> D4 back right shoulder servo -> D12 back right upper joint servo -> D13 back right lower joint server -> D5 front left shoulder servo -> D9 front left upper joint servo -> D8 front left lower joint server -> D6 back left shoulder servo -> D10 back left upper joint servo -> D11 back left lower joint server -> D7 Buzzer Pin - positive -> A2 negative -> GND Bluetooth Module - 6-pins socket Step 5: Assembly – Body https://youtu.be/VEyyTmS-mj8 To do this step the firmware must be loaded to HuaDuino. The model with the [R] mark is a set for the right side. connect the dupoint between the A6 and 5V pins for setting servos to the default angle connect Buzzer A2 and Gnd front right shoulder servo - D2 back right shoulder server - D12 front left shoulder servo - D9 back left shoulder servo - D10 Source: Ez Arduino 12 DOF Quadruped Robot - Robot Dog Lassie ### Dual Axis Solar Tracker Arduino Project Using LDR & Servo Motors Salutations and thank you for visiting The IoT Projects. This guide is intended to show the ways of building the Dual Axis Solar Tracker Arduino Project using LDRs and Servo Motors. The publication can be divided into seven parts, which can determine an extensive guide on how to build the project. Thus using light sensing devices like LDRs it is possible to observe the sunlight and in turn realign the position of this solar panel to help increase its efficiency. Now let’s examine each of the mentioned parts as well as the careful and thoughtful approach to the project. Working Principle of LDR Sensor In this assignment, the LDRs act as light-sensing tools, also called photoresistors, that react to light. The graph indicates that as the intensity of light increases, the resistance of an LDR decreases. In our setup, we employ four LDRs for detecting the sun. By transmitting a signal to the Arduino, two servo motors will be activated to adjust the solar panel's orientation, optimizing its performance by aligning it with the sun's rays. Project Simulation: Dual Axis Solar Tracker Arduino Project Using LDR & Servo Motors Before delving into the wiring system, we will provide a comprehensive overview of the project. However, for now, let's proceed with a simulation of the project. Upon powering up the Arduino, the sensors and servo motors are activated, as illustrated in the provided image. When the LDR sensor detects an increase in brightness, it sends a signal to the Arduino. Thus, the Arduino controls both servo motors to adjust the position of the solar panel for better performance. The servo motors respond correctly to variations in light brightness. Additionally, the two potentiometers can be used to vary the speed of the servo motors. We will delve deeper into this aspect within the programming section. Tinkercad Dual Axis Solar Tracker Arduino Simulation file Interfacing Dual Axis Solar Tracker Arduino Project Using LDR & Servo Motors To establish the necessary connections, follow these steps: 1. Connect the 5V pin from the Arduino to the lower horizontal row of the breadboard. 2. Similarly, connect the GND pin from the Arduino to a second lower horizontal row of the breadboard. 3. Extend the 5V and GND rows to the upper horizontal rows of the breadboard. 4. Connect the power pins of both the vertical and horizontal servo motors to the 5V row. 5. Connect the GND pin of both the horizontal and vertical servo motors to the GND row. 6. Connect the signal pin of the vertical servo motor to digital pin 10 of the Arduino. 7. Connect the signal pin of the horizontal servo motor to digital pin 9 of the Arduino. 8. Connect one terminal of both potentiometers to the GND row, and the other end terminals of both potentiometers to the 5V row. 9. Connect each LDR from one terminal to the 5V row and the other terminal to the GND row through 10k-ohm resistors. 10. Connect the wiper pin of potentiometer 1 to analog pin A4, and the wiper pin of potentiometer 2 to analog pin A5. 11. Connect the bottom-left LDR voltage divider point to analog pin A1 of the Arduino. 12. Connect the top-left LDR voltage divider point to analog pin A0 of the Arduino. 13. Similarly, connect the top-right LDR voltage divider point to analog pin A2. 14. Finally, connect the bottom-right voltage divider point of the LDR to analog pin A3 of the Arduino. By following these steps, you will successfully establish the necessary connections between the components and the Arduino. Programming Arduino for Dual Axis Solar Tracker Project #Include is used to include a servo header library file. #include For the configuration of the horizontal servo, follow these settings: 1. Set the horizontal servo to a position of 180 degrees. 2. Set the servo's limit to 175 degrees when the signal is high. 3. Set the servo's limit to 5 degrees when the signal value is low. By adjusting these configurations, you can control the range of motion for the horizontal servo. Servo horizontal; // horizontal servo int servoh = 180; int servohLimitHigh = 175; int servohLimitLow = 5; // 65 degrees MAX To configure the vertical servo, follow these steps: 1. Set the vertical servo to a position of 45 degrees. 2. Set the servo's limit to 60 degrees when the signal is high. 3. Set the servo's limit to 1 degree when the signal value is low. By adjusting these settings, you can control the range of motion for the vertical servo, allowing it to move within the specified limits. Servo vertical; // vertical servo int servov = 45; int servovLimitHigh = 60; int servovLimitLow = 1; Here are the pin connections for the LDRs: - ldrlt: Pin for the top-left LDR. - ldrrt: Pin for the top-right LDR. - ldrld: Pin for the bottom-left LDR. - ldrrd: Pin for the bottom-right LDR. By correctly connecting these pins, you can ensure that the LDRs function properly and provide the necessary input for the solar tracking mechanism. // LDR pin connections // name = analogpin; int ldrlt = A0; //LDR top left - BOTTOM LEFT <--- BDG int ldrrt = A3; //LDR top rigt - BOTTOM RIGHT int ldrld = A1; //LDR down left - TOP LEFT int ldrrd = A3; //ldr down rigt - TOP RIGHT In the `void setup()` function, we perform the following actions: 1. We attach the signal pins for the vertical and horizontal servos. 2. The rotation of the horizontal servo is set to 180 degrees. 3. Similarly, the vertical servo is set to 45 degrees. 4. A delay of 2.5 seconds is implemented. By carrying out these setup steps, we ensure that the servos are initialized correctly and positioned as desired before the main program execution begins. void setup(){ horizontal.attach(9); vertical.attach(10); horizontal.write(180); vertical.write(45); delay(2500); } In the `void loop()` function, the following actions take place: 1. We read the analog pin values of the Arduino connected to the LDRs. 2. The average values of the vertical and horizontal LDR readings are calculated. By obtaining the LDR readings and calculating their averages, we can determine the position of the sunlight and make the necessary adjustments to the servo motors for optimal solar panel orientation. void loop() { int lt = analogRead(ldrlt); // top left int rt = analogRead(ldrrt); // top right int ld = analogRead(ldrld); // down left int rd = analogRead(ldrrd); // down right int dtime = 10; int tol = 90; // dtime=diffirence time, tol=toleransi int avt = (lt + rt) / 2; // average value top int avd = (ld + rd) / 2; // average value down int avl = (lt + ld) / 2; // average value left int avr = (rt + rd) / 2; // average value right int dvert = avt - avd; // check the diffirence of up and down int dhoriz = avl - avr;// check the diffirence og left and rigt The program utilizes IF and IF-ELSE statements within a loop to continuously calculate the average values of the LDRs. Based on these values, the code adjusts the degrees of the servo motors to optimize their effectiveness in tracking the sunlight. By incorporating these conditional statements, the program ensures that the servo motors respond accordingly to changes in light intensity and accurately position the solar panel for maximum efficiency. if (-1*tol > dvert || dvert > tol) { if (avt > avd) { servov = ++servov; if (servov > servovLimitHigh) {servov = servovLimitHigh;} } else if (avt < avd) {servov= --servov; if (servov < servovLimitLow) { servov = servovLimitLow;} } vertical.write(servov); } if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle { if (avl > avr) { servoh = --servoh; if (servoh < servohLimitLow) { servoh = servohLimitLow; } } else if (avl < avr) { servoh = ++servoh; if (servoh > servohLimitHigh) { servoh = servohLimitHigh; } } else if (avl = avr) { delay(5000); } horizontal.write(servoh); } At last, we have added the delay of (dtime). delay(dtime); } Now, compile the program and upload it to your Arduino board. Our IoT Based Projects Resources: This Coronavirus Tracker uses the ESP8266 development board for your nation. Real-time Monitoring the Temperature and Humidity of DHT11 or DHT22 withe NodeMCU ESP8266 & Local Webserver Home Automation with ESP8266 Web Server & Relay Module Control Appliances from Local Network Firstly, having an Arduino and an LCD, we have to connect the DHT11 Humidity and Temperature Sensor with Arduino & LCD. Real time monitoring and detection of floods using IoT, Node MCU & Thing speak Final Program code/sketch #include Servo horizontal; // horizontal servo int servoh = 180; int servohLimitHigh = 175; int servohLimitLow = 5; // 65 degrees MAX Servo vertical; // vertical servo int servov = 45; int servovLimitHigh = 60; int servovLimitLow = 1; // LDR pin connections // name = analogpin; int ldrlt = A0; //LDR top left - BOTTOM LEFT <--- BDG int ldrrt = A3; //LDR top rigt - BOTTOM RIGHT int ldrld = A1; //LDR down left - TOP LEFT int ldrrd = A3; //ldr down rigt - TOP RIGHT void setup(){ horizontal.attach(9); vertical.attach(10); horizontal.write(180); vertical.write(45); delay(2500); } void loop() { int lt = analogRead(ldrlt); // top left int rt = analogRead(ldrrt); // top right int ld = analogRead(ldrld); // down left int rd = analogRead(ldrrd); // down right int dtime = 10; int tol = 90; // dtime=diffirence time, tol=toleransi int avt = (lt + rt) / 2; // average value top int avd = (ld + rd) / 2; // average value down int avl = (lt + ld) / 2; // average value left int avr = (rt + rd) / 2; // average value right int dvert = avt - avd; // check the diffirence of up and down int dhoriz = avl - avr;// check the diffirence og left and rigt if (-1*tol > dvert || dvert > tol) { if (avt > avd) { servov = ++servov; if (servov > servovLimitHigh) {servov = servovLimitHigh;} } else if (avt < avd) {servov= --servov; if (servov < servovLimitLow) { servov = servovLimitLow;} } vertical.write(servov); } if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle { if (avl > avr) { servoh = --servoh; if (servoh < servohLimitLow) { servoh = servohLimitLow; } } else if (avl < avr) { servoh = ++servoh; if (servoh > servohLimitHigh) { servoh = servohLimitHigh; } } else if (avl = avr) { delay(5000); } horizontal.write(servoh); } delay(dtime); } Video Tutorials Conclusion Well done on finishing the build of the Dual Axis Solar Tracker with Arduino, LDRs, and servos! By tracking the sun's movement, this project allows solar panels to maximize energy collection throughout the day, improving efficiency by up to 40%. We hope you found the process of interfacing the LDR light sensors and servo motors to be an informative learning experience. This project demonstrates how combining hardware and code can create solutions to real-world problems. Please feel free to provide any feedback or ask additional questions - we're happy to help clarify or expand on any parts of the project. Thank you for taking the time to complete this solar tracking build; we're glad you could participate in exploring ways to boost renewable energy generation. ### Sinewave Inverter Circuit Using Arduino The article demonstrates the construction of a basic sinewave inverter circuit utilizing PWM signal from an Arduino Uno, also exploring a sinewave 3 phase inverter with Arduino input. Mr. Raju Visswanath was the one who requested the concept. Technical Specifications  UPDATE: Please also refer to this article which explains how to build a simple pure sine wave inverter circuit using Arduino using SPWM......Full Program code also included.... The Design The article details the construction of a basic sinewave inverter circuit using PWM signal from an Arduino Uno, and also explores a sinewave 3 phase inverter with input from the same Arduino. Mr. Raju Visshwanath requested the concept. This frequency drives the two power BJ transistor stages alternately at the specified frequency rate. The transistors could be replaced with IGBTs for getting better efficiency, but mosfets should be avoided as these may require special attention while designing the PCB, and additional buffer BJT stages to prevent heating up of the mosfets from possible hidden stray inductance or harmonics. Circuit Operation P1 and C1 in the diagram determine the astable's frequency, and adjusting P1 with a frequency meter can change it to match the desired inverter frequency. If the inverter's voltage falls under 15V, T1 and its associated components for keeping a steady 9V for the IC 4047 can be taken out. However, it is recommended to test higher voltages of up to 60V in order to create a more effective and smaller inverter design. The PWM signal from the Arduino is distributed across voltage divider networks on both IC outputs, with reverse biased diodes used to allow only negative PWM pulses to affect power stages and effectively control their conduction. Because of the PWM chopping effect, the current is adjusted within the transformer to align with the desired PWM sinewave, ultimately boosting the mains voltage at the transformer's secondary. The Arduino's PWM frequency should be around 200 Hz. If a 50 Hz totem pole is set up on the Arduino, the IC4047 can be eliminated and the signals can be directly linked to the left side terminals of R2 and R3. Circuit for a 3 Phase Inverter using Arduino The pair of diagrams provided depict the setup of a 3 phase PWM controlled inverter that utilizes an Arduino for operation. Six NOT gates are used from the IC 4049 in connecting the original diagram. This process divides the Arduino PWM signals into paired high/low logic signals to ensure compatibility with the supplied PWMs for the bridge 3 phase inverter driver IC IRS2330. The second diagram in the suggested Arduino PWM, 3 phase inverter design consists of the bridge driver stage using the IC IRS2330 chip. The HIN and LIN inputs of the IC receive Arduino PWM signals, go through NOT gates, and command the output bridge network consisting of 6 IGBTs, which in turn control the connected load via their three outputs. The 1K preset is employed to modify the over current limit of the inverter by linking it to the shutdown pin of the I, the 1 ohm sensing resistor can be reduced if a higher current is required for the inverter. Source : Sinewave Inverter Circuit Using Arduino ### Measuring PPM from MQ Gas Sensors using Arduino (MQ-137 Ammonia) Since the industrial age, we humans have been progressing quickly. As we make advancements, we simultaneously harm our environment, leading to its eventual degradation. Currently, the issue of global warming is a concerning danger and even the quality of the air we breathe is becoming a serious concern. Monitoring air quality is becoming increasingly important. In this article, we will discover how to connect any MQ series gas sensor to an Arduino and display the output in PPM (parts per million). PPM can be stated as milligrams per liter (mg/L) as well. MQ-series Gas sensors Carbon Dioxide (CO2) : MG-811 Carbon Monoxide (CO): MQ-9 Total Volatile Organic Compounds (TVOCs): CCS811 Equivalent Carbon Dioxide (eCO2): CCS811 Metal Oxide (MOX): CCS811 Ammonia: MQ-137 Air Quality: MQ-135 LPG, Alcohol, Smoke: MQ2 We have already used MQ2 for smoke sensing and MQ-135 for Air quality monitoring project. Here I will be using the MQ-137 sensor from sainsmart to measure ammonia in ppm. With the sensor in hand I went through all the available tutorials and found that there has no proper documentation on how to measure the gas in ppm. Most tutorials either deal with only the Analog values or introduce some constants which are not reliable for measuring all type of gas.  So after fiddling around online for a long time I finally found how to use these MQ series gas sensors to measure ppm using Arduino. I am explaining things from the bottom without any libraries so that you can use this article for any Gas sensor available with you. Preparing your Hardware: The MQ gas sensors are available either as a module or as a standalone sensor for purchase. If you only need to measure ppm, it is recommended to purchase the sensor separately as the module is only suitable for utilizing the Digital pin. If you have already bought the module, you will need to do a simple hack that will be explained later. At this moment, let's suppose you have acquired the sensor. Simply connect one end of ‘H’ to the power source and the other end to the ground. Next, mix together both of the A's and both of the B's. Connect one set of wires to the power source and connect the other set to the analog pin. The presence of resistor RL is crucial for the proper functioning of the sensor. Be sure to remember the value you are using, we suggest a value of 47k. If you have already purchased a module, then you should track your PCB traces to find the value of your RL in the board. Grauonline has already done this work for us and the circuit diagram of the MQ gas sensor board is given below. The resistor RL (R2) is connected from the Aout pin to ground in the module, allowing its value to be measured using a multimeter in resistance mode between the Vout pin and Vcc pin. In my sainsmart MQ-137 gas sensor, the RL value was 1K and was placed in the location indicated in the image below. Nevertheless, the website asserts that it offers a variable potentiometer of RL, but this is inaccurate since the circuit diagram clearly shows that the potentiometer is actually used to adjust the voltage for the op-amp and is unrelated to RL. Therefore, we need to solder the SMD resistor (1K) by hand and install our own resistor between the Ground and Vout pin to serve as RL. According to the datasheet suggestion, we will be using a 47K resistor value for RL since it is the best option. Approach to Measure PPM from MQ Gas Sensors: Now that the RL value is known, let's move on to how we can measure ppm using these sensors. The starting point for all sensors is their datasheet. Here is the MQ-137 Datasheet, ensure to locate the accurate datasheet for your sensor. Within the datasheet, we only require a single graph depicting (Rs/Ro) versus PPM for our calculations. Get it and store it in a convenient place. Below is the one for my sensor. It appears that the MQ137 sensor is capable of detecting NH3, C2H6O, and CO gases. However, my focus is solely on the NH3 values. Nevertheless, you can employ the same technique to determine ppm for any sensor of your choosing. This graph is our sole means of determining the ppm value, and by calculating the Rs/Ro ratio on the X-axis, we can determine the ppm value on the Y-axis. In order to determine Rs/Ro's value, we must determine the value of both Rs and Ro. Rs is the sensor resistance when exposed to gas, while Ro is the sensor resistance in clean air. Yes, this is the strategy, let's figure out how we can evade detection. Calculating the Value of Ro at Clean Air: Note that in the graph value of Rs/Ro is constant for air (thick blue line) so we can use this to our advantage and say that when the sensor is working in fresh air the value of Rs/Ro will be 3.6 refer the picture below Rs/Ro = 3.6 From the datasheet we also get to have a formula for calculating the value of Rs. The formula is shown below. If you are interested to know how this formula is derived you can read through jay con systems, I would also like to credit them in helping me to sort this out. In this equation, Vc represents the supply voltage (+5V) and RL represents the calculated value (47K for my sensor). By writing a simple Arduino code, we can determine the VRL value and consequently figure out the Rs value as well. Below is an Arduino Program provided to read the analog voltage (VRL) of the sensor, calculate the value of Rs using this formula, and then display it in the serial monitor. The explanation of the program is detailed in the comments, so I'm not going to repeat it here to keep this article brief. /* * Program to measure the value of R0 for a know RL at fresh air condition * Program by: B.Aswinth Raj * Website: www.circuitdigest.com * Dated: 28-12-2017 */ //This program works best at a fresh air room with temperaure Temp: 20℃, Humidity: 65%, O2 concentration 21% and when the value of Rl is 47K #define RL 47 //The value of resistor RL is 47K void setup() //Runs only once { Serial.begin(9600); //Initialise serial COM for displaying the value } void loop() { float analog_value; float VRL; float Rs; float Ro; for(int test_cycle = 1 ; test_cycle <= 500 ; test_cycle++) //Read the analog output of the sensor for 200 times { analog_value = analog_value + analogRead(A0); //add the values for 200 } analog_value = analog_value/500.0; //Take average VRL = analog_value*(5.0/1023.0); //Convert analog value to voltage //RS = ((Vc/VRL)-1)*RL is the formulae we obtained from datasheet Rs = ((5.0/VRL)-1) * RL; //RS/RO is 3.6 as we obtained from graph of datasheet Ro = Rs/3.6; Serial.print("Ro at fresh air = "); Serial.println(Ro); //Display calculated Ro delay(1000); //delay of 1sec } Note: The value of Ro will be varying, allow the sensor to pre-heat at least for 10 hours and then use the value of Ro.   I concluded the value of Ro to be 30KΩ for my sensor (when RL is 47kΩ). Yours might slightly vary. Measure the value of Rs: Having found the value of Ro, we can now readily determine the value of Rs using the formulae provided earlier. Please be aware that the Rs value determined earlier is based on clean air and may differ when ammonia is detected in the air. Determining the worth of Rs is a minor task that can be easily handled in the end program. Relating Rs/Ro ratio with PPM: Now that we know how to measure the value of Rs and Ro we would be able to find its ratio (Rs/Ro). Then we can use the chart (shown below) to relate to the corresponding value of PPM. Although the NH3 line (cyan colour) appears to be linear it is actually not linear. The appearance is because the scale is divided un-uniformly for appearance.  So the relating between Rs/Ro and PPM is actually logarithmic which can be represented by the below equation. log(y) = m*log(x) + b where, y = ratio (Rs/Ro) x = PPM m = slope of the line b = intersection point To find the values of m and b we have to consider two points (x1,y1) and (x2,y2) on our gas line. Here we are working with ammonia so the two points I have considered is (40,1) and (100,0.8) as shown in the picture above (marked as red) with red marking. m = [log(y2) - log(y1)] / [log(x2) - log(x1)] m = log(0.8/1) / log(100/40) m = -0.243 Similarly for (b) let’s get the midpoint value (x,y) from the graph which is (70,0.75) as shown in picture above (marked in blue) b = log(y) - m*log(x) b = log(0.75) - (-0.243)*log(70) b = 0.323 That’s it now that we have calculated the value of m and b we can equate the value of (Rs/Ro) to PPM using the below formula PPM = 10 ^ {[log(ratio) - b] / m} Program to calculate PPM using MQ sensor: Below is the entire code for calculating PPM with a MQ sensor. A few key points are detailed in the following lines. Prior to moving forward with the program, we must input the values of Load resistance (RL), Slope (m), Intercept (b), and the Resistance in fresh air (Ro). The method for acquiring these values has been previously described, so now we can simply input them. #define RL 47 //The value of resistor RL is 47K #define m -0.263 //Enter calculated Slope #define b 0.42 //Enter calculated intercept #define Ro 30 //Enter found Ro value Then read the Voltage drop across the sensor (VRL) and convert it to Voltage (0V to 5V) since the analog read will only return values from 0 to 1024. VRL = analogRead(MQ_sensor)*(5.0/1023.0); //Measure the voltage drop and convert to 0-5V Now, that the value of VRL is calculated you can use the formula discussed above to calculate the value of Rs and the also the ratio (Rs/Ro) ratio = Rs/Ro; // find ratio Rs/Ro Finally, we can calculate the PPM with our logarithmic formula and display it on our serial monitor as shown below double ppm = pow(10, ((log10(ratio)-b)/m)); //use formula to calculate ppm Serial.print(ppm); //Display ppm Showing PPM value on Hardware with Arduino and MQ-137: Enough of all the theory let us build a simple circuit with the sensor and LCD to display the value of gas in PPM. Here the sensor I am using is MQ137 which measures ammonia, the circuit diagram for my set up is shown below. Connect your sensor and your LCD as shown in the Circuit diagram and upload the code given at the end of the program. You have to modify the Ro value as explained above. Also make the changes in parameter values if you are using any other resistor as RL other than 4.7K. Leave your set-up powered for at least 2 hours before you take any readings, (48 hrs is recommended for more accurate values). This time is called the heating time, during which the sensor warms up. After this, you should be able to see the value of PPM and the voltage displayed on your LCD screen as shown below. To confirm the connection between the values and ammonia, put the setup in a closed container and introduce ammonia gas to see if the values rise. I don't have a PPM meter to calibrate this set-up, so it would be helpful if someone with a meter could test it and inform me. You can view the video below to see how the readings changed depending on the presence of ammonia. I hope you grasped the idea and had a good time learning it. If you have any uncertainties, feel free to leave them in the comments or seek more extensive assistance on the forum provided. Code /* * Program to measure gas in ppm using MQ sensor * Program by: B.Aswinth Raj * Website: www.circuitdigest.com * Dated: 28-12-2017 */ #define RL 47  //The value of resistor RL is 47K #define m -0.263 //Enter calculated Slope #define b 0.42 //Enter calculated intercept #define Ro 20 //Enter found Ro value #define MQ_sensor A0 //Sensor is connected to A4 #include //Header file for LCD from https://www.arduino.cc/en/Reference/LiquidCrystal const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //Pins to which LCD is connected LiquidCrystal lcd(rs, en, d4, d5, d6, d7); void setup() { lcd.begin(16, 2); //We are using a 16*2 LCD display lcd.print("NH3 in PPM"); //Display a intro message lcd.setCursor(0, 1);   // set the cursor to column 0, line 1 lcd.print("-CircuitDigest"); //Display a intro message delay(2000); //Wait for display to show info lcd.clear(); //Then clean it } void loop() { float VRL; //Voltage drop across the MQ sensor float Rs; //Sensor resistance at gas concentration float ratio; //Define variable for ratio VRL = analogRead(MQ_sensor)*(5.0/1023.0); //Measure the voltage drop and convert to 0-5V Rs = ((5.0*RL)/VRL)-RL; //Use formula to get Rs value ratio = Rs/Ro;  // find ratio Rs/Ro float ppm = pow(10, ((log10(ratio)-b)/m)); //use formula to calculate ppm lcd.print("NH3 (ppm) = "); //Display a ammonia in ppm lcd.print(ppm); lcd.setCursor(0, 1);   // set the cursor to column 0, line 1 lcd.print("Voltage = "); //Display a intro message lcd.print(VRL); delay(200); lcd.clear(); //Then clean it } Video: https://youtu.be/Bkgp00HOZjM Source: Measuring PPM from MQ Gas Sensors using Arduino (MQ-137 Ammonia) ### Interfacing LabVIEW With Arduino Interfacing LabVIEW With Arduino In previous article of Getting Started with LabVIEW, we have seen about LabVIEW and how it can be graphically programmed and executed in computer (software level). Now in this article we learn about How to Interface LabVIEW with Arduino Board. Requirements To interface LabVIEW with Arduino, you require the following software’s and hardware’s, LabVIEW (software) NI VISA (software) VI packet manager (software) Arduino IDE (software) LINX,  (this will be available inside VI package manager, open VI package manager and search for it, double click on it. You will reach to an installation window. Click install button visible to you in that window.) LabVIEW Interface for Arduino, this will be available inside VI package manager, open VI package manager and search for it, double click on it. You will reach to an installation window. Click install button visible to you in that window, as shown below       Why do we interface Arduino with LabVIEW? As mentioned earlier in this article, LabVIEW is a graphical programming language. Arduino has its program in lines of code, but when LabVIEW is integrated with Arduino the lines of code are converted into a pictorial program that is quite easily understandable, and the time taken for its execution is also half. LED Blink with Arduino & LabVIEW Launch the LabVIEW. To launch LabVIEW . Now start graphical coding. In Block diagram window, right click select Makerhub >> LINX >> Open, drag & drop the Open box. Then create a control by right clicking the first wire tip and selecting Create >> Control. Thus created a Serial port.   In Block diagram window, right click and select Makerhub >> LINX >> Close. Drag & drop Close. In Block diagram window, right click and select Makerhub >> LINX >> Digital >>Write. Drag & drop Write. Then create a controls on second and third tip of wires by right clicking each individually and selecting Create >> Control. Thus created a D0 channel and Output Value. In Block diagram window, right click and select Structures >> While loop. Drag the While loop across the Digital write. Then create a Shift register by right clicking on the While loop. In Block diagram window, right click and select Makerhub >> LINX >> Utilities >> Loop rate. Drag & drop it inside the While loop. In Block diagram window, right click select Boolean >> or. Drag & drop or inside the While loop. In Block diagram window, right click and select Timing >> Wait(ms). Drag & drop Wait(ms) into the While loop and create a constant for it by right clicking on the wire tip which is left most to the Wait(ms) and select Create >> Constant. In Front panel window, right click and select Boolean >> Stop button. Now stop button appears in the Block diagram window. Drag & drop it inside the While loop. Now by connecting all these created blocks using wiring connections, you can build the Graphical LED blink program to interface with your Arduino hardware. Connect the LabVIEW code with Arduino After building the graphical code, select Tools >> Makerhub >> LINX >> LINX Firmware wizard.   Now LINX Firmware wizard window open’s, in that select Device Family as Arduino; Device type as Arduino Uno ; Firmware Upload Method as Serial/USB. Then click Next.   Then connect the Arduino board to your PC using Arduino USB cable. Now in Next window select the Arduino port by clicking to the drop down list. Select COM4. Then click Next twice.   Then click Finish button. Now you have setup the serial port and interfaced Arduino board with LabVIEW. Run the Program Now select the Continuously Run Icon, then in the front panel window select the port and enter the digital pin. Then by switching the Output Value (which acts as an On & Off switch), you can see the in-built LED of the Arduino board blinking till the Output Value is turned Off . Complete process is also explained in the video below. Source : Interfacing LabVIEW With Arduino ### Arduino-Powered Fire Fighter Robot: A Step-by-Step Guide Greetings to all, we are glad to have you back at Techatronic. You may have heard of a fire-fighting vehicle before. Today, we are unveiling a groundbreaking breakthrough - the Firefighter Robot. This machine is specifically created to function independently, thereby fitting the definition of a robot. Our design is coded to respond to fires and start firefighting procedures. The abilities of the Firefighter Robot are remarkable, providing a more efficient option for firefighting than conventional vehicles. In contemporary times, when fire accidents occur in power plants, buildings, and similar settings, the amount of time and human effort required for mitigation is considerable. Consequently, there exists a significant risk of substantial harm to individuals involved. Introduction A fire-fighting robot serves the purpose of fire control. This autonomous robot possesses the ability to detect fires independently and manage them by deploying water. Equipped with specific sensors, it identifies fires and navigates towards them for extinguishment. The design of the fire-fighting robot resembles that of a Bluetooth-controlled RC car. It integrates three sensors: one frontal sensor to detect obstacles ahead and two additional sensors placed at the front corners to detect fire. Upon sensing a fire, the robot maneuvers towards the detected site. This specialized robot is outfitted with four wheels, three sensors, a water tank, a nozzle, and a computer system that aids in decision-making, programmed using Arduino code. As of the publication date, the robot still exists in a smaller form and with restricted capabilities. When turned on, the robot's main purpose is to advance until it senses a fire. When one of the robot's sensors identifies a flame, it will change its course towards the fire and use the water nozzle incorporated into the Arduino-controlled firefighting robot to put out the targeted area. While the firefighting robot and line follower robot have similar sensors, their operations vary greatly depending on the circumstances. Construction I will provide thorough information on creating a Firefighter robot with Arduino. I will offer a detailed list of necessary parts, the circuit's code, and guidance for putting it together. Following these instructions makes the assembly of the robot easy and simple. Moreover, if you're looking to gain some foundational understanding, you can discover educational materials on our site. Components Required Arduino Uno flame IR Sensor Robot Chassis 12v Battery Wires Nozzle for water Water pump 5v Single channel relay Circuit Diagram Make all the connection as the given in the circuit diagram. After completing the Connection next step is to write the code and program for our project. Code #include Servo myservo; // create servo object to control a servo // twelve servo objects can be created on most boards int pos = 0; void setup() { // put your setup code here, to run once: myservo.attach(11); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(A0, INPUT); pinMode(A1, INPUT); pinMode(A2, INPUT); Serial.begin(9600); digitalWrite(6, HIGH); } void loop() { // put your main code here, to run repeatedly: int a = analogRead(A0); int b = analogRead(A1); int c = analogRead(A2); Serial.print(a); Serial.print(" "); Serial.print(b); Serial.print(" "); Serial.print(c); Serial.println(" "); delay(50); if (a<=250) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); for (pos = 60; pos <= 120; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 120; pos >= 60; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 60; pos <= 120; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 120; pos >= 60; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 60; pos <= 120; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 120; pos >= 60; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } //delay(200); } else if(b<=450) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); for (pos = 60; pos <= 120; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 120; pos >= 60; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 60; pos <= 120; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 120; pos >= 60; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 60; pos <= 120; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 120; pos >= 60; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } } else if(c<=250) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); for (pos = 60; pos <= 120; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 120; pos >= 60; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 60; pos <= 120; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 120; pos >= 60; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 60; pos <= 120; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } for (pos = 120; pos >= 60; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15 ms for the servo to reach the position } } else if(a>=251 && a<=700) { digitalWrite(6, HIGH); digitalWrite(2, LOW); digitalWrite(3,HIGH); digitalWrite(4, HIGH); digitalWrite(5, LOW); delay(500); digitalWrite(6, HIGH); digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, LOW); delay(500); } else if(b>=251 && b<=800) { digitalWrite(2, LOW); digitalWrite(3,HIGH); digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(6, HIGH); } else if(c>=251 && c<=800) { digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, HIGH); delay(500); digitalWrite(6, HIGH); digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, LOW); delay(500); } else { digitalWrite(6, HIGH); digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, LOW); } } Working In explaining the operation of the Firefighter Robot, we begin by outlining the algorithm to provide a fundamental understanding of the robot's functionality. We utilize three IR flame sensors that continuously scan for signs of fire or flames. These sensors detect warmth and heat emitted by any source and are programmed to identify flames in their vicinity. Constantly active, all three sensors actively search for any indication of fire. Upon detection by any of the sensors, the robot initiates a turn and proceeds toward the fire. How does it function? The flame sensors help to sense fire and relay this info to the Arduino; the main control system of the robot. The received data is analyzed at the Arduino end to prompt responsive actions resulting from specified statuses. They call the motors to act in a manner required by the path of the fire- either, left, right or forward depending on which sensor was triggered. Upon reaching the vicinity of the fire, the robot halts and begins the process of extinguishing it by applying water until the fire is brought under control. ### Arduino Nano Tutorial – Pinout & Schematics Arduino Nano Pinout The Arduino Nano is indeed small in size but is packed with all the features of a regular microcontroller and can also be connected to the breadboard. The Nano board proposed herein is approximately 7 grams in weight and 4. 5 cm by 1. 8 cm (length by breadth) Eight centimeters, in length by breadth from the size of the box. This article underscores the type of board under discussion for detailing, that being the Arduino Nano board, with noteworthy emphasis on the pinout and the positions of each pin. How different is Arduino Nano? Arduino Nano is Arduino Duemilanove in a different package but they have the same functionality. The Nano has the ATmega328P microcontroller and even the Arduino UNO has the same processor plugged into its board. The primary distinction between the two is that the UNO board comes in PDIP form with 30 pins, whereas the Nano is offered in TQFP with 32 pins. The additional 2 pins on Arduino Nano are used for ADC functions, whereas UNO has 6 ADC ports compared to Nano's 8 ADC ports. The Nano board lacks a DC power jack like other Arduino boards; instead, it features a mini-USB port. This port serves dual purposes for programming and serial monitoring. The intriguing aspect of Nano is its ability to select the most powerful power source based on its potential difference, while rendering the power source selector jumper useless. Arduino Nano – Specification Arduino Nano Specifications Microcontroller ATmega328P Architecture AVR Operating Voltage 5 Volts Flash Memory 32 KB of which 2 KB used by Bootloader SRAM 2KB Clock Speed 16 MHz Analog I/O Pins 8 EEPROM 1 KB DC Current per I/O Pins 40 milliAmps Input Voltage (7-12) Volts Showing 1 to 10 of 15 entries PreviousNext Arduino Nano Pinout Description Taking this pin-out diagram below as reference, we shall discuss all the functionalities of each and every pin.     Arduino Nano Pinout We can infer from the image that Arduino Nano got 36 pins in total. We will see all the pins section wise as well as a detailed format at last. Digital I/O , PWM - 14 Pins For Analog Functions - 9 Pins Power - 7 Pins SPI (Apart from Digital I/O Section) - 3 Pins Reset - 3 Pins ______________________________________________________ TOTAL - 36 Pins Arduino Nano Pin Description Arduino Nan0 – Pin Description Pins 1 to 30 Arduino Nano Pin Pin Name Type Function 1 D1/TX I/O Digital I/O Pin Serial TX Pin 2 D0/RX I/O Digital I/O Pin Serial RX Pin 3 RESET Input Reset ( Active Low) 4 GND Power Supply Ground 5 D2 I/O Digital I/O Pin 6 D3 I/O Digital I/O Pin 7 D4 I/O Digital I/O Pin 8 D5 I/O Digital I/O Pin 9 D6 I/O Digital I/O Pin 10 D7 I/O Digital I/O Pin 11 D8 I/O Digital I/O Pin 12 D9 I/O Digital I/O Pin 13 D10 I/O Digital I/O Pin 14 D11 I/O Digital I/O Pin 15 D12 I/O Digital I/O Pin 16 D13 I/O Digital I/O Pin 17 3V3 Output +3.3V Output (from FTDI) 18 AREF Input ADC reference 19 A0 Input Analog Input Channel 0 20 A1 Input Analog Input Channel 1 21 A2 Input Analog Input Channel 2 22 A3 Input Analog Input Channel 3 23 A4 Input Analog Input Channel 4 24 A5 Input Analog Input Channel 5 25 A6 Input Analog Input Channel 6 26 A7 Input Analog Input Channel 7 27 +5V Output or Input +5V Output (From On-board Regulator) or +5V (Input from External Power Supply 28 RESET Input Reset ( Active Low) 29 GND Power Supply Ground 30 VIN Power Supply voltage ICSP Pins Arduino Nano ICSP Pin Name Type Function MISO Input or Output Master In Slave Out Vcc Output Supply Voltage SCK Output Clock from Master to Slave MOSI Output or Input Master Out Slave In RST Input Reset (Active Low) GND Power Supply Ground Arduino Nano Digital Pins Pins - 1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, and 16 As we mentioned earlier, Arduino Nano has fourteen (14) digital I/O pin that can be used as digital input or output pins. The pins work at a.max voltage of 5.0V with 5V being high state and 0V being low state this is in regard to the digital state of the system. Every pin is enabled to supply as well as take in a current of 40mA and features pull-up resistor with a value of between 20/50 k ohms. Although there are only 14 digital pins in the Nano pin, any of these 14 pins can be used as either the input or output depending on the enabling of pinMode(), writing of digitalWrite(), or reading of the digitalRead() function. In addition to digital input and output functions, digital pins also offer extra features. Serial Communication Pins Pins - 1, 2 1 - RX and 2 - TX These two pins RX- receive and TX- transmit are used for TTL serial data communication. The pins RX and TX are connected to the corresponding pins of the USB-to-TTL Serial chip. PWM Pins Pins - 6, 8, 9, 12, 13, and 14 Each of these digital pins provide a Pulse Width Modulation signal of 8-bit resolution. The PWM signal can be generated using analogWrite () function. External Interrupts Pins - 5, 6 These pins can be utilized when an external interrupt is required for another processor or controller. These pins can be utilized with the attachInterrupt() function to enable interrupts for INT0 and INT1. These pins can initiate three different types of interrupts: low value interrupt, rising or falling edge interrupt, and change in value interrupt. SPI Pins Pins - 13, 14, 15, and 16 If you prefer not to send data asynchronously, you can utilize these Serial Peripheral Interface pins. These pins enable synchronous communication using SCK as the synchronization clock. Despite the fact that the hardware includes this capability, the Arduino software does not come with it as a standard feature. In order to utilize this function, you need to incorporate the SPI Library. LED Pin - 16 If you remember your first Arduino code, blinking LED, then you’ll definitely came across this Pin16. The pin 16 is being connected to the blinking LED on the board. Arduino Nano Analog Pins Pins - 18, 19, 20, 21, 22, 23, 24, 25, and 26 As previously stated, UNO has 6 analog input pins while Arduino Nano has 8 analog inputs (19 to 26), labeled as A0 through A7. This allows for the connection of 8 analog sensor inputs for processing. Every one of these analog pins includes a built-in ADC with a resolution of 1024 bits, resulting in 1024 possible values. Typically, the pins are gauged starting from ground up to 5V. To set the reference voltage at 0V to 3.3V, you can input 3.3V into the AREF pin (pin 18) using the analogReference() function. Just like digital pins in Nano, analog pins also have additional functions. I2C Pins 23, 24 as A4 and A5 Since SPI communication also has its disadvantages such as 4 essential pins and limited within a device. For long distance communication we use the I2C protocol. I2C supports multi master and multi slave with only two wires. One for clock (SCL) and another for data (SDA). For using this I2C feature we need to import a library called Wire library. AREF Pin 18 As mentioned already the AREF- Analog Reference pin is used as a reference voltage for analog input for the ADC conversion. Reset Pin 28 Reset pins in Arduino are active LOW pins which means if we make this pin value as LOW i.e., 0v, it will reset the controller. Usually used to be connected with switches to use as reset button. ICSP Arduino Nano ICSP ICSP is an abbreviation for In Circuit Serial Programming and is just one of the many programming methods for Arduino boards. Typically, an Arduino board is programmed using an Arduino bootloader program, however, in the absence or damage of the bootloader, ICSP can be utilized. ICSP is capable of repairing a lost or broken bootloader. Typically, every ICSP pin is connected to a corresponding Arduino pin with matching name or purpose. In the ICSP header of Nano, MISO is linked to digital pin 12 (Pin 15) whereas MOSI is connected to digital pin 11 (Pin 16) and other pins follow suit. The combination of MISO, MOSI, SCK pins form the majority of an SPI interface. Using this ICSP, we have the ability to program one Arduino board with another Arduino board. Arduino as ISP ATMega328 Vcc/5V Vcc GND GND MOSI/D11 D11 MISO/D12 D12 SCK/D13 D13 D10 Reset RESET Pins 3, 28 and 5 in ICSP Power Pins 4, 17, 27, 28, 30 and 2 & 6 in ICSP Source : Arduino Nano Tutorial – Pinout & Schematics ### Arduino Leonardo Pinout Diagram Arduino Leonardo Introduction: Arduino Leonardo is a microcontroller board that uses ATmega32u4 (datasheet) as the main chip. Most of these include twenty digital I/O pins out of which seven can be used as PWM outputs and twelve can be used as analog inputs, sixteen mega Hertz crystal oscillators, micro USB connection, power jack interfaces, ICSP interfaces, and a reset button. It includes all the necessary components to aid the microcontroller; just plug it into a computer via a USB cable or power it up using an AC-to-DC adapter or battery to begin. The main distinction of the Leonardo board is that the ATmega32u4 includes USB communication, removing the necessity for another processor. This enables the Leonardo to be recognized by a computer as both a mouse and keyboard, along with a virtual (CDC) serial/COM port. It additionally has further ramifications on the board's conduct. these are detailed on the Getting started with the Arduino Leonardo. Related Boards If you are interested in boards with similar functionality, at Arduino you can find: Arduino Leonardo without Headers Arduino Micro Getting started Find inspiration for your projects with Leonardo board from our tutorial platform Project Hub. The page for Getting Started with the Arduino Leonardo has everything necessary for setting up your board, utilizing the Arduino Software (IDE), and beginning to experiment with coding and electronics. From the Tutorials section you can find examples from libraries and built-in sketches as well other useful information to expand your knowledge of the Arduino hardware and software. Need Help? Check the Arduino Forum for questions about the Arduino Language, or how to make your own Projects with Arduino. Need any help with your board please get in touch with the official Arduino User Support as explained in our Contact Us page. Warranty You can find here your board warranty information. Arduino Leonardo Pinout: Ardunio leonardo pinout Arduino Leonardo Specifications: Microcontroller ATmega32u4 Operating Voltage 5V Input Voltage (recommended) 7-12V Input Voltage (limits) 6-20V Digital I/O Pins 20 PWM Channels 7 Analog Input Channels 12 DC Current per I/O Pin 40 mA DC Current for 3.3V Pin 50 mA Flash Memory 32 KB (ATmega32u4) of which 4 KB used by bootloader SRAM 2.5 KB (ATmega32u4) EEPROM 1 KB (ATmega32u4) Clock Speed 16 MHz OSH: Schematics The Arduino Leonardo is open-source hardware! You can build your own board using the following files: Pinout Diagram Download the full pinout diagram as PDF here. Power The Arduino Leonardo has flexible power options. It can receive power through either its micro USB port or an external power source, selecting the power automatically. External power can be provided via an AC adapter or battery. An adapter can be used by connecting a 2.1mm center-positive plug to the board's power jack. Alternatively, a battery's leads can be inserted into the Gnd and Vin pin headers of the POWER connector. This allows the Leonardo to be powered portably without needing a USB connection. The power pins are as follows:  VIN. The Arduino board receives a different input voltage when powered by an external source compared to the 5 volts from USB or another regulated power source. You have the option to provide voltage through this pin or retrieve it from this pin if the voltage is supplied through the power jack. 5V.The controlled power source is utilized for supplying power to the microcontroller and other components present on the circuit board. This can be sourced from either the vehicle identification number (VIN) through an on-board regulator or can come from a USB port or another regulated 5V power source. 3V3. A 3.3 volt supply is generated by the on-board regulator. Maximum current draw is 50 mA. GND. Ground pins. IOREF. The voltage at which the i/o pins of the board are operating (i.e. VCC for the board). This is 5V on the Leonardo. Memory The AVR chip ATmega32u4 has a memory of 32 KB of which there is 4 KB allocated for the Bootloader. It comes with 2. An include 5 kilobytes of SRAM and 1 kilobytes of EEPROM as well. (which can be read and written with the EEPROM library).  Input and Output Each of the 20 digital i/o pins on the Leonardo can be used as an input or output, usingpinMode(), digitalWrite(), and digitalRead() functions. They operate at 5 volts. Each pin can provide or receive a maximum of 40 mA and has an internal pull-up resistor (disconnected by default) of 20-50 kOhms. In addition, some pins have specialized functions: Serial: 0 (RX) and 1 (TX). Used to receive (RX) and transmit (TX) TTL serial data using theATmega32U4 hardware serial capability. Note that on the Leonardo, the Serial class refers to USB (CDC) communication; for TTL serial on pins 0 and 1, use the Serial1 class. TWI: 2 (SDA) and 3 (SCL). Support TWI communication using the Wire library. External Interrupts: 3 (interrupt 0), 2 (interrupt 1), 0 (interrupt 2), 1 (interrupt 3) and 7 (interrupt 4). These pins can be configured to trigger an interrupt on a low value, a rising or falling edge, or a change in value. See the attachInterrupt() function for details. PWM: 3, 5, 6, 9, 10, 11, and 13. Provide 8-bit PWM output with the analogWrite() function. SPI: on the ICSP header. These pins support SPI communication using the SPI library. Note that the SPI pins are not connected to any of the digital I/O pins as they are on the Uno, They are only available on the ICSP connector. This means that if you have a shield that uses SPI, but does NOT have a 6-pin ICSP connector that connects to the Leonardo's 6-pin ICSP header, the shield will not work. LED: 13. There is a built-in LED connected to digital pin 13. When the pin is HIGH value, the LED is on, when the pin is LOW, it's off. Analog Inputs: A0-A5, A6 - A11 (on digital pins 4, 6, 8, 9, 10, and 12). The Leonardo has 12 analog inputs, labeled A0 through A11, all of which can also be used as digital i/o. Pins A0-A5 appear in the same locations as on the Uno; inputs A6-A11 are on digital i/o pins 4, 6, 8, 9, 10, and 12 respectively. Each analog input provide 10 bits of resolution (i.e. 1024 different values). By default the analog inputs measure from ground to 5 volts, though is it possible to change the upper end of their range using the AREF pin and the analogReference() function. There are a couple of other pins on the board: AREF. Reference voltage for the analog inputs. Used with analogReference(). Reset. Bring this line LOW to reset the microcontroller. Typically used to add a reset button to shields which block the one on the board. See also the mapping between Arduino pins and ATmega32u4 ports.  Communication The Leonardo has a number of facilities for communicating with a computer, another Arduino, or other microcontrollers. The ATmega32U4 provides UART TTL (5V) serial communication, which is available on digital pins 0 (RX) and 1 (TX). The 32U4 also allows for serial (CDC) communication over USB and appears as a virtual com port to software on the computer. The chip also acts as a full speed USB 2.0 device, using standard USB COM drivers. On Windows, a .inf file is required. The Arduino software includes a serial monitor which allows simple textual data to be sent to and from the Arduino board. The RX and TX LEDs on the board will flash when data is being transmitted via the USB connection to the computer (but not for serial communication on pins 0 and 1). A SoftwareSerial library allows for serial communication on any of the Leonardo's digital pins. The ATmega32U4 also supports I2C (TWI) and SPI communication. The Arduino software includes a Wire library to simplify use of the I2C bus; see the documentation for details. For SPI communication, use the SPI library. The Leonardo appears as a generic keyboard and mouse, and can be programmed to control these input devices using the Keyboard and Mouse classes.  Programming The Leonardo can be programmed with the Arduino software (download). Select "Arduino Leonardo from the Tools > Board menu (according to the microcontroller on your board). For details, see the reference and tutorials. The ATmega32U4 on the Arduino Leonardo comes preburned with a bootloader that allows you to upload new code to it without the use of an external hardware programmer. It communicates using the AVR109 protocol. You can also bypass the bootloader and program the microcontroller through the ICSP (In-Circuit Serial Programming) header using Arduino ISP or similar; see these instructions for details.  Automatic (Software) Reset and Bootloader Initiation Rather than requiring a physical press of the reset button before an upload, the Leonardo is designed in a way that allows it to be reset by software running on a connected computer. The reset is triggered when the Leonardo's virtual (CDC) serial / COM port is opened at 1200 baud and then closed. When this happens, the processor will reset, breaking the USB connection to the computer (meaning that the virtual serial / COM port will disappear). After the processor resets, the bootloader starts, remaining active for about 8 seconds. The bootloader can also be initiated by pressing the reset button on the Leonardo. Note that when the board first powers up, it will jump straight to the user sketch, if present, rather than initiating the bootloader. Because of the way the Leonardo handles reset it's best to let the Arduino software try to initiate the reset before uploading, especially if you are in the habit of pressing the reset button before uploading on other boards. If the software can't reset the board you can always start the bootloader by pressing the reset button on the board.  USB Overcurrent Protection The Leonardo is equipped with a resettable polyfuse which safeguards your computer's USB ports from shorts and overcurrent. Even though computers have their internal protection, the fuse adds a layer of security. If the USB port receives more than 500 mA of current, the fuse will interrupt the connection until the short circuit or overload is fixed. Physical Characteristics The Leonardo PCB has a maximum length of 2.7 inches and a width of 2.1 inches, with the USB connector and power jack protruding beyond the length measurement. Four screw holes enable the board to be connected to a surface or case. Keep in mind that the gap between digital pins 7 and 8 measures 160 mil (0.16"), which is not a perfect multiple of the 100 mil spacing of the rest of the pins. for more info visit: Arduino Leonardo   ### Arduino Projects: Digital Audio Recorder Being able to capture sound, store it and play it over and over again never fails to leave me in awe of its pioneers, from Thomas Edison to Alan Blumlein, the British electrical engineer who, in 1931, invented ‘binaural recording’ – what we now call ‘stereo’. (Never heard of him? Blumlein amassed 128 patents in audio, radar and television that are still in use today, but tragically, was killed in a plane crash during World War II while testing airborne radar. His loss was considered so great, news of his death was kept secret until after the war). So far in this series, we’ve turned an Arduino into a number of audio-related projects from a digital audio player to, most recently, an audio spectrum analyser. This month, we see just how far we can push the popular microcontroller as we begin from scratch turning it into a basic but working digital audio recorder. How it works All digital audio recording devices, regardless of their appearance, must execute the same fundamental tasks - recording an analog audio signal periodically and saving the digital data to storage simultaneously. It may be simple on a PC or smartphone, but we will have to implement advanced programming techniques and utilize hidden features in order to make it functional on an Arduino Uno. For the record, our Digital Audio Recorder will capture a single (mono) analog audio channel with a sample rate of 22.05kHz, 8-bit sample depth and store it as a Windows WAV file with up to 4GB filesize on a microSD flash card. Now before you yawn in excitement at those specs, remember, we’re doing this with a 16MHz processor, just 2KB of RAM and 32KB of programming space. If only a Windows PC could be so efficient!To help make the project (and source code) as easy to understand as possible, our recorder has just two buttons – record and stop. It doesn’t play audio and only records to a single fixed file in the root folder of the flash card called ‘REC00000.WAV’. An existing file with the same name will be overwritten. For playback, just take the flash card, load it into your PC, phone or tablet and play the file in any standard WAV file-ready media player or editor. Nyquist Theorem We are familiar with digital audio as we listen to music and have likely copied CDs before. How can we convert an analog signal into digital audio? This is where the expertise of another electrical engineer, Harry Nyquist, proves valuable to us. He determined that to digitally capture an analog signal, we must sample it at regular intervals, with a rate that is at least double the highest audio frequency we want to capture. This implies that for a 5kHz audio bandwidth, we require at least a 10kHz sample rate. The method we obtain those samples is by using an analog-to-digital converter (ADC) circuit device, which is integrated into the Arduino Uno's ATMEGA328P microcontroller chip. However, it comes with a default 9.6kHz sample rate and 10-bit sample depth, so we need to make adjustments to improve it. To begin with, the sample rate is insufficient (resulting in a 4.8kHz audio bandwidth, equivalent to the quality of AM radio at best) and the bit depth is incorrect. The sample precision in CD audio is typically 16-bit, whereas the Arduino's ADC only has a starting bit depth of 10-bits. Since the ADC employs the 'successive approximation' sampling technique (which we thoroughly examined a few months back), every sample requires 13 clock cycles, resulting in a sample rate of 125kHz/13 or around 9.6kHz. However, lowering the prescale factor allows for a higher ADC clock rate – setting the prescaler factor to 16 quickly boosts the sample rate to almost 77kHz, equivalent to a sample taken every 13 microseconds. However, at higher clock speeds, the ADC's sample accuracy decreases; despite this, the accuracy remains near 8-bit, which is sufficient for our purposes. The method of 'overclocking' is very effective, but it is limited by the few prescaler options available, resulting in sample rates of 9.6, 19.2, 38.4, and 76.8kHz that are not compatible with WAV format. If you go through the ATMEGA328P datasheet, you will see that aside from the standard 'free-running' sampling mode we discussed, the ADC also includes a 'single conversion' mode. In this mode, the ADC is activated by setting the sampling register bit or 'flag', it acquires the sample, and then resets the flag once the sample is ready for processing. That mightn’t sound like cause for celebration, but when we combine it with another of the ATMEGA328P’s hidden talents called ‘timer interrupts’, we now have a mechanism for setting a much more precise sample rate. Timer interrupts   In computer architecture, an ‘interrupt’ is a trigger to tell the processor to immediately divert from or ‘interrupt’ the current process and run a specific task associated with that interrupt. Once the new task is completed, the processor returns to the original process and picks up where it left off. Now, the ATMEGA328P has all sorts of interrupt triggers to play with – you can trigger an interrupt externally by pulling an interrupt pin high or low as appropriate, but the chip also has a number of software-controlled options, one set in particular called ‘timer interrupts’. In any CPU or microcontroller, a timer is just a hardware variable or ‘register’ that counts up to its maximum count (for example, 256 for an 8-bit timer), instantly drops back to zero and starts again. Because timers run off the master clock and each count takes a fixed number of clock cycles, we can programmatically figure out how long it will take to reach the top count, hence the ‘timer’ name. The ATMEGA328P has three of them – one 16-bit and two 8-bit timers – along with different ways you can use them. One simple way is once the timer reaches its maximum count, it can set an ‘overflow’ flag, which can be used to trigger an interrupt. Like the ADC, timers also have a programmable prescaler for the input clock, so we can adjust how long it takes to reach that overflow condition. However, a more practical alternative is a unique feature known as 'Clear Timer on Compare Match' or CTC. Instead of letting the timer reach its maximum value, we have the option to set our own threshold. For example, instead of waiting for an 8-bit timer to reach 256, we can input any number from 1 to 255 into a designated register. When the timer hits that number, it will interrupt, reset to zero, and start counting again. By utilizing this method for initiating the ADC sampling process, we are able to establish the sample rate with increased accuracy. For our project, we utilize the 'Timer2' timer on the chip, setting it to CTC mode and setting the 'OCR2A' register with our 'compare' number to generate an interrupt every 45 microseconds. This results in a sample rate of around 22.19kHz - not ideal, but better than anything else.   For more detail: Arduino Projects: Digital Audio Recorder ### Toll Tax System using Arduino: Ultrasonic Sensor with Servo Motor Toll Tax System Project: Hello to all readers, our goal is to create a Toll Tax System using Arduino, Ultrasonic Sensor, and Servo Motor. The steps to create an automated toll tax system with an Arduino Uno will be outlined in this article. We provide step-by-step instructions along with comprehensive explanations of the code and circuit diagram. Opting for this project is an excellent choice if you're considering a science fair project. While I have primarily focused on intermediate and advanced level projects, there is an increasing demand from novices and hobbyists for easier tasks. Thus, I have devised this straightforward concept. Ultrasonic sensors and Servo motors are especially favored, especially by those new to the subject. This project will allow you to improve fundamental skills such as identifying vehicles using an ultrasonic sensor and operating a Servo motor to lift a barrier. Before proceeding with the construction phase of our project, it is crucial to have a clear understanding of the toll tax system, which is also referred to as the toll plaza stopping system. Do you recall the initial visit you made to a toll booth? What new approach did they employ to halt vehicles for fundraising purposes? Our goal is to replicate that precise system, but on a reduced size. This job requires accurately duplicating the vehicle-stopping system commonly found at toll plaza centers. This project was influenced by real-life toll systems that employ barriers to automatically stop vehicles activated by sensors or manual buttons. In our situation, we are utilizing an HC-SR04 ultrasonic distance sensor to detect obstacles, which are vehicles. We are utilizing a small servo motor to raise the barrier. This is the essence of the project. Next, we will begin the construction phase. Materials required to build automated toll system Components and Materials Used: 1. Arduino Uno featuring the ATmega328P microcontroller. 2. HC-SR04 Ultrasonic Sensor. 3. Plastic Geared Micro Servo. 4. Single Strand Wire (substituting jumper wires). 5. Mini Breadboard. 6. Lithium Ion Battery with a protective case. 7. A few drops of superglue. 8. Arduino Programming Cable. 9. Arduino Integrated Development Environment (IDE). 10. A piece of popsicle stick. Additional Tools and Components: - Top Arduino Sensors. - Super Starter Kit for Beginners. - Digital Oscilloscopes. - Variable Power Supply. - Digital Multimeter. - Soldering Iron Kits. - Portable PCB Drill Machines. Please be aware that these are affiliate links, and I may receive a commission if you choose to purchase these components via these links. Your support is greatly appreciated! Circuit Diagram of toll system: The circuit diagram for the Toll System is straightforward, with all connections easily visible. Micro servo connections: If you're not familiar, take a look at the plastic geared micro servo depicted in the image above. The kit contains plastic gears and the servo horns are equipped with a holder/barrier made of a popsicle stick. When it comes to the connections, we are utilizing the D9 pin on the Arduino Uno board, which serves as a PWM (Pulse Width Modulation) pin. This shows that signals for the micro servo are transmitted from the D9 pin in the form of pulses. Since the micro servo's signal input is linked to the D9 pin, we will utilize the Gnd and Positive pins to attach to the positive and negative pins on the breadboard power rails. Now the servo connections have been completed. Next, we will examine the fundamental functions and connections of the ultrasonic sensor. The ultrasonic sensor, HC-SR04, also referred to as the ultrasonic distance sensor, consists of four pins. The pins are labeled as Vcc, Trig, Echo, and Gnd. Usually, we connect the Vcc and Gnd pins to the breadboard's positive and negative rails, while the Trig and Echo pins are linked to Arduino board's D5 Functions of Ultrasonic sensor The picture shows the appearance of the HC-SR04 sensor. This visual representation shows two distinct circular patterns. These circles work as both the sender and recipient devices. When powered, the sensor emits ultrasonic signals from one side, which travel a set distance of 15 centimeters. The signals bounce back to the receiver if there are any obstacles on the route. One of the uses of this small module is pertinent to our project. In our project, we use vehicles as obstacles. In case the sensor detects signals from obstacles, it will instruct the micro servo to move upwards and remain in that position for a specific duration (as specified in the code) before returning to its initial state. Through careful observation, the letters "T" and "R" can be identified at the boundaries of the sensor, showing where the transmitter and receiver components are located. Our circuit setup for this project is now finished. Pro Tip: For a tidier and neater appearance of both the circuit and the project, I highly recommend using single-strand wires instead of jumper wires to prevent unnecessary wire clutter. Here's a visual representation of the ultrasonic sensor assembly. Most of the wires are carefully hidden inside the enclosure for a neat appearance. More precisely, the power input cables for the ultrasonic sensor are carefully placed behind the Arduino Uno. I used some small pieces of double-sided adhesive tape to attach the Arduino Uno to the breadboard. When the micro servo is added to this arrangement, the final setup will look similar to the illustration provided. It is crucial to note that we need a lithium-ion battery to supply a steady 3.7V DC power for our project since we are not using power from a USB connection. I used a battery holder with pre-installed wires to simplify the connection process. For increased simplicity, I connected the ends of jumper wires to these battery leads, enabling easy attachment and removal of the power supply to the breadboard power rails. Please be careful and do not turn on your project until you have uploaded the required code to the Arduino board. Code for Arduino automatic barrier for toll #include Servo myservo; const int trigPin=3; const int echoPin=5; long tmeduration; int distance; void setup() { myservo.attach(9); pinMode(trigPin,OUTPUT); pinMode(echoPin,INPUT); Serial.begin(9600); } void loop() { digitalWrite(trigPin,LOW); delayMicroseconds(2); digitalWrite(trigPin,HIGH); delayMicroseconds(10); digitalWrite(trigPin,LOW); tmeduration=pulseIn(echoPin,HIGH); distance=(0.034*tmeduration)/2; if(distance<=10){ myservo.write(90); } else{ myservo.write(0);} Serial.print("distance:"); Serial.println(distance); delay(1); } An overview of the code used in our project: To simplify comprehension and facilitate customization, especially for beginners, I've divided the code into three distinct segments. These three parts serve as building blocks to elucidate their respective roles in achieving the final functionality. This first part, also known as the declaration or definition phase, includes assigning pin numbers for sending and receiving signals with different modules. Also, we clarify the specific modules from the library right from the beginning. In our situation, this relates to the servo module. We are assigning pins for the echo and Trig terminals and calling the time duration and distance parameters. These parameters will be used in the upcoming lines, which will be explained in the next section. In this section, we will define the output pin, which is pin number 9 (D9), for our micro servo. Additionally, we will specify the input and output pins for the ultrasonic sensor, outlining the respective commands. In the last section, we establish the degree to which the servo horn lifts and the reaction time. Adjust the values in the "myservo.write" function and the "delay" variable to modify the servo angle or delay. However, I recommend keeping these settings as they are for this specific project. Please note that this project offers two modes for you to choose from. Mode 1 activates the servo horn to move to a particular angle once a temporary blockage is introduced and then removed in front of the sensor. Contrary to this, mode 2 entails performing a two-step rotation if an obstacle is detected by the sensor for more than 2 seconds. Steps to upload code into Arduino Uno Here are the steps to set up and upload the code to your Uno board: 1. Connect your Uno board to your computer using the programming cable with the USB side plugged into your computer. 2. Launch the Arduino IDE and copy-paste the provided code into the editor. 3. Before proceeding, ensure you've selected the correct board. Navigate to the "Tools" menu, choose "Board," and select "Arduino Uno." 4. Double-check the port settings. You can find this under "Tools" and then "Port." 5. Once all the settings are in order, click the "Upload" button to transfer the code to your Uno board. 6. After a successful upload, disconnect the USB cable from your Uno board. 7. Congratulations, for the current, you can now run your Arduino Uno using an external battery. If you are employing a 3. 7V battery, the capacitor charges to the voltage across the battery so there is no need for a resistor. If the battery voltage is higher, add a resistor in relation to the voltage according to the declared battery voltage. 8. Finally, to enhance the visual appeal of your project, you can create a simulated road using a piece of cardboard and colored paper to make it look more realistic. Now, you can arrange all the components neatly as shown below, presenting the finished project, all set to start gathering contributions! I've organized the components in a way that ensures nothing obstructs the movement of the vehicle or any obstacles. In case you encounter issues, such as the servo moving unnecessarily, please adhere to this sequence for efficient component placement. This marks the conclusion of our project. Of course, you should always have questions or concerns, so feel free to use the comments section for this. Source: Toll Tax System using Arduino: Ultrasonic Sensor with Servo Motor ### An FM Stereo Broadcaster PLL using Arduino I own two excellent AM transmitters - one is homemade with a single 6888 Tube and the other is a restored old KnightKit Broadcaster. Additionally, I have a high-quality solid state transmitter from SSTRAN that I use to broadcast music to my collection of repaired or refurbished antique AM radios. I desired a top-notch FM Stereo transmitter to broadcast iPod / iTunes audio throughout my home and to my FM radios. Creating an FM Stereo system at home poses more of a challenge. I sought to steer clear of the deficient frequency regulation in the Ramsey FM-10C (using the BA1404 chip), as well as the weak modulation of the tiny iPod FM transmitters available for car use - despite their decent frequency control, the audio quality is simply awful. I've tried approximately 3 of these iPod transmitters and none of them were functional at all. You can get really GOOD FM transmitter kits but you have to go on up to $140+ to find a kit with suitable audio quality and frequency stability (think: Ramsey FM-25B). To home-brew, first you have to build a stable exciter, preferably PLL synthesized, but the ICs for doing so are simply no longer readily available (Motorola MC145170, Plessey NJ88C30). Secondly, you'll need to encode the left and right channels into Left+Right, Left-Right and tack on the 19 khz pilot tone, the 38 khz sub-carrier (See: Wikipedia, FM Broadcasting, FM Stereo). The NS73M FM Transmitter module from Niigata Seimitsu Co. is ideal for this task. Unfortunately, it needs a controller to setup the pre-emphasis, modulation level, frequency and power level. And, if you're going to use a controller, you might as well include an LCD so you can know what frequency you're on. I named this the "FM Stereo Broadcaster" since it reminded me ofthe old Knight-Kit Wireless Broadcaster of the 1950's (I have one of those too!). The Plan I selected a Bare-Bones Board (BBB) from Modern Device Company (that I had on hand) to provide an Arduino controller. The Arduino is an open platform, the development tools are free, and can be programmed in a variant of "C" language. The LCD is a 16 x 1 device from AllElectronics.com made by Varitronix. Finally the NS73M is provided on a convenient breakout board from Sparkfun Electronics. The Code I found some initial code built by Cai Maver (Arduino + NS73M = ARRRduino!)on the SparkFun forum. The original (ur-code?) sample code from Sparkfun / ZAPNSPARK (Jim G.) gave the original 'protocol' for interfacing with the NS73M. The code was first built with 3-wire mechanism using 3 digital pins (after the sample code).. After some back-and-forth collaboration, he changed the Arduino to NS73 communication it to use the I2C protocol (Arduino Wire.h library). I added the 4-bit LCD interface and did some fancy-schmancy handling of the up/down/set buttons so you can take the transmitter offline, change frequencies, and put it back on the air, and I added some code to save and restore the frequency in EEPROM so the last frequency is restored on power up. The Feature-List includes: Power-up and recall the last-known frequency Provide access to the entire FM-broadcast band (USA; code is easily modified for other markets) Allow the FM Carrier to be taken 'off-air' or 'on-air' as needed Show the current frequency and carrier state on an LCD Display   The project involves assembling 3 integrated modules rather than individual components. The LCD4bit library was modified in just two locations: 1. Turn off the RW Pin - connect the LCD RW pin to a low signal. We're just 'putting words on paper'. The dog ran quickly to fetch the ball. Adjust the Enable Pin to '11' from '2' by utilizing the unused RW pin. The Arduino pins are budgeted this way: Digital Pins - D12 = RS (from LCD) D11 = RW (NOT USED - The RW pin on the LCD is tied LOW) D11 = Enable (from LCD) D10, 9, 8, 7 = 4 data bits for LCD D6, 5, 4 = UP, DOWN, SET buttons Analog Pins: A4 = SDA, A5 = SCL There are a few pins remaining for future expansion. Final code is in this Arduino Sketch for An FM Stereo Broadcaster. As currently configured, the NS73M transmits at 2 mw power output, with a 75 us pre-emphasis, and 100% modulation to occur at 200mV of input audio. The first time it powers up, it will start at 97.3 mhz. Afterward, the start-up frequency is whatever was previously set at the time it was powered down. Everything is reconfigurable for other countries, including the FM Broadcast band edges (87.5 mhz to 107.9 mhz USA), and the channel spacing (200khz USA). The 4-Bit LCD interface is as follows: LCD is being used as Write-only, so we can save a pin by tieing RW LOW and disabling RW in the LCD4bit library. Also the LCD4bit library was slightly modified to move the ENABLE pin from Arduino Pin 2 to the (now unused) Pin 11. The Two LCD4bit library changes are two lines:   int USING_RW = false; // make sure the USING_RW value is set to 'false'... ... and Change THIS Line: int Enable = 2; TO: int Enable = 11; // making use of the now unused RW pin... Results Frequency stability is excellent - I hooked up a frequency counter and it NEVER fluctuated. The audio quality being transmitted is excellent - there is minimal hiss and the audio has a wide dynamic range, indicating high-quality FM modulation. Distance - Surprisingly, with the right audio level from an iPod nano at around 60% and a small (and legal!) antenna, it can reach my living room that is approximately 50 feet away! Frequency Agility has been tested across the entire US FM broadcast band, from 87.5 to 107.9, with only minor accuracy discrepancies. Cost - is lower than the Ramsey FM-10C ($45) when compared to the Bare-Bones Arduino ($15), the FM module ($15, Sparkfun.com), an LCD module ($5, Allelectronics.com), and some available parts (buttons, a 3.3v regulator, resistors, trimpot for LCD contrast), yet offers the same features as the Ramsey FM-25B ($139.95). I still have to put it in an appropriate casing. Finishing: since this is an RF project, an enclosure should be metal. I've settled on a Hammond 1455N1201 extruded aluminum enclosure - they're easy to work with and I like the style. The datasheet indicates the RF Output is 50 ohms impedance, so a BNC Connector would be suitable. Each of the separate 'modules' (LCD, Arduino, FM Transmitter) can be mounted to a perf board and interconnected. Breadboard power is from a 5-volt lab supply, so a 5-volt regulator (and filtering) will be added to power the Arduino and the LCD; the NS73M uses a separate 3.3-volt regulator. Major Components in ProjectArduino FM Transmitter IC LCD   For more detail: An FM Stereo Broadcaster PLL using Arduino ### Arduino-Based Smart Parking System with IR Sensor Integration Good day, ElectroDuino community! We are delighted to have all of you back to our site. In today’s session we will be learning the Smart Parking System Project based on Arduino, IR Sensors and servo Motors. The above considerations of explaining the project concept, thinking through the approach, using a block diagram, determining components, using a circuit diagram, explaining how the system operates, and explaining how the Arduino code works will be discussed during our conversation. We aim to give everyone an overview of how this automated parking solution is designed and programmed from start to finish using these technologies. Let's get started! This endeavor is made possible through the generous sponsorship of pcbway.com, a leading provider of professional-grade PCB prototype services. Their offer includes 10 top-tier PCBs for a mere $5. To avail of this offer, simply register on their website, input your specifications regarding Dimensions, Layers, Thickness, Color, and Quantity, and then upload your Gerber files to place your order promptly. With a swift turnaround time of 24 hours, pcbway.com ensures the rapid production of your PCB prototypes. Don't miss out on this opportunity to acquire high-quality PCB prototypes swiftly from pcbway.com. Order now to elevate your project to new heights! Introduction In today's urban landscape, locating available parking spaces poses a significant challenge due to congestion. The volume of vehicles on the roads far exceeds the available parking capacity. Upon entering a parking area, individuals often encounter the frustrating scenario of insufficient vacant slots to accommodate their cars, leading to time wastage. Additionally, navigating through large parking facilities to identify empty spots adds to the confusion and further consumes valuable time. Many of us have experienced these twin issues, which underscore the need for efficient parking management systems in all parking facilities. These systems aim to offer hassle-free and straightforward parking experiences. To address this pressing concern, we will outline a "Smart Parking System Project" in this tutorial. This project is intended to eliminate some of the mentioned difficulties by offering the driver a real-time opportunity to see whether there is space for parking and hence saves time during the parking process. Smart Parking System Project Concept This concept of the smart parking system involves the use of an Arduino microcontroller, six IR sensors, a servo motor, and an LCD. The Arduino Board: The Arduino Board is used for controlling the whole central system of Green Travel. Two IR sensors are positioned at the entry and exit points to detect vehicles entering and leaving the parking area, while the remaining four sensors monitor parking slot availability. The servo motor operates the entry and exit gates. Additionally, an LCD at the entrance indicates the availability of parking slots. Upon a vehicle's arrival at the parking gate, the display continually updates to reflect the number of vacant slots. If slots are available, the system activates the servo motor to open the entry gate. As a vehicle occupies a slot, the display indicates that the slot is filled. In the event that all parking slots are occupied, the system displays a message indicating full capacity and does not open the gate. Block Diagram of Smart Parking System Project Smart Parking System Project Block Diagram Components Required Components Name Quantity Arduino Nano or Arduino Uno 1 USB Cable for Arduino 1 IR Sensor 6 Sg90 Servo Motor 1 9V power supply 1 PCB board or Breadboard 1 Connecting wires As required in the circuit diagram Tools Required Tools Name Quantity Soldering Iron 1 Soldering wire 1 Soldering flux 1 Soldering stand 1 Multimeter 1 Desoldering pump 1 Wirecutter 1 Circuit Diagram of Smart Parking System Project using Arduino and IR Sensor Smart Parking System Project Circuit Diagram/ Schematic Working Principle Once the circuit diagram of the entire system has been followed and the code for the Arduino board has been uploaded, place the sensors and the servo motor properly. This project as has been illustrated entails four parking slots, and the IR sensors 3, 4, 5 and 6 are located at slots 1,2,3 and 4 respectively. The first IR sensors should be placed at the entry gate and the second one at the exit gate The common entry and exit gate control should be done by servo motor. Also, there is an LCD display installed beside the entry gate collaborating with Australian Local Health District. The system utilizes IR sensors 3, 4, 5, and 6 to determine parking slot occupancy and IR sensors 1 and 2 to detect vehicle arrivals at the gate. Initially, when all parking slots are vacant, the LCD indicates that all slots are empty. Upon a vehicle's arrival at the parking gate, IR sensor 1 detects it, allowing the vehicle to enter by opening the servo barrier. Once the vehicle occupies a slot, the LED display indicates that the slot is now occupied. This system automatically accommodates up to four vehicles. If the parking slots are all occupied, the system closes the entrance gate servo barrier and displays that slots 1 through 4 are full. When a vehicle leaves a slot and approaches the gate, IR sensor 2 detects it, prompting the system to open the servo barrier. The LED display then indicates that the slot is vacant, allowing for the entry of a new vehicle. Arduino Code #include //includes the servo library #include #include //includes LiquidCrystal_I2C library LiquidCrystal_I2C lcd(0x27, 20, 4); Servo myservo; #define ir_enter 2 #define ir_back 4 #define ir_car1 5 #define ir_car2 6 #define ir_car3 7 #define ir_car4 8 int S1=0, S2=0, S3=0, S4=0 ; int flag1=0, flag2=0; int slot = 6; void setup(){ Serial.begin(9600); // initialize digital pins as input. pinMode(ir_car1, INPUT); pinMode(ir_car2, INPUT); pinMode(ir_car3, INPUT); pinMode(ir_car4, INPUT); pinMode(ir_enter, INPUT); pinMode(ir_back, INPUT); myservo.attach(9); // Servo motor pin connected to D9 myservo.write(90); // sets the servo at 0 degree position // Print text on display lcd.begin(20, 4); lcd.setCursor (0,1); lcd.print(" Smart Car "); lcd.setCursor (0,2); lcd.print(" Parking System "); delay (2000); lcd.clear(); Read_Sensor(); int total = S1+S2+S3+S4; slot = slot-total; } void loop() { Read_Sensor(); lcd.setCursor (0,0); lcd.print(" Have Slot: "); lcd.print(slot); lcd.print(" "); lcd.setCursor (0,1); if(S1==1) { lcd.print("S1:Fill "); } else { lcd.print("S1:Empty"); } lcd.setCursor (10,1); if(S2==1) { lcd.print("S2:Fill "); } else { lcd.print("S2:Empty"); } lcd.setCursor (0,2); if(S3==1) { lcd.print("S3:Fill "); } else { lcd.print("S3:Empty"); } lcd.setCursor (10,2); if(S4==1) { lcd.print("S4:Fill "); } else { lcd.print("S4:Empty"); } /* Servo Motor Control ***********************/ if(digitalRead (ir_enter) == 0 && flag1==0) // read degital data from IR sensor1 { if(slot>0) { flag1=1; if(flag2==0) { myservo.write(180); slot = slot-1; } } else { lcd.setCursor (0,0); lcd.print(" Sorry Parking Full "); delay(1500); } } if(digitalRead (ir_back) == 0 && flag2==0) // read degital data from IR sensor2 { flag2=1; if(flag1==0) { myservo.write(180); // sets the servo at 180 degree position slot = slot+1; } } if(flag1==1 && flag2==1) { delay (1000); myservo.write(90); // sets the servo at 90 degree position flag1=0, flag2=0; } delay(1); } void Read_Sensor() { S1=0, S2=0, S3=0, S4=0; if(digitalRead(ir_car1) == 0){S1=1;} // read degital data from IR sensor3 if(digitalRead(ir_car2) == 0){S2=1;} // read degital data from IR sensor4 if(digitalRead(ir_car3) == 0){S3=1;} // read degital data from IR sensor5 if(digitalRead(ir_car4) == 0){S4=1;} // read degital data from IR sensor6 } ### Arduino DC-DC Boost Converter Design Circuit with Control Loop This article will discuss the process of utilizing an Arduino Uno to effectively manage a boost converter with a power output of at least 10 watts. By utilizing only a few components such as an inductor, capacitor, diode, and a FET, it is possible to create a discrete boost converter. Please refer to the Wikipedia page to understand how the circuit functions. The idea is based on the concept that an inductor can store energy in its magnetic field, and when the magnetic field collapses (switch opens), it will oppose the change in current and switch its magnetic field direction to maintain current flow. The voltage at the switch node can be calculated by adding up the voltages from input to output, resulting in a higher voltage at the output. Keeping the switch closed 100% of the time will merely charge the inductor and the output will equal 0V. Keeping the switch open 100% of the time will cause the inductor to act as a resistor at steady-state and the output will approximately equal the input voltage. Turning the switch OFF and ON rapidly will allow the inductor to charge itself when the switch is closed and then dump energy into the output capacitor when the switch is opened. Care must be taken into choosing how long to keep the switch closed since you do not want to saturate the inductor and cause the current to drop to 0A. The two different modes of operation, continues and discontinuous, refer to the current through the inductor. See this paper for more information on the two modes. Essentially you will want your circuit to operate in continues mode so that the the output voltage does not droop below the intended target and it lessen the effect on radiated emissions which will need to be mitaged to pass CE certification. Here is the circuit I made in LTspice, a popular and free SPICE simulation software. Another option is to use the Lite version OrCAD PSpice Designer. I've used both and the OrCAD one seems less clunky than the LTspice version. RefDes Digkey Description L1 811-1335-ND IND 330UH 2.8A 150 MOHM Q1 IRLI640GPBF-ND MOSFET N-CH 200V 9.9A TO220FP D1 497-3216-1-ND DIODE SCHOTTKY 150V 3A C1 493-1164-ND CAP ALUM 47UF 20% 160V RADIAL R1 150W-5-ND RES 150 OHM 5W 5% AXIAL This boost converter is capable of increasing a low voltage, like a few volts, to a higher voltage of over 100V as long as the maximum limits of the components mentioned are not exceeded. The efficiency of the converter is highest when the difference between output and input voltage is minimal. Increasing a 5V input to 80V will not have the same efficiency as increasing from 40V to 80V. You'll have to test the simulation to find the output versus input curve without overloading the inductor. This design can achieve a boost from 5V to 100V under high loads, however, it will draw excessive input current under lower loads. For safety reasons, make sure to acquire a power supply that can limit the current to 2.5A. This will guarantee the protection of the inductor and schottky diode from any harm. The output voltage should stay below ~140V as the schottky's blocking voltage is up to 150V and the capacitor's rating is 160V. Simulation Prior to buying the aforementioned components, I conducted basic simulations in LTspice. The input current must not exceed 2A while ensuring the output voltage falls within the range of 24V to 100V. The FET is fed a square wave signal to mimic the Arduino PWM. I adjusted it to 62KHz, the maximum PWM frequency of the Arduino. The timing was modified to reach different voltage levels and to function in continuous conduction mode (current doesn't drop to zero). 10V Input to 24V Output 4.8V Input to 11V Output Notice how these two images show a different output voltage, yet the same PWM period. The real-life PID should correct the PWM output to produce a constant 24V output. Below shows the inductor current varying between .6A and .3A. This is what we want. This picture from this TI app note shows a discontinuous current mode. Notice how the current drops to 0 before the switch is closed again. ' Lab Data Here is a table of efficiencies across different input and output voltages Input (V) Input Current (A) Input Power (W) Output (V) Output Current (A) Output Resistance (Ohm) Output Power (W) Eff (%) Setpoint (ADC) PWM (counts) 4V 1.35A 5.4W 24.97V 0.164A 152Ohm 4.1W 76% 46 219 5.3V 0.87A 4.611W 24.58V 0.167A 152Ohm 4.04W 86% 46 210 10.6V 0.37A 3.922W 24.23V 0.159A 152Ohm 3.86W 98% 46 142 15.7V 0.255A 4.0W 24.5V 0.161A 152Ohm 3.949W 99% 46 78 10.3V 1.45A 14.93W 45.4V 0.2986A 152Ohm 13.56W 91% 92 198 15.7V 0.91A 14.28W 45.4V 0.296A 152Ohm 13.45W 94% 92 167 15.7V 0.08A 1.256W 99V 0.0099A ~10000Ohm .9801W 78% 200 91 You should notice a few trends. The Arduino PWM value is on LESS as the efficiency increases. The efficiency goes up as the difference between output to input voltage decreases Input current goes up as the efficiency goes down During testing, the 150 Ohm 5W resistor will become hot. You can sense the warmth emanating from the parcel. It has been demonstrated that 100V is achievable, however the current output reached only 10mA. I could raise this amount to a significant level, but I lacked a resistor that wouldn't get burned. This can be easily modified to function with nixie tubes. I attempted to increase a 3.3V output to 24V, however the 300uH inductor reached its saturation point and limited the output voltage to 18V. If you observe this occurring in your control circuit, I suggest increasing the value of your inductor. Arduino Code github of the Arduino source code. The code uses PWM pin 6 to control the FET and a resistor feedback network on pin 0. The feedback network consists of a 1K resistor to GND and 100K between the ADC pin and the output voltage. The ADC value can be determined as follows: ADC = Vout * 1k/(100k+1k) ===> ADC = Vout*1/101 So, a 10V output will read 99mV on the arduino pin. The arduino pin should never exceed 5V. It is 10-bits, so each bit resembles ~4.8mV (5V/1023). A 24V output would yield an ADC reading of 48 (24V/101) / (5/1023). You can improve the resolution by using say 1K and 10K resistor network. I only had a 100K resistor laying around. I am using this PID library. The PID constants were chosen based on experimentation. The trick is to 0 your Ki and Kd and play around with Kp until the system oscillates. You should see the input current bounce up and down around the set-point. Then increase Ki a bit until the settling offset error is eliminated. Increase Kd to mitigate the high dv/dt spikes. double Kp=.2, Ki=.4, Kd=0; I had to adjust the PWM frequency to 62KHz by hand in order for the boost converter to function correctly. The PWM frequency that comes as standard is insufficient and not suitable for efficient operation. After changing this frequency, some libraries that depend on timers may not function properly. One big disadvantage of utilizing the Arduino is that modifying the default behavior can be extremely troublesome and disrupt the proper functioning of other nested libraries. I have inserted basic uart println statements to simplify the debugging process. You have the ability to view these live by utilizing the serial monitor. The first line represents the ADC input while the second line indicates the PWM output. The maximum output is limited to 220. Hardware As always, here is a picture of my sloppy setup. And the schematic   I would like to point out that Fritzing as a schematic tool is just awful. I think I'm going to go back to my regular schematic capture tools such as diptrace or OrCAD. Make sure to connect the Arduino's GND and your power supply's GND together. The gate resistor to GND is to ensure it is properly turned OFF when not in use from the Arduino. Source:   Arduino DC-DC Boost Converter Design Circuit with Control Loop ### Arduino Mega Pinout Diagram Arduino Mega Introduction: An Arduino Mega is an electronic circuit board known as a microcontroller that uses ATmega1280. This offers 54 pins, which can be set to input and output variations, and 14 for analog and pulse output signals. There are also 16 analog input pins for reading analog voltage levels. The board has 4 UART hardware serial ports, operates from a 16 MHz crystal oscillator, and can interface with a computer via USB or be powered independently using an AC adapter or battery. It offers all the necessary support circuitry for the microcontroller in a single package. To start working with the Arduino Mega, it is enough to connect it to a PC or a power supply; there is no need for other circuits. It is also possible to use many boards for expansion shields of Arduino Duemilanove and Diecimila types because of their similarity in the connection layout. Arduino Mega Pinout Diagram: ardunio mega pinout Arduino Mega Specifications: Microcontroller ATmega1280 Operating Voltage 5V Input Voltage (recommended) 7-12V Input Voltage (limits) 6-20V Digital I/O Pins 54 (of which 15 provide PWM output) Analog Input Pins 16 DC Current per I/O Pin 40 mA DC Current for 3.3V Pin 50 mA Flash Memory 128 KB of which 4 KB used by the bootloader SRAM 8 KB EEPROM 4 KB Clock Speed 16 MHz OSH: Schematics Arduino Mega 2560 is open-source hardware! You can build your board using the following files: EAGLE FILES IN .ZIPSCHEMATICS IN . PDFBOARD SIZE IN.DXF Programming The Mega 2560 board can be programmed with the Arduino Software (IDE). For details, see the reference and tutorials. The ATmega2560 on the Mega 2560 comes preprogrammed with a bootloader that allows you to upload new code to it without the use of an external hardware programmer. It communicates using the original STK500 protocol (reference, C header files). You can also bypass the bootloader and program the microcontroller through the ICSP (In-Circuit Serial Programming) header using Arduino ISP or similar; see these instructions for details. The ATmega16U2 (or 8U2 in the rev1 and rev2 boards) firmware source code is available in theArduino repository. The ATmega16U2/8U2 is loaded with a DFU bootloader, which can be activated by: On Rev1 boards: jumping the solder jumper on the back of the board, near the map of Italy, and than resetting the 8U2. On Rev2 or later boards: a resistor brings the 8U2/16U2 HWB line to the ground level and facilitates the going to the DFU mode. You can then use Atmel's FLIP software (Windows) or the DFU programmer (Mac OS X and Linux) to load a new firmware. Or you can use the ISP header with an external programmer (overwriting the DFU bootloader). See this user-contributed tutorial for more information. Warnings The Mega 2560 has a resettable polyfuse that protects your computer's USB ports from shorts and overcurrent. Although most computers provide their internal protection, the fuse provides an extra layer of protection. If more than 500 mA is applied to the USB port, the fuse will automatically break the connection until the short or overload is removed. Power The Mega 2560 can be powered via a USB connection or with an external power supply. The power source is selected automatically. The power that is not USB can be AC to DC adaptor commonly known as a wall-wart or a battery. This literally can be done by plugging a 2. Solder a 1mm center-positive plug into the board’s power jack connect it to a 9V battery and connect the GND to the little GND pad beside the USB connector. Those leads from a battery can be connected to the GND and Vin pin locations of the POWER connector. The board can take its operating power supply from an external source that can range from 6 to 20 volts. But if the board is supplied with less than 7V the 5V pin supplies less than 5V, and the board in turn becomes unstable. When using something more than 12V, the voltage regulator becomes sloppy hot and so damages the board. It is preferable to range between 7 to 12 volts. The power pins are as follows: Vin. This gets supplied to the board when the board is connected to an external supply voltage other than the 5 V from a USB connection or any other regulated voltage source. Through this pin, voltage can be supplied, or, if supplied through the power jack, the voltage can be obtained from this pin. 5V. This pin outputs a regulated 5V from the regulator on the board. The board can be supplied with power either from the DC power jack (7 - 12V), the USB connector (5V), or the VIN pin of the board (7-12V). Supplying voltage via the 5V or 3.3V pins bypasses the regulator, and can damage your board. We don't advise it. 3V3. A 3.3 volt supply is generated by the on-board regulator. Maximum current draw is 50 mA. GND. Ground pins. IOREF. This pin on the board provides the voltage reference with which the microcontroller operates. A properly configured shield can read the IOREF pin voltage and select the appropriate power source or enable voltage translators on the outputs for working with the 5V or 3.3V. Memory The ATmega2560 has 256 KB of flash memory for storing code (of which 8 KB is used for the bootloader), 8 KB of SRAM, and 4 KB of EEPROM (which can be read and written with the EEPROM library). Input and Output See the mapping between Arduino pins and Atmega2560 ports: PIN MAPPING ATmega2560 Each of the 54 digital pins on the Mega can be used as an input or output, using pinMode(),digitalWrite(), and digitalRead() functions. They operate at 5 volts. Each pin can provide or receive 20 mA as recommended operating condition and has an internal pull-up resistor (disconnected by default) of 20-50 k ohm. A maximum of 40mA is the value that must not be exceeded to avoid permanent damage to the microcontroller. In addition, some pins have specialized functions: Serial: 0 (RX) and 1 (TX); Serial 1: 19 (RX) and 18 (TX); Serial 2: 17 (RX) and 16 (TX); Serial 3: 15 (RX) and 14 (TX). Used to receive (RX) and transmit (TX) TTL serial data. Pins 0 and 1 are also connected to the corresponding pins of the ATmega16U2 USB-to-TTL Serial chip. External Interrupts: 2 (interrupt 0), 3 (interrupt 1), 18 (interrupt 5), 19 (interrupt 4), 20 (interrupt 3), and 21 (interrupt 2). These pins can be configured to trigger an interrupt on a low level, a rising or falling edge, or a change in level. See the attachInterrupt() function for details. PWM: 2 to 13 and 44 to 46. Provide 8-bit PWM output with the analogWrite() function. SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). These pins support SPI communication using theSPI library. The SPI pins are also broken out on the ICSP header, which is physically compatible with the Arduino /Genuino Uno and the old Duemilanove and Diecimila Arduino boards. LED: 13. There is a built-in LED connected to digital pin 13. When the pin is HIGH value, the LED is on, when the pin is LOW, it's off. TWI: 20 (SDA) and 21 (SCL). Support TWI communication using the Wire library. Note that these pins are not in the same location as the TWI pins on the old Duemilanove or Diecimila Arduino boards. See also the mapping Arduino Mega 2560 PIN diagram. The Mega 2560 has 16 analog inputs, each of which provides 10 bits of resolution (i.e. 1024 different values). By default they measure from ground to 5 volts, though is it possible to change the upper end of their range using the AREF pin and analogReference() function? There are a couple of other pins on the board: AREF. Reference voltage for the analog inputs. Used with analogReference(). Reset. Bring this line LOW to reset the microcontroller. They are typically used to add a reset button to shields that block the one on the board. Communication The Mega 2560 board possesses some facilities that allow to communicate with a computer, another board or other microcontrollers. The ATmega2560 has available four hardware UARTs for the TTL (5V) serial connection. These are interfaced through an ATmega16U2 (ATmega 8U2 Power over USB and includes a channel that provides a Virtual Com Port to all software in the Computer; Historically Windows computers require an . inf file to work while UNIX and APPLE MAC computers somehow receive and identify the board as a COM port A serial monitor in the Arduino Software (IDE) allows simple text data to be sent to or received from the board. Both the RX and TX indications on the board will blink whenever data is being transferred through the ATmega8U2/ATmega16U2 and the USB interface to the computer though not for the serial activity on pin 0 and 1. A SoftwareSerial library allows for serial communication on any of the Mega 2560's digital pins. The Mega 2560 also supports TWI and SPI communication. The Arduino Software (IDE) includes a Wire library to simplify the use of the TWI bus; see the documentation for details. For SPI communication, use the SPI library. Physical Characteristics and Shield Compatibility The maximum length and width of the Mega 2560 PCB are 4 and 2.1 inches respectively, with the USB connector and power jack extending beyond the former dimension. Three screw holes allow the board to be attached to a surface or case. Note that the distance between digital pins 7 and 8 is 160 mil (0.16"), not an even multiple of the 100 mil spacing of the other pins. The Mega 2560 is designed to be compatible with most shields designed for the Uno and the older Diecimila or Duemilanove Arduino boards. Digital pins 0 to 13 (and the adjacent AREF and GND pins), analog inputs 0 to 5, the power header, and the ICSP header are all in equivalent locations. Furthermore, the main UART (serial port) is located on the same pins (0 and 1), as are external interrupts 0 and 1 (pins 2 and 3 respectively). SPI is available through the ICSP header on both the Mega 2560 and Duemilanove / Diecimila boards. Please note that I2C is not located on the same pins on the Mega 2560 board (20 and 21) as the Duemilanove / Diecimila boards (analog inputs 4 and 5). Automatic (Software) Reset Rather than requiring a physical press of the reset button before an upload, the Mega 2560 is designed in a way that allows it to be reset by software running on a connected computer. One of the hardware flow control lines (DTR) of the ATmega8U2 is connected to the reset line of the ATmega2560 via a 100 nanofarad capacitor. When this line is asserted (taken low), the reset line drops long enough to reset the chip. The Arduino Software (IDE) uses this capability to allow you to upload code by simply pressing the upload button in the Arduino environment. This means that the bootloader can have a shorter timeout, as the lowering of DTR can be well-coordinated with the start of the upload. This setup has other implications. When the Mega 2560 board is connected to either a computer running Mac OS X or Linux, it resets each time a connection is made to it from software (via USB). For the following half-second or so, the bootloader is running on the ATMega2560. While it is programmed to ignore malformed data (i.e. anything besides an upload of new code), it will intercept the first few bytes of data sent to the board after a connection is opened. If a sketch running on the board receives one-time configuration or other data when it first starts, make sure that the software with which it communicates waits a second after opening the connection and before sending this data. The Mega 2560 board contains a trace that can be cut to disable the auto-reset. The pads on either side of the trace can be soldered together to re-enable it. It's labeled "RESET-EN". You may also be able to disable the auto-reset by connecting a 110-ohm resistor from 5V to the reset line; see this forum thread for details. Revisions The Mega 2560 does not use the FTDI USB-to-serial driver chip used in past designs. Instead, it features the ATmega16U2 (ATmega8U2 in the revision 1 and revision 2 Arduino boards) programmed as a USB-to-serial converter. Revision 2 of the Mega 2560 board has a resistor pulling the 8U2 HWB line to the ground, making it easier to put into DFU mode. Revision 3 of the Arduino board and the current Genuino Mega 2560 have the following improved features: 1.0 pinout: SDA and SCL pins - near the AREF pin - and two other new pins placed near the RESET pin, the IOREF that allow the shields to adapt to the voltage provided by the board. In the future, shields will be compatible both with the board that uses the AVR, which operates with 5V, and with the board that uses ATSAM3X8E, which operates with 3.3V. The second one is a not connected pin, that is reserved for future purposes. Stronger RESET circuit. Atmega 16U2 replace the 8U2. Source: Arduino Mega Pinout Diagram ### Development of a Simple Potentiostat Prototype with Arduino Uno for Electrochemical Experiments 1 Introduction Open-source development microcontrolled electronic boards like Arduino and Raspberry Pi are gaining popularity in the Research and Development field due to their versatility and ease of use across various applications. This paragraph focuses on one specific application, namely the potentiostat, which holds significant importance in the field of electrochemistry. The potentiostat is a frequently used electronic circuit in electrochemistry, employed to examine the electrochemical events occurring at a particular electrode. Conducting electrochemical studies often necessitates fine-tuning the applied conditions to conduct specific experiments, which can be facilitated by open-source software platforms like Arduino IDE. The primary objective of this endeavor is to showcase the complete development process of a straightforward potentiostat prototype, integrating an Arduino Uno board. Additionally, it includes a comprehensive explanation of the electronic circuit and how it synergizes with Arduino software functions to facilitate diverse electrochemical experiments. 1.1 The potentiostat circuit Figure 1 illustrates a straightforward potentiostat circuit, comprising the Control Amplifier (CA) functioning as a servo amplifier. The CA compares the measured Cell voltage with the desired voltage and adjusts the current flow into the cell, using an inverting configuration to provide negative feedback. The Voltage Follower (VF), also known as Electrometer, measures the voltage of the Reference Electrode (RE), and its output signal is incorporated into the feedback loop, allowing it to be measured whenever the cell voltage is required. An ideal VF possesses zero input current and an infinitely high input impedance. While current flow through the reference electrode can alter its potential, modern VF amplifiers typically have input currents that are negligible enough to ignore this effect. The Transimpedance Amplifier (TIA) converts the measured current at the Working Electrode (WE) into a voltage using the resistance Rf. In some experiments, the cell current remains relatively stable, while in others involving electrochemical reactions, the current can vary significantly, sometimes by orders of magnitude. Therefore, using different values of Rf becomes important to accommodate the measurement of widely varying currents. Another crucial aspect of this amplifier is ensuring a ground voltage in the WE by connecting the non-inverting input to ground. This setup enables the measurement of voltage values relative to the grounded WE. Figure 1 illustrates a straightforward potentiostat circuit, comprising the Control Amplifier (CA) functioning as a servo amplifier. The CA compares the measured Cell voltage with the desired voltage and adjusts the current flow into the cell, using an inverting configuration to provide negative feedback. The Voltage Follower (VF), also known as Electrometer, measures the voltage of the Reference Electrode (RE), and its output signal is incorporated into the feedback loop, allowing it to be measured whenever the cell voltage is required. An ideal VF possesses zero input current and an infinitely high input impedance. While current flow through the reference electrode can alter its potential, modern VF amplifiers typically have input currents that are negligible enough to ignore this effect. The Transimpedance Amplifier (TIA) converts the measured current at the Working Electrode (WE) into a voltage using the resistance Rf. In some experiments, the cell current remains relatively stable, while in others involving electrochemical reactions, the current can vary significantly, sometimes by orders of magnitude. Therefore, using different values of Rf becomes important to accommodate the measurement of widely varying currents. Another crucial aspect of this amplifier is ensuring a ground voltage in the WE by connecting the non-inverting input to ground. This setup enables the measurement of voltage values relative to the grounded WE. 2 Methodology The Arduino microcontroller boards, which are based on the ATMega microcontroller family, are renowned for their exceptional capabilities, affordability, and portability. Additionally, these boards offer digital outputs that can reach up to 5V, providing a range of ± 2.5V. This feature makes the boards suitable for producing the necessary output voltage range for conducting Electrochemical experiments when coupled with a voltage shifter circuit. 2.1 Potentiostat circuit design The Potentiostat Circuit depicted in Figure 2 draws inspiration from the potentiostat circuit proposed by [5]. However, significant differences exist between the two circuits. The major distinctions lie in the utilization of a single op-amp U1 for signal supply and shifting, which helps in minimizing the total number of op-amps required. Furthermore, instead of employing a ladder circuit to provide the signal from the I/O microcontroller ports to the potentiostat circuit, a straightforward RC filter has been introduced as an alternative approach. 2.2 Operation of the potentiostat Pulse Width Modulation, commonly known as PWM, is a technique that enables achieving analog-like outcomes using digital methods. It involves digital control to generate a square wave, a signal that alternates between on and off states. By varying the duration of the on and off periods, this pattern can simulate voltages between full-on (5 Volts) and off (0 Volts). However, in electrochemical measurements, it is preferable to have a DC-like signal with removed high frequencies. To achieve this, an RC filter has been introduced, comprising a resistance and a capacitor, as depicted in Figure 3. The RC filter is designed to effectively filter out high-frequency components, resulting in a smoother and more direct current-like signal for the electrochemical experiments. The RC filter's cutoff frequency was calculated to be approximately 0.5Hz, resulting in a -60dB attenuation at the 1kHz frequency, which corresponds to the PWM signal frequency used. Op-amp U1 functions as a Differential Amplifier (DA) and serves to drive the input signal from the Arduino PWM output. It adds an offset voltage value, derived from the voltage divider comprising 100K resistors and a 100K potentiometer at the non-inverting input, to shift the applied voltage to the cell within the desired range. The potentiometer allows the user to manually tune the applied voltage range according to their needs. As mentioned earlier, Op-amp U2 takes on the role of the Control Amplifier. It compares the measured cell voltage with the desired voltage and drives current into the cell using an inverting configuration to provide negative feedback. This behavior can be mathematically described by the following equations: [Here you should include the relevant equations, as the current equations were mentioned in the original text, but they were not provided: At the summing point, ????− = ????+  (1) ????− = ????+ = ???????????? (R4/????2 + ????4) (2) If ???????????? = 0 , ????′???????????? = (−????????????)????3/????1 (3) If ???????????? = 0 , ????′′???????????? = ???????????? (????4/????2 + ????4) (????1 + ????3/????1) (4) Using the superposition theorem, ???????????????? = ????′???????????? + ????′′???????????? (5) If all the resistors are of the same value, that is R1 = R2 = R3 = R4, then, ???????????????? = ???????????? − ???????????? (6) the op-amp U2 becomes a unity gain differential amplifier Op-amp U3 operates as a voltage follower, ensuring that the input signal remains isolated from the output, preventing any loading of the input. The voltage output from op-amp U3 is then connected to the CE. Op-amp U4 serves as a voltage follower, fulfilling the function mentioned earlier for the Electrometer. Both Op-amp U5 and U7 act as voltage shifters, adding 3.3V from the Arduino to the output signals of the potentiostat, i.e., the measured voltage and current. This is necessary because the Arduino can only read voltage values from 0 to 5000 mV. Consequently, the maximum applied voltage ranges that can be read by the potentiostat are determined to be from -3300 mV to +1700 mV. Although this range is not centered on 0V, it still encompasses most of the electrochemical application ranges. Op-amp U6 functions as a transimpedance amplifier, serving the purpose described earlier for the TIA. The 10-100 kΩ gain potentiometer is utilized to read currents within the range from µA to mA, which corresponds to where most of the electrochemical reactions occur. 2.3 Simulation The LTspice simulator was employed to model the circuit presented in Figure 2. For simulation purposes, a sine wave source named "Arduino_PWM" was incorporated into the circuit's input, imitating the triangular shape function typically employed in cyclic voltammetry. All op-amps used in the simulation were OP07, and they were powered with +9V and -9V in the rails. Figure 4 exhibits the transient response of the circuit over a 10-second period. The input function is visualized as a green positive sine wave with an amplitude of 2 Vpp. In order to center the input function (shown in green) at 0V, 1V was added using a voltage divider comprised of 100 kΩ resistors and a 100 kΩ potentiometer connected to the positive input of op-amp U1. The generated waveform applied to the cell through CE (V(ce), shown in blue) becomes inverted in comparison to the input signal due to the negative input signal inversion caused by the Differential Amplifier (U1). The current sensed by WE is transformed into an inverted voltage value through the Transimpedance Amplifier (op-amp U6). This signal is then inverted again and 3.3V is added by the Differential Amplifier U7, sending the resulting signal to the Arduino Analog input (A2). The resulting wave, displayed in purple, is observed to be in phase with the input signal in blue. Similarly, the voltage sensed by RE is sent to the Voltage Follower U4, which subsequently forwards it to the Differential Amplifier U5, converting it into an inverted value while adding 3.3V before being transmitted to the Arduino Analog input (A0). The resulting wave, depicted in red, is observed to be 180° out of phase with the input signal in blue, as expected. 2.4 Arduino software To execute Cyclic Voltammetry, it is necessary to apply a triangular-shaped output voltage curve to the Counter electrode. This scan is achieved by implementing a step function using two for loops: one for incrementing (forward direction of the cycle) and the other for decrementing (reverse direction of the cycle) the value in the analogWrite() function during each cycle, as depicted in Figure 5. The analogWrite() function adjusts the duty cycle of the PWM output pin, increasing and decreasing it respectively. Subsequently, the signal undergoes filtering and has an offset added by the potentiostat circuit before being applied to the Counter Electrode. The resulting output function is displayed in Figure 6. The range of the applied voltage can be defined by adjusting the maxvoltage value.   In Figure 6, the output voltage applied to the Counter Electrode during the execution of cyclic voltammetry function was measured using an oscilloscope (PicoScope 2000 series). The findAverage() function, illustrated in Figure 7, reads 9 values in each step and computes both the average voltage and average current values. To eliminate the offset introduced by voltage shifter op amp U7, the current averaged value has 3.3V subtracted from it. As the average voltage signal read is inverted by op amp U5, the value is then multiplied by -1 and 3.3V is added to obtain the actual voltage value. It's important to note that the calculated current value by the Arduino is actually a voltage value, which needs to be divided by the resistance of the TIA gain potentiometer to obtain the actual current measured at the working electrode. By adjusting the steptime constant, one can change the duration of each step, effectively determining the scan rate of the cyclic voltammogram. To facilitate specific electrochemical measurements, it can be advantageous to have a function that allows the user to easily control the duration of each step in the potential scan range. In pursuit of this objective, a constant potential over time function was developed, depicted in Figure 8. This function applies an initial constant potential, and subsequently, the user can modify the applied potential by adjusting the potentiometer connected to U1, thus introducing an offset. Additionally, the function prints the elapsed time of the experiment, which is particularly useful for EC-SERS measurements conducted over time. 2.5 Processing software During the execution of cyclic voltammetry, all the values measured by the Arduino Board are transmitted to the Serial port, where they can be observed in the serial monitor. However, it becomes valuable to store these values in a text file for further analysis. Additionally, real-time visualization of the cyclic voltammogram is quite useful for users to gain a better understanding of the ongoing electrochemical experiment. To achieve this, the Processing software, an open-source programming software sketchbook, was utilized. Processing offers a Serial library that reads serial values from a USB port and a Print Writer library to create or open text files and print values into them. Furthermore, Processing provides functions to create windows for drawing geometric shapes. The developed function creates a graph with the x-axis representing voltage and the y-axis representing current. It continuously reads the Serial values from a specified USB port in a cyclical manner, converting the values from strings to float numbers. These float numbers are then scaled to fit the graph's axis using the map function, and subsequently, they are displayed on the graph in the drawing window and saved in a text file. The function continues this process until it has read the last value from the Serial port. The code for this function is included in the Appendix. 2.6 Potentiostat circuit on a breadboard The initial step involved in the potentiostat circuit development was assembling and testing it on a breadboard, illustrated in Figure 9. Utilizing the breadboard's versatility for circuit development and testing, the potentiostat circuit underwent multiple iterations and adjustments before being transferred to a final copper strip board. 2.7 Transfer to an Arduino shield board format In order to enhance the potentiostat's compactness and durability, the circuit was migrated to a copper strip board. The components were soldered on the top side, while the connections were established by soldering wires on the back side of the board. You can observe this transformation in Figure 10. The Potentiostat board was designed to fit on top of the Arduino, and the connections were established using soldered pins, as illustrated in Figure 11. 2.8 Potentiostat testing and current resolution To assess the functionality of the fabricated potentiostat and verify its expected performance, 10 to 20 kΩ resistors were employed. The resistors' well-known response serves as an excellent reference for evaluation, as the measured current responds linearly with a slope value of (1/R) when the voltage is varied. To conduct the evaluation, the resistors were connected between the working electrode and reference electrode, simulating the cell resistance. Additionally, a small resistor (100 Ω) was connected between the reference and counter electrode to control the applied potential. A cyclic voltammetry (CV) of the resistors was recorded, and the resulting plot is depicted in Figure 12. Based on the data presented in Table 1, the calculated resistance values were found to be 9.992 ± 0.033 kΩ and 19.948 ± 0.098 kΩ for the 10 kΩ and 20 kΩ resistors, respectively. These values exhibit a close alignment with the 5% tolerance of the resistors used. The reference electrode voltage resolution was determined to be the minimum resolution of the measurement circuit, as calculated in equation 7. 10???????????? ???????????? ???????????????????????????????????????? =5000 ????????/210 = 4.8 ???????? ≈ 5????????   (7) The current measurement is achieved through the transimpedance amplifier and the resistance Rf. The voltage drop across Rf is connected to one of the microcontroller's ADC channels. To determine the current, Ohm's law is implemented in the control software program based on the measured voltage and the value of Rf. The resolution of the current measurement is dependent on both the voltage ADC resolution of the microcontroller, which is 5 mV as calculated in equation 7, and the value of Rf. The minimum detectable current by the potentiostat circuit can be calculated using Ohm's law, as shown in equation 8. Resolution =5 ????????/100 ???????? = 0.05 ????????     (8) To experimentally evaluate the current resolution of the potentiostat, the maximum cell resistance that the potentiostat could accurately read without introducing significant errors was determined. The gain potentiometer in the Transimpedance Amplifier (TIA) was adjusted to its maximum value of 100 kΩ, and IV curves of 100 kΩ, 200 kΩ, and 400 kΩ resistors were measured. The results of these measurements are depicted in Figure 13. In the experiment, it is evident that as the resistance increases, the R-squared value (R2) decreases. However, with a cell resistance of 200 kΩ, the R2 value of the linear fit exceeded 0.9. By utilizing the 200 kΩ resistor, the current was measured over time under various applied potentials, as depicted in Figure 14. It is noticeable that the current values can be differentiated from each other, despite the presence of considerable noise in the signals. Although the calculated current resolution value was 0.05 µA, experimental results revealed that it fell within the range of 1 µA due to the presence of noise. 3 Electrochemical performance 3.1 Design of an electrochemical cell To facilitate electrochemical measurements, a straightforward Electrochemical Cell was devised, as depicted in Figure 15. The support structure consists of two rectangular-shaped slides, each with the dimensions of a standard glass slide, securely fastened together with screws. The central part of the upper slide forms the cell, which is round in shape. All components are made from non-conductive polymer material. To prevent any solution leakage, an o-ring with the same diameter as the cell was inserted between the slides. 3.2 Electrodes For the cyclic voltammetry measurements conducted in the developed electrochemical cell, Platinum and Carbon electrodes (acquired from Zimmer and Peacock) were utilized, as depicted in Figure 16. To establish contact between the wires and the screen-printed electrodes, silver paste was deposited and allowed to dry overnight. Subsequently, UV-curable glue was applied over the contacts to provide enhanced support and isolate each contact from one another. 3.3 Comparison with a commercial potentiostat To assess the potentiostat's performance, cyclic voltammetry was conducted using the standard reversible Ferricyanide-Ferrocyanide redox couple. A comparison of the cyclic voltammetry results between the developed potentiostat and a commercial potentiostat (Ana Pot from Zimmer and Peacock company) is presented in Figure 17. Both potentiostats demonstrate oxidation and reduction peaks occurring at the same potentials, with the same peak current observed in both cyclic voltammograms. However, there is a consistent offset in the current measured between the two voltammograms. This offset can be attributed to a difference in the nominal resistance value of the 1 kΩ resistor, where 3.3 V are added in the Transimpedance Amplifier (TIA). While the code assumes that 3.3 V are added, a slight change in the resistor values can result in a different offset value from 3.3 V. 3.4 Diffusion coefficient determination To demonstrate the capabilities of the potentiostat, cyclic voltammograms were conducted at various scan rates. These experiments allowed for the calculation of the diffusion coefficient of potassium ferricyanide in a solution with a known salt concentration using the Randles-Sevcik equation at a temperature of 25 °C: ???????? = 2.69 × 10^5 × ????^2/3 × ???? × ????^1/2× ????0 × ????^1/2   (9) The Randles-Sevcik equation involves various parameters, including 'n' for the number of electrons transferred, 'A' representing the working electrode area in cm^2, 'D' denoting the diffusion coefficient in cm^2/s, 'C0' signifying the concentration in mol/cm^3, and 'v' representing the scan rate in V/s. The Carbon working electrode used in the experiment had a diameter of 4 mm. The electrochemical cell was filled with a solution containing 5 mM potassium ferricyanide (from Sigma Aldrich) in 0.1 M NaCl (from Breckland Scientific Supplies Ltd). The potential was alternated between 0.35 V and -0.85 V at various scan rates, specifically 0.8, 0.11, 0.14, 0.25, and 0.35 V/s. The recorded data is illustrated in Figure 18. As anticipated, Figure 18 clearly demonstrates that the recorded electrochemical current increases as the scan rate rises. The inset plot illustrates the relationship between the anodic peak current and the square root of the scan rate, and as expected, it follows a linear pattern with a high R-squared value of 0.9993. By utilizing the Randles-Sevcik equation and calculating the slope of the linear fit, the diffusion coefficient of potassium ferricyanide is determined to be 4.3 × 10^-6 cm^2/s, which aligns well with the value found in the literature [6]. Any deviation between the calculated and literature values could be attributed to the previous calibration of the scan rates before conducting cyclic voltammetry experiments. 4 Conclusions and perspectives The primary aim of this study was to design and evaluate a straightforward and budget-friendly potentiostat based on Arduino. It has been successfully demonstrated that this potentiostat can effectively carry out various electrochemical measurements, including cyclic voltammetry and potential step voltammetry. Additionally, the software allows for fine-tuning the scan rate of cyclic voltammetry measurements. The data acquisition is facilitated through the serial USB interface, enabling real-time display using the open-source processing software environment as a visual interface. Moreover, the acquired data can be saved in text file format for further analysis. References: [1] Kaswan, K. S., Singh, S. P., & Sagar, S. (2020). Role of Arduino in real-world applications. International Journal of Science and Technology Research, 9(1), 1113–1116. [2] Bard, A. J., & Faulkner, L. R. (2001). Electrochemical methods: fundamentals and applications (2nd ed.). New York. [3] Scozzari, A. (2008). Electrochemical Sensing Methods: A Brief Review. In NATO Science for Peace and Security Series A: Chemistry and Biology (pp. 335–351). [4] Franklin, R. K., Martin, S. M., Strong, T. D., & Brown, R. B. (2016). Chemical and Biological Systems: Chemical Sensing Systems for Liquids. In Reference Module in Materials Science and Materials Engineering. Elsevier. [5] Aremo, B., Adeoye, M. O., Obioh, I. B., & Adeboye, O. A. (2015). A Simplified Microcontroller Based Potentiostat for Low-Resource Applications. Open Journal of Metallurgy, 5(4), 37–46. doi: 10.4236/ojmetal.2015.54005. [6] Meloni, G. N. (2016). Building a microcontroller-based potentiostat: An inexpensive and versatile platform for teaching electrochemistry and instrumentation. Journal of Chemical Education, 93(7), 1320–1322. doi: 10.1021/acs.jchemed.5b00961. Appendix Processing code import processing.serial.*; Serial mySerial; PrintWriter output; void setup() { mySerial = new Serial( this, "COM3", 9600 );//choose the USB port for serial imput output = createWriter( "data.txt" );//creates a text file in the same directory of the Sketch size(600, 400); // set the window size: background(255);// set initial background strokeWeight(2); // Default line(40, 360, 580, 360);//x axis line(40, 40, 40, 360);//y axis line(40, 360, 40, 365);//x line lower limit line(580, 360, 580, 365);//x line upper limit line(302, 360, 302, 365);//0 line textSize(15); fill(0, 102, 153); text("Voltage (V)", 285,390);//X axis label fill(0, 102, 153); text("-1.2", 30, 380); fill(0, 102, 153); text("0", 300, 380); fill(0, 102, 153); text("1.2", 575, 380); fill(0, 102, 153); rotate(-PI/2); text("Current", -235, 30); // y axis label } //function that reads the serial values as strings and converts them in num bers then it plots them and prints them on text file void draw() { if (mySerial.available() > 0 ) { String value = mySerial.readStringUntil('\n'); if ( value != null ) { println(value); int p1 = value.indexOf(" "); int l=p1-1; String ss = value.substring(0, l+1); String ss1 = value.substring(p1); float voltage = float(ss);// convert to a number. float current = float(ss1);// convert to a number. println(voltage + " " + current); output.println(voltage + " " + current); float volt = map(voltage, -1.2, 1.2, 40, 580);//map to the screen width float curr = map(current, -1, 1, 360, 40); //map to the screen height ellipse(volt, curr, 3, 3); } } } //funtion to close the plot and save the file when any key of the keyboard is pressed void keyPressed() { output.flush(); // Writes the remaining data to the file output.close(); // Finishes the file exit(); // Stops the program }     ### esp32 devkit v1 pinout GPIO pins of ESP32 DEVKIT As previously stated, the chip on this board contains 48 GPIO pins, although not all pins are reachable via dev boards. The ESP32 devkit features a total of 36 pins, with 18 pins located on each side of the board, as illustrated in the image provided. There are 34 GPIO pins with various functionalities that can be set using specific registers. Various GPIOs, such as digital input, digital output, analog input, and analog output, as well as capacitive touch and UART communication, are among the numerous features mentioned. digital input GPIO pins It comes with six GPIO pins specifically meant for digital input. Setting them up as digital output pins is not feasible. They do not have push-pull resistors that are integrated. They can only be used as digital input pins. Interface GPIO has a pin at number 34. GPIO interface's Pin 35. GPIO interface pin 36. The thirty-seventh pin on a General Purpose Input/Output (GPIO) interface. GPIO pin number 38. Set GPIO pin to 39 Check this tutorial: How to use push button with ESP32 Analog to digital converter or Analog GPIO pins This board has the ability to accommodate 18 ADC channels. Each channel has a 12-bit capacity. Therefore, it possesses a high-quality resolution. It is capable of measuring analog voltage, current, and any analog sensor that outputs in analog voltage. These ADCs are capable of being utilized while in sleep mode to decrease power usage. The resolution of each ADC channel is 12 bits, which is equivalent to 3.3 volt is the reference voltage and 4095 represents the smallest step of the ADC. Therefore, the smallest voltage detectable by these ADC channels is approximately 80 microvolts. Any result below this will be considered a mistake. In future tutorials, I will go into more detail about it. The main limitation of the ESP32 ADC is its non-linear performance. Please refer to the diagram for more details. Below is the display of the correlation between Analog pins and GPIO pins. Below is the display of the correlation between Analog pins and GPIO pins. ADC1 channel 0 is connected to pin GPIO36. ADC1 channel 1 corresponds to GPIO pin 37. ADC1 channel 2 corresponds to GPIO pin number 38. ADC1 Channel 3 is connected to GPIO39. ADC1 channel 4 corresponds to GPIO pin 32. ADC1 channel 5 corresponds to GPIO pin 33. ADC1_CH6 is equivalent to GPIO34. ADC1 channel 7 corresponds to GPIO pin 35. ADC2 channel 0 corresponds to GPIO4. ADC2 channel 1 is connected to GPIO pin 0. ADC2 channel 2 is connected to GPIO2. Analog Digital Converter Channel 2 Channel 3 is connected to General Purpose Input Output pin 15. ADC2 channel 4 corresponds to the GPIO pin 13. ADC2 channel 5 corresponds to GPIO pin 12. ADC2 Channel 6 corresponds to GPIO pin 14. ADC channel 7 corresponds to GPIO pin 27. ADC2_CH8 corresponds to GPIO25. ADC2 Channel 9 corresponds to GPIO pin 26. Check this tutorial : How to use ADC of ESP32  Digital to analog converter pins The development board has onboard two 8-bit digital to analog converter incorporated on the board to convert digital signal into analog signal. DACs in their function have the aim of converting numeric code values into suitable voltage or current levels. Some of the uses are in voltage control, pulse width modulation control and many others. Since this board has two embedded DACs, it can provide two analog signals at the same time Therefore, it can measure or stimulate real systems by controlling analog signals. DAC_1 is equivalent to GPIO25. DAC_2 is equivalent to GPIO26. Touch sensor pins of Devkit There are 10 capacitive touch sensors integrated in ESP-WROOM-32. By using this development board, you can eliminate the need for using separate touch sensors in your project. These capacitive touch sensors can recognize different electrical and magnetic waves, including the ability to detect magnetic fields. These touch sensors enable the use of a condensed set of pads instead of physical push buttons. TOUCH0 is equal to GPIO4. TOUCH1 is equivalent to GPIO0. Contact2 - GPIO2 There is a connection between TOUCH3 and GPIO15. TOUCH4 is equivalent to GPIO13. Touch5 and GPIO12 are the same. TOUCH6 is equivalent to GPIO14. TOUCH7 is equivalent to GPIO27. TOUCH8 is equivalent to GPIO33. TOUCH9 is equivalent to GPIO32. How to use touch pins and how to use touch pins as a digital button?  Memory card interfacing pins Support for interfacing with memory cards through these pins is also available. Support for interfacing with memory cards through these pins is also available. HS2_CLK and MTMS are interchangeable.HS2 command - Output change.HS2_DATA0 is the same as GPIO2.GPIO4 is linked with HS2_DATA1.HS2_DATA2 - MTDI - HS2 data 2 - MTDIHS2_DATA3 – MTCK stands for High Speed 2 Data 3 – Maintenance Check. External interrupt pins External interrupts can be triggered using any of the general purpose input output pins. External interrupts provide significant benefits. Instead of constantly checking the status of a pin, you can use it as an interrupt to track changes. PWM GPIO pins PWM can be produced on any GPIO pins except for digital input pins 34 to 39. Because these pins cannot be used as digital output pins. PWM signals are signals that are produced digitally. PWM pins can reach a maximum frequency of 80 MHz. By following these instructions, you have the ability to assign a different pin as a PWM pin. Select a particular frequency for pulse width modulation. Select either the duty cycle or pulse duration. Select the PWM channel. ESP32 provides a grand total of 16 PWM channels available for utilization. Assign a digital pin for selecting the PWM channel. Complete step by step guide on ESP32 PWM with examples  PWM motor control feature The internal registers of the ESP32 chip are also utilized to support motor control functionality. To make use of this functionality, just configure these registers with the GPIO pins you want. More information about these registers is available in the datasheet. Here are the names of the registers. PWM1_OUT linked to input pins IN0~2. Input signals for the initial three fault inputs of PWM channel 0. PWM1_FLT_IN0 converted to 2. Record input signals on channels 0 through 2 of PWM0. Capture inputs 0 to 2 using PWM1. Synchronize Input 0 to 2 with Pulse Width Modulation 0. Synchronize PWM1_SYNC_IN0 with 2. I2C communication pins There are designated pins for two-wire I2C communication. One pin facilitates data transfer, while another pin aids in clock synchronization. GPIO21 is the pin named SDA. GPIO22 is the SCL pin. Published is an article on how to interface an I2C LCD with ESP32. This article expounds on how to use I2C pins in detail to ensure that users can implement it in their devices. For further details, I would encourage you to go through the whole article. I2C LCD interfacing with ESP32 RTC pins of ESP32 devKit This board also includes RTC pins that can be utilized to wake up the ESP32 from sleep mode. RTC_GPIO0 to GPIO36. RTC_GPIO3 is also known as GPIO39. RTC_GPIO4 corresponds to pin number GPIO34. RTC_GPIO5 is also known as GPIO35. RTC_GPIO6 is equivalent to GPIO25. RTC_GPIO7 corresponds to GPIO26. RTC_GPIO8 is equal to GPIO33. RTC_GPIO9 is equivalent to GPIO32. RTC_GPIO10 is equivalent to GPIO4. RTC_GPIO11 is equivalent to GPIO0. RTC_GPIO12 is equivalent to GPIO2. RTC_GPIO13 through GPIO15 RTC_GPIO14 is equivalent to GPIO13. RTC_GPIO15 corresponds to GPIO12. RTC_GPIO16 is equivalent to GPIO14. RTC_GPIO17 to GPIO27 - RTC_GPIO17 until GPIO27. Hall sensor pin A complete guide on How to use built-in hall effect sensor of ESP32 It is equipped with a single hall sensor that is utilized for detecting the magnetic field. When you place this development board in a magnetic field, ESP32 produces a slight voltage that can be detected by any pin. I will publish a tutorial in future posts. The above image displays additional characteristics of the ESP32 development board and its pins.   ### Online Arduino Simulator Here is the list of our top 5 online Arduino simulators. Virtual Breadboard for Arduino: Since its launch in 2005, Arduino has grown to be popular than the previous models since it is based on open, both in terms of hardware and software architecture, mostly used by hobbyists, educators and professionals and is commonly used in the robotics industry. Provided with a numerous online community, as well as development boards and hardware accessories for affordable prices, this site is considered the best to start working with the embedded devices. However, if you are interested in learning programming but do not have an Arduino board, or feel confused by the multitude of hardware options available, what can you do? This is the role of simulation software. Virtual Breadboard for Arduino is an educational application created to assist users in getting started in the thrilling field of physical computing using the Arduino microcontroller and electronic circuit models based on the 'Breadboard'. Screenshot for this Online Arduino Simulator: arduino simulator vbb achieve success in programming Arduino using Visual Basic. • Gain knowledge from 75 pre-installed Arduino demonstrations. • Discover a variety of sensors, motors, and lights to choose from • Gain knowledge about the functions of Arduino commands • Make adjustments to your own code samples Download Arduino Simulator: Get the Student Version of Virtual Breadboard Arduino Simulator by downloading it. If you are seeking Arduino Projects / Programs with simulation, you can find a list of Projects created with proteus simulation below. Simulator for Arduino by Virtronics The most complete Arduino Simulator currently available is Simulator for Arduino (check out the latest video below). arduino simulator by virtronics Advantages and characteristics of the Arduino Simulator include: The capability to educate and illustrate the internal mechanisms of an Arduino code. Try out a draft without the physical equipment, or before buying any equipment. Troubleshoot a sketch. Present a project to a prospective client. Create a complex outline more quickly than with the use of physical equipment. Obtain the complimentary version with a short delay timer for loading a sketch included. After being ready, you can upgrade to the Pro Version. The advanced edition of the Arduino Simulator is now in use in many countries on six continents. The download contains a zip file with a setup.exe file for installing an exe file, along with help files, images, and examples. Designed for Arduino Uno, Mega, and other commonly used Arduino boards, it carries out the following tasks: Goes through the program sequentially, one line at a time. Should a new line be chosen, the program will resume from that specific point. Executes digitalWrite, digitalRead, and PinMode on pins 0 through 53. analogRead applies to pins 0 through 16, while analogWrite is used for digital pins 0 to 53. Imitates Serial, LCD output, Ethernet, Servo, SD card, EEPROM, SoftSerial, SPI, Wire The operations of while, for, and switch functionality, as well as the do while loop. Subroutines with multiple levels that accept arguments Monitor variables live. Options include entering, moving past, exiting, or running in various modes. Capability to modify drawing or launch in Arduino Integrated Development Environment Tabs are used to keep the sketch's files separate. Help that is customized based on the context in which it is needed. 2 and 4 line LCD can only be used with a modified CGRAM. 2 arrays with two dimensions (not initialized) BreakPoint now comes with a choice that depends on a condition. enable automatic loading of custom libraries following Library Directory configuration Alter the Simulator's font, size, and style. High-tech timepiece designed for convenient monitoring of different variables. Reduce mode for demonstration or training. Restricted assistance for personalized libraries Limited assistance for pointers and structure Restrictions: Pointers are not operational - a few sketches may function with pointers, but in general pointers are nonfunctional. Libraries, structures, classes, and enums customized for specific needs may function as expected or may encounter errors. Additional small problems related to complex C++ instructions. Firmata requires improvements. The mouse object is operational, but its full functionality hasn't been added yet. function pointers defined using typedef are not implemented Interface not yet developed for MAC and iOS platforms. Basic typedefs are functional, however, typedefs involving enums or structs need to be developed. Download Link: Simulation software for Arduino developed by Virtronics   CodeBlocks Arduino IDE with Simulator: CodeBlocks Arduino IDE is a customized distribution of the open-source Code::Blocks IDE enhanced for Arduino development. It provides more demanding software developers with everything a modern IDE should have including code foldering, code completion, code navgiation, compiling as well as uploading for Arduino. With a dedicated project wizard, it’s easy create a ready-to-go Arduino project. The distribution integrates latest Arduino core files, standard Arduino libraries, AVR toolchain, Arduino Builder, a serial terminal and most interesting, an API-level Arduino simulator (under development).   code block ide with simulator Features: dedicated project wizard for Arduino development integrated Arduino core files and libraries compiled core files cached for faster compiling speed (comparing to original Arduino IDE) integrated pre-configured AVR compiler toolchain popular Arduino boards supported as build targets uploading HEX to Arduino boards (Leonardo supported) by running the built target Arduino API-level simulator (very early stage) integrated (as a build target) Download Code Block Simulator: Arduino simulator by Code Block Simuino Arduino Simulator: Simuino functions as a Pin Simulator for Arduino UNO/MEGA. The terminal version (currently v0.1.9) can be downloaded from www.simuino.com. The latest versions are not on code.google.com for downloading. Execute your sketch and assess the input/output status of both the digital and analog pins. Simuino is operated through ncurses and can be launched in a terminal window. Displays animation in real-time based on current delays in drawing. Ideal for those looking to begin building Arduino Sketches, this tool is perfect. Scenarios involving analogRead, digitalRead, and External Interrupts can be constructed as well. The aim is to simplify the process of creating a rough draft. You are able to check the operation even without access to the Arduino board. Simuino executes the sketch and displays the condition of the digital and analog pins, as well as the serial output. Simuino Arduino Simulator Screenshot Source: C++ Platform: Linux (Ubuntu) For more information, visit www.simuino.com Way of working: 1. Start Simuino 2. Load your sketch into your editor of choice. 3. Edit logic,scenario data, log-text. 4. Load sketch into Simuino (command load in Simuino) 5. Evalute simulation by stepping in Simuino. Set values on the fly. Repeat 3,4,5 until wanted result. Download This Simulator: Download Simuino Arduino Simulator 123D Circuits Online Arduino Simulator: 123D Circuits is an internet-based electronics simulator and collaborative design tool that was created as a result of the collaboration between Autodesk and Circuits.io, starting in Fall 2013. Ideal for newcomers looking to easily start designing using Arduino, Raspberry Pi, or other platforms directly in their web browser.   123d circuits - online arduino simulator Using the user-friendly breadboard editor or the more complex electronic schematics or PCB editors, virtual circuits can be generated. Additionally, there are pre-made components and designs accessible for implementation. The code editor allows for programming of the recently developed circuits, with real-time display of operation. You have the option to create and purchase the electronics according to your own design. 123D Circuits is a service that is free to use, but if you choose to upgrade your membership for starting at US$ 12 per month, you will receive discounts on orders and the option to keep your designs private. Online Link to access Oline Arduino Simulator: http://123d.circuits.io/ ### Open source multi-channel EEG/ECG/EMG Introduction Electrodes on the skin are used to detect muscle (EMG), brain (EEG), and heart (ECG/EKG) functions. These electrophysiological measures are commonly utilized for clinical use, research investigations, and even by enthusiasts such as those intrigued by brain computer interfaces. Numerous commercial systems are categorized as "medical grade", indicating that they come at a high price and offer exceptional accuracy (16-24 bits), individual electrical isolation, and support. Nonetheless, there are plenty of budget-friendly "hobby grade" choices to consider with fewer features. This article presents a "research grade" option with comparable accuracy and security to medical devices, able to incorporate time stamps for data averaging in experiments, and available at a lower cost. Nevertheless, it should be noted that these designs lack FDA approval or support, therefore use them at your own discretion. Overview This open-source project is designed to collect top-notch electrophysiological data using a front-end that works with ADS129n. These chips can measure with high precision using varying numbers of channels (4, 6, or 8) and can be interconnected for additional channels. The communication process of the ADS is done through an SPI connection. In this design, an Arduino-compatible microcontroller functions as an intermediary between SPI and a Bluetooth or USB Serial Port Connection. Software coded in Matlab and Processing languages allow a computer to receive these serial port signals. To prevent electrical interference, use a wireless bluetooth module or an electrically isolated USB connection when connecting the computer to the Arduino, such as the $8 JY-MCU or the $11 ADUM4160. One fantastic feature of the ADS129n is its ability to provide 24-bit accuracy. This allows for a single hardware design to be used for a variety of applications, ranging from EEG to ECG and EMG. Conversely, a 16-bit setup is necessary for adjusting to the weak signals of scalp EEG or the strong signals from superficial muscles in EMG. The chip contains sophisticated capabilities for data filtering and ECG data collection. The ADS1299 shares the same pin layout as the ADS1298, but has better accuracy while consuming more power. Signals from the host computer can control the amplifier by setting parameters like channel number, gain, and sampling rate. The software and datasheets contain guidelines on how to complete this task. Once the computer selects the settings, an RDATAC command prompts the amplifier to begin transmitting data without interruption until a SDATAC command is given to pause it. In my code, the Arduino converts serial port signals to SPI signals, giving the host software complete control over the ads129n configuration. The code stays unchanged regardless of whether using SPI or serial port communication. However, my Arduino code changes the format of RDATAC data while transferring it from SPI to the serial port. This is because the SPI interface offers a greater amount of bandwidth (for example, the Teensy 3 can theoretically reach up to 21 Mbs), unlike Bluetooth connections that have lower limitations (such as low-cost Bluetooth modules usually maxing out at .4 Mbs). For each channel in every sample, the ADS129x SPI connection will send out 3+3*n bytes of data, where n is either 4 (ADS1294), 6 (ADS1296), or 8 (ADS1298, ADS1299). Therefore, for every sample, the ADS1298 sends out 27 bytes of data when recording a single channel of data (3 bytes). To conserve bandwidth, this project sends the total of 1 plus 3 times the quantity of ACTIVE channels. Therefore, opting to deactivate a channel labeled as "input shorted" will not require any bandwidth. The data sent first through the serial port is the same as the header byte in the SPI data format. This initial byte includes a unique signature for the first byte in every sample, as well as 4 bits that show the status of the 4 GPIO ports used to record time stamps. While it may appear challenging, the Matlab and Processing software demonstrations illustrate how to utilize these links. Implementation Click here to download the software and related documentation In this application, my preference is to utilize a Teensy 3.0 (T3). The BlueTooth communication is cost-effective, compatible with 3.3v signals, and capable of achieving high speeds (up to 460800 bps based on my experience). The T3 includes a hardware SPI port on pins 10-13 and another hardware serial port on pins 0 and 1 that can be utilized for a bluetooth module. The connections are depicted in the image. The Bluetooth module is connected to pins 0 and 1. Pin 4 is linked to the ADS "START". Pin 5 is linked to the ADS notification for when data is ready, identified as "DRDY." Pin 10 is linked to CS (Chip Select). Pin 10, known as DOUT, is linked to the Data In (DIN) of the ADS, while Pin 11, labeled as DIN, is connected to the Data Out (DOUT) of the ADS. Pin 13 is linked to the ADS's "CLK" input, which stands for clock. You can choose to connect pin 2 to PWDN, pin 3 to RESET, and pin 6 to CLKSEL. To exclude these connections, PWDN, RESET, and CLKSEL ideally should be set to a high voltage (3.3v, DVDD). However, on the demo boards they are already at a high voltage and can be left disconnected. You always have the option to send the RESET command as an op-code from software. The T3 will also power the ads129n front end board by supplying 5v, 3.3v, and 0v (ground), and linking the ads129n analog ground (AGND) to the T3 0v with a 0 Ohm 1/10 Watt resistor to act as a fuse for protection of the participant. The following image displays the placement of these pins on the front end boards for the ads129n. This code works with an Arduino Due as well, though in my experience the BlueTooth modules are limited to around 115200 bps speeds, so it is less well suited for wireless communication. However, it is important to note that the upcoming EEG Mouse design will have the same microprocessor as the Due, so software should be optimal for that application. The essential wiring for connecting a Due to the ads1298 or ads1299 front end kits is shown on the left. Note that this figure shows the BOTTOM of the front end board (so that the header pins are accessible) and the top of the Due (so its pins are also accessible). The J4 jumper gets the 5v, 3.3v and 0v (ground) power. The J3 jumper has the signal pins – the required pins are pins are the SPI clock (SCK), Data Out (DOUT), Data In (DIN), chip select (CS), Data Ready (DRDY) and Start (START). Again, note that the Arduino and ads129n cross their DIN/DOUT – in the figure I use ‘->DIN’ to show that this Due (DOUT) pin connects to the ads129n DIN pin. You must also connect the ground to of the Due to the analog ground of the ads129n – this should be done with a zero ohm 1/10 watt resistor (that acts as a fuse for protecting the participant). The diagram also shows the pins for connecting a blue tooth module (TX1, RX1) – remember the bluetooth module also requires power. Please note that for wired communications my software assumes you will connect your Due to your computer’s USB port with the Due’s fast “Native” port rather than the slow “Programmer” port (the Due has two USB sockets). In theory, you could use other Arduino compatible devices for connecting to the ads129n devices. However, the Arduino would need to support SPI and would need to have a high speed serial port (older designs like the Uno have very slow serial connections). Two possible candidates are the Teensy 2.0 and Arduino Leonardo. However, be warned that these devices use 5 volt signals that may not work with and could even damage the ads129n (which can only handle signals up to ~3.4 volts). Therefore, you would need to add voltage dividers to each signal line. Therefore, the T3 and Due (that natively operate at 3.3v) are simpler for this application, and generally provide better performance. You can purchase the ADS1298 (ideal for ECG) or ADS1299 (ideal for EEG) Performance Demonstration Kits for about $200. The ADS1298 kit can connect to a standard EMG connector (about $40). For EMG or EEG you will probably be better served with the ADS1299 kit connected to some DIN 42-802 sockets (see Nick Johnston’s schematic and photo). In the near future expect to see a less expensive, smaller open source design that can be used instead of the demonstration kit (e.g. the EEG Mouse team’s REV1 board will integrate an Arduino compatible microcontroller on the same board as an ADS1299, the previous REV0 design can be fabricated and used instead of the demonstration kit). Testing your wiring The initial code for your Arduino/T3 is "adsArd_hello_world" to verify the correct connection with the ads129n. Install this program on your Arduino/T3 with a USB cord (ensure to plug into the 'Native' not 'Programmer' port on a Due) and then click on Tools/SerialMonitor. Regularly, you will notice a message similar to "Device Type (ID Control Register): 62 Channels: 8" displayed. If this is successful, it means all your connections are correct. If the number of channels indicated is "0", there is an issue.   For more detail: Open source multi-channel EEG/ECG/EMG ### IoT for coins Need to organize your coins? Get some help with this project. Things used in this project Hardware components Arduino MKR1000 × 1 ATX Power Supply × 1 Adafruit coin acceptor × 1 Adafruit Proto Screw Shield × 1 Adafruit GRAPHIC ST7565 POSITIVE LCD (128X64) WITH RGB BACKLIGHT + EXTRAS × 1 Adafruit LOCK-STYLE SOLENOID - 12VDC × 1 Seeed BADGEr_v4 × 1 Resistor 330 ohm × 3 Resistor 22.1 ohm × 1 Capacitor 10 µF × 1 Capacitor 100 nF × 2 Rotary potentiometer (generic) × 1 Texas Instruments lm386 × 1 Buzzer × 1 Jumper wires (generic) A lot of wire. and a lot of colors × 1 Software apps and online services Arduino IDE Microsoft Visual Studio 2015 Microsoft Azure QR generator. CircuitMaker by Altium Circuit Maker Fritzing EagleCAD Seeed WyoLum for Badger paint Hand tools and fabrication machines Laser cutter (generic) 3D Printer (generic) Soldering iron (generic) Hot glue gun (generic) Dremel Rotary tool Story Preview IoT for Coins I made an IoT APP for coin with sorter, with a lot of inspiration on Math and Physics, I made this because as maker I need an interactive way to make profit when going out to show projects, this can be a great add up for arcades, faires, or fashioned music player. The chocolate Genuino Easter egg is a small reward you get if you manage to open the small door. Install Arduino Software You will need the Arduino IDE to program the Arduino, wich is the main program for this project. Go to Arduino Download page Arduino download page Install the Arduino/Genuino MKR1000 The Arduino/Genuino MKR1000 usually isn´t installed with the default IDE, so you will need to download and install the board, to do this follow these simple instructions. Tools > Board > Board Manager... > MKR1000 > Install At this point you can connect your Arduno MKR1000 to your computer, and upload the blink example to verify that you got connection. The LED for the Arduino MKR is on PIN 6. You can use This Blink example. void setup() { pinMode(6, OUTPUT); } void loop() { digitalWrite(6, HIGH); delay(1000); digitalWrite(6, LOW); delay(1000); } Testing the Arduino/Genuino MKR1000 Using the Windows Remote Arduino Control Go to Windows 10 Store and type Arduino, and download Windows Remote Arduino Control. Windows Store for Arduino To use Windows Remote Arduino Experience you need to upload the Stardard firmata example. Files > Examples > Firmata> StandardFirmata and play with Window 10 app Notes for the App The standard Firmata works via USB @57600 Play with the Firmata You can play with this handy APP time to time, specially to test sensors or pinouts without writing a lot of code. WiFi You will need to install some libraries so you can use the WiFi and the Microsoft Azure IOT, the default WiFi library doesn't work on the MKR1000 Scketch > Include Library > Manage Libraries ... Bridge to make ATX work. Install the Wifi101 and Azure IoT libraries. To connect the WiFi use the Wifi101 Example, just keep in mind that you have to put your network settings on the Arduino IDE. To get some fun, you need to find the following lines and overwrite to fit your network. sometimes if no pasword required (open network) you can put a bank password and still works. char ssid[] = "yourNetwork"; // your network SSID (name) char pass[] = "secretPassword"; // your network password For the Windows Remote Arduino Experience you need to use the Standard Firmata WiFi and do some small changes. besides Network and password. Find and uncomment the following line. You must have only one uncommented  option of 3. #define WIFI_101 On the Windows Arduino Remote Experience will ask you for IP and port, you can uncomment the following line to get your IP on the Genuino MKR1000, but by doing this, maybe you need to open the serial port before using Windows aRduino Experience... The port in this Firmata is 3030. //#define SERIAL_DEBUG AZURE IoT Get an Microsoft Azure IoT account, i suggest you to do it with a Microsoft e-mail. Get Azure Account Start here Select Azure ioT HUB Once you created your suscription, look for a suscription token... don't share the number. Red one is the suscription Token For the program, use the red maked, and the host name to publish. and the one on the right is your host page. On Arduino IDE use the client to post on Azure as follows client.println("POST /tables/NameOFProject HTTP/1.1"); //Host page name client.println("Host: internetofthingsservice.azure-mobile.net"); //Token name client.println("X-ZUMO-APPLICATION: TokenMustbeSecretAllTimes456789"); client.println("Content-Type: application/json"); client.println("Content-Length: 97"); client.println(); client.println(bodyMessage); On Body Message You put all the sensors and values you want. Now with Microsoft Visual studio community can add more detailed data, there you work the GUI you want to show. Download Visual Studio Community. Web Browser. The design is simple, you just measure the coins you got, and you can open the door by solving math. Now we will focus on the hardware setup. Shield for the Genuino MKR1000 I like to use clamps and screws for projects so i decided to ask for a company to make a shield for me... and looks cool, mainly because not everything cames as jumpers, but wires are a lot more common. Pc board design Power Supply Coin Acceptor works at 12V, Arduino/Genuino MKR1000 is 5V tolerant and the GLCD works at 3.3V so i used a computer ATX wich has a lot of different voltage levels, to make it work you need to put a little bridge as shown, between Enable (usually Green wire) to GROUND (any black wire). Bridge to make ATX work. This project uses 3 types of voltage, so i took the 12V (Yellow Wire), 5V (Red Wire) and 3.3V (Orange Wire) and GROUND (Black Wire). There are multiple same color wires but don-t worry it should work with 1 of each kind. Get some generic extensions, wich are chea and keeps your ATX as it. Generic ATX powercord Wires to power the project The shield for Arduino/Genuino MKR1000 The Coin Acceptor Calibrate the coin acceptor. I suggest to watch this video. How to calibrate a coin acceptor The coin acceptor i got can save up to 4 types of coins, you can tell by the label it has on the blue stamp. Set the coin values as the coin, it will save you some code. To read the pulses of the coin acceptor use the following instruction: duration = pulseIn(CoinPin, HIGH); if(duration > 0){ cash++; }else { if (t != cash) { Serial.println(cash); t = cash; } } Print your mechanical coin sorter Coin sorter for mexican pesos. Customized Coin sorter You can also use the customizer, there are a lot of avaible coin models, in case your coin type is not listed, you can print the one I created at Thingiverse Customizer: Click here to print your coin sorter Once you have printed your coin sorter, you can decorate it, you can find the sticker Cad at the files for this project. Sticker for the Coin sorter. Use something sharp to clean your print. Once your print is finished you can glue it. The sound Small sounds to make project a little more interesting, specially when accepting the coin. How to connect ansimple audio amplifier on Arduino Zero  Audio Amplifier Fritzing audio amplifier for arduino You must be careful where you connect the SD, because it doesn´t use the standard pins, it changes board to board. Genuino MKR1000 uses pins 8 to 12. You can only play '.wav' files by now, you got 2 options: Rename your tune/song to "test.wav" Change the following code to fit File myFile = SD.open("test.wav"); if (!myFile) { Serial.println("error opening test.wav"); while (true); } You can get a lot of different tunes on the following websites. Freesound Soundbible Make sure you got 2 different SD card reader and multiple SD cards of different sizes, somehow this code is not perfect. You can do all this or you can simply generate PMW tunes. The Door Locker Not everyone should open the coin aceptor so i put an web based coin acceptor it needs a small power amplificator. PCB Print on coated paper, the thicker is better. Iron it on copper, put some force for better results. Trim to fit Carefully remove the paper Etching with ferric chloride Clean the PCB. Clean with Thinner Mark so you can drill easily.  Drill holes Place components Solder and trim. Now with the power amplificator you can play with it on Arduino IDE, you just need a Digital Output. void loop() { digitalWrite(13, HIGH); // OPEN delay(1000); // wait for a second digitalWrite(13, LOW); // CLOSED delay(1000); // wait for a second }  Closed Open Create a door to lock. Print a propper door Lock The GLCD I wanted a little more than the clasic 12X2 LCD, so i decided to use Adafruit GLCD, for this case the library it is not on the manage librariesfrom arduino, so you need to download it from GitHub, the following steps are to make a power logic level, wich makes a 5V go down to 3.3V, this also could be done with resistors. Wiring and important information for GLCD Peel Wires Soldering wires to the screen. Always checks for everything fine beffore pugging. I strongly suggest you to test on protoboard before cutom circuit boards. Casual board Sillicon helps to avoid problems Use the examples to test the GLCD, it has very handy ideas. caption (optional) The code is somehow simliar to a normal LCD 12x2, but since it´s not that wide used needs a lot of imagination to code. #include "ST7565.h" ST7565 glcd(9, 8, 7, 6, 5); void setup() { glcd.drawstring(0, 0,); glcd.display(); delay(2000); glcd.clear(); } It can only use chars, so you need a lot of separators and complicated cleanup. What does the GLCD prints? Name of the project IP Adress --- so you can view it online Current cash collected. Some dot art The E-ink When it cames to talk about IoT devices, you need to know where to connect, but it somehow gets complicated, so I decided to simplify the life of the users with and incredible E-ink display, i decided to use Badger wich is very friendly to certain point, since it's E-ink you can change it when in need, wich can be very handy for Iot Applications. First we get an image using a QR generator Click here to create your own QR code. Once you got your QR code, you need to upload it to the Badger, you will need an GUI to get a special format WIF (Wyolum Image format) Upload images to Badger Then you can either use an SD card or upload it via FTDI, i used the SD shortcut. An upside down QR code. Now you can use any QR scan to simplify the life on your project. Case The main idea is to be open source so i put and acrylic frame so everyone can see the project, i didn't  used any CAD software to segign it, i just went somehow freestyle, and little by little the case was done, almost all the cuts are linear, so maybe can be donde to old school tecnique. First you must measure the total dimensions you will need. Feel the power of laser cutting. Assembly  and glue. Insert  materials Play with the acrylic until you find the right angle. I printed some corner on 3D to keep aligned the case from start to end, and it gave a cool visual effect. making the ramp. Put all together A double frame for GLCD and E-ink just from the 3D printer Measuring and cutting Final assembly This is how it looks fully assembled, and clean. Clean and Testing.. Thanks for watching, hope to see more. Custom parts and enclosures Corner for 3D print Print 4, made for 3mm acrylic. Frame I created this one for 3D printing, for both screens i use Door lock 3D print and use for 3mm Acrylic Coin Separator for mexican pesos Coin sorter customized for mexican pesos. Vynil sticker Stickr for Schoredinger bank Schematics Image for the schematic This is the wiring for this project ---> Use MKR1000 instead of YUN IoT for Coins Schematic for this project. Code IoT for Coins Arduino The hybrid program for Azure via POST and arduino // Erik Moran // IoT for Coins // // PINout // pin 3 - Coin // // pin 6 - GLCD // pin 7 - GLCD // pin 8 - GLCD // pin 9 - GLCD // pin 10 - GLCD // // pin 2 - r // pin 1 - g // pin 0 - b // // pin 5 - Locker // // pin 4 - Chip slct // pin 10 - mosi /SD // pin 8 - miso /SD // pin 9 -sck /SD // // pin A1- Random seed. // // pin A0 - Buzzer-Sound // #include #include #include #include #include "ST7565.h" // Internet password char ssid[] = "Network Name"; // your network SSID (name) char pass[] = "Password"; // your network password int keyIndex = 0; // your network key Index number (needed only for WEP) int status = WL_IDLE_STATUS; WiFiServer server(80); String IP; // Coin Acceptor const int CoinPin = 3; // the number of the pushbutton pin int cash = 0; int t = 0; //Graphic Liquid Cristal display - GLCD ST7565 glcd(10, 9, 8, 7, 6); char Val[5]; unsigned long duration; // variables will change: int buttonState = 0; // variable for reading the pushbutton status int buttonState1 = 0; int vx;//variable x int vy;//resultado int vc;//constante int vl;//A int re;//respuesta del usuario int st = 0; //2 1 0 pines r g b int pr = 2; int pg = 1; int pb = 0; int locker = 5; void setup() { Serial.begin(9600); pinMode(CoinPin, INPUT); // GLCD background color pinMode(pr, OUTPUT); pinMode(pg, OUTPUT); pinMode(pb, OUTPUT); digitalWrite(pr, LOW); digitalWrite(pg, LOW); digitalWrite(pb, LOW); pinMode(locker, OUTPUT); //locker glcd.begin(0x18); //pon algo de IOT // delay(2000); glcd.clear(); if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); while (true); // don't continue } // attempt to connect to Wifi network: while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to Network named: "); Serial.println(ssid); // print the network name (SSID); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } server.begin(); // start the web server on port 80 printWifiStatus(); // you're connected now, so print out the status randomSeed(analogRead(1)); genera_ec();//inicializa pw } void loop() { // Read the pulse for coin duration = pulseIn(CoinPin, HIGH); if(duration > 0){ cash++; }else { if (t != cash) { Serial.println(cash); t = cash; } } sprintf(Val, "%d", cash); char IPc[24]; IP.toCharArray(IPc, 24); glcd.drawstring(0, 0, IPc); glcd.drawstring(0, 1, "IOT for Coins"); glcd.drawstring(0, 2, "You have:"); glcd.drawstring(0, 3, Val); glcd.display(); //delay(2000); glcd.clear(); // Serial.println(duration); WiFiClient client = server.available(); // listen for incoming clients if (client) { // if you get a client, Serial.println("new client"); // print a message out the serial port String currentLine = ""; // make a String to hold incoming data from the client while (client.connected()) { // loop while the client's connected if (client.available()) { // if there's bytes to read from the client, char c = client.read(); // read a byte, then Serial.write(c); // print it out the serial monitor if (c == '\n') { // if the byte is a newline character // if the current line is blank, you got two newline characters in a row. // that's the end of the client HTTP request, so send a response: if (currentLine.length() == 0) { // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) // and a content-type so the client knows what's coming, then a blank line: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.print(""); client.print(""); client.print(""); client.print("Current cash:
"); client.print(cash); client.print("

"); if(vx != 1) client.print(vl); client.print("x");//vx if(vc < 0) { client.print(""); } else { client.print(" + "); } client.print(vc); client.print(" = "); client.print(vy); client.print("
x = "); client.print(""); /* client.print(""); client.print(""); */ client.print(""); client.print(""); client.print(""); // The HTTP response ends with another blank line: client.println(); digitalWrite(pg, LOW); digitalWrite(locker, LOW);//abre locker // break out of the while loop: break;//!!! } else { // if you got a newline, then clear currentLine: currentLine = ""; } } else if (c != '\r') { // if you got anything else but a carriage return character, currentLine += c; // add it to the end of the currentLine } // Check to see if the client request was correct or wrong. if (currentLine.endsWith("GET /HH")) { digitalWrite(locker, HIGH); } if (currentLine.endsWith("GET /LL")) { digitalWrite(locker, LOW); } if (currentLine.endsWith("GET /"+String(vx+65))) { //if (currentLine.endsWith("GET /"+int(vx))) { st = 1; genera_ec(); digitalWrite(pg, HIGH); digitalWrite(locker, HIGH);//abre locker } if (currentLine.endsWith("GET /NN")) { st = 1; genera_ec(); } if (currentLine.endsWith("GET /RR")) { client.print("
*
"); client.print(vx); client.print("
*
"); client.print(String(vx+65)); client.println(); //digitalWrite(pg, HIGH); //digitalWrite(locker, HIGH);//abre locker } } } // close the connection: client.stop(); Serial.println("client disonnected"); } } String DisplayAddress(IPAddress address) { return String(address[0]) + "." + String(address[1]) + "." + String(address[2]) + "." + String(address[3]); } void printWifiStatus() { // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(WiFi.SSID()); // print your WiFi shield's IP address: IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); IP = DisplayAddress(ip); // print the received signal strength: long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); // print where to go in a browser: Serial.print("To see this page in action, open a browser to http://"); Serial.println(ip); } void genera_ec() { vx = random(0, 9); vc = random(-20, 20); vl = random(1,5); vy = (vl*vx)+vc; re = 0; } GLCD library This is the library for the GLCD from Adafruit. adafruit / ST7565-LCD There are two 'versions' of the LCD library - one is straightup avr-gcc and the other is an Arduino Library. They're essentially the same. You can create new icons for bitmapdisplaying using bmp2glcd have fun! limor — Read More http://www.ladyada.net/learn/lcd/st7565.html Download as zip Source : IoT for coins ### Simple Arduino Wireless Mesh Create an inexpensive basic wireless mesh network with arduinos and long range APC220 radio modules. Wireless mesh networks have the ability to accommodate non-functioning individual nodes and are resilient in challenging environments like forests and hills, where direct data transmission between points may be limited. Step 1: How the mesh works This is a wireless network of nodes that can communicate with each other up to a distance of 1km. Each mesh consists of 16 nodes, all operating at the identical frequency. Every node has the capability to measure two analog voltages and distribute this information within the mesh network. The network can withstand faults in individual nodes, and data can travel through various paths to reach its destination. Nodes can connect to the internet and to other established meshes operating on a separate frequency. Single nodes can communicate with only a limited number of neighboring nodes. Complexity presents a challenge when constructing meshes. This network simplifies by utilizing a synchronized clock, with most of the protocol focused on ensuring the clock is functioning properly. Every node swaps time information with nodes in close proximity. When a node receives time information from a neighboring node, it records both the node's number and the number of the most recent node it received time data from, and chooses the smaller of the two. If node zero is present in the mesh, all nodes will eventually synchronize with node zero's time. In case node 0 gets deactivated, node 1 will assume this task. Nodes synchronize their LED flashes with their clocks, and within about a minute, all nodes will flash simultaneously. After this is functioning properly, each individual node will only send data during its designated time slot. This helps prevent data conflicts and reduces mistakes. Every node gathers its own information and timestamps it. When a node sends data, it sends it for the entire mesh along with the time stamps. Every node that receives this information compares it with its own list and updates old data with newer data. In this manner, fresh information spreads throughout the mesh. There are 16 nodes, with each node containing two analog values, resulting in a combined total of 32 integer values to distribute across the mesh. Limitations on the number of nodes and analog values per node are determined by the time required to loop through the entire network. Every node needs 4096 milliseconds to send its data (at 9600 baud), resulting in a total of 65 seconds for all nodes to transmit sequentially and for fresh data to circulate within the mesh. World data that can be shared includes temperatures, tank levels, stock trough levels, rainfall, humidity, dam levels, local battery data for solar-powered nodes, and other non-time critical data needed for large distance sharing. Step 2: Hardware Hardware is as simple as possible. An arduino, 20x4 LCD display and an APC220 radio module. An additional option is a $2 switching module that reduces voltages to 7V in order to power the Arduino while minimizing heat produced by the onboard regulators. The ideal voltage range for an arduino board is between 7 and 8V. If the temperature goes up any further, the heatsinks will become warm and unnecessary energy will be lost. If there is a lower amount, the onboard regulators could fail to regulate properly and analog inputs may become unreliable. The 20x4 display is set up for I2C communication since it only requires two arduino pins. The I2C module is available for individual purchase or can also be bought pre-assembled on 20x4 displays (search for 20x4 lcd I2C). The APC220 module includes a built-in antenna capable of reaching a maximum distance of approximately 500m even with obstacles like trees. Substituting the coiled antenna with a straight 17.3mm wire can increase the range by an additional 20%. Adding a ground wire of 17.3mm is an option, resulting in a dipole of 34.6mm which increases the range by 20%. The dipole is positioned vertically to create a pattern in all directions. To achieve stable readings of analog voltages, it is recommended to connect a 10uF capacitor across the arduino inputs on the board. Step 3: Big mess o wires I will try to make Fritzing work and improve the appearance of this. On the UNO boards I own, there is a set of pins close to the analog inputs that consist of 4 pins specifically for an I2C connection - 5V, SDA, CLK and 0V. These are for the 20x4 I2C module. Pin 1 on the APC220 is designated as Gnd, pin 2 as 5V, pin 3 is left unconnected, pin 4 is connected to Arduino D9, pin 5 is connected to Arduino D8, and pins 6 and 7 are not utilized. The APC modules include a small USB programmer that allows for adjusting the frequency and baud rate. When the utility program is run, Windows requires you to right click and "run as administrator" for some reason. The standard choices are suitable, such as 433Mhz and 9600 baud. The image above displays a small RS232 module. I have connected this to a pin. Step 4: Nodes in the field Nodes out in the field need to be self contained with power, and robust enough to handle wildlife. (The cow in the background likes chewing wires!) This demonstrates a node contained within a box that is resistant to weather conditions. The solar panel is larger than necessary to charge on both cloudy and sunny days. Contained within the box is a charge controller (around $15 on ebay) along with a SLA battery. A $2 switching regulator module reduces the voltage from 12V to 7V for the arduino. An Arduino is able to measure the battery voltage and input it into the mesh by utilizing a 20k/10k divider circuit. This node is only functioning as a repeater and is not collecting any additional data. The antenna is constructed within a PVC downpipe that is approximately 25mm in size. The object above the post is green and somewhat difficult to spot. This is closed off and contains the APC220 module, as well as the dipole for extended distance. Step 5: Code Attached is the arduino code as well as the included drivers for the 20x4 LCD and the serial port to talk to the APC220. The arduino code has more information on the mesh protocol, and also includes code for a scrolling 20x4 display. I hope this has been useful! In step 1 the photo shows a vb.net program uploading the mesh data into xively. This is a vb.net program, though it may be possible to port this into one of the little ESP8266 chips and then the laptop isn't needed. Next project - building a better battery supply using multiple NiMH batteries connected in parallel to make a high amp hour 1.2V source. Includes charger, discharger and all stepup modules. Also putting up some 433Mhz yagi antennas on towers for even longer range. Source : Simple Arduino Wireless Mesh ### The DIY Arduino Telescope GOTO control project Why make your own Arduino control system? Once I finished building my homemade telescope mount, I installed a Meade DS motor kit to power it. This system was very sluggish, lacking in power, and untrustworthy. I couldn't modify the programming or upkeep the system either. I chose to develop my own telescope control system from scratch and the Arduino platform appeared to be the most suitable option. This project required a variety of inputs and outputs, so it was completed using an Arduino Mega 1280 board, although a Mega 2560 board would work just as effectively. DC motors or Stepper motors Arduino and similar microcontrollers face a critical issue when it comes to stepper motors. Steppers need Arduino's continuous monitoring to maintain their rotation. Particularly when utilizing microstepping. There isn't much time left in the Arduino for doing other tasks. Although it may be typical to design this using multiple microcontrollers, it seems unnecessary when a single Arduino Mega provides more than enough computing power. So I decided to utilize DC motors. Why ASCOM with Arduino In a modern observatory, the PC is in charge despite the Arduino being capable of managing motor tasks and telescope pointing. A variety of astronomy applications are required for effective imaging. Every application communicates with telescopes through the widely used ASCOM interface. None of the software related to planetariums etc. that I wanted to utilize is compatible with my Arduino system: As a result, I had to develop an ASCOM driver to serve as a bridge between the Arduino and the necessary application software. Luckily, writing ASCOM Drivers is made simple due to their well-structured templates. This tool chain in action can be seen in the video below. What is the hardware? The core of the setup consists of two Maxon Motor coreless DC motors with precious metal brushes, 512 cpr encoders, and 30:1 reduction gearboxes. These motors are an impressive display of technology and can spin very gradually when controlled by Arduino without any magnetic cogging. The motors rotate at a speed of 12 rotations per minute while observing the sky. This pairing produces an approximate resolution of 24 ticks per arc second when using the encoder IC at a 4x zoom level. This is sufficient for ensuring accurate tracking for both GOTO and tracking purposes. Nevertheless, it becomes an issue when slewing and the tick rate increases to approximately 200kHz. Attempting to utilize a encoder with an Arduino at elevated speeds results in various issues. In the case of overloaded interrupt lines, the serial data will be affected. It is recommended to use a specialized encoder counting integrated circuit for improved performance. Interfacing the motors to the arduino is a simple L298 dual H Bridge driver. The Encoders are interfaced to the Arduino using an encoder counting IC to cope with the very high tick rates when slewing. The diagram below roughly outlines the high level layout of the system Please see here for discussion on Arduino PWM The Arduino Mega 1280 is housed in a box on the telescope. This includes the L298 unit, the encoder counter, various hall sensors for doing PEC and fuses and relays. Arduino can actually turn off the power to the telescope mount itself - handy when you detect an problem. What does my Arduino software actually do? The Arduino is solely in charge of controlling the motors and aligning the telescope. While following the stars, the arduino watches the encoder tick rates and changes the PWM signal to the L298 in order to maintain the telescope's alignment with the sky at the appropriate pace. That task is quite straightforward. Complications emerge with the use of GOTO statements. When my planetarium software desires the scope to GOTO a target, it just informs the Arduino of the necessary RA and DEC. At this stage, a variety of events occur on the Arduino. Initially, the Arduino checks with the DS1307 real time clock module to retrieve the current local time. Arduino utilizes the established longitude of the observatory in order to compute the local sidereal time. Understanding the specific RA of the target helps determine the necessary Hour angle. The necessary hour angle and declination are then utilized in order to determine the necessary shaft angles. Around 80000 encoder ticks are present per degree - therefore, we can determine the needed encoder tick target. The motors are instructed to move at maximum speed until they reach the desired number of encoder ticks, then gradually slow down and stop at the precise location. In addition to this central function, a variety of other features are integrated into the Arduino. Putting away the telescope after use. Removing a parked vehicle Immediate closure due to urgent situation. Aligning the pointing with a familiar star. Correction of the periodic errors in the transmission gears is known as Periodic error correction (PEC). Automated guiding Temperature and humidity are being monitored locally. Locating a housing alignment (utilizing Hall sensors) A variety of safety checks are coded to detect any potential issues that may occur. If the slew takes too long or the telescope moves too slowly, the Arduino will cut off power to the mount and enter sulk mode. The power will not be restored until a person has fixed the error. Can I download your Arduino source code? In short, no. The code is closely matched to my telescope and has taken me months of research and development. It is not impossible that this may turn into a commercial project one day therefore I do not wish to share my entire source code. However, I would be delighted to answer questions about the project at tomh@tomhow.me.uk and will happily share a section of the code if it helps you with your project. However, I do give instructions on how to write it yourself here in my guide for writing Arduino telescope controllers Source: The DIY Arduino Telescope GOTO control project ### DIY 300B Single-Ended-Triode (SET) Hi-Fi Amplifier Stamou Tasos, hailing from Greece, finished this DIY 300B triode amplifier project. In appreciation for the 300B amplifier schematics, Stamou has provided his own version of the 300B single-ended (SE) tube amplifier schematic by J.C. Morrison. I helped with translating, formatting, and showcasing his DIY 300B triode amplifier project. - Giovanni Militano - Editor I discovered the circuit for my 300B triode amplifier on a website, which is the 300B Single-Ended (SE) tube amplifier schematic with direct coupled 6SN7 input stage that I chose to use. Please refer to the SE 300B schematic for details on Mr. J.C. Morrison's SE 300B tube amplifier circuit, which will be called the "original schematic". It was emphasized in the circuit notes to use high-quality output transformers and components for constructing the 300B amplifier. Premium components were utilized in the construction of this SE 300B triode tube amplifier, including Lundahl audio output transformers and a homemade chassis. This SET amplifier circuit, utilizing a 6SN7 driver stage, operates with a 300B Single-Ended-Triode. The SE 300B triode is used in the output stage with a maximum power output of approximately 8 Watts per channel. This 300B SET amplifier will need a set of loudspeakers with moderate sensitivity, around 91 dB or higher. Figure 1 displays detailed information on the specific components and brands used in constructing my SE 300B triode amplifier. It is anticipated that slight adjustments to the values of R7 and R8 will be necessary to reach the desired voltages indicated in the diagram. The diagram in Figure 1 is designed for just one channel, except for the power transformer (T2) which is used by both amplifier channels. Remember this when compiling a parts list for the 300B SET amplifier project. The voltages observed in Figure 1 are readings taken from my 300B triode amplifier construction and closely match the voltages indicated on the original SE 300B diagram. The voltage at these test points may vary slightly with different tube sets, so do not anticipate matching the displayed voltages precisely. Keep in mind that the highest anode voltage allowable for the 300B triode tube is 450V.   I didn't stray too far from the original SE 300B schematic I was using. I added a resistor (R8) to the power supply to modify the B+ voltage. To enhance efficiency, an anode choke (L2) was included in every channel. The value of R7 was changed from 27k to 15k in order to achieve the desired voltages. In order to enhance the performance of this 300B triode amplifier even more, the power supply filtering sections have been replicated for each channel. Even though the power transformer (T2) is used for both channels, each audio channel has its own rectifier, chokes, and filter capacitors. Employing an individual tube rectifier (5U4-GB) for every channel leads to a reduced voltage drop across the tube rectifier. To learn more about tube rectified power supplies, refer to these notes on designing vacuum tube power supplies. The anodes of the 300B tube are operational at a voltage of 430V. Decreasing R8 can enhance B+, however, keep in mind that the 300B triode tube's maximum anode voltage is 450V. I utilized Lundahl LL1623 Transformers (90mA) for the audio output transformers (T1) - PDF (52kB). From what I've seen, SE tube amplifier circuits need a top-notch audio output transformer for the best performance. Lundahl is a top producer of audio transformers and the Lundahl LL1623 transformers utilize a unique audio C-core design. The power transformer and chokes are made by a domestic manufacturer in Greece and tailored to specific requirements. I designated 200H, 40mA (L1) for the small anode chokes and 6H, 225mA (L2) for the tube power supply chokes. The power transformer (T2) includes multiple taps: 400-0-400 @ 250mA, 6.3V @ 2A (x3), 5V @ 3A (x2). The SET amplifier shares the power transformer (T2) between its two audio channels. In the original SE 300B schematic a solid state filtered DC power supply is used for the 300B filaments. To improve on this idea I decided to use 5V integrated circuit (IC) voltage regulators for the 300B filament supply. In my initial attempt I tried two 7805 voltage regulators in parallel for each channel but the current draw from the 300B heater filaments was too large for the 7805 IC. In an email exchange with Gio he recommended that I try the LT1085 voltage regulator circuit shown in Figure 2 for the 300B filaments. This 5V regulated power supply for the 300B filaments was posted by Suncalc and details about the regulated circuit are in the 300B SET Design Project forum thread. With the LT1085 regulator circuit in place the 5V filament supply was stable and the 300B SET amplifier was whisper quiet. I used a separate LT1085 regulated power supply circuit for each audio channel. Note that I did not use the Hammond transformers shown in the Figure 2 Schematic. The LT1085 regulated power supply circuit is connected to the 6.3V taps from the power transformer (T2). For your reference, the tube pinout diagrams for the the 6SN7 twin triode, 300B directly heated triode and 5U4GB twin diode tubes are shown in Figures 3, 4 and 5. Building the 300B Single-Ended-Triode Amplifier The 300B SET amplifier was built using point-to-point construction. The premium capacitors are very large in physical size so you will need to use a good sized enclosure for the amplifier. I spent a long time planning the layout of the 300B SET amplifier as you need to be careful so not to create ground loops in your amplifier build. For more information about grounding, see this helpful article about grounding and shielding for your DIY audio projects. Photograph 2 shows the 7805 regulators I initially tried for the 300B filament circuit. The long shafts on the left and right edges of Photograph 2 are from the 300B hum potentiometers (P2). For the internal input cable wiring I used Mogami W2330 shielded interconnect wire. Caution: This 300B Single-Ended Triode amplifier project operates with voltages exceeding 400 Volts. Contacting voltages of this size can result in severe harm or potentially lead to death. If you are unsure about constructing projects with these abilities or are uncomfortable with projects that involve high voltages, it is highly advised that you avoid building this vacuum tube amplifier. It is necessary to adhere to your local electrical regulations for all grounding, wiring, and connections when building the 300B Single-Ended-Triode Amplifier - Inside and Back. You will observe that I have drilled several ventilation holes in the bottom plate (Photograph 4). This is the point of entry for cool air into the amplifier. The upward movement of warm air will cause it to exit through the ventilation openings on the top panel (Photograph 5). Make sure to take ventilation into account when planning your construction of a 300B triode amplifier. The finished amplifier is shown in Photograph 5. I made wooden MDF covers for the Lundahl audio output transformers. The MDF wooden frame and transformer covers were primed and painted with spray cans. In the end I was very pleased with how my chassis turned out for the 300B SET amplifier. Sound - 300B Single-Ended-Triode Amplifier I was so eager to hear this 300B triode amplifier that I just had to have a listen before it was even complete. Photograph 6 below shows my first listening session with the 300B SET amplifier. At this point, the amplifier had not yet been finished still requiring the transformer covers and ventilation holes in the top plate. The tube compliment was Electro Harmonix 300B Gold Grid, Electro Harmonix 5U4GB and Tung-Sol 6SN7GTB. For the 6SN7 driver tube I also tried NOS Sylvana and RCA tube brands, and I found that I like the sound from Tung-Sol brand tubes the best. The speakers shown in Photograph 6 are DIY double horn enclosures with the Fostex FE207E fullrange driver. It's a shame that you can't personally experience the amazing sound of this DIY 300B SET amplifier. We conducted a head-to-head comparison with the Sofia Electric SET 300B utilizing JJ 300B triode tubes. We conducted trials with both triode amplifiers using Lowther DX3 horn speakers and Spicom Planar F3 (Dipole floorstanding speaker with 25"planar driver). After testing numerous tube and speaker combinations, we consistently favored the sound produced by my homemade 300B SET amplifier over the Sofia Electric SET 300B. This 300B triode amplifier sounds amazing and will be highly satisfying for DIYers. Photograph 7 above displays the completed amplifier. I am very happy with the final outcome of the 300B SET amplifier build, both in terms of looks and sound quality. I want to express my gratitude to the website for offering the blueprints to create an amazing-sounding 300B triode amplifier. Source: DIY 300B Single-Ended-Triode (SET) Hi-Fi Amplifier ### ARDUINO LIBRARY FILES PROTEUS The Proteus simulation software is most effective for evaluating microcontroller projects, although it offers limited insight. Proteus libraries for Arduino include models for Arduino Mega1280, Arduino UNO, and Arduino Pro in Proteus. Projects that involve electronics, Arduino library files in Proteus - "Arduino projects." The Proteus simulation software is ideal for evaluating microcontroller projects, providing some level of understanding. Arduino libraries for Proteus ARDUINO PROTEUS MODELS Proteus for Arduino Mega1280 Proteus for Arduino UNO Proteus for Arduino Pro Mini Proteus for Arduino Mega2560 Arduino Nano Proteus Proteus Tiny Arduino Arduino Proteus library files need to be allocated to the Proteus LIBRARY folder within the C:\Program Files\Labcenter Electronics\Proteus X Professional\LIBRARY directory. I conducted tests on Proteus 8 with three distinct Arduino libraries that were utilized for the experiments. The one currently being used is located in folder 2. Proteus Arduino simülasyonunda kullanılabilmesi için, yazılımınızın .HEX dosyasına ihtiyaç vardır. Arduino IDE programında File / Preferences bölümünde Compilation ve Upload kutularını işaretlemelisiniz. Launch the software in the Arduino IDE and check the Verify status. After the verification is done, the HEX file will be generated. Click the file on the Arduino card with the right mouse button and select Edit Properties. It is now prepared for use. SAMPLE ARDUINO PROTEUS LED APPLICATION Alternative File Download LINK list (in TXT format): LINKS-25957.zip ### Small Arduino DMX controller In this article, we demonstrate how to create a compact and practical Arduino DMX512 controller that can be used to operate a smoke machine with DMX or for testing purposes. Arduino Mega, Arduino UNO, and other similar devices can be utilized with minor modifications. Only a few cheap components are utilized. The setup includes 6 channels with adjustable values from potentiometers connected to Arduino analog inputs, where 10-bit values are converted to 8 bits (0-255 for DMX). Additionally, there are 12 channels with binary values controlled by push buttons connected to Arduino digital inputs, utilizing internal pullup resistors to read input states. When a button is pressed, the input value is 0; when not pressed, the input value is 1. You need dowload and install our Arduino four universes DMX 512 library Download project and source code Small Arduino DMX controller Issues that are currently recognized: When we compile, we encounter the error: 'ArduinoDmxN' was not defined in this scope. Verify if the correct board type is selected in the Arduino IDE under the menu tools > board. Using Arduino nano restricts the use of only one USART, which is ArduinoDmx0 or USART0. Mistakes encountered during Arduino programming: It will be required to uninstall the DMX shield, and then reinstall it after programming. The images below show the wiring. Pictures and sketches created using Fritzing software found at www.fritzing.org Code example for testing the function: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 //********************************************************************************************************* #include   // libreria DMX 4 universos   // four universes DMX library  - www.deskontrol.net/blog //********************************************************************************************************* //                        New DMX modes *** EXPERIMENTAL *** //********************************************************************************************************* #define    DMX512     (0)    // (250 kbaud - 2 to 512 channels) Standard USITT DMX-512 #define    DMX1024    (1)    // (500 kbaud - 2 to 1024 channels) Completely non standard - TESTED ok #define    DMX2048    (2)    // (1000 kbaud - 2 to 2048 channels) called by manufacturers DMX1000K, DMX 4x or DMX 1M ??? void setup() {   // configurar pines arduino del 2 al 13 como entradas con pullup, (cuando se pulsa el boton = 0 si no = 1)   // configure arduino pins 2 to 13 as inputs with pullup, (button pressed = 0, button free = 1)   for (int i=2;i<=13;i++)   {     pinMode(i,INPUT);            // pines como entradas                                        // pins as inputs     digitalWrite(i, HIGH);       // activar resistencias pullup internas                                  // turn on pullup internal resistors   }   ArduinoDmx0.set_tx_address(1);      // poner aqui la direccion de inicio de DMX                                       // put here DMX start address   ArduinoDmx0.set_tx_channels(100);   // poner aqui el numero de canales a transmitir                                       // put here the number of DMX channels to transmmit   ArduinoDmx0.init_tx(DMX512);        // iniciar transmision universo 0, modo estandar DMX512                                       // starts universe 0 as TX, standard mode DMX512 }  //end setup() void loop() {   // seis entradas con potenciometros que envian valores DMX entre 0 y 255 a los canales 1 al 6   // six analog inputs with potentiometers, sending values from 0 to 255, to dmx output channels 1 to 6   ArduinoDmx0.TxBuffer[0] = scale(analogRead(0)); // copiar valor de la entrada analogica 0 al canal DMX 1                                                   // copy value from analog input 0 to DMX channel 1   ArduinoDmx0.TxBuffer[1] = scale(analogRead(1)); // copiar valor de la entrada analogica 1 al canal DMX 2                                                   // copy value from analog input 1 to DMX channel 2   ArduinoDmx0.TxBuffer[2] = scale(analogRead(2)); // copiar valor de la entrada analogica 2 al canal DMX 3                                                   // copy value from analog input 2 to DMX channel 3   ArduinoDmx0.TxBuffer[3] = scale(analogRead(3)); // copiar valor de la entrada analogica 3 al canal DMX 4                                                   // copy value from analog input 3 to DMX channel 4   ArduinoDmx0.TxBuffer[4] = scale(analogRead(4)); // copiar valor de la entrada analogica 4 al canal DMX 5                                                   // copy value from analog input 4 to DMX channel 5   ArduinoDmx0.TxBuffer[5] = scale(analogRead(5)); // copiar valor de la entrada analogica 5 al canal DMX 6                                                   // copy value from analog input 5 to DMX channel 6   if (digitalRead(2) == LOW)       // pulsador en pin 2 apretado  // push-button on pin 2, is pressed     ArduinoDmx0.TxBuffer[6] = 255; // enviar 255 al canal DMX 7   // send value 255 to DMX channel 7   else     ArduinoDmx0.TxBuffer[6] = 0;   // si no enviar 0              // push-button free, send 0   if (digitalRead(3) == LOW)       // pulsador en pin 3 apretado     ArduinoDmx0.TxBuffer[7] = 255; // enviar 255 al canal DMX 8   else     ArduinoDmx0.TxBuffer[7] = 0;   // si no enviar 0   if (digitalRead(4) == LOW)       // pulsador en pin 4 apretado     ArduinoDmx0.TxBuffer[8] = 255; // enviar 255 al canal DMX 9   else     ArduinoDmx0.TxBuffer[8] = 0;   // si no enviar 0   // añadir aqui hasta el pin 13   // add here the others inputs }  //end loop() uint8_t scale(uint16_t value) // scale values from 10 bits to 8 bits {   if(value > 1023) // test for 10 bits limit     value = 1023;   return (value >> 2); // scale }  //end scale() //*************************************************************************************************************   For more detail: Small Arduino DMX controller ### ESP32-WROOM-32 (ESP-WROOM-32) This guide describes the pinout of the ESP32 development board and concentrates on ESP32 devkit, in particular. Actually, the ESP32 devkit comprises of the ESP-WROOM-32 which actual implementation we shall be implementing throughout the two main modules. It is worth admitting that there are several different chip models of the ESP32 family in the market. The ESP32 devkit utilizes the ESP-WROOM-32 module. However, the functionality of every GPIO pin is consistent among all ESP32 development boards. I notice numerous individuals looking online for information about this development board. Numerous individuals are inquiring about the ways to utilize the GPIO pins. What GPIO pin is compatible for use as a digital input/output pin? What GPIO pin is suitable for use as an analog pin? What pin should be avoided when using this board to ensure safety. The answer to these questions will be given in this article. We will begin by explaining the pin of general input/output of ESP32 development board. Introduction to ESP32 chip Getting started with programming ESP32 using the Arduino IDE. I'll demonstrate how to code an ESP32, with 19 pins on each side, to function as an Arduino. Furthermore, I will highlight the distinctions between this particular microcontroller and the Arduino. Therefore, along with showcasing ESP32 with the Arduino IDE, I will provide a hands-on demonstration of digital input and output. you can check these articles on ESP32: Introduction to the ESP32 development board  How to install ESP32 in Arduino IDE – step by step guide  you can check more information about this chip here. Main features of ESP32 The main characteristics of ESP32 are as follows: There are 18 ADCs integrated onboard. Every ADC utilises SAR technology and has a resolution of 12 bits. Two DACs, which are digital to analog converters. It incorporates 9 touch sensors. For connectivity, it features two UART channels, two I2C interfaces, two I2S channels, and one CAN interface. There are 16 channels for pulse width modulation. It includes a hardware acceleration module for cryptographic algorithms such as RSA and AES. Introduction ESP32 pinout The image below illustrates the functions of each pin on this board. Just like I stated before, the chip that accompanies the board comes equipped with 48 GPIO pins. However, not all pins are usable on these development boards. ### Exploring the Fusion of Physical Computing and Creative Expression What is physical computing? Physical computing involves constructing physical interfaces that interact with the analog world. This entails assembling circuits using microcontrollers, wires, sensors, LEDs, motors, and similar components, which are then controlled by customized software. For example, one might program the software to activate an LED when a photocell sensor detects a light level below 100. Beyond its educational benefits in reinforcing programming concepts, physical computing extends into diverse applications such as art, support systems for ALS patients, immersive installations, experimental music, fashion, and water quality testing. While there are parallels between robotics and physical computing, the latter primarily focuses on developing interfaces that explore the human body's interaction with the digital realm, rather than creating autonomous robots independent of human or environmental inputs. Arduino with CdS & LED Using a Microcontroller What’s a Microcontroller? A microcontroller is a compact computer capable of receiving input from sources like sensors and switches, and controlling outputs such as lights, motors, and other devices. They find broad application in DIY projects, robotics, artistic installations, industrial settings, and the Internet of Things. When working with a microcontroller platform, such as Arduino in our case, there are two key components: hardware and software. The hardware comprises the microcontroller itself, its input/output pins, and any peripherals attached to it. Software refers to the programs you develop to manage the microcontroller and its connected devices. Arduino, the microcontroller platform we will use in this class, was originally created by educators to assist design students—many of whom lacked engineering backgrounds—in crafting physical interfaces. The Arduino provides a free integrated development environment (IDE), available for download from the Arduino website (download it here). This software suite enables you to write code and upload it directly to the Arduino board. Arduino Uno While there are numerous versions of Arduino available, we will specifically utilize the Arduino Uno for this purpose. To program the Arduino, first download and install the Arduino IDE (detailed instructions can be found here). The laptops in our Maker Space already have this software pre-installed. Next, connect the Arduino to your computer using a USB A-B cable. If you're using a newer Macintosh laptop, you'll need a USB-C to USB adapter. Parts of an Arduino Uno Let's take a closer look at the components of the Arduino. First, we'll examine the left side. Reset Button: This button resets the currently uploaded code on your Arduino. Its location may vary on different boards, but it is the only button present. USB Port: This port accepts a standard A-to-B USB cable, commonly used with printers and other computer peripherals. The USB port serves two primary functions: it allows for programming the board by connecting it to a computer, and it can also supply power to the Arduino if the power port (described below) is not used. Voltage Regulator: The voltage regulator converts the input power from the power port (described below) into the standard 5 volts and 1 amp used by the Arduino. Note that this component can become very hot and should be handled with care. Power Port: This port features a barrel-style connector that accommodates power input from either a wall adapter or a battery. When using this port, the Arduino operates independently of the USB cable. The Arduino can safely handle input voltages ranging from 5V to 20V, but connecting higher voltages can cause damage. Now, let’s proceed to examine the remainder of the board. Built-in LEDs: These LEDs indicate the presence of power and activity, showing whether your Arduino is transmitting or receiving data. Digital I/O pins: The holes on this side of the board are known as digital input/output (I/O) pins. They serve dual purposes: sensing signals from the external environment (input) or controlling lights, sounds, or motors (output). TX/RX pins: Pin 0 and Pin 1 are designated as TX and RX pins. These are crucial for transmitting and receiving data between the Arduino and a connected computer. It's important to avoid leaving these pins unused. ATmega328P, black chip: Positioned at the center of the board, the black ATmega328P chip serves as the Arduino's central processing unit (CPU). It processes both the inputs and outputs, as well as executing the programming code uploaded to the Arduino. Power and ground pins: These pins are dedicated to power distribution. They allow you to supply power from your Arduino to your breadboard circuit. Analog pins: These pins are capable of reading sensor values across a spectrum of analog voltages, rather than simply detecting digital on/off states. Settings in the software Now that we've familiarized ourselves with the components of the Arduino and understood that programming is done through Arduino software, we need to configure a few settings in the software before starting. This ensures that the Arduino can communicate properly with your computer. Launch the Arduino software. Once opened, navigate to the Tools menu, then select Board. From the drop-down menu that appears, choose Arduino Uno/Genuino. You also need to designate a Serial Port for your Arduino to establish communication with the computer. A port serves as the communication channel linking your Arduino to the computer. On a Windows computer, navigate to the Tools menu, then select Port, followed by choosing the appropriate COM port indicated. It should resemble the screenshot provided below. Programming the Arduino As mentioned earlier, the Arduino IDE is available for free download from their website. Detailed instructions on how to install and configure the IDE can be found here. What’s an IDE? An IDE, which stands for integrated development environment, is a software application designed for writing and testing code in the programming language supported by the IDE. If you have programming experience, you may have used another IDE to write, test, debug, and compile your code into executable programs. If you're new to programming, the Arduino IDE is an excellent starting point because it is straightforward and user-friendly. The Arduino team has developed an IDE specifically tailored for their devices, equipped with essential features. It includes a built-in code editor for creating and editing code files. Within the IDE, you can test your code and address issues using a message area that highlights errors and a console providing detailed error messages. Additionally, the IDE offers buttons for verifying your code, saving it, opening new code windows, uploading code to your Arduino, and more. The sketch In the Arduino IDE, your program is referred to as a sketch, which serves as the fundamental unit of Arduino programming. The IDE provides example sketches that demonstrate various functionalities achievable with Arduino. To begin, connect your computer to the Arduino using a USB A-B cable. Launch the Arduino IDE and navigate to File > Examples > 01.Basics > Blink. This action will open the Blink sketch, allowing you to explore, save, and upload it as needed. Let's examine the buttons located at the top of the IDE, specifically within the sketch window. The Verify button checks your code for errors, the Upload button sends your code to the Arduino, the New button creates a new code window, the Open button allows you to open a previously saved sketch, and the Save button saves your current sketch. Here’s an annotated screenshot of the Blink sketch, highlighting its three main sections. Comments serve as notes intended for anyone reading your code, including yourself when revisiting a sketch or others with whom you share your code. Comments do not affect how the computer interprets the code and are solely for providing context or explanations of your intentions or the program's overall functionality. The setup() function is where you initialize initial conditions for your code. It runs only once, either when you start the program or power up your Arduino. The loop() function is where you place code that you want to execute repeatedly. This section typically contains all the code responsible for creating the desired functionality. For instance, in the Blink sketch, you'll find the code that toggles the LED on and off within this function. Save and rename the sketch! Once you've reviewed the Blink Sketch, save it with a new name. Navigate to File > Save As > MyBlink, for instance. This prevents overwriting the original example files and allows you to modify the example code to better grasp its functionality. Remember, saving your work frequently is a good habit to adopt. Verify and Upload Let's confirm the sketch by verifying it and then uploading it to the Arduino. Click the Verify button to check your code. Even with example sketches, it's beneficial to develop the habit of verifying your code. The bottom of the window will display messages providing insights into your sketch, including any issues if they arise. Once verified, you can proceed to upload your code. Ensure your Arduino is connected to the computer and configured correctly. Then, click the Upload button. You should observe the LED near pin 13 on the Arduino beginning to blink on and off. Follow this link for complete project: Exploring the Fusion of Physical Computing and Creative Expression ### Random Sensor Project KY-027 Magic Light Cup Module Sensor Description The KY-027 Magic Light Cup module consists of two boards, each equipped with an LED and a mercury tilt switch. By utilizing PWM to control the LEDs on both modules, you can simulate the visual effect of light "magically" transferring between them when they are tilted, reminiscent of pouring water between cups, which inspired its name. Alternatively, this pair can function as a tilt sensor. I am considering creating an enjoyable game with it. The objective would be to tilt the board until the LED brightness reaches a level between two predefined values, or for a more challenging game, precisely matches a single number (adjustable via code) to stop a buzzer. If determining the LED brightness directly from the Light Cup Module proves too challenging during gameplay, brightness readings will be available on the Serial Monitor. Requirements Arduino UNO Breadboard Jumper Wire KY-027 Magic Light Cup Module Passive Buzzer Step 1: Plugin the Magic Light Cup Module pair Step 2: Connect GND Pin with GND rail & VCC Pin of Light Cup Module with 5V rail of Breadboard Step 3: Connect Signal Pin with Digital Pin-7 of Arduino Uno Step 4: Connect LED Pin of Light Cup Module with Digital Pin-5 of Arduino Uno Step 5: Repeat step 2 on the breadboard for the 2nd Light Cup Module Step 6: Connect Signal Pin with Digital Pin-4 of Arduino Uno Step 7: Connect LED Pin of Light Cup Module with Digital Pin-6 of Arduino Uno Code: test with what we have so far int ledPinA = 5; int switchPinA = 7; int switchStateA = 0; int ledPinB = 6; int switchPinB = 4; int switchStateB = 0; int brightness   = 0; void setup() {   pinMode(ledPinA, OUTPUT);   pinMode(ledPinB, OUTPUT);     pinMode(switchPinA, INPUT);   pinMode(switchPinB, INPUT); } void loop() {   switchStateA = digitalRead(switchPinA);   if (switchStateA == HIGH && brightness != 255)   {    brightness ++;   }   switchStateB = digitalRead(switchPinB);   if (switchStateB == HIGH && brightness != 0)   {    brightness –;   }   analogWrite(ledPinA, brightness);  //  A slow fade out   analogWrite(ledPinB, 255 – brightness);  // B slow bright up   delay(20); } https://youtu.be/xEjq_hDU3tw Step 8: Plug the passive buzzers in, connect the Buzzer (+) to Arduino Pin 2 and the Buzzer (-) to Arduino Pin GND Step 9: When the brightness is not between 125 and 130, buzz Code int ledPinA = 5; int switchPinA = 7; int switchStateA = 0; int ledPinB = 6; int switchPinB = 4; int switchStateB = 0; int brightness   = 0; int buzzerPin = 2; void setup() {   Serial.begin (9600);   pinMode(ledPinA, OUTPUT);   pinMode(ledPinB, OUTPUT);     pinMode(switchPinA, INPUT);   pinMode(switchPinB, INPUT);   pinMode(buzzerPin, OUTPUT); } void loop() {   if (brightness <= 125 || brightness >= 130) {     tone(buzzerPin, 100);   }   else {     noTone(buzzerPin);   }   switchStateA = digitalRead(switchPinA);   if (switchStateA == HIGH && brightness != 255)   {    brightness ++;   }   switchStateB = digitalRead(switchPinB);   if (switchStateB == HIGH && brightness != 0)   {    brightness –;   }   Serial.println(brightness);   analogWrite(ledPinA, brightness);  //  A slow fade out   analogWrite(ledPinB, 255 – brightness);  // B slow bright up   delay(20); } Follow this link for complete project: Random Sensor Project KY-027 Magic Light Cup Module ### Surveying Altimeter for Water System Design Project Background Designing a water system necessitates estimating water pressure throughout, often referred to as "head," which denotes the vertical column of water height producing that pressure. Pump specifications typically detail the head, indicating a pump with 150 feet of head can lift water vertically up to 150 feet. Understanding the system head allows designers to select appropriately sized equipment and simulate system performance. However, modeling system heads can be complex, involving considerations such as elevation, pipe dimensions, and more. Therefore, gathering accurate data on the relative elevation between points in the system is crucial. Engineers Without Borders at the University of Rochester implemented a water chlorination system at a K–8 school in Don Juan, Dominican Republic. This system includes multiple buildings of varying heights and pumps water from a cistern to rooftop water tanks at six different elevations. Due to the sloped terrain, building height does not directly correspond to tank elevation. Moreover, existing survey data for the school is unavailable. Current methods for surveying relative altitude have notable limitations. Laser rangefinders require direct line-of-sight, surveying GPS units are costly or imprecise, and water levels are cumbersome for transport and use. A surveying altimeter offers a cost-effective, portable, and user-friendly solution for determining relative height differences between points of interest. Design Overview In our design process, we began by identifying the necessary data requirements for cost-effective vertical surveying. This informed our sensor selection and influenced the physical layout of our PCB design, ultimately determining the final form factor of our device. Initially, our proposal outlined the need for two primary sensor types: a GPS module and a pressure sensor/altimeter. Additionally, we identified the essential components required for system orchestration, including a microcontroller, a battery management system for power efficiency, and an SD card reader for data storage. These components, along with a low-cost Arduino, resulted in a compact configuration of four IC modules of similar size. To enhance user interaction, we integrated an LCD display to provide real-time status updates. Once we confirmed compatibility among the selected modules and their respective communication protocols, we concurrently tested the system on a breadboard and progressed towards designing the PCB, considering the considerable lead time for custom PCB fabrication. Upon completing the PCB assembly, our focus shifted to developing the software infrastructure necessary for acquiring and processing the required data. Simultaneously, we began designing an enclosure to house the system's input/output interfaces. However, during this phase, we encountered challenges regarding the reliability of GPS data obtained from the chosen small, cost-effective module. Initially intended to correct altitude drift in the altimeter readings, our attempts at employing various data processing techniques yielded limited success. After consulting with professors and considering our findings, we opted to pursue an alternative approach. Our next approach involved utilizing one device as a base station to monitor drift, ensuring both sensors drifted similarly for later offset correction. Subsequently, we focused on gathering altimeter data through a prolonged test setup capable of running for extended periods. Testing throughout a full day revealed that while each sensor drifted, their drift patterns were generally consistent. This observation rendered the GPS unnecessary. Finally, we restructured the software to facilitate straightforward setup and deployment of devices, including the ability to interchangeably designate the base station without requiring reconfiguration. Concurrently, we continued enhancing the software for efficient data offloading and processing. For context, altitude in meters above sea level can be derived from a pressure measurement in hPa by: Altitude = 44330*(1-(Pressure/1013.25)^0.1903) Results The pressure drift observed between two devices was found to be consistently similar over the course of one hour, which was the intended operational duration. Across 11 trial runs, the average and median drift differences between the two modules ranged from approximately 2cm to 11cm. During each trial, pressure readings were logged every second on both devices, with no movement occurring while data was being recorded. Example device drift over one hour. After confirming the consistency of drift between modules, the use case was put to the test. An experiment was conducted over a five-minute period to collect sample data, measuring changes in height between landings on outdoor stairs. One module remained at a fixed height, while the other was moved to various points of interest. The corrected and uncorrected heights in meters are detailed below. Corrected and uncorrected height measured by the altimeter, compared to actual heights of 4 points of interest (green). The improved accuracy of the corrected data becomes apparent over time. In this trial, the height initially drifted upward but was swiftly adjusted by the base station's readings, aligning closely with the expected measurements within just 2 minutes. Hardware The hardware comprises several IC modules soldered onto a PCB, which is then housed within a 3D-printed enclosure. User input is facilitated by the inclusion of buttons and a power switch integrated into the casing. Module interior The microcontroller responsible for executing the firmware and interfacing with other IC modules is the compact Arduino METRO Mini. To measure atmospheric pressure in hPa, a DPS310 barometric pressure sensor was employed. User feedback is provided through a 20x4 backlight LCD with an I2C interface, displaying the device's current status. Data logging is facilitated by an SD card reader, with pressure readings recorded to the SD card at a rate of 4Hz. Important data points are flagged within the log file. Powering each module is a rechargeable 3.7V LiPo battery managed by a dedicated battery management system. PCB Schematic and Layout Adafruit METRO Mini 328 - $12.50 Adafruit DPS310 - $6.95 Adafruit MicroSD card breakout board+ - $7.50 Sunfounder IIC I2C TWI Serial 2004 20×4 LCD - $14.99 PowerBoost 500 Charger 5V LiPo - $14.95 Lithium Ion Polymer Battery - 3.7v 2500mAh - $14.95 Custom PCB - $5 Total cost per module: $76.84 (excluding case, buttons, wires, etc.) Software The Arduino firmware was developed in C++ using the Arduino IDE and Arduino libraries. The firmware operates using a state machine to manage the device's different operational states. This is achieved by utilizing an enum to define the various state types, and a global structure to store information about the current state, previous state, and other pertinent data that needs to persist between states. Within the main loop, there are two switch cases that evaluate the current state defined by the enum. One case handles actions specific to the current state, such as displaying information on the screen, while the other manages state transitions. The software leverages Arduino and Adafruit libraries to facilitate communication and management of the various hardware modules. Libraries are employed for the SD card, LCD display, and pressure sensor modules. The battery management system is the only module without a dedicated library. One of the states ensures synchronization of both devices at startup, while the subsequent state initiates a 4Hz interrupt timer to acquire and log data. Additionally, the state machine can signal to the interrupt timer when a button press occurs, indicating that the user wishes to mark a specific data point. This approach provides both continuous data logging and the ability to highlight specific points of interest for later analysis. For access to the code and relevant documentation for the modules, please visit our GitHub repository at: https://github.com/aeleos/ISWSD Follow this link for complete project: Surveying Altimeter for Water System Design ### BOOST CONVERTER USING ARDUINO 1. Introduction As the portable electronics industry has advanced over the years, various requirements have emerged, including longer battery life, smaller and more affordable systems, brighter full-color displays, and increased talk time for cellular phones. The growing demand for power systems has made power consumption a critical concern. To meet these demands, engineers have focused on developing efficient conversion techniques, leading to the formal growth of the interdisciplinary field of power electronics. This field combines three major disciplines of electrical engineering: electronics, power, and control, presenting unique challenges. It involves control theory, filter synthesis, signal processing, thermal control, and magnetic component design. This section summarizes the motivation and background work for the thesis, as well as our contributions and the outline of the thesis. TYPES OF CONVERTERS AC-AC converter DC-DC converter AC-DC converter DC-AC converter:- An AC-AC converter, also known as a cycloconverter, transforms an AC waveform, such as the mains supply, into another AC waveform with arbitrarily adjustable output voltage and frequency. The input to a cycloconverter is typically a single-phase or three-phase AC mains supply with fixed voltage and fixed frequency. The cycloconverter produces an output with variable voltage and variable frequency, where the output frequency is lower than the input frequency. Cycloconverters are primarily used in AC traction drives. DC-AC CONVERTER:- A DC-AC converter, commonly known as an inverter, is an electrical device that converts direct current (DC) into alternating current (AC). The AC output can be adjusted to any required voltage and frequency using appropriate transformers, switching, and control circuits. The inverter essentially performs the reverse function of a rectifier. There are two main types of inverters: Modified sine wave Pure sine wave A modified sine wave inverter produces an output that resembles a square wave, except the output goes to zero volts briefly before switching to positive or negative. In contrast, a pure sine wave inverter generates a nearly perfect sine wave output, closely resembling the power supplied by the utility grid. AC-DC CONVERTER:- A device that converts AC voltage to DC voltage is called a rectifier. It is an electrical device that transforms alternating current (AC), which periodically reverses direction, into direct current (DC), which flows in only one direction. This process is known as rectification. DC-DC CONVERTER:- A DC-to-DC converter, also known as a chopper, is an electronic circuit that converts direct current (DC) from one voltage level to another. It is a type of power converter. DC-to-DC converters are essential in portable electronic devices such as cellular phones and laptops, which primarily rely on battery power. Most DC-to-DC converters regulate the output voltage. Exceptions include high-efficiency LED power sources, which regulate the current through LEDs, and simple charge pumps that double or triple the input voltage. DC-to-DC converters efficiently provide a fixed output voltage by converting the input voltage. There are three main types: Step-up DC/DC converters Step-down DC/DC converters Step-up/down DC/DC converters Currently, DC/DC converters can be categorized into two broad groups: Non-isolated DC/DC converters Isolated DC/DC converters NON-ISOLATED DC/DC CONVERTERS A non-isolated converter typically uses an inductor and does not provide DC voltage isolation between the input and output. Most applications do not require DC isolation between input and output voltages, making non-isolated DC-DC converters suitable for a wide range of uses. These converters have a direct DC path between their input and output. One major application for non-isolated DC-DC converters is in battery-based systems that do not utilize AC power lines. Another common application is point-of-load DC-DC converters, which draw input power from an isolated DC-DC converter, such as a bus converter. Most of these DC-DC converter integrated circuits (ICs) use either an internal or external synchronous rectifier. Their only magnetic component is usually an output inductor, making them less prone to generating electromagnetic interference. Compared to isolated DC-DC converters, non-isolated converters are generally less expensive, have fewer components, and require less PCB area for the same power and voltage levels. Non-isolated buck converters are often used for lower voltages (e.g., 12V). ISOLATED DC/DC CONVERTERS For safety reasons, electronic systems must have isolation between the AC input and the DC output. This requirement applies to all systems operating from the AC power line, often achieved through an isolated front-end AC-DC power supply followed by an isolated "brick" DC-DC converter and a non-isolated point-of-load converter. Depending on the application, typical isolation voltages for AC-DC and DC-DC power supplies range from 1500 to 4000V. An isolated converter uses a transformer to provide DC isolation between the input and output, eliminating the direct DC path between them. These converters utilize a switching transformer whose secondary side is either diode-rectified or synchronous-rectified to produce a DC output voltage, typically filtered by an inductor-capacitor output filter. This configuration can generate multiple output voltages by adding secondary transformer windings. Modern electronic devices demand efficient, high-quality, and lightweight power supplies. Linear power regulators, which operate based on current or voltage division, are inefficient and primarily used for low power levels. For higher power levels, switching regulators are preferred, as they operate with switches in on and off states. Advanced power electronic switches can operate at high frequencies, enabling a faster dynamic response to rapid changes in load current. These high-frequency electronic power processors are crucial for DC-DC power conversion. The main functions of DC-DC converters include: Converting DC input voltage into DC output voltage. Providing isolation between the source and load. Regulating the output voltage against varying loads. Reducing AC voltage ripple on the DC output voltage. DC-DC converters are categorized into two main types: Hard switching pulse width modulated (PWM) converters. Resonant and soft switching converters. This thesis focuses on PWM DC-DC converters, which have been popular for several decades and are used across all power levels. Certain applications impose additional technical constraints. For instance, power supplies for battery-powered electronics like laptops and mobile phones must maintain high efficiency across a wide range of loads. In desktop computers and servers, microprocessor supplies need digitally programmable output voltage, dependent on the load, with a fast dynamic response even for significant load transients. Voltage Regulator Modules (VRMs) often feature multi-phase architectures with several buck or similar converter modules operating in parallel to share the load current, enhancing dynamic response. The wide range of applications in industries, the telecom sector, and the medical field has driven the development of "Digital Power," leading to the computerization of DC-DC converters, which is a key focus area today. Enhanced performance can be achieved through modeling and simulation of the system. The modeling relies on the internal structure of the system, and system dynamics are influenced by the load. Insufficient information about system parameters can lead to design errors in the controller. Better control can be achieved using experimental data to determine load information. System identification can be done in two ways: Parametric and Non-parametric identification. In the Non-parametric method, spectral analysis and correlation analysis are used to estimate the frequency response or impulse response of the system, from which the system's behavior is inferred. In parametric estimation, a model structure is proposed, and the model's parameters are identified using information extracted from the system. This paper employs the Non-parametric system identification method. 2. Boost Converter 2.1 BOOST CONVERTER In this section, we provide a brief introduction to the boost converter, explain why we chose this type of converter, and discuss its circuit topology and the components used in its construction. Recent years have seen remarkable advancements in electrical components, driven by the demand for portability and flexibility, making devices more convenient and efficient. Power consumption is a critical factor in the operation of electrical components, and DC-DC converters play a crucial role in optimizing their usage. These converters are widely employed in various electronic devices, including telecommunication equipment, due to their ability to step up voltage and regulate it for electronic circuits. 2.2 Why Boost Converter? In general, a boost converter is the simplest method to increase the voltage of a DC supply, which is not achievable using transformers, while also ensuring high efficiency. Consider the linear regulator shown in Figure 1. In this setup, the source voltage Vs​ needs to be stepped down to the voltage VL​ across resistor R1​, resulting in a voltage drop across RL​ and consequently wasting power as heat. This issue can be resolved by using a boost converter, which operates using a switch (diode) that alternates between ON and OFF states. Figure 01. Circuit diagram of a Linear Regulator The DC-DC boost converter topology is widely utilized in power management and microprocessor voltage-regulator applications. These applications demand high frequency and rapid response to transient changes across a broad load current spectrum. Boost converters excel in converting high voltages into regulated lower voltages. They find application in computers where voltage needs to be stepped down efficiently. Boost converters also extend battery life in mobile phones that spend extended periods in standby mode. During operation, when the switch is ON, the inductor charges up to its maximum capacity. The converter then switches to the OFF state to manage this charge effectively. This capability eliminates the need for heat sinks and cooling agents, making boost converters preferable over linear regulators due to their efficiency advantages. 2.3   Boost Converter Circuit topology The term "Boost Converter" itself indicates that it increases the input voltage, resulting in a higher voltage at the output. A boost converter, or step-up voltage regulator, offers non-isolated, switch-mode DC-DC conversion with the advantages of simplicity and cost-effectiveness. Figure 2 illustrates a simplified DC-DC boost converter that takes a DC input and uses pulse width modulation (PWM) at the switching frequency to regulate the output voltage. Components typically include the source voltage Vs​, a diode, an inductor L, inductor resistance RL​, a capacitor C, and capacitive resistance Rc​, all connected to a load. Switch-mode power supplies are commonly employed to deliver output voltages higher than the input voltage to loads from an intermediate DC bus or battery source. Figure 3 depicts a simplified point-of-load boost converter where the power supply is derived from a switch-mode buck converter. The buck converter comprises a main power switch, a diode, a low-pass filter (L and C), and a load. The basic operation of a boost converter involves switching between ON and OFF states. During the ON state (when the switch is closed), current flows through the inductor from the voltage source, charging it to its peak level. In the OFF state (when the switch is open), the inductor acts as an additional voltage source, boosting the voltage supplied to the load. Figure 02. Boost Converter Circuit components used: 2.3.1 Switch Figure 03. Switch The most common type of switch is an electromechanical device operated manually, with one or more sets of electrical contacts that connect to external circuits. Each set of contacts can be in one of two states: "closed," where the contacts touch and allow electricity to flow through, or "open," where the contacts are separated and the switch does not conduct electricity. The mechanism that causes the switch to transition between these states (open or closed) can be either a "toggle" (a flip switch for continuous "on" or "off" positions) or a "momentary" (a push switch for temporary "on" or "off" actions). Electronic switch: An electronic switch refers to an electronic component or device capable of controlling an electrical circuit by either interrupting the current flow or redirecting it from one conductor to another. MOSFET: The metal–oxide–semiconductor field-effect transistor (MOSFET, MOS-FET, or MOS FET) is a transistor utilized for amplifying or switching electronic signals. Despite being a four-terminal device with source (S), gate (G), drain (D), and body (B) terminals, in many cases the body (or substrate) of the MOSFET is internally connected to the source terminal. This configuration simplifies the device to a three-terminal form, akin to other field-effect transistors, in electrical diagrams. The MOSFET is extensively used in both digital and analog circuits, surpassing the once more prevalent bipolar junction transistor (BJT). In enhancement mode MOSFETs, a voltage applied across the oxide layer induces a conductive channel between the source and drain via the field effect. The term "enhancement mode" signifies the increase in conductivity with an increase in oxide field, which creates carriers in the channel known as the inversion layer. Depending on the type of substrate, the channel can host electrons (nMOSFET or nMOS) or holes (pMOSFET or pMOS), opposite to the substrate type (p-type for nMOS and n-type for pMOS). In contrast, depletion mode MOSFETs feature a channel with carriers in a surface impurity layer of opposite type to the substrate. Here, conductivity decreases when a field depletes carriers from this surface layer. symbol: actual photo:       Figure 04: Mosfet To mitigate the increase in power consumption resulting from gate current leakage, a high-κ dielectric replaces silicon dioxide as the gate insulator, while metal gates replace polysilicon. When a voltage is applied between the gate and body terminals, the electric field penetrates through the oxide layer, creating an "inversion layer" or "channel" at the semiconductor-insulator interface. This inversion channel matches the type (p-type or n-type) of the source and drain, facilitating current flow through it. By adjusting the voltage between the gate and body, the conductivity of this layer is modulated, thereby controlling the current flow between the drain and source. MOSFETs find application in low voltage, low current, and high-frequency scenarios. Various electrical components used in project 2.3.2 Inductor Symbol: Actual image:           Figure 05: Inductor An inductor, also known as a coil or reactor, is a passive electrical component with two terminals that opposes changes in electric current passing through it. It typically consists of a conductor, such as wire, wound into a coil. When current flows through an inductor, energy is temporarily stored in a magnetic field within the coil. As the current through the inductor changes, the time-varying magnetic field induces a voltage in the conductor, following Faraday’s law of electromagnetic induction, which opposes the initial change in current. Inductors act as sources when current tends to decrease, thereby limiting high-peak currents that would otherwise be governed solely by switch resistance. When used to drop voltage, inductors store energy and control the percentage of ripple, influencing whether the circuit operates in continuous mode. The peak current through the inductor determines its required saturation-current rating, which in turn dictates its approximate size. Saturating the inductor core reduces converter efficiency and increases temperatures of components like the inductor itself, MOSFETs, and diodes. The size of the inductor and capacitor can be minimized by employing high switching frequencies, multi-phase interleaved topologies, and fast hysteretic controllers. Reducing the value of the inductor enhances transient response speed but increases current ripple, leading to higher conduction losses in switches, inductors, and parasitic resistances. A smaller inductor also necessitates a larger filter capacitor to reduce output voltage ripple. Inductors used in switched supplies are often wound on toroidal cores made from materials like ferrite or powdered iron, sometimes with distributed air-gaps to store energy. In DC-DC converters, energy is transferred from an input source to an output load at a controlled rate, and as switching frequency rises, the time available for this energy transfer diminishes. For example, in a buck converter operating at 500 kHz with a 10 µH inductor, increasing the frequency to 1 MHz typically allows the use of half the inductance, or 5 µH, for efficient operation. 2.3.3 Capacitor Symbol: Actual image:   Figure 06: Capacitor A capacitor (originally called a condenser) is a passive electrical component with two terminals used to store energy electrostatically in an electric field. Practical capacitors come in various forms but all consist of at least two electrical conductors (plates) separated by a dielectric (insulator). The conductors can be thin metal films, aluminum foil, or disks, while the dielectric, which does not conduct electricity, enhances the capacitor's charge capacity. Dielectrics can be made from materials like glass, ceramic, plastic film, air, paper, or mica. Capacitors are essential components in electrical circuits found in many common devices. Unlike resistors, capacitors do not dissipate energy; instead, they store energy in the form of an electrostatic field between their plates. Capacitors provide filtering by diverting harmonic currents away from the load. In step-down converters, output capacitance across the load minimizes voltage overshoot and ripple. The capacitor must be sufficiently large to maintain a stable voltage during the switch-off period. Inadequate capacitance leads to significant overshoots and voltage ripple, exacerbated by high equivalent-series resistance (ESR) in the capacitor. Design specifications typically dictate maximum allowable output voltage overshoot and ripple, necessitating the use of capacitors with ample capacitance and low ESR to meet these requirements. Switched power regulators in high-current, high-performance applications require capacitors chosen for minimal losses. Losses in capacitors occur due to internal series resistance and inductance. Solid tantalum capacitors are preferred for their low losses. In some cases, multiple capacitors are paralleled to achieve sufficiently low effective series resistance for very high-performance power supplies. Follow this link for complete project: BOOST CONVERTER USING ARDUINO ### Flex-It: The Ultimate Flex Sensor Showdown If you and a friend have ever wondered who is better at flexing a flex sensor just right, you can now settle it with Flex-it. Flex-it is my second original project using the SparkFun RedBoard. Flex-It: The Flex Sensor Game The Flex-It is a small game for two players, each equipped with a flex sensor connected to their own LED (red or blue). As you flex the sensor, your LED will either brighten or dim. The goal is to dim your light below a certain point. The first player to achieve this wins, locking both the sensors and LEDs. The RGB LED will then light up with the winner's color—blue if the blue player wins and red if the red player wins. To reset the game, press the button, causing the RGB LED to flash green. Players can keep track of their score by opening the serial display before starting the game. Note that opening the serial display after a few rounds will reset the game, losing records of previous wins. https://youtu.be/7JL9We5DQn0 (My apologizes about the difficulty to read the computer screen. It simply displays the score after each light has been lit up.) Development of Flex-It The assignment required us to use analog inputs and outputs. After experimenting with a flex sensor in class and using it with a motor, I found it quite interesting and decided to explore it further. I liked the idea of having two players compete to turn off LEDs. I started sketching this concept and then added an RGB LED to clearly indicate the winner. Soon after, I decided to include a button to easily reset the game, a feature that proved invaluable when I realized that resetting the entire RedBoard to restart the game was unnecessarily cumbersome. Overcoming Challenges in Flex-It Some of my biggest challenges came with the wiring. I made a few mistakes connecting resistors and wires to the appropriate parts. For example, I accidentally wired the push button incorrectly, causing the five volts to run in the same row as the wire attached to the pin, resulting in incorrect readings. I also struggled to set the appropriate range for the flex sensors and LED brightness. While this range could be adjusted more accurately with greater skill and practice, I feel I got it as close as possible. Additionally, it took me a while to get the code for the push button working correctly, and I needed my instructor's help to properly use the return() function. Finally, I decided to track the score and display it on the Serial display using Serial.println();. With these challenges addressed, I completed the project, as seen below. Building Your Own Flex-It If you'd like to build your own Flex-It, read below for schematics, parts, and the code. Parts Needed: (1) SparkFun Redboard or Arduino Uno (1) Blue LED (1) Red LED (1) RGB LED (2) Flex Sensors (5) 330 Ohm Resistors (3) 10K Ohm Resistors (1) Push Button (Approx. 19) Wires The basic schematic and sketch can be seen below: Connecting Components for Sensor and LEDs To set up your circuit as described: Flex Sensor Setup: Connect one end of a wire to the 5 volts supply. Attach the other end of the wire to the side of the flex sensor that leads to the thin line. Resistor and Analog Output Connection: From the opposite side of the flex sensor, connect a 10K Ohm resistor to ground. Attach another wire from this side to one of the analog output pins (e.g., A0 or A1). LED Connections: Blue and Red LEDs: Connect the negative ends of the blue and red LEDs to ground. Run a wire from pin 11 through a resistor to the positive side of the blue LED. Similarly, connect the red LED's positive side to pin 10 through a resistor. Use any PWM-capable digital pins for these connections (marked by a tilde (~)). RGB LED Connection: Connect the red, green, and blue pins of the RGB LED to any digital output pins (e.g., 9, 8, and 7 respectively). Button Setup: Apply 5 volts to one row of the button. Connect a wire from the button to a digital pin. Place a resistor between this digital pin and ground. This setup allows you to effectively interface the flex sensor, LEDs, and button with your microcontroller or Arduino board. Adjust pin numbers as needed based on your specific hardware configuration. Provided Code Below is the code I utilized. Please feel free to make any necessary adjustments. /* Flex-it The game should work that two players flex the sensors with the intent of dimming the light to a certain point. Whoever succeeds first the RGB LED will light up that color, i.e. if blue wins then the RGB LED will light up blue. If the push button is pressed it should reset the circuit so it can be played again. And if the Serial screen is opened it will keep track of the score, though it must be started before the two players begin. */ //Set up variables const int blue = 11; const int red = 10; const int RGBred = 9; const int RGBgreen = 8; const int RGBblue = 7; const int pushButton = 2; const int minRed = 15; const int maxRed = 330; const int minBlue = 15; const int maxBlue = 345; int counterRed = 0; int counterBlue = 0; void setup() {   // set up our inputs   pinMode(pushButton, INPUT);   //set up our outputs   pinMode(RGBred, OUTPUT);   pinMode(RGBgreen, OUTPUT);   pinMode(RGBblue, OUTPUT);   Serial.begin(9600); } void loop() {      digitalWrite(RGBgreen, LOW);   int redSensor; // define a variable for the red light's sensor   int blueSensor; // define a variable for the blue light's sensor   int redMap; // map the range of the red sensor to fit analog values better   int blueMap; // map the range of the blue sensor to fit analog values better   redSensor = analogRead(A1);   blueSensor = analogRead(A0);   //have the values of the sensors sent to our computer   //so that we can set our output to the most appropriate values   //Serial.println("redsensor:");   //Serial.println(redSensor);   //Serial.println("redmapping");   //Serial.println("bluesensor:");   //Serial.println(blueSensor);   //delay(1000);   //These were used for debugging and are limited to comments   // so the final score can be displayed with less clutter.   //constrain the results of our sensor to the sweet   //spot of the flex senors   redSensor = constrain(redSensor, minRed, maxRed);   blueSensor = constrain(blueSensor, minBlue, maxBlue);   //map the values of the sensor to be more accurate   //with analogWrite   redSensor = map(redSensor, minRed, maxRed, 0, 255);   blueSensor = map(blueSensor, minBlue, maxBlue, 0, 255);   analogWrite(red, redSensor);   analogWrite(blue, blueSensor);   int buttonState; // set up a variable to use for our reset button   while ((redSensor < minRed)) { //indicates that red won     digitalWrite(RGBred, HIGH);     analogWrite(blue, 255);     buttonState = digitalRead(pushButton); //check the value of the push button     if (buttonState == HIGH) { //resets the game       analogWrite(red, 0);       digitalWrite(RGBred, LOW);       analogWrite(blue, 0);       digitalWrite(RGBblue, LOW);       digitalWrite(RGBgreen, HIGH);       counterRed++; // keeps track of how many times red has won.       Serial.println("Red Wins:");       Serial.println(counterRed);       Serial.println("Blue Wins:");       Serial.println(counterBlue);       delay(1000);       return (loop());       Serial.println("it works"); // message to ensure the switch work     }   }   while ((blueSensor < minBlue)) { //indicates that blue won     digitalWrite(RGBblue, HIGH);     analogWrite(red, 255);     buttonState = digitalRead(pushButton); //check the value of the button     if (buttonState == HIGH) { //resets the game       analogWrite(red, 0);       digitalWrite(RGBred, LOW);       analogWrite(blue, 0);       digitalWrite(RGBblue, LOW);       digitalWrite(RGBgreen, HIGH);       counterBlue++; // keeps track of how many times blue has won.       Serial.println("Red Wins:");       Serial.println(counterRed);       Serial.println("Blue Wins:");       Serial.println(counterBlue);       delay(1000);       return (loop());       Serial.println("it works"); // message to ensure the switch worked     }   } } Code Explanation and Project Suggestions The code is relatively straightforward. Most of the points are clarified in the comments, but I'll summarize the main aspects here. Essentially, the code initializes variables and reads analog input values directly. Instead of specifying them as inputs at the start, we read and find a usable range. This range constrains the values we read and maps them to a relative range for our analog outputs. The code continuously checks these values until either the red or blue analog output reads below the minimum, triggering the RGB LED to light up and halting analog value calculations. It also increments the appropriate scorer’s points. Additionally, the code monitors the push button status; if it reads high, the loop restarts until power is cut. The project could expand to any analog input, like a potentiometer. Using a larger breadboard would reduce clutter and accommodate features like an LCD score display instead of relying on the computer's Serial monitor. Space constraints prevented integrating this; adjusting maximum and minimum values might enhance precision. Occasional issues arise where flex sensors dislodge while being flexed, possibly due to user error; improving pin grip would help. Follow this link for complete project: Flex-It: The Ultimate Flex Sensor Showdown ### Arduino Sketcher: Drawing with Processing & SparkFun Redboard This project, dubbed the Arduino Sketcher, is a straightforward device designed for drawing pictures on your computer screen. Utilizing a processing code and the SparkFun Redboard, it simplifies the process of creating digital art. Device Description and Functionality The device consists of four push buttons: red, green, blue, and a neutral button. Each button changes the line color to its corresponding color, while the neutral button resets the drawing. Simultaneously pressing and releasing the red and blue buttons creates magenta, following the same principle for other color combinations. However, this feature is sensitive and can be challenging to operate smoothly. An RGB LED on the screen indicates the current drawing color. Additionally, a soft potentiometer moves the line up when pressed at the top and down when pressed at the bottom. A standard knob potentiometer adjusts the line horizontally: turning right moves the line right, and turning left moves it left. https://youtu.be/-F42XGuPFPM Interface Design for Processing Code The assignment required us to develop an interface for the provided Processing code. This interface needed to facilitate drawing, color changing, and canvas resetting. After careful consideration, I decided to explore using the soft potentiometer as a novel approach for drawing. Initially, I entertained the idea of integrating all four directional controls into one soft potentiometer, leveraging its different zones for each direction. However, I discarded this idea due to concerns about overcrowding the soft potentiometer. Subsequently, I experimented with using two separate soft potentiometers but found that the knob potentiometer offered a satisfactory interface during testing. Ultimately, I opted to combine the knob potentiometer with the soft potentiometer for enhanced usability. Early in the design process, I determined that controlling and displaying drawing colors using buttons and an RGB LED would be effective. Challenges Encountered While working on the project, I faced several challenges that required troubleshooting. Primarily, it took me some time to devise the correct code to ensure the sketching program drew lines accurately. One significant issue arose from inadvertently using Serial.println() in my code, which disrupted the communication between Arduino and Processing. Additionally, I encountered a coding issue where a line of code inadvertently reset the drawing position, restricting me to drawing only one line at a time. Furthermore, there was a wiring mishap at one point. This resulted in the color switching to red whenever I pressed the lower part of the soft potentiometer, instead of the intended functionality. Building Your Own Arduino Sketcher: Parts List To construct your own Arduino Sketcher, follow along for sketches, schematics, and code details. Parts Needed: (1) Arduino Uno or SparkFun Redboard (1) Solderless breadboard (4) Push buttons (1) RGB LED (1) Soft potentiometer (1) Regular potentiometer (3) 330 Ohm resistors (6) 10K Ohm resistors Several wires These components will form the foundation of your Arduino Sketcher project. The basic sketch and schematic are below. Wiring Instructions for Components Potentiometers: Apply 5 volts to the right pin of each potentiometer. Connect the middle pin to an analog input pin: A0 for the knob potentiometer and A1 for the soft pot. Connect a 10K Ohm resistor from the middle pin to ground. Connect the leftmost pin to ground. Buttons: Connect 5 volts to one terminal of each button. From the other terminal, connect a 10K Ohm resistor to ground. Connect a wire from this terminal to a digital pin (e.g., 7, 8, 3, 2). RGB LED: Connect the ground pin of the RGB LED to ground. Use a 330 Ohm resistor to regulate current to the wires connected to digital pins. Connect these wires to digital pins for RGB control (e.g., 4, 5, 6). The Arduino code used can be viewed below. Project_3 Code Functionality Overview The code comments should provide most of the details on its operation. Essentially, the code monitors the status of all devices and triggers corresponding functions when necessary. For instance, when the state of the red button changes, it invokes the colorRed() function, defined as follows: void colorRed() { //turns the LED and the color of drawing red   digitalWrite(LEDblue, LOW);   digitalWrite(LEDgreen, LOW);   digitalWrite(LEDred, HIGH);   Serial.write('c');   Serial.write(255);   Serial.write(0);   Serial.write(0); } Likewise, when the soft potentiometer reads a value within a specified range, it triggers a function to adjust the position accordingly, exemplified by moveDown() as shown below: Project Overview and Improvements I structured the code to call numerous functions, simplifying the loop() function to trigger actions as needed. Unfortunately, I can't share the Processing code, as it was provided by my instructor. However, I made a minor adjustment: I modified the drawing point to extend to the edges rather than the center. This change involved updating prevX from width/2 to width, and similarly adjusting prevY to height. Reflecting on the project, there are areas for improvement. Mixing colors like magenta, yellow, and cyan has proven challenging, as access to white and black is limited. Attempting to incorporate these colors with just two buttons—pushing and releasing three simultaneously—is impractical. Expanding the project on a larger breadboard with more buttons could resolve this issue. Initially, I had only four buttons, and by the time I realized the limitations of my setup, it was too late to gather additional components. The knob potentiometer, while functional, becomes uncomfortable over prolonged use. I attempted to address this by fashioning a makeshift knob with a pen, but it occasionally shifts unintentionally, causing drawing glitches. Additionally, the soft potentiometer sporadically registers input without physical contact. This could be due to hardware issues or minor glitches in the code or wiring that might be rectifiable. Lastly, there's a noticeable delay when switching colors, which pauses drawing for a few seconds. This delay likely results from the Processing code processing each command and byte sequentially. Eliminating this delay would enhance the project's responsiveness and usability. Follow this link for complete project: Arduino Sketcher: Drawing with Processing & SparkFun Redboard ### Tweet-O-Temp: Tweeting Temperatures with SparkFun Redboard The Tweet-O-Temp includes a temperature sensor that continually monitors its surroundings. It operates by measuring the voltage and converting it to degrees Celsius. Since I reside in the United States, where Fahrenheit is commonly used, it also converts the temperature from Celsius to Fahrenheit. Additionally, the device incorporates an Adafruit GPS breakout module, which continuously tracks its position, time, and date, transmitting this data to the Arduino. Originally, the device records time in GMT (Greenwich Mean Time), necessitating conversion to Chicago Central Time. It requires manual adjustment for daylight saving time, which is not currently observed at the time of writing. Finally, the device utilizes an Arduino Ethernet shield and Ethernet cable to connect to the Internet. With the press of a button, it sends information from the GPS and temperature sensor to Twitter. Moreover, the device is programmed to automatically post a Tweet daily at a specified time, featuring the current time, date, location, and temperature. https://youtu.be/___LkptUxDc Exploring Physical Computing: The Genesis of the Tweet-O-Temp This project was my initial assignment with no strict guidelines, allowing me the freedom to explore various components and concepts in physical computing. It took considerable time to settle on a direction. My fascination with the Ethernet shield and its potential to integrate my Redboard with Twitter was a major influence. The inspiration stemmed from learning about a similar device that tweeted when connected plants needed water—a concept that intrigued me greatly. Driven by the idea of leveraging Arduino's capability to send Tweets, I brainstormed potential applications. After assessing my available components, the concept of utilizing a temperature sensor and GPS emerged as the foundation for my current project setup. Challenges Faced in Designing the Tweet-O-Temp Throughout the development of this project, I encountered numerous challenges. Initially, my plan was to utilize the Arduino's built-in EEPROM memory to store temperature readings at regular intervals, updating them every two minutes. Another button press would trigger the system to send the stored value and a corresponding message to Twitter. Unfortunately, the limited memory of the Arduino Uno/SparkFun Redboard posed a significant constraint. Despite including the code for this functionality in the main program, I had to comment it out due to space limitations. Upgrading to an Arduino with more memory could potentially resolve this issue and enable the use of this feature. Furthermore, the memory shortage caused occasional instability in the device. Resetting the code typically restored functionality, but this became a frustrating inconvenience. Another hurdle involved organizing the code correctly, as I often struggled with correctly handling integer and float values. The GPS module also presented challenges, particularly indoors where it frequently struggled to receive a signal. Additionally, adjusting the device to accurately reflect my local time zone and account for daylight saving time took considerable effort, as it initially adjusted days based on GMT rather than my local time zone. Building Your Own Tweet-O-Temp: Parts and Schematics Parts: (1) Arduino Uno/SparkFun Redboard (consider using a microcontroller with more memory for improved stability) (1) Arduino Ethernet Shield (1) Ethernet Cable (1) TMP 36 Temperature Sensor (1) Adafruit GPS Breakout (Adafruit GPS Ultimate Breakout can also be used) (1) Push Button (1) 10K Ohm Resistor Several wires Below, you can find the basic schematic and code sketch for your reference. Assembling the Tweet-O-Temp: Step-by-Step Instructions Attach the Ethernet Shield: Place the Ethernet shield onto the Arduino/Redboard. Connect the Push Button: Connect one end of the push button to 5 volts. From the other end, run a resistor to ground and a wire to a digital input pin (I used pin 5). This setup ensures that when the button is unpressed (open), the current flows through the resistor to the ground. When the button is pressed (closed), the current flows into the digital pin on the Arduino, configured as an input in the code. Connect the Temperature Sensor: With the flat end of the TMP 36 temperature sensor facing you, connect ground to the right pin, 5 volts to the left pin, and the middle pin to an analog input (I used A0). This configuration allows the sensor to send a current to the analog pin based on the temperature, with the excess current passing to the ground. Connect the GPS Module: Connect 5 volts to the VIN pin on the GPS module. Connect the GND pin on the GPS module to ground. Connect the RX pin on the GPS module to pin 2 on the Arduino and the TX pin to pin 3. This setup provides power to the GPS and enables the Arduino to receive data via the specified pins. Follow these steps to assemble your Tweet-O-Temp. The basic schematic and code sketch are provided below for further guidance.   The code can be found from the link below Intermediate_Project_1 Key Feature: Sending a Tweet The code comments provide detailed explanations, but here’s a highlight of the key feature—how the Tweet is sent. The Arduino continuously monitors the state of the button. When the button is pressed, it triggers the function below. This function first adjusts the time to the correct time zone and day. Then, it reads the temperature and sends a message to Twitter based on the current temperature. The placeholders %d in the message are replaced with the appropriate information, ensuring the Tweet displays the correct readings. void sendTweet(int degreesF) {   getTime();   if (degreesF >= 70) {     sprintf(msg, "Date:%d/%d/20%d  Time:%d:%d:%d It is currently %d °F near %d°, %d°. Look's like a hot one today. Bust out the shorts! - Arduino", GPS.month, GPS.day, GPS.year, GPS.hour, GPS.minute, GPS.seconds, degreesF, int(GPS.latitudeDegrees), int(GPS.longitudeDegrees));   }   if ((degreesF < 70) && (degreesF >= 40)) {     sprintf(msg, "Date:%d/%d/20%d Time:%d:%d:%d It is currently %d °F near %d°, %d°.  LIttle chilly today, better take a jacket with you. - Arduino.", GPS.month, GPS.day, GPS.year, GPS.hour, GPS.minute, GPS.seconds, degreesF, int(GPS.latitudeDegrees), int(GPS.longitudeDegrees));   }   if ((degreesF <= 40) && (degreesF >= 0)) {     sprintf(msg, "Date:%d/%d/20%d Time:%d:%d:%d It is currently %d °F near %d°, %d°.  Better bundle up, looks cold out there. - Arduino", GPS.month, GPS.day, GPS.year, GPS.hour, GPS.minute, GPS.seconds, degreesF, int(GPS.latitudeDegrees), int(GPS.longitudeDegrees));   }   if (degreesF < 0) {     sprintf(msg, "Date:%d/%d/20%d Time:%d:%d:%d It is currently %d °F near %d°, %d°.  It's freezing out there, you should stay in. -Arduino", GPS.month, GPS.day, GPS.year, GPS.hour, GPS.minute, GPS.seconds, degreesF, int(GPS.latitudeDegrees), int(GPS.longitudeDegrees));   }   if (twitter.post(msg)) {     int status = twitter.wait(&Serial);     if (status == 200) {       Serial.println("OK.");     } else {       Serial.print("failed : code ");       Serial.println(status);     }   } else {     Serial.println("connection failed.");   }   delay(3000); } Project Improvement Suggestions As I have previously mentioned, the project could benefit from some significant improvements. Using a device with larger memory should enhance the circuit's stability. Additionally, this upgrade would enable the Arduino to store values, making the device more practical, especially when paired with a battery. Integrating a WiFi shield would further improve practicality by allowing the device to operate without being tethered to a wall outlet. Regarding the temperature sensor, it appears to have accuracy issues. It's unclear whether this is due to a problem in the code or the sensor itself, though I suspect the latter. Addressing this issue would significantly enhance the device's accuracy. Furthermore, since the GPS device performs better outdoors, it would be advantageous to build a case for outdoor storage while keeping the button accessible inside for convenience. Follow this link for complete project: Tweet-O-Temp: Tweeting Temperatures with SparkFun Redboard ### System for detecting objects using Arduino Project Abstract I've been exploring the idea of creating a robot using Arduino technology for a while now. This project marks the initial phase of this ongoing hobby endeavor. The aim is to construct an object detection system that can be integrated into a semi-autonomous robot in the future. The system employs an ultrasonic range finder to identify obstacles in close proximity to the device. To provide a sweeping view, the ultrasonic sensor is affixed to a sub micro servo. Additionally, a Passive Infrared (PIR) sensor is utilized to activate the SONAR when motion is detected. Sensor readings and distance measurements are transmitted wirelessly via 802.15.4 to a computer for visual representation. Furthermore, the microcontroller's code triggers audible alerts using a serial-driven voice synthesizer chip connected to a small speaker. Status The project has reached its successful completion, achieving my objective of seamlessly integrating all underlying technologies. The device can effectively capture SONAR readings at designated servo angles and wirelessly transmit them to a Processing sketch, where they are presented for straightforward analysis. Furthermore, the device is equipped to vocalize and announce essential status updates and object detection occurrences. In the subsequent sections, I will elaborate on several aspects that could benefit from further enhancement. Among these are XBee wireless programming and the exploration of a sturdier power supply solution. Specification Hardware I constructed this device using the Arduino Duemilanove microcontroller, primarily because I already owned one and had prior experience interfacing with it, aiming to deepen my understanding. Arduino, an open microcontroller platform, employs an AVR-C derivative known as Wiring. Its compatibility with shields for prototyping, SpeakJet, and XBee made it a suitable choice for this project. For the SONAR component, I opted for a Devantech SRF10 ultrasonic sensor mounted on a Grand Wing Servo (GWS) sub micro servo. Mounting the SRF10 involved using two screws and the SRF10 mounting kit. Since each servo shipped with only one screw of the correct size for mounting the servo horn, ordering two servos proved beneficial. Aligning the circular horn with the mounting kit required some patience due to the small size of the parts and screws. The SRF10 utilizes an I2C interface, utilizing analog pins 4 and 5 in alternate function I2C mode for communication. Connecting it this way enables the Wire library to communicate with the sensor via the Arduino's I2C bus. Digital output capabilities of the Arduino are employed for controlling the servo to which the ultrasonic sensor is attached. The Servo library effectively abstracts Pulse Width Modulation (PWM), which governs the servo's movement. A digital input is utilized for detecting motion within range using a Parallax Passive Infrared Sensor (PIR). This straightforward device sets the pin high upon sensing motion. To enable speech functionality, my Arduino code communicates with a Magnevation SpeakJet via a software serial connection. I opted for the NewSoftwareSerial library instead of the built-in SoftwareSerial library due to its efficiency and higher speed capabilities. For interfacing with the computer, the XBee serves as a serial port replacement for transmitting sensor data from the microcontroller. Two Digi XBee Series 1 Pro chips were employed for this task. Wiring Code To ensure seamless integration of all hardware components, I developed four libraries. The Wiring code for each library is provided in the attachment accompanying this paper. To enhance reusability, each library includes #define statements for configuring different elements. Below are the names of the libraries along with their respective configuration elements: The pir_controller initializes the Passive Infrared Sensor (PIR) and waits for a motion detection event: #define PIR_PIN specifies the digital pin number assigned to the PIR. #define PIR_CALIBRATION_TIME determines the duration for PIR calibration. The servo_controller initializes the servo and controls its movement. #define SERVO_PIN specifies the digital pin number assigned to the servo. #define MIN_DEGREE defines the minimum degree to which the servo can be moved. #define MAX_DEGREE defines the maximum degree to which the servo can be moved. #define DEGREE_STEP defines the increment by which the servo moves during panning. #define MID_DEGREE specifies the midpoint degree position of the servo during a sweep. #define SWEEP_RESOLUTION determines the total number of steps in a full sweep. The sonar_controller initializes the SRF10, retrieves range values, and manages sweep rotation by calling the servo_controller. #define SRF_ADDRESS stores the address of the SRF10. The speakjet_controller initializes the SpeakJet and articulates various pre-stored messages stored within the library. Processing Code I created a straightforward processing sketch that plots the Cartesian coordinates of the sensor data and links these points with lines. The code was quickly assembled by combining an example I stumbled upon (http://www.uchobby.com/index.php/2009/03/08/visualizing-sensor-with-arduino-and-processing) with snippets of J2ME code borrowed from a LIDAR plotting routine I developed last semester. You can find the processing code in the attachment accompanying this document. Figure 1: Processing Sketch for Visualization Supply List Price SKU: Supplier Ardino IDE $0.00 N/A http://www.arduino.cc Processing IDE $0.00 N/A http://processing.org X-CTU Configuration Software $0.00 N/A http://www.digi.com Libelium Xbee Shield $24.95 SKU# 51835 www.hvwtech.com Devantech SRF10 Tiny Ultrasonic Ranger $59.95 SKU# 40326 www.hvwtech.com Devantech SRF10 Mounting Kit $8.95 SKU# 40360 www.hvwtech.com Sub Micro Servo - NARO HP BB $15.95 SKU# 22150 www.hvwtech.com XBee Series 1 Pro (x2) $75.90 WRL- 08690 www.sparkfun.com XBee Exporer USB $24.95 WRL- 08687 www.sparkfun.com 9V Switched Battery Case with Barrel Jack $5.00 N/A www.sparkfun.com VoiceBox Shield $39.95 DEV- 09624 www.sparkfun.com Arduino Duemilanove $29.99 DEV- 00666 www.sparkfun.com ProtoShield Kit $16.95 DEV- 07914 www.sparkfun.com Mini Breadboard $3.95 PRT- 08800 www.sparkfun.com Jumper Wire Kit $6.95 PRT- 00124 www.sparkfun.com Jumper Wires Premium 6" M/F Pack of 100 $24.95 PRT- 09139 www.sparkfun.com Break Away Headers - Straight $2.50 PRT- 00116 www.sparkfun.com Break Away Headers - Right Angle $1.95 PRT- 00553 www.sparkfun.com Arduino Stackable Header - 8 Pin (x2) $1.00 PRT- 09279 www.sparkfun.com Arduino Stackable Header - 6 Pin (x2) $1.00 PRT- 09280 www.sparkfun.com Loktite Mounting Putty $1.88 N/A Wal-Mart Parallax PIR Sensor Module $9.99 276-033 Radio Shack Nylon Wire Ties $2.49 278-1632 Radio Shack Coat Hanger $0.00 N/A N/A Assorted Wire Bundles $0.00 N/A Junk computer Small Speaker $0.00 N/A Junk computer Table 1: Parts List Implementation & Construction Ultrasonic Sensor Assembly 1. Delicately attach header pins to the SRF10, optionally using mounting putty to secure them in place. 2. Insert the rubber grommets into the SRF10 mounting bracket, using a pen if necessary to compress them into a precise circular form. 3. Carefully slide the SRF10 into the rubber grommets. Secure the SRF10 mounting kit to the servo horn using small screws. Connect four prototyping cables to the sensor. To prevent them from slipping off during servo panning, secure them with a wire tie. Avoid screwing the servo horn into the servo for now. The horn fits snugly enough onto the servo without screws, allowing for easy adjustments to the sensor alignment within the roughly 130-degree rotation range of the Pico servo. Shield Assembly Arduino shields typically require some degree of assembly. Even pre-built shields often need header pins to be soldered on. Refer to the assembly documentation as necessary. Assemble the ProtoShield by following the instructions available at: http://www.ladyada.net/make/pshield/solder.html. Use double-sided tape to attach the mini breadboard to the ProtoShield. Solder female header pins and speaker connection pins to the VoiceBox shield, which contains the SpeakJet and amplification circuitry. To save space, I used right-angle connectors. Mounting putty is very helpful for holding the components in place while soldering. If desired, place a small jumper between digital pins 0 and 2 to command the SpeakJet using the PheaseALator software. NOTE: Ensure the female headers are aligned correctly, as misalignment can make stacking the shields difficult. Arduino Assembly At this stage, we are ready to stack the shields and start building the prototype. Begin by placing the Arduino on a flat surface. Attach jumper wires to all the ICSP header pins. These will be connected to the XBee shield later. Use zip ties to keep them organized. Insert stackable header pins into the 6 and 8 pin rows. This step is necessary to provide clearance for the jumper wires added earlier. Stack the VoiceBox shield on top of the Arduino. Stack the ProtoShield on top of the VoiceBox shield. Depending on your ProtoShield model, you might find that the pins on top do not align correctly for stacking an additional shield. You can fix this by connecting two stackable headers and carefully bending the pins on one of them to correct the offset. 7. Complete the stack by placing the XBee shield onto the topmost layer of stackable header pins and connecting the wires to the ICSP header on the XBee shield. Using right-angle connectors facilitates quick removal of these connections for USB programming. Servo Mount This section allows for creative interpretation, but the following steps outline the design I improvised for this prototype: Insert the rubber grommets included with the servo into their designated mounting slots. Cut a piece of coat hanger to a length of approximately one foot. Using pliers, bend the hanger wire so it fits into the mounting grommets and holds the servo. I discovered that angling it slightly upward helps prevent the SONAR sensor from detecting the ground instead of outward. The ProtoShield and VoiceBox shield have pre-drilled holes for PCB offset pads. Utilize these holes, along with mounting putty or hot glue, to securely attach the servo. Ensuring a stable servo mount is crucial for maintaining accuracy. Breadboard Detail This step is optional, but it results in a neater assembly with fewer stray wires that could obstruct the servo's rotation. Use 90-degree header pins to add connectors for the PIR, servo, and I2C connections. Route the appropriate power, ground, and GPIO pins to each connector using flat jumper wires. Double-check all connections. Verify everything once more and then connect the wires to the header pins. If you have any old computers, you might be able to salvage some lengths of multi-strand wires with pre-attached headers. 5. At this stage, you might want to try breadboarding the XBee wireless programming circuit detailed at: http://www.ladyada.net/make/xbee/arduino.html. Although I didn't have much success with the XBee shield, it seems feasible, and I plan to revisit this later. XBee Configuration The provided link offers a comprehensive tutorial on configuring XBee adapters to communicate with each other. Here are some tips: Connect the XBee Explorer USB to your PC and install FTDI drivers if necessary. Always ensure that you insert the XBee in the correct orientation to avoid damaging it. Utilize the X-CTU tool downloaded from the Digi support site to make the documented changes. I've found it helpful to adjust parameters, firmware, and baud rates separately, as the XBee chip can be sensitive otherwise. If you encounter difficulties connecting the tool to the XBee, remain calm. It's unlikely that you've caused any permanent damage through misconfiguration. Verify that the baud rates in X-CTU match those programmed into the XBee. You might have success by enabling API mode and reflashing the firmware. Another method is to short the ground and RST pins to force the XBee to restart. Remember, online resources can be helpful in troubleshooting. The Funnel IO project has released an XBee configuration that functions effectively, provided your XBee chips are running the supported firmware version: http://funnel.cc/Hardware/FIO For wireless programming, it's preferable to use an XBee Series 1 chip. Series 2 (now 2.5) chips do not support transparent IO line passing, necessary for resetting the Arduino. Alternatively, you can perform the reset in software, but it's not optimal, as timing it correctly can be challenging. Functional Testing Power Issue After assembling everything, I disconnected the ICSP pins from the XBee shield and proceeded to develop code using USB. However, I observed that the speaker would output gibberish when the servo moved, and the ultrasonic sensor would occasionally crash while attempting to obtain readings. This issue stemmed from the inconsistent power supply provided by the USB connector. I attempted to address this by using capacitors, but ultimately, the only effective solution I found was to utilize a separate AC transformer during testing. I discovered that a 9V battery is unsuitable for this application. It struggles to supply sufficient current, particularly as its charge diminishes rapidly over time. I intend to conduct further research on battery options and invest in a more robust rechargeable battery kit. Ultrasonic Sensor Accuracy Issue Initially, I encountered numerous challenges in obtaining consistent readings from the sensor. To address this, I devised functional tests involving multiple sonar sweeps and calculated the absolute value deltas between them. I recorded these sensor readings and delta calculations in a spreadsheet. Additionally, I conducted a test scenario where I took multiple sensor ranging samples at each step. It was during this process that I observed larger deltas between the first and second ranges compared to those between the second and third readings. Moreover, larger deltas were evident at both ends of the sweep. The data clearly indicated that insufficient time was allocated for the servo to move. By increasing the delay between readings to allow the servo more time to adjust its position, and by introducing delays at the beginning and end of the sweep, I achieved significantly more reliable results. Furthermore, I observed that reducing the analog gain sensitivity during these tests appeared to mitigate anomalous readings between passes. SpeakJet Command Issue This chip exhibited unpredictable behavior, seemingly speaking at random intervals without adherence to commands. It appeared to prioritize event pins over continuous serial commands in its design. I attempted to address this issue by switching to the NewSoftSerial library and breaking sentences into smaller segments, incorporating delays into the routine that transmitted each segment. However, these measures proved ineffective in resolving the issue. The ultimate resolution, not found in any documentation I came across, involved adding a SpeakJet command to insert a 0 ms pause at the conclusion of every character array before transmitting it to the SpeakJet. This acted as a string terminator, preventing previous commands from randomly overlapping with subsequent ones. It proved to be a straightforward remedy for a vexing issue that took days to unravel. Setup microcontroller and IDE Completed Configure XBee interface Completed Research sensor options Completed Research servo options Completed Order parts as needed Completed Build basic test apparatus Completed Interface with servo Completed Test servo range of motion Completed Interface with I2C sensor bus Completed Interface with SpeakJet Completed Interface with PIR Completed Write pir_controller Completed Write servo_controller Completed Write sonar_controller Completed Write speakjet_controller Completed Assemble travel-friendly prototype Completed Write Processing sketch Completed Calibrate ultrasonic sensor output Completed Refine sonar_controller Completed Refine speakjet_controller Completed Test completed code Completed Table 2: Milestone Chart Figure 2: Hardware Block Diagram Figure 3: Software Block Diagram Figure 4: Flowchart of sensor analysis logic Retrospective I'm pleased with my decision to complete this project using Arduino. It marked my first substantial coding endeavor on this platform, and compared to writing C for the Zilog ZNEO, creating Wiring libraries for Arduino proved to be a more enjoyable and efficient experience. While my time with the ZNEO provided valuable insights into low-level operations, it's refreshing not to be bogged down by such concerns. A key takeaway from this project is the finicky nature of sonar technology. Factors like positioning, timing, and environmental conditions can significantly influence readings. I found the performance of the SRF10 in this specific scenario disappointing due to its broad beam pattern, necessitating extensive fine-tuning to achieve accurate readings as the servo rotated. In hindsight, I might have sought out a sensor with a narrower beam pattern. Integrating an infrared range finder would also have been beneficial, given the relatively long time required to capture ultrasonic range samples. Nonetheless, the broad beam pattern of the SRF10 may still be suitable for stationary installations or situations where the servo's movement is sporadic, making it a valuable asset for future projects. One area requiring further attention is the integration of XBee with Arduino. Initially, I acquired Series 2 Pro XBee chips, unaware of their limitations regarding wireless Arduino programming. Upon realizing this, I procured new Series 1 XBee chips. However, I've yet to achieve wireless uploading of Arduino sketches, a feature I'm keen to implement. I believe many of my issues with programming the SpeakJet could have been mitigated by integrating a text-to-speech processor. Consequently, I intend to explore acquiring a TTS256 or similar component and integrating it into the prototype area of the VoiceBox shield. As mentioned earlier, battery power is another area requiring consideration. A 9V battery proves inadequate for this project's demands, highlighting the need for a more robust, long-term portable power supply solution, such as a higher-output rechargeable battery. Attachments Arduino Code Processing Code Hardware Block Diagram Software Block Diagram Process Flowchart Follow this link for complete project: System for detecting objects using Arduino ### Analog to Digital Converters: Key to Bridging Analog and Digital Worlds Analog to Digital Converters (ADCs) are fundamental in modern electronics, playing a crucial role in translating analog signals into digital data that digital systems can process. This conversion is essential across a variety of fields, including medical technology, consumer electronics, industrial automation, and automotive systems. By enabling the integration of real-world analog signals with digital processing units, ADCs are driving technological advancements and innovations. Overview of Analog to Digital Converters ADCs operate by sampling an analog signal at regular intervals and converting each sample into a digital value. This process involves three main steps: sampling, quantization, and encoding. Sampling: The ADC measures the amplitude of the analog signal at discrete moments in time. Quantization: The measured amplitude is then mapped to the nearest value within a range of discrete digital levels. Encoding: The quantized value is encoded into a binary format that can be processed by digital systems. The performance of an ADC is characterized by several key parameters, including resolution, sampling rate, and signal-to-noise ratio (SNR). These parameters determine the accuracy and efficiency of the conversion process. Types of ADCs 1. Successive Approximation Register (SAR) ADCs SAR ADCs use a binary search algorithm to convert the analog input into a digital output. This type of ADC is known for its high resolution and moderate speed. The conversion process involves a comparator, a DAC, and a successive approximation register that adjusts the DAC output until it matches the analog input. SAR ADCs are commonly used in applications that require high accuracy and moderate speed, such as medical devices and digital multimeters. Their primary advantages include low power consumption and high resolution. However, their speed is limited compared to other ADC types, making them less suitable for very high-speed applications. 2. Pipelined ADCs Pipelined ADCs divide the conversion process into multiple stages, with each stage handling a part of the input signal concurrently. This parallel processing architecture allows pipelined ADCs to achieve high sampling rates and throughput. Each stage of the pipeline converts a portion of the input signal and passes the residue to the next stage for further processing. The high speed and throughput of pipelined ADCs make them ideal for applications such as video processing and high-speed data acquisition. However, this architecture comes with trade-offs, including higher power consumption, increased complexity, and latency due to the multiple processing stages. 3. Flash ADCs Flash ADCs use a parallel array of comparators to convert the analog input into a digital signal in a single step. Each comparator corresponds to a specific digital level, allowing the conversion to be completed almost instantaneously. This makes flash ADCs the fastest type of ADC, capable of achieving very high-speed conversions. Flash ADCs are used in applications that require extremely fast conversion rates, such as RF signal processing and radar systems. However, their high speed comes at the cost of higher power consumption and lower resolution. Additionally, the large number of comparators required increases the silicon area and complexity of the design. 4. Sigma-Delta ADCs Sigma-Delta ADCs operate on the principles of oversampling and noise shaping. They sample the input signal at a rate much higher than the Nyquist rate and use digital filtering to achieve high resolution. The oversampling process helps in spreading the quantization noise over a wider frequency range, which is then filtered out to obtain a high-accuracy digital output. These ADCs are commonly used in applications that require high resolution and noise immunity, such as audio and precision measurement systems. While Sigma-Delta ADCs offer excellent accuracy and noise performance, they are slower compared to other ADC types due to the extensive digital filtering involved. 5. Dual-Slope ADCs Dual-Slope ADCs feature a simple structure and high resolution, making them suitable for low sample rate applications like digital multimeters and low-frequency signal measurement. The conversion process involves charging a capacitor with the input signal for a fixed period and then discharging it at a constant rate. The time taken to discharge the capacitor is proportional to the input signal amplitude and is converted into a digital value. Dual-Slope ADCs provide high accuracy and stable readings, making them ideal for precise DC voltage measurements. However, their primary limitation is the slow conversion rate, which makes them unsuitable for applications requiring fast sampling. Key Features and Parameters Resolution The resolution of an ADC determines the smallest change in the analog input that can be detected and converted into a digital value. It is typically expressed in bits, with higher resolution providing more precise measurements. For example, a 12-bit ADC can represent 4096 discrete levels, while a 16-bit ADC can represent 65536 levels. Sampling Rate The sampling rate defines the number of samples taken per second and is crucial for accurately capturing the details of the input signal. According to the Nyquist theorem, the sampling rate must be at least twice the highest frequency of the input signal to avoid aliasing and accurately reconstruct the signal. Higher sampling rates are necessary for fast-changing signals, ensuring that the ADC captures all relevant information. Signal-to-Noise Ratio (SNR) SNR measures the quality of the signal conversion, representing the ratio of the desired signal to background noise. A higher SNR indicates a clearer and more accurate signal representation. Improving SNR involves techniques such as filtering, shielding, and using differential inputs to minimize noise and interference. Latency Latency refers to the time delay between acquiring an analog sample and the availability of the digital output. This parameter is especially important in time-critical applications. SAR ADCs typically exhibit the lowest latency due to their sequential bit-by-bit conversion method, while pipelined ADCs, despite their high speed, have higher latency due to multiple processing stages. Practical Applications ADCs are integral to various practical applications, demonstrating their versatility and importance in modern technology: Medical Devices In medical devices, ADCs are crucial for converting physiological signals into digital data for analysis and diagnostics. For instance, ECG machines use ADCs to digitize heart signals, enabling accurate monitoring and analysis of heart health. Similarly, imaging systems like MRI and CT scans rely on ADCs for high-resolution digital images, which are essential for precise medical diagnostics. Consumer Electronics ADCs are widely used in consumer electronics such as smartphones, digital cameras, and audio equipment. In smartphones, ADCs convert analog signals from microphones into digital audio, ensuring clear and high-quality sound recording and playback. Digital cameras use ADCs to convert light signals captured by image sensors into digital images, enhancing image quality and detail. Industrial Automation ADCs play a key role in industrial automation, where they convert analog signals from various sensors into digital data for real-time monitoring and control. This data is used to optimize manufacturing processes, improve precision, and enhance efficiency. ADCs help in monitoring parameters like temperature, pressure, and flow rate, ensuring seamless automation and process control. Automotive Systems ADCs are essential in automotive systems, where they are used in sensors for monitoring and controlling engine parameters, safety systems, and other critical functions. In autonomous vehicles, ADCs process real-time data from various sensors, aiding in navigation and obstacle detection, thus ensuring safe and efficient operation. Future Trends and Developments The world of ADCs is continuously evolving, driven by the need for higher resolution, faster speeds, and lower power consumption. Several trends and advancements are shaping the future of ADC technology, making it more efficient and versatile for various applications. Advancements in Technology Research and development in ADC technology are focused on improving performance metrics such as resolution, sampling rate, and power efficiency. One of the primary goals is to enhance resolution without increasing power consumption. This is achieved through innovations in circuit design, materials, and manufacturing processes. Advanced signal processing techniques, such as digital calibration and error correction, are also being integrated into ADCs to improve accuracy and performance. Another area of focus is the reduction of power consumption, especially in battery-operated devices. Low-power ADCs are being developed to ensure that portable and wearable devices can operate for longer periods without frequent recharging. This is particularly important for applications in the Internet of Things (IoT), where devices are often deployed in remote or hard-to-reach locations. Emerging Applications ADCs are finding new applications in emerging fields, further driving the demand for advanced ADC technologies. One such field is autonomous vehicles. ADCs are used to process data from various sensors, including LiDAR, radar, and cameras, to enable real-time decision-making for navigation and obstacle detection. The high-speed and high-resolution requirements of these applications are pushing the boundaries of ADC performance. Energy Efficiency As devices become more portable and power-efficient, the demand for energy-efficient ADCs is growing. Researchers are developing techniques to reduce the power consumption of ADCs without compromising their performance. This includes optimizing the analog front-end design, employing power-saving modes, and using energy-efficient signal processing algorithms. Technical Comparisons and Trade-offs Choosing the right type of ADC for a specific application involves understanding the trade-offs between different ADC architectures. Here is a comparison of some of the key types of ADCs: SAR vs Pipelined ADCs SAR ADCs are ideal for low-power applications that require high accuracy and moderate speed. They are commonly used in battery-operated devices and applications where power consumption is a critical factor. Pipelined ADCs, on the other hand, offer higher speed and throughput, making them suitable for high-data-rate applications such as video processing and high-speed data acquisition. However, pipelined ADCs consume more power and have higher latency due to their multi-stage processing. Flash vs Sigma-Delta ADCs Flash ADCs are the fastest type of ADC, providing near-instantaneous conversion. They are used in applications requiring very high-speed data acquisition, such as RF signal processing and radar systems. The downside of flash ADCs is their high power consumption and lower resolution. Sigma-Delta ADCs offer high resolution and excellent noise performance, making them ideal for applications requiring high accuracy, such as audio and precision measurement systems. However, they are slower than flash ADCs due to the extensive digital filtering required. Conclusion As technology advances, ADCs are becoming more efficient, versatile, and integral to emerging applications such as autonomous vehicles and the Internet of Things. With ongoing research and development focused on improving resolution, speed, and energy efficiency, ADCs will continue to play a crucial role in driving technological innovation and enhancing the capabilities of electronic systems. ### Building an Accelerometer-Controlled Cart The accelerometer cart marks my second intermediate project creation. Essentially, it's a compact robot designed to interpret signals from a triple-axis accelerometer, adjusting its movement direction accordingly. Building the Accelerometer Cart The Accelerometer Cart employs a triple-axis accelerometer to determine the direction in which the device is tilted. This data is then transmitted to a SparkFun Redboard, which subsequently controls two servo motors. These motors, in turn, rotate wheels in the appropriate direction, propelling the small robot chassis. The robot chassis, originally sourced from a Parallax Inc Board of Education Shield provided by my instructor, features a metal body housing batteries and servos underneath. Additionally, it is equipped with a wheel attached to each servo and a rolling ball at the front for added stability. Atop the chassis sits a shield, providing ample space for the Redboard or Arduino to be easily integrated. This shield also incorporates a small breadboard for convenient attachment of additional components. Moreover, the cart utilizes a shift register and LEDs to enhance its functionality. When the accelerometer tilts backward, indicating a movement toward the user, the cart reverses its direction, accompanied by the illumination of LEDs. Similarly, when the accelerometer is tilted sideways, LEDs on the corresponding side blink as the cart begins to turn in that direction. https://youtu.be/UGrmt7kS5bU Conceptualizing the Second Project For my second project, I had the freedom to brainstorm ideas independently. Initially uncertain of the direction to take, I was drawn to the notion of leveraging a triple-axis accelerometer to control some form of motor. Although undecided on the specific device to pair with the accelerometer, I eventually settled on utilizing DC motors equipped with wheels, envisioning a device capable of movement based on the tilt of the accelerometer. Discussing my concept with my instructor yielded approval, although the challenge of finding suitable wheels for the DC motors presented itself. Fortunately, my instructor recalled the availability of a robot chassis within the school's resources. After confirming its availability, I opted to integrate a shift register and LEDs into the design to enhance its functionality. Initially unsure of how to incorporate these components, I ultimately decided to utilize them as tail lights. With this final design in mind, the project took shape, culminating in the creation of a dynamic device driven by the tilt of the accelerometer. Navigating Challenges during Project Development Throughout the project development process, several challenges arose, requiring problem-solving and adaptability. One notable obstacle was the management of wire length, particularly in establishing sufficient distance between the accelerometer and the chassis while ensuring optimal functionality. However, the most significant issue encountered pertained to intermittent disconnections of wires linking the accelerometer or the chassis, occasionally resulting in a wheel becoming stuck in motion. Although a simple reset typically resolves this issue promptly, ensuring secure connections of the accelerometer wires proves to be a more permanent solution. While this could potentially be attributed to a bug in the code, I am inclined to believe it primarily stems from loose wires. Additionally, achieving proper functionality of the LEDs and shift register posed another challenge, requiring some troubleshooting to overcome. Furthermore, a minor delay introduced in the blinking mechanism, particularly in the "turn signal," occasionally poses a slight inconvenience. Nevertheless, such occurrences are infrequent and do not significantly impact overall performance. Constructing Your Own Accelerometer Cart For those interested in assembling their own Accelerometer Cart, detailed instructions, including parts list, schematics, sketches, and code, are provided below. Parts: (1) Arduino Uno/SparkFun Redboard (4) Red LEDs (color can be customized) (1) 74HC595 shift register (6) 330 Ohm resistors (1) MMA8452Q Triple-Axis Accelerometer (1) Parallax Inc BOE Robot (Alternatively, servo motors with attached wheels can be used, ensuring full rotation capability and proper support) Several wires, preferably long for added flexibility and convenience. The basic schematic and sketch can be seen below:   Setting Up Components and Schematics (Note: Due to limitations in the Fritzing software, the Parallax shield components are not available. Therefore, the sketches and schematics are configured as if connected directly to the servos.) To begin, connect your triple-axis accelerometer by supplying power from the 3.3v pin on the Redboard to the corresponding pin on the accelerometer. Ground the accelerometer's ground pin to the Redboard's ground. Next, connect the SCL pin on the accelerometer to pin A4 and the SDA pin to pin A5, utilizing resistors as needed. These pins serve as substitutes for the absent SCL and SDA pins on the Parallax board. For the BOE Bot, utilize the convenient pins located in the upper right corner to connect the servos. Assign the right servo to pin 10 and the left servo to pin 11. To integrate the shift register, provide 5 volts to both the VCC and SRCLR pins, and ground the Ground and OE pins. Connect the SER pin on the shift register to pin 2 on the Redboard, the RCLK pin to pin 4, and the SRCLK pin to pin 3. Then, link the Qb, Qc, Qd, and Qe pins through resistors to the LEDs (order: Qb = far right, Qc = mid right, Qd = mid left, Qe = far left), and connect them to ground. This configuration enables the shift register to control the four LEDs using only three Redboard pins. Below, you'll find the code for your project. Feel free to utilize and customize it to suit your needs. Intermediate_Project_2 Understanding the Code The code provided is relatively straightforward, with comments included to clarify any potentially confusing sections. Essentially, it functions by monitoring the accelerometer's state and then executing corresponding actions to move the wheels and illuminate the LEDs accordingly. The excerpt below demonstrates the case for when the accelerometer is tilted forward. Initially, any lights are turned off to reset the state, assuming the possibility of backward movement prior to this point. Subsequently, the orientation is printed on the serial monitor, followed by the attachment of the two servos to their designated pins. Both wheels are then spun to propel the chassis forward. Specifically, the left wheel rotates counterclockwise, indicated by the value of 170 assigned to it. This value is chosen because, with the servo, closer to 180 results in faster spinning. Conversely, the right wheel moves clockwise, designated by an assigned value of 10, as closer to 0 results in faster clockwise spinning. Similar code segments exist for each direction, adjusting the values to control wheel spin accordingly. case LANDSCAPE_R:   for (index = 1; index <= 4; index++) {     shiftWrite(index, LOW);   }   //this will turn off the LEDs as we move the   //accelerometer back to flat   Serial.print("Landscape Right");   servoRight.attach(10); //this will attach our right servo motor and wheel   // to pin 10   servoLeft.attach(11); // this will attach our left servo motor and wheel to pin 11   servoRight.write(10); //this will make it so that when the accelerometer   // is tilted forward it will move the right wheel clockwise   servoLeft.write(170); //this will make it so that when the accelerometer   // is tilted forward it will move the left wheel counterclockwise so it   // will move the same as the right and the device will move forward   break; Enhancing Stability and Performance As previously noted, occasional directional sticking, particularly during turns, is observed with the device. I attribute this to the possibility of wires becoming loose. To enhance stability, I suggest soldering the wires directly to the accelerometer or securing them in a more reliable holder. This adjustment would likely improve the device's overall stability. Alternatively, employing infrared technology presents an even better solution, allowing for wireless operation and further mitigating stability issues. Additionally, adjusting the speeds could offer a less sensitive control experience, enhancing usability. Follow this link for complete project: Building an Accelerometer-Controlled Cart ### Building and Programming a Snake Game with Gameduino For my physical computing class, I completed a final project using the SparkFun Redboard. I named it "Gameduino Snake" because it is a compact, handheld device that enables users to play a Snake game on an LED matrix. Project Overview: Gameduino Snake The game features a simple bi-color 8×8 LED matrix that serves as both the game display and the scoreboard after the game concludes. A triple-axis accelerometer, placed on the breadboard next to the LED matrix, detects the movement of the device, allowing the snake to move in the direction the device is tilted. For example, tilting the device forward moves the snake up. Additionally, an Ethernet shield on the Arduino enables the player to Tweet their score after finishing the game. The Gameduino includes three buttons: a blue button to power on the device and start the game, a green button to reset the game to the start screen after a game over, and a red button to Tweet the player's score, which is stored in the RedBoard’s EEPROM memory. To avoid duplicate Tweets, the red button also sends the number of seconds since the last reset. The Tweet button must be pressed at the main screen, meaning the device must be reset beforehand. https://youtu.be/t2fIIgHxo8Y The game is easier to play than it appears in the video. It was challenging to play with one hand while filming with the other. I apologize for the difficulty in reading the computer screen. It displays "Snake Score" followed by my score, which was 3, and then "Time Since the Last Reset," which was 14 seconds. Project Genesis: Creating Gameduino Snake At the start of the term, I knew I wanted my final project to involve a game. After researching online, I discovered a project where someone had recreated Super Mario Bros. on an LED matrix using an Arduino. Inspired by this, I decided to use an LED matrix to create a game, but given my beginner coding skills, I aimed for something simpler. Eventually, I settled on making the classic game Snake, believing it would be easier to code and develop. I thought it would be a neat idea to use an Ethernet shield to allow players to Tweet their scores after the game. Initially, I also considered adding a GPS module to include the time and date in the Tweet. However, after realizing how much memory the GPS module consumed during an intermediate project, I decided against it for the final project. Originally, I planned to control the snake using four push buttons. My teacher suggested using an accelerometer instead to make the project more interesting and interactive. This turned out to be a fun and unique way to control the game. I also intended to incorporate a Piezo buzzer to play a tune during the game. Unfortunately, I couldn't find a way to integrate it properly. Coding music with the Piezo using delays made the game unplayable, as it would alternately play the tune and display the game over screen, rather than doing both simultaneously. Due to time constraints, I decided to leave this feature out, as it didn't significantly enhance the overall experience. Challenges Faced in Creating Gameduino Snake I encountered several challenges while developing this project. One of the initial major issues was getting the snake to move correctly. Initially, I programmed the RedBoard to respond to the general orientation of the accelerometer rather than the specific x and y values. After adapting some online code, this setup worked but required extreme tilting of the board to move the snake, which wasn't ideal for gameplay. To improve this, I adjusted the code to read the accelerometer's position and move the snake if the x and y values exceeded certain thresholds. This worked well, especially after assistance from my instructor, who helped make the snake continuously move. However, a new issue arose where tilting the device at diagonal angles, particularly to the lower right, caused the snake to move diagonally, breaking the game's functionality. After consulting with my professor, we resolved this by calibrating the accelerometer values when the device was flat and setting this as the baseline position. We then established a threshold around this point. When the accelerometer's values exceeded this threshold, the snake would move in the direction of the tilt. This adjustment fixed the diagonal movement issue and improved the game's playability. Additional Issues Faced I encountered several other challenges during the project. Initially, I intended for the blue button to function as both the power and reset button. However, after struggling with the coding for this and realizing I had space for an additional button, I decided to add a separate button for resetting. The Tweet function also presented problems. Originally, it was set up to send the tweet from the game over screen, but it only worked at a specific moment. To resolve this, I modified the setup to store the score in the EEPROM memory and send it from the start screen instead. Deciding what additional information to send to avoid duplicate messages took some time. Eventually, I included the number of seconds since the last reset. Another issue was the game crashing when powered by a 9-volt battery. While the game played fine, it would freeze on the game over screen. Retesting showed it sometimes worked, but to avoid potential glitches, I preferred powering it via a computer. The crash might be due to low battery power or insufficient power for all game features. Additionally, the battery's weight made gameplay difficult, as it required more force to tilt and register movements. Adjusting the code thresholds or securing the battery to the board might help, but it's not a definite solution. The reason for the frequent crashes during initial tests remains unclear. Build Your Own Gameduino If you're interested in creating your own version of the Gameduino, below you'll find the sketch, schematic, parts list, and code to get started. Parts List: SparkFun Redboard/Arduino Uno (1) MMA8452Q Triple-Axis Accelerometer (1) 8×8 Bi-Color LED Matrix with I2C backpack (1) (Note: You can use a single-color matrix or omit the I2C backpack, but different code will be required) Push Buttons (3) 10K Ohm Resistors (2) 330 Ohm Resistors (2) Arduino Ethernet Shield (1) Several Wires Optional: 9-volt battery (1) Battery holder (1) Refer to the following sections for detailed instructions on assembling and programming your Gameduino. The schematic and sketch can be viewed below: Connecting Buttons and Components for the Gameduino Power and Tweet Buttons Power Button (Digital Pin 7) Connect one side of the power button to 5 volts. On the other side, run a 10K ohm resistor to ground. From the same side, run a wire to digital pin 7. Tweet Button (Digital Pin 6) Connect one side of the Tweet button to 5 volts. On the other side, run a 10K ohm resistor to ground. From the same side, run a wire to digital pin 6. This configuration ensures that when the buttons are not pressed, they read a normal HIGH state. When pressed, they connect to ground, producing a LOW state. Reset Button Run a wire from the reset pin on the Redboard to one end of the reset button. Connect the other end of the button directly to ground. This setup works because the reset pin will reset the Redboard when it receives a LOW signal, which is achieved by connecting it to ground through the button. LED Matrix with I2C Backpack Connect the 5V pin to the pin marked with a plus sign (+) on the LED matrix to provide power. Connect the ground pin to the minus sign (-) pin on the LED matrix. Since the I2C backpack uses I2C communication, connect the SDA and SCL pins on the backpack to the corresponding pins on the Redboard. You can use either the SDA and SCL pins or the A4 and A5 analog pins (A4 for SDA and A5 for SCL). Triple-Axis Accelerometer Connect the 3.3V pin on the accelerometer to the 3.3V pin on the Redboard. Connect the ground pin on the accelerometer to ground. As the accelerometer uses I2C communication: Run the SDA pin on the accelerometer through a 330-ohm resistor to the SDA (A4) pin on the Redboard. Run the SCL pin on the accelerometer through a 330-ohm resistor to the SCL (A5) pin on the Redboard. By following these connections, you'll ensure all components are correctly powered and can communicate with the Redboard, enabling the Gameduino functionality. The code I used can be found here: Final_Project Gameduino Code Code Explanation for the Gameduino The comments within the code provide detailed explanations, but here is a high-level overview of its functionality: Initialization: The Redboard initializes its values during the setup phase. Button Press Detection: When the blue button is pressed, the Redboard draws the target and the snake based on the setup information. Game Monitoring: The Redboard continuously checks to ensure the snake remains within the playing area and hasn't collided with itself. Movement Detection: If the snake is in a valid state, the Redboard calls a function to read the accelerometer's position and moves the snake accordingly. Game Over: If the snake either exits the playing area or hits itself, the game over sequence is triggered. This logic ensures smooth gameplay and proper handling of game events. void moveSnake() { // this function will move the snake according to the accelerometer   if (accel.available()) {     accel.read(); //this will read the values of the accelerometer     Serial.print("x: ");     Serial.print(accel.cx, 3);     Serial.print("\t");     Serial.print("y: ");     Serial.print(accel.cy, 3);     Serial.print("\t");     Serial.print("z: ");     Serial.print(accel.cz, 3);     Serial.print("\t");     Serial.println(prevDirection);     float restingX = 0; //the accelerometer at rest     float restingY = 0;     float threshold = 0.350; //how much it should be tilted to move the snake.     Serial.println(accel.cy - restingY);     Serial.println(accel.cx - restingX);     Serial.println(abs(accel.cx - restingX));     if (((accel.cy - restingY) > threshold) && (abs(accel.cx - restingX) < threshold)) { //if the accelerometer is tilted left       Serial.println("Left");       snakeY[0] = snakeY[0] + 1; // the snake will move to the left.       prevDirection = 1;     }     if (((accel.cy - restingY) < -threshold) && (abs(accel.cx - restingX) < threshold)) { //if the accelerometer is tilted right       Serial.println("Right");       snakeY[0] = snakeY[0] - 1; // snake will move to the right       prevDirection = 2;     }     if (((accel.cx - restingX) > threshold) && (abs(accel.cy - restingY) < threshold)) { //if the accelerometer is tilted up       Serial.println("Up");       snakeX[0] = snakeX[0] - 1; // the snake will move up       prevDirection = 3;     }     if (((accel.cx - restingX) < -threshold) && (abs(accel.cy - restingY) < threshold)) { //if the accelerometer is tilted down       Serial.println("Down");       snakeX[0] = snakeX[0] + 1; // it will move the snake down       prevDirection = 4;     }     if ((-threshold < accel.cx) && (accel.cx < threshold) && (-threshold < accel.cy) && (accel.cy < threshold)) {       if (prevDirection == 1) {         snakeY[0] = snakeY[0] + 1;       }       if (prevDirection == 2) {         snakeY[0] = snakeY[0] - 1;       }       if (prevDirection == 3) {         snakeX[0] = snakeX[0] - 1;       }       if (prevDirection == 4) {         snakeX[0] = snakeX[0] + 1;       }     }   } } Function Explanation for Movement and Scoring This function starts by setting baseline x and y values for the accelerometer and board when they are held flat. Next, it establishes a threshold for detecting tilt and corresponding movement. For instance, to move left, the y value (representing the horizontal axis) minus the resting value must exceed the defined threshold. To avoid the diagonal movement glitch encountered earlier, the absolute value of the current x reading minus the resting x must be less than the threshold, ensuring that the x value stays between the positive and negative threshold, thus preventing dual-direction readings. This setup allows for easy adjustment of the neutral position by changing the resting values. The logic for the other three directions follows a similar pattern. Each direction's movement is stored in a variable, so when the accelerometer returns to a flat state, the snake continues in its last direction until a new tilt is detected. While the snake is active, in motion, and hasn't collided with itself, the game monitors the snake's position relative to the target to determine if the player scores. if ((snakeX[0] == targetX) && (snakeY[0] == targetY)) { //this will read if the snake is on the target   snakeLength++; //if it is it will gain a length of one   score++; // and the score will increase by one   Serial.print("Score: "); // the score will then be written on the serial monitor   Serial.println(score);   if (snakeLength < maxSnake) { // if the snake is less than the maxium length     makeTarget(); //then we will make a new target to go after   }   else {     targetX = targetY = -1; //if it is not less than the max, then we will not     //make any more targets   } } Checking and Growing the Snake This section of the code checks if the snake’s head (represented by snakeX[0] and snakeY[0]) matches the target’s coordinates. If the coordinates don't match, the target remains in place, and the snake's length stays the same. If the coordinates do match, the snake grows by one pixel, and the score increases by one point. The code then checks the current length of the snake. If the snake's length is less than the maximum allowed length, it calls a function to generate a new target for the snake to pursue. If the snake has reached its maximum length, the code stops generating new targets. In this implementation, the maximum snake length is set to 64, which corresponds to the entire LED matrix. This ensures the game only ends if the snake "dies" and not by reaching a certain length. To change this, you simply need to adjust the maxSnake variable in the code. Reflections and Future Improvements I'm pleased with how the Gameduino turned out, though there are several areas for potential improvements and modifications. One issue is its behavior when powered by a battery. I'm unsure if this is due to the code, hardware, or simply the added weight of the battery. A significant upgrade would be integrating a WiFi shield, allowing for Tweets to be sent without needing an Ethernet cable, which would be particularly useful if the battery issue is resolved. The device could also be expanded to include other games, such as Breakout or even Super Mario Bros. With an Arduino that has more memory, it would be possible to store multiple games at once. Additionally, using a larger Arduino would allow for incorporating the GPS module as initially planned. Further improvements could include adding the game duration to the Tweet, not just the time since the last reset. Finally, finding a way to code the Piezo buzzer without delays would be a great enhancement to the overall setup. Follow this link for complete project: Building and Programming a Snake Game with Gameduino ### Arduino microcontroller based laser diode controller 1. Introduction & Background Theory 1.1 Objective The objective of this project is to research, analyze, design, fully implement, and program an Arduino Uno microcontroller board to achieve PI control of the output power of a laser diode. Laser diodes require variable current sources for operation, as the current must be adjusted to maintain linear output. First conceptualized in the 1960s, lasers have become essential in modern technology, finding applications in various products such as image scanning and printing, laser pointers, barcode readers, fiber optic communication signals, and reading information on CDs, DVDs, and Blu-ray discs. The ubiquity of lasers in today's technology cannot be overstated. Despite their efficiency and versatility, laser diodes are complex devices. Their operation involves specific characteristics that make them applicable to numerous fields but also present challenges in their use. A typical laser diode cannot function with a constant voltage source alone; thus, driver circuits are necessary to manage and control their output. 1.2 System Outline For this project, an Arduino Uno microcontroller will be used to control a laser diode. The project entails completing tasks outlined in the project brief, such as understanding the principles of PI control and laser diodes, implementing a PI control loop on an Arduino board, designing a current source and optical detector, and testing with a visible laser diode. The goal is to operate a semiconductor laser diode by using the Arduino Uno to monitor the diode's output power and perform proportional-integral control of the input voltage to maintain a constant current flow through the diode. This project integrates hardware circuit design—implementing a circuit to perform tasks required by the Arduino microcontroller—with software design, involving the creation of a program to achieve the stated objectives. This aligns well with the modules I am studying this semester, which are part of the General stream in the LM118 Electronic and Computer Engineering course. The project's blend of hardware and software elements will provide valuable experience in both the physical and practical aspects of engineering, relevant to both sectors. Having had little to no prior experience with microcontrollers, this project offers an exciting opportunity to explore the capabilities these devices afford. 2. Analytical Background 2.1 Arduino Arduino Uno Arduino is an open-source prototyping platform that can be best described as a single-board computer, featuring user-friendly hardware and software. The name 'Uno,' meaning 'one' in Italian, reflects its origin, with Massimo Banzi being one of the key inventors of this tiny yet powerful open-source microcontroller. Despite its compact size, the Arduino is remarkably powerful, offering computing capabilities comparable to one of the original Apollo navigation computers, but at a fraction of the cost—approximately 1/35,000th. Arduino boards can read inputs, such as light on a sensor or heat on a thermistor, and convert them into outputs, such as activating a motor or LED. The open-source Arduino software (IDE) facilitates easy code writing and uploading to the board, and it is compatible with Windows, Mac, and Linux. The development environment, written in Java, is based on Processing and other open-source software, making it versatile and accessible for various Arduino boards. Programs running on Arduino are called sketches, consisting of two main parts: setup() and loop(). The setup() function configures the board's initial state, defining which pins serve as inputs or outputs and setting up any special output devices like a four-character display. It also handles communication settings if interacting with external devices via serial ports or Ethernet connections. The loop() function continuously processes the input and output, ensuring the Arduino executes the instructions repeatedly without stopping. Below are some technical specifications of the Uno board [20]:   Microcontroller ATmega328 Operating Voltage 5V Input Voltage (recommended) 7-12V Input Voltage (limits) 6-20V Digital I/O Pins 14 (of which 6 provide PWM output) Analog Input Pins 6 DC Current per I/O Pin 40m A DC Current for 3.3V Pin 50m A Flash Memory 32KB (0.5KB used by Bootloader) SRAM 2KB EEPROM 1KB Clock Speed 16 MHZ Figure 1: Arduino Uno Specifications PWM on the Arduino Pulse Width Modulation (PWM) output is available from 6 of the digital I/O pins on the Arduino. PWM allows for generating a variable signal from a fixed signal by altering the width of the pulses, which changes the duty cycle of the waveform. The duty cycle measures the proportion of time the signal is active. The Arduino can produce PWM signals at a frequency of 490 Hz. For instance, with a 10V signal and a 10% duty cycle, the 10V signal is active only 10% of the time, resulting in an average signal of 1V. A higher duty cycle corresponds to a higher average output signal. By adjusting the pulse width, the average value of the signal changes, enabling control of a load by pulsing its current. For devices like laser diodes or LEDs that require a DC input, the PWM signal can be filtered to average the amplitude according to the duty cycle percentage, creating a mean DC voltage. This mean voltage can theoretically vary between the high and low values of the PWM signal (±5V). 2.2 Laser Diodes Introduction A laser diode, also known as a semiconductor laser or injection laser diode, is a crucial component in optoelectronics. These diodes are utilized in a wide range of modern technological applications, including fiber optic communications, optical sensors, barcode readers, laser pointers, CD/DVD readers, and laser printers. The performance of these systems significantly depends on the modulation and noise characteristics of the laser diode. The concept of the laser was first introduced by Dr. Schawlow and Townes in 1958, and the first operational laser was built by Theodore Maiman in 1960. While working at Hughes Research Laboratories, Maiman created the first laser that emitted short pulses of red light using a ruby cylinder surrounded by a xenon arc flash lamp, similar to those used in aerial photography. The initial requirements for lasing, established by Schawlow and Townes, were met: "a readily excited fluorescent material of good optical quality, a method for stimulating the material to an excited state, and an optical resonating cavity." Since then, almost all lasers have followed these principles. Initially, fluorescent crystals like rubies were commonly used, until the gas laser was developed a year later. In 1962, the first semiconductor injection laser was created by Bell Telephone Laboratories. Laser diodes, once expensive semiconductor components, have now become affordable and are integral to devices with fiber optic requirements. Low-power red laser pointers are readily available for 10-20 euros. Laser diodes typically come in a 3-lead metal package, including an internal photodiode that regulates the output light by adjusting the applied drive current. Laser diodes can be characterized in five main categories: Spectral: Calculated spectral width and center wavelength from acquired spectral data. Electrical: Measures of the light output, voltage drop, and current monitored by a photodiode. Spatial: The intensity of the light in both far and near fields and the angle of radiation. Dynamic: Noise, distortion, rise and fall time, and other dynamic features. Optical: Measurement of deviation from spherical curvature and other wavefront errors. Design and operation There are various types of laser diodes, but a typical laser diode follows a straightforward design. It consists of two semiconductors layered one above the other. The top layer is made of Gallium Arsenide (GaAs), a P-type semiconductor engineered to have holes that can be filled by electrons. P-type semiconductors are materials that have a tendency to gain extra electrons. The bottom layer is composed of Gallium Arsenide doped with Selenium (GaAs ), an N-type semiconductor that has an extra electron it is inclined to lose. Between these two layers lies the P-N junction. When current flows through the semiconductors, negatively charged electrons and positively charged holes migrate towards this P-N junction. At the junction, electrons from the N-type semiconductor combine with holes from the P-type semiconductor. Since the hole exists at a lower energy level than the free electron, the electron must release some energy to combine with the hole. This energy is emitted as a photon of light, with the energy of the photon corresponding to the energy difference between the electron and the hole. The emitted photon is trapped within the P-N junction by mirrored surfaces, which encourages further electron-hole recombination, releasing additional photons. These new photons are in the same phase, polarization, and direction as the original photon, leading to a continuous amplification of light within the junction. As the process continues, the junction fills with coherent light. Some of this light escapes from the rear of the laser diode, where a photodiode can be used to detect this light and help regulate the voltage applied to the laser. The emitted light from the junction is highly diffracted, so a collimating lens is employed to shape the light into a more typical laser beam. Figure 2: Cross-sectional view of Laser Diode Issues with powering lasers Lasers, while compact and efficient, possess characteristics that make them versatile across various fields. However, these same attributes can render them challenging to work with. Unlike simple devices that operate with a constant voltage, laser diodes exhibit complexities. The primary issue arises from the fluctuation in forward voltage as the semiconductor material's temperature increases, leading to an increase in current flow. Moreover, laser diodes exhibit significant variations in performance from part to part and over temperature. To safeguard laser diodes from potential damage, they require robust protection against overvoltage and overcurrent. This necessitates regulated current and closed-loop feedback systems to maintain consistent optical power. Furthermore, modulation speed is limited, and the process of converting injection current to light is nonlinear, resulting in distortions in light output. Additionally, due to the quantum nature of light, laser diodes inherently generate noise in their light output. Since laser diodes lack inherent current regulation, driver circuits are essential to limit current flow and prevent component failure. Careful monitoring of current behavior throughout the circuit is crucial to ensure proper operation and prevent damage to the diode. Moreover, thermal considerations are vital, as the laser's optical power increases with decreasing temperature, necessitating optical feedback to regulate the diode's output power. A common approach to driving laser diodes involves using a constant current source circuit. In such circuits, components like the LM317 adjustable voltage regulator are employed to regulate the current. Despite its effectiveness, this design can be inefficient due to the high resistor values involved. In summary, while laser diodes offer immense potential, their operation requires careful consideration of various factors to ensure optimal performance and prevent damage to the components. Below is an example of a constant current source circuit utilizing an LM317 adjustable voltage regulator, demonstrating one method of achieving stable current regulation. Figure 3: Current Regulator Circuit Diagram Design Specifications of the Laser Diode The maximum ratings and Electrical characteristics of the laser diode for proposed implementation are listed below [5]: Figure 4: Design Specifications for Laser Diode 2.3 Current sources In its simplest form, a current source delivers a consistent current across a load by establishing a corresponding voltage across it, as determined by Ohm's Law (I = V/R). A straightforward illustration of this concept involves a voltage source connected in series with a resistor, through which current flows. Figure 5: Basic V/I Current Source Theoretically, the current remains constant, calculated as I = V/R. When the load remains consistent, a stable current can be achieved using a constant voltage source. An ideal current source maintains a consistent level of current regardless of the impedance it's driving. The direction of the current flow is dictated by the polarity of the driving voltage. The load can include capacitive elements, as capacitors charge at a constant rate. Another example of a current source is a transistor-based circuit, such as one employing a PNP transistor. In such a setup, current flows once the base voltage exceeds 0.6V, resulting in an approximate load current calculation of IL = (Vb - 0.6V)/Re. When dealing with varying loads, a stable current can be ensured through a constant current supply, also known as an "ideal current source." These sources adjust the voltage across the load to maintain a steady current level. While ideal current sources are utilized in scenarios requiring consistent power supply or to drive components incapable of regulating their current, there are also methods involving component selection and circuit design to regulate current. In industrial settings, a constant current source functions akin to a power generator with a significantly higher internal resistance compared to the load. This high internal resistance allows the current supply to remain stable despite load fluctuations. Consequently, current flows along the path of least resistance, favoring the external load over the internal resistance. This behavior is evident in a simple current source powering two resistors in parallel, where the majority of the current flows through the lower resistance path. Current sources can be categorized into independent types, delivering a constant current, and dependent types, supplying current proportional to another voltage or current in the system. The internal resistance of an ideal current source is infinite, and one with zero current behaves like an open circuit. The compliance voltage determines the output voltage range within which a current source operates effectively. For a transistor-based current source, compliance is set by the range in which the transistors remain in their active region. In contrast to voltage sources, which maintain constant output voltage as long as the current draw remains within their capabilities, current sources deliver a steady current as long as the load impedance is sufficiently low. 2.4 PI Control Control Systems theory At its core, a control system refers to a system that governs the behavior of another system. It encompasses a set of interacting components within a defined boundary, allowing us to focus solely on inputs and outputs without delving into intricate component interactions. A control system emerges when multiple elements are combined in a specific manner to yield a desired outcome. The primary focus in control systems lies in understanding the relationship between input and output. Studying systems through this lens offers the advantage of recognizing similarities in output-input relationships across various systems. While each system may possess its unique characteristics, many share comparable input-output relationships. Hence, by analyzing systems with analogous input-output patterns, we can identify different configurations of the system that exhibit similar responses. Additionally, in certain scenarios, systems can be deconstructed into a series of subsystems. Figure 7: PI Control Block Diagram There are two fundamental types of control systems: open-loop systems and closed-loop systems. In an open-loop system, the output remains unchanged despite varying conditions. Open-loop control operates without feedback to the system; in other words, there is no feedback loop. Systems controlled by preset timing mechanisms exemplify open-loop systems. While relatively straightforward in design and cost-effective, open-loop systems may lack accuracy due to the absence of error correction. In contrast, a closed-loop system incorporates feedback from the output to the input, enabling adjustments to maintain a constant output regardless of changing conditions. According to DIN 19226, closed-loop control involves continuous monitoring of a variable (the controlled variable), comparing it with a reference variable, and adjusting it accordingly to align with the reference variable. This adjustment occurs within a closed loop, where the controlled variable influences itself continuously. Closed-loop systems are typically more intricate than open-loop systems but offer greater accuracy by aligning actual values with required values. However, closed-loop systems may encounter issues such as delays, which can lead to corrective actions being executed too late, resulting in oscillations and instability. Proportional-Integral Control In control systems, the dynamic response of the system is often assessed through its step response. This response entails measuring the controlled variable following a step change in the manipulated variable, determining the behavior that guides the selection of an appropriate controller system. Controllers are instrumental in fine-tuning and modeling specific system characteristics, aiming to reduce steady-state errors and enhance accuracy. Improved steady-state accuracy generally correlates with increased stability, as controllers also help mitigate offsets and noise signals and manage maximum overshoot in a system. Controllers compare the controlled values with desired values and correct any deviations through predefined functions. Various types of controllers are employed in control systems, including Proportional (P) controllers, Proportional-Integral (PI) controllers, and Proportional-Integral-Derivative (PID) controllers. This project will primarily explore the application of Proportional Integral control, either individually or in combination with other controller types. While the derivative mode is seldom utilized in isolation, combinations like P, PI, PD, and PID controllers are common. P controllers may not suffice to stabilize higher-order systems, particularly those with multiple energy storage units or first-order processes, where a substantial gain increase can be tolerated. Proportional Integral (PI) controllers integrate both Proportional and Integral control components. Their output is the sum of the proportional error and the integral of the error signal. Proportional feedback control is defined as: Where e= error and Kp= proportional gain. Integral feedback is designed as: Ki is the integration gain factor. So controller out put for a PI controller is: The Integral mode of the controller serves to continuously sum the controller error e(t)e(t)e(t) over time. Utilizing a proportional mode offers advantages such as eliminating forced oscillations and reducing steady-state error. However, the Integral mode can negatively impact response speed and overall stability. PI controllers do not enhance response speed but rather combine the features of P and I controllers. By reducing steady-state error, PI controllers enhance system stability. In cases of slow response in an overdamped system, a PI controller can expedite it while exhibiting maximum overshoot and settling time akin to a P controller. Commonly employed in industrial settings where response speed is not critical, PI controllers have drawbacks such as producing offset and increasing the maximum overshoot of the system due to proportional control. Integral control, while addressing steady-state error, can decrease stability by responding slowly to generated errors. They find application where rapid response is unnecessary, in the presence of significant disturbances and noise during operation, when significant transport delay exists, or when the process comprises only one energy storage element (capacitive or inductive). Follow this link for complete project: Arduino microcontroller based laser diode controller ### Portable GPS Watch: Revolutionizing Fitness Tracking My Idea Whenever I go for a run, it bothers me to carry my phone just to track my activity. Those arm bands people use to hold their phones seem awkward to me. If you want to track your runs without carrying a phone, you need a device with dedicated GPS, like Garmin running watches. But the cheapest GPS devices cost around $170. However, GPS technology is available for less than $25, making it more accessible than you might think. One scenario I envision is for high school track or cross country teams, where everyone wants a running watch but only a few can afford it. For my final project, I aim to develop an extremely portable and affordable GPS watch. It can be used for running, cycling, or simply to track your location openly. Connecting the device to a laptop will facilitate data extraction, enabling uploads to platforms like Strava. Picking Parts GPS module After scouring numerous online platforms, I found that Aliexpress offers a wide range of inexpensive components, typically priced around $5. However, there are drawbacks such as extended shipping times of up to a month and limited data support. Seeking advice from classmates, one student enthusiastically recommended Adafruit’s Ultimate GPS Module, priced at $29.95 each before shipping costs. With the application of a $5 coupon code, I purchased two modules. What makes these GPS modules exceptional is the extensive support available for them. They come with an Arduino library that simplifies logic implementation, along with a Python module for effortless data parsing. Moreover, the module's weight is remarkably light at only 4 grams, a stark contrast to the bulky typical GPS watches weighing well over 70 grams. This lightweight feature marks a promising start in our pursuit of reducing overall device weight. Battery Opting for a Lithium Poly 110mAh battery over a conventional coin battery, I'm drawn to its rechargeable nature. I'll refer to this choice later in the project. Breakout Board Upon receiving the parts, I realized my oversight in not purchasing the breakout board along with the components, which would have incurred an additional $10 expense. This meant that to avoid potentially damaging my GPS module through repeated soldering and unsoldering, I'd need to create my own breakout board for prototyping. Initially, I struggled to grasp the concept of making a breakout board. As our usual practice involves soldering all components onto a microcontroller board, the idea was foreign to me. To gain insight, I examined the Eagle schematic provided by Adafruit, detailing its breakout board design—a generous gesture considering its potential financial loss for the company. The breakout board proved intricate, featuring various sophisticated component configurations for tasks like voltage regulation. Opting for utmost simplicity, I chose to significantly streamline the board. I omitted any form of voltage regulation, hoping to prevent potential mishaps that could damage the module. While I have design files for these initial boards, there's little benefit in sharing them since I later developed a much-improved board, which could also function as a potential breakout board. This is what the board looks like after milling: The next step was to test the setup using an Arduino Uno and jumper wires to connect the pins. However, I encountered a problem with my homemade breakout board. Despite its promising design, I accidentally ripped off the FTDI header, and was unable to desolder the GPS component even with extensive use of a heat gun. This was quite disappointing. In the weeks that followed, I got busy with various projects and events, including "Make Big Things" week. Before I knew it, Thanksgiving break arrived and I had to head home. Wanting to continue working on my project, I decided to purchase the Ultimate GPS Module breakout board. In hindsight, I should have bought this board from the start. Using the second GPS module for a homemade breakout board would have required another challenging desoldering process. During Thanksgiving break, I connected the Ultimate GPS Module Breakout Board (designed by Lady Ada and her team) to an Arduino Uno to start programming it. This week was when I figured out the programming aspects, which I will discuss next. The setup looked like this: As for the troublesome GPS module component, Rob eventually helped me desolder it. I learned a valuable lesson: use solder wick to remove as much solder as possible before applying the heat gun to remove a component. This lesson proved to be very useful in the following weeks. Additionally, it turned out that the GPS module was actually undamaged and functioned properly on a test board I used later. Programming Programming a ATmega328P To program the ATMega328P directly, it's crucial to have the correct Arduino settings. You might assume you can use the Arduino/Genuino Uno board option since it also uses the ATMega328P. However, this setting requires an external 16MHz oscillator. If you prefer not to add this component to your board, you cannot use that Arduino setting. Instead, I installed specific ATMega328P boards from GitHub. These can be found here, with straightforward installation instructions provided in the README file. The default clock on the ATMega328P is 8MHz. Therefore, I set my settings to internal 8MHz, as shown in this image: This was smooth sailing. Programming on Mac During the development of my final project, I discovered that programming boards on a Mac isn't as difficult as I initially thought. You only need to install avrdude and an FTDI library. These can be easily found through a Google search, with FTDI instructions available here and avrdude instructions here. It's quite convenient, although I encountered some issues with usbtiny programmers. Consequently, I ended up doing much of the programming on the GalliumOS Linux machine in the Harvard shop. GPS stuff The main objective of my project is to save GPS coordinates during activities like running or biking. To achieve this, I needed to determine where to store this information on the board. I discovered that GPS data can be efficiently stored in a format called NMEA, which is fascinating because each record is only 15 bytes, including time, elevation, latitude, longitude, and more. This compact format allows for extensive data storage in a small space. Initially, I considered using a memory solution with megabytes of storage capacity. However, I realized it would be much simpler to use the onboard logging feature of the Ultimate GPS module. With 32KB of storage, it can hold about 2000 recordings, sufficient for many runs. The default recording interval is 10 seconds, which I changed to 5 seconds to obtain more detailed data. I successfully implemented this using the Adafruit breakout board connected to an Arduino, with an interface for easy interaction. This process is documented here. Additionally, I created an interface to automate data dumping and erasing from the logger, also documented here. While my final GPS-related code differs from what is documented, I will include all of my code at the end of this section. Another requirement was converting the NMEA format to a more common GPS format, GPX. Unfortunately, there was no existing library to convert NMEA outputs to GPX, which is an XML-like format. This gave me the enjoyable task of writing one myself! Fortunately, there was a converter for NMEA to JSON, so I first converted NMEA to JSON, then JSON to GPX. All my code can be found on my GitHub here. I hope this library will be useful for others, and perhaps even for Adafruit. OLED I thought it would be dull for my project to simply record data without displaying anything. While I wasn’t initially sure what to show, I knew some form of visual output would be aesthetically pleasing and practically useful. I decided to buy an OLED screen, which we learned about during the Output Devices week in class. I chose the DIYMall 0.96” Blue and Yellow I2C OLED screen, available on Amazon for around $9 when I purchased it in November 2018. Fortunately, these prices have been decreasing over time. Programming the OLED was relatively straightforward. Adafruit offers OLED screens of this format and provides numerous libraries that simplify the process. The main requirement is the Adafruit_SSD1306 library, available here. Additionally, the Adafruit GFX library, which can be installed directly from the Arduino IDE, is necessary. Using the example code ssd1306_128x64_i2c makes programming easy. One crucial detail is to change the display register from 0x3D to 0x3C; otherwise, it won't work! I discovered this the hard way after a lot of trial and error and extensive Googling. Another important point is that if you're programming on a microcontroller with limited RAM, you might not be able to fully utilize the 128x64 screen because each pixel requires memory. For example, on the ATMega328P, which has 2K SRAM, it’s impossible to use both a 128x64 screen and SoftwareSerial due to RAM limitations. I resolved this by setting the SCREEN_HEIGHT to 32, which allowed enough RAM for Software Serial communication with the GPS module. This was a tricky bug that emerged when integrating the OLED and GPS module, both of which worked well individually, but the OLED failed to initialize when combined. I was thrilled when I first got the OLED working: Another point to note is that the example code provided is quite extensive. You don’t need all of it to perform basic tasks like displaying a string, which is likely the primary use case for most people. Despite this, I highly recommend this component. It’s very user-friendly from a programming standpoint. These were the main concerns I had while coding. Flash memory wasn’t a significant issue since the ATMega328P has 32KB, and I only used about 22KB. Here is my main Arduino file: // Test code for Adafruit GPS modules using MTK3329/MTK3339 driver // // This code shows how to listen to the GPS module in an interrupt // which allows the program to have more 'freedom' - just parse // when a new NMEA sentence is available! Then access data when // desired. // // Tested and works great with the Adafruit Ultimate GPS module // using MTK33x9 chipset // ------> http://www.adafruit.com/products/746 // Pick one up today at the Adafruit electronics shop // and help support open source hardware & software! -ada #include #include #include #include #include #include // Declarations for OLED #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // If you're using a GPS module: // Connect the GPS Power pin to 5V // Connect the GPS Ground pin to ground // If using software serial (sketch example default): // Connect the GPS TX (transmit) pin to Digital 3 // Connect the GPS RX (receive) pin to Digital 2 // If using hardware serial (e.g. Arduino Mega): // Connect the GPS TX (transmit) pin to Arduino RX1, RX2 or RX3 // Connect the GPS RX (receive) pin to matching TX1, TX2 or TX3 // If you're using the Adafruit GPS shield, change // SoftwareSerial mySerial(3, 2); -> SoftwareSerial mySerial(8, 7); // and make sure the switch is set to SoftSerial // If using software serial, keep this line enabled // (you can change the pin numbers to match your wiring): SoftwareSerial mySerial(A2, A1); // If using hardware serial (e.g. Arduino Mega), comment out the // above SoftwareSerial line, and enable this line instead // (you can change the Serial number to match your wiring): //HardwareSerial mySerial = Serial1; Adafruit_GPS GPS(&mySerial); // Set GPSECHO to 'false' to turn off echoing the GPS data to the Serial console // Set to 'true' if you want to debug and listen to the raw GPS sentences. #define GPSECHO true // this keeps track of whether we're using the interrupt // off by default! boolean usingInterrupt = false; void useInterrupt(boolean); // Func prototype keeps Arduino 0023 happy int count = 0; void setup() { // connect at 115200 so we can read the GPS fast enough and echo without dropping chars // also spit it out Serial.begin(115200); Serial.println("Adafruit GPS library basic test!"); // 9600 NMEA is the default baud rate for Adafruit MTK GPS's- some use 4800 GPS.begin(9600); // uncomment this line to turn on RMC (recommended minimum) and GGA (fix data) including altitude GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); // uncomment this line to turn on only the "minimum recommended" data //GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY); // For parsing data, we don't suggest using anything but either RMC only or RMC+GGA since // the parser doesn't care about other sentences at this time // Set the update rate GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz update rate // For the parsing code to work nicely and have time to sort thru the data, and // print it out we don't suggest using anything higher than 1 Hz GPS.sendCommand("$PMTK187,1,5*38"); if (GPS.LOCUS_StartLogger()) Serial.println(" STARTED!"); else Serial.println(" no response :("); // Request updates on antenna status, comment out to keep quiet GPS.sendCommand(PGCMD_ANTENNA); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64 Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever display.display(); delay(2000); display.clearDisplay(); } // the nice thing about this code is you can have a timer0 interrupt go off // every 1 millisecond, and read data from the GPS for you. that makes the // loop code a heck of a lot easier! useInterrupt(true); delay(1000); // Ask for firmware version mySerial.println(PMTK_Q_RELEASE); } // Interrupt is called once a millisecond, looks for any new GPS data, and stores it SIGNAL(TIMER0_COMPA_vect) { char c = GPS.read(); // if you want to debug, this is a good time to do it! #ifdef UDR0 if (GPSECHO) if (c) UDR0 = c; // writing direct to UDR0 is much much faster than Serial.print // but only one character can be written at a time. #endif } void useInterrupt(boolean v) { if (v) { // Timer0 is already used for millis() - we'll just interrupt somewhere // in the middle and call the "Compare A" function above OCR0A = 0xAF; TIMSK0 |= _BV(OCIE0A); usingInterrupt = true; } else { // do not call the interrupt function COMPA anymore TIMSK0 &= ~_BV(OCIE0A); usingInterrupt = false; } } uint32_t timer = millis(); void loop() // run over and over again { // in case you are not using the interrupt above, you'll // need to 'hand query' the GPS, not suggested :( if (! usingInterrupt) { // read data from the GPS in the 'main loop' char c = GPS.read(); // if you want to debug, this is a good time to do it! if (GPSECHO) if (c) Serial.print(c); } // if a sentence is received, we can check the checksum, parse it... if (GPS.newNMEAreceived()) { // a tricky thing here is if we print the NMEA sentence, or data // we end up not listening and catching other sentences! // so be very wary if using OUTPUT_ALLDATA and trytng to print out data //Serial.println(GPS.lastNMEA()); // this also sets the newNMEAreceived() flag to false if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false return; // we can fail to parse a sentence in which case we should just wait for another } // if millis() or timer wraps around, we'll just reset it if (timer > millis()) timer = millis(); // approximately every 2 seconds or so, print out the current stats if (millis() - timer > 2000) { count++; timer = millis(); // reset the timer Serial.print("Fix: "); Serial.print((int)GPS.fix); Serial.print(" quality: "); Serial.println((int)GPS.fixquality); if (GPS.fix) { Serial.print("Speed (knots): ");Serial.println(GPS.speed); Serial.print("Satellites: "); Serial.println((int)GPS.satellites); } display.clearDisplay(); display.setTextSize(2); // Normal 1:1 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(0, 0); // Start at top-left corner display.cp437(true); // Use full 256 char 'Code Page 437' font if (!GPS.fix){ display.print("No signal :( "); display.print(count); } else { float speed = GPS.speed; display.print(knots_to_pacemin(speed)); display.print(":"); int secs = knots_to_pacesec(speed); if (secs < 10){ display.print("0"); } display.print(secs); display.println(" "); display.print(count); } display.display(); } } int knots_to_pacemin(float speed) { return (int) (speed/1.15078*60); } int knots_to_pacesec(float speed) { return ((speed/1.15078*60) - (float) knots_to_pacemin(speed)) * 60; } Dumping data happened separately - can see my Interfaces week to see how I did that. Electronics Choices I chose the ATMega328P microcontroller for its popularity and ample flash memory. Its widespread use means there is extensive documentation available, and testing can be easily done with an Arduino Uno, which also uses this microcontroller. I wanted to avoid concerns about memory limitations. To keep the design compact, I opted to use as few components as possible, such as omitting external oscillators. For power, I needed a battery and decided to use a 110mAh lithium-polymer battery available in the Harvard Lab. Initially, I considered using a larger battery, but it wasn’t suitable for the form factor, and I found that the board's power consumption was manageable with the smaller battery. Board Design I spent over 24 hours designing my board to make it as compact as possible. My first step was creating a generic ATMega328P board, which was very useful for isolating errors by comparing them to this basic version. The components needed were: ATMega328P 2x 10K resistors Switch 1x 1K resistor 2x3 header FTDI header LED JST 2-pin connector (for the battery, optional) I kept my design very tight to conserve space, aiming to practice space-saving techniques for my final board. Follow this link for complete project: Portable GPS Watch: Revolutionizing Fitness Tracking ### DESIGN OF A NAIL MAKING MACHINE SUITABLE FOR THE LOCAL COTTAGE INDUSTRY Chapter 1: Introduction 1.1.  Nails, Nail making and nail making machine 1.1.1 Nails Nails, slender pin-shaped objects crafted from hard metal or alloy, serve as fasteners in various applications. Typically composed of steel, they are often treated with coatings to resist corrosion in harsh environments or enhance adhesion, thereby improving both functionality and appearance. Nails designated for woodwork are typically fashioned from soft, low carbon or mild steel, while those designed for concrete applications are constructed from harder materials. Installation of nails is accomplished using tools such as hammers, nail guns, or explosive charges, securing materials together through axial friction and shear strength. With applications spanning from building and construction to carpentry, nails serve a multitude of purposes across industries. As a result, the varieties of nails available are extensive and diverse. 1.1.2 Nail Making To achieve the desired diameter, wire is pulled through a sequence of dies. The wire end is then held and pressed into a die with the shape of the nail head, forming a knurled head for convenient striking when driving it into the workpiece for fastening. Following this step, based on the desired nail length, the wire is cut using a die shaped to create the sharp point. The finished nail at this stage is transferred to a collection tray, awaiting the subsequent coating process. 1.1.3 Nail Making Machine A nail making machine carries out several key operations, including head forming, wire cutting, and wire feeding. During head forming, the nail head punch, knurled at its tip, is utilized. Its motion is derived from the motor-driven crankshaft. The design of the head punch must prioritize strength to effectively strike the wire without causing surface abrasions and withstand high impact loads. Additionally, it should possess sufficient hardness to prevent chipping of the striking surface. In wire cutting, the cutting dies are shaped to achieve the pointed ends of the nails. They must be robust and harder than the nail wire to endure shearing forces that shape the pointed end. The cutting dies are timed to coordinate with the nail head punch. Wire feeding involves the cam-driven pushing of the wire into the die block. The cam's motion is derived from the support of the nail head punch or directly from the crankshaft. Timing is crucial in this operation to ensure the correct length of the nail is achieved at the appropriate moment. 1.2 Problem statement Nail making machines are priced between Kshs 600,000 and 5,000,000, inclusive of taxes, resulting in the following issues: i. Exclusion of potential participants from the cottage industry. ii. Elevated expenses for imported nails. iii. Importation of nail making machines at considerable costs. The creation and implementation of a locally manufactured nail making machine will address these challenges. Furthermore, it will contribute to the realization of the industrialization goals outlined in Vision 2030. 1.3 Study Objective The goal of this project is to create a nail making machine tailored to the needs of the local cottage industry. The specific objectives are as follows: i) Conduct a survey of nail making machines presently employed in the local cottage industry. ii) Develop a cost-effective nail making machine suitable for cottage industry operations. iii) Generate a computer simulation model for the designed nail making machine. iv) Assess the technical and economic feasibility of the innovative solution. Chapter 2: Literature Review 2.1 Definition A nail typically comprises a metal rod or shank, sharpened at one end and featuring a formed head at the opposite end, allowing it to be driven into wood or other materials for fastening purposes. Steel serves as the primary material in nail manufacturing, though aluminum, brass, and other metals are also viable options. Surface coatings or plating may be applied to enhance corrosion resistance, gripping strength, or aesthetic appeal. The head, shank, and point may assume various shapes depending on the nail's intended function. 2.2 Background Prior to the 19th century, nails were handcrafted by blacksmiths. Iron wire was positioned on an anvil, and one end was gradually tapered with the flat side of a hammer, forming a sharp edge about an inch from the end to create the nail's pointed tip. Using the sharp end of the hammer, a notch was cut into the rod, after which the sharpened end was thrust into a tapered hole in the anvil and snapped off to produce the short nail. Subsequently, the nail's end was flattened with rapid strikes of the hammer, and it was removed from the anvil hole with a quick, upward motion. This process illustrates the origins of nail making. Nails may have been utilized in Mesopotamia as early as 3500 B.C., likely crafted from copper or bronze, before transitioning to iron. Initially, nails were hand-forged with hammers, manufactured individually, and thus were relatively scarce and costly. By the 1500s, a machine was developed to produce long, flattened strips of iron known as nail rods, which could then be cut, pointed, and headed. In the late 18th century, two early nail-making machines were patented, one by Ezekial Reed in the United States in 1786 and another by Thomas Clifford in England in 1790. These machines cut tapered pieces from flat iron sheets and subsequently flattened the heads. Despite these advancements, blacksmiths in rural areas continued handcrafting nails from wrought iron well into the 20th century. The introduction of the first machine to produce nails from metal wire in the United States around 1850 marked a significant development, and this technique remains the primary method used in nail production today. 2.3 Applications of nails Nails are commonly employed to join pieces of wood or fasten materials to wood. They are typically hammered into place and secured by friction, with some featuring roughened shanks to enhance grip. In residential housing construction, nails are extensively utilized, with an average wood frame house requiring anywhere from 20,000 to 30,000 nails of various types and sizes. Given their diverse applications, nails come in a wide range of varieties. Common nails are the standard all-purpose option, while finishing nails, used in furniture and cabinetry, boast small heads that remain inconspicuous in the finished work. Nails are available in various lengths and gauges, or diameters. Many nails feature notches or grooves near the head to improve grip, while some boast screw-like threads for added holding power. Specially hardened nails, engineered for use in concrete or masonry, feature longitudinally grooved shanks for a secure hold. Additionally, special double-headed nails are designed for temporary structure assembly. 2.4 Classification of nails Figure 2.1: Classification of nails Although not precisely defined, nails are generally categorized based on their length. Typically, nails measuring less than 1 inch (2.54 cm) in length are referred to as tacks or brads. Nails ranging from 1 to 4 inches (2.54 to 10.16 cm) are simply called nails, while those exceeding 4 inches (10.16 cm) in length are sometimes termed spikes. Box nails resemble common nails in their wire composition, but they feature thinner shanks and are not suitable for dimensional lumber framing construction, which typically requires common nails. This is because box nails have thinner shanks relative to their penny size, resulting in reduced holding power. They are commonly used on thinner wood materials, such as wooden boxes, to minimize splitting. Upholstery nails serve as decorative elements for furniture, providing a final touch to various furniture types. 2.5 Design The shank of a nail is typically crafted to be round and smooth. However, shanks featuring serrations, annular grooves, spiral flutes, or helical threads are utilized when a stronger and more permanent grip is necessary. Additionally, thermoplastic coatings may be applied to the shaft, which heat up due to friction during nail driving, then rapidly cool and set to secure the nail in place. The diameter of the shank varies depending on the nail type. The most common nail point is a four-sided tapered cut known as a diamond point. However, other nails may feature a blunter point to prevent certain woods from splitting. Specialized nails may also include chisel points, barbed points, needle points, and various others, tailored to specific applications. Various types of nails are available for different purposes, including tile roofing, hardwood flooring, shingles, rain gutters, wallboard, sheet metal, and concrete. Some nails are specifically designed to be driven using air-powered nail guns rather than a hammer. Moreover, there have been advancements in nail design tailored for specific applications within the aerospace industry. 2.6 Raw Materials The majority of nails are constructed from steel, although alternative materials such as aluminum, copper, brass, bronze, stainless steel, nickel silver, monel, zinc, and iron are also employed. Galvanized nails undergo a zinc coating process to enhance their resistance to corrosion. Blued steel nails are exposed to flames to acquire a bluish oxide finish, offering a degree of corrosion resistance. Cement-coated nails are coated with a plastic resin to enhance their gripping capabilities. Certain brads receive a colored enamel coating to harmonize with the color of the material they are securing. 2.7 The Manufacturing process Figure 2.2: Nail manufacturing process Wire is extracted from a coil and introduced into the nail-making apparatus, where it is grasped by a pair of gripping dies. The head shape of the nail has been precisely crafted into the ends of these dies. As the dies secure the wire in place, a mechanical hammer strikes the free end of the wire, causing it to deform into the die cavity, thereby shaping the head of the nail. While the wire remains clamped in the dies, a set of shaped cutters impacts the opposite end of the nail, simultaneously forming the point and severing the nail from the remaining wire extending from the coil. Subsequently, the dies open, and an expelling mechanism propels the nail into a collection pan situated beneath the machine. The free end of the wire is then drawn from the coil and fed back into the machine, initiating the cycle once more. 2.8 The Future The demand for mass-produced commodity nails is influenced by fluctuations in the construction industry, which are closely tied to economic conditions. Additionally, competition from foreign manufacturers poses a challenge, further squeezing profits. In Kenya, the adoption of nail production has been hindered by the unaffordability of nail making machines. However, with population and economic growth driving increased demand for housing, the need for nails is on the rise. Similar to other markets, competition from foreign manufacturers remains a factor, impacting profit margins. Key desirable attributes of a nail making machine include smooth operation, minimal wear and tear, low maintenance costs, high durability, and superior efficiency. CHAPTER 3: Methodology The aim of this project was to create an economical and accessible nail making machine tailored for the cottage industry in Kenya. With its completion, our aspiration is for this machine design to be widely adopted across the cottage industry in Kenya. Additionally, by manufacturing the nail making machine domestically, we anticipate a significant reduction in its cost, thereby fostering job creation within the sector and contributing to the objectives outlined in Vision 2030. Initially, we conducted site visits to several nail industries in Kenya, such as Wire Products in Athi River and Devki Steels in Ruiru, where we observed that the existing machines were primarily imported from India. Additionally, we collected literature on existing machine designs from various countries known for nail manufacturing, including China, the USA, and India. Utilizing this information, we developed design matrices to identify the key attributes of a reliable nail making machine and determine which features and mechanisms could be modified to create an affordable solution. Subsequently, we generated CAD drawings using Autodesk Inventor. The objectives of this project will be realized through subsequent stages, which include analyzing existing nail making machine designs to identify those suitable for fabrication using locally available materials and machinery, creating a computer simulation using Autodesk Inventor, and assessing the overall quality of the nail making machine, particularly in terms of production costs. 3.1. A Survey of Nail Making Machines Currently Being Used In the Cottage Industry In the current technological landscape, numerous nail making machine designs cater to the needs of the manufacturing and construction industries. These machines are manufactured abroad by various companies across countries such as India, China, and the USA. Each machine is tailored to produce specific nail designs, such as box nails, screw nails, finishing nails, and cut flooring nails, with variations to accommodate different nail lengths. Our primary emphasis was on compact and efficient nail making machines. Our secondary objective involved selecting a machine design that aligns closely with the requirements of the Kenyan building and manufacturing sectors while remaining cost-effective. 3.1.1. Current Nail Making Machine Designs The initial step in evaluating nail making machine designs involved researching the existing products available in the industry. Upon inquiry, we discovered that there were only a few nail manufacturers operating locally. Devki Steels in Ruiru and Wire Products in Athi River emerged as the primary manufacturers of nails in the area. To commence our research, we visited Devki Steels Ltd to inspect their machinery. During our visit, we met with the maintenance engineer, who provided us with insights into the company's history of nail production, primarily importing machines from India. He demonstrated the nail making process and showcased the range of nails they manufactured. Notably, we learned that the company did not produce roof nails due to the exorbitant costs associated with the machines, which were priced at approximately US $8,000. Factoring in shipping expenses and taxes, the total cost would exceed US $10,000. According to the engineer, the high costs deterred many companies from investing in the machines, resulting in limited local production and consequently higher nail prices. This created unfair competition with cheaper imported nails, reducing the demand for locally manufactured products. Subsequently, we conducted online research to explore nail making machines predominantly imported from India, China, and the USA, leading us to identify the following designs. 3.1.2. Perfect Automatic Wire Nail making machine This model is produced in Punjab, India. Figure 3.1: Model of Nail making machine from Punjab, India It boasts a simple yet robust design, crafted from premium-grade casting and steel materials. With a versatile range, it can produce various types of nails including flat head, pop, round head, lost head, and counter sunk head nails from copper, aluminum, and brass wires. Its primary crank is directly powered by a motor, while side-shafts are driven by four bevel gears, ensuring precise and consistent adjustment of the cutting tool. The machine allows for adjustable nail length and thickness, with all tools easily accessible and replaceable for swift maintenance. Equipped with bushes on its main and side shafts, it guarantees extended durability. Constructed with high-quality steel components, including cams, gears, rollers, and roller pins, properly heat-treated and ground, the machine ensures long-lasting performance. The wire from the coil passes through straightening rollers and is intermittently fed into the gripping dies, which securely close to allow the heading punch to shape the nail head. Subsequently, the grip loosens, and the required nail length is continuously fed, cut by the cutting tools, leaving sufficient stock for the head of the subsequent nail. The finished nail is then ejected by the ejector. The machine is priced at Kshs. 166,000, excluding shipping costs, which could amount to over Kshs. 300,000. 3.1.3. Nail making machine – USA This innovation originates from the United States of America. Figure 3.2: Nail making machine from USA Similar to the previous model, this one also utilizes a main shaft and side cams as the primary power transmission system to the dies. However, it differs from the aforementioned model in several aspects that enable it to operate at a higher speed. The distinguishing features of this machine lie in its method of driving the reciprocating heading ram using a balanced flywheel and crank construction. This construction allows the crankshaft to operate at a higher speed in perfect balance, despite the rapidity with which the ram forms the nail heads. Additionally, the machine incorporates a continuously rotating ejector mechanism to efficiently clear the cut nails from the machine, with the ejector operating in precise timed relation with the heading ram. Furthermore, the machine includes a mechanism for operating the wire grippers using preloaded torsion members, ensuring firm wire grip during the heading operation. These torsion members are designed to unload the gripping members only when the wire is being fed after the heading operation. These distinguishing features set this machine apart from the one originating from Punjab, India. Follow this link for complete project: DESIGN OF A NAIL MAKING MACHINE SUITABLE FOR THE LOCAL COTTAGE INDUSTRY ### Arduino's Explosive Growth: Powering Innovation Worldwide Introduction Since its inception in 2005, the Arduino Project has witnessed the sale of over 500,000 boards globally. Unofficial clone boards likely surpass this number, suggesting a presence of over a million Arduino boards or their variants worldwide. Its popularity is on the rise as more individuals recognize the remarkable potential of this open-source project, offering the ability to swiftly and effortlessly create exciting projects with a minimal learning curve. One of Arduino's most significant advantages over other microcontroller development platforms is its user-friendliness, allowing non-technical individuals to grasp the basics and embark on their own projects relatively quickly. Artists, in particular, find it ideal for creating interactive artworks without requiring specialized knowledge of electronics. A vast community of Arduino users shares code and circuit diagrams, offering support and guidance readily, notably through the Arduino Forum. Despite the abundance of information available online for beginners, it is often scattered across various sources, making it challenging for novices to access the desired information. This book addresses this gap by presenting 50 projects that systematically guide readers through the realms of electronics and Arduino programming in an easily understandable manner. Embracing a hands-on approach, this book refrains from overwhelming readers with theoretical content before allowing them to engage with their Arduino. It acknowledges the excitement of experimenting with a new gadget and encourages readers to dive straight into connecting components, uploading code, and initiating their Arduino journey promptly. This practical approach is deemed optimal for learning subjects such as physical computing, central to the essence of Arduino. How to Use This Book The book commences with an introduction to Arduino, covering hardware setup, software installation, initial sketch upload, and ensuring the functionality of both Arduino and the software. Following this, we delve into explaining the Arduino IDE (Integrated Development Environment) and its usage, paving the way for project exploration. Projects are structured to progress from fundamental to advanced topics, each beginning with hardware setup instructions and necessary code. Subsequently, we provide separate explanations for both the code and hardware, elucidating their functionalities in detail with clear, step-by-step instructions. Abundant diagrams and photographs are included to facilitate easy comprehension and verification of project execution. Throughout the book, readers may encounter unfamiliar terms and concepts initially. However, as they progress through the projects, these aspects will gradually become clearer. What You Will Need To engage with the projects outlined in this book, you'll require a variety of components. Executing all projects may entail purchasing numerous parts, which could be costly. Hence, I recommend beginning by procuring the components listed for the initial chapters' projects. As you progress, you can obtain parts required for subsequent projects. Additionally, several other items will either be necessary or prove beneficial. Firstly, you'll need an Arduino board or one of the various clone boards available on the market, such as Freeduino, Seeeduino, Boarduino, Sanguino, Roboduino, or any other "duino" variant. These options are fully compatible with the Arduino IDE, shields, and other accessories usable with an official Arduino board. Remember that Arduino is an open-source project, allowing anyone to create clones or variants. However, if you wish to support the original Arduino board's development team, consider obtaining an official board from recognized distributors. While this book primarily utilizes an Arduino Uno, any available Arduino board will suffice. Access to the internet is necessary for downloading the Arduino IDE, the software for writing and uploading Arduino code, as well as downloading code samples provided within this book (if you prefer not to type them manually), and any required code libraries. Furthermore, you'll need a well-lit table or flat surface to organize your components, situated near your desktop or laptop PC for code uploading. Given that you'll be working with electricity (albeit low voltage DC), ensure that metal tables or surfaces are covered with a non-conductive material like a tablecloth or paper before arranging your materials. While not essential, wire cutters, long-nosed pliers, and a wire stripper may prove useful. Additionally, a notepad and pen can aid in sketching rough schematics and developing concepts and designs. Lastly, the most crucial requirement is enthusiasm and a readiness to learn. Arduino is designed as an accessible and affordable entry into microcontroller electronics, and with determination, no task is insurmountable. This book will serve as your guide on this exciting and creative journey. What Exactly Is an Arduino? According to Wikipedia, Arduino is a single-board microcontroller intended to simplify the incorporation of electronics into multidisciplinary projects. Its hardware comprises a straightforward open-source board centered on an 8-bit Atmel AVR microcontroller, although a newer model has been developed around a 32-bit Atmel ARM. The software includes a conventional programming language compiler and a boot loader that operates on the microcontroller. Figure 1-1. An Arduino Mega In simpler terms, an Arduino is a small computer that you can program to manage communication between itself and external components you attach to it. It falls under the category of physical or embedded computing platforms. For instance, a basic application of an Arduino could involve turning on a light for a specific duration, like 30 seconds, after pressing a button. In this scenario, the Arduino would be connected to both a lamp and a button. It would wait for the button to be pressed, and upon activation, it would illuminate the lamp and commence a countdown. After 30 seconds, it would switch off the lamp and resume waiting for the next button press. This setup could be utilized to control a cupboard light, for instance. This concept can be expanded so that the device detects when the cupboard door is opened or some other event occurs, automatically activating the lamp and deactivating it after a predefined period. Further enhancements could involve incorporating a passive infrared (PIR) sensor to detect movement and activate the lamp upon detection. These are simple examples demonstrating the versatility of an Arduino. An Arduino can be utilized to develop standalone interactive objects or be linked to a computer, network, or even the internet to exchange data and execute actions based on that data. For instance, it could transmit data collected from sensors to a website for display in the form of a graph. The Arduino can be connected to various components including LEDs, dot-matrix displays, buttons, switches, motors, temperature sensors, pressure sensors, distance sensors, GPS receivers, Ethernet or WiFi modules, or virtually any device that generates data or can be controlled. A quick online search will reveal a plethora of projects showcasing the Arduino's capability to interface with and control an extensive range of devices. Figure 1-2. A dot-matrix display controlled by an Arduino The Arduino board comprises an Atmel AVR microprocessor, a crystal or oscillator that functions as a clock by emitting time pulses at a specified frequency to maintain the correct operational speed, and a 5V voltage regulator (though certain Arduinos may utilize a switching regulator, and others, such as the Due, may not operate at 5 volts). Additionally, depending on the Arduino model, there may be a USB socket for connecting to a PC or Mac to upload or retrieve data. The board exposes the microcontroller’s I/O (input/output) pins, allowing for connection to external circuits or sensors. To program the Arduino and customize its functionality, the Arduino IDE (Integrated Development Environment) is utilized. This software, available for free, facilitates programming in the language specific to Arduino. This language is based on C/C++ and can be expanded through C++ libraries. The IDE enables the creation of computer programs, which are sets of step-by-step instructions uploaded to the Arduino. These instructions are then executed by the Arduino, allowing it to interact with connected components. In the Arduino context, these programs are referred to as "sketches." The Arduino hardware and software are both open source, meaning that the code, schematics, and designs are freely available for anyone to use and modify as they see fit. Consequently, numerous clone boards and Arduino-based variants are accessible for purchase or replication from provided schematics. In fact, individuals are not hindered from assembling their own Arduino on a breadboard or homemade PCB (printed circuit board) using the appropriate components. The only stipulation set by the Arduino team is the exclusion of the term "Arduino," which is reserved solely for the official board. As a result, clone boards are often labeled with names such as Freeduino or Roboduino. Moreover, the Arduino's functionality can be expanded through the use of "shields," which are circuit boards containing additional devices, such as GPS receivers, LCD displays, or Ethernet modules, that can be easily affixed to the top of the Arduino to enhance its capabilities. Shields also extend the pins on the Arduino, providing continued access to all available input/output points. However, shields are not mandatory, as similar circuitry can be achieved using a breadboard, Stripboard, Veroboard, or homemade PCBs. Most projects in this book utilize circuits on a breadboard. Due to the open-source nature of the designs, clone boards like the Freeduino can be fully compatible with Arduino, supporting software, hardware, and shields without any issues. While some clones may feature intentional differences to accommodate special features, compatibility remains high. However, genuine Arduino boards like the Due may present specific issues, such as its 3-volt operation, which may not be compatible with all shields. Various Arduino variants are available, with the Uno being the most common and widely used since its release in 2010 (currently on Revision 3). Other variants include the Due, Leonardo, Duemilanove, Mega 2560, Mega ADK, Fio, Arduino Ethernet, Mini, Nano, Lilypad, and Bluetooth Arduinos. Notably, the Arduino team's latest additions are the Leonardo and Due, marking their venture into ARM processors instead of AVR architecture processors. The Due boasts a 32-bit processor, operates at 84MHz, and offers 512KB of flash memory. The Uno stands out as perhaps the most versatile Arduino, hence its popularity, as it utilizes a standard 28-pin chip attached to an IC socket. This setup allows for easy transition from Arduino prototyping to permanent circuitry integration. Users can develop their device using Arduino, program the chip, then transfer it to their custom circuit board, effectively creating a custom-embedded device. Additionally, users can replace the AVR chip in their Arduino for minimal cost, provided it is pre-programmed with the Arduino bootloader. The newer Arduino Uno further enhances functionality with a programmable USB chip onboard, enabling customization of USB device recognition when connected to a PC. However, this feature requires advanced expertise. A cursory internet search for Arduino reveals a wealth of websites dedicated to the platform or showcasing innovative Arduino projects. The Arduino's versatility empowers users to create anything from interactive artworks to robots. With a blend of programming skills, imagination, and enthusiasm, the possibilities for Arduino projects are virtually limitless. Figure 1-3. Anthros art installation by Richard V. Gilbank controlled using an Arduino This book will equip you with the essential skills to embark on this exhilarating and imaginative hobby. Now that you understand what an Arduino is, let's connect one to our computer and begin utilizing it. Setting Up Your Arduino In this section, you'll find instructions on setting up your Arduino and the IDE for the first time, covering both Windows and Mac operating systems. If you're using Linux, please consult the Getting Started instructions on the Arduino website at http://playground.arduino.cc/learning/linux. For this guide, it's assumed that you're using an Arduino Uno, Duemilanove, Nano, Diecimila, or Mega 2560 (or their equivalent clone) and are installing on either Windows 7 or a recent version of OSX (Lion or Mountain Lion). If you're using a different type of board, please refer to the corresponding page in the Getting Started guide on the Arduino website. Figure 1-4. An Arduino Uno You'll also require a USB cable (A to B plug type), which is the same type of cable used for most modern USB printers. If you have an Arduino Nano, you'll need a USB A to Mini-B cable instead. Next, you'll need to download the Arduino IDE, the software you'll utilize to write your programs (or sketches) and upload them to your board. To obtain the latest IDE, visit the Arduino download page at http://arduino.cc/en/Main/Software and download the appropriate version for your operating system. For Mac users, once the Zip file has finished downloading, unzip it, and you'll find the Arduino icon. Drag it to the Applications folder to install the program. To start it, simply double-click the icon. For Windows users, download the ZIP file, unzip it, and place the unzipped folder wherever you prefer, ensuring the directory structure remains intact. Now, connect your Arduino board before installing the drivers and software. Attach the USB cable to the Arduino and plug the other end into a USB socket on your computer. The green Power LED (marked PWR) on your board will illuminate to indicate power. If you're using a Mac, no drivers need to be installed. For Windows users, the system will attempt to install the drivers for the Arduino, which will fail, resulting in a message stating that the "Device driver software was not successfully installed" (Figure 1-5). However, this can be disregarded. Figure 1-5. The automatic attempt by Windows to install the drivers will fail. This is normal Access the Start Menu and proceed to click on Control Panel. From there, navigate to System and Security, and click on System. Open the Device Manager. Within the list of hardware under Other Devices, you should observe an entry resembling Figure 1-6, displaying "Arduino Uno" with a yellow hazard icon overlay. Figure 1-6. The Windows Device Manager Simply right-click on the icon representing Arduino Uno in the list, then select "Update Driver Software" from the options provided (refer to Figure 1-7). Figure 1-7. Right click and choose ”Update Driver Software” Now choose “Browse my computer for driver software”. Figure 1-8. Click on “Browse my computer for driver software” Next, browse to the driver folder of the Arduino installation, and then click the Next button. Windows will now finish the driver installation. If you get a message that says “Windows can’t verify the publisher of this driver software” then click the “Install this driver software anyway.” If you have a Mac, then there are no drivers to install. Now that the drivers are installed, you are ready to open up the Arduino IDE. For Windows, double-click the arduino.exe file inside the unzipped Arduino folder. For a Mac, click the Arduino icon in the Applications folder. The IDE will now open up and present you with a blank sketch as in Figure 1-9. Figure 1-9. The Arduino IDE Next, open up an example sketch to test out the IDE and the Arduino. Click File, then Examples, then 01.Basics, and finally, Blink (see Figure 1-10). Figure 1-10. The Arduino File Menu. Choose the Blink sketch This will load the Blink example sketch into the IDE and will look something like Figure 1-11. Figure 1-11. The IDE with the Blink sketch loaded Next, you'll need to choose your board from the options provided in Tools ➤ Board (refer to Figure 1-12). For an Arduino Uno, simply select it from the top of the list. If you're using an older Arduino Duemilanove or a clone equipped with an Atmega328 chip, you should opt for Arduino Duemilanove or Nano w/ Atmega328. In the case of an even older board featuring an Atmega168 chip, pick Arduino Diecimila, Duemilanove, or Nano w/ ATmega168. Alternatively, you might have a Leonardo, Mega, or a DUE. Select the board that matches yours accordingly. Follow this link for complete project: Arduino's Explosive Growth: Powering Innovation Worldwide ### Real-Time Body Temperature Tracking via IoT and LoRa Networks Using Arduino Featured Application The research project described in the paper seeks to develop a real-time human body temperature tracking system using the Internet of Things (IoT) and LoRa wireless network technologies. Specifically, an Arduino microcontroller is used to interface with a body temperature sensor and transmit the sensor data via a LoRa module to monitor temperature readings in real time. The system aims to prove the feasibility of using IoT and LoRa for continuous health monitoring applications. Performance evaluation of the sensors and wireless platform is conducted to ensure suitability for healthcare use. Abstract The abstract in the paper is essential and gives an insight into the main arguments explored in the article. For this, the work starts by positioning it within the field of IoT-based healthcare: healthcare is one such area where the use of IoT can contribute to society. Some challenges in remote healthcare such as continuous monitoring and resource availability are noted. The development of personalized treatment solutions using automated sensor data is highlighted as a way to reduce costs and improve outcomes. The paper then introduces the specific system developed - an IoT-based health monitoring platform using the MySignals development shield connected to various biomedical sensors to collect physiological data like ECG, temperature, pulse rate, and oxygen saturation. LoRa wireless network technology is utilized to transmit the sensor readings to a monitoring device. The performance of the sensors and wireless devices is evaluated through data analysis and statistical methods to verify the system's effectiveness. In summary, the abstract clearly outlines the motivation, approach, and goals of the research work. Role of IoT in Healthcare The benefits of IoT technologies in terms of integration with healthcare systems and the provision of healthcare to patients are enormous. Another one of the most important areas that IoT has affected the healthcare sector is through remote patient monitoring applications which helps in addressing the problem of medical resources being scarce and the issue of access to care in remote/rural regions. Continuous collection of vital sign data via wearable IoT sensors and wireless transmission to clinics can help monitor patients with chronic conditions at home instead of lengthy hospital stays. This reduces healthcare costs while improving quality of life. For example, IoT devices allowing diabetes patients to track blood sugar from home help prevent costly emergency visits from complications. Elderly populations benefit from remote fall detection systems and activity monitors that provide peace of mind to families by alerting caregivers during emergencies. Wearable sensors may even detect early signs of medical issues to facilitate faster interventions. Telemedicine is another growing field empowered by IoT, enabling virtual consultations and remote diagnosis/treatment in areas lacking specialists. On a broader scale, aggregated IoT healthcare data offers valuable population health insights. Large datasets capturing patterns of diseases and wellness metrics across demographics can guide resource allocation and prevention strategies by regulators. Over time, widespread deployment of IoT healthcare networks may reveal new clinical perspectives to advance medical research as well. While promising vast improvements, IoT-enabled healthcare must address concerns of data security, privacy, and technical reliability to become widely adopted. Strong access controls, anonymization practices, and encryption capabilities are needed to gain user trust considering the sensitive nature of medical records. System designs should also account for intermittent wireless connectivity issues that could disrupt real-time services Introduction The introduction section begins by providing background on IoT and its widespread applications across different domains thanks to enabling technologies like RFID, wireless protocols, and LPWANs. Healthcare is identified as a key application area for IoT given its potential to improve various healthcare processes and provide remote access to medical care. Some driving factors for IoT in healthcare mentioned are transforming systems to be more efficient, coordinated, and patient-centric. Challenges in current healthcare systems like addressing health issues globally and in developing nations are noted as motivations for leveraging the IoT. The networking of devices, cloud services, and diverse cooperation mechanisms offered by IoT confluence with standards, wireless protocols, and low-power technologies are said to support new healthcare and monitoring applications. LPWAN technologies particularly are highlighted for enabling new human-centric health and wireless monitoring use cases. LoRa is introduced as a promising LPWAN protocol for applications with low-powered end devices transmitting small amounts of data either device-initiated or network-initiated. Key LoRa characteristics compared to other network technologies are summarized in a table, showing attributes like its long communication range and lower data rates making it well-suited for IoT healthcare systems. In summary, the introduction effectively sets the context for the research by outlining the growth of IoT applications generally and their specific relevance and opportunities in healthcare. It presents LoRa as a suitable wireless technology for the envisaged health monitoring system based on its networking properties. Related Work This section reviews previous related work on IoT-based healthcare systems and monitoring applications. It classifies such systems broadly into clinical care, remote monitoring, and context-aware domains based on patient needs and the level of medical attention required. Several research prototypes and proposed architectures are discussed such as a two-stage remote monitoring system collecting sensor data via a Femto-LTE network. The Body Sensor Network (BSN) technology underpinning many monitoring platforms is described. Open-source BSN frameworks like SPINE and its collaborative extension C-SPINE supporting sensor data fusion are outlined. A specific emotion detection system called e-Shake leveraging the C-SPINE framework is highlighted, demonstrating heart rate analysis during handshake events. Graphical representations are provided to visualize the system. Other wireless health monitoring systems found in literature employing technologies like Zigbee, Bluetooth, and WiFi are also surveyed and depicted visually with relevant figures. The section notes how LoRa differs from short-range wireless alternatives in providing wide-area connectivity for low-power devices. Existing issues in IoT healthcare addressed by LoRa integration of medical sensors, cloud, and gateways are identified. Finally, research validating LoRa for indoor and large-area monitoring applications is reviewed, establishing it as a suitable technology for the project scope. Development Methodology This section details the methodology adopted for developing the proposed IoT healthcare monitoring system. A block diagram depicts the overall components involving biomedical sensors interfaced with the MySignals platform and Arduino microcontroller. Sensor data is transmitted wirelessly via a LoRa module connected to the Arduino through a multiprotocol radio shield. Specifications of the key devices - MySignals development platform supporting 15 sensors, Arduino Uno microcontroller, and LoRa wireless modules are tabulated. Diagrams visually illustrate the MySignals with sensor ports and WiFi module, along with the LoRa integration using the multiprotocol shield and Waspmote gateway. The physiological metrics of ECG, temperature, pulse rate, and oxygen saturation to be monitored based on predictive health value are described. The methods of sensor data analysis involving serial monitoring and LoRa data receipt are explained with a flowchart. In summary, the section clearly communicates the system design and choices pertaining to hardware, sensors, and data evaluation approach. MySignals Development Platform The MySignals hardware used in the system serves as an effective IoT development platform for building customized e-health monitoring prototypes. Its modular architecture supporting up to 15 biomedical and environmental sensors via detection pins facilitates experimenting with different sensing configurations. Electronics are an important part of building these customized e-health monitoring prototypes as they allow for the monitoring of various biomedical and environmental sensors. On-board features like a real-time clock, micro-SD card slot, and prototyping area broaden the types of healthcare applications it can prototype. For instance, long-term continuous logging of patient metrics is achievable using local storage. Its small form factor and low-power design also make it well-suited for wearable/mobile health devices. Integration of an ESP8266 WiFi module enables cloud uploads of collected measurements besides the wireless transmission methods evaluated in this research. This paves the way for richer telehealth solutions incorporating real-time data dashboards, activity tracking apps, and clinical alerts over the internet. Large-scale deployments become more viable too with networked sensors. Being open-source also stimulates further enhancements from developer communities. Potential extensions include specialized modules expanding sensing capabilities into new medical domains like respiratory monitoring, advanced biometric analysis through integrated processing units, and integration of emerging wireless technologies as they mature. Overall, MySignals presented a robust IoT prototyping platform benefiting this healthcare project, while its continuing evolution maintains relevancy for building future smart wellness solutions through flexible upgrades. The adoption of such open modular platforms can help accelerate real-world deployments of IoT healthcare applications. Results and Discussion This section reports and analyzes the results obtained from developing and testing the IoT healthcare monitoring system. A diagram first depicts the overall assembled system setup. ECG readings directly from the human body using the sensor are presented. Temperature, pulse, and oxygen saturation levels collected via the Arduino serial monitor are displayed and found to match normal human ranges with statistical analysis confirming accuracy.   Readings received over LoRa using a terminal program are similarly shown to validate end-to-end wireless transmission. Graphs of gathered temperature, pulse, and oxygen saturation data are plotted. Statistical metrics like mean, standard deviation, and confidence intervals are calculated from samples to quantify data reliability. Hypothesis testing using Z-scores further confirms the sensor measurements align with expected values based on human physiology. Performance is evaluated against increasing transmission ranges noting associated time/energy costs. Protocol specifications are analyzed to validate LoRa feasibility for the sensor data rates/volumes. Security attributes of AES encryption embedded in LoRa to ensure privacy and integrity of transmitted healthcare information are outlined. Finally, competing wireless technologies are compared to LoRa in attributes critical for healthcare IoT like data rates, ranges, and power usage, establishing its comparative advantages. In summary, thorough experimental results and performance analyses are presented to demonstrate the functioning of the integrated system and the suitability of the IoT/LoRa approach for health monitoring applications based on evaluation against established medical and technical criteria. Interfacing Biomedical Sensors Interface design with the appropriate selection of biomedical sensors is crucial for any physiological monitoring system. The sensors integrated here - ECG, temperature, pulse oximeter, and pulse rate - measure key vital signs indicative of patient health status. ECG readings reflecting the heart's electrical activity offer a critical diagnosis of cardiac issues. Body temperature serves as an important baseline health metric and fever indicator. Pulse oximetry and heart rate values provide key insights into blood oxygen levels and cardiovascular function respectively. Together, continuous monitoring of these parameters allows for building comprehensive wellness profiles over time while also detecting acute issues or changes triggering the need for medical attention. Their selection was validated through the experiment's physiological scope. To interface such biomedical sensors, appropriate signal conditioning must be applied depending on output specifications to ensure high measurement fidelity. For instance, ECG signals require amplification due to low microvolt levels, while temperatures are typically measured in Celsius/Fahrenheit using thermistors requiring voltage dividers. Considerations like sensor response times, accuracy tolerances, long long-term drifts also impact system design to provide reliable data. Standardized analog/digital conversion techniques then prepare signals for wireless transmission and analysis on monitoring systems. Proper power optimization of sensors aids miniaturization of portable devices as well. Overall, choosing versatile plug-and-play medical sensors according to project needs and exercising care in interfacing circuitry served this research objective of developing a functional physiological monitoring demonstrator to then evaluate IoT connectivity performance. Conclusion The conclusion section summarizes the key aspects and outcomes of the research work. It is reiterated that the paper details the development of a real-time physiological monitoring system using biomedical sensors interfaced with the MySignals platform and LoRa wireless transmission of readings. The successful interfacing and integration of ECG, temperature, pulse, and oxygen sensors to collect vital signs data is highlighted. It is also noted that statistical analyses were conducted to prove system effectiveness in terms of data accuracy and reliability based on established medical standards. In closing, it is asserted that the overall performance of the IoT-based health monitoring platform was deemed effective for continuous patient tracking purposes based on collected measurements corresponding well to normal human baselines. The work therefore proves the feasibility of the proposed approach for healthcare applications. The contributions of each author are also acknowledged. This research was funded by a grant from Universiti Kebangsaan Malaysia, with no competing interests declared by the authors. Finally, around 40 relevant references are provided to substantiate assertions and compare the work against the wider technical literature in this domain. In summary, the conclusion succinctly recaps the goal, outcomes achieved, and significance of the research work in validating the designed IoT healthcare monitoring system based on thorough experimental evaluation and analyses. It reinforces the merit and potential impacts of the solution developed. ### Design and Implementation of an Arduino-Based Solar Tracking System 1.  Introduction (1)   Purpose A conventional solar panel typically converts only 30 to 40 percent of incident solar irradiation into electrical energy. To ensure a consistent output, an automated system capable of continuously adjusting the solar panel's orientation is necessary. Addressing this need, the Sun Tracking System (STS) was developed as a prototype solution. This system operates autonomously, continuously orienting the panel to face the sun as long as it is visible. What sets this system apart is its reliance on the sun as the primary reference point rather than the Earth. Its active sensors continually monitor sunlight intensity and adjust the panel's position to maximize exposure. Given the escalating concerns surrounding energy crises and the effects of global warming, there is a pressing need for solutions utilizing renewable energy resources. Solar energy emerges as a primary contender, offering a clean, abundant, and inexhaustible energy source that mitigates environmental pollution. Photovoltaic (PV) conversion represents one of the most immediate and technologically attractive applications of solar energy. PV cells, functioning akin to classical p-n junction diodes, directly convert sunlight into direct current (DC) electricity through the photovoltaic effect. PV panels, comprising interconnected PV cells, are packaged assemblies designed to maximize power output by maintaining an optimal perpendicular position to solar radiation throughout the day. Achieving this optimal orientation necessitates the integration of a Sun tracker. Compared to fixed panels, mobile PV panels driven by a Sun tracker consistently enhance energy capture efficiency. (2) Scope • Suitable for small and medium-scale power generation applications. • Ideal for power generation in remote areas lacking access to power lines. • Applicable for both domestic and industrial power backup systems. • Solar radiation tracking technology has significantly boosted the efficiency of solar panels in recent times, marking a noteworthy technological advancement. The dual-axis solar tracker holds particular significance due to its superior efficiency and sustainability, outperforming fixed solar panels and single-axis trackers. The tracking system is engineered to capture solar energy from all available directions, maximizing energy yield. (3) Definition A solar tracker is an automated system designed to orient solar panels for optimal sunlight exposure throughout the day. Its main purpose is to maximize solar energy collection by accurately following the sun's path as it moves across the sky during different seasons. Dual-axis trackers, with two rotational axes, typically align both east-west (zenithal) and north-south to precisely track the sun's movement. Solar tracking technology significantly enhances the electricity production of photovoltaic (PV) systems. Various approaches have been explored to achieve high tracking accuracy. Open-loop tracking relies on mathematical models or algorithms to calculate the azimuth and elevation angles of the sun based on date, time, and geographical location. Closed-loop tracking utilizes sensors such as charge-coupled devices (CCDs) or light-dependent resistors (LDRs) to continuously sense the sun's position and adjust the panels accordingly. This paper proposes an empirical research approach to solar tracking, examining both single-axis and dual-axis tracking systems. While single-axis trackers follow the sun's east-west movement, dual-axis trackers also adjust for the sun's elevation angle, offering higher accuracy. Most existing research on dual-axis tracking employs two stepper motors or two DC motors, leading to complex tracking strategies and control platforms. In contrast, this study presents a novel approach using a dual-axis tracker with a single tracking motor, simplifying the control scheme. Both axes of the tracker can move simultaneously within their respective ranges without the need for complex programming or computer interfaces. Conventional electronic circuits are utilized, and a standalone PV inverter drives the motor and provides power, making the system self-contained and autonomous. Experimental results validate the feasibility and advantages of this simplified tracking system, demonstrating its potential for efficient solar energy collection. 2. Overall Description (i)     Product Perspective System Interface The ATmega328p Microcontroller, manufactured by Microchip, is a high-performance 8-bit AVR RISC-based microcontroller known for its versatility and capabilities. It features 32KB of ISP flash memory with read-while-write functionality, allowing for efficient programming and data storage. Additionally, it includes 1024B of EEPROM for non-volatile data storage, 2KB of SRAM for temporary data storage, and 23 general-purpose I/O lines for interfacing with external devices. This microcontroller also boasts 32 general-purpose working registers, three flexible timer/counters with compare modes, and support for internal and external interrupts, enabling precise timing and event handling. It features a serial programmable USART for communication with other devices, as well as a byte-oriented 2-wire serial interface and SPI serial port for additional communication protocols. Furthermore, the ATmega328p integrates a 6-channel 10-bit analog-to-digital converter (expandable to 8 channels in certain package options), allowing for analog sensor data acquisition. It includes a programmable watchdog timer with an internal oscillator for system reliability and offers five software-selectable power saving modes to optimize energy efficiency. Operating within a wide voltage range of 1.8 to 5.5 volts, the ATmega328p Microcontroller provides a versatile and powerful solution for a variety of embedded system applications.     2.  User Interface It serves as the link between different systems within the system itself or between individual components or units of the system. 3. Hardware Interface Solar Panel:- A solar panel, designed to harness the sun's energy for electricity generation or heating, utilizes photovoltaic modules to convert light energy from the sun into electricity via the photovoltaic effect. These modules predominantly employ crystalline silicon cells or thin-film cells. The structural element of a module can be either the front or back layer, serving as the load-bearing component. Protection from mechanical damage and moisture is essential for the cells' longevity.   While most modules are rigid, semi-flexible ones exist, typically based on thin-film cells. Electrically, the cells are interconnected in series to achieve the desired output voltage or in parallel to enhance current capability. External connections often utilize MC4 connectors, ensuring weatherproof connections with the rest of the system. Series connections enable the attainment of desired output voltage, while parallel connections enhance current capacity. Conducting wires carrying current from the modules may incorporate silver, copper, or other non-magnetic conductive metals. Bypass diodes, either integrated within the module or externally applied, mitigate performance loss due to partial shading, thereby optimizing output from illuminated module sections. Arduino UNO Microcontroller :- Arduino is a collaborative platform encompassing both hardware and software components, aimed at facilitating the creation of interactive objects and digital devices that can detect and manipulate physical surroundings. It operates under an open-source model, allowing for the free distribution of its hardware and software products under licenses such as the GNU Lesser General Public License (LGPL) or the GNU General Public License (GPL). This enables individuals and entities to manufacture Arduino boards and distribute software without restrictions. Arduino boards are available in preassembled form or as customizable do-it-yourself kits. They utilize various microprocessors and controllers and are equipped with sets of digital and analog input/output (I/O) pins that can interface with expansion boards (shields) and other circuits. Additionally, the boards feature serial communication interfaces, including Universal Serial Bus (USB) on select models, facilitating program loading from personal computers. Programming of Arduino microcontrollers is typically done using a subset of features from languages like C and C++. The Arduino project offers an integrated development environment (IDE) based on the Processing language project, in addition to support for traditional compiler toolchains. One of the commonly used Arduino boards is the Arduino/Genuino Uno, which is based on the ATmega328P microcontroller. It boasts 14 digital input/output pins (with 6 capable of PWM output), 6 analog inputs, a 16 MHz quartz crystal, USB connectivity, a power jack, an ICSP header, and a reset button. The Uno contains all necessary components to support the microcontroller, making it easy to get started by connecting it to a computer via USB or powering it with an AC-to-DC adapter or battery. Its user-friendly design encourages experimentation, with the ability to replace the microcontroller chip at minimal cost in case of errors during tinkering. LDRs :- A Light Dependent Resistor (LDR), also known as a photoresistor, is a device whose resistance changes in response to incident electromagnetic radiation, making it sensitive to light. It is alternatively referred to as a photoconductor, photoconductive cell, or photocell, and is typically fabricated from semiconductor materials with high resistance properties. The photoresistor consists of a semiconductor with high resistance characteristics. In darkness, its resistance can be as high as several megohms (MΩ), while in the presence of light, its resistance can drop to just a few hundred ohms. When light strikes the photoresistor at a certain frequency, photons absorbed by the semiconductor impart sufficient energy to bound electrons, allowing them to move into the conduction band. This results in the generation of free electrons (and their corresponding holes), which conduct electricity and consequently reduce resistance. The resistance range and sensitivity of a photoresistor can vary significantly between different devices. Additionally, individual photoresistors may exhibit diverse responses to photons within specific wavelength ranges. Servo Motors:- A servomotor represents a versatile rotary or linear actuator capable of precise control over angular or linear position, velocity, and acceleration. It comprises a suitable motor linked to a position feedback sensor, along with a sophisticated controller, often in the form of a dedicated module tailored for servomotor operation. While servomotors do not constitute a distinct motor category, the term "servomotor" commonly denotes a motor suitable for integration into closed-loop control systems. Functioning as a closed-loop servomechanism, a servomotor utilizes position feedback to govern its motion and final position. Its control input comprises a signal, analog or digital, representing the commanded position for the output shaft. Paired with an encoder, the motor provides position and speed feedback. In a basic setup, only the position is monitored. The discrepancy between the measured and commanded positions generates an error signal, prompting the motor to rotate in the required direction until alignment is achieved. As convergence nears, the error signal diminishes, leading to motor cessation. Simple servomotors employ position-only sensing via a potentiometer and "bang-bang" motor control, wherein the motor operates at full speed or halts. Although primarily utilized in radio-controlled models due to their simplicity and affordability, this type of servomotor finds limited industrial motion control applications. Advanced servomotors employ optical rotary encoders for speed measurement and a variable-speed drive for motor control. Incorporating these enhancements, often coupled with a PID control algorithm, enables quicker and more precise attainment of the commanded position with minimal overshooting. 4.  Software Interface Arduino IDE:- Arduino programming can be done in any programming language that can be compiled into binary machine code for the target processor. Atmel offers their own development environments, such as AVR Studio and the newer Atmel Studio, tailored for their microcontrollers. On the other hand, the Arduino project provides its own integrated development environment (IDE) called the Arduino IDE. This IDE is a cross-platform application developed in Java, originally stemming from the IDEs used for Processing and Wiring languages. The Arduino IDE features a comprehensive code editor with functionalities like text manipulation (cutting, pasting), search and replace, automatic indentation, brace matching, and syntax highlighting. It simplifies the compilation and uploading of programs to Arduino boards through convenient one-click mechanisms. Additionally, it includes a message area, a text console, a toolbar with common function buttons, and a structured hierarchy of operation menus. Programs written using the Arduino IDE are termed "sketches" and are saved as text files with the extension ".ino" on the development computer. Previously, versions prior to 1.0 of the Arduino Software (IDE) saved sketches with the ".pde" extension. The Arduino IDE supports the C and C++ languages, utilizing specific rules for code structuring. It also incorporates a software library from the Wiring project, offering numerous common input and output procedures. User-written code typically consists of two fundamental functions: one for initiating the sketch and another for the main program loop. These functions are then compiled and linked with a program stub "main()" into an executable cyclic executive program using the GNU toolchain, which is part of the IDE distribution. Finally, the Arduino IDE employs "avrdude" to convert the executable code into a hexadecimal-encoded text file, which is then loaded into the Arduino board by a loader program embedded within the board's firmware. Follow this link for complete project: Design and Implementation of an Arduino-Based Solar Tracking System ### How to Make PCBA for High/Low Voltage Protection Sometimes voltage fluctuations occur in the main electricity supply in our homes offices etc. These fluctuations can occur due to the interruption of heavy load, lightning and switching impulses. This can lead to the electronics part damage and sometimes causes major accidents. Voltage fluctuation or irregularities are also major issues in industrial appliances and often can damage sensitive electronic equipment. This blog will tell you how to design the high/low voltage protection until its PCBA manufacturing. Voltage Protection Circuit First, understand the voltage protection circuit basics and the required components. To save electronic appliances from such hazards, we will make a system that automatically turns the appliances by opening the circuit. The system will also alert on the 16x2 LCD. The microcontroller that will be used is Arduino. With an onboard programmer, it is easy to program it rather than other micro-controllers. There is no need for using an external programmer or USB-to-serial converter FTDI etc. Voltage Sensor ZMPT101B The main component of the system is the sensor ZMPT101B. It is a voltage sensor. The pinout diagram of the sensor is shown below.   Voltage Sensor ZMPT101B Voltage Sensors ZMPT101B ZMPT101B is a high-precision voltage transformer. It can be used to monitor AC mains voltage up to 1000 volts. This transformer holds up to 4kV per breakdown voltage, the ratio of turns is 1: 1, but this is a current transformer of 2mA: 2mA. We feed it a current and remove the current. The input current is simply set by the resistor in series R1, and we use a sampling resistor R2 in parallel to get the output voltage. The internal circuit of the ZMPT101B sensor is shown below. Using ZMPT101B with Arduino Connect the Vcc pin of the sensor to the 5v of Arduino, connect the GND pins to the GND pin on Arduino, and connect the signal pin of the sensor to analog pin A0 of Arduino as shown in the diagram. Connect the Arduino to the computer via a USB-to-serial cable. Select the port on which Arduino is attached and board as Arduino Nano. Use the following code. Compile and upload it. void setup() { Serial.begin(9600); } void loop() { Serial.println(analogRead(A0)); delay(100); } Open the serial monitor, the value of the measured voltage will be shown on the serial monitor. This was a basic example of how to use the sensor ZMPT101B. Here is a sample code for interfacing the  ZMPT101B Voltage Sensor module with  Arduino. int adc_max = 0;       // Variable to store the maximum sensor value int adc_min = 1023;    // Variable to store the minimum sensor value long tiempo_init;      // Variable to store the initial time void setup() { Serial.begin(115200);   // Initialize the serial communication tiempo_init = millis(); // Get the current time in milliseconds } void loop() { if ((millis() - tiempo_init) > 500) { // Check if 500 milliseconds have passed adc_max = 0;         // Reset the maximum sensor value adc_min = 1023;      // Reset the minimum sensor value tiempo_init = millis(); // Update the initial time } int sensor value = analogRead(A0); // Read the analog input from pin A0 if (sensor value > adc_max) { adc_max = sensor value; // Update the maximum value if a new maximum is found } else if (sensor value < adc_min) { adc_min = sensor value; // Update the minimum value if a new minimum is found } // Print the maximum and minimum values to the serial monitor Serial.print("adc_max: "); Serial.print(adc_max); Serial.print("   adc_min: "); Serial.println(adc_min); delay(1); // Small delay for stability between each iteration } It initializes variables to store the maximum and minimum sensor values and records the initial time. In the loop, it reads an analog sensor and updates the maximum and minimum values if necessary. If 500 milliseconds have passed since the last reset, it resets the maximum and minimum values. It then prints the maximum and minimum values to the serial monitor with appropriate labels and introduces a small delay for stability. For Calibrating the value use the potentiometer on the sensor. Working for Circuit: The circuit schematic has been drawn in KiCAD 8.0. The main blocks are shown separately. Connect the Arduino to the 16x2 LCD as shown. Connect the 16×2 LCD Pin 4, 6, 11, 12, 13, and 14 to Arduino D3, D4, D5, D6, D7, and D8 Pin. Use a 10K Potentiometer at Pin 3 of LCD to adjust LCD Contrast. Supply 5V to LCD Pin 2 & 15. Connect LCD Pin 1, 5 & 16 to GND of Arduino. For relay, the transistor BC547 has been used as a switch. A resistor of 330 ohm is connected on the base of the transistor the transistor collector is connected to the relay. Multiple loads can be connected across the output of Relay. The load may be the AC Bulbs or any home appliances operating at 220V. As discussed above in the connection of ZMPT101B with Arduino, The ZMPT101B is an analog sensor. Therefore connect the analog pin of the sensor to the Arduino A0 Pin. You can power the ZMPT101B, Relay Module using the 5V Pin of Arduino. The ZMPT101B accepts the input AC Voltage of 220V or over in our case. To test the Arduino Over & Under AC Voltage Monitoring Protection Circuit, the AC Fan Dimmer is the best option. Programming Arduino: Use the following code on the circuit as drawn in the schematic. #include #include const int rs = 3, en = 4, d4 = 5, d5 = 6, d6 =7, d7 = 8; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); float testFrequency = 50; int Sensor = 0; int relay = 10; int yellow = 12; int green = 11; float intercept = 0.7; float slope = 0.04; float current_Volts; unsigned long printPeriod = 1000; unsigned long previousMillis = 0; void setup() { lcd.begin(16, 2); pinMode(relay, OUTPUT); pinMode(yellow, OUTPUT); pinMode(green, OUTPUT); lcd.print("Voltage:"); delay(1000); } void loop() { RunningStatistics inputStats; while ( true ) { Sensor = analogRead(A0); inputStats.input(Sensor); if ((unsigned long)(millis() - previousMillis) >= printPeriod) { previousMillis = millis(); current_Volts = intercept + slope * inputStats.sigma(); current_Volts = current_Volts * (40.3231); lcd.setCursor(9, 0); lcd.print(current_Volts); lcd.print("V"); } if ( (current_Volts > 0)  &&  (current_Volts < 190) ) { lcd.setCursor(0, 1); lcd.print("Under Voltage"); digitalWrite(relay, LOW); digitalWrite(yellow, LOW); digitalWrite(green, HIGH); } if ( (current_Volts >= 190)  &&  (current_Volts <= 220) ) { lcd.setCursor(0, 1); lcd.print("Normal Voltage"); digitalWrite(relay, HIGH); digitalWrite(yellow, LOW); digitalWrite(green, LOW); } if ( current_Volts > 220 ) { lcd.setCursor(0, 1); lcd.print("Over Voltage"); digitalWrite(relay, LOW); digitalWrite(yellow, HIGH); digitalWrite(green, LOW); } } } Code Explanation: LCD Setup: The LCD object is initialized with pin connections for its operation. Setup Function: In the setup function, the LCD is initialized with the specified dimensions, and pins for relay and LEDs are configured as outputs. The initial message "Voltage:" is printed on the LCD. Loop Function: The loop function continuously operates: Sensor Reading: Analog sensor readings are continuously collected. Voltage Calculation: Statistics for sensor readings are collected and used to calculate the current voltage, which is then scaled. Display: The current-voltage reading is printed on the LCD, along with the unit "V". Voltage Analysis: Depending on the voltage level, different messages are displayed on the LCD, and corresponding actions are taken: If the voltage is under a threshold, an "Under Voltage" message is displayed, and the relay is turned off while the green LED is turned on. If the voltage is within a normal range, a "Normal Voltage" message is displayed, and the relay is turned on while LEDs are turned off. If voltage exceeds a threshold, an "Over Voltage" message is displayed, and the relay is turned off while the yellow LED is turned on. The PCB for the circuit is 2 layers. Following are the images of the PCB layout and the fabrication JLC PCB Gerber viewer.   Software Used: arduino figma fritzing kicad ### Empowering Innovation: An Arduino Seminar Arduino interface boards serve as enchanting tools for individuals with a flair for innovation. They empower engineers, artists, designers, hobbyists, and tech enthusiasts to transform their concepts into reality. These accessible boards provide an economical gateway into the realm of electronics. Envision crafting interactive artifacts, constructing practical applications, and pioneering creations previously unimagined – all facilitated by Arduino.   The enchantment of Arduino lies in its capability to bridge the physical and digital worlds seamlessly. Projects constructed with Arduino can be orchestrated by a computer, unveiling a myriad of possibilities. Picture immersive art installations, responsive robots, or even sophisticated home automation systems – the potential is boundless. 1.1 WHAT IS ARDUINO? Arduino represents an open-source electronics prototyping platform featuring adaptable hardware and user-friendly software. Tailored for artists, designers, hobbyists, and anyone intrigued by interactive creations, it facilitates the development of objects and environments. Functioning as an open-source physical computing platform centered around a microcontroller board, Arduino offers a versatile development environment for software creation. In essence, Arduino comprises a compact microcontroller board equipped with a USB interface for computer connectivity and multiple connection points for external electronics integration. These connections accommodate various components such as motors, relays, light sensors, laser diodes, speakers, and microphones. Power can be supplied either via USB connection or a 9V battery. Arduino devices can be controlled or programmed via computer, then operated independently after disconnecting from the computer. This device is readily available for purchase through online auction sites or search engines. Because Arduino operates on open-source hardware designs, individuals can create their own variations of the Arduino and distribute them, resulting in a competitive market for these boards. While an official Arduino typically costs around $30, clones are often priced below $20. The name "Arduino" is exclusively reserved by the original creators. However, clone versions of Arduino often incorporate the suffix "duino" in their names, such as Freeduino or DFRduino. Additionally, the programming software for Arduino is user-friendly and accessible for Windows, Mac, and LINUX operating systems, all at no charge. 1.1.1 Microcontroller A microcontroller can be defined as a compact computer embedded within a small circuit board. Specifically, it functions as a single chip capable of executing various computations and tasks, as well as transmitting and receiving signals from other devices via its available pins. The specific functions it performs and its communication with the external world are dictated by the instructions provided to it through programming. However, a microcontroller alone is limited in its capabilities; it requires several external inputs to function effectively, such as power and a stable clock signal. Additionally, programming the microcontroller necessitates an external circuit. Hence, microcontrollers are typically utilized alongside circuits that provide these essential components; this combination is referred to as a microcontroller board. The Arduino Uno, for instance, is one such microcontroller board. At its core lies the microcontroller chip known as Atmega328. Arduino distinguishes itself from other microcontroller boards primarily in terms of the reliability of its circuit hardware and the ease of programming and utilization it offers. 1.1.2 Open-source hardware Open-source hardware aligns closely with the principles and methodology of free and open-source software. The creators of Arduino envisioned a platform where individuals could examine the hardware, comprehend its functionality, make modifications, and openly distribute those modifications. To facilitate this ethos, they openly share all original design files, created using Eagle CAD software, for Arduino hardware. These files are governed by a Creative Commons Attribution Share-Alike license, permitting both personal and commercial derivative works, provided that proper attribution is given to Arduino, and any subsequent designs are released under the same license. Similarly, the Arduino software is open-source as well. The source code for the Java environment is made available under the GNU General Public License (GPL), while the C/C++ microcontroller libraries adhere to the GNU Lesser General Public License (LGPL). 1.2 HISTORY OF ARDUINO While instructing a physical computing course at the Interaction Design Institute Ivrea in 2005, Massimo Banzi encountered resistance from students who were hesitant to invest 76 euros in the BASIC Stamp microcontrollers commonly utilized in such classes. In response, Banzi and his colleagues sought out alternatives, ultimately adopting the wiring platform developed by one of Banzi's students. In his own words, Banzi expressed their aim to simplify, reduce costs, and enhance usability, leading them to re-implement the entire platform as an open-source project. Upon creating a prototype, a student developed the software necessary for running wiring programs on the new platform. Recognizing its potential, visiting professor Casey Reas suggested broader applications beyond design schools for the product. Subsequently, the prototype underwent redesign for mass production, resulting in a test run of 200 boards. Demand surged from other design schools and students seeking Arduinos, marking the inception of the Arduino project, with Massimo Banzi and David Cuartielles as its founders. The term "ARDUINO" derives from the Italian word meaning "STRONG FRIEND," with its English equivalent being "Hardwin." By May 2011, over 300,000 Arduino units had been distributed worldwide. In terms of design goals, the project aimed to: - Be compatible with Mac systems, as they were prevalent among design students. - Feature USB connectivity, given the absence of serial ports in MacBook computers. - Possess an aesthetically pleasing design. - Maintain affordability (approximately 20 euros, equivalent to the cost of a pizza outing in Europe). - Offer superior performance compared to BASIC Stamp microcontrollers. - Be user-serviceable and straightforward to assemble or repair, even for individuals lacking formal electronics training. 1.2.2 Business Models Given that the entire project operates under an open-source model, individuals have the freedom to construct and market Arduino-compatible devices. Consequently, the financial success of the Arduino project heavily hinges on its branding. While other ventures produce compatible and more affordable boards, consumers exhibit loyalty towards Arduino-branded boards due to their perceived quality and associated image. 1.2.2.1 Sales Figures Year | Units Sold 2005 | 200 2006 | 10,000 2010 | 120,000 2011 | 300,000 1.2.3 Competition Prior to Arduino's emergence, the dominant players in the design and hobbyist market segment were the PIC microcontroller family from Microchip and the BASIC Stamp from Parallax. Following Arduino's introduction, various major companies, such as Texas Instruments and even Microsoft, have endeavored to penetrate the hobbyist market. However, the open-source nature of Arduino and the vastness of its community pose significant barriers for new platforms seeking to establish themselves. Figure 2 GOOGLE trends comparing ARDUINO with its biggest competitors Since the project targets students and hobbyists who may lack formal electronics expertise, numerous comprehensive online guides cater to a wide spectrum of abilities, ranging from basic tasks like illuminating a light to more intricate projects like crafting a laser harp. The official forum boasts nearly 60,000 registered users and serves as a vibrant hub for assisting users with their endeavors while actively contributing to the development of new libraries to expand Arduino's functionality. The ethos of open-source collaboration is deeply ingrained, with the majority of users freely sharing the code for their projects. 1.3 Physical Computing Physical Computing represents an instructional approach that explores human-computer interaction, commencing with an examination of how humans convey themselves physically. Follow this link for complete project: Empowering Innovation: An Arduino Seminar ### IoT Based Smart Mine Safety System Using Arduino Significance Addresses critical safety concerns in mining which is inherently hazardous work Leverages IoT and Arduino to develop a comprehensive safety monitoring system Has potential to significantly reduce accidents and improve standards if implemented widely Methodology Fig. 1 Block Diagram of Mining Unit Utilizes various sensors to monitor environmental parameters like temperature, gas levels etc Interfaces sensors with Arduino microcontrollers for centralized data collection and processing Transmits processed data to cloud/server using IoT protocols like WiFi, GSM for remote access Likely includes development of interfaces for real-time visualization and emergency alerts Fig. 2 Block Diagram of Miners unit Implementation Requires programming Arduinos to interface with and read data from deployed sensors Design of circuitry and enclosures to withstand harsh mining conditions Firmware development for Arduinos and server-side software for data storage, analysis, interfaces Mobile/web apps may be created for remote access by miners and supervisors Potential Impact Facilitates proactive safety management through real-time monitoring of conditions and hazards Can reduce accidents, injuries, fatalities through early warnings of issues Leads to improved reputation and cost savings from less downtime and regulatory penalties Provides data driven insights for better resource planning, maintenance and emergency response Conclusion Represents an innovative application of technologies for pressing need of mine safety Has potential to transform practices but requires further refinement and adoption Overall a commendable effort towards developing a comprehensive networked safety solution Continued R&D in this area is warranted to fully realize benefits across mining operations. ### Arduino Radar for Object Detection Introduction Radar technology is commonly used for applications like weather monitoring, air traffic control, and object detection. However, traditional radar systems can be complex and expensive to implement. This project explores an accessible alternative approach using an Arduino microcontroller and ultrasonic sensors for basic object detection capabilities. Components and Materials Arduino Uno board HC-SR04 ultrasonic sensor module Breadboard Male to male jumper wires 9V battery & battery clip System Design The ultrasonic sensor is connected to pin triggers on the Arduino. It emits an 8 cycle sonic burst from the trigger pin and detects the echo return on the echo pin. We use the pulse In function to measure the echo duration. Distance is calculated using the speed of sound. Software Development The Arduino code triggers the ultrasonic sensor, measures the echo duration, and uses it to calculate distance to the nearest object. It prints the distance value to the serial monitor for observation. Assembly and Testing We assemble the circuit on a breadboard per the wiring diagram. The power, ground, trigger and echo pins are correctly connected. Upon uploading the code, the ultrasonic sensor generates readings which are visible on the serial monitor, demonstrating it is functioning properly. Results and Discussion The system detects objects from 2cm to 450cm away. Accuracy depends on surface reflectivity. Variations can occur depending on environmental factors like temperature and humidity. Considerations and Enhancements To improve range and detection area, we could experiment with different sensor models or rotate the sensor with a servo motor. Integrating an LCD display or LED indicators could visualize distance data. Adding infrared or image sensors could enable more complex object recognition capabilities. Conclusion This project presented a low-cost alternative to traditional radar technology using readily available Arduino and ultrasonic components. The basic object detection capabilities achieved provide a platform to explore further applications in fields like robotics. With enhancements, more sophisticated detection and sensing functions could be realized on top of this introductory system design and programming. Component Selection Evaluate different ultrasonic sensor modules with varying ranges/accuracy Consider an Arduino with more I/O pins for additional sensors Distance Measurements Evaluate measurement variability at different distances Determine optimal sampling frequency for desired range/resolution Directional Detection Interface sensor with servo motor and code for full 360° rotation Scan and build a 'picture' of surrounding objects Data Visualization Display distance readings on LCD or plot a chart on computer Use LED bar graph or individual LEDs to indicate proximity Advanced Object Recognition Add passive infrared sensor for motion detection Interface camera and apply image processing for visual recognition Explore machine learning to classify objects beyond distance Enclosure Design Prototype 3D printed enclosure for integrated standalone system Consider mobility with addition of wheels/motor for robotics uses Applicability Discuss potential real world applications like smart factories, warehouses Assess feasibility for consumer products like automated vacuums, toys Future Work Develop Android/IoT connectivity for monitoring over WiFi/Bluetooth Integrate distance and image data for advanced obstacle avoidance Fabricate PCB for compact commercial-grade sensor module design So in summary, there are many avenues to explore enhancing capabilities, optimizing performance, expanding applicability and paving the way for more advanced object sensing projects. Multi-Sensor Integration Combine ultrasonic sensor with additional sensors like passive infrared, microwave or even a small camera. This allows for things like motion detection, material differentiation and visual identification. Synchronize multiple ultrasonic sensors pointing in different directions to build a more complete spatial picture of the environment. Distance Measurement Precision Experiment with different trigger and echo ping timing intervals to improve distance measurement accuracy at very close or extremely long ranges. Evaluate noise reduction techniques like averaging multiple readings to reduce fluctuations. Directional Detection Algorithms Develop algorithms to interpret sensor scan data and build a live multi-dimensional map of object positions around the radar unit. Track moving objects by comparing maps over time. Data Visualization: Stream sensor readings over WiFi to a mobile app or web interface for remote monitoring. Implement 3D object rendering based on scan data maps for an intuitive spatial view. Machine Learning Integration Gather labeled dataset of common objects and distances during operation. Train a ML model to identify and classify objects based on their sensor signatures. Advanced Applications Integrate radar with servos/motors to build an autonomous inspection drone or warehouse inventory robot. Add complex obstacle avoidance and path planning algorithms for mobility. Commercialization Pathways Consider patenting novel sensing array or algorithm designs. Partner with electronics manufacturers for hardware and software customization for industrial/commercial products. So in summary, there is a huge potential to evolve this introductory Arduino radar into an extremely sophisticated sensing and perception system through extensive experimentation and new technological integrations. Distributed Sensor Networks Connect multiple radar units together using communication protocols like LoRa WAN to create a distributed sensing grid for large indoor/outdoor areas. Synchronize data collection and processing for integrated spatial awareness over a wide region. Environmental Adaptation Add temperature, humidity and atmospheric pressure sensors to compensate measurements for changing conditions. Experiment with waterproof enclosures and materials for reliable outdoor/harsh environment use. Sensor Fusion Combine radar data with other sensors like GPS, IMU, vision for multi-modal perception. Integrate with drones, robots etc for autonomous navigation relying on merged inputs. Algorithm Optimization Develop advanced signal processing techniques like FFT, wavelet analysis etc to refine distance readings from ultrasonic echoes. Implement particle filters, Kalman filters for optimizing object tracking over time. Cybersecurity Features Add authentication and encryption to the wireless communication protocols. Implement mechanisms for detecting interference/spoofing of sensing data for safety critical applications. Product Roadmap Gradually enhance features and build product portfolio - entry level kits, industrial grade modules, integration services etc. Consider crowd-funding campaigns and piloting with early customers for iterative feedback. So in summary, there are unlimited possibilities to upgrade this platform into robust, scalable and highly intelligent perception systems supporting a wide variety of industrial and research applications through continuous innovation. Follow this link for complete project: Arduino-Based Object Detection System ### Arduino Microcontroller Guide: Getting Started with DIY Electronics 1        Introduction 1.1        Overview The Arduino microcontroller, a user-friendly yet robust single-board computer, has garnered significant popularity in both hobbyist and professional circles. Being open-source, Arduino boasts affordable hardware and freely available development software. This guide is tailored for students enrolled in ME 2011 or anyone encountering Arduino for the first time. Advanced users can explore various online resources. Originating in Italy, the Arduino project aimed to produce cost-effective hardware for interaction design. Further details can be found on the Wikipedia page dedicated to Arduino, while the official Arduino homepage is located at http://www.arduino.cc/. Arduino hardware comes in different variants, with Sparkfun (www.sparkfun.com) serving as a reputable source in the United States. Focused primarily on the Arduino Uno board (Sparkfun DEV-09950, priced at $29.95), which is ideal for students and educators, this guide facilitates programming and the creation of interface circuits for reading switches, sensors, and controlling motors and lights with minimal effort. Many illustrations in this guide are sourced from Arduino's documentation, the go-to resource for additional information. The Arduino section on the ME 2011 website, https://sites.google.com/a/umn.edu/me2011/, delves deeper into interfacing Arduino with the physical world. Here is a visual representation of the Arduino board. The Duemilanove board showcases an Atmel ATmega328 microcontroller functioning at 5 V, equipped with 2 Kb of RAM, 32 Kb of flash memory for program storage, and 1 Kb of EEPROM for parameter storage. Operating at a clock speed of 16 MHz, it can execute approximately 300,000 lines of C source code per second. Offering 14 digital I/O pins and 6 analog input pins, the board also includes a USB connector for communication with the host computer and a DC power jack for connecting an external power source ranging from 6 to 20 V, such as a 9 V battery, when running programs independently from the host computer. It provides headers for interfacing with the I/O pins using either 22 g solid wire or header connectors. For more detailed hardware specifications, refer to http://arduino.cc/en/Main/ArduinoBoardUno. The Arduino programming language is a simplified variant of C/C++, making it familiar to those versed in C. However, even without prior knowledge of C, only a handful of commands are necessary to perform useful functions. An essential feature of Arduino is its capability to develop a control program on the host PC, transfer it to the Arduino, and execute it automatically. Disconnecting the USB cable from the PC doesn't halt the program's execution, as it resumes from the beginning upon pressing the reset button. Moreover, even after disconnecting the battery and storing the Arduino for an extended period, the last programmed task resumes upon reconnection of the battery. This operational independence from the host PC allows for standalone functionality once the program is developed and debugged. To set up a functional system, you'll need: 1. Arduino Duemilanove board 2. USB programming cable (A to B) 3. 9V battery or an external power supply for standalone operation 4. Solderless breadboard for external circuits and 22 g solid wire for connections 5. Host PC running the Arduino development environment, with versions compatible with Windows, Mac, and Linux. To install the necessary software, follow the instructions provided in the Getting Started section of the Arduino website (http://arduino.cc/en/Guide/HomePage). Completing the setup successfully is indicated by observing the pin 13 LED blinking, confirming that all software and drivers are correctly installed, and you can begin exploring with your custom programs. For standalone operation, the board can be powered by a battery instead of the USB connection. While the external power source can vary between 6 and 24 V, a standard 9 V battery is commonly used for convenience. Instead of directly connecting the battery leads to the Vin and Gnd connections on the board, it's recommended to solder the battery snap leads to a DC power plug and connect it to the power jack on the board for a more secure connection. A suitable plug option is part number 28760 from www.jameco.com. Here's what the setup looks like. Unplug your Arduino from the computer. Attach a 9 V battery to the Arduino's power jack using the battery snap adapter. Verify that the blinking program executes. This demonstrates the ability to power the Arduino via a battery and confirms that the downloaded program operates independently without requiring a connection to the host PC. Moving forward, reconnect your Arduino to the computer using the USB cable. You can omit the battery for now. The green PWR LED will illuminate, indicating power. If a program was previously uploaded to the Arduino, it will commence execution. Launch the Arduino development environment. In Arduino terminology, programs are referred to as "sketches," although we'll simply call them programs here. Once the editing window appears, input the following program, ensuring attention to the placement of semicolons at the end of command lines. Press the Upload button or use Ctrl-U to compile your program and upload it to the Arduino board. Then, click on the Serial Monitor button. If everything proceeded smoothly, the monitor window will display your message, resembling something similar to this. Press the reset button on the Arduino a few times and observe the results. 1.6 Troubleshooting If a syntax error occurs in the program due to typing mistakes, an error message will appear at the bottom of the program window. Typically, examining the error message will reveal the issue. If problems persist, consider the following steps: - Run the Arduino program again. - Ensure that the USB cable is securely connected at both ends. - Reboot your PC, as sometimes the serial port may become unresponsive. - If you encounter a "Serial port... already in use" error during uploading: - Seek assistance from a friend. 1.7 Solderless Breadboards A solderless breadboard is an indispensable tool for quickly prototyping electronic circuits. Components and wires are inserted into the breadboard's holes, with rows and columns of holes internally connected to facilitate easy connections. Wires extend from the breadboard to the Arduino board's I/O pins. Use short lengths of 22 g solid wire with approximately 0.25" insulation stripped at each end for making connections. Below is a photograph of a breadboard illustrating the internal connections. The pairs of horizontal runs at the top and bottom are convenient for supplying power and ground. Conventionally, the red-colored run denotes +5 V, while the blue-colored run represents Gnd. These power runs are sometimes referred to as "power busses." To ensure the Arduino board and breadboard remain connected, you can affix them to a piece of foam core, cardboard, or wood using double-stick foam tape or alternative methods. 2. Flashing an LED LEDs (light emitting diodes) serve as practical tools for exploring the capabilities of Arduino. For this activity, gather an LED, a 330 ohm resistor, and short lengths of 22 or 24 gauge wire. The diagram to the right depicts the structure of an LED and its electronic schematic symbol. Using 22 gauge solid wire, establish connections by linking the 5V power pin on the Arduino to the bottom red power bus on the breadboard and connecting the Gnd pin on the Arduino to the bottom blue power bus on the breadboard. Position the LED with its notched or flat side (located on the rim surrounding the LED base) facing the Gnd bus, and connect the opposite side to an available hole in the main area of the breadboard. Position the resistor so that one end aligns with the same column as the LED, while the other end occupies a vacant column. From this column, attach a wire to digital pin 2 on the Arduino board. Your setup will resemble the following illustration: To verify the LED's functionality, briefly detach the wire from pin 2 on the Arduino board and touch it to the 5V power bus. The LED should illuminate. If not, attempt to adjust the orientation of the LED. Once confirmed, reconnect the wire to pin 2. In an LED, current flows from the anode (+) to the cathode (-), indicated by the notch. The schematic representation of the circuit you've assembled is depicted in the diagram to the right. To verify the functionality of the LED, temporarily detach the wire connected to pin 2 on the Arduino board and touch it to the 5V power bus. The LED should illuminate. If it doesn't, consider adjusting the orientation of the LED. Once tested, reconnect the wire to pin 2. In an LED, current flows from the anode (+) to the cathode (-), which is indicated by the notch. The circuit you've assembled is illustrated in schematic form in the figure to the right. Below is the Arduino program to create and execute: ```cpp void setup() { // Initialize pin 2 as an output pinMode(2, OUTPUT); // Set pin 2 to HIGH (turn on LED), wait for one second, then set it to LOW (turn off LED) digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); } void loop() { // Empty loop as we're not using continuous operations } ``` Did the LED illuminate for one second? Press the Arduino reset button to rerun the program. Now, attempt the following program, which flashes the LED at a frequency of 1.0 Hz. Any text after "//" on a line is considered a comment, as well as the text enclosed between "/*" and "*/" at the top. It's beneficial to include comments in a program for clarity and documentation. The pinMode command configures the LED pin as an output. The initial digitalWrite command instructs the Arduino to set pin 2 to HIGH, corresponding to +5 volts. This action allows current to flow from the pin, through the resistor, illuminating the LED, and finally reaching the ground. Subsequently, the delay(500) command pauses the execution for 500 milliseconds. The subsequent digitalWrite command then sets pin 2 to LOW, or 0 V, halting the current flow and thereby extinguishing the LED. The code enclosed within the loop() function's braces repeats indefinitely, resulting in the LED blinking. This exercise demonstrates how the Arduino can manipulate external devices. With suitable interface circuitry, the same code can control the activation and deactivation of motors, relays, solenoids, electromagnets, pneumatic valves, or any other devices operating on an on-off principle. 3. Reading a Switch The LED demonstration illustrates how the Arduino can interact with the external environment. Many applications necessitate the ability to read the status of sensors, such as switches. The diagram on the right depicts a photograph of a pushbutton switch alongside its schematic symbol. It's important to note that the symbol represents a switch with normally open contacts, which are closed when the button is pressed. If you possess a switch, utilize the continuity function of a digital multimeter (DMM) to discern when the leads are open and when they are connected as the button is depressed. For this exercise, the Arduino will monitor the state of a normally open push button switch and present the findings on the PC using the serial.println() command. You'll require a switch, a 10 kohm resistor, and several pieces of 22 gauge hookup wire. In the absence of a switch, you can substitute two wires and manually connect their free ends to mimic a switch closure. The diagram below showcases the schematic representation of the circuit on the left and a practical implementation on the right. Here's an Arduino program for you to create and execute: ```cpp void setup() { Serial.begin(9600); } void loop() { Serial.println(digitalRead(3)); delay(250); } ``` Open the Serial Monitor window. When the switch is open, you should observe a sequence of 1's on the screen. Once the switch is closed, the 1's will transition to 0's. On the hardware side, when the switch is open, no current passes through the resistor. When there's no current flow through a resistor, there's no voltage drop across it, meaning the voltage remains the same on each side. In your setup, when the switch is open, pin 3 registers 5 volts, interpreted by the computer as a state of 1. Conversely, when the switch is closed, pin 3 connects directly to ground at 0 volts, yielding a state of 0 as detected by the computer. Now, try the following program, illustrating how you can prompt the computer to wait for a sensor to change state: ```cpp void setup() { Serial.begin(9600); } void loop() { while (digitalRead(3) == HIGH) ; Serial.println("Somebody closed the switch!"); while (digitalRead(3) == LOW) ; Serial.println("The switch is now open!"); } ``` Observe the activity in the Serial Monitor window as you press and release the switch. 4. Controlling a Small DC Motor The Arduino can manage a small DC motor via a transistor switch. You'll require a TIP120 transistor, a 1K resistor, a 9V battery with a battery snap, and a motor. Below is an illustrative diagram detailing how to connect the components. These connections can be either soldered or established using a solderless breadboard. Pin 2 can function as any digital I/O pin on your Arduino board. Connect the negative terminal of the battery to the emitter (E pin) of the transistor, and also link the emitter of the transistor to the Gnd on the Arduino board. To verify the functionality, use a jumper wire to bridge the collector and emitter pins of the transistor. The motor should activate. Then, detach the 1K resistor from pin 2 and connect it to +5V. The motor should activate again. Reconnect the resistor to pin 2 and execute the following test program: ```cpp void setup() { pinMode(2, OUTPUT); digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); } void loop() { // Empty loop as we're not using continuous operations } ``` The motor should operate for 1 second. 5. Arduino Hardware The strength of Arduino lies not in its coding capabilities, but rather in its capacity to interface with the external environment via its input-output (I/O) pins. With 14 digital I/O pins labeled from 0 to 13, Arduino can control motors, lights, and detect the state of switches. Each digital pin can either supply or draw about 40 mA of current, typically sufficient for most devices. However, more complex devices require interface circuits to manage them. For instance, running a motor directly from an Arduino pin is not feasible; instead, you need the pin to drive an interface circuit, which then operates the motor. A later section of this document illustrates how to interface with a small motor. To interact with the external world, the program configures digital pins to either a high or low state using C code instructions, corresponding to +5 V or 0 V at the pin. These pins are connected to external interface electronics, which are further linked to the devices being controlled. The sequential process is depicted in the accompanying figure. Follow this link for complete project: Arduino Microcontroller Guide: Getting Started with DIY Electronics ### X-CUBE-AZURE – MICROSOFT AZURE SOFTWARE EXPANSION FOR STM32CUBE The X-CUBE-AZURE Expansion Package consists of a set of libraries and application examples for STM32L4 Series, STM32F4 Series, and STM32F7 Series microcontrollers acting as end devices. X-CUBE-AZURE runs on four platforms. The B-L475E-IOT01A and 32F413HDISCOVERY boards support Wi-Fi® connectivity with an on-board Inventek module. The 32F769IDISCOVERY board provides a native Ethernet interface. The P-L496G-CELL02 pack includes an STM32L496AGI6-based low-power Discovery board equipped with Quectel’s BG96 modem (LTE Cat M1/NB/2G fallback) for cellular connectivity. For the four platforms, a sample application configures the network connectivity parameters, and illustrates the various ways for a device to interact with Microsoft® Azure® IoT Hub. The application shows how a simple client application connects to the Azure® IoT Hub in order to publish device state and telemetry data, and receive device configuration from the cloud. The application handles Azure® messages, methods and twin update commands. This allows, from the Azure IoT console, the remote control of the user LED state, the change of the telemetry interval, or the trigger of remote firmware update. Read more: X-CUBE-AZURE – MICROSOFT AZURE SOFTWARE EXPANSION FOR STM32CUBE ### ARDUINO EMPOWERS EVERY USER TO MEET THE IOT SECURITY CHALLENGE Arduino, the leading IoT product development platform, has announced it will make security best practices achievable by anyone by including them as standard in the popular, easy-to-use Arduino IoT Cloud solution. Specifically in the IoT space, operating without sophisticated security measures in place can put customers and their data at risk. Today, data, network, and device security remain the primary concern for 50% of organizations when adopting IoT. Arduino understands the risk of compromise and is constantly looking for ways to improve security in both its hardware and software, with a strong focus on “security by design”. Arduino IoT Cloud is a low-code platform that enables users to log, graph, and analyze their sensor data, trigger events, and automate their home or business. You can sign up for Arduino IoT Cloud for free today and now automatically benefit from integrated security features including: Secure communication with Arduino Portenta H7, Arduino Nano 33 IoT and Arduino MKR family boards using their on-board secure elements (NXP EdgeLock SE050 or Microchip ATECCX08A) The open-source ArduinoBearSSL library for implementing the TLS protocol on devices A device certificate provisioning process to allow client authentication during MQTT sessions. Many of today’s embedded devices still do not properly implement the full SSL/TLS stack. Optimized for constrained devices, ArduinoBearSSL aims at producing small code footprints and low RAM usage. Read more: ARDUINO EMPOWERS EVERY USER TO MEET THE IOT SECURITY CHALLENGE ### IIS2ICLX 2-AXIS DIGITAL INCLINOMETER STMicroelectronics’ high-accuracy and low-power two-axis linear accelerometer includes digital output. The STMicroelectronics IIS2ICLX is a high-accuracy (ultra-low noise, high stability and repeatability) and low-power two-axis linear accelerometer with digital output. The IIS2ICLX has a selectable full scale of ±0.5/±1/±2/±3 g and is capable of providing the measured accelerations to the application over an I²C or SPI digital interface. Its high accuracy, stability over temperature and repeatability make IIS2ICLX particularly suitable for inclination measurement applications (inclinometers). The sensing element is manufactured using a dedicated micromachining process developed by STMicroelectronics to produce inertial sensors and actuators on silicon wafers. The IC interface is manufactured using a CMOS process that allows a high level of integration to design a dedicated circuit which is trimmed to better match the characteristics of the sensing element. The IIS2ICLX has an unmatched set of embedded features (programmable FSM, Machine Learning Core, sensor hub, FIFO, event decoding, and interrupts) which are enablers for implementing smart and complex sensor nodes that deliver high accuracy and performance at very low power. Features 2-axis linear accelerometerSelectable full scale: ±0.5/±1/±2/±3 gUltra-low noise performance: 15 µg/√HzSuperior stability over temperature (<0.075 mg/°C) and repeatabilityEmbedded compensation for high stability over temperatureI²C/SPI digital output interfaceLow power: 0.42 mA with 2 axes delivering full performanceSensor hub feature to efficiently collect data from additional external sensors Read more: IIS2ICLX 2-AXIS DIGITAL INCLINOMETER ### WÜRTH ELEKTRONIK WL-SUMW HIGH POWER ULTRAVIOLET LEDS Würth Elektronik High Power Ultraviolet LEDs deliver high intensity UV output in a compact, industry-standard, 3535 ceramic package. Available with 385nm, 395nm, and 405nm peak outputs, these LEDs are an ideal choice for UV systems for curing, printing, and adhesive coating. These LEDs can also be used for high current applications such as special lighting, counterfeit detection systems, and security forensics tools. Würth Elektronik UV LEDs are a perfect upgrade from traditional mercury-vapor (Hg) lamps in these applications, offering faster turn-on time, higher power output, and a longer lifetime. Features High power output UV LEDsLow thermal resistanceForward voltage (VF): 3.5VHigh ESD withstand voltage: 8kV (HBM)Viewing angle: 130°Chip technology: AlInGaNLens type: Waterclear silicone dome lensPeak wavelengths: 385nm, 395nm, 405nmOperating temperature: -40°C to +85°CIndustry standard soldering pad footprintPackage: Surface Mount 3535Dimensions: 3.45×3.45mm Read more: WÜRTH ELEKTRONIK WL-SUMW HIGH POWER ULTRAVIOLET LEDS ### AAEON AND AOTU ANNOUNCE THE RELEASE OF A SMART VISION AI DEVELOPERS KIT AAEON and AOTU.AI are excited to announce the launch of the BrainFrame Edge AI Developers Kit (DevKit) on an Intel AI platform for IoT that will allow developers and system integrators to rapidly create and deploy Smart Vision applications. AI computer (smart) vision applications are often bespoke and laborious to build and deploy. The BrainFrame Edge AI DevKit provides a new paradigm in creating solutions such as vision-based access control, uniform compliance, manufacturing automation, and video analytics. AAEON’s fanless industrial computer is powered by 8th Generation Intel® Core™ i5 Processors and Intel® Movidius™ Myriad™ X VPU and pre-installed with the Aotu.ai BrainFrame™ Smart Vision platform. BrainFrame™ is a platform designed to be easy to scale and highly configurable to allow any connected camera to become a continuously monitoring Smart Vision system. BrainFrame’s automatic algorithm fusion and optimization engine is powered by VisionCapsules™, Aotu.ai’s open source algorithm packaging format. These self-contained capsules have a negligible memory footprint and include all necessary code, files, and metadata to describe and implement a machine learning algorithm. Read more: AAEON AND AOTU ANNOUNCE THE RELEASE OF A SMART VISION AI DEVELOPERS KIT ### BROADCOM AFBR-S50LV85D TIME-OF-FLIGHT SENSOR MODULE The AFBR-S50LV85D is the new addition to Broadcom’s Time of Flight (ToF) sensor family The AFBR-S50LV85D is the new addition to Broadcom’s Time of Flight (ToF) sensor family and has been developed with a special focus on industrial sensing applications for large distances of typical up to 30 m. The module has an integrated 850 nm laser light source, and due to a 2° x 2° emission cone, it can typically use 1 to 3 pixels, depending on distance and remission of the measured object. It is an ideal solution for industrial sensing applications over large distances up to 30 m, typically. Key Features Integrated 850 nm laser light sourceField-of-View (FoV) of 12.4° x 6.2° with 32 pixelsTypical distance range up to 30 mWorks well on all surface types Additional Features Transmitter beam of 2° x 2° to illuminate between 1 and 3 pixelsReference pixel for system health monitoringMeasurement rates of up to 3 kHzUnambiguous range up to 100 m with dual-frequency modeOperation of up to 200 klx ambient lightSingle voltage supply 5 V, typical 33 mAIntegrated voltage and temperature sensorsIntegrated clock sourceLaser Class 1 eye-safe readyDrop-in compatible within the AFBR-S50 sensor platform Read more: BROADCOM AFBR-S50LV85D TIME-OF-FLIGHT SENSOR MODULE ### The Belle of the Boards: A Look at Arduino Are you an electronics pro? A newly-minted hobbyist? Maybe something in between? Regardless of where you fall along the spectrum, odds are you’ve probably at least heard about Arduino before. It has grown over the years to become the gold standard of device development, its tools and circuit boards known equally for their innovation and ready accessibility. Nothing short of revolutionary, it has changed the world of embedded systems for the better and helped empower the makers and educators of our world to bring their ideas to life. Why has Arduino made such a big impact, though, and how does it function? Read along to learn about the ins and outs of the Arduino platform and what you could gain from it. What is Arduino? Arduino, often dubbed as the "brain" of embedded electronics projects, is an open-source platform used to help build a variety of electronic devices. The platform is comprised of both software and hardware - a programmable microcontroller and an Integrated Development Environment (IDE) - and, unlike many other circuit boards on the market, does not require a separate programmer. This allows developers to quickly write and upload code straight from their computer to the microcontroller. To break it down to the basics, an Arduino board is essentially a small computer that’s programmed to perform specific tasks. Its microcontroller (which we’ve gone in-depth about before!) acts as the brains of the board, taking written code and turning it into actionable instructions. Pretty familiar stuff, right? However, the interesting thing about this is that the microcontroller is actually pre-programmed with a bootloader - a little piece of software residing on the circuit board that allows it to receive code through a simple USB connection. Arduino’s IDE, on the other hand, is what’s used to write, compile, and upload said code. It even utilizes a simplified version of C++ programming to do so, making it accessible to beginner programmers while ensuring plenty of powerful features remain for more advanced ones. How Arduino Works The basics of Arduino are simple enough: users write code using the IDE, the microcontroller executes it, and the device does what it’s told. Yet, how this works in practice is significantly more complicated than one might believe. There’s a lot going on under the hood that few really see! At their core lies the microcontroller, which, as previously explained, turns code into actionable instructions and controls the behavior of connected hardware. Another component called a clock crystal or crystal oscillator is essential to this process, generating the clock signal needed for the microcontroller to execute time-sensitive operations. Beyond this are a ton of different input/output pins, both digital and analog. Typically arranged around the board’s edges, these pins “talk” to external components such as sensors, actuators, and other peripherals. They then act as a middleman for the MCU, providing the signals needed to interface with these external devices. But none of this can be accomplished without the proper power flow - that’s where the voltage regulator comes in. These components do precisely what you’d expect and ensure that the Arduino board’s MCU and connected peripherals don’t get too much or too little power. It allows the board to accept a range of input voltages and, thus, makes it compatible with all sorts of power sources, from battery power to USB. Speaking of USB, since one of Arduino’s major selling points is that developers can upload code via a USB connection, these boards make a point of specifically including a designated interface for it. Although, it’s not only beneficial for programming. The USB interface also facilitates other kinds of data exchange with external devices. Surprised yet by how much goes into making the Arduino work? This isn’t even everything. Arduino circuit boards also feature various power inputs, a power LED indicator, TXRX LEDs, a reset button to restart the MCU for debugging/iteration purposes, plus more - and all to improve the developer experience! Real-world Applications of Arduino Arduino’s unique dual hardware/software approach and attention to detail has seriously shifted how people develop electronics. It’s made things faster, easier, and more versatile. It’s no wonder Arduino boards have seen widespread adoption across so many industries. Interested in how some have put it to good use? Here are just a few of the real-world applications seen by the platform: Robotics.  If you’ve ever wondered what’s behind some of the essential machines we’ve seen leveraged in production spaces, it’s often Arduino. The open-source platform is ideal for powering robotic arms and industrial control systems, providing controls for motors, sensors, actuators, and all other manner of peripherals. However, Arduino-based solutions see use in things like surveillance drones and exploration robots, too! IoT and Home Automation: Arduino is great for industrial purposes but is just as valuable within home devices. Indeed, it’s the drive behind many of the IoT and automated projects we use every day. It has helped in creating smart thermostats, home security systems, smart wearables, and beyond. Education: Crafting modern devices is an art that’s difficult to teach, though Arduino's user-friendly language and extensive documentation go a long way to simplifying things. This is why it’s a valuable teaching tool often used in schools and universities. A good starting point for instructors, it also allows students to get hands-on experience and dive into the thick of electronics programming earlier in their education. Environmental Monitoring: Academic scholars are often taught with Arduino, yet scientists often get in on the action. Science-centric researchers can work with Arduino systems for environmental monitoring applications like water quality sensors and weather stations. The platform’s data collection and analysis capabilities make it a natural fit. Medical Devices: Medicine and technology are inherently intertwined, especially in this day and age. Arduino is one tool that joins them together beautifully. It finds application in a myriad of monitors, limb prosthetics, and other assistive tech. Since the platform offers a lot of flexibility, Arduino-based medical devices can easily be tailored to patients’ specific needs and capabilities. The Benefits of Arduino Applied in seemingly every industry, by everybody, Arduino is a kind of giant in the electronics development world. A powerful platform with a now-powerful name, it makes sense for many folks to immediately adopt it as their project solution of choice. But what if you’re still on the fence? Below are some of the benefits you might get by going with Arduino as the basis for your new biggest and brightest device: Low-cost. Hoping to build on a budget? Choosing an Arduino board is one of your best bets to keep prices low without sacrificing functionality. They’re relatively affordable, high-quality, and come in several varieties to ensure you only pay for what you need. Even if you’re a total professional, nobody wants to put more time and effort into something if they don’t have to. And Arduino’s a perfect pick for those who firmly espouse the “work smarter, not harder” mentality. They’re super accessible thanks to their simplified programming/documentation and plug-in-play operation. As a bonus, they even come in full kits and pre-assembled modules in case you don’t want to put in the time. Cross-Platform. Find yourself firmly entrenched in the Apple ecosystem, or perhaps you hold that PC is always best? Either way, Arduino has you covered. The boards and software work with both operating systems alongside Linux, so compatibility is never an issue. Solid Community Support. Even the best developers and devices run into snags sometimes. You get stuck on a project, a component suddenly doesn’t want to cooperate - whatever the issue may be, Arduino has a community ready to lend a hand. Resources, tutorials, and forums filled with knowledge are always just a couple of clicks or taps away. ### 5G NB-IOT LOW-POWER CELLULAR DEVELOPER STARTER KIT Thales and Qoitech have combined their products into starter kits that offer easy setup for evaluation and prototyping of narrowband IoT (NB-IoT) connectivity and its energy consumption. Thales’ DEVKIT ENS22-E NB-IOT is an easy-to-configure starter kit with an NB-IoT module that supports major operators in Europe and APAC regions where NB-IoT technology has already been well-deployed. This powerful development board allows users to quickly test prototypes in a laboratory environment, providing cellular connectivity as well as various control functions over standard AT command interfaces. External peripherals like sensors, actuators, or additional interfaces to external applications are easily connected to all accessible module lines via pin headers. Thales’ DevKit ENS22 is configured to work with the Otii Arc, using a dedicated cable that is included in the package. Check out the configuration details on the related “Low Power Modes of Cellular LPWA” video. Qoitech’s OTII-ARC-001 is a multitool, power analyzer, power supply, and log sync, all in one package. Designed for everyday use on any developer’s desktop, Otii is compact, portable, and quiet, yet comprehensive in the technical features needed for the energy optimization of battery-driven devices. One of the most prominent features of Otii Arc is its ability to display current and voltage measurements in real-time, enabling analysis of an energy profile synced to device UART logs. Otii Arc can be upgraded with Otii Toolboxes; software add-ons that elevate the instrument into specialized tools such as a battery profiler and simulator or automation tool. Otii Arc can be used in the development, test and verification, quality assurance and maintenance (for example as part of continuous integration set-up), and technical sales. Read more: 5G NB-IOT LOW-POWER CELLULAR DEVELOPER STARTER KIT ### XTENDLORA MESH-CAPABLE LORA DATA RADIO SUPPORTS AT COMMANDS & MODBUS A Crowdfund campaign is set to be launched soon for the XTendLoRa, which is a mesh-capable LoRa data radio with support for AT commands & MODBUS. Operating over the 915 MHz, license-free Industrial, Scientific and Medical (ISM) bands, the xTendLoRa capitalizes on the spread-spectrum modulation of LoRa to derive reliable, long-range, high-sensitivity communication—over a multi-hop mesh—even when faced with significant RF or physical interference. You can use basic AT commands or a MODBUS register map to configure and control its complete wireless mesh stack. This combination of simplicity and flexibility is important to reducing development and deployment times for projects that depend on robust communication in harsh environments. The device features a multi-hop mesh stack and RS485 serial interface. It enables simple AT commands, compatible with a MODBUS Remote Terminal Unit (RTU) profile, and has Good interference immunity. Repeater functionality is field configuration via IO pin. Devices can be allocated to different virtual networks, and it offers Unicast, multicast, and broadcast messaging. It also offers a flexible sink node setting for gateway Device and enables device Firmware Upgrade (DFU) over UART. The device is hardware competent for OTA, and supports 915 MHz ISM-band operation, 4.5 v to 30 V operating volt, and operation temperature from -20° C to 85° C. It has a fixable output power up to +17 dBm, with receiver sensitivity down to -12dBm at SF 8. Finally, it enables AES- 128 CBC packet encryption, and MUI – 64 modem identity Read more: XTENDLORA MESH-CAPABLE LORA DATA RADIO SUPPORTS AT COMMANDS & MODBUS ### PANASONIC INTRODUCES POLYMER TANTALUM SOLID CAPACITORS Panasonic Industry Europe introduces the new TPS series, a surface mount Conductive Polymer Tantalum Solid capacitor series. The POSCAP TPS series capacitors feature sintered tantalum as an anode and highly conductive polymer as the cathode. TPS series also has a compact design of only 3.5×2.8.x1.1mm and a high-temperature rating of 105°C for up to 2.000 hours. The new capacitors benefit from a rated voltage of 2.5 to 6,3V and a low ESR (Equivalent Series Resistance) of only 30mΩ. The capacitance range is rated from 150 up to 330µF. The very compact TPS series capacitors aim to ensure optimal quality and reliability that renders them ideal for demanding applications like placement close to the processor (CPU) of a notebook or a very compact desktop PC, for example at the rear side of a PCB or under the heat sink. Also, IoT applications or wearables can benefit from the features of the new POSCAP TPS series by Panasonic Industry Europe. Features Lead freeTerminal plating is Palladium and Gold. It's completely lead free.Low profile chip capacitor  Low impedance and low ESR at high frequency※  High ripple current capability  Long Life 105°C*2,000Hrs* Excellent noise-absorbent characteristics  Excellent temperature characteristics up to .55°C  The rush current is guaranteed for 20A  Superior to Ta-Cap in safety Read more: PANASONIC INTRODUCES POLYMER TANTALUM SOLID CAPACITORS ### SRG-3352: BRINGING EDGE NETWORKS TOGETHER AAEON, an industry leader in Edge Computing solutions, announces the SRG-3352 Edge IoT Gateway System. The SRG-3352 offers reliable and cost saving edge network operations, with flexibility to connect edge nodes and sensors with cloud services. The SRG-3352 is powered by the Arm® Cortex-A8 800 MHz RISC processor. This innovative processor reduces the energy requirements of the system, saving electricity costs and allowing the system to be deployed with solar power or battery operated. With very little heat output, the system can operate in a wide range of temperatures from 0°C up to 60°C without loss in performance. The SRG-3352 is designed to provide a great value and cost-effective platform not only with initial investment, but also in long term costs. With rugged design and Arm processor, the system provides stable and reliable operation, reducing maintenance needs. To connect from edge to cloud, the SRG-3352 supports 3G/4G LTE as well as NB-IoT to help reduce carrier costs. The SRG-3352 provides flexibility in connecting with edge nodes. Featuring two Gigabit Ethernet ports, USB 2.0 and Micro USB ports, and two RS-485 ports, users can connect a wide range of sensors and devices. With optional wall mounting and DIN rail kits, the SRG-3352 can be deployed anywhere it’s needed. The SRG-3352 is also compatible with popular cloud services including AWS, Azure, and Arm Pelion, or can be configured to work with a customer’s own cloud platform. Read more: SRG-3352: BRINGING EDGE NETWORKS TOGETHER ### Lithium-ion vs. Lithium-polymer Batteries Introduction As the vital energy sources driving technology innovation, Lithium-ion (Li-ion) and Lithium-polymer (Li-po) batteries have emerged as leading power solutions across electronics - from laptops, smartphones, and electric vehicles to drones. Despite harnessing lithium, Li-ion and Li-po batteries feature unique attributes, tailoring them to specific applications and uses yet universally enabling devices to unleash their full functionality. This article compares comprehensively, delving into how chemical and structural differences impact overall performance. We'll explore the advantages and disadvantages of each across aspects such as energy density, weight, form factor flexibility, cost-effectiveness, lifespan, and safety. Grasping these facets is critical for anyone aiming to make informed decisions about battery technology, whether for personal or industrial use. By illuminating the Li-ion vs Li-po debate, this piece seeks to demystify key terminology and considerations when evaluating these two battery juggernauts. Technical Specifications and How They Work: Lithium-ion vs. Lithium-polymer Batteries Examining the technical details of Lithium-ion (Li-ion) and Lithium-polymer (Li-po) batteries reveals an intriguing terrain where chemistry, structure, and engineering intersect. Their core similarity is that both leverage lithium, a lightweight metal prized for high electrochemical potential, to store and discharge energy. However, the two technologies then chart significantly different courses, impacting their performance, applications, and device suitability. As we compare their divergent pathways, each battery's specific engineering choices manifest in distinct capabilities and optimal uses. Despite a common lithium foundation, tailored innovations in translating this versatile element into customized solutions lead Li-ion and Li-po down differentiated roads from lab bench to consumer technology. Lithium-ion Batteries: The Chemistry of Power Li-ion batteries operate via lithium-ion flow through a liquid electrolyte solution, permeating the cathode and anode during charge and discharge cycles. This conductive electrolyte of lithium salts dissolved in organic solvents facilitates ion mobility between the electrodes while electrons transfer externally through circuit connections. Typified by a layered structure, Li-ion batteries feature cathodes usually made of lithium cobalt/iron phosphate and graphite anodes. A key advantage is their high energy density, delivering substantial power capacity per size/weight - ideal for portability needs in electronics and electric vehicles. However, the liquid electrolyte also introduces safety concerns, as leakage/damage can prompt shorts, overheating, or even fires. Though providing robust energy storage, Li-ion batteries require protective measures against potential operational issues stemming from their defining liquid electrolyte. Lithium-polymer Batteries: Flexibility and Safety Unlike liquid electrolytes in Li-ion batteries, Li-po batteries leverage a solid/gel polymer electrolyte, enabling more flexible, thin constructions and unique shaping. Though still based on shuttling lithium ions during charge/discharge, this solid electrolyte mitigates leakage risks and enhances safety. However, trade-offs emerge in energy density and cost: Li-po batteries generally store less charge per volume than Li-ion, and complex manufacturing processes increase prices. Yet for applications favoring specialized form factors over maximized power, Li-po batteries' moldable electrolyte provides critical advantages. Both technologies incorporate protective circuits managing safe operation parameters like overcharging/discharge and current spikes, preventing damage over time. So, while more expensive and energy-dense, Li-pos' solid electrolytes confer distinct flexibility and safety advancements that support particular use cases. Their contrasts showcase how custom electrolyte formulations expand lithium batteries' overall versatility. Advantages and Disadvantages: Lithium-ion vs. Lithium-polymer Batteries Advantages of Lithium-ion Batteries Li-ion batteries pack substantial power into a compact and lightweight package owing to their high energy density. This ability to deliver abundant electricity in a space-saving form factor makes Li-ion the optimal choice. Maximizing battery life while retaining portability and minimal size is critical - as in smartphones, laptops, cameras, and other portable electronics. Cost-Effectiveness: Though utilizing advanced technology, Li-ion batteries see inexpensive production from mature manufacturing processes - contributing to their widespread adoption at low costs across diverse industries. Low Self-Discharge Rate: Li-ion batteries experience lower self-discharge rates than other rechargeables, thus retaining charges longer when unused. This makes them well-suited for devices requiring lengthy standby times before activation. No Memory Effect: Unlike batteries suffering memory effects, Li-ion batteries see no long-term capacity loss from partial charge/discharge cycles. Users can recharge them at any level without worrying about repeated top-offs diminishing runtimes over time. This frees Li-ion batteries from capacity degradation plaguing other chemistries. Disadvantages of Lithium-ion Batteries Safety Concerns: However, the liquid electrolyte poses safety risks if Li-ion batteries experience overcharging, damage, or high heat - potentially prompting leakage, overheating, or even explosions. Therefore, protective circuits and careful handling are essential to safely utilize Li-ion batteries' powerful but volatile liquid electrolyte system. Aging: However, Li-ion batteries degrade over repeated charging cycles and age, diminishing capacity and necessitating replacement over time despite careful handling. Advantages of Lithium-polymer Batteries Flexibility and Versatility: Li-po batteries' solid/gel electrolytes permit more flexible, versatile designs manufacturable in various shapes and sizes. This empowers slim, uniquely shaped integrations unmatched by rigid liquid electrolyte approaches. Safety: With solid electrolytes reducing leakage risks, Li-po batteries see wider safety margins versus Li-ion counterparts more prone to fire/explosion hazards from volatile liquid electrolytes. Lightweight: Owing to their construction, Li-po batteries can achieve lighter weights than equivalent power Li-ion versions - a distinct advantage in portable/wearable realms where shaving every gram is crucial. Disadvantages of Lithium-polymer Batteries Lower Energy Density: Li-po batteries typically suffer lower energy densities than Li-ion, thus holding less charge per space. This hampers suitability for high-power roles with demanding energy needs condensed into compact volumes. Cost: More complex production processes generally make Li-po batteries more expensive than Li-ion, translating to higher costs passed to consumers. Durability: Though less leakage-prone, Li-po batteries face higher swelling risks if not adequately managed over time. Such swelling can still hinder performance and prompt earlier replacement despite their solid electrolytes. Li-ion Batteries: Dense Energy Storage With high energy density and low cost, Li-ion batteries power most portable electronics needing lightweight, long-lasting energy - phones, laptops, tablets, cameras. Their capacity, quick charging, and durability allow electric cars to maximize driving range. Li-po Batteries: Specialized Flexibility Li-po batteries uniquely enable innovative devices requiring flexibility and specialty factors like wearables, drones, and future technologies. Their moldable shape unlocks customizable configurations. Wearable Technology: With lightweight, flexible forms that can be shaped to fit compact spaces, Li-po batteries readily enable innovative designs ideal for wearable devices like fitness trackers, smartwatches, and medical monitors. Drones and RC Vehicles: Li-po batteries' lightweight, flexible forms, easily fitting into tight spaces, are ideal for enabling innovative wearable device designs, including fitness trackers, smartwatches, and medical monitors. Niche Markets and Emerging Technologies Li-ion and Li-po batteries are finding roles in powering emerging technologies where their strengths are advantageous. Li-po's flexibility aids bright clothing and flexible electronics designs, while Li-ion's high energy density suits space exploration and advanced medical devices needing top performance. The future of Lithium batteries: Innovations in materials, charging, sustainability Rapid advances in Lithium-ion (Li-ion) and Lithium-polymer (Li-po) battery technologies are ushering in significant enhancements in critical areas - from expanded capacities, bolstered safety, and faster charging velocities to superior environmental sustainability. These innovative leaps signal a bright future for continued optimization across metrics. 1. Advanced Materials Higher-Capacity Cathodes: Li-ion batteries are developing new cathode mixtures like LMNO and LNCA to increase energy density, extending electric vehicle range and device runtime without larger batteries. Solid-State Electrolytes: Replacing liquid electrolytes with non-flammable solid materials can enhance Li-ion and Li-po battery safety and lifespan. 2. Faster Charging Quick Charge Advances: Through battery and charger innovations, both battery types aim to charge faster, which is critical for widespread electric vehicle adoption. Integrated Charging: Wireless inductive and solar charging integration offers convenient, eco-friendly charging for portables. 3. Sustainability Greener Materials: Researchers are replacing rare, hazardous Li-ion and Li-po battery materials with more abundant, safer alternatives. Recycling: Improved recycling processes will recover valuable battery materials and reduce disposal impacts. Renewable Energy Storage: Grid-scale Li batteries will store clean power from solar and wind, enabling renewable energy stability. Conclusion In summary, Li-ion and Li-po batteries uniquely fill critical portable power needs. Li–ion offers high energy density and cost savings for consumer gadgets and EVs. At the same time, Li-po provides safety and design flexibility ideal for wearables and drones, with cutting-edge innovations on the horizon to push performance, safety, and sustainability; ongoing advances in these critical technologies will continue unlocking more efficient, widespread energy solutions powering the future. ### SAELIG ANNOUNCES THE PF08H1 FACIAL TEMPERATURE SCREENING KIOSK This slim, plug and play, free-standing thermal screening system offers a touch-less way to protect environments from risks of illness and viruses via advanced thermal imaging, providing instant body temperature measurements with an accuracy of +/-0.5°F Saelig Company, Inc. has introduced the PF08H1 Facial Temperature Screening Kiosk – an easy-to-use, self-contained personnel temperature screening device that scans in under 3 seconds, thus allowing or denying entry. Using Heimann sensor technology from Germany, a global leader in thermal imaging technology, the PF08H1 Thermal Guard system detects face temperature with an accuracy of ±0.5degF. This touchless, plug and play standalone system does not require any operator participation, with network connection optional. The 11.6″ x 5.2″ x 1″ Thermal Guard, mounted on a 40” sturdy floor-stand, features an 8”high-resolution LCD display, and provides individual body temperature measurements. It can trigger alerts when readings are higher than normal. With face shape recognition technology, the device can also detect individuals with or without protective facial masks. This provides an unobtrusive way of scanning personnel and makes working environments safer. Access can be denied if no mask is detected. The system can be set up to send an alert via email and/or text when a user has a high temperature or isn’t wearing a mask. It can use facial recognition to deny access to strangers, and also time-stamp employee arrival. The device comes with facial biometric recognition technology using Dual Wide Angle Binocular Cameras. It can support various RFID card readers to allow card access identification. The high-quality infrared thermal sensor detects body temperature from 32 multi-points on the face with an accuracy of ± 0.5degF. The large, high-resolution LCD can be used as a real-time surveillance visual display. The device can be integrated with turnstiles and magnetic lock doors to provide automated and contactless access. This avoids the unpleasant experience of having an employee or security guard pointing handheld devices at guests, and allows business owners to protect their establishment with minimal distraction & effort. This product is not a medical device and is not intended to be used for diagnostic purposes. Read more: SAELIG ANNOUNCES THE PF08H1 FACIAL TEMPERATURE SCREENING KIOSK ### RESTORING STARLINK’S MISSING ETHERNET PORTS Internet connectivity in remote areas can be a challenge, but recently SpaceX’s Starlink has emerged as a viable solution for many spots on the globe — including the Ukrainian frontlines. Unfortunately, in 2021 Starlink released a new version of their hardware, cost-optimized to the point of losing some nice features such as the built-in Ethernet RJ45 (8P8C) port, and their proposed workaround has some fundamental problems to it. [Oleg Kutkov], known for fixing Starlink terminals in wartime conditions, has released three posts on investigating those problems and, in the end, bringing the RJ45 ports back. Starlink now uses an SPX connector with a proprietary pinout that carries two Ethernet connections at once: one to the Dishy uplink, and another one for LAN, with only the Dishy uplink being used by default. If you want LAN Ethernet connectivity, they’d like you to buy an adapter that plugs in the middle of the Dishy-router connection. Not only is the adapter requirement a bother, especially in a country where shipping is impeded, the SPX connector is also seriously fragile and prone to a few disastrous failure modes, from moisture sensitivity to straight up bad factory soldering. For a start, [Oleg] has cracked the original adapter open and shows us the internals, even reverse-engineering the schematic and the SPX pinout! The adapter itself is a fundamental failure point to be tackled, so that’s where the next two hacks come in. First, he shows us how to add a LAN port without requiring the adapter. This requires you to tap into some test points or even QFN pins and add your own Ethernet transformer, but once you do that, you can get rid of the adapter for good. He shares breakout boards you can order and assemble to make this job way easier, and shows how to integrate the LAN connector into the shell. What if the SPX connector has failed you completely? You’re in luck, the last of the three write-ups is about getting rid of the SPX connector even for Dishy wiring purposes, and that is a way simpler mod. All in all, the three articles are full of diagrams, tips and tricks, so whether you’re looking to learn more about hardware you own, mod it to improve convenience, or perhaps even repair a broken SPX connector, you’re in for a treat! Before the conflict had [Oleg] take a plunge into the Starlink repair depths, we’ve seen him build a wideband SDR station, reverse-engineer Tesla car LTE modems and Bluetooth speakers alike, and there’s much more to bee found at his blog. Source: RESTORING STARLINK’S MISSING ETHERNET PORTS ### MAXIM MAX77958 STANDALONE USB TYPE-C AND USB POWER DELIVERY CONTROLLER The MAX77958 Is A Robust Solution For USB Type-C® CC Detection And Power Delivery (PD) Protocol Implementation The MAX77958 is a robust solution for USB Type-C® CC detection and power delivery (PD) protocol implementation. It detects connected accessories or devices by using Type-C CC detection and USB PD messaging. The IC protects against overvoltage and overcurrent, and detects moisture and prevents corrosion on the USB Type-C connector. The IC also has a D+/D- USB switch and BC 1.2 detection to support legacy USB standards. It contains VCONN switches for USB PD and an enable pin for an external VCONN boost or buck converter. Key Features Customizable FirmwareUSB Type-C Support and USB-PD SupportSupports BC 1.2 Legacy/Proprietary Charger DetectionHigh Voltage VBUS (28 V) Additional Features Customizable FirmwareUSB Compliant Default Embedded FirmwareSupports Customizable Actions on EventsFirmware Updates for Future Specification RevisionsUSB Type-C Support and USB-PD SupportUSB Type-C Version 1.3 and PD 3.0 CompliantMode Configuration: Sink/Source/Dual Role PortProgrammable Power Supply (PPS) Sink SupportFast Role Swap (FRS) Initial Sink SupportCable Orientation and Power Role DetectionIntegrated VCONN Switch with OCPSupport Try.Snk StateAudio and Debug Accessory Sink/Source ModeSupports BC 1.2 Legacy/Proprietary Charger DetectionIntegrated D+/D- SwitchesMoisture Detection/Corrosion PreventionHigh Voltage VBUS (28 Read more: MAXIM MAX77958 STANDALONE USB TYPE-C AND USB POWER DELIVERY CONTROLLER ### DIETPI VERSION 9.1: NOW WITH RASPBERRY PI 5 SUPPORT AND MORE DietPi recently released version 9.1, which among other changes includes new images for the Raspberry Pi 5, Radxa Rock 4 SE and NanoPi R5S/R5C & 6. The Radxa Rock 4 SE image was necessary because the Rock 4’s RK3399 SoC is subtly different from the RK3399-T’s SoC in terms of memory support, which prevents a Rock 4 image from booting on the Rock 4 SE. Meanwhile the Raspberry Pi 5 image is all new and still a bit rough around the edges, with features like the changing of the resolution and camera module support not working yet. These new images are all available for testing. We covered DietPi previously with their 8.12 release, along with the reasons why you might want to use DietPi over Armbian and Raspberry Pi OS. Essentially DietPi’s main focus is on performance combined with a small installed size, with the included configuration tools and the setup allowing for many more features to be tweaked than you usually find. If the performance improvements, lower RAM usage and faster boot times seen with the Raspberry Pi 4 holds up, then DietPi can just give the Raspberry Pi 5 a nice little boost, while saving power in the process. Source: DIETPI VERSION 9.1: NOW WITH RASPBERRY PI 5 SUPPORT AND MORE ### A DEEP DIVE INTO A 1980S RADIO SHACK COMPUTER TRAINER For those of us who remember Radio Shack as more than just an overpriced cell phone store, a lot of the nostalgia for the retailer boils down to the brands on offer. Remember the Realistic line of hi-fi and stereo gear? How about Archer brand tools and parts? Patrolman scanners, Micronta test instruments, and don’t forget those amazing Optimus speakers — all had a place in our development as electronics nerds. But perhaps the most formative brand under the Radio Shack umbrella was Science Fair, with a line of kits and projects that were STEM before STEM was a thing. One product that came along a little too late for our development was the Science Fair Microcomputer Trainer, and judging by [Michael Wessel]’s deep dive into the kit, we really missed the boat. The trainer was similar to the earlier “100-in-1”-style breadboarding kits, with components laid out on a colorful cardboard surface and spring terminals connected to their leads, making it easy to build circuits using jumper wires. The star of the show in the microcomputer trainer was a Texas Instruments TMS1100, which was a pretty advanced chip with a 4-bit CPU with its own ROM and RAM as well as a bunch of IO lines. The trainer also sported a peppy little 400-kHz crystal oscillator clock, a bunch of LEDs, a seven-segment display, a speaker, and a rudimentary keyboard. The first video below is a general introduction to the trainer and a look at some basic (not BASIC) programs. [Michael] also pulls out the oscilloscope to make some rough measurements of the speed of the TMS1100, which turns out to be doing only about 400 instructions per second. That’s not much, but in the second video we see that it was enough for him to nerd-snipe his collaborator [Jason] into coding up an 80-nibble Tower of Hanoi solver. It’s a little awkward to use, as the program runs in spurts between which the user needs to check memory locations to see which disc to move to which peg, but it works. It looks like people are rediscovering the Microcomputer Trainer all of a sudden. It might be a good time to pick one up. Source: A DEEP DIVE INTO A 1980S RADIO SHACK COMPUTER TRAINER ### Different Types of PCB Assembly   What is the PCB? Printed circuit boards, or PCBs, are the essential component of most modern electronic devices. All other electronic components are assembled onto printed circuit boards, which can be as simple as the single-layered board in your garage door opener or as complex as the six-layer board in your smart watch or the 60-layer, extremely high density, high-speed circuit boards found in supercomputers and servers. Semiconductors, connectors, resistors, diodes, capacitors, and radio equipment are all mounted on the PCB and are all able to "talk" to one another.   Due to their superior mechanical and electrical properties, PCBs are the ideal option for these applications. Rigid PCBs are the most prevalent type in the world, accounting for around 90% of all PCB production today. Certain PCBs are pliable, enabling the circuits to be bent and stretched into desired shapes. Flexible circuits are also used in situations where they are expected to function properly after hundreds of thousands of bend cycles. These flexible PCBs account for around 10% of the market. Rigid flex circuits are a very small subset of these circuit types; they feature flexible regions that provide the previously discussed benefits of flexible circuits and firm parts of the board that are ideal for mounting and attaching components.     What is the PCB assembly? PCBA refers to PCB assembly. The circuit board integrates different electrical components using a surface encapsulation process. The assembled PCB and outside case of the final product are joined by the box assembly, which is the following step. Put another way, the PCB bare board—also referred to as the PCBA—travels through the SMT top part before going through the entire DIP plug-in procedure. Unlike PCB'A, which adds a slant point as is customary in America and Europe, this method is extensively used in the country. Printed circuit board assembly is known as PCBA. Mass production for new electrical designs would usually come after prototype PCB assembly (Sample PCBA) to validate concepts, if a market is viable.     What are the differences between the PCB and PCBA? The SMT technology is referred to by the words "bare circuit board" (PCB) and "circuit board plug-in assembly" (PCBA). One is a finished board; the other is a naked board. PCBs (Printed Circuit Boards), which are composed of epoxy glass resin, are classified into 4, 6, and 8 layers based on the quantity of signal layers. The most common counts of layers are four and six. Chip components, including as chips, are mounted to the bare board. A PCBA is equivalent to a completed circuit board, and it can only be manufactured once the manufacturing process for the circuit board is complete. Printed Circuit Board + Assemblies = PCBA.   Types of PCB Assembly   SMT assembly BGA assembly Mixed assembly Rigid-Flex PCBA Through-hole assembly   SMT assembly The complete term for it is surface mount technology, or SMT. The SMT method is used to join parts or components to circuit boards. Due to its improved efficiency and better outcomes, SMT has supplanted other techniques in PCB assembly. PCB manufacturers used through-hole assembly primarily in the past to add components. That being said, SMT has replaced the prior method of assembly with welding technology. Additionally, PCBs manufactured by the SMT assembly technique are used by all electronic firms, including those involved in computers, phones, cellphones, home appliances, etc. AXI, AOI, reflow soldering, printing solder paste, and mounting components are all parts of the basic SMT assembly process.   BGA assembly   A ball grid array (BGA), also referred to as a chip carrier, is a surface-mount device used in the packaging of integrated circuits. BGA packaging is used for devices like microprocessors that are permanently installed. A dual in-line or flat package cannot have as many connector pins as a BGA. The device's full bottom surface can be used, not just the edge. Furthermore, the traces that join the package's leads to the wires or balls that join the die to the package are usually shorter than those of a perimeter-only type, which enhances performance at high speeds.   Mixed assembly   Certain components are still incompatible with SMT assembly, despite the fact that surface mount technology has replaced other mounting methods as the predominant method in PCB manufacturing. Then, SMT and THT assembly must be performed on the same board. A mixed assembly is defined as a combination of assembly methods that are produced without the use of solder paste.   While some specialized components that are not available in the SMT process require mixed PCB assembly, the majority of the components are welded in surface mount configuration on the board.     Rigid-Flex PCBA   Rigid-flex boards are printed circuit boards that combine the properties of flexible and rigid board materials. Most stiff flex boards consist of multiple layers of flexible circuit substrates attached to one or more rigid boards, either internally or externally, depending on the design of the application. Usually, during production or installation, the flexible substrates are shaped into the flexed curve and are meant to remain flexible continually.   Through-hole assembly The through-hole assembly method is used to manufacture electronic circuits. Leads are used to install the components. It explains how to install the board by inserting the leads into the pre-drilled holes and soldering the components to the board using wave soldering or manual soldering.   From single-sided to double-sided to multi-layer boards, PCB design changed over time. Through-hole assembly is difficult to modify to meet the demands of modern electronics. Through-hole construction has virtually been replaced by SMT technology in today's PCB fabrication. Through-hole installation is still necessary for some applications, including as those involving large transformers, connectors, and electrolytic capacitors.   SMT vs BGA vs Through-hole It's possible that through-hole technology works best for low-volume PCB manufacture (such as prototyping). Through-hole is usually seen to be the better choice for components that need to sustain significant stress since wire leads offer a strong connection. For front connectors—where USB cords and cables will be plugged in—the hole mounting approach is usually the recommended choice. But drilling holes increases the cost and lengthens the production cycle since it needs soldering on both sides of the PCB. Through-hole connectors might limit the amount of routing space that is available on multi-layer boards.   Modern electronic devices need to have several sophisticated features, efficient operation, and increased speed—all in a smaller package. The assembly must still be thinner even with additional electronic components. For these purposes, BGA packages are the greatest option. For example, BGAs are commonly utilized in the production of integrated circuits (ICs) with over 200 I/O connections. When production numbers are high, Surface Mount is a better choice since SMD components are smaller and result in a circuit board that is more compact and dense with components. SMT is a more reliable method than through-hole human assembly because SMDs may be automated with robotic pick-and-place devices, which eliminates the need for drilling. SMT is the industry standard technique for rear connections. SMT does have certain disadvantages. For instance, it is not advised to link high-stress components, and in order to produce it in large quantities, a costly initial investment in technology is required.   SMT is generally more economical and time-efficient. ### 802.11BGN CORTEX®-M4F WI-FI MODULES TAIYO YUDEN’s modules feature an onboard antenna and filter to reduce the components required for wireless designs TAIYO YUDEN’s 802.11bgn Cortex-M4F Wi-Fi modules feature an onboard antenna and filter to reduce the number of supported components to be integrated into wireless designs. Based on the NXP 88MW320, embedded Arm® Cortex-M4F processor can help drive applications. FCC, ISED, and Japan pre-certified, optional embedded TAIYO YUDEN software can help simplify designs. Features IEEE802.11b/g/n module with onboard trace antenna and band pass filterNXP 88MW320 SOC with embedded Arm Cortex-M4F processorFCC, ISED, and Japan pre-certifiedOptional integrated WLAN driver, OS, and protocol stackInterface: UARTOutline: 21.4 mm x 14.0 mm x 2.4 mm (max)Output power: 15 dBm (11 b), 9 dBM (11 g), 9 dBM (11 n)Operating temperature range: -30°C to +85°C Applications Smart homesIndustrialSmart devicesSmart appliances Read more: 802.11BGN CORTEX®-M4F WI-FI MODULES ### Crafting Your Unique Arduino Creation: A DIY Project Guide Build Your Own Arduino Using affordable components and a solderless breadboard, you have the ability to swiftly and effortlessly construct your own Arduino setup. This approach proves invaluable for prototyping new design concepts or when avoiding the need to dismantle existing setups for Arduino usage. The following example illustrates the process of connecting components on your breadboard, with detailed explanations provided as we progress through this project. Figure 1-1: Breadboard Arduino with USB programming ability. Before beginning, ensure that you have all the required items listed in the components section. If you need to acquire any parts, they are available for purchase on my website at www.ArduinoFun.com. Alternatively, you can refer to the list of several other websites at the back of this book that offer Arduino-related items. Additionally, please review the note regarding the TTL-232R cable in the programming options section before making a purchase. To commence, the initial task involves establishing power supply. Positioned with your breadboard and components before you, let's embark on the setup! This step involves configuring the breadboard Arduino to receive a stable +5 Volts power supply, achieved through the utilization of a 7805 voltage regulator. Figure 1-2:Power setup with LED indicator. To activate the voltage regulator, a power supply exceeding 5V is required. A typical 9V battery with a snap connector is well-suited for this purpose. Power will be introduced into the breadboard via designated red and black terminals. Begin by placing one of the 10uF capacitors across the designated squares on the breadboard. Note that capacitors have a longer leg known as the Anode (Positive) and a shorter leg referred to as the Cathode (Negative), often marked with a stripe. Position the capacitor accordingly. To bridge the gap across the breadboard's empty space, insert two hook-up wires—one for positive (red) and one for ground (black)—to ensure continuous power flow. Next, insert the 7805 voltage regulator, which features three legs. When viewed from the front, the left leg corresponds to voltage in (Vin), the middle leg is for ground (GND), and the third leg is for voltage out (Vout). Align the left leg with the positive power input and connect the second leg to ground. Connect a ground wire from the voltage regulator to the ground rail on the breadboard, and then connect the Vout wire (third leg of the voltage regulator) to the positive rail. Attach the second 10uF capacitor to the power rail, ensuring correct orientation based on the Positive and Negative markings. For troubleshooting purposes, it's advisable to incorporate an LED status indicator. To achieve this, connect the power rails on the right and left sides of the breadboard, pairing positive with positive and negative with negative wires at the bottom of the breadboard. Figure 1-3: Left and Right Power Rail Connections. Having power on the left and right power rail will also help to keep your breadboard organized when providing power to the various components. Figure 1-4: For the LED status indicator, connect a 220Ω resistor Well done, your breadboard is now configured to receive +5V power. You're ready to proceed to the next phase of the circuit design. Our next task is to prepare the ATmega168 or 328 chip. Before we delve into this, let's examine the function of each pin on the chip in relation to Arduino functions. Please note: While the ATmega328 operates at a similar speed and has the same pinout, it boasts over twice the flash memory (30k vs. 14k) and double the EEPROM (1Kb vs. 512b). Figure 1-5: Arduino Pin Mapping The ATmega168 chip, manufactured by Atmel, may not correspond precisely to the references provided above if you consult its datasheet. This discrepancy arises because Arduino has its own pin functions, which I've outlined solely for this illustration. For accurate pin references or comparison, you can obtain the datasheet from www.atmel.com. With an understanding of the pin layout, we can proceed to connect the remaining components. Firstly, we'll establish the support circuitry for one side of the chip before addressing the other side. Pin one of most chips is typically marked with an identifier. Examining the ATmega168 or 328, you'll observe a u-shaped notch at the top alongside a small dot, indicating pin 1. Figure 1-6: Supporting circuitry pins 15-28 Start by connecting a jumper wire from the GND power bus to pin 22. Then, extend jumper wires from the positive power bus to pin 20 (AVCC), which supplies voltage to the ADC converter. It's essential to connect this pin to power, whether or not the ADC is in use. Additionally, attach another jumper wire from the positive bus to pin 21, serving as the analog reference pin for the ADC. On the Arduino, pin 13 serves as the LED pin. Although the pin number on the actual chip is 19, you will consistently reference it as Pin 13 when uploading your sketch code and for all projects. To connect the LED, incorporate a 220Ω resistor bridging from GND to the cathode of the LED. Then, connect a jumper wire from the anode of the LED to pin 19. Transitioning to the other side of the chip, your setup is nearly complete! Figure 1-6: Supporting circuitry pins 1-14 Position the small tact switch above the ATmega168 chip, close to the pin 1 marker. This switch serves as the Arduino reset button. Prior to uploading a new sketch to the chip, press this switch once. Connect a small jumper wire from pin 1 to the lower leg of the switch. Then, attach the 10K resistor from power to the pin 1 row on the breadboard. Finally, connect a GND jumper wire to the upper leg of the switch. Attach power and GND jumpers to pin 7 (VCC) and pin 8 (GND). Install the 16MHz clock crystal to pins 9 and 10, followed by connecting two .22pF capacitors from pins 9 and 10 to GND. Your basic breadboard Arduino setup is now assembled. While you could stop here and transfer a pre-programmed chip from your Arduino board to the breadboard, it's recommended to proceed with adding programming pins for flexibility. Alternatively, instead of using the 16MHz clock crystal, you can opt for a 16 MHz ceramic resonator with built-in capacitors, three-terminal SIP package. In this case, arrange your breadboard differently, with the resonator's middle leg connected to ground and the other two legs to pins 9 and 10 on the ATmega168 chip. Identify a space on the breadboard with six columns not in contact with other components. Insert a row of six male header pins here, labeled as follows from left to right: GND, NC, 5V, TX, RX, NC (or pins 1, 2, 3, 4, 5, 6). From the power bus rail, connect the GND wire to pin 1 and a wire from power to pin 3. The NC pins (not connected) can be linked to GND if desired. Connect a wire from pin 2 on the ATmega168 chip (Arduino RX pin) to pin 4 (TX) on the programming headers. Likewise, connect pin 3 (Arduino TX) on the ATmega168 chip to pin 5 (RX) on the header pins. The communication setup is as follows: ATmega168 RX to Header Pin TX, and ATmega168 TX to Header Pin RX. Now your breadboard Arduino is ready for programming. Programming Options The initial choice is to acquire a TTL-232R 3.3V USB – TTL Level Serial Cable, which is available for purchase on websites such as www.adafruit.com or www.ftdichip.com. Alternatively, I recommend two other options, both of which are breakout boards offered by SparkFun.com. These options include: - FT232RL USB to Serial Breakout Board, identified by SKU: BOB-0071. Please note that this choice occupies more space on your breadboard. - FTDI Basic Breakout - 3.3V, designated by SKU: DEV-08772. This option, especially when paired with right angle male headers, proves to be the most effective among the three as it offers better stability on the breadboard. Build Your Own Arduino Verify your connections thoroughly, ensuring the 9V battery remains disconnected, and establish your programming setup. Launch the Arduino IDE and navigate to the Example sketch files, located under Digital. Load the Blink sketch. From the file menu, access Serial Port and select the appropriate COM port corresponding to your USB cable connection (e.g., COM1, COM9, etc.). In the file menu under Tools/Board, choose one of the following options based on your breadboard Arduino configuration: • Arduino Duemilanove w/ATmega328 • Arduino Decimila, Duemilanove, or Nano w/ATmega128 (depending on the chip used with your breadboard Arduino) Now, click the upload icon and proceed to press the reset button on your breadboard. If you're utilizing one of the SparkFun breakout boards, observe the RX and TX lights blinking, indicating data transmission. Occasionally, allow a few seconds after clicking the upload button before pressing the reset switch. If encountering difficulties, experiment with timing between the two actions. Once the sketch uploads successfully, the LED on pin 13 will blink in a one-second on, one-second off pattern until either a new sketch is uploaded or the power is turned off. After code upload completion, you can disconnect the programming board and rely on your 9V battery for power. Troubleshooting • Insufficient Power – Ensure that your power source supplies voltage higher than 5V. • Power On, No Functionality – Double-check all connections to ensure proper connectivity. • Upload Error – Consult www.arduino.cc and search for the specific error message encountered. Additionally, explore the forums for valuable assistance and troubleshooting tips. ### ESP32 OSCILLOSCOPE SKIPS SCREEN FOR THE BROWSER An oscilloscope can be an expensive piece of equipment, but not every measurement needs four channels and gigahertz sampling rates. For plenty of home labs, old oscilloscopes with CRTs can be found on the used marketplace for a song that are still more than capable of getting the job done, but even these can be overpowered (not to mention extremely bulky). If you’re looking for something even cheaper, and quite a bit smaller, this ESP32 scope from [BojanJurca] might fit the bill. The resulting device manages to keep costs extremely low, but not without a trade-off. For this piece of test equipment, sampling is done over the I2C bus on the ESP32, which can manage a little over 700 samples per second with support for two channels. With the ESP32 connected to a wireless network, the data it captures can be viewed from a browser in lieu of an attached screen, which also keeps the size of the device exceptionally small. While it’s not a speed demon, that’s more than fast enough to capture waveforms from plenty of devices or our own circuit prototypes in a form factor that can fit even the smallest spaces. Of course for work on devices with faster switching times, it’s always good to keep a benchtop oscilloscope around. But as far as we can tell this one is the least expensive, smallest, and most capable we’ve come across that would work for plenty of troubleshooting or testing scenarios in a pinch. We’ve seen others based on slightly more powerful microcontrollers like this one based on the STM32 and this other built around the Wio Terminal with a SAMD51, both of which also include built-in screens. Source: ESP32 OSCILLOSCOPE SKIPS SCREEN FOR THE BROWSER ### Remote Control: Interacting with an Arduino via Web Interface Upon acquiring my initial Arduino board, my immediate aspiration was to administer it through a web interface. However, lacking an Ethernet shield initially, I deferred the idea. Recently, spurred by curiosity, I procured a shield from Amazon to explore the possibilities. The foremost step entailed drafting a basic sketch capable of rendering a web page and processing user input. Hence, in this tutorial, we delve precisely into this endeavor. How to Control an Arduino from a Web Page In this project tutorial, we will demonstrate how to set up an Arduino board with an Ethernet shield to enable control of a blue LED through a web browser. (Of course, you can opt for a different color LED if desired!) Before delving into controlling an Arduino via a web page, the initial step is to connect the Ethernet shield to the Arduino board. Aligning the shield's pins and gently pressing it down achieves this connection. However, caution is warranted not to press it down too firmly, as this may cause the bottom of the Ethernet shield to make contact with the top of the USB port. Such contact could potentially lead to a short circuit. The specific shield utilized in this project is the Wiznet W5100 variant manufactured by Sunfounder, which is essentially a clone of the official Arduino W5100 shield. Parts List for this Project If you lack the necessary components for this list, here's a basic parts inventory: 1. Arduino UNO or Arduino Mega 2560 2. W5100 Ethernet Shield 3. Blue LED 4. 10K Ohm Resistor Wiring Diagram for Ethernet Controlled LED Typically, I would utilize the built-in LED allocated to pin 13 for a project like this. However, employing that approach presents two significant challenges in this particular project. Firstly, the LED is obscured and difficult to discern due to the presence of the Ethernet Shield. Secondly, pin 13 is already allocated for use by the W5100 Ethernet shield. Consequently, for this project, I will instead connect a blue LED, accompanied by a 10K ohm resistor, to pin 2. The wiring configuration should adhere to the following diagram: That's essentially the entirety of the wiring process. Connect the board to Ethernet and plug it into your PC via USB. Incorporate the provided code and upload it to the Arduino. Now, you're set to commence controlling an Arduino through a web page! You may find it necessary to modify the IP address (I've used 192.168.1.212) to align with your home network's subnet. Apart from this adjustment, no other modifications are required. // The Geek Pub - Controlling an Arduino Pin from a WebPage // Freely distributable with attribution and link to TheGeekPub.com #include "SPI.h" #include "Ethernet.h" byte mac[] = { 0xDE, 0xAD, 0xBE, 0xAD, 0xEE, 0xBE }; //physical mac address byte ip[] = { 192, 168, 1, 212 }; // IP address in LAN – need to change according to your Network address byte gateway[] = { 192, 168, 1, 1 }; // internet access via router byte subnet[] = { 255, 255, 255, 0 }; //subnet mask EthernetServer server(80); //server port String controlString; // Captures out URI querystring;; int blueLEDPin = 2; // pin where our blue LED is connected void setup(){ pinMode(blueLEDPin, OUTPUT); // change pin 2 to OUTPUT pin // Initialize the Ethernet Ethernet.begin(mac, ip, gateway, subnet); server.begin(); } void loop(){ // Create a client connection EthernetClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { char c = client.read(); //read the HTTP request if (controlString.length() < 100) { // write characters to string controlString += c; } //if HTTP request has ended– 0x0D is Carriage Return \n ASCII if (c == 0x0D) { client.println("HTTP/1.1 200 OK"); //send new page client.println("Content-Type: text/html"); client.println(); client.println("<html>"); client.println("<head>"); client.println("<title>The Geek Pub Arduino Ethernet Test Page</title>"); client.println("</head>"); client.println("<body>"); client.println("<img src=\"https://cdn.thegeekpub.com/wp-content/uploads/2018/01/the-geek-pub-big-logo-new.jpg\") style=\"width: 55%; margin-left: auto; margin-right: auto; display: block;\" />"); client.println(" <h1 style=\"color: blue; font-family: arial; text-align: center;\">THE GEEK PUB ARDUINO ETHERNET TEST PAGE</h1> "); client.println(" <h2 style=\"color: green; font-family: arial; text-align: center;\">LED ON/OFF FROM WEBPAGE</h2> "); client.println(" <hr> "); client.println(" <h2 style=\"color: blue; font-family: arial; text-align: center;\"><a href=\"/?GPLED2ON\"\">Turn On The Blue LED</a> - <a href=\"/?GPLED2OFF\"\">Turn Off the Blue LED</a> </h2> "); client.println("</body>"); client.println("</html>"); delay(10); //stopping client client.stop(); // control arduino pin if(controlString.indexOf("?GPLED2ON") > -1) //checks for LEDON { digitalWrite(blueLEDPin, HIGH); // set pin high } else{ if(controlString.indexOf("?GPLED2OFF") > -1) //checks for LEDOFF { digitalWrite(blueLEDPin, LOW); // set pin low } } //clearing string for next read controlString=""; } } } } } Launch a command prompt and enter the command "ping 192.168.1.212" (or your specific IP address). Upon execution, you should observe the following output, confirming that your Arduino is successfully linked to the network: Launch a web browser and enter the URL http://192.168.1.212 (or the address chosen for your network). You will be directed to the following screen: Pressing the "Activate Blue LED" button should illuminate the LED, while pressing "Deactivate Blue LED" should extinguish it. Understanding the Ethernet Shield Web Page Sketch The connectivity of the W5100 Ethernet Shield with the Arduino occurs through the SPI connector, located at the center of the Arduino as a small 4-pin block. Consequently, integrating the Ethernet Shield into your project necessitates the inclusion of both the SPI library and the Ethernet library. #include "SPI.h" #include "Ethernet.h" In the following code segment, the Ethernet shield is configured with a MAC address and an IP address. Additionally, the server is assigned to port 80, the conventional location for web server communication. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xAD, 0xEE, 0xBE }; byte ip[] = { 192, 168, 1, 212 }; byte gateway[] = { 192, 168, 1, 1 }; byte subnet[] = { 255, 255, 255, 0 }; EthernetServer server(80); Subsequently, we require a variable designated for the blue LED pin, in addition to a "control" variable intended for capturing the URI query string data. To activate the LED, we will transmit "?GPLED2ON" to the webpage, while "?GPLED2OFF" will deactivate it. The controlString variable will capture and interpret these commands. String controlString; int blueLEDPin = 2; In the initialization segment of our code, we configure pin 2 as an OUTPUT to supply power to our LED when we set it to a high state. The Ethernet.begin function initializes the Ethernet shield, allocating the predetermined addresses to it. Subsequently, the Server.begin function initiates the web server, enabling it to listen for incoming connections on port 80. pinMode(blueLEDPin, OUTPUT); Ethernet.begin(mac, ip, gateway, subnet); server.begin(); In this concluding section, I won't delve deeply into the process of constructing an HTML page destined for your browser. The basics of HTML lie outside the purview of this tutorial. Essentially, the loop routine is primed to await a command. Upon receiving one, it employs the digitalWrite function to alter the state of the blue LED. Other Ideas for Controlling an Arduino from a Web Page Apart from merely illuminating an LED, the versatility of this technology extends to a multitude of applications. Utilizing a relay enables control over devices requiring higher voltage or current, surpassing the Arduino's capabilities. For instance, one could regulate a pump within a well house. Furthermore, integrating lighting systems facilitates home automation, while managing dust collection systems in woodworking shops. The potential applications for this technology are virtually limitless, spanning across various domains. Wi-Fi Shield Although we discussed the Ethernet shield in this article, it's worth mentioning that Wi-Fi shields are also accessible for remotely controlling an Arduino via a web page wirelessly. This functionality is particularly advantageous for battery-powered projects such as robots and vehicles. ### DC205 – PRECISION DC VOLTAGE SOURCE The DC205 low-noise, high-resolution DC voltage source is the right tool when a precision bias source is needed. Its bipolar, four-quadrant output delivers up to 100 V with 1 µV resolution and up to 50 mA of current. In 4-wire mode (remote sense), the instrument corrects for lead resistance delivering accurate potential to your load. The DC205’s output stability is a remarkable ±1 ppm over 24 hours. With its linear power supply, there is no need to worry about high-frequency noise. Features: ±100 VDC rangeTrue 6-digit resolution1 ppm/°C stability0.0025 % accuracy (1 yr.)Triggerable voltage scansLow-noise designLinear power supplyRS-232, USB and fiber optic interfaces The DC205 low-noise, high-resolution DC voltage source is the right tool when a precision bias source is needed. Its bipolar, four-quadrant output delivers up to 100 V with 1 µV resolution and up to 50 mA of current. In 4-wire mode (remote sense), the instrument corrects for lead resistance delivering accurate potential to your load. The DC205’s output stability is a remarkable ±1 ppm over 24 hours. With its linear power supply, there is no need to worry about high-frequency noise. Read more: DC205 – PRECISION DC VOLTAGE SOURCE ### MICROCHIP MCP2518FD : EXTERNAL CAN FD CONTROLLER WITH SPI INTERFACE The MCP2518FD is a cost-effective and small-footprint External CAN FD Controller that can be easily added to a microcontroller with an available SPI interface. Therefore, a CAN FD channel can be easily added to a microcontroller that is either lacking a CAN FD peripheral or that doesn’t have enough CAN FD channels. The MCP2518FD supports both CAN frames in the Classical format (CAN 2.0B) and CAN Flexible Data Rate (CAN FD) format as specified in ISO11898-1:2015. Conforms to ISO11898-1:2015Supports both CAN 2.0B and CAN FDArbitration Bit Rate up to 1 MbpsData Bit Rate up to 8 MbpsUp to 20MHz SPI Clock SpeedFlexible FIFO Setup31 FIFOs configurable as transmit or receive32  Transmit QueueMisc32-bit Time StampBus Health Diagnostics and Error CountersTemperature Range: -40°C to +150°CPackages: VDFN14 (Wettable Flanks), SOIC14Low Power ConsumptionLow power mode current: 10μA, MaxVDD: 2.7V-5.5VActive Current Max: 12mA @ 5.5V, 40 MHz CAN ClockBuilt-In Safety FeaturesLoopback modeSPI commands with CRC to detect noise on SPI interfaceECC for the SRAM 1 bit correction, 2 bit detection Read more: MICROCHIP MCP2518FD : EXTERNAL CAN FD CONTROLLER WITH SPI INTERFACE ### Exploring Arduino: How it Operates and its Versatile Applications Arduino is an open-source hardware platform consisting of a board equipped with a microcontroller and a development environment (software). It is specifically crafted to simplify the integration of electronics into diverse interdisciplinary projects. Today, we'll delve into understanding Arduino and its defining features. Arduino stands out as one of the most sought-after microcontroller platforms among developers. Unlike Raspberry Pi, Arduino doesn't adhere to a single model; instead, it provides open hardware specifications, allowing various manufacturers to produce their own boards. We'll begin by elucidating the concept of Arduino, highlighting its uniqueness compared to other projects and its potential applications. Subsequently, we'll explore the functioning of Arduino boards, followed by a glimpse into a few sample projects that can be realized using Arduino. What is Arduino Arduino, an open-source electronics development platform, offers a foundation built on free, adaptable hardware and user-friendly software, empowering creators and developers alike. Within this platform, users can fashion various single-board microcomputers tailored to a diverse array of applications, fostering a collaborative community of innovation. To grasp this concept, it's essential to understand the principles of open hardware and open software. Open hardware refers to devices whose specifications and schematics are publicly available, enabling anyone to replicate them. Arduino exemplifies this by providing a foundation for others to develop their own boards, which may vary in design but remain equally functional when built upon the same foundation. Similarly, open software refers to computer programs whose source code is accessible to anyone, allowing for usage and modification by interested parties. Arduino facilitates this through its Arduino IDE (Integrated Development Environment) platform, providing a programming environment where individuals can create diverse applications for Arduino boards, catering to a wide range of needs and purposes. Origin of Arduino project This Arduino initiative originated in 2003 with the aim of simplifying access to and utilization of electronics and programming. It was conceived by several students from the Institute of Interactive Design in Ivrea, Italy. Their objective was to provide electronics students with a more affordable alternative to the widely-used BASIC Stamp boards, which were considerably pricey at the time, making them inaccessible to many. Their diligent efforts resulted in the creation of Arduino, a board equipped with all essential components for interfacing peripherals with the inputs and outputs of a microcontroller. Moreover, Arduino can be programmed on various operating systems including Windows, macOS, and GNU/Linux. This project embodies the philosophy of "learning by doing," emphasizing that practical engagement with the project is the most effective means of learning. How Arduino Works The Arduino board is built around an ATMEL AVR microcontroller, which serves as its core processing unit. Microcontrollers are specialized integrated circuits capable of executing programmed instructions. These instructions, composed using the Arduino IDE programming environment, enable users to develop programs that interact with the board's internal circuitry. Among the widely utilized microcontrollers in Arduino platforms are the Atmega168, Atmega328, Atmega1280, and ATmega8, valued for their simplicity. However, the platform is expanding to include Atmel microcontrollers with 32-bit ARM architecture and Intel microcontrollers. Arduino microcontrollers feature communication ports and input/output ports, facilitating connection with various peripherals. Data from these peripherals is transmitted to the microcontroller for processing. In addition to the hardware, Arduino provides a software ecosystem encompassing a development environment (IDE), tailored to Arduino programming language. This environment offers tools for transferring firmware to the microcontroller and executing the bootloader on the board. The hallmark of Arduino software and its programming language lies in their simplicity and user-friendliness. Arduino aims to democratize interactive project development, offering a straightforward approach accessible to everyone. The process typically involves downloading and installing the IDE, searching online resources for relevant code snippets, and uploading the code to the hardware. Subsequently, users connect peripherals as necessary, enabling software interaction with the hardware. This approach requires minimal financial investment, comprising the cost of the Arduino board and peripherals. Arduino is not confined to a single board model but rather represents a project encompassing various board designs. These boards come in diverse shapes, sizes, and colors tailored to the specific requirements of different projects. They range from basic to advanced, serving purposes like Internet of Things (IoT) applications or 3D printing. The features of these boards vary, influencing their pricing accordingly. Furthermore, Arduino boards incorporate additional components known as Shields or backpacks. These are supplementary boards that interface with the main board to extend its functionality, offering a wide array of features. These include GPS modules, real-time clocks, radio connectivity modules, LCD touch screens, development boards, and various other elements. Dedicated stores often provide specialized sections catering to these items. What is Arduino used for? what you can do if you have Arduino.  Arduino enables the creation of standalone components that connect to devices and interact with both hardware and software. It facilitates tasks such as controlling elements, such as a motor adjusting a blind based on ambient light detected by a connected sensor, or interpreting data from sources like keyboards or web pages to trigger actions like illuminating a light or displaying typed text. With Arduino, automation of various processes is achievable, leading to the creation of autonomous agents, often referred to as robots. Whether it involves controlling lights, devices, or any imaginable task, Arduino-based solutions are viable, particularly in the realm of Internet-connected device development. Arduino technology boasts a steep learning curve, requiring only fundamental programming and electronics knowledge, thereby enabling project development across diverse fields such as Smart Cities, Internet of Things (IoT), wearable devices, healthcare, entertainment, education, and robotics. Importance of Arduino community An essential element contributing to Arduino's success is its vibrant community. This community actively supports development efforts, shares knowledge, creates libraries to simplify Arduino usage, and showcases projects for replication, enhancement, or as inspiration for related endeavors. Below is how the first official Arduino looks like Arduino streamlines microcontroller usage and presents several benefits: affordability, compatibility across multiple platforms, a user-friendly programming environment, free and customizable software via C++ libraries, and open-source hardware. Engaging with Arduino involves navigating various technology concepts initially disparate but integrated within its framework: digital and analog electronics, electricity principles, programming fundamentals, microcontroller operations, signal processing techniques, communication protocols, processor architecture understanding, mechanical aspects, motor control, and electronic board design, among others. Importance of Arduino in the Hardware world Arduino, along with open-source hardware in general, has emerged as a significant player not just within the maker community but also in the hardware manufacturing sector. A comprehensive analysis of the hardware industry's landscape in 2016 can be found at the provided link. This period witnessed a surge in the development of inventive products, accompanied by enhanced tools for prototyping and manufacturing. Accessibility to and familiarity with these tools are progressively becoming widespread. Notably, Arduino, Raspberry Pi, and 3D printers have emerged as prominent tools among this array of resources. Short video on What is Arduino: ### DELTA T31SN 100W DC/DC FAMILY IN COMPACT 1/32 BRICK FORMAT T31SN series of 1/32 Brick, 9~53V input, single output, non-isolated DC/DC converters, are the latest offering from a world leader in power systems technology and manufacturing ― Delta Electronics, Inc. This product family provides up to 100 watts of power or 8A of output current. With creative design technology and optimisation of component placement, these converters possess outstanding electrical and thermal performance, as well as extremely high reliability under highly stressful operating conditions. Peak efficiency of the module is up to 98.0%. The modules operate on an input voltage of 9 to 53V with trimmable outputs of between 3.3V to 16.5V and 5V to 30V As you would expect it meets the latest safety standards of IEC/EN/UL/CSA 62368-1,2nd edition. Options Available Include: Negative or Positive Remote On/OffPower Good SignalsThrough hole pins or SMD pinsOpen frame or Potted version in a standard or flanged case The datasheets include application notes on the implementation of the Power Good signals, output voltage adjustment trimming along with many suggestions regarding production set up. Features High efficiency: 98.0%Industry standard 1/32nd brick form factorFixed frequency operationThermal limit, Input UVLOOutput OCP Hiccup modeOutput voltage trim range: 3.3V to 16.5V, & 5V~30VOutput Remote senseMonotonic start up into normalNo minimum load requirementWorking altitude to 5000m Read more: DELTA T31SN 100W DC/DC FAMILY IN COMPACT 1/32 BRICK FORMAT ### MEET THE TIGARD BOARD; A NEW FT2232H-BASED USB SERIAL ADAPTER/DEBUGGERS SecurityHardware.com is set to take FT2232H-based USB Serial Adapters and Debuggers to the Next Level. The Portland-based company will soon be launching a Crowdfunding campaign for its latest design, an open-source FTDI FT223H-based multi-protocol, multi-voltage hardware hacking device called Tigard. Tigard is a one-stop board for developers looking for something a little more than the average USB-UART debugging tool. Speaking on the idea behind the product, the team behind Tigard said “There are plenty of -232H series breakout boards, but they are generally designed to be an easy way to adapt it to a specific use, and not designed for regularly plugging into all different target systems. The two exceptions are the Exodus Intelligence Hardware Interface Board which is not open hardware or commercially available, and TIMEP which is the origin and heritage of this project.” A look at some of its hardware features: Dual serial interfaces; one completely dedicated to UART, with access to flow control signals and the other shared among dedicated headers for SPI, JTAG, I²C and SWD.Bi-directional level shifters for operations between 1.8 – 5.5VPower supplier switchable between on-board 1.8, 3.3 and 5.0 V and off-board vTarget suppliesSwitch to choose between I²C/SWD and SPI/JTAG operations,Logic analyzer port to quickly access the device-level signals, and,Some indicator lights to help in the debugging process Read more: MEET THE TIGARD BOARD; A NEW FT2232H-BASED USB SERIAL ADAPTER/DEBUGGERS ### LINUX FU: FORWARD TO THE PAST! Ok, so the title isn’t as catchy as “Back to the Future,” but my guess is a lot of people who are advanced Linux users have — at least — a slight interest in retrocomputing. You’d like an Altair, but not for $10,000. You can build replicas of varying fidelities, of course. You can also just emulate the machine or a similar CP/M machine in software. There are many 8080 or Z80 emulators out there, ranging from SIMH to MAME. Most of these will run on Linux or — at the least — WINE. However, depending on your goals, you should consider RunCPM. Why? It runs on many platforms, including, of course, Linux and other desktop systems. But it also will work with the Arduino, Teensy, ESP32, or STM32 processors. There is also experimental support for SAM4S and Cyclone II FPGAs. It’s pretty interesting to have one system that will work across PCs and embedded hardware. What’s more is that, at least on Linux, the file system is directly translated (sort of), so you don’t have to use tricks or special software to transfer files to and from CP/M. It is almost like giving Linux the ability to run CP/M software. You still have to have virtual disks, but they are nothing more than directories with normal files in them. GOALS Of course, if your goal is to simulate a system and you want to have 180 kB floppies or whatever, then the direct file system isn’t a benefit. But if you want to use CP/M software for education, nostalgia, or cross-development, this is the way to go, in my opinion. It isn’t just the file system, either. If you need a quick utility inside your bogus CP/M environment, you can write it in Lua, at least on desktop systems. On the Arduino, you can access digital and analog I/O. Theoretically, you could deploy an embedded Altair for some real purpose fairly cheaply. BUILDING AND RUNNING You must build the project, which varies depending on where you want to target. For Linux, it is easy. Change to the RunCPM directory and type: make posix build Once you have an executable, it will expect to find subdirectories for each disk drive. In addition, user areas are mandatory, so it isn’t sufficient to have disk A. You need disk A/0, A/1, etc. Drive letters can be from A-P and user numbers are from 0-F. In other words, if your executable is at ~/runcpm/RunCPM, you should also have ~/runcpm/A/0 so there’s something in the A drive. You might also want other user numbers and drives (e.g., ~/runcpm/B/4). The GitHub repository has a Zip file with a complete set of programs you can place in the A/0 subdirectory to get started. The author also has a comprehensive set of CP/M programs you can use directly. These are already organized into disks, so just download it to the right place, and you’ve got almost any CP/M application you can imagine. In any event, when you run the program, you’ll see the subdirectories as disks. It is easy to copy things into the disk directories or your regular file system. Just be careful that everything is in uppercase. The shell will shift your input to uppercase, but it won’t shift file names, so if you can’t find a file you know is there, it may be because the file name is in lowercase. Symbolic links work, too. If your memory of CP/M is shaky, here’s a very short reference: Directory: dir Rename file: ren new.txt=old.txt Remove file: era file.txt Switch to disk F: f: Switch to user 4: user 4 Copy file: pip a:copy.txt=p:orig.txt  (or pip a:=p:orig.txt to keep the name) Copy many files: pip a:=p:*.txt Copy files from user 4 to current user (spaces matter): pip a:=p:*.com[G4] Display file: pip con:=afile.txt Exit (specific to RunCPM; needs EXIT.COM): exit LIMITATIONS Obviously, anything that knows about the CP/M disk structure, like MOVCPM or STAT, won’t work right. Anything that cares about terminal manipulation but doesn’t know how to work with a VT100 terminal won’t look right. You can’t use CP/M file attributes. I/O ports don’t exist as CP/M understands them. It would be nice if you could somehow associate CP/M file types to simply execute from the Linux shell, but that’s not how it works. Instead, you must start a CP/M command processor and do it from there. On the other hand, with the submit system and some Lua code, you might be able to work something out. Or, of course, the source code is there, so knock yourself out, and let us know when you do it. You can select several different command processors that allow for different amounts of memory or features. However, many of these present more memory than a real system would probably support. If you were trying to develop for real hardware, this could be a problem. WHY? If you read Hackaday, you probably don’t need to ask why you would want to run a decades-old operating system. You either want ot or you don’t, and there’s no really good answer. I admit that I sometimes fire up Wordstar either to enjoy writing with it, keep my finger memory for its commands alive, or to read some super old document file I produced a very long time ago. There were some excellent Forth systems that still work well. The C compilers are historically interesting, but not great. Using Wordstar or another text editor, you can develop 8080 or Z80 code destined for another piece of hardware efficienctly. Since the file system is transparent, you can even use your favorite code editor like Visual Studio, Vi, or Emacs. So while this isn’t something you’ll probably do every day, it is a very handy way to go back in time and compute like it is 1982. THERE’S MORE We’ve seen plenty of 8080/Z80 simulators, of course. We figure if you are going to emulate, you might as well stick with the Z80. The number of emulators out there is nothing short of staggering. We’ve built one with FABGL on an ESP32. You can even make one in an Arduino shield form factor. Source: LINUX FU: FORWARD TO THE PAST! ### Mastering I2C: Interfacing Arduino Boards for Seamless Communication In this project, we will establish I2C communication between two Arduino boards. Additionally, we will revisit some fundamentals of Arduino I2C communication, serving as a concise recap of what we've previously covered in detail in an earlier Arduino I2C Tutorial. We will explore all three potential scenarios for I2C communication and develop three distinct Arduino projects to encompass each one: 1. I2C Master Transmitter communicating with Slave Receiver 2. I2C Master Receiver receiving from Slave Transmitter 3. I2C Master Transmitting and Receiving bidirectionally with Slave Receiving and Transmitting We will execute these I2C communication projects between two Arduino boards both in simulation and real-life environments to assess their behavior. Without further delay, let's delve into the exploration! I2C Communication Between Two Arduino Boards In an I2C setup, whether a device operates as a Master or Slave, and whether it functions as a transmitter or receiver, is determined by the system designer and programmer. When dealing with just two Arduino boards as I2C devices, the communication pattern becomes one-to-one, forming a Single-Master Single-Slave I2C bus. Consequently, communication between the two Arduino boards can occur in three possible configurations: 1. Master (Tx) → Slave (Rx) 2. Master (Rx) ← Slave (Tx) 3. Master (TxRx) ↔︎ Slave (RxTx) The choice among these configurations depends on the specific requirements of your application. Your selection will dictate the most appropriate form of communication between the Arduino boards. Subsequently, we will demonstrate the implementation of each of these three forms of I2C communication between the two Arduino boards mentioned earlier. A brief use case will accompany each communication type, aiding in making informed design decisions for future projects. Before proceeding with the examples, it is essential to familiarize yourself with the basics of Arduino I2C communication and the utilization of the Wire.h library functions. This knowledge serves as a prerequisite for seamlessly executing the example projects discussed herein. Two Arduino I2C Communication (Master Tx Slave Rx) In this demonstration, we'll create a project where two Arduino Boards communicate via I2C (TWI). One Arduino will serve as an I2C master transmitter, responsible for reading an analog input from a potentiometer and transmitting it to the I2C Slave Arduino board. The second Arduino will operate as an I2C slave receiver, tasked with receiving data from the master device and utilizing it to regulate a PWM output, such as an LED. This setup establishes a unidirectional communication flow from the Arduino acting as the I2C Master Transmitter to the one functioning as the I2C Slave Receiver. Use Case (Scenario) This configuration of I2C communication can prove highly beneficial in various scenarios. For instance, if your Arduino board is already utilizing most of its IO pins for driving outputs such as motors or LEDs, it's prudent to delegate the task of receiving user inputs, like button presses or potentiometer adjustments, to another board. In this setup, the I2C slave receiver device relies on information transmitted by the master device, which reads the user inputs and forwards them to the slave receiver. Consider a scenario where the Arduino board has exhausted its analog input channels, necessitating the connection of a potentiometer to regulate the brightness of an LED controlled via PWM. While alternatives like analog switches or external ADCs could resolve the issue, we'll address it through I2C communication with a separate Arduino board. To tackle this situation, designate the Arduino board requiring additional ADC inputs as an I2C slave receiver. Then, connect another Arduino board to the I2C bus, serving as a master transmitter responsible for reading the potentiometer input and transmitting the results to the slave receiver. This example project will demonstrate precisely this solution. Wiring Below is the schematic diagram illustrating the connections for this example, illustrating how to link the LED output and the potentiometer analog input on both Arduino boards (I2C Master Tx & I2C Slave Rx). Arduino I2C Master Tx Board Code Here is the complete code listing for the Arduino I2C Master Transmitter Board. /* * LAB Name: Arduino I2C Master(Tx) * Author: Khaled Magdy * For More Info Visit: www.DeepBlueMbedded.com */ #include int AN_POT; void setup() { Wire.begin(); // Initialize I2C (Master Mode: address is optional) } void loop() { AN_POT = analogRead(A0); Wire.beginTransmission(0x55); // Transmit to device with address 85 (0x55) Wire.write((AN_POT>>2));// Sends Potentiometer Reading (8Bit) Wire.endTransmission();// Stop transmitting delay(100); } Arduino I2C Slave Rx Board Code Here is the complete code listing for the Arduino I2C Slave Receiver Board. /* * LAB Name: Arduino I2C Slave(Rx) * Author: Khaled Magdy * For More Info Visit: www.DeepBlueMbedded.com */ #include #define LED_PIN 9 byte RxByte; void I2C_RxHandler(int numBytes) { while(Wire.available()) {// Read Any Received Data RxByte = Wire.read(); } } void setup() { pinMode(LED_PIN, OUTPUT); Wire.begin(0x55); // Initialize I2C (Slave Mode: address=0x55 ) Wire.onReceive(I2C_RxHandler); } void loop() { analogWrite(LED_PIN, RxByte); delay(100); Master Code Explanation To begin, it is imperative to incorporate the Arduino Wire.h library to enable the utilization of the I2C communication module. Additionally, we must establish a variable designated to store the analog potentiometer reading, specifically the 10-Bit ADC result. #include int AN_POT; setup() in the setup() function, we’ll initialize the I2C module in master mode (no address is needed). Wire.begin(); // Initialize I2C (Master Mode: address is optional) loop() Within the loop() function, we will continuously retrieve the analog potentiometer value, reduce it to an 8-bit range (1 byte), and transmit it via I2C to the slave device with the address set to 0x55. Subsequently, we will conclude the I2C transaction. This sequence will iterate ten times per second, facilitated by a delay of 100 milliseconds. AN_POT = analogRead(A0); Wire.beginTransmission(0x55); // Transmit to device with address 85 (0x55) Wire.write((AN_POT>>2));// Sends Potentiometer Reading (8Bit) Wire.endTransmission();// Stop transmitting delay(100); Slave Code Explanation Initially, we must incorporate the Arduino Wire.h library to facilitate the utilization of the I2C communication module. Additionally, we need to specify the output PWM pin for the LED and define a variable to store the received data (byte) from the master Arduino board. #include #define LED_PIN 9 byte RxByte; I2C_RxHandler() This function serves as the event handler for receiving data over the I2C bus. It is invoked automatically whenever the device receives data. Within this function, we extract the incoming data byte and store it in a global variable. Subsequently, this stored value is utilized by the main function to configure the duty cycle of the PWM output. void I2C_RxHandler(int numBytes) { while(Wire.available()) {// Read Any Received Data RxByte = Wire.read(); } } setup() Within the setup() function, we'll set the LED output pin mode and initialize the I2C module in slave mode, setting the address to 85 (equivalent to 0x55 in hexadecimal). Additionally, we'll assign the event handler function to the I2C onReceive event. pinMode(LED_PIN, OUTPUT); Wire.begin(0x55); // Initialize I2C (Slave Mode: address=0x55 ) Wire.onReceive(I2C_RxHandler); loop() in the loop() function, we’ll apply the received duty cycle value to the PWM LED output. analogWrite(LED_PIN, RxByte); That concludes the project! You can evaluate the code example for this project using any accessible Arduino simulation environment. Below, I will present the simulation outcomes for this project on TinkerCAD. TinkerCAD Simulation Below is the simulation outcome for this project conducted on the TinkerCAD simulator. You have the option to either run it as it stands or duplicate it, incorporate your own code, and commence the simulation to observe its behavior. You can check this simulation project on TinkerCAD using this link. Testing Results Here is a demo video for testing this project on my two Arduino UNO boards. Two Arduino I2C Communication (Master Rx Slave Tx) In this project example, we aim to enable serial communication between two Arduino boards via I2C (TWI) communication. One Arduino board will assume the role of an I2C slave transmitter, tasked with reading data from 4-DIP switches (digital inputs) and transmitting it to the I2C master receiver Arduino board. Conversely, the other Arduino board will serve as an I2C master receiver. Its responsibility will be to receive the data transmitted by the slave device and utilize it to control a set of output LEDs. This setup constitutes a unidirectional communication flow from the Arduino I2C master receiver to the Arduino I2C slave transmitter. Use Case (Scenario) This particular I2C communication setup can prove immensely beneficial in various scenarios. For instance, when an Arduino board is heavily utilizing its IO pins for driving outputs such as motors or LEDs, there arises a need for another board dedicated to processing user inputs from devices like buttons, potentiometers, or joysticks, and transmitting these readings to the output-driving Arduino board. In this configuration, the I2C master receiver device seeks information from the slave transmitter, which is responsible for reading user inputs and relaying them to the I2C master receiver device. For example, suppose our Arduino board has exhausted its digital IO pins, and we require connectivity for 4 DIP switches to control the On/Off state of 4 LEDs. While solutions like multiplexers or IO expanders could address this issue, an alternative approach involves leveraging I2C communication with another Arduino board possessing available IO pins. The resolution to this scenario involves configuring the Arduino board in need of additional digital input pins as an I2C master receiver. Simultaneously, another Arduino board is connected to the I2C bus, serving as a slave transmitter responsible for reading digital inputs and relaying the results to the master receiver. This example project illustrates precisely how to implement this solution. Wiring Below is the schematic diagram illustrating the setup for this example, detailing the connection of the output LEDs and the 4-DIP switches input on both Arduino boards (I2C Master Rx & I2C Slave Tx). Arduino I2C Master Rx Board Code Here is the complete code listing for the Arduino I2C Master Receiver Board. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 /* * LAB Name: Arduino I2C Master(Rx) * Author: Khaled Magdy * For More Info Visit: www.DeepBlueMbedded.com */ #include #define LED0_PIN 4 #define LED1_PIN 5 #define LED2_PIN 6 #define LED3_PIN 7 byte RxByte; void setup() {   Wire.begin(); // Initialize I2C (Master Mode: address is optional)   pinMode(LED0_PIN, OUTPUT);   pinMode(LED1_PIN, OUTPUT);   pinMode(LED2_PIN, OUTPUT);   pinMode(LED3_PIN, OUTPUT); } void loop() {   Wire.requestFrom(0x55, 1); // Request From Slave @ 0x55, Data Length = 1Byte   while(Wire.available()) {  // Read Received Datat From Slave Device     RxByte = Wire.read();   }   digitalWrite(LED0_PIN, (RxByte&0x01));   digitalWrite(LED1_PIN, (RxByte&0x02));   digitalWrite(LED2_PIN, (RxByte&0x04));   digitalWrite(LED3_PIN, (RxByte&0x08));   delay(100); }   Arduino I2C Slave Tx Board Code Here is the complete code listing for the Arduino I2C Slave Transmitter Board. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 /* * LAB Name: Arduino I2C Slave(Tx) * Author: Khaled Magdy * For More Info Visit: www.DeepBlueMbedded.com */ #include #define BTN0_PIN 4 #define BTN1_PIN 5 #define BTN2_PIN 6 #define BTN3_PIN 7 byte TxByte = 0; void I2C_TxHandler(void) {   Wire.write(TxByte); } void setup() {   pinMode(BTN0_PIN, INPUT_PULLUP);   pinMode(BTN1_PIN, INPUT_PULLUP);   pinMode(BTN2_PIN, INPUT_PULLUP);   pinMode(BTN3_PIN, INPUT_PULLUP);   Wire.begin(0x55); // Initialize I2C (Slave Mode: address=0x55 )   Wire.onRequest(I2C_TxHandler); } void loop() {   byte BtnsData = 0;   BtnsData |= digitalRead(BTN0_PIN) << 0;   BtnsData |= digitalRead(BTN1_PIN) << 1;   BtnsData |= digitalRead(BTN2_PIN) << 2;   BtnsData |= digitalRead(BTN3_PIN) << 3;   TxByte = BtnsData;   delay(10); }   Master Code Explanation First of all, we need to include the Arduino  Wire.h library to use the I2C communication module, define the IO pins for output LEDs, and define a variable to hold the received byte from the I2C slave device that holds the 4-DIP switches states. 1 2 3 4 5 6 7 8 #include #define LED0_PIN 4 #define LED1_PIN 5 #define LED2_PIN 6 #define LED3_PIN 7 byte RxByte;   setup() in the setup() function, we’ll initialize the I2C module in master mode (no address is needed), and we’ll initialize the IO pins used for LEDs as output pins. 1 2 3 4 5 Wire.begin(); // Initialize I2C (Master Mode: address is optional) pinMode(LED0_PIN, OUTPUT); pinMode(LED1_PIN, OUTPUT); pinMode(LED2_PIN, OUTPUT); pinMode(LED3_PIN, OUTPUT);   loop() in the loop() function, we’ll request the 4-DIP switches’ states from the I2C slave device @ the address 0x55. As an I2C master device, we’ll initiate the I2C transaction with the slave device by doing this. After getting the response, we’ll store it in the global RxByte variable. 1 2 3 4 Wire.requestFrom(0x55, 1); // Request From Slave @ 0x55, Data Length = 1Byte   while(Wire.available()) {  // Read Received Datat From Slave Device     RxByte = Wire.read(); }   Next, we’ll parse out the individual bits inside the received byte that represents the 4-DIP switches states and control the output LEDs accordingly. 1 2 3 4 digitalWrite(LED0_PIN, (RxByte&0x01)); digitalWrite(LED1_PIN, (RxByte&0x02)); digitalWrite(LED2_PIN, (RxByte&0x04)); digitalWrite(LED3_PIN, (RxByte&0x08));   Slave Code Explanation First of all, we need to include the Arduino  Wire.h library to use the I2C communication module, define the digital input pins for the DIP switches, and define a variable to send the switches’ state data (byte) to the master Arduino board. 1 2 3 4 5 6 7 8 #include #define BTN0_PIN 4 #define BTN1_PIN 5 #define BTN2_PIN 6 #define BTN3_PIN 7 byte TxByte = 0;   I2C_TxHandler() This is the I2C transmit event handler function which is automatically called whenever the device receives a data request from an I2C master device over the I2C bus. In which, we’ll send out the DIP switches’ states ( TxByte) variable. 1 2 3 4 void I2C_TxHandler(void) {   Wire.write(TxByte); }   setup() in the setup() function, we’ll initialize the digital input pins, and initialize the I2C module in slave mode with ( address=85 or 0x55). We’ll also assign the event handler function to the I2C onRequest event. 1 2 3 4 5 6 pinMode(BTN0_PIN, INPUT_PULLUP); pinMode(BTN1_PIN, INPUT_PULLUP); pinMode(BTN2_PIN, INPUT_PULLUP); pinMode(BTN3_PIN, INPUT_PULLUP); Wire.begin(0x55); // Initialize I2C (Slave Mode: address=0x55 ) Wire.onRequest(I2C_TxHandler);   loop() in the loop() function, we’ll read the digital input pins (DIP switches’ states) and save them into the TxByte global variable which will be sent to the master I2C Arduino board whenever it requests it. 1 2 3 4 5 6 byte BtnsData = 0; BtnsData |= digitalRead(BTN0_PIN) << 0; BtnsData |= digitalRead(BTN1_PIN) << 1; BtnsData |= digitalRead(BTN2_PIN) << 2; BtnsData |= digitalRead(BTN3_PIN) << 3; TxByte = BtnsData;   And that’s it! We can test this project’s code example using any available Arduino simulator environment. Here I’ll show you the simulation results for this project on TinkerCAD. ### BACK TO BASICS WITH A 555 DEEP DIVE Many of us could sit down at the bench and whip up a 555 circuit from memory. It’s really not that hard, which is a bit strange considering how flexible the ubiquitous chip is, and how many ways it can be wired up. But when was the last time you sat down and really thought about what goes on inside that little fleck of silicon? If it’s been a while, then [DiodeGoneWild]’s back-to-basics exploration of the 555 is worth a look. At first glance, this is just a quick blinkenlights build, which is completely the point of the exercise. By focusing on the simplest 555 circuits, [Diode] can show just what each pin on the chip does, using an outsized schematic that reflects exactly what’s going on with the breadboarded circuit. Most of the demos use the timer chip in free-running mode, but circuits using bistable and monostable modes sneak in at the end too. Yes, this is basic stuff, but there’s a lot of value in looking at things like this with a fresh set of eyes. We’re impressed by [DiodeGoneWild]’s presentation; while most 555 tutorials focus on component selection and which pins to connect to what, this one takes the time to tell you why each component makes sense, and how the values affect the final result. Curious about how the 555 came about? We’ve got the inside scoop on that. Source: BACK TO BASICS WITH A 555 DEEP DIVE ### Arduino SoftwareSerial Mastery: Harnessing Multiple Serial Ports Description: This article delves into the Software Serial library, a commonly utilized resource in Arduino programming. It explores its significance in programming for Arduino Uno or Arduino Nano and provides insights into when and why to employ this library. Through the aid of a Proteus simulation, I will elucidate its practical applications, alongside showcasing advanced-level projects where the Software Serial library plays a pivotal role. Software Serial: The Software Serial library functions as a tool that facilitates Serial Communication on digital pins beyond the default Serial Port. With this library, it becomes possible to establish multiple software serial ports, each capable of operating at speeds of up to 115200bps. When and why we need the Software Serial? Depending on your preference, if you opt for the Arduino Mega, the necessity for the Software Serial library is unlikely. This is because the Arduino Mega offers a total of four hardware serial ports, capable of communicating with various devices that support serial communication. With the Arduino Mega, simultaneous communication with up to four serial devices is achievable. In contrast, the Arduino Uno offers only a single serial port, accessible via Pin 0 and Pin 1. Pin0 = RX Pin1 = TX While the default Serial Port of Arduino facilitates connection with only one serial communication supported device, it becomes inadequate when dealing with multiple Serial devices. Consider a scenario where you're working on a project requiring connectivity with two serial devices like GSM Sim900A and a Bluetooth module HC-05 or HC-06, or any other serial device. Although you can connect one of these devices to Arduino's default serial port, the question arises: how do you manage the other serial device? In such situations, the SoftwareSerial library becomes indispensable as it enables the creation of multiple serial ports. Whether you're utilizing Arduino Uno or Arduino Nano, it's essential to refrain from using the default serial port for communication with additional devices, reserving it solely for debugging purposes. Multiple Serial Ports Proteus Simulation: To provide a comprehensive explanation, I will illustrate this using a Proteus simulation. Download the Proteus Simulation: Software Serial As evident, I've established connections between a Bluetooth module and a GSM module with Arduino's pins 2, 3, 7, and 8. Pin 2 and pin 3 are dedicated to the Bluetooth module, while pin 7 and pin 8 are allocated for the GSM module. The default serial port of the Arduino will remain reserved for debugging purposes. Subsequently, I'll proceed to develop a basic program aimed at transmitting text messages through these interfaces. Multiple Serial Ports Arduino Programming using Software Serial Library: // multiple serial ports #include "SoftwareSerial.h" SoftwareSerial blue(2,3) ; // rx , tx SoftwareSerial gsm(7,8); // rx , tx void setup() { Serial.begin(9600); blue.begin(9600); gsm.begin(9600); } void loop() { Serial.println(" message from Computer"); blue.println(" message from bluetooth"); gsm.println(" message from gsm module"); delay(1000); } Multiple Serial Ports Arduino Program explanation: I started off by adding the SoftwareSerial library. #include “SoftwareSerial.h” SoftwareSerial blue(2,3) ; // rx , tx SoftwareSerial gsm(7,8); // rx , tx Defined two Serial ports for the Bluetooth Module and GSM module with names blue and gsm. void setup() { Serial.begin(9600); // activated the serial communication blue.begin(9600);  // activated the serial communication for Bluetooth gsm.begin(9600); // activated the serial communication for GSM you can use different baud rates as per your requirement. } void loop() { The following instructions are used to send messages using the Serial.println(). Serial.println(” message from Computer”); blue.println(” message from bluetooth”); gsm.println(” message from gsm module”); delay(1000); } Upon compiling the code, I copied the link to the hex file and inserted it into the Proteus simulation. By double-clicking on the Arduino component within the Proteus simulation, I accessed the program file text box where I pasted the link. Finally, I clicked on the play button to execute the simulation. As evident, data is transmitted serially to multiple devices that support serial communication. Below are examples of advanced projects that utilize the Software Serial library. ### NRF9160 FEATHER LAUNCHES FOR $99 WITH GPS SUPPORT The nRF9160 Feather by Jared Wolff (aka Circuit Dojo LLC) is an electronics development board, which is a system-in-package part of nRF91 series that enables NB-IoT and eMTC (LTE-M) IoT connectivity, as well as assisted GPS. The package is available in an Adafruit Feather form factor. nRF9160 Feather board supports both CAT M1 LTE and NB-IoT for communication with the outside world, and can be powered by a USB power adapter or a LiPo battery and runs Zephyr OS via the nRF Connect SDK. Specifications for the nRF9160 Feather include: SiP – Nordic Semiconductor nRF9160-SICA LTE-M/NB-IoT/GPS SIP with Arm Cortex-M33 MCU, 1024 KB flash, 256 KB     SRAMStorage – Onboard 4MB NOR flash (note: upgraded from initial 2MB)Cellular Connectivity – LTE Cat-M1 (eMTC) and LTE NB1/NB2 (NB-IoT) plus 4FF SIM card slot, and u.FL connector for an external antennaGNSS – Built-in assisted GPS support plus u.FL connector for an external antennaExpansion – Feather I/Os (12+16 through holes) with digital and analog I/Os, I2C, UART, SPI, RST, 3.3V, VBAT, GNDDebugging & ProgrammerSerial console via micro USB Port connected to onboard USB to serial chipSupport for Jlink and CMSIS-DAP based programmers using a Tag Connect TC2030-CTX-NL over Serial Wire Debug (SWD)Misc – “Uber” low-power RTC, reset button, user buttonPower Supply5V DC via Micro USB port2-pin JST header + charger IC for LiPo battery (300 mAh or more required)Power Consumption – 2µA of current in standby modeDimensions – 50.8 x 22.86 mm (Adafruit Feather form factor)OSHW Certifications – US000664 Read more: NRF9160 FEATHER LAUNCHES FOR $99 WITH GPS SUPPORT ### MEET THE IWAVE TELEMATICS CONTROL UNIT WITH 4G, WIFI AND BLUETOOTH The concept of “a connected car” is no longer a figment of the imagination of movie producers but an everyday reality. Different communication protocols along with data from different sensors are being leveraged across the automotive industry to provide advanced features/services like usage-based insurance to users while monitoring different parameters that indicate the health of the car to ensure safety. There are different approaches/levels to data collection, processing, and automation across the industry. While its factory fitted in-built for some cars, others support add-on systems that are currently regarded as the best route for flexibility. iWave Systems, the company behind the Linux based OBD-II Dongle has been at the forefront of developing telematics solutions for cars for a while, pushing the boundaries of standards across the industry. In line with this, they recently announced a new telematic controller unit. The new TCU comes equipped with 4G, Wi-Fi and BLE communication features that help build a connected network within the vehicle while collecting exhaustive data from its electronic systems and the CAN network in a manner that enables real-time analytics. Aimed at applications like fleet management, light-duty vehicle monitoring, user-based insurance, and many more, the new TCU features a 792MHz ARM Cortex A7 processors which provides an opportunity for real-time Edge Analytics based applications. Read more: MEET THE IWAVE TELEMATICS CONTROL UNIT WITH 4G, WIFI AND BLUETOOTH ### Using Arduino as an ISP: Burning Bootloaders onto AVR Microcontrollers Introduction At times, incorporating AVR microcontrollers into electronic projects becomes necessary. However, beginners might encounter challenges in comprehending the process of uploading or burning code onto an AVR IC. Burning bootloaders onto AVR microcontrollers can be facilitated with the assistance of an Arduino board, particularly when alternative programming hardware is unavailable. Additionally, utilizing Arduino as an ISP proves beneficial for the creation and evaluation of AVR programs. Hence, this article delves into utilizing Arduino as ISP to burn bootloaders onto AVR microcontrollers. To initiate the bootloader burning process, it's crucial to establish the correct connections between the Arduino board and the AVR microcontroller, which is thoroughly discussed in this article alongside detailed, step-by-step instructions. Let's delve straight into the process! Arduino as ISP Bootloader? Arduino boards have the capability to serve as In-System Programmers (ISP) for burning bootloaders onto AVR microcontrollers. Bootloaders, small programs that initiate when a microcontroller starts, enable programming over a serial connection without requiring external programming hardware. To employ an Arduino board as an ISP, it's necessary to upload the ArduinoISP sketch onto the Arduino board. This sketch incorporates the firmware essential for the Arduino board to function as an ISP. Once the sketch is successfully uploaded, the Arduino IDE can be utilized to burn the bootloader onto the AVR microcontroller. Hardware Components To utilize Arduino as an ISP for burning bootloaders onto AVR microcontrollers, you'll need the following hardware components. Arduino ISP Bootloader To employ Arduino as an ISP for burning a bootloader onto an AVR microcontroller, adhere to the provided steps: Schematic Establish connections as per the provided circuit diagram. Installing Arduino IDE Initially, you'll want to download the Arduino IDE software from the official Arduino website. Below is a straightforward, step-by-step tutorial on how to install Arduino IDE. Installing Libraries Before initiating the code upload process, ensure to download and extract the specified libraries to the default location at /Progam Files(x86)/Arduino/Libraries. This step is crucial for integrating the sensor seamlessly with the Arduino board. Below, you'll find a straightforward guide detailing "How to Add Libraries in Arduino IDE." 1. Wire bus 2. Dallas Temperature 3. LiquidCrystal 4. DHT Code Please proceed by copying the provided code and uploading it to the Arduino IDE software. /* Made on 18 may 2021 Home based on Arduino Library */ // ArduinoISP // Copyright (c) 2008-2011 Randall Bohn // If you require a license, see // http://www.opensource.org/licenses/bsd-license.php // // This sketch turns the Arduino into a AVRISP using the following Arduino pins: // // Pin 10 is used to reset the target microcontroller. // // By default, the hardware SPI pins MISO, MOSI and SCK are used to communicate // with the target. On all Arduinos, these pins can be found // on the ICSP/SPI header: // // MISO °. . 5V (!) Avoid this pin on Due, Zero... // SCK . . MOSI // . . GND // // On some Arduinos (Uno,...), pins MOSI, MISO and SCK are the same pins as // digital pin 11, 12 and 13, respectively. That is why many tutorials instruct // you to hook up the target to these pins. If you find this wiring more // practical, have a define USE_OLD_STYLE_WIRING. This will work even when not // using an Uno. (On an Uno this is not needed). // // Alternatively you can use any other digital pin by configuring // software ('BitBanged') SPI and having appropriate defines for PIN_MOSI, // PIN_MISO and PIN_SCK. // // IMPORTANT: When using an Arduino that is not 5V tolerant (Due, Zero, ...) as // the programmer, make sure to not expose any of the programmer's pins to 5V. // A simple way to accomplish this is to power the complete system (programmer // and target) at 3V3. // // Put an LED (with resistor) on the following pins: // 9: Heartbeat - shows the programmer is running // 8: Error - Lights up if something goes wrong (use red if that makes sense) // 7: Programming - In communication with the slave // #include "Arduino.h" #undef SERIAL #define PROG_FLICKER true // Configure SPI clock (in Hz). // E.g. for an ATtiny @ 128 kHz: the datasheet states that both the high and low // SPI clock pulse must be > 2 CPU cycles, so take 3 cycles i.e. divide target // f_cpu by 6: // #define SPI_CLOCK (128000/6) // // A clock slow enough for an ATtiny85 @ 1 MHz, is a reasonable default: #define SPI_CLOCK (1000000/6) // Select hardware or software SPI, depending on SPI clock. // Currently only for AVR, for other architectures (Due, Zero,...), hardware SPI // is probably too fast anyway. #if defined(ARDUINO_ARCH_AVR) #if SPI_CLOCK > (F_CPU / 128) #define USE_HARDWARE_SPI #endif #endif // Configure which pins to use: // The standard pin configuration. #ifndef ARDUINO_HOODLOADER2 #define RESET 10 // Use pin 10 to reset the target rather than SS #define LED_HB 9 #define LED_ERR 8 #define LED_PMODE 7 // Uncomment following line to use the old Uno style wiring // (using pin 11, 12 and 13 instead of the SPI header) on Leonardo, Due... // #define USE_OLD_STYLE_WIRING #ifdef USE_OLD_STYLE_WIRING #define PIN_MOSI 11 #define PIN_MISO 12 #define PIN_SCK 13 #endif // HOODLOADER2 means running sketches on the ATmega16U2 serial converter chips // on Uno or Mega boards. We must use pins that are broken out: #else #define RESET 4 #define LED_HB 7 #define LED_ERR 6 #define LED_PMODE 5 #endif // By default, use hardware SPI pins: #ifndef PIN_MOSI #define PIN_MOSI MOSI #endif #ifndef PIN_MISO #define PIN_MISO MISO #endif #ifndef PIN_SCK #define PIN_SCK SCK #endif // Force bitbanged SPI if not using the hardware SPI pins: #if (PIN_MISO != MISO) || (PIN_MOSI != MOSI) || (PIN_SCK != SCK) #undef USE_HARDWARE_SPI #endif // Configure the serial port to use. // // Prefer the USB virtual serial port (aka. native USB port), if the Arduino has one: // - it does not autoreset (except for the magic baud rate of 1200). // - it is more reliable because of USB handshaking. // // Leonardo and similar have an USB virtual serial port: 'Serial'. // Due and Zero have an USB virtual serial port: 'SerialUSB'. // // On the Due and Zero, 'Serial' can be used too, provided you disable autoreset. // To use 'Serial': #define SERIAL Serial #ifdef SERIAL_PORT_USBVIRTUAL #define SERIAL SERIAL_PORT_USBVIRTUAL #else #define SERIAL Serial #endif // Configure the baud rate: #define BAUDRATE 19200 // #define BAUDRATE 115200 // #define BAUDRATE 1000000 #define HWVER 2 #define SWMAJ 1 #define SWMIN 18 // STK Definitions #define STK_OK 0x10 #define STK_FAILED 0x11 #define STK_UNKNOWN 0x12 #define STK_INSYNC 0x14 #define STK_NOSYNC 0x15 #define CRC_EOP 0x20 //ok it is a space... void pulse(int pin, int times); #ifdef USE_HARDWARE_SPI #include "SPI.h" #else #define SPI_MODE0 0x00 class SPISettings { public: // clock is in Hz SPISettings(uint32_t clock, uint8_t bitOrder, uint8_t dataMode) : clock(clock) { (void) bitOrder; (void) dataMode; }; private: uint32_t clock; friend class BitBangedSPI; }; class BitBangedSPI { public: void begin() { digitalWrite(PIN_SCK, LOW); digitalWrite(PIN_MOSI, LOW); pinMode(PIN_SCK, OUTPUT); pinMode(PIN_MOSI, OUTPUT); pinMode(PIN_MISO, INPUT); } void beginTransaction(SPISettings settings) { pulseWidth = (500000 + settings.clock - 1) / settings.clock; if (pulseWidth == 0) pulseWidth = 1; } void end() {} uint8_t transfer (uint8_t b) { for (unsigned int i = 0; i < 8; ++i) { digitalWrite(PIN_MOSI, (b & 0x80) ? HIGH : LOW); digitalWrite(PIN_SCK, HIGH); delayMicroseconds(pulseWidth); b = (b << 1) | digitalRead(PIN_MISO); digitalWrite(PIN_SCK, LOW); // slow pulse delayMicroseconds(pulseWidth); } return b; } private: unsigned long pulseWidth; // in microseconds }; static BitBangedSPI SPI; #endif void setup() { SERIAL.begin(BAUDRATE); pinMode(LED_PMODE, OUTPUT); pulse(LED_PMODE, 2); pinMode(LED_ERR, OUTPUT); pulse(LED_ERR, 2); pinMode(LED_HB, OUTPUT); pulse(LED_HB, 2); } int error = 0; int pmode = 0; // address for reading and writing, set by 'U' command unsigned int here; uint8_t buff[256]; // global block storage #define beget16(addr) (*addr * 256 + *(addr+1) ) typedef struct param { uint8_t devicecode; uint8_t revision; uint8_t progtype; uint8_t parmode; uint8_t polling; uint8_t selftimed; uint8_t lockbytes; uint8_t fusebytes; uint8_t flashpoll; uint16_t eeprompoll; uint16_t pagesize; uint16_t eepromsize; uint32_t flashsize; } parameter; parameter param; // this provides a heartbeat on pin 9, so you can tell the software is running. uint8_t hbval = 128; int8_t hbdelta = 8; void heartbeat() { static unsigned long last_time = 0; unsigned long now = millis(); if ((now - last_time) < 40) return; last_time = now; if (hbval > 192) hbdelta = -hbdelta; if (hbval < 32) hbdelta = -hbdelta; hbval += hbdelta; analogWrite(LED_HB, hbval); } static bool rst_active_high; void reset_target(bool reset) { digitalWrite(RESET, ((reset && rst_active_high) || (!reset && !rst_active_high)) ? HIGH : LOW); } void loop(void) { // is pmode active? if (pmode) { digitalWrite(LED_PMODE, HIGH); } else { digitalWrite(LED_PMODE, LOW); } // is there an error? if (error) { digitalWrite(LED_ERR, HIGH); } else { digitalWrite(LED_ERR, LOW); } // light the heartbeat LED heartbeat(); if (SERIAL.available()) { avrisp(); } } uint8_t getch() { while (!SERIAL.available()); return SERIAL.read(); } void fill(int n) { for (int x = 0; x < n; x++) { buff[x] = getch(); } } #define PTIME 30 void pulse(int pin, int times) { do { digitalWrite(pin, HIGH); delay(PTIME); digitalWrite(pin, LOW); delay(PTIME); } while (times--); } void prog_lamp(int state) { if (PROG_FLICKER) { digitalWrite(LED_PMODE, state); } } uint8_t spi_transaction(uint8_t a, uint8_t b, uint8_t c, uint8_t d) { SPI.transfer(a); SPI.transfer(b); SPI.transfer(c); return SPI.transfer(d); } void empty_reply() { if (CRC_EOP == getch()) { SERIAL.print((char)STK_INSYNC); SERIAL.print((char)STK_OK); } else { error++; SERIAL.print((char)STK_NOSYNC); } } void breply(uint8_t b) { if (CRC_EOP == getch()) { SERIAL.print((char)STK_INSYNC); SERIAL.print((char)b); SERIAL.print((char)STK_OK); } else { error++; SERIAL.print((char)STK_NOSYNC); } } void get_version(uint8_t c) { switch (c) { case 0x80: breply(HWVER); break; case 0x81: breply(SWMAJ); break; case 0x82: breply(SWMIN); break; case 0x93: breply('S'); // serial programmer break; default: breply(0); } } void set_parameters() { // call this after reading parameter packet into buff[] param.devicecode = buff[0]; param.revision = buff[1]; param.progtype = buff[2]; param.parmode = buff[3]; param.polling = buff[4]; param.selftimed = buff[5]; param.lockbytes = buff[6]; param.fusebytes = buff[7]; param.flashpoll = buff[8]; // ignore buff[9] (= buff[8]) // following are 16 bits (big endian) param.eeprompoll = beget16(&buff[10]); param.pagesize = beget16(&buff[12]); param.eepromsize = beget16(&buff[14]); // 32 bits flashsize (big endian) param.flashsize = buff[16] * 0x01000000 + buff[17] * 0x00010000 + buff[18] * 0x00000100 + buff[19]; // AVR devices have active low reset, AT89Sx are active high rst_active_high = (param.devicecode >= 0xe0); } void start_pmode() { // Reset target before driving PIN_SCK or PIN_MOSI // SPI.begin() will configure SS as output, so SPI master mode is selected. // We have defined RESET as pin 10, which for many Arduinos is not the SS pin. // So we have to configure RESET as output here, // (reset_target() first sets the correct level) reset_target(true); pinMode(RESET, OUTPUT); SPI.begin(); SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); // See AVR datasheets, chapter "SERIAL_PRG Programming Algorithm": // Pulse RESET after PIN_SCK is low: digitalWrite(PIN_SCK, LOW); delay(20); // discharge PIN_SCK, value arbitrarily chosen reset_target(false); // Pulse must be minimum 2 target CPU clock cycles so 100 usec is ok for CPU // speeds above 20 KHz delayMicroseconds(100); reset_target(true); // Send the enable programming command: delay(50); // datasheet: must be > 20 msec spi_transaction(0xAC, 0x53, 0x00, 0x00); pmode = 1; } void end_pmode() { SPI.end(); // We're about to take the target out of reset so configure SPI pins as input pinMode(PIN_MOSI, INPUT); pinMode(PIN_SCK, INPUT); reset_target(false); pinMode(RESET, INPUT); pmode = 0; } void universal() { uint8_t ch; fill(4); ch = spi_transaction(buff[0], buff[1], buff[2], buff[3]); breply(ch); } void flash(uint8_t hilo, unsigned int addr, uint8_t data) { spi_transaction(0x40 + 8 * hilo, addr >> 8 & 0xFF, addr & 0xFF, data); } void commit(unsigned int addr) { if (PROG_FLICKER) { prog_lamp(LOW); } spi_transaction(0x4C, (addr >> 8) & 0xFF, addr & 0xFF, 0); if (PROG_FLICKER) { delay(PTIME); prog_lamp(HIGH); } } unsigned int current_page() { if (param.pagesize == 32) { return here & 0xFFFFFFF0; } if (param.pagesize == 64) { return here & 0xFFFFFFE0; } if (param.pagesize == 128) { return here & 0xFFFFFFC0; } if (param.pagesize == 256) { return here & 0xFFFFFF80; } return here; } void write_flash(int length) { fill(length); if (CRC_EOP == getch()) { SERIAL.print((char) STK_INSYNC); SERIAL.print((char) write_flash_pages(length)); } else { error++; SERIAL.print((char) STK_NOSYNC); } } uint8_t write_flash_pages(int length) { int x = 0; unsigned int page = current_page(); while (x < length) { if (page != current_page()) { commit(page); page = current_page(); } flash(LOW, here, buff[x++]); flash(HIGH, here, buff[x++]); here++; } commit(page); return STK_OK; } #define EECHUNK (32) uint8_t write_eeprom(unsigned int length) { // here is a word address, get the byte address unsigned int start = here * 2; unsigned int remaining = length; if (length > param.eepromsize) { error++; return STK_FAILED; } while (remaining > EECHUNK) { write_eeprom_chunk(start, EECHUNK); start += EECHUNK; remaining -= EECHUNK; } write_eeprom_chunk(start, remaining); return STK_OK; } // write (length) bytes, (start) is a byte address uint8_t write_eeprom_chunk(unsigned int start, unsigned int length) { // this writes byte-by-byte, page writing may be faster (4 bytes at a time) fill(length); prog_lamp(LOW); for (unsigned int x = 0; x < length; x++) { unsigned int addr = start + x; spi_transaction(0xC0, (addr >> 8) & 0xFF, addr & 0xFF, buff[x]); delay(45); } prog_lamp(HIGH); return STK_OK; } void program_page() { char result = (char) STK_FAILED; unsigned int length = 256 * getch(); length += getch(); char memtype = getch(); // flash memory @here, (length) bytes if (memtype == 'F') { write_flash(length); return; } if (memtype == 'E') { result = (char)write_eeprom(length); if (CRC_EOP == getch()) { SERIAL.print((char) STK_INSYNC); SERIAL.print(result); } else { error++; SERIAL.print((char) STK_NOSYNC); } return; } SERIAL.print((char)STK_FAILED); return; } uint8_t flash_read(uint8_t hilo, unsigned int addr) { return spi_transaction(0x20 + hilo * 8, (addr >> 8) & 0xFF, addr & 0xFF, 0); } char flash_read_page(int length) { for (int x = 0; x < length; x += 2) { uint8_t low = flash_read(LOW, here); SERIAL.print((char) low); uint8_t high = flash_read(HIGH, here); SERIAL.print((char) high); here++; } return STK_OK; } char eeprom_read_page(int length) { // here again we have a word address int start = here * 2; for (int x = 0; x < length; x++) { int addr = start + x; uint8_t ee = spi_transaction(0xA0, (addr >> 8) & 0xFF, addr & 0xFF, 0xFF); SERIAL.print((char) ee); } return STK_OK; } void read_page() { char result = (char)STK_FAILED; int length = 256 * getch(); length += getch(); char memtype = getch(); if (CRC_EOP != getch()) { error++; SERIAL.print((char) STK_NOSYNC); return; } SERIAL.print((char) STK_INSYNC); if (memtype == 'F') result = flash_read_page(length); if (memtype == 'E') result = eeprom_read_page(length); SERIAL.print(result); } void read_signature() { if (CRC_EOP != getch()) { error++; SERIAL.print((char) STK_NOSYNC); return; } SERIAL.print((char) STK_INSYNC); uint8_t high = spi_transaction(0x30, 0x00, 0x00, 0x00); SERIAL.print((char) high); uint8_t middle = spi_transaction(0x30, 0x00, 0x01, 0x00); SERIAL.print((char) middle); uint8_t low = spi_transaction(0x30, 0x00, 0x02, 0x00); SERIAL.print((char) low); SERIAL.print((char) STK_OK); } ////////////////////////////////////////// ////////////////////////////////////////// //////////////////////////////////// //////////////////////////////////// void avrisp() { uint8_t ch = getch(); switch (ch) { case '0': // signon error = 0; empty_reply(); break; case '1': if (getch() == CRC_EOP) { SERIAL.print((char) STK_INSYNC); SERIAL.print("AVR ISP"); SERIAL.print((char) STK_OK); } else { error++; SERIAL.print((char) STK_NOSYNC); } break; case 'A': get_version(getch()); break; case 'B': fill(20); set_parameters(); empty_reply(); break; case 'E': // extended parameters - ignore for now fill(5); empty_reply(); break; case 'P': if (!pmode) start_pmode(); empty_reply(); break; case 'U': // set address (word) here = getch(); here += 256 * getch(); empty_reply(); break; case 0x60: //STK_PROG_FLASH getch(); // low addr getch(); // high addr empty_reply(); break; case 0x61: //STK_PROG_DATA getch(); // data empty_reply(); break; case 0x64: //STK_PROG_PAGE program_page(); break; case 0x74: //STK_READ_PAGE 't' read_page(); break; case 'V': //0x56 universal(); break; case 'Q': //0x51 error = 0; end_pmode(); empty_reply(); break; case 0x75: //STK_READ_SIGN 'u' read_signature(); break; // expecting a command, not CRC_EOP // this is how we can get back in sync case CRC_EOP: error++; SERIAL.print((char) STK_NOSYNC); break; // anything else we will return STK_UNKNOWN default: error++; if (CRC_EOP == getch()) SERIAL.print((char)STK_UNKNOWN); else SERIAL.print((char)STK_NOSYNC); } } Working and Testing To begin programming using an Arduino Uno board, navigate to the "tools" menu within the Arduino IDE to select the appropriate board and port settings. We choose “Arduino as ISP” from the “Programmer” section of the same menu. Now, let's insert the provided code. With all preparations complete, we're ready to integrate a microcontroller for burning the bootloader onto it. Here's how we proceed: Begin by navigating to the GitHub link provided and determine the AVR category your microcontroller falls under. For example, ours belongs to the MiniCore group, specifically the Atmega8. Below are the instructions on how to install it. Launch the Arduino IDE and access the "Files" menu. Proceed to select "Preferences" from the dropdown and click on it. Once the preferences window opens, locate and click on "Additional Boards Manager URLs." Paste the previously copied link into this field. Navigate to the "Board Manager" by selecting "Tools" > "Board" > "Board Manager." Allow time for the download to complete. Next, search for "MiniCore" and install it through the manager. Navigate to the "Tools > Board" menu and select the MiniCore icon. From there, choose your desired microcontroller, such as the "Atmega8." At the bottom of the "Tools" menu, locate and click on "Burn Bootloader." Wait for the process to complete; upon successful completion, the message "Done Burning Bootloader" will appear. Once the bootloader has been successfully burned onto your microcontroller, you can proceed to program it using a USB to TTL adapter and the Arduino IDE. Let's upload a simple code to the microcontroller to test its functionality. Utilize the Arduino Board as a USB-to-TTL converter for programming the microcontroller through the RX and TX pins. After setting up the circuit, reconnect the Arduino Board to the computer. In the "Tools" menu, ensure the following settings: Choose "Atmega8" under "Tools" > "Board." Select the appropriate port where the Arduino Uno is connected under "Tools" > "Port." To verify the setup, upload a simple "Blink" code to the Atmega8 microcontroller and observe the results. Below is the code snippet to be copied and pasted onto your microcontroller: void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(8, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(8, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(8, LOW); // turn the LED off by making the voltage LOW delay(100); // wait for a second } By adhering to each step, the LED will initiate its blinking sequence. Feel free to modify the delay time and re-upload the code to confirm proper functionality. ### M5STICKC PLUS ESP32-PICO MINI IOT DEVELOPMENT KIT New M5StickC PLUS, one of the core devices in the M5Stack series, is a mini IoT development board powered by ESP32-PICO-D4 with Bluetooth 4.0 and WiFi.  The M5StickC Plus development board was designed to take away a lot of stress off the development process. What can it do? The M5StickC Plus development board can help you to easily realize your ideas, enrich your creativity, and shorten the time for your IoT prototyping. It was built based on a growing hardware and software ecosystem with quite a number of compatible modules and units that help to maximize every step of the building process. The new M5StickC Plus development board is an upgrade to the original M5StickC, with improvements like a bigger screen of about 18.7% increase (1.14″ 135 * 240 LCD display), a built-in passive buzzer, a battery capacity increase of 25mAh (from 95mAh to 120mAh), a more stable hardware design as well as support for HAT and unit family of products. The M5StickC Plus development board has other rich hardware resources that are also present in the M5StickC like the PMU, IMU, microphone, RTC, LED, infrared, extendable socket, Grove port, wearable and mounted the wall, etc. Key Features/components of the kit and Specifications include: ESP32-based (with all of its features)4 MByte flash memory520KB RAM1.14 inch colorful LCD display with 135 * 240 resolution2.4G 3D antennaBuilt-in Passive BuzzerIR transmitter6-axis motion processing unit (SH200Q)SPM1423 MicrophoneBM8563 RTCAXP192 PMU1x USB Type-C port1x Grove port (12C, I/O, UART) Read more: M5STICKC PLUS ESP32-PICO MINI IOT DEVELOPMENT KIT ### BATTLAB-ONE REPLACE YOUR BATTERY, AND MONITORS YOUR BATTERY LIFE One of the problems developers in the world of IoT devices experience when building battery-powered devices over time is the process of measuring and estimating battery life, which can be very tedious. The process is tedious and cumbersome, with multiple test equipment arrangements to capture current profiles for different firmware states, manual data logging, and spreadsheets for data input and calculations to get to an estimate of battery life for the device under test (DUT). It is also quite hard measuring the amount of energy being consumed by these IoT devices  due to the dynamic nature of the current consumption, with conventional measurement methods like multimeter, and oscilloscope having drawbacks. One method developers use is to use multiple instruments and hand calculations to arrive at an estimate of the energy consumption, but this method could be tasking. One device we have seen that solves this problem is the ZS1100A, which functions by plotting the current consumption vs time very accurately and in great detail, which can be used along with the battery model to estimate the overall battery life. However, Doug Peters has built his own device called the BattLab-One (Battery Laboratory). It is a hardware/software solution that instantly captures insights of your design on battery life. His goal is to deliver a design tool that quickly and effortlessly provides an estimate of battery life and lets him optimize it for his projects, enabling him to spend more time on design and less time on measuring and calculating battery life. Read more: BATTLAB-ONE REPLACE YOUR BATTERY, AND MONITORS YOUR BATTERY LIFE ### How to Integrate ChatGPT into Your Arduino Robot Project A robust natural language processing (NLP) tool, ChatGPT can produce thoughtful, contextually-aware answers to a variety of queries and prompts. OpenAI’s GPT-3.5 architecture, a sizable language model, serves as the foundation for ChatGPT. ChatGPT has several uses, including content production, chatbots, and virtual assistants. This article will demonstrate how to use the Arduino Giga R1 WiFi board and the Arduino IoT Cloud platform to Integrate ChatGPT into Your Arduino Robot Project. By doing this, you will be able to use natural language to interact with your robot and instruct it to carry out various activities including turning, moving, and detecting. An Arduino Giga R1 WiFi board, a potent microcontroller board with integrated WiFi and Bluetooth connection, and a 32-bit ARM Cortex-M4F CPU are required to complete this lesson. A robot chassis kit, which comes with a chassis, wheels, motors, and a battery holder, is also necessary. Any robot kit, such as the Elegoo Smart Robot Car Kit or the SunFounder Smart Video Car Kit, that is compatible with the Arduino Giga R1 WiFi board may be utilized. The Arduino board must be connected to the robot kit using a breadboard and some jumper wires. The Arduino IoT Cloud and the OpenAI API require a PC with internet connectivity as well. Last but not least, to utilize ChatGPT, you’ll need an OpenAI account to get an API key and credits, and an Arduino IoT Cloud account to set up and maintain your IoT devices and dashboards. These accounts may be made on the websites of the relevant platforms. Step 1: Configure the WiFi Board for Arduino Giga R1 There are a few steps you must take to begin integrating ChatGPT with your Arduino. Make sure your Arduino Giga R1 WiFi is configured correctly first. To install the Arduino IDE, board drivers, and necessary libraries, you can adhere to the official instructions found here. Then, use a USB cable to connect your board to your computer. Next, choose the appropriate board and port from the Arduino IDE’s Tools menu. Step 2: Integrate the Libraries and Software You will need to acquire the necessary software and libraries to allow your Arduino gadget to handle JSON data and interface with the ChatGPT API via the internet. These include ArduinoJson, which enables the processing and generation of JSON data on Arduino boards, and ArduinoHttpClient, a library that offers a basic HTTP client for Arduino boards. From the Arduino IDE’s Library Manager, you may install both of them. You also require the OpenAI library, which makes it easier for Arduino boards to use the OpenAI API. You may download this and add it to your Arduino IDE by following the guidelines provided. Step 3: Connect Your Arduino Board to the Robot Kit Proceed to attach your Arduino board to the robot kit using the jumper wires and breadboard. The precise connections may differ based on the robot kit you are using, but the general concept is to attach the motor pins of the robot kit to the digital pins of the Arduino board after connecting the power and ground pins of the Arduino board to the breadboard’s power and ground rails. Digital pins 3, 5, 6, 9, 10, and 11 are examples of pins that enable pulse-width modulation (PWM). For example, the left motor can be linked to pins 3 and 5, and the right motor to pins 6 and 9. It’s also possible to attach any sensors or other parts, including LEDs, infrared sensors, and ultrasonic sensors, that you choose to employ with your robot. For accurate wiring and specifications, be sure to consult the datasheets and instructions included with your robot kit and its components. Step 4: Program Your Arduino Board The code needed to connect your Arduino board to the ChatGPT API and operate the robot should then be programmed into it. Using the code below as a model, you may alter it to suit your requirements and tastes. The code to incorporate ChatGPT into an Arduino robot project is divided into many sections. Global variables for WiFi, OpenAI API, and robot components come first, then include statements to import the required libraries. The board, WiFi, and pins are initialized via the setup function. The loop function parses the data, runs commands, and checks for fresh ChatGPT messages continually. SendPrompt, moveForward, moveBackward, turnLeft, turnRight, halt, and readDistance are some of the functions that manage communication with the ChatGPT API and regulate the movement of the Arduino Robot. The robot can now stop, travel in different directions, and measure distances with the use of an ultrasonic sensor thanks to these features. Source: How to Integrate ChatGPT into Your Arduino Robot Project ### Arduino Uno Projects: Entry-Level Innovations for Beginners The Arduino UNO, developed around the ATmega328P microcontroller, boasts a versatile array of features. With 14 digital I/O pins, including 6 PWM outputs, along with 6 analog inputs and a 16 MHz quartz crystal, it offers ample flexibility for various projects. Additionally, it comes equipped with essential components such as a USB connection, a power jack, an ICSP header, and a reset button, making it a user-friendly, plug-and-play device. Getting started with the Arduino UNO is straightforward. Users can simply connect it to their computer via USB or power it using an AC-DC adapter or battery. Programming the Arduino UNO requires the Arduino IDE, which must be installed on the computer. Once installed, users can write and upload programs effortlessly, as the ATmega328P comes preprogrammed with a bootloader, eliminating the need for an external programmer. This article presents a compilation of Arduino UNO projects tailored for beginners and engineering students, providing a comprehensive resource for exploring the potential of this versatile microcontroller platform. Simple Arduino Uno Projects for Beginners Below are a few intriguing Arduino projects suitable for beginners. After installing the Arduino software IDE, establish a connection between the Arduino UNO board and your computer via USB. Within the IDE, navigate to "TOOLS," then "BOARD," and choose the appropriate board from the dropdown menu. Next, select the port by going to "TOOLS" and choosing the port labeled as "ARDUINO." Arduino Uno Board Blink an LED The necessary hardware components include: 1. Arduino UNO board 2. Breadboard 3. Jumper wires 4. LED 5. 220Ω resistor 6. USB cable Here are the steps to set up the hardware: Step 1: Connect the black jumper wire from the ground pin on the Arduino to row 15 on the breadboard. Step 2: Connect the red jumper wire from pin 13 on the Arduino to column F, row 7 on the breadboard. Step 3: Insert the long end of the LED into row 7, column H on the breadboard. Step 4: Insert the short leg of the LED into row 4, column H on the breadboard. Step 5: Connect one end of the resistor to row 4 in the Ground rail of the breadboard, and the other end to row 4 in column I. After making these connections, proceed with programming the Uno: 1. Open the Arduino IDE. 2. Access the built-in programs by selecting FILE, then EXAMPLES, then BASICS, and finally BLINK. 3. This will open the Blink LED program. 4. Verify the program for any errors by clicking the verify button at the top left of the IDE box. 5. Once the message "Done Compiling" appears, the program is ready for use. Click the upload button to upload the program to the Arduino board. 6. The built-in LED on the Arduino board will flash rapidly for a few seconds, indicating that the program is executing. If there are no errors, the LED on the breadboard will turn on for a second, then turn off for a second, continuing in a loop. By following similar steps and selecting different code options, and customizing the required hardware components, one can work with the Arduino Uno hassle-free. Arduino Uno Test This project offers a straightforward and fundamental electronic endeavor. Utilizing an Arduino Uno, it enables the assessment of the Uno board's functionality by activating an LED directly linked to the board. Designing a Push Button to Turn ON and OFF a LED You can create this straightforward push-button project using an Arduino Uno. The push button switch is employed to toggle an LED, turning it on and off. Designing a Potentiometer to Change the Resistance Values of an LED A potentiometer circuit compatible with an Arduino Uno can be constructed on a breadboard. This straightforward project is designed to regulate LED resistance, allowing for control over the LED's frequency simply by adjusting the knob. LED Scrolling The LED scrolling project described here involves the blinking of six LEDs simultaneously or in a back-and-forth pattern. This circuit design draws inspiration from the iconic Knight Rider show, where a car featured looping LEDs. Arduino to Increase or Decrease the Intensity of the LED This straightforward LED fade project is crafted for use with an Arduino Uno board. Utilizing a PWM pin on this board allows for the modulation of LED intensity, enabling smooth adjustments in brightness levels. Arduino Uno LCD Display Project This project utilizes an Arduino Uno board to create a liquid crystal display (LCD) screen. The display is capable of showcasing text on its surface. With this project, phrases such as "Hello World" can be showcased on the LCD. Additionally, a potentiometer is integrated to allow for contrast adjustment on the display. DC Motor Control This project utilizes an Arduino Uno for controlling the speed of a DC motor. It involves adjusting the motor's speed through a switching transistor. With accurate connections on the breadboard, successful motor rotation can be achieved. Arduino Uno Projects for Engineering Students Below are a collection of Arduino project ideas intended for engineering students to explore and experiment with. Arduino Uno Projects Included in the compilation of Arduino Uno projects for engineering students are the following options. Arduino Uno GPS Tracker Project The implementation of this project involves utilizing an Arduino Uno and GPS technology to monitor vehicle movement. A GSM modem equipped with a SIM card facilitates communication within the system. This setup can be installed within a vehicle, enabling straightforward tracking in case of theft using a mobile phone. Additionally, the application extends to tracking college or school buses for enhanced monitoring and security purposes. Driverless Metro Train Using Arduino-Uno Historically, metro train accidents have been attributed to various factors, including human error by drivers, signal malfunctions, and challenges in manual operation. In response to these issues, a solution has been devised in the form of a driverless metro train, built with Arduino Uno technology. This innovative approach enhances railway network management, mitigating human errors and minimizing power consumption to ensure safety and comfort for passengers during travel. Arduino Uno Project Smart Dustbin The purpose of this project is to create an intelligent waste management system utilizing the Arduino Uno board. It aims to address the issue of overflowing garbage along roadsides, promoting cleanliness and environmental sustainability. The system employs a routing algorithm to optimize garbage collection routes, minimizing the number of vehicles needed for efficient waste disposal. Arduino Uno IR Sensor Project This project involves the manipulation of light-emitting diodes (LEDs) through the utilization of an infrared (IR) sensor in conjunction with a remote control. Upon pressing a button on the remote, an IR signal is emitted and received by the IR sensor in the form of code. Subsequently, the sensor detects and relays this signal to the Arduino for further processing. Arduino Uno Project using Vending Machine The aim of this project is to create a vending machine utilizing Arduino Uno technology, incorporating an RFID system. Upon swiping an RFID tag across the RFID reader, a predetermined quantity of liquid is dispensed. An alphanumeric LCD display is employed to provide instructions and guide users through the liquid dispensing process. This machine finds applications in various settings such as colleges and hospitals, offering automated service to customers without the need for human intervention. Music Instrument using Arduino The objective of this project is to create a musical instrument utilizing Arduino Uno, controllable via hand gestures. Hand gestures are detected using a flick board, enabling recognition in three-dimensional space up to a distance of 15 centimeters. With a simple flick of the wrist, it becomes possible to control various home appliances such as the music system, TV, computer, and more. This project involves designing a musical instrument utilizing an Arduino Uno and Flick. Door Lock based on Fingerprint and Arduino Uno This project entails the creation of a door lock system that utilizes fingerprint recognition. With this system, doors can be unlocked by scanning fingerprints. The purpose of this project is to enhance security by eliminating the need for traditional key-based lock systems, which are prone to vulnerabilities. In this setup, the door unlocks when a fingerprint is scanned on the door lock mechanism. Robot Car The objective of this project is to create a robotic vehicle utilizing Arduino Uno. The vehicle incorporates a DC motor, controlled by Arduino Uno in conjunction with a Motor Driver IC. Home Automation using Arduino Uno The aim of this project is to create a convenient home automation system for controlling household appliances. By utilizing an Android app, a selection of modules, and an Arduino Uno, users can easily manage their electrical devices. This system enables the control of appliances through voice commands via Bluetooth connectivity. Arduino Uno Projects with Sensors Below are discussions on projects involving Arduino Uno and sensors. Thermometer using LM35 Sensor & Arduino Uno Accurate temperature monitoring is crucial in various environments. This data is utilized for temperature regulation in industries, computer CPUs, incubators, and numerous other applications. To achieve this, a properly configured temperature sensor is employed to trigger actions when the ambient temperature surpasses or falls below a set threshold. Hence, the LM35 temperature sensor is employed in the development of the Didactic Thermometer. Arduino Uno & IR Sensor-based Automatic Gate Opener Currently, there has been a surge in the adoption of automation systems. Alongside this trend, automatic gate door opening and closing mechanisms have been introduced. When an individual approaches the gate, it automatically opens upon detecting their presence and closes on its own. This system is suitable for both main gates and car garages. Mini Weather Station The objective of this project is to create a compact weather station utilizing Arduino Uno. The station utilizes a WiFi connection to upload data to the ThingSpeak platform. It gathers various data such as temperature, light intensity, atmospheric pressure, and humidity through distinct sensors. Soil Moisture Sensor using Arduino Uno Within this project, the Arduino Uno board is integrated with a soil moisture sensor. Operating within a voltage range of 2 to 5 volts, this sensor has a detection length of 38mm. Resembling a fork, it can be effortlessly inserted into the soil. Its primary function is to gauge the moisture content of the soil. As the soil moisture rises, so does the analog output voltage. Window Alarm Annunciator The purpose of this project is to create a window alarm system using Arduino Uno. The primary function of the alarm system is to notify operators in power plants and industries about abnormal situations or variations in parameters. Audio Meter using Arduino Uno The objective of this project is to create an audiometer utilizing an Arduino Uno and an LCD display. The audiometer is designed to incorporate a Standard Volume Indicator (SVI) or VU meter, commonly used in audio devices to visualize signal levels. In this system, the Arduino Uno receives input from two channels, representing right and left audio signals, which are then depicted as bars on the display. Analog input pins on the Arduino Uno board are employed to accurately measure the levels of the audio signals in this project. Alarm Clock using Arduino Uno The project involves creating an alarm clock using an Arduino Uno. This straightforward endeavor incorporates an LCD display along with a real-time clock (RTC) module. Designing the entire project can be accomplished by utilizing a prototyping shield in conjunction with a power supply. A piezoelectric buzzer is employed to produce sound during specified time intervals. Wi-Fi Controlled Robot This project involves the creation of a WiFi-controlled robot. Utilizing the ARMA IoT shield and the Blynk App, users can control the robot from anywhere. The Arduino Uno board connects to WiFi via the ARMA IoT shield, enabling control through the Blynk app, compatible with both Android and iOS platforms. GPS Clock using Arduino Uno This project involves creating a clock using GPS technology and Arduino Uno. GPS-enabled clocks offer precise timekeeping and find applications in various public settings such as airports, bus terminals, and train stations. They are particularly valuable in military contexts due to their reliability and accuracy. Below are additional project ideas utilizing Arduino Uno, which can serve as valuable learning experiences for engineering students: 1. Arduino Uno: - Development of a driverless metro train system using Arduino Uno. - Construction of an odometer. - Creation of a color mixing lamp. - Implementation of a Light Theremin. - Design of a keyboard instrument. - Building a Digital Hourglass. - Development of a Collision Avoidance Drone. - Construction of a Snake robot. - Design and implementation of an Arduino-based color sorter. - Creation of an Arduino solar tracker. - Installation of a Fire Alarm system. - Establishment of a Heart rate measuring system using IR sensors and Arduino Uno. - Measurement of power and energy using Arduino Uno. - Development of a high-efficiency dual-axis solar tracking system with Arduino. - Implementation of an intelligent smart home automation and security system using Arduino. - Continuous monitoring of heart rate and body temperature using Uno and Android devices. - Integration of smart farming techniques using Arduino and data mining. - Investigation of simple harmonic motion using Arduino. - Development of an inexpensive LED simulator for vision research using Arduino. - Establishment of wireless RF communication between two Arduino devices. - Creation of an indoor positioning system using visible light communication and ultrasound with Arduino. - Implementation of a smart energy meter for advanced metering and billing using Arduino and GSM. - Design and deployment of a smart RFID security and attendance system with audio acknowledgment using Arduino. - Creation of a low-cost portable oscilloscope based on Arduino and GLCD. - Development of a smart electronic wheelchair using Arduino and Bluetooth. - Design and deployment of a gas leakage monitoring system using Arduino and ZigBee. - Construction of an automated hydroponics nutrition plant system using Arduino Uno controlled by an Android device. - Implementation of an air ventilation system for server room security using Arduino. - Establishment of a Brain-Computer Interface (BCI) using Arduino. - Creation of a surveillance robot using Arduino microcontroller. - Development of an environmental monitoring framework with Arduino-based sensors using a RESTful web service. - Implementation of a real-time battery monitoring system using LabView interface for Arduino. - Creation of a wireless intrusion detection system using IR sensors and GSM with Arduino. Arduino UNO Projects using Ultrasonic Sensor Below is a compilation of Arduino Uno projects that incorporate an ultrasonic sensor. Ultrasonic Sensor 4WD Smart Robot Car This project entails the creation of a Smart Robot Car capable of navigating around obstacles and adhering to specified directions to reach its destination. The car can operate either autonomously or manually through the utilization of a Bluetooth module. The hardware components employed in this project include an Arduino UNO, Dual H bridge motor driver, Ultrasonic sensor, Bluetooth module, Contact avoidance sensor, Line Tracking sensor, and Li-Ion battery. Door Alarm using an Ultrasonic Sensor & Arduino Uno This project aims to create a door alarm system utilizing an ultrasonic sensor, which functions as a distance sensor. The primary role of this sensor is to gauge the distance between an object and the target area. Upon detecting someone within a specified distance, the system triggers a door alarm. Depending on the distance measured, the buzzer will automatically activate or deactivate. Ultrasonic Range Detector This project utilizes an Ultrasonic sensor paired with Arduino to measure distance without relying on a physical ruler. Much like how bats gauge distance through echolocation, this setup emits ultrasonic sound pulses and calculates distance based on the time it takes for the sound to travel to an object and return to the Ultrasonic receiver. Below is a compilation of top Arduino Uno projects: 1. Motion detector camera using Arduino UNO. 2. Smart integrated belt for visually impaired mobility. 3. Trash talker system employing bolt IoT. 4. Door alarm system utilizing ultrasonic sensors. 5. Mini Acoustic Levitation setup. 6. Geiger counter simulator project. 7. Arduino HC-04 and 8×8 matrix MAX7219 project. 8. Water level alert system. 9. Automated clothes and shoe donation machine. 10. Automated ultrasonic car. 11. Arduino Soliton radar implementation. 12. Blind runner alarm - speed measuring device. These projects showcase the versatility and adaptability of Arduino Uno, demonstrating its capability to integrate hardware and software seamlessly. Arduino's open-source nature has made it a preferred platform for both students and professional engineers to explore and implement various technologies, including IoT. How has Arduino helped you bring your ideas to life? ### WiSer wireless serial connectivity system $65 If you are searching for a way to quickly bring wireless convenience to serial connectivity you should deftly check out WiSer which is now available to purchase from the Crowd Supply website priced from just $60. WiSer allows you to establish a wireless, peer-to-peer serial connection between two devices. Debug code, log data, update firmware, or transfer files without the need for cumbersome USB cables, sketchy Wi-Fi routers, or Bluetooth configurations that never quite work right, say it’s developers. In the world of digital connectivity, the ability to link devices without the mess of wires or the headache of complex setups is a significant leap forward. Enter WiSer, a device that’s transforming the way we think about serial connections. This innovative tool offers a wireless solution that does away with the need for physical cables and complicated configurations. With WiSer, users can experience the simplicity of connecting devices with ease, bypassing the need for extra software or drivers. Wireless serial connectivity WiSer stands out as a reliable and efficient choice for those in need of serial communication. It’s compatible with a broad array of devices and operating systems such as Windows, Linux, Mac, and Android. This wide-ranging compatibility means WiSer can be easily integrated into your current system, supporting various terminal applications. Its adaptability makes it suitable for a diverse audience, including developers, engineers, and even hobbyists. One of the most notable features of WiSer is its open-source nature, which allows for customization to fit specific needs. Security is not taken lightly, with AES-CCMP encryption in place to ensure a secure connection that safeguards data during transmission. WiSer’s adaptability is further emphasized by its support for multiple baud rates, data bits, parity types, stop bits, and flow control options, making it a robust tool for communication. The potential uses for WiSer are vast and significant. It can be utilized for tasks such as wireless programming, debugging, remote control, and data logging. The device is designed to be user-friendly, with features like the “FIND PAIR” and “BOOT” buttons that make device pairing and firmware updates straightforward. Moreover, the WiSer-USB and WiSer-TTL modules are designed with practicality in mind, easily fitting into your projects considering their physical dimensions. Features and benefits of WiSer Wireless Freedom: No need to be tethered to the hardware under test Safety Assurance: Electrically isolate your host system from your target device, preventing physical harm or electrical damage Driver-Free Operation: Built-in virtual serial port drivers on all modern operating systems Versatility: Ideal for Raspberry Pi, ESP32, Arduino, and more Programmability: Remote programming for ESP32, Arduino, or any microcontroller with in-system serial programming support Compatibility: Supports standard and custom baud rates up to 921,600 baud Hardware Control: Equipped with hardware flow control for GSM modems, Bluetooth modules, and similar devices WiSer is a versatile and secure solution for wireless serial communication that serves a wide range of needs and user groups. Its ease of use, combined with extensive compatibility and sophisticated features, positions WiSer as an essential tool in the digital connectivity landscape. It’s crafted to boost your projects with increased efficiency, whether you’re a professional or a hobbyist. For more details and full specifications jump over to the official Crowd Supply project page. Source: WiSer wireless serial connectivity system $65 ### Harnessing Monitoring Capabilities: Rasp Pi 3B Network Adapter The Raspberry Pi 3B+ (as well as all other Raspberry Pi models currently available) comes equipped with built-in WiFi functionality. The "wlan0" interface serves as the default connection gateway alongside Ethernet, yet it lacks the capability to enter "monitoring mode." In this guide, we'll demonstrate the steps to ensure that a separate network adapter is capable of monitoring mode and how to activate it. Additionally, we'll delve into the installation and usage of software that leverages this monitoring mode capability, focusing particularly on kismet. Materials/Prerequisites The primary component required is a network adapter capable of monitoring mode and compatible with your Raspberry Pi model. This guide presupposes that you have already installed the requisite drivers, although most network adapters intended for Raspberry Pi should be plug-and-play compatible. Process About Monitoring Mode & Some Useful Commands Monitoring Mode As implied by its name, monitoring mode enables us to utilize the network adapter for observing traffic between devices and the network, rather than functioning solely as a means of connecting to the network. One significant advantage of monitoring mode is its capability to capture packets without needing to be associated with a specific network. To illustrate this concept, consider your phone as your starting point (home) and the wustl-2.0 network as your destination. Just as a traffic camera records your movement from home to destination, a network adapter in monitoring mode similarly observes the flow of data. When your phone transmits packets of information to a network, the network adapter passively detects these packets. For the purposes of this tutorial, it can then record the MAC Address of your phone. lsusb The "lsusb" command provides a list of all devices currently connected to your Pi. Typically, the initial entries represent standard components of the Pi. Following these defaults, you should observe peripherals such as mice or keyboards that have been connected to your Pi. It's crucial to ensure that your network adapter is listed, along with its chipset. If it's not listed, double-check your physical connections. The chipset holds significance as it determines the support for certain functions and whether they are available without additional installations. For instance, if you're using the Alfa AWUSO36NH adapter, the output should resemble the following. The RT2870/RT3070 chipset inherently supports monitoring mode. pi@raspberrypi:~ $ lsusb Bus 001 Device 004: ID 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter '''// Here we can see the network adapter connected. It has a unique ID, the company name, and the chip set''' Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub ifconfig Running the command "ifconfig" will provide you with information regarding your current network setup. While there may be some extraneous details, pay attention to the presence of two interfaces labeled "wlan0" and "wlan1." Typically, these interfaces correspond to your onboard WiFi connection and your network adapter, respectively. pi@raspberrypi:~ $ ifconfig eth0: flags=4099 mtu 1500 ether b8:27:eb:df:15:76 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 172 bytes 13828 (13.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 172 bytes 13828 (13.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 '''// MAKE SURE YOU HAVE SOMETHING LIKE THIS''' wlan1: flags=4163 mtu 1500 unspec 00-C0-CA-97-AD-30-30-30-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC) RX packets 23386 bytes 2945303 (2.8 MiB) RX errors 0 dropped 23386 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlan0: flags=4163 mtu 1500 inet 172.27.163.103 netmask 255.255.255.0 broadcast 172.27.163.255 inet6 fe80::169b:bf52:d27b:bba4 prefixlen 64 scopeid 0x20 ether b8:27:eb:8a:40:23 txqueuelen 1000 (Ethernet) RX packets 854 bytes 929035 (907.2 KiB) RX errors 0 dropped 2 overruns 0 frame 0 TX packets 823 bytes 99410 (97.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 iw dev Using the command "iw dev" provides additional details about your network interfaces. Of particular significance is identifying the physical layer utilized by each interface. Typically, you'll observe "wlan0" associated with "phy0" and "wlan1" associated with "phy1". pi@raspberrypi:~ $ iw dev phy#1 Interface wlan1 '''// MAKE SURE YOU HAVE SOMETHING LIKE THIS''' ifindex 11 wdev 0x100000008 addr 00:c0:ca:97:ad:30 type monitor channel 1 (2412 MHz), width: 20 MHz (no HT), center1: 2412 MHz txpower 30.00 dBm phy#0 Unnamed/non-netdev interface wdev 0x2 addr 7e:c7:45:13:f2:b8 type P2P-device txpower 31.00 dBm Interface wlan0 ifindex 3 wdev 0x1 addr b8:27:eb:8a:40:23 ssid wustl-2.0 type managed channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz txpower 31.00 dBm iw phy phy1 info After establishing the physical layer, we can execute the command "iw phy phy1 info" (assuming our network adapter is linked to phy1). Typically, a network adapter is set to the "managed" mode by default. However, it is important to verify that it supports monitor mode, regardless of any descriptions provided by sellers like Amazon. In the list of supported interface modes, the "monitor" mode should be present. If it is not, you will require a different network adapter. pi@raspberrypi:~ $ iw phy phy1 info Wiphy phy1 max # scan SSIDs: 4 max scan IEs length: 2257 bytes max # sched scan SSIDs: 0 max # match sets: 0 max # scan plans: 1 max scan plan interval: -1 max scan plan iterations: 0 Retry short long limit: 2 Coverage class: 0 (up to 0m) Device supports RSN-IBSS. Supported Ciphers: * WEP40 (00-0f-ac:1) * WEP104 (00-0f-ac:5) * TKIP (00-0f-ac:2) * CCMP-128 (00-0f-ac:4) * CCMP-256 (00-0f-ac:10) * GCMP-128 (00-0f-ac:8) * GCMP-256 (00-0f-ac:9) Available Antennas: TX 0 RX 0 Supported interface modes: * IBSS * managed * AP * AP/VLAN * monitor '''// MAKE SURE YOU SEE THIS''' * mesh point Band 1: Capabilities: 0x17e HT20/HT40 SM Power Save disabled RX Greenfield RX HT20 SGI RX HT40 SGI RX STBC 1-stream Max AMSDU length: 3839 bytes No DSSS/CCK HT40 Maximum RX AMPDU length 32767 bytes (exponent: 0x002) Minimum RX AMPDU time spacing: 2 usec (0x04) HT TX/RX MCS rate indexes supported: 0-7, 32 Bitrates (non-HT): * 1.0 Mbps * 2.0 Mbps (short preamble supported) * 5.5 Mbps (short preamble supported) * 11.0 Mbps (short preamble supported) * 6.0 Mbps * 9.0 Mbps * 12.0 Mbps * 18.0 Mbps * 24.0 Mbps * 36.0 Mbps * 48.0 Mbps * 54.0 Mbps Frequencies: * 2412 MHz [1] (30.0 dBm) * 2417 MHz [2] (30.0 dBm) * 2422 MHz [3] (30.0 dBm) * 2427 MHz [4] (30.0 dBm) * 2432 MHz [5] (30.0 dBm) * 2437 MHz [6] (30.0 dBm) * 2442 MHz [7] (30.0 dBm) * 2447 MHz [8] (30.0 dBm) * 2452 MHz [9] (30.0 dBm) * 2457 MHz [10] (30.0 dBm) * 2462 MHz [11] (30.0 dBm) * 2467 MHz [12] (disabled) * 2472 MHz [13] (disabled) * 2484 MHz [14] (disabled) Supported commands: * new_interface * set_interface * new_key * start_ap * new_station * new_mpath * set_mesh_config * set_bss * authenticate * associate * deauthenticate * disassociate * join_ibss * join_mesh * set_tx_bitrate_mask * frame * frame_wait_cancel * set_wiphy_netns * set_channel * set_wds_peer * probe_client * set_noack_map * register_beacons * start_p2p_device * set_mcast_rate * connect * disconnect * set_qos_map * Unknown command (121) Supported TX frame types: * IBSS: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0 * managed: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0 * AP: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0 * AP/VLAN: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0 * mesh point: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0 * P2P-client: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0 * P2P-GO: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0 * P2P-device: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0 Supported RX frame types: * IBSS: 0x40 0xb0 0xc0 0xd0 * managed: 0x40 0xd0 * AP: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0 * AP/VLAN: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0 * mesh point: 0xb0 0xc0 0xd0 * P2P-client: 0x40 0xd0 * P2P-GO: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0 * P2P-device: 0x40 0xd0 software interface modes (can always be added): * AP/VLAN * monitor valid interface combinations: * #{ AP, mesh point } <= 8, total <= 8, #channels <= 1 HT Capability overrides: * MCS: ff ff ff ff ff ff ff ff ff ff * maximum A-MSDU length * supported channel width * short GI for 40 MHz * max A-MPDU length exponent * min MPDU start spacing Device supports TX status socket option. Device supports HT-IBSS. Device supports SAE with AUTHENTICATE command Device supports low priority scan. Device supports scan flush. Device supports AP scan. Device supports per-vif TX power setting Driver supports full state transitions for AP/GO clients Driver supports a userspace MPM Device supports configuring vdev MAC-addr on create. Enabling Monitor Mode and Configuring Boot Options/WiFi Options Enable Monitor Mode via Command Line If everything has proceeded smoothly up to this point, you should be able to incorporate a monitoring interface without encountering any difficulties. Execute the command "sudo iw phy phy1 interface add mon1 type monitor" to accomplish this task. Verify its success by running "iw dev" once more. pi@raspberrypi:~ $ sudo iw phy phy1 interface add mon1 type monitor pi@raspberrypi:~ $ iw dev phy#1 Interface mon1 '''// YOU SHOULD NOW SEE mon1''' ifindex 6 wdev 0x100000003 addr 00:c0:ca:97:ad:30 type monitor txpower 30.00 dBm phy#0 Unnamed/non-netdev interface wdev 0x2 addr 4a:f1:14:e3:78:a1 type P2P-device txpower 31.00 dBm Interface wlan0 ifindex 3 wdev 0x1 addr b8:27:eb:8a:40:23 ssid wustl-guest-2.0 type managed channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz txpower 31.00 dBm Configure WiFi Network If you've reached this point without encountering significant issues, you're likely in good shape. Your network adapter should support monitoring mode and have successfully entered it. Now, even though the Raspberry Pi likely already configured your WiFi networks automatically, we'll double-check everything to ensure it's functioning properly. To edit the wpa_supplicant configuration file, use the command "sudo nano /etc/wpa_supplicant/wpa_supplicant.conf". If you're unfamiliar with nano, it's a straightforward text editor integrated directly into the command line. The configuration file is located in /etc/wpa_supplicant/ (since we're not currently in that directory), and it's named wpa_supplicant.conf. You should see something similar to the example below. sudo nano /etc/wpa_supplicant/wpa_supplicant.conf Console View of the wpa_supplicant.conf file If you don't find the exact configuration, that's okay. However, if it's empty, it's necessary to include at least one network configuration. Assuming you're a student at WashU, you're familiar with connecting to WiFi using the wustl-key. If you were to connect to a more traditional WiFi network, you might see the key_mgmt set to something like WPA2-psk, and you would need to add another identifier "psk=YOUR_PASSWORD". However, in this case, assuming you're on a WashU network similar to ours, key_mgmt is set to NONE. There are additional options for setting up your WiFi networks, but this is the bare minimum required. To edit the file, simply type to access the configuration file. Once you're done, press ctrl+X to exit, and y to save. Alternatively, you can save by pressing ctrl+O, then exit using ctrl+X. Start Network Adapter in Monitoring Mode on Boot Moving forward, our objective is to ensure that the network adapter enters monitor mode automatically upon every boot on the Pi. To achieve this, we'll be modifying the network interfaces configuration file. It's important to note that this file is sensitive, and any improper modifications may disrupt your WiFi connection. We strongly advise making a backup copy of the file or taking a picture of it before making any changes. To edit the file, you can use the command "sudo nano /etc/network/interfaces". Below, you'll find a sample configuration, though yours may differ significantly. The specific addition required to initiate monitor mode for the adapter is also provided below for reference. sudo nano /etc/network/interfaces # Add these lines to your file allow-hotplug wlan1 iface wlan1 inet manual pre-up iw phy phy1 interface add mon1 type monitor pre-up iw dev wlan1 del pre-up ifconfig mon1 up Console View of the network interfaces configuration file. You may copy the entire thing, but the portion that matters is the python code listed above Exercise caution as you proceed, as these steps involve configuring your WiFi network. Pay close attention to the original setup of your files. While the provided code snippet in the image above should function properly, there's a possibility that it may not align with your specific setup. Additionally, remember that in Python, indentation is crucial. Consistency is key; if you're indenting with two spaces, maintain that formatting throughout your code and avoid mixing tabs. Once completed, you should be able to reboot and verify that your network adapter has successfully booted in monitor mode. reboot pi@raspberrypi:~ $ iw dev phy#1 Interface mon1 ifindex 6 wdev 0x100000003 addr 00:c0:ca:97:ad:30 type monitor txpower 30.00 dBm phy#0 Unnamed/non-netdev interface wdev 0x2 addr 4a:f1:14:e3:78:a1 type P2P-device txpower 31.00 dBm Interface wlan0 ifindex 3 wdev 0x1 addr b8:27:eb:8a:40:23 ssid wustl-guest-2.0 type managed channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz txpower 31.00 dBm Adding Monitoring Tools (Kismet) Up to this point, we've activated monitor mode on the network adapter upon startup. However, how do we exert control over the network adapter to achieve our desired actions? This is where the necessity for monitoring software arises. Among the well-known options are Wireshark and Kismet. Here, we'll focus on the fundamental steps of installing Kismet and setting it up. It's important to note that software evolves, and Kismet's functionality may vary, be updated, or potentially not function at all by the time you encounter this information. For the most current process, refer to external resources provided on this page. Install Dependencies Begin by installing the necessary dependencies for Kismet. These dependencies encompass the libraries or packages essential for Kismet's operation. $ sudo apt install build-essential git libmicrohttpd-dev pkg-config zlib1g-dev libnl-3-dev libnl-genl-3-dev libcap-dev libpcap-dev libnm-dev libdw-dev libsqlite3-dev libprotobuf-dev libprotobuf-c-dev protobuf-compiler protobuf-c-compiler libsensors4-dev Each dependency must be installed sequentially. While the output doesn't require meticulous attention, it's essential to ensure that there are no significant errors or command issues. Additionally, we require a package called python-requests. sudo apt install python python-setuptools python-protobuf python-requests This should cover all your requirements, but there are numerous optional enhancements available. Please refer to the external resource for more details. Download kismet from GitHub & Install Clone the repository by running the following command: ``` git clone https://www.kismetwireless.net/git/kismet.git ``` Navigate into the folder containing the Kismet files and proceed with the configuration: ``` cd kismet ./configure ``` To compile Kismet, you can use the `make` command. Optionally, you can increase the speed of compilation by utilizing multiple CPU cores with the `make -j CORE_NUMBER` command, but be cautious as this may overload your Raspberry Pi and cause crashes. For example, `make -j 4` will utilize all four cores. However, it's advisable to stick to a single core using `make` to ensure stability. Please note that compilation may take a significant amount of time, typically around 30 minutes to 1 hour. If the compilation fails, consider reducing the number of cores and check your RAM allocation if you encounter a virtual memory error. ### BRINGING MODERN TECHNOLOGY TO A SLED Street sledding, a popular pastime in Norway, is an activity that is slowly dwindling in popularity, at least as far as [Justin] aka [Garage Avenger] has noticed. It used to be a fun way of getting around frozen lakes and roads during winter, and while some still have their sleds [Justin] wanted to see if there was a way to revitalize one of these sleds for the modern era. He’s equipped this one with powerful electric turbines than can quickly push the sled and a few passengers around the ice. Since this particular sled is sized for child-sized passengers, fuel-burning jet engines have been omitted and replaced with electric motors that can spin their turbine blades at an impressive 80,000 rpm. The antique sled first needed to be refurbished, including removing the rust from the runners and reconditioning the wood. With a sturdy base ready to go, the sled gets a set of 3D printed cowlings for the turbines, a thumb throttle on the upgraded handlebars, and a big battery with an Arduino to bring it all together. With everything assembled and a sheet of ice to try it out on, the powerful sled easily gets its passengers up to the 20-30 kph range depending on passenger weight and size. There’s a brake built on an old ice skate for emergency stops, and the sled was a huge hit for everyone at the skating pond. There are plenty of other ways to spruce up old sleds, too, like this one which adds a suspension for rocketing down unplowed roads. Source: BRINGING MODERN TECHNOLOGY TO A SLED ### SEGGER EMBEDDED STUDIO V5 MINIMIZES CODE SIZE The newly released SEGGER Embedded Studio V5 for Arm processors comes with the company’s Compiler, Linker, Runtime and Floating-Point libraries included. All components are designed from the ground up for use in embedded systems and work seamlessly to help generate extremely small programs. A program which blinks an LED – a ‘blinky’ – on a typical Cortex-M microcontroller unit can be written in C or C++, with a total size of less than 100bytes. Terminal output (printf) can be done in real time using RTT, SWO or semi-hosting with host-side formatting, keeping even the standard ‘Hello World’ program to no more than a few hundred bytes. Just like SEGGER’s SystemView and Ozone platforms, Embedded Studio can be used on Windows, Linux and macOS operating systems – in keeping with the company’s cross-platform philosophy. “This new version of Embedded Studio is truly groundbreaking. I have never seen a toolchain that produces such small programs, especially out-of-the-box, created by the project generator. Our compiler uses Clang with a new code generator developed directly by the SEGGER software engineering team. In balanced optimization mode, it produces code that is as small as it is fast. Our linker, startup code, runtime library and debugger are all tuned to get the most out of a microcontroller,” said Rolf Segger, founder of SEGGER. “Version 5 outperforms even my own expectations.” Embedded Studio can be downloaded without registration and used free of charge for educational and non-commercial purposes, as well as evaluated (without code size, feature, or time limit) on all platforms. Read more: SEGGER EMBEDDED STUDIO V5 MINIMIZES CODE SIZE ### Arduino IDE 2.3 rolls out with new debugging feature The Arduino development team has recently unveiled the latest version of their Integrated Development Environment (IDE), version 2.3, which brings a host of improvements to the platform. This update is particularly exciting for electronics enthusiasts and professionals alike, as it introduces a stable debugging feature that promises to make coding more reliable and efficient. The Arduino IDE is known for its user-friendly interface and wide adoption among those involved in electronics and programming, and this new release is set to enhance that reputation further.   One of the most notable changes in the Arduino IDE 2.3 is the transition of the debugging feature from an experimental phase to a stable release. This development is significant because it allows users to identify and resolve errors in their code with greater accuracy. Debugging is a critical step in the development process, and having a stable tool integrated into the IDE means that users can now troubleshoot their projects with confidence. The Arduino team has focused on creating a solid foundation with this update, which not only introduces new features but also refines the overall functionality and user experience. Arduino IDE 2.3 The evolution of the debugging tool is a testament to the Arduino team’s commitment to providing valuable resources to developers. It is now based on a standardized framework, which ensures consistency when debugging across different Arduino boards. This standardization is crucial for developers who work with multiple boards and need a reliable tool that can adapt to various environments. In addition to the improved debugging capabilities, the Arduino IDE 2.3 also extends support to the Mbed core. The Mbed core is a framework that supports the infrastructure necessary for debugging, and all Arduino boards that utilize this core are now supported. This means that a wider range of hardware can benefit from the enhanced debugging features. Furthermore, the Arduino team has announced that there will be future support for Renesas-based boards, which will expand the compatibility of the IDE even further. Espressif Collaboration with the open-source community and companies like Espressif is a cornerstone of the Arduino IDE’s development. These partnerships are vital for ensuring that the IDE continues to evolve and meet the needs of its users. As a result of this collaborative approach, future updates to the Arduino IDE will include compatibility with devices such as the ESP32. This is great news for developers who use Espressif’s popular boards, as it will allow them to take advantage of the Arduino IDE’s features and community support. The release of Arduino IDE 2.3 with its stable debugging tool is a significant step forward for developers who rely on the Arduino platform. The move from an experimental feature to a stable release underscores the Arduino team’s dedication to creating a reliable and user-friendly environment for coding and troubleshooting. By embracing open standards and fostering collaboration with the broader open-source community, the Arduino IDE is set to remain an essential tool for developers around the world. This update is sure to be welcomed by the Arduino community and will likely encourage even more innovation and creativity in the field of electronics and programming. For more information jump over to the official Arduino download site. Source: Arduino IDE 2.3 rolls out with new debugging feature ### CUSTOM MULTI-SEGMENT E-INK DISPLAYS FROM DESIGN TO DRIVING With multi-segment displays, what you see available online is pretty much what you get. LEDs, LCDs, VFDs; if you want to keep your BOM at a reasonable price, you’ve pretty much got to settle for whatever some designer thinks looks good. And if the manufacturer’s aesthetic doesn’t match yours, it’s tough luck for you. Maybe not though. [upir] has a thing for custom displays, leading him to explore custom-made e-ink displays. The displays are made by a company called Ynvisible, and while they’re not exactly giving away the unique-looking flexible displays, they seem pretty reasonably priced. Since the displays are made with a screen printing process, most of the video below concerns getting [upir]’s preferred design into files suitable for printing. He uses Adobe Illustrator for that job, turning multi-segment design ideas by YouTuber [Posy] into chunky displays. There are some design restrictions, of course, chief of which is spacing between segments. [upir] shows off some Illustrator-fu that helps automate that process, as well as a host of general vector graphics design tips and tricks. After sending off the design files to Ynvisible and getting the flexible displays back, [upir] walks us through the details of driving them. It’s not as simple as you’d think, at least in the Arduino world; the segments need +1.5 volts with reference to the common connection to turn on, and -1.5 volts to turn off. His clever solution is to use an Arduino Uno R4 and take advantage of the onboard DAC. To turn on a segment, he connects a segment to a GPIO pin set high while sending 3.5 volts out of the DAC output into the display’s common connection. The difference between the two pins is 1.5 volts, turning the segment on. To turn it off, he drops the DAC output to 1.5 volts and drives the common GPIO pin low. Pretty clever, and no extra circuitry is required. This isn’t the first time we’ve seen [upir] trying to jazz things up in the display department. He’s played with masking LED matrix displays with SMD stencils before, and figured out how to send custom fonts to 16×2 displays too. Source: CUSTOM MULTI-SEGMENT E-INK DISPLAYS FROM DESIGN TO DRIVING ### Silicon Labs And Arduino Forge Partnership To Accelerate IoT Development This strategic alliance brings together the best of secure, intelligent wireless technology and open-source hardware and software, promising to set new standards in IoT development efficiency and accessibility. Silicon Labs has announced a strategic partnership with Arduino, this collaboration aims to empower Arduino’s vast community of 33 million developers by facilitating the seamless development of Matter over Thread applications, marking a significant milestone in IoT (Internet of Things) innovation. For the first time, Arduino will offer Matter software libraries, developed in collaboration with Silicon Labs. These libraries are now available on the xG24 Explorer Kit from Silicon Labs and the SparkFun Thing Plus Matter – MGM240P development board, which is based on the xG24. Rob Shane, Vice President of Mass Market Sales and Applications at Silicon Labs, highlighted the synergy between the two companies, noting that this collaboration combines the ease of use and the powerful development environment of Arduino with the advanced security, energy efficiency, and processing power of Silicon Labs-based hardware. The partnership also unveils a treasure trove of resources for developers, including code samples, reference designs, and documentation, all accessible on the Arduino Core for Silicon Labs Devices GitHub page. This initiative is poised to accelerate Matter development for Silicon Labs developers, lowering the barriers to entry and making it easier than ever to create Matter devices. Arduino’s ecosystem, known for its hardware products, software solutions, and cloud services, thrives on its open-source nature and the active participation of its community. Fabio Violante, CEO of Arduino, expressed enthusiasm about the partnership, emphasizing its role in democratizing Matter application development and fostering innovation in the IoT landscape. The collaboration has already shown promising results, with Silicon Labs engineers able to commission new Matter devices within two minutes during internal testing. This efficiency represents a breakthrough in making Matter development more accessible and faster. Looking ahead, the partnership will enter its second phase, focusing on introducing new hardware to the market. A new development board, an addition to the Arduino Nano family, is in the works. This board will incorporate the MGM240 Module from Silicon Labs, featuring the MG24 SoC, and will support Matter, Thread, and Bluetooth® protocols, boasting advanced security and energy efficiency. This partnership aligns with Silicon Labs’ goal of simplifying IoT development, highlighting the company’s commitment to evolving its development tools. The upcoming release of Simplicity Studio 6 will further enable developers to work within their preferred IDEs, streamlining the development process in the ever-growing IoT sector. Source: Silicon Labs And Arduino Forge Partnership To Accelerate IoT Development ### AN APPLE ][ WITH A PENDULUM Clocks are a favourite project here, and we can say we’ve seen all conceivable types over the years. Just a software clock on a retrocomputer perhaps isn’t the coolest among them, but [Willem van der Jagt ]’s Apple][ clock has a little bit extra. It takes its time reference from a real pendulum, on an antique wall clock. A proximity sensor next to a metal pendulum gives an easy way to generate a digital pulse on each pass, but leaves the question of how to transfer it to the computer. With computers of this age the circuitry is surprisingly simple, and in this case he’s sending an interrupt to the machine which the software can pick up for its timing. There is a small logic circuit between the sensor and the interrupt allowing him to gate the pendulum line, triggered from one of the output lines exposed on the Apple’s game port. The code is written in assembly, and counts the number of pendulum swings before incrementing the number of minutes. It’s an enjoyable reminder of the days when the architecture of a computer was this accessible, and for those of us whose past lies in the Sinclair world it’s also been a little peek into something of how the Apple works. We think this is the first pendulum-driven retrocomputer clock we’ve seen here at Hackaday, as you might understand when a clock has a pendulum it’s usually a more traditional design. Source: AN APPLE ][ WITH A PENDULUM ### INTEL BASED 2.4-INCH MINI PC’S “TAKE ON” THE CHUWI LARKBOX Mini PCs are not strange to us, we have been seeing them for a while now. Taiwanese ECS (Elitegroup computer systems) has been offering mini PCs over the years. They recently announced their pocket-sized model the LIVA Q , an upgraded version of Apollo lake SoCS  Which offers a choice of Gemini lake SoCs, a Micro pc that has a number of useful ports: a few USB ports (3.1 and 2.0) on one side, a micro SD card slot on the other side, an HDMI (2.0) and an Ethernet gigabit on the rear side. The resulting micro PC is wonderfully thin, consisting of a 33.4 mm (1.31) “square case of 70 mm (2.76′′) which can still be placed on a monitor ‘s back using the VESA bracket and screws included. Chuwi another company dedicated to bringing top technology to customers all over the world recently designed a smaller Gemini lake mini PC with larkbox mini PC, lark box supports Windows 10 and linux distributions, the company recently upgraded the processor from a Celeron N4100 to a faster Celeron J4115 processor. Despite the invention of the larkbox, Chuwi has announced a smaller version of Micro PC’S, a new 2.4 inch mini PC form factor, called the XCY X51 2.4-inch Mini PC, and GMK has announced the GMK mini PC. We should note that GMK just started operating started in June 2019, and it comprises of R&D and production team which consists of Chuwi, Meizu, Telecast and Alldocube developers. The XCY X51 2.4-INCH Mini PC is similar to the larkbox including having the same 12v/2A power adapter but has a slightly slower 6W Celeron N4100 processor compared to the 10W Celeron j4115 processor,  Although the processor is slower, the former has more RAM ( 8GB vs 6GB)  and a 128GB M.2 SSD instead of 128GB eMMC flash + an empty M.2 SSD socket. The XCY X51 2.4-INCH Mini PC product is available on Aliexpress for approximately $174 with Ali express Standard shipping.Read more: INTEL BASED 2.4-INCH MINI PC’S “TAKE ON” THE CHUWI LARKBOX ### MEMS CLOCK-SYSTEM-ON-A-CHIP SiTime Corporation, a leader in MEMS timing, has announced the launch of the Cascade family of MEMS clock ICs for 5G, wireline telecom and datacentre infrastructure. The SiT9514x clock-system-on-a-chip (ClkSoC) family, consists of clock generators, jitter cleaners, and network synchronizers that are able to deliver multiple clock signals in a system. This family uses SiTime’s recently launched third-generation MEMS resonators that deliver higher performance with lower power. Communications and enterprise electronics have previously used clock ICs with external quartz references to integrate multiple timing functions and to distribute clock signals. SiTime’s all-silicon clock architecture provides more integration by integrating a MEMS resonator reference inside the package. More importantly, the Cascade clock-system-on-a-chip is able to deliver up to 10 times higher reliability and resilience, enabling the 5G vision of zero downtime. Either standalone or together with SiTime’s MEMS TCXOs and OCXOs, the SiT9514x is described as a complete timing solution that’s suitable for applications such as 5G RRUs, small cells, edge computers, switches, and routers. “Our MEMS technology is well suited to solve the difficult timing challenges of emerging 5G infrastructure. This market represents a large growth opportunity for SiTime,” said Rajesh Vashist, CEO of SiTime. “The Cascade family is a natural next step for our timing business, but it also brings us closer to our customers. SiTime’s Cascade devices offer a complete clock-system-on-a-chip, which allows customers to simplify their designs and reduce time to market. As the only provider of MEMS resonators, oscillators, and clock ICs, and delivering system-level benefits to customers, Read more: MEMS CLOCK-SYSTEM-ON-A-CHIP ### KEMET RELEASES NEW TANTALUM POLYMER CAPACITORS KEMET released the Tantalum Stack Polymer (TSP) O 7360-43 and the 82uF/75V rated voltage extension in Polymer Hermetically Sealed. The TSP series was designed to allow for the highest capacitance/voltage (CV) ratings in surface mount device (SMD) capacitors. The company’s KO-CAP® High Reliability Series T540, T541 and T543 are all available for stack configuration in the TSP series. The capacitors allow engineers to customize capacitance, voltage, and low equivalent series resistance (ESR), when stacked. The feature makes TSP suitable for devices using Gallium Nitride (GaN) semiconductor technology, including radar applications based on the Active Electronically Scanned Array (AESA) systems. Per a company press release, a May 2020 report from Yole Développement* said the total defense market for GaN radio frequency (RF) applications is expected to grow at a CAGR of 22% and surpass USD 1 billion in 2025, while the total GaN RF market will reach over USD 2 billion in 2025. The report also states that application in AESA systems for radar and demand for lightweight devices for airborne systems are the main drivers of the GaN RF defense market. Read more: KEMET RELEASES NEW TANTALUM POLYMER CAPACITORS ### Building a DIY Digital Voltmeter with Arduino: A Beginner's Guide Creating a straightforward digital voltmeter with an Arduino and a 16x2 liquid crystal display (LCD) is a straightforward process. Measuring voltages with an Arduino is relatively uncomplicated. The Arduino provides multiple analog input pins that link to an internal analog-to-digital converter (ADC). The Arduino ADC, which is a ten-bit converter, produces output values ranging from 0 to 1023. The analogRead() function allows us to retrieve this value. With knowledge of the reference voltage—in this instance, set at 5 V—it becomes simple to calculate the voltage at the analog input. For showcasing the measured voltage, we'll incorporate a liquid crystal display (LCD) featuring two lines, each accommodating 16 characters. LCDs are commonly employed for data display in various devices such as calculators, microwave ovens, and numerous other electrical appliances. This project will also guide you on measuring voltages surpassing the reference voltage using a voltage divider. Wiring Diagram The 16x2 LCD employed in this experiment is equipped with a total of 16 pins. As illustrated in the table provided, eight of these pins function as data lines (pins 7-14), two are designated for power and ground (pins 1 and 16), three are employed to regulate the LCD's operation (pins 4-6), and one is dedicated to adjusting the brightness of the LCD screen (pin 3). The remaining two pins (15 and 16) are responsible for powering the backlight. Examine the provided diagram below for guidance on connecting the LCD to the Arduino. Take note that the potentiometer links to the 5V source and GND, with its central terminal establishing a connection with pin 3 of the LCD. Adjusting this potentiometer alters the LCD brightness. The four data pins (DB4-DB7) are affixed to Arduino pins 4-7. The Enable (EN) pin connects to pin 9 of the Arduino, while RS is linked to pin 8 of the Arduino. RW is grounded. Additionally, the backlight LED is connected to both 5V and ground. The subsequent table delineates the specific pin connections: | LCD Pin | Arduino Connection | |-----------|---------------------| | Potentiometer (Middle Terminal) | Pin 3 of LCD | | DB4 | Pin 4 of Arduino | | DB5 | Pin 5 of Arduino | | DB6 | Pin 6 of Arduino | | DB7 | Pin 7 of Arduino | | RS | Pin 8 of Arduino | | Enable (EN) | Pin 9 of Arduino | | RW | Ground | | Backlight LED (5V) | 5V | | Backlight LED (Ground) | Ground | For brevity, the shorthand notation for the connections is also presented: - DB4 to pin 4 - DB5 to pin 5 - DB6 to pin 6 - DB7 to pin 7 - RS to pin 8 - Enable (EN) to pin 9 Code The provided program utilizes the LiquidCrystal library, encompassing all essential functions for LCD writing. Within the loop, the analog input is read, and given the 5V reference voltage, the program multiplies the analog value by 5 and divides it by 1024 to derive the actual voltage. Subsequently, this calculated voltage value is then written to the LCD. The accompanying photo displays a standard representation of the output on the LCD. #include "LiquidCrystal.h" LiquidCrystal lcd(8, 9, 4, 5, 6, 7); float input_voltage = 0.0; float temp=0.0; void setup() { Serial.begin(9600); // opens serial port, sets data rate to 9600 bps lcd.begin(16, 2); //// set up the LCD's number of columns and rows: lcd.print("DIGITAL VOLTMETER"); } void loop() { //Conversion formula for voltage int analog_value = analogRead(A0); input_voltage = (analog_value * 5.0) / 1024.0; if (input_voltage < 0.1) { input_voltage=0.0; } Serial.print("v= "); Serial.println(input_voltage); lcd.setCursor(0, 1); lcd.print("Voltage= "); lcd.print(input_voltage); delay(300); } Videos Source: Building a DIY Digital Voltmeter with Arduino: A Beginner's Guide ### MEMS ANALOG MICROPHONE SPORT HIGH DYNAMIC RANGE, LOW POWER CONSUMPTION TDK  introduces the InvenSense ICS-40638 MEMS analog microphone. The ICS-40638 microphone offers an ultra-high Acoustic Overload Point (AOP) of 138 dB Sound Pressure Level (SPL), exceptionally efficient 170 µA low power operation and high Signal to Noise Ratio (SNR) of 63 dB in a small 3.5 mm x 2.65 mm x 0.98 mm bottom port surface‐mount package. The analog MEMS microphone is equipped with high dynamic range, operates up to 105°C, and is designed for IoT and consumer devices. The new ICS-40638 microphone is ideal for wearable and IoT applications, particularly in outdoor, industrial or harsh environments, where high temperature and high acoustic overload points present system design challenges. The ICS-40638 includes a MEMS microphone element, an impedance converter, and a differential output amplifier. Other high‐performance specifications include a tight ±1 dB sensitivity tolerance and enhanced immunity to both radiated and conducted RF interference. The part is ideal for noise-canceling applications in challenging environments. Read more: MEMS ANALOG MICROPHONE SPORT HIGH DYNAMIC RANGE, LOW POWER CONSUMPTION ### Arduino's Dynamic Drive: Exploring 6 Projects with Motor Magic Choosing the Right Arduino Motor This guide on Arduino motors aims to provide fundamental information essential for selecting a motor for your project. If you've been engaged in DIY electronics for some time and feel confident in your skills, you might be seeking a more challenging and rewarding experience by venturing into larger, more sophisticated inventions. In the realm of advanced projects, creations powered by motors, such as Arduino-based robots, are frequently favored due to their inherent awesomeness. There exists a wide array of Arduino motors, each possessing distinct strengths and weaknesses. Consequently, not every motor proves ideal for every task, as certain types excel in specific areas but may fall short in others. In this exploration, we delve into various types of electric motors commonly encountered in the realm of electronics. We provide insights on how, when, and where to deploy a particular motor, ensuring that you always have the most suitable equipment for your project based on its specific requirements. Additionally, for creative inspiration, we briefly showcase some motorized builds we've assembled, offering a glimpse into their functionality. This demonstration aims to spark your creativity and provide a practical understanding of the motors under consideration. If you're an aspiring creator seeking comprehensive insights into Arduino motor systems to elevate your projects, you've found the perfect resource to guide you on your journey. Arduino Motor Types Servo Motors Servo motors stand out as one of the most favored motor types employed by hobbyists engaged in Arduino projects, seeking precise motor control functionalities. Their widespread appeal can be attributed to the remarkable versatility inherent in servo motors. Essentially, a servo motor is a concise term denoting a standard DC motor linked to a position feedback sensor and a compact control board. This integrated design facilitates effortless motor control directly from the Arduino using a PWM (Pulse Width Modulation) signal. Hobbyists greatly appreciate servo motors due to their user-friendly nature and seamless integration with Arduino, allowing for straightforward control right from the start. Beyond the realm of hobbyist projects, servo motors have garnered significant usage in modern industries, especially within robotics. In the field of robotics, these motors have proven exceptionally adept at delivering precise motor control, serving applications ranging from intricate movements in robotic limbs to the operation of mechanized prosthetics utilized by individuals with limb amputations. How it works In broad terms, a servo motor can function as either a linear or rotary actuator, exhibiting precise control over linear or angular motion. Rather than being a standalone motor type, it is a composite system that integrates a motor, control circuit, and a sensor for positional feedback into a cohesive operational unit. Servo motor control While certain servos are engineered to respond to analog signals, those prevalent in hobbyist markets are typically PWM-controlled servos specifically crafted for compatibility with microcontrollers. The Arduino, referred to as the indexer in the control circuit, regulates the sequence of electrical impulses directed to the motor through an amplifier with the assistance of a motor driver/amplifier. Pros Servos exhibit remarkable versatility and are easily controllable and programmable through digital output. They boast high precision, eliminating the need for control loop computations. Furthermore, they come in various variants, offering additional functionalities, including enhanced rotational control. Cons Elevated power consumption Tends to have a higher cost compared to basic motors Due to widespread use and increased expenses, numerous servos with plastic gearing are accessible at considerably lower prices. Nevertheless, these are unsuitable for heavy loads or prolonged use, and they are susceptible to becoming stripped (losing teeth over time). DC Motors Although somewhat outdated, the conventional Direct Current (DC) brushed motor stands out for its simplicity. It is uncomplicated to assemble and cost-effective to manufacture, making it a ubiquitous choice for various applications requiring electric motors. How it works The DC brushed motor comprises an arrangement of conductive windings, with an odd number of them encircling a central axle to which the commutator is affixed. Surrounding this assembly are two magnets with opposing polarities. When the windings receive energy and become charged, they are drawn toward the outer assembly, inducing rotation. The charge state undergoes modification as the brushes make contact with the commutator. This alteration enables the windings to persistently experience attraction toward the outer assembly, facilitating continuous motor rotation as long as power is supplied. DC motor control Controlling basic motors is inherently straightforward. Manipulating the power variables, such as increasing voltage to adjust the motor's rotational speed (RPMs) or amperage to influence torque, offers a simple means of control. Reversing the motor's direction is as uncomplicated as switching the polarity of the motor contacts. In applications that demand enhanced precision, DC brushed motors can be coupled with a device known as a wheel encoder or rotary encoder. These devices possess the capability to accurately detect and measure the angular position of a motor's axle. Subsequently, the microcontroller interprets the output signal, transforming it into digital information. This data proves valuable in determining the motor's location, speed, and acceleration, contributing to more intricate control in contemporary applications. Pros Robust torque Straightforward assembly and user-friendly control Exceptionally cost-effective production Cons The longevity of brushes diminishes due to wear and tear. Extended operation at higher RPMs may result in brush heating and motor damage. Minimal electromagnetic interference on radio frequencies necessitates increased computation for closed-loop control. Stepper Motor Differing from the typical DC motor, the stepper motor becomes the preferred option when precise and controlled movements are essential, surpassing the capabilities of a standard motor. These motors are frequently employed in the printing sector and find applications in straightforward robots, such as factory robot arms tailored for specific tasks. How does this motor work In contrast to other motors that offer continuous rotation during operation, stepper motors are engineered to move a specific number of 'steps' at a designated speed when activated. Each activation of the motor supplies sufficient power for a single step. The precision of each individual 'step' reflects the overall accuracy capacity of the motor. Stepper motor control In contrast to other types of motors, stepper motors are specifically crafted to leverage sophisticated electronics for precise motor control. To harness their intricate capabilities, stepper motors necessitate a dedicated driver circuit. This circuit facilitates the connection of the stepper motor to a control system, such as an Arduino, enabling effective regulation of power to the motor. Pros Exceptionally precise operational control Ease of construction and dependability Elevated torque - applicable to specific cases Control without feedback loop Cons Specialized application Demands a sophisticated control system for optimal functioning Brushless Motor A progression from traditional brushed motors, brushless motors are rapidly gaining favor among hobbyists and enthusiasts due to their significant potential and enhanced reliability compared to their predecessors. Similar to brushed motors, they offer substantial torque and can operate consistently at high RPM. The versatility of brushless motors makes them highly adaptable, making them an excellent choice for Arduino Motor applications, and they are especially favored by individuals constructing RC cars or drones. How it works The brushless motor operates by utilizing alternating current to induce opposing charges between the windings and the magnets located on the outer assembly. In this configuration, only the outer assembly connected to the axle undergoes rotation. The advantage of having a solitary moving component, coupled with the elimination of contact brushes, results in several benefits for brushless motors, including enhanced energy efficiency, prolonged operational lifespans, seamless transfer of mechanical energy to the axle, and reduced friction. Brushless motor control Despite being more challenging to manage compared to basic brushed motors, advancements in modern technology have significantly simplified the control of brushless motors through computer interfaces. Hall effect sensors, capable of detecting alterations in magnetic fields and converting them into digital information, are commonly employed in conjunction with brushless motors to monitor and regulate their output. This parallels the way wheel encoders are utilized with brushed motors. Pros Extended Durability High Reliability Due to a Single Moving Component Low-Friction Design Ideal for Prolonged Operation at High Speeds Energy-Efficient Configuration Cons Necessitates dedicated control systems To achieve optimal motor performance, the incorporation of a gearbox is essential for regulating power delivery. Parameters for choosing an Arduino motor Selecting the appropriate motor for your project is typically contingent on the nature of the project you are aiming to construct and the specific performance criteria that will define the optimal motor for your needs. Three key parameters, interdependent with each other, must be carefully considered when making the decision on the suitable motor for our project. Torque While we won't delve into complex mathematics and physics in this article, it's essential to grasp the significance of your motor's torque rating and how it shapes your decisions when selecting a motor for your projects. This understanding ensures that you choose a motor that adequately meets your needs or expectations. In simpler terms, a motor's torque rating denotes the rotational force it can exert on a load. Torque is calculated using a straightforward formula: \[ \text{Torque} = \text{Distance from axis of rotation} \times \text{Force} \] To illustrate how torque influences creations, consider another realm where torque plays a crucial role—the automotive sector. In scenarios like ascending hills or steep roads, an engine with a high torque rating is preferred because it can exert greater force on the load (the vehicle). This capability allows the vehicle to ascend the hill even at low speeds or from a standing start. Maintaining a high torque rating is crucial for sustaining the rapid rotational speed of a motor, especially in applications such as drones. A motor with a high torque rating possesses the capability to swiftly alter RPM values, contributing to smoother and more responsive performance in an electric vehicle utilizing such a motor. For those seeking high torque options, standard DC brushed motors are cost-effective but have a shorter lifespan and require more maintenance. Alternatively, a pricier but more reliable and energy-efficient option is the DC brushless motor. It is essential to align your motor's torque rating with the specific requirements of your creation to ensure prolonged operation. A torque rating that is too low renders your creation inoperable, while an excessively high torque rating could induce mechanical stress during operation. Although the risk of catastrophic failure due to excessively high torque ratings is minimal in DIY electronics, it can lead to accelerated wear of components and shorten the operational lifespan of your innovative creation. Voltage - Velocity/RPM In this context, Velocity refers to the speed of rotation of the electric motor, measured in revolutions per minute (RPM). Alongside torque, these two factors significantly impact motor performance. To simplify, a motor with high torque excels in moving heavier loads at a slower speed, while a drive system with high RPM allows for faster speeds at the expense of overall load-carrying capacity. When integrating an Arduino motor into your project, it's crucial to consider your power supply, whether from a wall outlet or batteries, and ensure that the motor voltage requirements are met for optimal performance. For more advanced builders, incorporating a gearbox—similar to those found in conventional cars—enables motors to operate effectively in both scenarios as needed. As experienced drivers know, lower gears provide ample torque for initial movement, but shifting quickly to higher gears is necessary to maintain acceleration. Attempting to start in a high gear without sufficient torque or inertial momentum, such as 4th or 5th gear in a manual transmission, demonstrates how high RPM alone won't propel you swiftly. In general, a brushless motor stands out as an excellent choice for those seeking reasonable torque, along with reliability and energy efficiency even at higher RPMs, without the added weight and complexity of a gearbox. Current/Amperage When selecting an electric motor, it is crucial to choose one that can deliver the required power while staying within acceptable power consumption limits. The power (wattage) of a motor is determined by multiplying volts and amps. Voltage influences a motor's RPM, and a higher amp rating is necessary to enhance torque. While a powerful motor with high voltage and amp ratings may be suitable for certain applications, it results in heavier power load requirements. While this may not significantly impact projects relying on power from wall sockets, considerations for motor requirements become vital in portable projects like unmanned vehicles, robots, and wearables. In such cases, the batteries powering the project must be configured to deliver sufficient power. Hence, smaller, lighter, and more efficient motors are preferred when developing portable electronics to minimize both power consumption and weight (of the motor and the required power source). Selecting the right motor involves numerous factors, but a solid understanding of these three primary criteria should guide you effectively. Although, in theory, any electric motor can be adapted for various functions with ingenuity, you should now possess the knowledge to choose the optimal motor or motors that suit your project best. In the subsequent section, we will explore the practical applications of some of the motor types discussed earlier, featuring a few projects assembled at circuito.io. Arduino Motor project examples At circuito.io, we are constantly working on intriguing projects, and in this section, we aim to spotlight a selection of our Arduino motor projects that leverage various motor types. These projects serve as exemplary demonstrations of the diverse capabilities associated with each motor. Each project title is hyperlinked to its respective page, providing you with the opportunity to delve into the details of how to manipulate different motors. Additionally, you can access the link to our builder tool, enabling you to modify one of our showcased projects or seamlessly craft your own from the ground up with speed and simplicity. Arduino Motor Project #1: IoT Pet Feeder Managing the task of an internet-enabled pet feeder was ideal for a single servo motor, given the limited rotational range required to dispense food. Employing the servo motor in this context emerged as an economical, space-efficient, and user-friendly solution, devoid of the need for supplementary components. With minimal power requirements, this setup ensures reliability, making it suitable for prolonged use. Arduino Motor Project #2: Line Follower In the construction of the line follower robot, we employed two standard DC brushed motors. The choice of brushed motors proves advantageous when assembling compact wheeled robots like this one due to their provision of high torque, ease of control, and cost-effectiveness. Given the small size and light weight of the robot, the energy efficiency gained from transitioning to a brushless DC motor is not particularly necessary. The addition of gears is essential for this project to transform the DC motor's speed into torque. Utilizing a DC motor makes coding relatively straightforward, and both acceleration and speed are easily regulated. However, a separate drive system must be devised to interpret commands from the Arduino and convert them into electrical impulses, known as a DC motor driver. Additionally, incorporating a rotary encoder or a similar device may be necessary to convert motor feedback into digital information, allowing the Arduino to monitor its own position and progress. ### GIVE YOUR PROJECTS A RETRO TINT WITH THIS 8051-BASED ARDUINO UNO Most of us are familiar with the Arduino Uno, a starting place for electronics projects since 2010. But what if the Arduino Uno was released in 1980? You’d probably get something like [ElectroBoy]’s 8051-based Arduino Uno. The Arduino Uno-compatible board has an MCS-51 (often called 8051 instead) instead of the usual ATmega328P/ATmega168. Specifically, [ElectroBoy] uses the AT89S52. Like the ATmega microcontrollers, the AT89S52 has an 8-bit CPU with a Harvard architecture and very similar GPIO capabilities. Unlike the ATmega, however, the original MCS-51 has a CISC CPU (as opposed to ATmega being RISC) and a release date about 36 years earlier. The board itself also has some differences from the original Arduino Uno. First of all, it has a USB type-C port, which is definitely a bonus. Secondly, it’s simpler: No USB-UART (which also means no USB programming), a different pin layout (Arduino shields likely won’t fit) and more I/Os than the ATmegas have. Sure, it’s not as practical as an actual Arduino Uno, but it’s definitely cool for our retrocomputing nerds Source: GIVE YOUR PROJECTS A RETRO TINT WITH THIS 8051-BASED ARDUINO UNO ### ALTOIDS TIN KEYBOARD IS A BREATH OF FRESH AIR Well, here’s a fresh idea! [flurpyflurples] is back from hiatus with the Mintboard, a 40% that fits inside of an Altoids tin. Who could ask for more than a rugged little Bluetooth keyboard with a built-in cover that fits in your pocket? This build started with meticulously measuring the tin to figure out what kind of switches could be used. At first, this was going to be a 60% keyboard, but after a lot of design decisions and switch comparisons, [flurpyflurples] settled on a certain micro switch spaced at 7.3mm for a 40% layout. Then it was time to design a PCB. Although [flurpyflurples] tends to use Arduino Pro Micros in their builds, they went with the Nice! Nano this time for the Bluetooth capabilities. This means that they had to program it with ZMK instead of QMK, but found that QMK knowledge transfers rather nicely. Let’s talk about those lovely legends. The keycaps are 3D printed of course, and the legends were cut out on a Cricut machine. The best part is that sealant — [flurpyflurples] used a few drops of UV nail polish top coat and cured it with light. We think this looks and sounds fantastic, and would really like to know how to get such clean cutouts. According to [flurpyflurples] and the end of the build/demo video you’ll find below the break, the action is a lot like a Blackberry keyboard. Source: ALTOIDS TIN KEYBOARD IS A BREATH OF FRESH AIR ### From Arduino to Atmega32: A Programmer's Journey with ISP  A discourse of “embedded systems” Whether you are cognizant of it or choose to overlook this undeniable fact, you are either in possession of or have utilized an electronic device. This could range from a phone, an ATM machine, a radio, a laptop computer, a gaming console, a smart TV, a smart card reader at the supermarket, or a microwave oven, among others. What ties them all together is the presence of a computer within their confines. The size of this computer is so diminutive in comparison to its housing that it has been aptly termed "embedded" by technocrats. Given that this embedded computer facilitates input, processing, and output, it is fittingly recognized as an "embedded system." Embedded systems manifest in various forms, such as Programmable Logic Devices (PLDs), microcontrollers, and more. Pertinent to our discussion today, certain embedded systems come preprogrammed to perform specific functionalities before integration into a complete system. In contrast, others arrive as bare chips, awaiting programming and reprogramming at your discretion. The latter category particularly highlights In-System Programming (ISP) characteristics, with a focus on microcontrollers. Why Arduino Developing an embedded system entails crafting a computer program in a suitable language such as assembly, C, or C++. Afterward, the code is compiled using the appropriate compiler to produce a hex file tailored for the target hardware, such as Atmega32. The next step involves uploading the code utilizing an ISP programmer. To write and compile the code, developers may opt for IDEs like Atmel Studio or MPLABX. However, for code uploading, the acquisition of an ISP programmer, exemplified by devices like pickit3 or USBtinyISP AVR, is necessary. However, traditional solutions are often costly and not easily accessible to many individuals. In contrast, Arduino boards are more affordable and widely available. Beyond serving as a prototyping platform, Arduino can also function as an In-System Programmer (ISP) for AVR boards, which belong to the microcontroller family originally produced by Atmel, now under the ownership of Microchip. Requirements 1. Arduino UNO 2. Atmega32 Chip 3. 1x 16MHz Crystal Oscillator (Optional) 4. 2x 20picoFarad Capacitors (Optional) 5. Breadboard 6. 4x Light Emitting Diodes (LEDs) 7. 4x 470 Ohm Resistors 8. Arduino IDE 9. 9V Battery & 7805 Voltage Regulator (Optional) 10. Male-Male Jumper Cables 11. Ensure you have downloaded and installed the Arduino IDE. Hardware Setup Establish the circuit according to the provided instructions and diagram. It's optional to exclude the crystal oscillator-capacitors part, as its relevance will be explained in the "uploading code section." The 5V power and ground connections for Atmega32 are established through Pins 10 and 11, respectively. The LED array on the right serves as an indicator for the proper functioning of Arduino as an ISP. These LEDs will blink according to the communication status, with more details to be discussed later. The blue-wired connections facilitate code uploading to the microcontroller, while the remaining circuitry consists of the essential working components of the microcontroller. Make sure your Arduino is properly connected to your computer. Software setup This segment plays a crucial role in configuring the circuitry. It facilitates the interaction between your computer software and the Atmega hardware. It can be rightfully considered the core of your circuitry, as it communicates with the device drivers in your Atmega32 to execute your code. Therefore, navigate this terrain with care, as the process typically takes around two minutes. 1. Begin by downloading the compressed file (2.61MB) and extracting it to your desktop. The file includes the Atmega32 Datasheet, boards.txt file, pins_arduino c header file, and HardwareSerial C++ header file. 2. Proceed to add Core Board definitions. This step allows your Integrated Development Environment (IDE) to compile programs specifically targeting your Atmega32 board. - Navigate to the directory where your Arduino IDE is installed (e.g., "C:\ProgramFiles (x86)\Arduino\"). Change the directory to "hardware\arduino\avr". - Replace the "boards.txt" file with the one you extracted from the downloaded file. This file contains default board definitions that come with Arduino, along with our new Atmega definitions. If you wish to preserve your original board definitions, copy the Atmega32 section from our boards.txt file (located right after Arduino Yun board definitions) and append it to your original boards.txt. If making changes is restricted, open your original boards.txt file in a text editor (e.g., SublimeText), paste the desired changes, "save as" to the desktop, and then copy and paste the file into the mentioned directory (replace the file). 3. Add new board pins definitions. This header file informs your compiler about the use of Arduino IDE for coding in microC/Embedded C for the board (assuming you are). It ensures the generation of an appropriate .hex file with pin configurations matching your Atmega32 board, educating the IDE about your board's pin configurations. - For Windows systems, navigate to the directory "C:/programfiles (x86)/Arduino/hardware/arduino/avr/variants". - In the directory, create a folder named "mega32" in lowercase. - Inside the "mega32" directory, copy and paste the "pins_arduino.h" header file from the downloaded file. 4. Update the HardwareSerial library for it to function correctly. Make the following changes to the "HardwareSerial.cpp" file located in the directory "..\arduino\hardware\arduino\avr\cores\arduino\". - Replace the entire HardwareSerial.cpp source file with the one you downloaded or cautiously replace it. #ifdefined(AVR_ATmega8) config|=0x80;//selectUCSRCregister(sharedwithUBRRH) #endif with: #ifdefined(AVR_ATmega8)||defined(AVR_ATmega32)|| defined(AVR_ATmega16) config|=0x80;//selectUCSRCregister(sharedwithUBRRH) #endif Blinking an LED embedded C example Ensure the stability of your hardware configuration (circuit) and launch the Arduino IDE. Navigate to the "File" menu, select "Examples," then choose "ArduinoISP" as illustrated below. Proceed to upload the program to Arduino by accessing the sketch menu and clicking on the "Upload" option. If the process has been successful, you will observe the LED linked to pin 9 of the Arduino smoothly fading in a pulsating manner. This indicates that your Arduino board has been transformed into an ISP programmer, capable of loading code onto your Atmega32 board. A note on bootloader Burning a bootloader program into your chip is unnecessary, as clarified in the official datasheet. The Atmega32 is equipped with an on-chip ISP Flash and an On-chip Boot program running on the AVR core. These features enable the reprogramming of the program memory in-system through a Serial Peripheral Interface (SPI). Now, let's compose a code to be uploaded to our Atmega32 board for blinking the LED connected to pin 22 (PC0). Consult the downloaded datasheet to confirm the correct pin. If you choose to configure your board to use an external 16MHz clock, the program may appear slightly different in the Macros section, as illustrated in the introductory picture. ```c #define F_CPU 1000000UL // defining the CPU frequency as 1MHz #include // Including avr’s input-output header library #include // Including utilities for performing delay functions int main(void) { DDRC = 0x01; // Declaring pin 22 (PC0) as output while (1) { // Creating a forever loop to ensure the microcontroller stays active PORTC = 0b00000001; // Turning PC0 high, illuminating the LED _delay_ms(1000); // Maintaining the on status for one second PORTC = 0x00; // Turning off all of port C, including PC0 (our LED) _delay_ms(1000); // Maintaining the off status for one second } } ``` This code snippet blinks the LED connected to pin 22 (PC0) on the Atmega32 board. Ensure to refer to the datasheet for accurate pin configuration, especially if an external 16MHz clock is utilized, as it may influence the Macros section in the code. Compiling and Uploading the code To start, navigate to the "Tools" tab and choose the appropriate board. If you are utilizing the default clock configurations, select the "ATmega32-1 MHz" board. This implies that in your circuit, you do not connect the external crystal oscillator part. In the same "Tools" tab, pick the suitable programmer, opting for "Arduino as ISP" and not "ArduinoISP". Finally, designate the COM port through which your Arduino is connected. Ensure your Arduino is linked to your PC before clicking on the COM port. Once these settings are in place, click on the "verify" button (the check/tick mark button). When the "save as" window appears, specify the file name without altering the file extension. You may save the file as "toggleled.c". Allow the compilation process to complete successfully until you see the white text "...sketch uses...". Now, you are prepared to upload the code to your ATmega32 board. Proceed cautiously. Go to the "sketch" tab and choose "Upload Using Programmer". If you opt for the regular upload instead, your code will be directed to the Arduino board rather than the ATmega32 board. If all steps are executed correctly, your status LEDs should blink rapidly, and the LED connected to PC0 should blink every second. At this point, you can disconnect your Arduino circuit and link the minimal power circuitry as outlined below. This demonstrates that your ATmega32 board is now independent of Arduino and is running your toggle LED code. Keep in mind that you can remove the crystal oscillator circuitry if you are using the default 1MHz internal clock configuration, which is recommended. If you wish to explore how to enhance the performance of your Atmega32 by using an external 16MHz clock or its internal 8 or 16MHz clocks, feel free to request an article on that topic. Conclusion My passion for electronics is immense, and I find great joy in exploring beyond the realm of Arduino, delving into the intricacies of programming microcontrollers directly. As I envision the future, even elements as integral as livestock, such as your cherished cows, seem destined to incorporate embedded computers for tracking and health monitoring. Every facet of our lives, including beloved flower gardens, is poised to experience the transformative capabilities of embedded systems. However, the proliferation of computers and embedded systems signifies a growing demand for skilled embedded programmers—a domain often overlooked due to its technical nature, much like the toddler AI. Despite having a modest background in electronics, I believe that with dedication and a genuine love for the field, anyone can navigate this world. As my brother would affirm, it boils down to "consistency." I encourage you to enjoy this journey, and if there are specific topics you'd like more insights on, feel free to request additional articles. It would be my pleasure to delve deeper into this subject. ### TRANSFORMING EDF BACKPACK FOR A SPEED BOOST Fighting against a tough headwind on your daily cycle can be a drag, but [Emiel] of The Practical Engineer, has a loud and bold solution. In the Dutch video after the break, he builds a transforming backpack with two electric ducted fans (EDFs), and takes to the bike paths. An EDF moves a small volume of air at high velocity, which doesn’t make them great for low speed applications. But they’re nice and compact, and safer than large propellers. [Emiel] didn’t skimp on the rest of the hardware, with the motors attached to metal 3D printed arms, mounted on a machined aluminum steel plate. The arms were printed courtesy of a sponsor, and created via generative design in Fusion 360 to make them both light and strong. A pair of large servos swing the arms up, while smaller servos rotate the motors into the horizontal position. The arm servos are controlled by an Arduino, and activated by a simple toggle switch attached to the backpack’s shoulder strap. A wireless remote similar to that of an electric skateboard is used to control the EDFs. Fitted in a [Emiel]’s old backpack, the result looks somewhat innocuous (if you don’t look too closely) until it unfolds its hidden power—twin jets ready to blast away any pesky headwinds with the push of a button. It’s a fun solution that is sure to attract attention, and a great excuse to create heavy duty mechanics. Source: TRANSFORMING EDF BACKPACK FOR A SPEED BOOST ### TINY OBSIDIANBOA DEV BOARD FEATURES ESPRESSIF SYSTEMS’ ESP32-S2 BOARD Greg Davill has posted on GitHub an Espressif Systems ESP32 based development board called the ObsidianBoa. Recently Greg Davill had a successful OrangeCrab crowdfunding campaign, he has however directed his attention to the Espressif Systems ESP32. There are a lot of ESP32 development boards today in the market, however, there is only a handful with a tiny form factor, like the TinyPICO which was launched on Crowd Supply last year. ObsidianBoa has a tiny form factor like the TinyPICO, but with some differences. The TinyPICO makes use of the ESP32 Pico D4, while the ObsidianBoa makes use of the ESP32-S2. About the project, he says on Twitter “It’s my first time designing boards for the ESP32. Turned this around in about a day while I still had the `new project` motivation. So likely a few bugs in there.” The ObsidianBoa draws inspiration form the 1Bitsy board, and the iCEBreaker Bitsy, they share similar form factor. At the core of the Obsidian Boa is the ESP32-S2, which features native USB support. This enables the Boa to connect directly to the boards USB port, instead of using the conventional USB / Serial converter IC. The ESP32-S2 features a single, 240MHz Xtensa core. This is in contrast to the dual-core design of the previous ESP32 parts. The ESP32-S2 enables a number of design possibilities, but at the expense of some of the features made previously available in the ESP32 Pico D4. The S2 features a USB-C connector but has no Bluetooth connectivity.  Read more: TINY OBSIDIANBOA DEV BOARD FEATURES ESPRESSIF SYSTEMS’ ESP32-S2 BOARD ### Enhancing Projects with Serial Connectivity Between Arduino Boards Description: Serial communication between two Arduino boards - This tutorial covers the process of establishing serial communication between two Arduino boards. While the Arduino Uno or Arduino Mega typically suffices for various projects such as CNC machines or 3D printers, instances arise where a single board isn't adequate to complete a project. In such scenarios, linking multiple Arduino boards via serial connection becomes beneficial. Upon completion of this article, you'll grasp the utilization of functions like Serial.read() and Serial.write(). Beginning with fundamental concepts of serial communication, the tutorial progresses to more advanced applications, expanding your understanding step by step. How to serially connect two Arduino Boards? To initiate the connection between the two Arduino Boards, gather three male-to-male jumper wires. Establish the link by interconnecting the RX pin of one Arduino Uno board to the TX pin of the other board, and reciprocally connect the TX pin to the RX pin between the two boards—forming a Tx-to-Rx and Rx-to-Tx configuration. Ensure that the ground connections of both Arduino boards are joined together. Serial Communication between Two Arduino Boards, Programming: To grasp the idea behind serial communication involving two Arduino boards, we'll designate one Arduino as the Sender and the other as the Receiver. This approach entails developing two separate programs: one tailored for the Sender Arduino and another for the Receiver Arduino. Sender Arduino Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 char Mymessage[5] = "Hello"; //String data   void setup() {     // Begin the Serial at 9600 Baud     Serial.begin(9600);   }   void loop() {     Serial.write(Mymessage,5); //Write the serial data     delay(1000);   } Sender Arduino code Explanation: This code presents a basic implementation aimed at transmitting the message "Hello" to another Arduino board. I've defined an array called Mymessage with a capacity of holding 5 characters, denoted by the number 5 within the brackets. Within the setup() function, I've initialized serial communication using Serial.begin() and set the baud rate to 9600. Notably, the setup() function runs only once upon the initial powering up of the Arduino board. Meanwhile, the loop() function operates continuously until the Arduino board is powered off. To transmit the "Hello" message to the receiving Arduino board, I've employed the Serial.write() function, followed by a 1000-millisecond delay (equivalent to 1 second). Receiver Arduino Code: char Mymessage[10]; //Initialized variable to store recieved data void setup() { // Begin the Serial at 9600 Baud Serial.begin(9600); } void loop() { Serial.readBytes(Mymessage,5); //Read the serial data and store in var Serial.println(Mymessage); //Print data on Serial Monitor delay(1000); } Receiver Arduino Code Explanation: The code for the Receiver Arduino closely resembles that of the Sender Arduino. However, this time, instead of employing the Serial.write() function, we utilize the Serial.readBytes() function to retrieve the transmitted data. Proceed by uploading the codes and accessing the Serial monitor for the Receiver Arduino. Ensure the Sender Arduino is powered, either via a cable, adapter, or you can use the Receiver Arduino to supply power to the Sender Arduino by connecting 5 volts from the Receiver Arduino to the Vin pin of the Sender Arduino. Connect a variable resistor to the Sender Arduino and attempt to transmit its value to the Receiver Arduino, then display it on the Serial monitor. Arduino Uno Serial Communication with Arduino Mega: Next, let's elevate the complexity by controlling an LED. Through serial communication, we'll transmit commands such as "on" and "off" from the Arduino Mega to the Arduino Uno. This will enable us to manipulate the onboard LED linked to pin 13 on the Arduino Uno. For this illustration, the Arduino Mega will function as the sender, while the Arduino Uno will act as the receiver. Arduino Uno Serial connection with Arduino Mega, Circuit Diagram: The Arduino Mega's RX1 links to the Arduino Uno's TX0, while the Arduino Mega's TX1 connects to the Arduino Uno's RX0. Additionally, the 5V output from the Arduino Mega is linked to the Vin pin on the Arduino Uno, allowing the Arduino Uno to be powered by the Arduino Mega's 5 volts. It's crucial to connect the ground pins of both Arduino boards. I suggest completing the wiring after uploading the codes. Arduino Mega Code, Sender: void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial1.begin(9600); } void loop() { // put your main code here, to run repeatedly: String readString; String Q; //-------------------------------Check Serial Port--------------------------------------- while (Serial1.available()){ delay(1); if(Serial1.available()>0){ char c = Serial1.read(); Serial.print(c); if (isControl(c)){ break; } } } while (Serial.available()) { delay(1); if (Serial.available() >0) { char c = Serial.read();//gets one byte from serial buffer if (isControl(c)) { //'Serial.println("it's a control character"); break; } readString += c; //makes the string readString     } } Q = readString; //--------Checking Serial Read---------- if(Q=="on"){ Serial1.print("1"); Serial.println("Sent:On"); } if(Q=="off"){ Serial1.print("2"); Serial.println("Sent:Off"); } } Arduino Mega, Sender code explanation: Within the setup() function of the Arduino Mega code, I've initialized two Serial Ports with a baud rate of 9600 each. One of these ports is designated for receiving commands, while the other transmits these commands to the Receiver. ```cpp void setup() { Serial.begin(9600); Serial1.begin(9600); } ``` The loop() function begins by defining two String variables: readString and Q. ```cpp void loop() { String readString; String Q; ``` The code then checks Serial1 port for incoming data. It reads and stores any available data from this port. ```cpp while (Serial1.available()) { delay(1); if(Serial1.available() > 0){ char c = Serial1.read(); Serial.print(c); if (isControl(c)){ break; } } } ``` Subsequently, the program monitors Serial0, the default Serial port, responsible for receiving commands via the serial monitor. It accumulates characters typed on the serial monitor into the readString variable to form a complete message. ```cpp while (Serial.available()) { delay(1); if (Serial.available() > 0) { char c = Serial.read(); //gets one byte from serial buffer if (isControl(c)) { break; } readString += c; //constructs the readString } } ``` The message from readString is then stored in the Q variable. ```cpp Q = readString; ``` Using conditional statements, the code checks if the variable Q contains "on" or "off" and sends "1" or "2" accordingly. ```cpp if(Q == "on") { Serial1.print("1"); Serial.println("Sent: On"); } if(Q == "off") { Serial1.print("2"); Serial.println("Sent: Off"); } } ``` To summarize, Serial1 is responsible for transmitting data from the Arduino Mega to the Arduino Uno, while Serial0 facilitates command input through the Serial Monitor. Arduino Uno Code, Receiver: void setup() { // put your setup code here, to run once: pinMode(13,OUTPUT); Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: String readString; String Q; //-------------------------------Check Serial Port--------------------------------------- while (Serial.available()) { delay(1); if (Serial.available() >0) { char c = Serial.read();//gets one byte from serial buffer if (isControl(c)) { //'Serial.println("it's a control character"); break; } readString += c; //makes the string readString     } } Q = readString; //--------Checking Serial Read---------- if(Q=="1"){ digitalWrite(13,HIGH); } if(Q=="2"){ digitalWrite(13,LOW); } } Arduino Uno Receiver Code Explanation: In the setup() function, I configured pin 13 of the Arduino Uno as an output, as this pin is linked to the onboard LED. Additionally, I initialized the Serial communication, specifying a baud rate of 9600. It's crucial to maintain uniformity in baud rates between the Sender and Receiver; otherwise, the communication may not function properly. void setup() { // put your setup code here, to run once: pinMode(13,OUTPUT); Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: String readString; String Q; The subsequent set of instructions is employed to monitor the Arduino Uno's Serial port. If data has been received from the Arduino Mega, it retrieves a single byte from the serial buffer and stores it in a character variable, 'c.' This process involves accumulating the received characters into the 'readString' variable to construct a message. Here's a rephrased version: ```cpp // Read characters from the Serial buffer while (Serial.available()) { delay(1); if (Serial.available() > 0) { char c = Serial.read(); // Retrieve a byte from the serial buffer if (isControl(c)) { // Serial.println(“it’s a control character”); break; } readString += c; // Append character to the readString } } Q = readString; // Determine the command received: 1 for turning ON the LED, 2 for turning OFF the LED // Check Serial Read if (Q == "1") { digitalWrite(13, HIGH); // Turn ON the LED } if (Q == "2") { digitalWrite(13, LOW); // Turn OFF the LED } ``` After uploading both programs and connecting the circuit as per the provided diagram, I established the connection between the Arduino Mega and the laptop. By opening the serial monitor and entering commands like "on" and "off," I successfully controlled the onboard LED of the Arduino Uno, as shown in the accompanying images. “on” command “off” command: Serial Communication between two Arduino boards to control LEDs using Push Buttons: Let's elevate our project further. In this iteration, we'll control LEDs connected to the Receiver Arduino Board by using push buttons linked to the Transmitter Arduino board. I've created a Proteus simulation for your convenience. If you don't have physical LEDs and Arduino boards, you can utilize the Proteus simulation to gain practical experience and explore the project. Serial Communication between two Arduino’s Proteus Simulation: Download Proteus Simulation:  The two Arduino boards are linked in a serial connection. The Transmitter Arduino's TX is linked to the Receiver Arduino's RX, while the Transmitter Arduino's RX is connected to the Receiver Arduino's TX. Although in simulation, the grounding of both Arduinos may not seem necessary, in practical setups, it's essential to establish a connection between the grounds of both Arduinos. Two push buttons are attached to the Transmitter Arduino's pins 12 and 13. These buttons serve the purpose of controlling LEDs connected to the Receiver Arduino's pins 12 and 13. The connections for this setup are uncomplicated and direct. Serial Communication between two Arduino boards, Transmitter Code: // Transmitter int Button1 = 13; int Button2 = 12; void setup() { // put your setup code here, to run once: Serial.begin(9600); // for communication pinMode(Button1, INPUT_PULLUP); // for read button pinMode(Button2, INPUT_PULLUP); // for read button } void loop() { // put your main code here, to run repeatedly: if(digitalRead(Button1) == 0) { Serial.write('1'); } else if(digitalRead(Button2) == 0) { Serial.write('2'); } delay(20); // waitting message send } Serial communication between two Arduino boards, Receiver Code: //Reciever int LED1 = 13; int LED2 = 12; char message; void setup() { // put your setup code here, to run once: Serial.begin(9600); // communication pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); } void loop() { // put your main code here, to run repeatedly: if(Serial.available()) { message = Serial.read(); if(message == '1') { digitalWrite(LED1, 1); } else if(message == '2') { digitalWrite(LED2, 1); } } delay(20); digitalWrite(LED1, 0); digitalWrite(LED2, 0); } If you're unfamiliar with generating hex files, you can utilize the hex files available in the simulation folder accompanying the Arduino codes. You'll find the download link provided above. After adding these hex files, I successfully managed to regulate the LEDs using the push buttons, as evident in the provided images. This concludes my article about establishing Serial Communication between two Arduino boards. I trust that you've gained new insights and knowledge from this piece.   ### GMK NUCBOX–MOST POWERFUL PALM-SIZED 4K MINI PC COMING ON INDIEGOGO SOON GMK is planning to debut its in-house palm-sized 4K mini PC named GMK NucBox on Indiegogo, and its pre-launch page is ready. They claim it’s the Most Powerful Palm-Sized 4K Mini PC, world’s smallest that we’ve ever known, as they manage to pack everything into a metal case with dimension of 626242mm. GMK NucBox comes with 8GB of LPDDR4 RAM and 128/256/512GB of SSD options, in addition to that, it supports MicroSD expansion up to 128GB. When signing up, you can purchase the GMK NucBox at as low as $159 for 128GB SSD while the retail price would be $209 when it hits shelves. Featured high-performance Intel Celeron J4125 processor which has 4-core 4-thread up to 2.7GHz frequency and the latest Intel UHD Graphics 600, GMK NucBox will definitely bring your computing to the next level.  Its 8GB DDR4 memory offers seamless multitasking between lots of resource hungry software. On top of that, up to 512GB SSD high speed internal storage enables to boot up your computer and launch apps in just a second. When it comes to connectivity, it furnishes you with all kinds of interfaces for different types of peripherals. And you can connect the mini PC to as many devices as you can own with bluetooth and WiFi connection up to 867Mbps. With 1*HDMI v1.4, it can totally cover all your needs of work and play, including mobile office, business meeting and home entertainment in 4K resolution. The on-the-go productivity and entertainment has never been so easy, until now. Read more: GMK NUCBOX–MOST POWERFUL PALM-SIZED 4K MINI PC COMING ON INDIEGOGO SOON ### MAKING AN AIRCRAFT WING WORK FOR AN AUDIENCE Many of us will have sat and idly watched the flaps and other moving parts of an airliner wing as we travel, and it’s likely that most of you will know the basics of how an aircraft wing works. But there’s more to an aircraft wing than meets the eye, which is why the Aerospace Bristol museum has an Airbus A320 wing on display. [Chris Lymas] was part of the team which turned a surplus piece of aircraft into an interactive and working exhibit, and he told the Electromagnetic Field audience all about it in his talk Using Arduinos to Resurrect an Airliner Wing. The talk starts with an explanation of how a variable surface wing works, and then starts to talk about the control systems employed. We’re struck with the similarity to industrial robots, in that this is a a powerful and thus surprisingly dangerous machine to be close to. The various moving surfaces are moved by a series of shafts and gearboxes, driven by a DC motor. Running the show is an Arduino Mega, which has enough interfaces for all the various limit switches. It’s fascinating to see how the moving parts in an airliner wing work up close, and we’re impressed at the scale of the parts which keep us safe as we fly. Take a look, the video is below the break. Source: MAKING AN AIRCRAFT WING WORK FOR AN AUDIENCE ### GETTING STARTED WITH STM8S USING STVD AND COSMIC C COMPILER Last time we examined how to program the STM8s microcontroller using the Arduino IDE. This way may work for developers who are familiar with the IDE and want to build quickly, and professional projects, but there are more ways to get the same result. Thus for today’s tutorial, we are going to examine how to use traditional tools like the Cosmic C compiler along with STVD to program the STM8s microcontrollers. There are several members of the STM8s microcontroller out there but for this tutorial, we will work with the STM8S103F3P6 microcontroller which is one of the cheapest, and most popular member of the family. The popularity of the STM8S103F3P6 makes it a perfect microcontroller for beginners as you can easily find support for it across several forums on the internet. For easy prototyping, we will use the STM8sBlue development board which is essentially a breakout board for the STM8S103F3P6 MCU with a USB interface, breadboard compatibility, and a few other components to facilitate the development of prototypes for projects based on the MCU. In addition to the STM8sBlue development board, we will need the ST-LINK programmer, preferably the ST-LINK v2 programmer.  It will be used to upload firmware from the PC to the microcontroller. Read more: GETTING STARTED WITH STM8S USING STVD AND COSMIC C COMPILER ### Newly updated official Arduino 2024 Documentation now available The Arduino platform, beloved by hobbyists and professionals in the open-source electronics community, has recently made strides in improving its user experience with a significant update to its Arduino documentation. This update, tweaks and enhancements to the documentation have been added to make learning and project development with Arduino more intuitive and accessible than ever before. At the heart of this update is a comprehensive repository that now encompasses over 75 hardware products. This expansion is a valuable asset for both seasoned makers and those new to the Arduino world, providing an array of resources including in-depth tutorials and datasheets that are essential for enriching your projects. Whether you’re looking to get started with Arduino or aiming to refine your expertise, the updated documentation is a treasure trove of information. Arduino Documentation 2024 “With 75+ current hardware products documented, hundreds of tutorials, and dozens of datasheets, it’s definitely the go-to resource center any time you have a new Arduino product, want to learn a new skill, or need help to figure something out! Want to host a web server on your brand new MKR WiFi 1010? Can’t wait to dive into the ultimate manual for your Opta micro PLC? Wondering how to set up a security system using ML? Need a solid starter guide for Arduino Cloud, the IDE 2, or Arduino in general? Arduino Docs has you covered, with specific and updated information to support all of this and so much more.” The restructuring of the Arduino Docs has introduced a more streamlined navigation system. A new homepage and sidebar make it easier for users to quickly find the specific information they’re after. This is especially helpful for those looking to get up to speed on the Arduino Cloud, IDE 2, or who need general guidance on how to make the most of their Arduino experience. One of the standout improvements is the platform’s enhanced mobile device compatibility. This update ensures that the extensive knowledge base Arduino offers is now truly portable. Users can access information from anywhere, at any time, making it an indispensable resource for on-the-go learning and project development. For those eager to explore the possibilities of Arduino Cloud or MicroPython, the updated documentation provides clear and concise entry points. The Learn section, now more prominent in the layout, is filled with educational content designed to help users tackle the complexities of Arduino and elevate their technical skills. Despite the significant changes, the essence of Arduino Docs remains unchanged. The platform continues to embody the spirit of open-source learning, encouraging exploration and contributions from its vibrant community. With the collective knowledge and expertise of Arduino enthusiasts readily available, the updated documentation serves not just as a resource, but as a gateway to innovation and collaborative discovery. The recent overhaul of the Arduino Documentation is aimed at improving the creative process for users and reflects Arduino’s unwavering support for its user base and the collaborative ethos of its community. As you face challenges or embark on new projects, the refreshed Arduino Docs library is there to support you, ensuring that vital information is always within reach. Source: Newly updated official Arduino 2024 Documentation now available ### Particle Photon Email Integration for Arduino Innovations Introduction This tutorial is brought to you by BreakoutBros.com. Access the complete version by following this link. Having explored the Particle Photon, I felt inclined to revisit one of our tutorials and introduce IoT (Internet of Things) capabilities using the Photon. In this guide, I will demonstrate how to enable the Particle Photon to send you emails by integrating this functionality into our RFID Badge Scanner with LCD tutorial. If you haven't yet explored the RFID Badge Scanner with LCD tutorial, your initial step is to visit the article and set up the necessary components. This setup enables you to scan an RFID badge and showcase a personalized "welcome home" message linked to the user associated with the RFID tag. What you will need Apart from the components required for the RFID badge scanner, you'll also require the following materials: - Particle Photon - 3x 10K resistors* - 3x 2k resistors* - 3x NPN 2222A Transistors* - Wires and Breadboard* (*Note: These items are available on Amazon or at electronics stores. Alternatively, you can explore Arduino Starter Kits, which typically include these fundamental components.) 5V to 3.3V level shifting In this tutorial, we'll utilize the Arduino to establish direct communication with the Particle Photon by employing three distinct I/O pins. When the first pin registers as High, it signifies the scanning of the 1st user's badge. Similarly, High readings from the second and third pins indicate the scanning of the 2nd and 3rd user's badges, respectively. Notably, the Particle Photon operates on 3.3V logic, while the standard Arduino functions on 5V logic. To ensure secure communication through I/O pins, it's essential to create a level shifter that transitions 5V to 3.3V. While a direct connection of 5V to the Particle Photon I/O may function, it's not advisable due to the potential strain and probable damage to the pins. This caution is especially crucial when dealing with Analog pins, as it exerts excessive pressure on the analog-to-digital converter. Particle explicitly advises against directly linking 5V to these pins. The 5V to 3.3V level shifter circuit involves a straightforward setup consisting of an NPN transistor and specific biasing resistors. This setup involves converting a 5V output from the Arduino Pin to a 3.3V input on the Photon pin. When the Arduino Output is at 0, the corresponding Photon input pin will also register as 0. You'll require three of these circuits, each designated for the pins interfacing between the Arduino and Photon. Please adhere to the provided pinout instructions below for proper connectivity. Subsequently, connect these three circuits using a breadboard. The Particle Photon starter kit includes one, and it is also included in the Arduino Starter Kits. Power up the Photon through the Arduino's 5V output by linking VIN on the Photon to the Arduino's 5V supply. This pathway will pass through the Photon's voltage regulator, adjusting the voltage to the required 3.3V. Remember to establish a connection between GND on the Photon and GND on the Arduino. With both your Arduino and Particle Photon configured for communication using a 5V to 3.3V level shifter, it's time to initiate the coding process for the Particle Photon. As mentioned in the Particle Photon Review, an online Integrated Development Environment (IDE) is utilized for programming purposes. Navigate to www.Particle.io/build and log in to your Particle account. Create a new program tailored to publish an event based on specific inputs read by the Photon from the Arduino. This event will serve as a trigger for sending you an email later on. Additionally, the code will incorporate functionality for the LED to visually indicate when and to whom an email is being sent, with the LED blinking at varying rates based on the recipient. Particle Photon Code First define all the global variables int led1 = D0; //LED to show changes in states int led2 = D7; //LED to show changes in states   int firstBitPin = 1; //Pin that will be reading the first Bit to know state int secondBitPin = 2;//Pin that will be reading the second Bit to know state int thirdBitPin = 3; //Pin that will be reading the third Bit to know state   int firstbitState = LOW; //variable to store the state of the first Bit int secondbitState = LOW;//variable to store the state of the second Bit int thirdbitState = LOW; //variable to store the state of the third Bit     int LEDDelay = 1000; //Variable used to change the LED blink timer based on what Bits are high This comprises the complete list of pins to be utilized and the data bits to be stored according to the Arduino outputs. It also specifies setting the LED blink rate to one second. Following this, we'll delve into the setup loop, primarily focusing on defining pin outputs and initializing variables. void setup() {     pinMode(led1, OUTPUT); //Set the LED pin to an Output pinMode(led2, OUTPUT); //Set the LED pin to an Output   pinMode(firstBitPin, INPUT);//Set the BIT 1 pin to an input(used for transfering who is scanned) pinMode(secondBitPin, INPUT);//Set the BIT 2 pin to an input(used for transfering who is scanned) pinMode(thirdBitPin, INPUT);//Set the BIT 3 pin to an input(used for transfering who is scanned)   digitalWrite(firstBitPin, HIGH); //enable pullup digitalWrite(secondBitPin, HIGH); //enable pullup digitalWrite(thirdBitPin, HIGH); //enable pullup   digitalWrite(led1, LOW); //Make sure LED 1 starts in LOW state   } The final section of the code serves as the main loop. It directs the photon to respond according to the data it receives from the Arduino's Bits. void loop() { firstbitState = digitalRead(firstBitPin); //Read bit 1 and store secondbitState = digitalRead(secondBitPin);//Read bit 2 and store thirdbitState = digitalRead(thirdBitPin); //Read bit 3 and store   if(firstbitState == HIGH) // This will only work for 3 of the combos;(0,0,1)(0,1,0)or (1,0,0) { Particle.publish("RFID_HOME","JOSH"); // Particle Command to publish the Event "RFID_HOME" with the data JOSH LEDDelay = 250; // this means Josh's badge was scanned. we also change the LED blinking to 250 delay(5000); // 5 second delay after publshing, this will prevent 2 publishes from one eveent from the arduino. } else if(secondbitState == HIGH) { Particle.publish("RFID_HOME","BRAD"); // Particle Command to publish the Event "RFID_HOME" with the data BRAD LEDDelay = 500; // this means Brads's badge was scanned. we also change the LED blinking to 500 delay(5000); // 5 second delay after publshing, this will prevent 2 publishes from one eveent from the arduino. } else if(thirdbitState == HIGH) { Particle.publish("RFID_HOME","SAM"); // Particle Command to publish the Event "RFID_HOME" with the data SAM LEDDelay = 1000; // this means Josh's badge was scanned. we also change the LED blinking to 1000 delay(5000); // 5 second delay after publishing, this will prevent 2 publishes from one event from the arduino. } else { LEDDelay = 2000; //If none of the bits are set, we store 2 seconds for the blinking, this is"normal" blink time   } digitalWrite(led1, HIGH); //Set LEDs high as a heartbeat digitalWrite(led2, HIGH); delay(LEDDelay); //Use the delay stored above digitalWrite(led1, LOW); digitalWrite(led2, LOW); //Set LEDs LOW as a heartbeat delay(LEDDelay); //Use the delay stored above } The primary loop initially retrieves and stores the pin states into their respective variables. Subsequently, it determines the active bit and triggers the execution of the Particle.publish("EVENT", "DATA") command. The initial input in the Particle.publish command represents the "event," while the second input denotes the "DATA." Here, we label this event as "RFID_HOME," with the user badge name serving as the data input. Additionally, a distinct LED blink duration is assigned for each user, allowing for visual identification when the Photon detects a specific badge. To prevent multiple event transmissions from a single Arduino scan, a delay follows the execution of the Particle.publish command. The remaining segment within the code loop manages LED blinking at the LEDDelay frequency. For access to the Photon Particle code associated with this tutorial, it's available here. Setting up IFTTT For the IoT Email With the Particle device publishing the RFID_HOME event to the Particle Cloud, your next step involves configuring a service to monitor the publication of this data. In this tutorial, If This Then That (IFTTT) will be employed. Begin by visiting ifttt.com and setting up an account. Search for "Particle" and select the Particle Icon within the services section: Afterward, proceed to choose an Applet that utilizes Email. Scroll through the options and select "Test of Electron Beam Switch" below. Flip the switch to turn this applet on Once the Applet is on it will allow you to edit. Configuring the email service involves naming the Applet according to the desired Badge Name for email notification. Specify the Particle-published Event, which, in this case, was "RFID_HOME," in the "If(Event Name)" box. Input the contents related to this publish event into the "is(Event Contents)," which for this specific Applet will be "JOSH" and should precisely match the content in the Particle Photon Code. Save the settings and revisit the edit mode for further adjustments. There's a need to save and revisit the Applet for configuring the Email section, for reasons unknown. Here's the email format: The subject line will read as "{EventContents} has entered the front door," while the body text will be: "Hey, your {DeviceName} has logged that {EventContents} has entered the front door. Welcome them Home." To complete the IoT setup, two additional applets need to be set up for the other badge names – SAM and BRAD. Testing the Particle Photon Email After completing the setup, it's essential to verify the Particle Photon's functionality. Test it by individually setting each pin (1 through 3) to a high state on the Particle Photon for a few seconds. Confirm the LED starts blinking at varying rates for each pin activation. Additionally, check the email associated with ifttt.com to ensure the reception of the emails. Specifically, setting Pin 1 to HIGH triggers the “JOSH” email, Pin 2 activates the “BRAD” email, and Pin 3 initiates the “SAM” email. It's crucial to keep the other pins at a low state during this process; otherwise, the email associated with the first name in the IF statements will be sent erroneously. Upon successful testing of this functionality, proceed to connect the RFID Badge Scanner with the LCD system. Arduino Code sent to Particle Photon Given that the RFID Badge Scanner is retrieving the RFID badge and associating a Name with each badge ID, your task is to configure the pins to go HIGH and LOW for each Name. Then, integrate code that ensures these pins are set accordingly whenever the Badge ID is detected. Commence by defining the new pins and arrays for Pin Data. ///Email Variable int outFirstBitPin = 0; //Pin that will be connected to Photon for bit one data int outSecondBitPin = 1;//Pin that will be connected to Photon for bit two data int outThirdBitPin = 2; //Pin that will be connected to Photon for bit three data   int RFID_JOSH[] = {1,0,0}; //Parallel Data for JOSH tag to send to Photon int RFID_BRAD[] = {0,1,0}; //Parallel Data for BRAD tag to send to Photon int RFID_SAM[] = {0,0,1}; //Parallel Data for SAM tag to send to Photon Next add in code that will set these pins based on the name read: if(Tag_Name != "i") { lcdprintwelcome(Tag_Name);   if(Tag_Name == "Brad") //If the name is BRAD we send the parallel data to the Photon to send the email that Brad Scanned { digitalWrite(outFirstBitPin, RFID_BRAD[0]); //Send first bit data for Brad digitalWrite(outSecondBitPin, RFID_BRAD[1]); //Send second bit data for Brad digitalWrite(outThirdBitPin, RFID_BRAD[2]); //Send third bit data for Brad   delay(5000); //Wait 5 seconds after sending the data to ensure the Photon reads it during its loop   digitalWrite(outFirstBitPin, 0); //set data back to 0 digitalWrite(outSecondBitPin, 0); //set data back to 0 digitalWrite(outThirdBitPin, 0); //set data back to 0 } else if(Tag_Name == "Josh") //If the name is BRAD we send the parallel data to the Photon to send the email that JOSH Scanned { digitalWrite(outFirstBitPin, RFID_JOSH[0]); //Send first bit data for Josh digitalWrite(outSecondBitPin, RFID_JOSH[1]); //Send second bit data for Josh digitalWrite(outThirdBitPin, RFID_JOSH[2]); //Send third bit data for Josh   delay(5000); //Wait 5 seconds after sending the data to ensure the Photon reads it during its loop   digitalWrite(outFirstBitPin, 0); //set data back to 0 digitalWrite(outSecondBitPin, 0); //set data back to 0 digitalWrite(outThirdBitPin, 0); //set data back to 0 } else if(Tag_Name == "SAM") //If the name is BRAD we send the parallel data to the Photon to send the email that SAM Scanned { digitalWrite(outFirstBitPin, RFID_SAM[0]); //Send first bit data for Sam digitalWrite(outSecondBitPin, RFID_SAM[1]); //Send second bit data for Sam digitalWrite(outThirdBitPin, RFID_SAM[2]); //Send third bit data for Sam   delay(5000); //Wait 5 seconds after sending the data to ensure the Photon reads it during its loop   digitalWrite(outFirstBitPin, 0); //set data back to 0 digitalWrite(outSecondBitPin, 0); //set data back to 0 digitalWrite(outThirdBitPin, 0); //set data back to 0 } lcdprintmain(); //Go back to Main scan screen } else { lcdaccessdenied();//If the read tag isnt in our data base, we will print an Access Denied message delay(2000); lcdprintmain(); // refresh to home screen } Once the criteria for identifying a valid tag's success is met, upon finding a name matching "Josh," "Brad," or "Sam," the corresponding pin output is transmitted to the Particle Photon. To allow the Photon time to register the pin change, a 5-second delay is introduced. Following this delay, the pins revert to 0 to prevent further email transmission. Find the complete Arduino code here. With the successful integration of the Particle Photon, the RFID Badge Scanner with an LCD becomes an IoT-enabled device. Whenever a specified badge is scanned, an email notification is sent. By incorporating this system into your front door and controlling a lock solenoid, you create a monitoring setup for your house's front door lock. This setup alerts you via email whenever someone uses a badge, providing awareness of home activity regardless of your physical presence. I trust you found value in and gained insights from this tutorial. To stay updated on future articles, kindly subscribe. We're planning to introduce additional functionalities to the RFID Badge Scanner, so stay tuned for more updates! Code // BreakoutBros RFID+LCD Tutorial // 2016 // This tutorial uses the RC522 RFID Chip reader and its example // Along with the 1602A LCD and its example // Go to BreakoutBros.com to view wiring and step by step instructions // Additional Code to send data to Particle Photon to email Name when Badge is scanned // RFID Setup #include #include //LCD Setup #include LiquidCrystal lcd(7, 8, 9, 6, 4, 3); //(RS,E,D4,D5,D6,D7) #define uchar unsigned char #define uint unsigned int uchar fifobytes; uchar fifoValue; AddicoreRFID myRFID; // create AddicoreRFID object to control the RFID module ///////////////////////////////////////////////////////////////////// //set the pins ///////////////////////////////////////////////////////////////////// const int chipSelectPin = 10; const int NRSTPD = 5; //Maximum length of the RFID array #define MAX_LEN 16 // Define All Key Codes - MAX 4 keys and 4 Names uchar keys[16] = { 134 , 224, 134, 141, //Josh ID - These 4 digits are your 1st users ID Bytes 19 , 89, 111, 133, //Brad ID - These 4 digits are your 2nd users ID Bytes 111 , 111, 111, 111, // Dummy1 ID - These 4 digits are your 3rd users ID Bytes 222 , 222, 222, 222 // Dummy 2 ID - These 4 digits are your 4th users ID Bytes }; String Names[4] = { "Josh", // 1st User- what will be printed to LCD *See keys[] for ID "Brad", // 2nd User- what will be printed to LCD *See keys[] for ID "Sam", // 3rd User- what will be printed to LCD *See keys[] for ID "Dummy2" // 4th User- what will be printed to LCD *See keys[] for ID }; ///Email Variable int outFirstBitPin = 0; //Pin that will be connected to Photon for bit one data int outSecondBitPin = 1;//Pin that will be connected to Photon for bit two data int outThirdBitPin = 2; //Pin that will be connected to Photon for bit three data int RFID_JOSH[] = {1,0,0}; //Parallel Data for JOSH tag to send to Photon int RFID_BRAD[] = {0,1,0}; //Parallel Data for BRAD tag to send to Photon int RFID_SAM[] = {0,0,1}; //Parallel Data for SAM tag to send to Photon // Variable to Store Tag User Name to show on screen String Tag_Name = "i"; // initialize it as "i" so Access denied is default void setup() { //Serial.begin(9600); // RFID reader SOUT pin connected to Serial RX pin at 9600bps // start the SPI library for RFID SPI.begin(); //RFID Config pinMode(chipSelectPin,OUTPUT); // Set digital pin 10 as OUTPUT to connect it to the RFID /ENABLE pin digitalWrite(chipSelectPin, LOW); // Activate the RFID reader pinMode(NRSTPD,OUTPUT); // Set digital pin 5 , Not Reset and Power-down digitalWrite(NRSTPD, HIGH); myRFID.AddicoreRFID_Init(); //LCD Initializations lcd.begin(16, 2); lcdprintmain(); //Email Pins Setup pinMode(outFirstBitPin, OUTPUT); pinMode(outSecondBitPin, OUTPUT); pinMode(outThirdBitPin, OUTPUT); delay(100); digitalWrite(outFirstBitPin, 0); // turn the LED on (HIGH is the voltage level) digitalWrite(outSecondBitPin, 0); // turn the LED on (HIGH is the voltage level) digitalWrite(outThirdBitPin, 0); // turn the LED on (HIGH is the voltage level) } void loop() { uchar i, tmp, checksum1; uchar status; uchar str[MAX_LEN]; uchar RC_size; uchar blockAddr; //Selection operation block address 0 to 63 String mynum = ""; str[1] = 0x4400; //Find tags, return tag type status = myRFID.AddicoreRFID_Request(PICC_REQIDL, str); //Anti-collision, return tag serial number 4 bytes status = myRFID.AddicoreRFID_Anticoll(str); if (status == MI_OK) { uint tagType = str[0] << 8; tagType = tagType + str[1]; checksum1 = str[0] ^ str[1] ^ str[2] ^ str[3]; // Calculate a checksum to make sure there is no error if(checksum1 == str[4]) { Tag_Name = testkey(str,keys,Names); if(Tag_Name != "i") { lcdprintwelcome(Tag_Name); if(Tag_Name == "Brad") //If the name is BRAD we send the parallel data to the Photon to send the email that Brad Scanned { digitalWrite(outFirstBitPin, RFID_BRAD[0]); //Send first bit data for Brad digitalWrite(outSecondBitPin, RFID_BRAD[1]); //Send second bit data for Brad digitalWrite(outThirdBitPin, RFID_BRAD[2]); //Send third bit data for Brad delay(5000); //Wait 5 seconds after sending the data to ensure the Photon reads it during its loop digitalWrite(outFirstBitPin, 0); //set data back to 0 digitalWrite(outSecondBitPin, 0); //set data back to 0 digitalWrite(outThirdBitPin, 0); //set data back to 0 } else if(Tag_Name == "Josh") //If the name is BRAD we send the parallel data to the Photon to send the email that JOSH Scanned { digitalWrite(outFirstBitPin, RFID_JOSH[0]); //Send first bit data for Josh digitalWrite(outSecondBitPin, RFID_JOSH[1]); //Send second bit data for Josh digitalWrite(outThirdBitPin, RFID_JOSH[2]); //Send third bit data for Josh delay(5000); //Wait 5 seconds after sending the data to ensure the Photon reads it during its loop digitalWrite(outFirstBitPin, 0); //set data back to 0 digitalWrite(outSecondBitPin, 0); //set data back to 0 digitalWrite(outThirdBitPin, 0); //set data back to 0 } else if(Tag_Name == "SAM") //If the name is BRAD we send the parallel data to the Photon to send the email that SAM Scanned { digitalWrite(outFirstBitPin, RFID_SAM[0]); //Send first bit data for Sam digitalWrite(outSecondBitPin, RFID_SAM[1]); //Send second bit data for Sam digitalWrite(outThirdBitPin, RFID_SAM[2]); //Send third bit data for Sam delay(5000); //Wait 5 seconds after sending the data to ensure the Photon reads it during its loop digitalWrite(outFirstBitPin, 0); //set data back to 0 digitalWrite(outSecondBitPin, 0); //set data back to 0 digitalWrite(outThirdBitPin, 0); //set data back to 0 } lcdprintmain(); //Go back to Main scan screen } else { lcdaccessdenied();//If the read tag isnt in our data base, we will print an Access Denied message delay(2000); lcdprintmain(); // refresh to home screen } } else { lcd.setCursor(0,0); lcd.write(" Tag Error "); lcd.setCursor(0,1); lcd.write(" Try Again! "); delay(2000); } myRFID.AddicoreRFID_Halt(); //Command tag into hibernation digitalWrite(outFirstBitPin, 0); // turn the LED on (HIGH is the voltage level) digitalWrite(outSecondBitPin, 0); // turn the LED on (HIGH is the voltage level) digitalWrite(outThirdBitPin, 0); // turn the LED on (HIGH is the voltage level) } } void lcdprintmain(){ lcd.clear(); lcd.setCursor(0,0); lcd.write("The BreakoutBros"); lcd.setCursor(0,1); lcd.write(" Scan Your Card"); } void lcdaccessdenied(){ lcd.clear(); lcd.setCursor(0,0); lcd.write(" Access Denied "); // print Access denied } void lcdprintwelcome(String Name){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" Welcome Home "); lcd.setCursor(5,1); lcd.print(Name); } String testkey(uchar Read_ID[4], uchar Stored_ID[16], String Stored_Name[4]){ int n = 0; // Variable for Overall ID loop int test = 0; //Variable for testing each Byte int i = 0; // Variable for Read Byte Loop int g = 0;// Variable for Stored Byte Loop for(n=0; n < 4; n++) // Loop for each Name test { for(i=0; i<4; i++) //Loop for each ID test { if(Read_ID[i] == Stored_ID[g]) // test bytes 0-3 of each ID { test = test+1; // if a test passes increase test by 1 } g = g + 1; // Counter or stored ID indexing } if( test == 4) // if all 4 byts pass { return Stored_Name[n]; // return the place in the loop that passed } else { test = 0; // if not all loops pass i = 0; } } return "i"; // Return "i" for a failure - this is what we will use for access denied } ### Mastering Motor Control: 6 Innovative Arduino Projects Choosing the Right Arduino Motor In this guide on Arduino motors, we'll delve into fundamental details essential for selecting the right motor for your specific project. If you've been immersed in the realm of DIY electronics for some time, feeling assured of your skills, you might be seeking a greater challenge and a more fulfilling outcome by engaging in larger, more intricate innovations. Among the realm of advanced constructions, motor-oriented inventions like Arduino-based robots frequently stand out as highly favored, and for valid reasons—they possess an undeniable allure! There exists a wide array of Arduino motors, each with its unique advantages and limitations. Consequently, not every motor suits every task perfectly; some excel in specific areas while falling short in others. In our discussion today, we'll closely examine several electric motor types commonly encountered in electronics shopping. We'll also provide insights on how, when, and where to utilize a specific motor, ensuring you always possess the appropriate equipment tailored to the demands of your new motorized project. Moreover, to fuel your creativity, we'll showcase a glimpse of motorized creations we've developed, highlighting the functionality of the motors under scrutiny. If you're an aspiring creator seeking comprehensive knowledge about Arduino motor systems to elevate your projects, you've certainly landed in the right spot. Arduino Motor Types Servo Motors Servo motors stand out as a favored choice among hobbyists engaged in Arduino projects, primarily for their versatile functionality in motor applications. Their popularity stems from their adaptability and varied usage scenarios. In essence, a servo motor integrates a conventional DC motor alongside a position feedback sensor and a compact control board. This amalgamation facilitates effortless motor manipulation directly via an Arduino, utilizing a PWM (Pulse Width Modulation) signal. This plug-and-play feature enables immediate control of the motor's actions. Hobbyists widely prefer servo motors due to their broad applicability, extending beyond recreational use to pervasive integration across diverse industries. In the realm of robotics, in particular, servo motors excel, showcasing exceptional proficiency in delivering precise motor control for robotic appendages. Moreover, they play a pivotal role in the development of mechanized prosthetics, effectively enhancing the lives of amputees through finely-tuned motor functionalities. How it works In broad terms, a servo motor can function as either a linear or rotary actuator, enabling precise control over either straight-line or angular movements. Contrary to being a standalone motor variant, it actually integrates a motor, control circuitry, and a positional feedback sensor into a unified operational entity. Servo motor control Although certain servos function via analog signals, the prevalent ones accessible in hobbyist markets predominantly operate through PWM (Pulse Width Modulation) control, specifically tailored for compatibility with microcontrollers. Utilizing a motor driver or amplifier, the Arduino, functioning as the indexer within the control circuit, dictates the sequence and timing of electrical signals transmitted to the motor through the amplifier. Pros Servo motors exhibit exceptional versatility, boasting straightforward programmability and control through digital output. Renowned for their precision, although not universally consistent across all models, they stand out for their capacity to operate without necessitating intricate control loop computations. Available in a multitude of variants, servo motors offer expanded functionalities that enable enhanced rotational control, catering to a diverse array of specific application needs. Cons Significant power consumption characterizes servo motors, often leading to higher price tags compared to basic motor models. Owing to their widespread demand and associated expenses, numerous servo motor options equipped with plastic gearing are accessible at comparatively reduced costs. However, these variants are ill-suited for managing heavy loads or prolonged operational periods, often susceptible to gradual stripping (resulting in toothlessness) over time. DC Motors Despite its slightly outdated nature, the conventional Direct Current (DC) brushed motor remains exceedingly simplistic in design. It boasts ease of assembly and cost-effectiveness, making it a ubiquitous choice across a wide spectrum of applications requiring electric motors. How it works The DC brushed motor comprises an arrangement of an uneven count of conductive windings encircling a central axle connected to the commutator. Surrounding this setup are two magnets with opposing polarities. Energizing the windings induces a charge, prompting them to be drawn toward the outer assembly, thereby initiating rotation. The interaction changes as the brushes make contact with the commutator, modifying the charge. This adjustment enables the windings to sustain attraction toward the outer assembly, ensuring continuous motor rotation as long as a power source is supplied. DC motor control As anticipated, the control of simple motors is straightforward. Adjusting the motor's rotational speed (measured in RPMs) or torque involves increasing voltage or amperage, respectively, in terms of power. Reversing the motor's direction merely requires a straightforward polarity reversal of the motor contacts. For achieving the heightened precision demanded in contemporary applications, pairing DC brushed motors with a wheel encoder or rotary encoder is a viable solution. These devices possess the capability to detect and interpret the angular position of a motor's axle. Subsequently, the microcontroller translates the output signal into digital information. This data proves instrumental in determining the motor's location, speed, and acceleration to meet specific operational requirements. Pros Considerable torque capabilities, uncomplicated assembly procedures, and straightforward controllability characterize these components. Manufacturing them incurs remarkably low costs. Cons Brush wear diminishes the motor's longevity over time. Operating consistently at higher RPM levels may lead to brush heating and potential motor damage. Minimal electromagnetic interference can disrupt radio frequencies. Closed-loop control requires increased computational demands due to these interferences. Start a DC Motor Circuit Stepper Motor An iteration of the traditional DC motor, the stepper motor emerges as the preferred option for tasks demanding highly controlled and precise movements, surpassing the capabilities of standard motors. Widely employed within the printing sector and integrated into uncomplicated robotic systems like factory robot arms designed for specialized operations, they excel in delivering meticulous and tightly regulated motions. How does this motor work Contrary to motors geared for continuous rotation, stepper motors are engineered to execute a defined number of steps at a specific speed upon activation. Each instance of powering the motor facilitates one step, determining the precision of the motor by the size of each individual step taken. Stepper motor control Distinct from other motor categories, the stepper motor necessitates advanced electronic setups to fully exploit its capacity for precise motor control. Consequently, employing a stepper motor involves integrating a driver circuit that establishes a connection between the motor and a controlling system, such as an Arduino, tasked with managing and regulating the power supplied to the motor. Pros Extremely high precision control over the operation Simplicity of construction and reliability High torque - not all Open loop control Cons Highly specialized usage Requires advanced control system for proper operation Brushless Motor Derived from the brushed motor, brushless motors are swiftly gaining favor among hobbyists and enthusiasts due to their remarkable potential and heightened dependability in comparison to their predecessors. Similar to brushed motors, they deliver substantial torque and maintain reliable performance even at high revolutions per minute (RPM). This versatility renders the brushless motor highly adaptable, making it a preferred choice as an Arduino motor, especially sought after by individuals constructing RC cars or drones. How it works The brushless motor operates by employing alternating current to generate opposing charges between the windings and the magnets situated on the external assembly. In this specific design, solely the external assembly affixed to the axle undergoes rotation. The advantage of featuring just a single moving component, coupled with the absence of contact brushes, results in several benefits for brushless motors. These advantages encompass heightened energy efficiency, extended operational longevity, seamless transmission of mechanical energy to the axle, and minimized friction. Brushless motor control Despite being more challenging to manage compared to basic brushed motors, advancements in modern technology have significantly simplified the control of brushless motors through computer interfaces. These motors commonly integrate Hall effect sensors, capable of detecting alterations in magnetic fields and converting these changes into digital data. Similar to how wheel encoders are employed with brushed motors, these sensors serve the purpose of monitoring and regulating the output of brushless motors. Pros Long lifespan Single moving part provides high reliability Low friction construction advantageous for extended operation at high speed Energy efficiency Cons Requires specialized control systems For optimal motor usage, requires the use of a gearbox regulate power delivery Parameters for choosing an Arduino motor Selecting the appropriate motor for your project typically hinges on the specific nature of the project itself and the performance criteria that define the optimal motor choice. Three primary parameters, interdependent in nature, necessitate consideration when identifying the suitable motor for our project. Torque While this article doesn't delve deeply into intricate mathematics and physics, comprehending the torque rating of your motor and its impact on your project's selection process remains crucial. This understanding ensures the adequate choice of a motor that aligns with your specific needs or expectations. In simple terms, a motor's torque rating signifies the rotational force it can exert on a load. This value is calculated using a straightforward formula: Torque = Distance from the axis of rotation × Force To illustrate how torque influences creations, consider its significance in another domain where it plays a vital role: the automotive industry. In scenarios like ascending hills or steep roads, an engine boasting a high torque rating becomes preferable. This attribute enables the application of greater force to the load (the vehicle), enabling it to ascend the hill even at low speeds or from a standstill. Maintaining a high rotational motor speed, especially in applications like drones, heavily relies on a motor's high torque rating. This attribute allows the motor to swiftly alter RPM (revolutions per minute), resulting in smoother and more responsive performance, particularly in electric vehicles leveraging such motors. For those seeking high torque motors, there are viable options to consider. The standard DC brushed motors, although cost-effective, tend to have a shorter lifespan and require more frequent maintenance. Conversely, the DC brushless motors, while pricier, offer greater reliability and energy efficiency. It's crucial to align your motor's torque rating with the specific requirements of your creation to ensure prolonged functionality. Inadequate torque might render your creation inoperable, while excessively high torque could subject the system to mechanical stress during operation. Although catastrophic failures due to overly high torque in DIY electronics are rare, they can hasten parts' wear and tear, thereby shortening the overall lifespan of your invention. Voltage - Velocity/RPM In this context, velocity pertains to the electric motor's rotational speed, measured in revolutions per minute (RPM). Together with torque, these factors significantly impact motor performance. Simplistically put, a motor with high torque excels in moving heavier loads at a slower pace, whereas a high RPM drive system allows for swifter speeds at the cost of reduced load-carrying capacity. When integrating an Arduino motor into a project, it's vital to consider the power source—whether from a wall outlet or batteries—and ensure that the motor's voltage requirements are met to optimize its performance. For adept builders, employing a gearbox—akin to those in conventional automobiles—empowers motors to function effectively across varying demands. Analogous to driving a car, lower gears provide substantial torque for initial movement, necessitating swift transitions to higher gears for sustained acceleration. Attempting to move from a standstill in a high gear, like 4th or 5th in a manual transmission, demonstrates how high RPMs without ample torque or kinetic momentum impede rapid progress. Broadly speaking, a brushless motor presents an appealing choice for individuals seeking reasonable torque, reliability, and energy efficiency even at higher RPMs. This option appeals to those uninterested in managing the weight and intricacy associated with a gearbox. Current/Amperage When selecting an electric motor, it's crucial to find one capable of delivering the required power while staying within acceptable power consumption limits. The power, measured in watts, is calculated as the product of volts and amps. Voltage influences a motor's RPM (Revolutions Per Minute), while higher amp ratings are essential for boosting torque. However, opting for a potent motor operating at high voltage and amps results in increased power demands. While this might not pose issues for projects relying on wall sockets for power, portable endeavors like unmanned vehicles, robots, and wearables need to consider the motor's demands. The batteries fueling these projects must be configured to meet the necessary power output. Hence, prioritizing smaller, lighter, and more efficient motors is favored in the development of portable electronics. This approach minimizes both power consumption and the weight of the motor and its required power source. Choosing the right motor involves several other considerations, but comprehending these three primary criteria is instrumental in guiding your decision-making. While almost any electric motor can theoretically be adapted for various functions with ingenuity, you now possess the knowledge needed to select the most suitable motor(s) for your project. In the following section, we'll explore practical applications of the previously discussed motor types through a few projects crafted by our team here at circuito.io. Arduino Motor project examples Here at circuito.io, we're continually working on intriguing projects. In this segment, we aim to spotlight select Arduino motor projects that leverage diverse motor types, demonstrating the unique capabilities of each. Every project title is associated with its respective project page. These pages offer insights into controlling different types of motors. Additionally, they provide access to our builder tool, allowing you to modify our showcased projects or create your own effortlessly from scratch. Arduino Motor Project The internet-connected pet feeder presented an ideal scenario for employing a single servo motor due to the limited rotational range necessary for dispensing food. Utilizing the servo motor in this context emerged as a cost-effective, space-efficient, and user-friendly solution. It required no supplementary components to operate, demanded only minimal power input, and demonstrated reliability for prolonged periods of use. ### A GENERAL-PURPOSE PID CONTROLLER For those new to fields like robotics or aerospace, it can seem at first glance that a problem like moving a robot arm or flying an RC airplane might be simple problems to solve. It turns out, however, that control of systems like these can get complicated quickly; so much so that these types of problems have spawned their own dedicated branch of engineering. As controls engineers delve into this field, one of their initial encounters with a control system is often with the PID controller, and this open source project delivers two of these general-purpose controllers in one box. The dual-channel PID controller was originally meant as a humidity and temperature controller and was based on existing software for an ATmega328. But after years of tinkering, adding new features, and moving the controller to an ESP32 platform, [knifter] has essentially a brand new piece of software for this controller. Configuring the controller itself is done before the software is compiled, and it includes a GUI since one of the design goals of the project was ease-of-use. He’s used it to control humidity, temperature and CO2 levels in his own work at the University of Amsterdam, but imagines that it could see further use outside of his use cases in things like reflow ovens which need simple on/off control or for motors which can be controlled through an H-bridge. The PID controller itself seems fairly robust, and includes a number of features that seasoned controls engineers would look for in their PID controllers. There are additionally some other open-source PID controllers to take a look at like this one built for an Arduino, and if you’re still looking for interesting use cases for these types of controllers one of our favorites is this PID controller built into a charcoal grill. Source: A GENERAL-PURPOSE PID CONTROLLER ### OPEN VEHICLE MONITORING SYSTEM IS THE WINDOW TO YOUR EV’S SOUL Electric cars have more widgets than ever, but manufacturers would rather you don’t have direct access to them. The Open Vehicle Monitoring System intends to change that for the user. [via Transport Evolved] As car manufacturers hoover up user data and require subscriptions for basic features, it can be a frustrating time to make such a big purchase. Begun in 2011, OVMS now interfaces with over a dozen different EVs and gives you access to (or helps you reverse engineer) all the data you could want from your vehicle. Depending on the vehicle, any number of functions can be accessed including remote climate start or cell-level battery statistics. The hardware connects to your car’s OBDII port and uses an ESP32 microcontroller connected to a  SIMCOM SIM7600G modem (including GPS) to provide support for 3 CAN buses as well as Wi-Fi and Bluetooth connections. This can be particularly useful for remote access to data for vehicles that can no longer phone home via their originally included cellular modems as older networks shut down. Source: OPEN VEHICLE MONITORING SYSTEM IS THE WINDOW TO YOUR EV’S SOUL ### BUS PIRATE 5 NOW SHIPPING It’s happened to all of us at one time or another. There’s some component sitting on the bench, say an I2C sensor, a new display, or maybe a flash chip, and you want to poke around with it. So you get out the breadboard, wire it to a microcontroller, write some code, flash it…you get the idea. Frankly, it’s all kind of a hassle. Which is why [Ian Lesnet] created the Bus Pirate: a USB multi-tool designed to get you up and running with a new piece of hardware as quickly as possible. Now, after years of development, the Bus Pirate 5 is available for purchase. Completely redesigned to take advantage of the impressive I/O capabilities of the RP2040, the new Bus Pirate also features a 240 x 320 IPS LCD that can show real-time voltage data and pin assignments. But despite the new display, and the bevy of RGB LEDs lurking under the injection molded enclosure, the primary interface for the device remains the VT100 terminal interface — now with the addition of a color status bar running along the bottom. As with the earlier versions of the Bus Pirate, the device includes all sorts of features that should prove useful to the hardware hacker. It can be used as a programmable 1 to 5 volt power supply, complete with current detection and a resettable fuse. With a simple text interface you can send communicate with devices over 1-Wire, I2C, SPI, UART, MIDI, and various RGB LED protocols out of the box, but thanks to its open source firmware, expect it to learn some new tricks before too long. In the announcement post, [Ian] mentions upcoming firmware additions to support JTAG, man-in-the-middle (MITM) attacks, and a very slick oscilloscope that uses the Pirate’s onboard display. Long time readers may recall that the Bus Pirate started its life right here on Hackaday back in 2008, when [Ian] was writing for us. While we no longer have any official connection to the project, we remain big fans of the open hardware device. There’s a Bus Pirate 5 with our name on it currently working its way through the postal system at the time of this writing, so expect a hands-on look at the new hardware in the near future. Source: BUS PIRATE 5 NOW SHIPPING ### MX4305UE – MINI-ITX MOTHERBOARD WITH INTEL® CELERON® 4305UE MX4305UE industrial mini-ITX motherboard is equipped with the latest Intel® Celeron® 4305UE processor onboard, codenamed Whiskey Lake, with integrated Intel® UHD Graphics 610 and a 15W TDP. The motherboard has a lifecycle of at least 5-7 years and is designed for power sensitive IoT devices built on 8th Gen Intel® Core i3/i5/i7 U series SoC processors. It is a price-performance balanced long-life mini-ITX ideal for embedded applications such as video and video wall control management system, point-of-sales systems (POS), kiosks, automated vending machines, panel PCs, digital signage, medical and gaming devices. Intel® Celeron® 4305UE Whiskey Lake Processor Mini-ITX Motherboard Intel® Whiskey Lake Celeron 4305UE proessor onboardIntel® UHD Graphics 610Display: supports triple displays simultaneously via 1 x DP1.2 (DP++) @60Hz (4096×2160), 1 x HDMI 2.0 @60Hz (4096×2160), 18/24 bits Dual Channel LVDSExpansion: 1 x PCIe x1, 1 x 2230 M.2 E Key, 1 x 2280 & 2242 M.2 M Key NVMe for Wi-Fi/BT supportEthernet: 2 x RJ-45 (Intel® I211-AT and Intel® I219-LM Gigabit)USB: 4 x USB 3.1 Type A, 2 x USB 3.1, 2 x USB 2.0COM Port: 1 x RS-232/422/485 and 3 x RS-232 HeaderI2C connector onboardWide Range DC-in: 12V – 24V DC-inTPM: hardware based TPM 2.0 onboard6.7″ x 6.7″ (170mm x 170mm The MX4305UE is an “OEM product”. OEM products are designed for OEMs with ongoing and consistent order requirements and subject to minimum order quantities. Evaluation units are available without such restrictions. BCM has multiple stocking distributors that may be able to work with OEMs to streamline product deliveries.  Read more: MX4305UE – MINI-ITX MOTHERBOARD WITH INTEL® CELERON® 4305UE ### 32-BIT MCU HAS DEDICATED AUDIO HARDWARE Epson has launched the S1C31D51, a 32-bit ARM Cortex-M0+ MCU that has integrated hardware that is able to play sound on speakers and buzzers. by Ally Winning @ eenewsembedded.com Epson will manufacture 200,000 of the new controllers each month. The ARM Cortex-M0+ processor features a dedicated hardware processor that is capable of producing 2-channel sound on the single MCU chip. This hardware allows the output of voice guidance sounds, such as error and warning messages on a buzzer instead of a speaker. Buzzer sound output performance can often be very poor with low volume and limited bandwidth. S1C31D51 improves that buzzer performance with a combination of software and hardware. The dedicated “HW processor” support of the MCU allows two special features. Initially, the HW processor plays the sound without the need for CPU resources, allowing those resources to be used by other processes – even during sound playback. Epson employs a high data compression algorithm (16 kbps @ 15.625 kHz) to cut the size of sound data memory. This makes it possible to use a large amount of sound data, or sound data in multiple languages. Epson’s also offers its own Voice Creation PC Tool. The software tool is free of charge for customers and provides a simple development environment to create sound data for 12 languages without studio recording. Existing WAV data can also be used. Secondly, the MCU has an integrated self-memory check function that detects failures in built-in RAM, built-in Flash, and external QSPI-Flash memories without the use of CPU resources. The 1 S1C31D51 evaluation board includes the TDK Corporation’s electromagnetic and piezoelectric buzzer. The board allows quick audio testing along with the preset demonstration. Read more: 32-BIT MCU HAS DEDICATED AUDIO HARDWARE ### Smart Home Automation Using Arduino: A Comprehensive Guide for Engineers Arduino serves as a foundational device for constructing electronic projects. It comprises a pre-programmed microcontroller or integrated development environment for coding and uploading onto the physical board. These devices facilitate the creation of interactive objects, receiving input from diverse sensors and managing motors, lights, and various outputs. Unlike requiring a separate programmer, Arduino allows direct code transfer via a USB cable. Its IDE employs a simplified C++ version, aiding ease of programming comprehension. Additionally, the Arduino board adopts a standard form factor, simplifying access to the microcontroller's functions. The projects associated with Arduino chiefly engage with software executed on a computer. This article delves into distinct Arduino projects tailored for diploma and engineering students. What is an Arduino Board? Primarily, an Arduino board operates on the Harvard architecture, featuring separate memory for program code and data storage. The board stores its code in program memory and data in data memory. Various Arduino boards exist, including Arduino Uno (R3), LilyPad Arduino, Redboard, Arduino Mega (R3), and Arduino Leonardo, each serving specific purposes. Most Arduino devices share common components such as Power (USB / Barrel Jack), Pins (5V, 3.3V, GND, Analog, Digital, PWM, AREF), Reset Button, Power LED Indicator, TX RX LEDs, Main IC, and Voltage Regulator. Arduino offers several advantages, including simplicity, cost-effectiveness, a user-friendly programming environment, and expandable hardware. Arduino Board Primarily, the Arduino board utilizes a Harvard architecture, segregating memory for program code and data. Data on the Arduino board is stored in data memory, while the code resides in the program memory. Variants of the Arduino board encompass models such as Arduino Uno, Arduino Mega, Arduino LilyPad, Arduino BT, Arduino Nano, and Arduino Mini. Common components found in most Arduino devices comprise pins, power supply, reset button, TX RX LEDs, voltage regulator, and a power LED indicator. These boards offer several advantages, including expandable hardware, cost-effectiveness, straightforward, and easily comprehensible programming environments. Arduino Projects for Engineering Students Arduino projects encompass a wide array of applications such as obstacle avoidance, industrial appliance management, electric appliance control, street light intensity regulation, home automation, underground cable fault detection, solar street lighting, and more. To offer a comprehensive insight into these applications, we provide detailed explanations accompanied by suitable diagrams. Below, we present a list of Arduino projects specifically tailored for engineering students. Arduino Radar Project The focus of this project involves creating a Radar Application using Arduino in conjunction with a processing application. Radar, a detection system utilizing radio waves, identifies various object parameters like speed, range, position, and velocity. This technology finds applications in missiles, aircraft, automobiles, marine navigation, and weather forecasting. Within this project, an ultrasonic sensor serves the purpose of detecting objects within a defined range. Components such as a servo motor, Arduino UNO, and Ultrasonic Sensor (HC-SR04) are employed for implementation. LED Street Lights with Auto Intensity Control The primary objective of this endeavor is to regulate the street lights' automatic intensity using an Arduino board. LED lights replace HID lamps in this project's street lighting system. The Arduino board facilitates light intensity control by generating PWM signals, causing a MOSFET to activate a series of light-emitting diodes, ensuring the desired operational outcome. LEDs have a longer lifespan than HID lamps due to their lower power consumption. Within the Arduino board, programmable instructions regulate light intensity using PWM signals. This intensity remains high at night, gradually diminishing as road traffic subsides, and continues to decrease until morning. Ultimately, at 6 A.M., the light intensity ceases entirely, restarting the cycle at 6 P.M. in the evening. This recurring process ensures the controlled operation of the lights. Arduino based Project on Home Automation The central idea behind this project involves creating a home automation system by employing an Arduino board in tandem with an Android-operating system-based smartphone or tablet. With advancing technology, homes are becoming increasingly intelligent. Currently, traditional switches are positioned at various locations within a house. However, accessing these switches necessitates physical proximity, presenting challenges for users. This project provides an optimal solution by integrating smartphones for remote control and accessibility. A Bluetooth device is linked to the Arduino board on the receiving end, while a mobile phone's graphical user interface (GUI) application transmits ON/OFF commands to the receiver on the transmitting end. Through specific GUI interactions, users can remotely switch loads ON/OFF. The Arduino board regulates these loads via Thyristors and optoisolators employing TRIACS. Arduino Operated Obstacle Avoidance Robot The primary objective of this project involves crafting a robotic vehicle equipped to evade obstacles. Employing an ultrasonic sensor for navigation and Arduino for operational control, the robot detects obstacles in its path and transmits signals promptly to the Arduino board. Upon receiving these input signals, the microcontroller directs the robot to change its course by activating the motors connected through a motor driver IC. Obstacle Avoidance Robot Arduino based Electrical Appliances Control using IR The primary objective of this project involves managing electrical devices using an infrared (IR) remote. This remote transmits coded infrared data to a sensor, which is linked to the control unit. Consequently, this system governs electrical loads based on the data received from the remote. The project operates household appliances integrated into a control unit that can be manipulated via a remote. An infrared receiver captures RC5 coded data transmitted by the remote and communicates it to an Arduino board. The Arduino board's programmed instructions interpret the RC5 code, generating specific outputs based on the received data. These outputs activate a series of relays through a relay driver IC. Electrical loads are connected to the control unit via these relay contacts. This project finds application in domestic settings, allowing control over various loads using a TV remote. Arduino based Solar Street Light The fundamental idea behind this project involves creating a solar-powered street light managed by an Arduino board to regulate its intensity. The project utilizes photovoltaic (PV) panels to convert sunlight into electricity, charging batteries. A charge controller circuit is employed to manage the battery charging process. During peak hours, the street light intensity is maintained at a higher level. As the number of vehicles on the roads diminishes during late-night hours, there's an opportunity to gradually reduce light intensity until morning, conserving energy. Consequently, street lights are programmed to activate at sunset and automatically deactivate at sunrise as a routine measure. LPG Gas Monitoring & Automatic Cylinder Booking with Alert System In our current era, technology integration has become integral to simplifying our daily tasks. This particular project aims to streamline the process of LPG gas booking. Presently, the existing online systems for LPG cylinder booking prove challenging for individuals with limited education. Furthermore, these systems lack a mechanism to track the gas quantity within the cylinder. This project introduces an Arduino-based framework that continuously measures the gas quantity (based on the cylinder's weight) and regularly updates this information for the LPG agent's reference. When the gas quantity drops below a predefined threshold, the system automatically initiates the LPG cylinder booking process. Moreover, a gas sensor integrated into this project detects gas leaks, promptly notifying the user for necessary action. Smart Glove for Sign Language Translation using Arduino Individuals commonly communicate by speaking, writing, and listening to share their thoughts, experiences, and information. However, those who are unable to hear and speak often rely on sign language to communicate. Nevertheless, difficulties arise when a person who doesn't understand sign language attempts to communicate with someone who uses it. In this Arduino-based project, a system is developed to facilitate the translation of sign language gestures into voice commands and vice versa. A glove equipped with various sensors detects diverse sign language gestures, transmitting signals accordingly. Arduino serves the purpose of gathering these signals from the sensors. Using Bluetooth connectivity, Arduino transmits these signals to an Android smartphone. This smartphone then interprets the sign language gestures into voice commands and vice versa, enabling effective communication between individuals using different modes of expression. Automatic Garbage Collector Bot based on Arduino and GPS Maintaining cleanliness is highly valued. This project aims to automate the process of garbage collection entirely. Utilizing data from diverse sensors and GPS systems, a robot is engineered to autonomously collect trash from a specific area without human intervention. To delineate the geographical region the robot must cover, NI LabVIEW is employed. This software gathers area coordinates from Google Maps and generates a map for the robot's operation. The ESP8266 module facilitates the transmission of this data to the robot. In detecting obstacles, ultrasonic sensors are utilized. Wifi based Low-cost Monitoring of ECG and Temperature Parameters using Arduino and ThingSpeak During emergencies or in remote regions, providing immediate medical assistance can pose significant challenges due to a lack of essential medical equipment to assess a patient's vital signs. This project addresses this issue by introducing a cost-effective Arduino-based system tailored for such scenarios. Utilizing a pulse rate measurement sensor and a temperature sensor, this system gathers ECG and temperature data from the patient. Subsequently, this information is transmitted via WiFi to a website server. Through this web platform, doctors can remotely monitor the patient's condition, observe vital signs, and offer essential recommendations. Notably, this project stands out for its affordability and straightforward design, presenting an accessible solution for such critical situations. Automatic Water Planting System using Soil Moisture Sensor Farming serves as the primary source of income in numerous nations. As groundwater levels decline and global warming intensifies, there's a pressing need to enhance agricultural practices. Monitoring soil conditions has become indispensable for achieving successful crop yields in today's scenario. Arduino based Automatic Water Planting System using Soil Moisture Sensor This project involves the creation of a soil moisture monitoring system. It utilizes a humidity sensor to gauge the moisture levels in the crop's soil and transmits this data to the processor. Depending on the sensor readings, the water irrigation system is activated or deactivated. This endeavor contributes significantly to effective water management. Simple Arduino Projects using LEDs for Engineering Students The primary uses of these boards predominantly involve basic Arduino projects incorporating LEDs suitable for engineering students. To enhance comprehension of these Arduino projects, we're providing detailed explanations accompanied by appropriate diagrams. Auto Intensity Control of LEDs Using An Arduino Board The primary aim of this project is to regulate the automatic brightness of LEDs utilizing an Arduino board. Instead of HID lamps, the proposed system employs LEDs for their dimming capabilities. An Arduino board is employed to automatically adjust light intensity by generating PWM signals, which in turn activate a set of light-emitting diodes to achieve the desired operational level. Compared to HID lamps, these lights boast an extended lifespan and consume less power. Within this project, the Arduino board is equipped with programmable instructions that modulate light intensity based on generated PWM (pulse width modulation) signals. During peak hours, the LED intensity remains high. Subsequently, as road traffic gradually diminishes during late nights and continues to decrease until morning, the light intensity gradually diminishes. Ultimately, the light intensity completely switches off at 6 A.M and restarts at 6 P.M in the evening. Moreover, this proposed system can be further improved by integrating it with a solar panel that converts solar intensity into usable power. This harnessed energy can then be utilized to power the highway lights. Arduino based Temperature Logger The intended system revolves around a basic temperature logging setup employing an Arduino board. Its purpose is to monitor temperature at two-second intervals and exhibit the readings on the Arduino serial monitor in both Celsius and Fahrenheit. The system establishes a connection to a personal computer via USB. In this setup, the IC LM35 functions as the temperature sensor, gauging the temperature by producing a voltage output that rises by 10mV for each degree Celsius increase. The temperature sensor operates at an operating voltage of 5V and maintains a standby current of 60uA. Arduino based Motion Sensor light Circuit The primary objective of this project is to create a motion sensor light circuit based on Arduino. This circuit aims to detect motion and subsequently activate a light. It primarily comprises components such as the Arduino board, a PIR sensor, an LED, and USB connectors of type A and B. When the PIR sensor, interfaced with the Arduino board, identifies motion, it triggers the illumination of the LED light. Arduino based Motion Sensor light Circuit Pin-1 of the sensor establishes a connection to the voltage terminal of the Arduino board, while Pin-3 links to the board's GND. The output from Pin-2 is connected to digital Pin D3. Through these connections, Pin-1 and Pin-3 receive 5 volts from the Arduino, powering and enabling the PIR sensor. Pin-2 facilitates the transmission of output from the motion sensor to the Arduino board. In the absence of detected motion, the output remains LOW, signaling no voltage input to the Arduino. Upon detecting motion, the sensor outputs a HIGH signal, supplying the Arduino board with a voltage signal. This signal can activate another device, such as an LED, connected between pin-13 and GND terminals. Notably, an external resistor isn't required to limit current flow to the LED because pin-13 is equipped with built-in resistance, serving to regulate current flow without the need for an additional external resistor. Arduino Mini Projects for Diploma & Engineering Students The following Arduino projects are suitable for a diploma as well as engineering students. Automation System for Industries Controlled by Joystick & Arduino Nano The proposed system like industrial automation can be controlled through a joystick & Arduino nano. This project is used to control four electrical appliances in industries. Arduino based GPS Tracker This project implements a GPS tracker system with the help of an Arduino board. This project is very helpful in tracking a child, vehicle location as well as other objects. Arduino based Alarm Clock Radio This proposed system designs an alarm clock radio with the help of an Arduino board. This project has one feature that is, it displays time, date & generates an alarm on the preferred time. Wireless Frequency Meter using Arduino This project implements a wireless frequency meter using the Arduino board. This project is mainly designed for measuring the sinusoidal AC signals frequency. The frequency range is from 50Hz to 3kHz. Window Alarm Annunciator using Arduino Uno This project implements a window alarm annunciator using the Arduino Uno board. This kind of annunciator is used for processing different power plants, industries by checking the conditions of plants & gives an alert to the operators regarding the abnormal conditions otherwise deviations of the parameter. Noise Detector for Automatic Recording System This project designs a noise detector for an automatic recording system using Arduino. This project is used in offices, classrooms, and libraries to detect noisy people and takes necessary action against them. Fan Speed Monitoring & Controlling using Arduino This project is used to monitor and control the electric fan speed based on the temperature using Arduino. Wireless Web Server based on ESP8266 The wireless web server project can be built with a microchip like ESP8266 & an Arduino. This microchip includes a fixed Ram, ROM, and low-power CPU. It is an entire & an independent Wi-Fi set-up that can carry software applications like a separate device otherwise connected through an MCU. Digital IC Tester This project implements a digital IC tester using an Arduino. This device is cost-effective, highly reliable, and cost-effective. This project is used to check various ICs by using a program including different functions. RF Controlled Robot using Arduino This project implements a system namely RF controlled robot using an Arduino board. The design of this robot can be done very easily using RF. The controlling range of this RF remote is up to 100 meters through suitable antennae. Oscilloscope using Arduino & PC This project is used to design an oscilloscope at less cost using Arduino & PC for signal acquisition. This oscilloscope is mainly used for capturing the frequency signals. The range of these signals up to 5kHz. In this project, an Arduino board is used to read the ADC values and sends these to the PC via USB port. Earthquake Sensor This project designs an earthquake indicator by using the ADXL335 accelerometer which is highly-sensitive to identify vibrations. Once an earthquake occurs, the motion is violent enough & crosses a certain threshold, LED glows, energizes the relay to generate a buzzer sound. Further, this project can be enhanced to a knock & shake detector to use in the vehicles, ATMs, etc. The list of Arduino nano projects includes the following. In Arduino boards, Nano is the smaller version which is most frequently used to make different engineering projects. This board is used where the space for the Arduino board is very less. LED-Strip based on Music Reactive This is a simple and beginner project. This project includes a microphone that measures playing music intensity. This data can be sent to the Arduino nano board for stimulating a LED strip so that it can blinks in different colors based on the music. Lie Detector This project is used to build a lie detector using Arduino nano. This project detects the electrical conductivity of the human skin but this project cannot give guarantee whether somebody is lying or not because it is a fun project. Microbot using Arduino Nano This project is used to design a small robot namely a microbot. This project is used to follow a fixed route based on the program using a gripper or radio remote control or even GPS. Arduino Nano based Robotic Spider This project implements a robotic spider using an Arduino nano. This project can be controlled through a smartphone. It is a beginner project. Arduino Nano based Weather Station This project designs a weather station using Arduino Nano. Here microcontroller is used as a weather station using a screen as well as connectors. So this system measures the humidity, temperature & shows the time. Further, this project can be enhanced to get extra data on wind conditions, air pressure, rain & UV index. This project can be built with an Arduino nano & some electronic components. Speedometer using Arduino Nano This project is used to design a Speedometer to measure vehicle speed while traveling. We know that analog and digital speedometers are designed with an IR sensor as well as a hall sensor. In this project, GPS is used to measure the vehicle speed because these speedometers are accurate as compared with normal speedometers. GPS speedometers track the vehicle continued to calculate the vehicle speed. Arduino Nano based IR Remote Decoder The wireless communication technology like an IR is a low cost and simple which is used widely in different applications. Infrared light is similar to the visible light but the wavelength is somewhat longer. This IR property will make it invisible to the human eye & suitable for wireless communication. IR signals can be decoded in several applications to control some devices. In this project, an IR receiver like TSOP1838 is used to make an IR Remote Decoder through an Arduino. This project is used in different applications for controlling the robot, home automation, etc. Car Ignition System using Arduino & RFID At present, most of the automobiles are designed with an ignition system using push-button & keyless entry. The car door can be opened by placing your finger on the capacitive sensor near to the door handle for opening the car door. This project uses some security features like fingerprint sensor and RFID. The fingerprint sensor allows authorized users in the car and RFID will confirm the user’s license. In this project, we use an EM18 RFID reader, Arduino Nano & fingerprint sensor like R305 Arduino based Capacity Tester for Li Battery Day by day, electronic devices are becoming portable and available in small size including more functional as well as complex applications. Because of the complexity, the circuit uses huge power. So designing the devices in a small size is mandatory. To provide a huge current, the battery is required for a long period with less size. There are different kinds of batteries available in the market where Ni-MH, Ni-Cd & Lead Acid batteries are not useful for portable devices because they cannot supply the required power due to heavyweight. To overcome this, Li-Ion batteries are used because these batteries provide huge current and its size is compact but weight is less. This project is used to test the Li battery using an Arduino nano board. Please refer to this link to know more about Arduino Uno Projects for Beginners and Engineering Students The list of IoT projects using Arduino or Arduino projects using IoT is discussed below. IoT & Arduino based Gas Leakage Detector Day by day, many fire accidents have been occurred because of a gas explosion. To overcome this, we need to check before. For that, the proposed system is used to detect LPG gas using an MQ5 gas sensor using an Arduino and Raspberry Pi. In this project, the gas leakage detector is connected to the Wi-Fi module, so that the smallest and highest parameter can be placed consequently. This project is applicable where LPG gas detection is required like homes, stores, etc. The MQ5 gas sensor continuously checks the LPG gas level present within the air. If the value is in the set limit then the green LED will blink to give a safe sign. Similarly, when the gas exceeds above the set limit then the red LED will blink. This project helps in sensing gas leakage within the surrounding. Protection System for Industries using IOT & Arduino The protection system of the industry using IOT & Arduino is designed to guard industries from different losses like fire leakage, gas leakage, low lighting, etc. When gas leakage occurs, then it leads to huge industrial loss, fire detection is also required whenever furnace blasts occur and low lighting in the industries can cause an improper work environment. The proposed system is used to detect the temperature, light, and gas to avoid losses and accidents in industries using different sensors. These sensors can be interfaced through the Arduino board as well as LCD. The sensor data continually scans for gas leakage, check the fire, low light to record values, then this sensor data can be transmitted through online. The internet function can be achieved using the Wi-Fi module and the IoT server displays the data online to get the required output. Pet Feeder using IoT & Arduino This project is implemented with the IoT & Arduino board. This project is used to provide food for pets. In this project, the PIR sensor informs once the bowl is empty then it fills automatically to feed the pet. This project is suitable for pets to feed them. Conversion of Text to Speech This project is used to design a TTS system to convert the text into speech. This system allows the commands by using a keyboard and converts then into a speech with the help of an inbuilt speaker. To build this project, there are some simple steps like symbols conversion, numbers into words, text to phonetic scripts conversion, and after that converting into spoken voice. Once the setup is ready then we can use this system. Smart Street Light using IoT & Arduino This project designs a smart street light using an Arduino board & IoT. This project is used to reduce energy consumption. In this project, street light projects can be developed using IoT. The intensity of the street light can be changed automatically based on the environment. The lights intensity will be high at the night time whereas the intensity will be low in the daytime. This can be monitored using smart gadgets. Management System for Water Quality using Arduino & IoT This project is used to design & develop a system with a low cost to monitor the quality of water in real-time. In this project, IoT and Arduino play a key role to measure chemical as well as physical parameters within the water like pH, temperature, and turbidity. The values which are measured using the sensor can be processed through the microcontroller. The core controller used in this project is Nodemcu esp8266. At last, the sensor data can be uploaded using the Wi-Fi module on the internet. Arduino & IoT based Wireless Biometric Lock This project is used to replace the traditional keys by placing wireless biometric locks with IoT & Arduino. If we use a traditional key-based lock then there is a chance of losing the keys or else theft problem so there is a change of high risk. Consequently, now many people are using biometric locks to provide security for their houses. These biometric locks don’t use any keys to lock or unlock the door but it can be built with a fingerprint sensor. The design of this project can be done at less cost. Air Pollution Meter Enabled by IoT through Digital Dashboard This project is used to monitor air quality by allowing an air pollution meter on your phone. This project uses a Blynk application along with an Arduino board. This application is an IoT( Internet of Things) platform for controlling an Arduino board as well as Raspberry Pi through the Internet. The Blynk application within the project can provide a digital dashboard on the smartphone to exhibit the readings of air quality in real-time for the surroundings. Students highly prefer Arduino for designing projects as it is cost-effective and easy to program. Arduino is also preferred by professionals to design prototypes. Thus, this is all about Arduino projects and simple Arduino projects using LEDs for engineering students. We hope that you have got a better understanding of these projects. Furthermore, any queries regarding this concept or electrical and electronic projects, please give your valuable suggestions by commenting in the comment section below. Here is a question for you, what is the main function of an Arduino microcontroller? ### SPECTRA E-PAPER DISPLAYS OPERATIONAL FROM ZERO TO +40°C Pervasive Displays (PDi) has announced a new wide operating temperature range for its Spectra e-paper displays (EPDs). The Spectra range comprises 12 EPD modules with size options from 1.54 to 12.2”. These small, low power, active-matrix EPDs can now operate from zero to +40°C (10°C lower than before) making them suitable for most indoor and many outdoor operating conditions. EPDs are bistable, meaning that they require no power to display an image and use very little power to update the screen. The one time programmable (OTP) feature of each EPD module operates alongside the internal timing controller (iTC) to store an image waveform inside the display driver. As there is no requirement for the host processor to load an image at startup, the time to the first image is reduced, improving the user experience. Alchin Wang, General Manager, Pervasive Displays, said: “We’ve increased the lower end of the operating range of our Spectra EPDs down to zero from 10°C. As the uppermost temperature they are capable of operating in is +40°C, these low power screens are now a great option for a variety of applications where reliability is paramount such as in cold chain, healthcare and warehouse setting. “And, as these EPDs all benefit from iTCs, we can offer customers a product which is smaller and lighter, saving them space on the PCB and reducing the bill of materials.” Read more: SPECTRA E-PAPER DISPLAYS OPERATIONAL FROM ZERO TO +40°C ### Arduino Pathways: How to Make Informed Decisions My initial encounter with Arduino through this assignment marked my first independent experience. Reflecting on the challenges I faced during the in-class tutorial, I harbored reluctance towards reengaging with the breadboard. Consequently, I made an early decision to opt for a more uncomplicated circuit. While exploring the Arduino kit's components, the IR remote and sensor piqued my interest. Subsequently, after conducting online research, I stumbled upon a circuit and corresponding code that appeared relatively simple and easy to understand. At first, my plan involved activating particular colored LEDs upon pressing specific numbers on the remote. To proceed, I entered the given code into the Arduino software for verification before constructing the circuit. However, as a preliminary step, I needed to install an IRRemote library and designate it for use. Among several similarly named packages, I opted for the first one that appeared. After downloading the IR library, I attempted to verify the code, only to encounter an immediate error message. At this juncture, I confronted a consistent challenge throughout this task: comprehending the coding language required. The Arduino code is scripted in C++, a programming language with which I haven't had the opportunity to acquaint myself. My proficiency in computing is primarily centered around MATLAB, hence the syntax used in Arduino coding was unfamiliar to me. Consequently, the error message proved to be less than informative. Seeking assistance, I approached one of my housemates, a Mechanical Engineer experienced in Arduino projects. Regrettably, he too was unfamiliar with the IR remote/sensor library, rendering him unable to diagnose the issue. Opting not to invest more time in deciphering and rectifying the IR remote code, I made the decision to employ a less intricate sensor system instead. SHIFTING GEARS – DISTANCE SENSOR In my quest for a fresh project idea, I turned to YouTube. Spending approximately an hour immersed in various videos such as "Arduino for Beginners" and "Easy Arduino Projects," I discovered that learning through tutorial videos was far more accessible than deciphering instructions on the Arduino Project Hub posts. A recurring theme among beginner project videos was the utilization of an ultrasound sensor for distance measurement. This led me to concentrate my research on videos demonstrating circuits for measuring distance using ultrasound sensors. While several tutorials employed digital displays to showcase sensor data, I stumbled upon one video that transmitted this information to the serial monitor within the Arduino software. As outlined in the video, the sensor emits an ultrasound wave at a specific frequency, and by analyzing the duration of the wave's round trip, the distance can be calculated. This process includes configuring the pulse duration while considering the speed of sound, set at 340 m/s. Following the wiring diagram demonstrated in the video, I established the fundamental circuit for measuring distance. Having established the circuit, my focus shifted to programming the distance sensor. I made sure to connect the echo pin of the ultrasound sensor to Arduino's pin 10 and the trig pin to pin 9 on the board. During a previous tutorial session, I had encountered an issue by not accurately specifying these pins in the Arduino code. Hence, I was determined not to repeat the mistake. While the instructional video provided the code, I opted to comprehend it rather than simply copying and pasting as I did with the IR remote. The code initiates by defining the Arduino pins 9 and 10 as the Trig and Echo pins, respectively. In the setup segment, the Trig pin is configured as an output, and the Echo pin as an input. Additionally, the code incorporates a serial function to display sensor readings on the serial monitor. Within the loop section, the code handles the states (low or high) and measures the duration of the ultrasound waves, followed by distance calculation. The code's output is then transmitted to the serial monitor using the serial print function. Upon successful verification, I proceeded to upload the code to my Arduino setup. To confirm its functionality, I accessed the serial monitor and positioned my hand in front of the sensor. Fortunately, the sensor accurately measured and displayed the distance from my hand, operating precisely as intended. The recorded distance from the sensor was presented in centimeters. THE NEXT STEP – PROXIMITY SENSOR To add a personal touch to the distance sensor circuit, I opted to integrate an LED configuration similar to what we covered in our classroom tutorial. My concept involved activating a green light when an object exceeds a specific distance from the sensor and a red light when the object gets closer than that threshold. Thus, I placed a red and green LED, each accompanied by a 330-ohm resistor, onto the breadboard. I connected the positive leg of each LED to digital pins 2 and 3 on the Arduino board. Ultrasound sensor circuit with LEDs added in I proceeded to develop the code responsible for illuminating the LEDs based on the readings from the distance sensor. The class example demonstrated this functionality with temperature readings, prompting me to adapt that code for a different sensor. Initially, I configured the pin modes of the LEDs as outputs in the setup section. Subsequently, I formulated an if-else loop: when the distance reading exceeded 10 cm, the green light's output would be set to high and the red light's output to low. Conversely, if an object was within 10 cm, the loop's else statement would trigger the opposite LED settings. To enhance the impact, I interconnected a buzzer in series with the red light, enabling it to emit a sound when an object approached within 10 cm of the sensor. This coding setup completed my proximity sensor project. Final Arduino circuit for the proximity sensor Arduino coding for the Proximity Sensor ### VECOW UNVEILS ENERGY-EFFICIENCY ULTRA-COMPACT FANLESS EMBEDDED BOX PC Vecow Co., Ltd., a team of global embedded experts, are pleased to introduce the latest SPC-4010C, a new member of the popularly sold SPC-4000 Series Ultra-compact Fanless Embedded Box PC that is based on Intel Atom® (Apollo Lake) processor. Vecow SPC-4010C is powered by dual-core Intel Atom® x5-E3930 processor, outfitted with dual display port supporting up to 4K resolution, 2 GigE LAN, 2 COM and featuring -40°C to 75°C extending temperature. Given the exceptional combination of energy-efficiency and flexible expansion functionality, SPC-4010C is an ideal solution for Machine Vision, Robot Control, Infotainment System, Factory Automation, Intelligent Control or any compact AIoT or industrial 4.0 embedded applications. Vecow’s extension of the SPC-4000 Series Ultra-compact Fanless Embedded Box PC runs on quad-core/dual-core Intel Atom® SoC (Apollo Lake-I). It is industry-proven, has excellent energy-efficiency, features Intel® Time Coordinated Computing (TCC) Technology and allows systems operating in synchronization and improving network accuracy. Paired with the Intel® HD graphics 505/500, SPC-4000 Series’s lockable HDMI and VGA or DVI-I and DisplayPort deliver up to 4K ultra HD resolution, supporting DirectX 12 API. With performance boost for graphics and CPU performance over the prior generation of quad-core Atom processor, SPC-4000 Series is a perfect solution for both graphics-intensive and performance-driven embedded applications. Read more: VECOW UNVEILS ENERGY-EFFICIENCY ULTRA-COMPACT FANLESS EMBEDDED BOX PC ### THIS UNIQUE FLIP-FLOP USES CHEMISTRY AND LASERS One of the first logic circuits most of us learn about is the humble flip-flop. They’re easy enough to build with just a couple of NOR or NAND gates, and even building one up from discrete components isn’t too much of a chore. But building a flip-flop from chemicals and lasers is another thing entirely. That’s the path [Markus Bindhammer] took for his photochromic molecular switch. We suspect this is less of an attempt at a practical optical logic component and more of a demonstration project, but either way, it’s pretty cool. Photochromism is the property by which molecules reversibly rearrange themselves and change color upon exposure to light, the most common example being glass that darkens automatically in the sun. This principle can be used to create an optical flip-flop, which [Markus] refers to as an “RS” type but we’re pretty sure he means “SR.” The electronics for this are pretty simple, with two laser modules and their drivers, a power supply, and an Arduino to run everything. The optics are straightforward as well — a beam splitter that directs the beams from each laser onto the target, which is a glass cuvette filled with a clear epoxy resin mixed with a photochromic chemical. [Markus] chose spiropyran as the pigment, which when bathed in UV light undergoes an intramolecular carbon-oxygen bond breakage that turns it into the dark blue pigment merocyanine. Hitting the spot with a red laser or heating the cuvette causes the C-O bond to reform, fading the blue spot. The video below shows the intensely blue dot spot developing under UV light and rapidly fading thanks to just the ambient temperature. To make the effect last longer, [Markus] cools the target with a spritz from a CO2 cartridge. We imagine other photochromic chemicals could also be employed here, as could some kind of photometric sensor to read the current state of the flip-flop. Even as it is, though, this is an interesting way to put chemistry and optics to work. Source: THIS UNIQUE FLIP-FLOP USES CHEMISTRY AND LASERS ### Arduino Days 2024 confirmed for March 21st-23rd 2024 Mark your calendars for an electrifying experience in the realm of microcontrollers and electronics! From March 21-23, 2024, the Arduino community is set to celebrate its 11th annual Arduino Days, a gathering that promises to be a hub of innovation and learning. This event is poised to showcase the latest advancements and educational resources in the field, offering a unique opportunity for attendees to engage with live streaming sessions, witness new product unveilings, and delve into the evolving worlds of edge AI, TinyML, and real-time monitoring technologies. Arduino Days 2024 is meticulously crafted to appeal to a wide range of participants, from seasoned developers and hobbyists to educators eager to expand their horizons. Over the span of three days, you will be at the cutting edge of technological innovation. The event’s live streaming capability ensures that no matter where you are in the world, you can connect with the Arduino community’s vibrant creativity and collaborative spirit. Visit the Arduino Days website for details or go directly to the submission form for organizers. Arduino Days 2024 The commitment to making this event accessible is underscored by the live streaming feature, which breaks down geographical barriers and invites you to be part of the experience virtually. This means that the thrill of new product announcements and the educational value of tutorials are just a click away, allowing you to gain insights and enhance your knowledge from the comfort of your own space. Staying abreast of the fast-paced electronics industry is crucial, and Arduino Days 2024 places you at the forefront. Be among the first to discover new Arduino products that are set to redefine the boundaries of what’s possible with electronics. Alongside these exciting launches, a series of educational tutorials will be available to help you harness the full potential of these innovative tools, whether you’re honing your skills or starting a new journey. A special highlight of Arduino Days 2024 will be the focus on the practical applications of edge AI, TinyML, and real-time monitoring. These advanced technologies are reshaping our interactions with the world, leading to smarter, more efficient systems. You’ll learn about Arduino’s pivotal role in driving this technological shift and how you can be part of this exciting movement. But Arduino Days 2024 isn’t just an event to observe—it’s one you can help shape. The Call for Speakers is currently open, inviting you to share your expertise and project experiences with the global community. Selected speakers will receive support to create presentations that leave a lasting impact. Additionally, the Call for Organizers is looking for enthusiastic individuals to host satellite events, with promotional support provided to ensure their success. Arduino Days 2024 stands as a landmark event for those with a passion for electronics and microcontroller technology. It’s a platform for learning, sharing, and connecting with like-minded enthusiasts from across the globe. Don’t miss the chance to be part of this inspiring event—engage with the community, contribute your insights, and play a role in shaping the future of Arduino. Here are some other articles you may find of interest on the subject of Arduino Source: Arduino Days 2024 confirmed for March 21st-23rd 2024 ### SHIELDIY DO-IT-YOURSELF CUSTOM SHIELDING CABINETS Würth Elektronik’s ShielDIY kit is a fast prototyping solution for board-level shielding cabinets Würth Elektronik has created a do-it-yourself custom shielding cabinet kit, the ShielDIY. The ShielDIY kit is a fast prototyping solution for board level shielding cabinets. The kit is made up of nickel silver sheet with a thickness of 0.2 mm. The sheets feature lines carved every 5 mm for easy bending and cutting. To build a prototype, cut along the carved lines before bending to obtain the desired shape.Features Do-it-yourself shielding cabinet; users can create a custom cabinet with this kitShape board-level shieldingFoldable and cuttable with carved lines every 5 mmMaterial is nickel silver with the same performance as the tinplated steel used in the standard cabinetsUseful for fast prototyping Applications Preventing EMI radiation from PCB and keeping sensitivity lowRF output stagesRF input and amplifier stagesOscillatorsEMC-sensitive parts in plastic cases Read more: SHIELDIY DO-IT-YOURSELF CUSTOM SHIELDING CABINETS ### Implementing Automation: TSOP 1738 Sensor and Arduino Applications Introduction Hello, tech enthusiasts! Welcome once again to Techatronic. We trust that you're familiar with the concept of automation, which happens to be quite popular these days. In this piece, we'll delve into the process of automating three LEDs utilizing a TSOP 1738 sensor module along with an Arduino UNO. Follow the circuit layout provided, then proceed to upload the corresponding code to the Arduino. Additionally, feel free to explore our articles covering topics such as IoT and fundamental electronics. Description Upon powering the Arduino, the initial display on the LCD will showcase "remote control automation." You have the flexibility to modify this text according to your preferences by altering the code. Within this project, you gain the ability to remotely switch LED lights on or off simply by transmitting wireless signals. This functionality is made possible through the utilization of an IR sensor module (situated at the receiver) for signal decoding. As the lights are toggled on or off, a message promptly appears on the LCD screen, reflecting the current state of the lights. Additionally, you can explore the construction of a remote control robot using the TSOP 1738 module and Arduino, which is another facet of this project. Although our current setup involves three LEDs, the system offers the flexibility to connect additional DC and AC appliances (employing relays) for expanded functionality. Components Required Arduino UNO TSOP 1738 sensor module Three LEDs with varying colors 220 ohm resistors 10K potentiometer Jumper wires and a breadboard 16×2 LCD display USB cable required for code uploading Circuit for Automation Using TSOP Utilize the TSOP 1738 sensor module by linking its VCC pin to the Arduino's 5 volts pin. Access our article detailing the functionality of TSOP sensors with Arduino for further guidance. Establish a connection by linking the GND pin of the TSOP sensor module to the Arduino's GND pin. Subsequently, connect the OUT pin of the TSOP sensor module to the Arduino's digital pin. Refer to the provided diagram for a visual representation. For interfacing the 16×2 LCD, connect its pins to Arduino's digital pins (3 to 8) as indicated in the diagram. To assist with these connections, consult our article illustrating the LCD-to-Arduino connections. Proceed by connecting the positive leg of the first LED to an Arduino digital pin. Repeat this process for the positive legs of the second and third LEDs. For all three LEDs, link their negative legs to the Arduino's GND pin using a 220 ohm resistor. Lastly, integrate a 10K potentiometer with the LCD module according to the schematic provided. Your circuit assembly is now complete. ### BEELINK GEMINI M; ULTRA-THIN MINI PC BASED ON INTEL GLK-R PROCESSOR Shenzhen based computer hardware manufacturer, Beelink, recently teased the release of a series of new Mini PCs top of which was the Beelink Gemini M, an ultra-thin Mini PC powered by the Intel Celeron J4125 processor running with 8GB of RAM. Featuring an ultra-thin aluminum enclosure and chassis, designed in a manner that allows for use in a variety of applications, the unique 1.77 cm thinness, 340 grams weight, 11.9cm reduced side size, and Vesa support possessed by the Beelink Gemini M, allows easy integration across different platforms including installations behind a monitor. Giving users all that they might expect from a full-blown PC, the Beelink Gemini M comes with an assorted number of ports; including 4 USB 3.0 ports, an SDXC card reader, two HDMI 1.4 outputs to drive two displays in parallel in UltraHD, a 3.5 mm audio jack port with combined headphone and microphone, and a Gigabit Ethernet port. In terms of processing power, the dual-core Intel Celeron J4125 processor being used on the new Mini PC is a member of the recently released Intel Gemini Lake Refresh (GLK-R) family of processors, which are upgraded versions of Intel’s desktop chips, running in a 10 watt PDT (Compared to 6 watts for the Celeron N4100), offering a level of overall performance that positions the Beelink Gemini M in the top category of high performing desktop mini PCs. The Processor, running at a 2 to 2.7GHz speed, comes with 8GB of RAM, 4MB of cache memory, a 64GB eMMC, and an M.2 SATA 3.0 storage ranging from 128 to 512GB in 2242 format. While the specs so far do not reveal the capacity of the device for a high-quality gaming experience, the device thus comes with an Intel UHD 600 graphics card running at 250 to 700 MHz, capable of decompressing video in UltraHD H.265. Read more: BEELINK GEMINI M; ULTRA-THIN MINI PC BASED ON INTEL GLK-R PROCESSOR ### LEARN SAILING MECHANICS WITHOUT LEAVING DRY LAND The ancient art of sailing can be very intimidating for the uninitiated given the shifty nature of wind. To help understand the interaction of wind direction and board orientation, [KifS] designed a hands-on sailing demonstrator that lets students grasp the basics before setting foot on a real sailboat. The demonstrator uses a potentiometer as a tiller to control a model sailboat’s angle, while another stepper motor adjusts the position of a fan to simulate changing wind directions. With an Arduino Uno controlling everything, this setup affords students the opportunity to learn about sail positioning and adjusting to shifting winds in an interactive way, without the pressures and variables of being on the water. [KifS]’s creation isn’t just about static demonstrations. It features four modes that progressively challenge learners—from simply getting a feel for the tiller, to adjusting sails with dynamic wind changes, even adding a game element that introduces random wind movements demanding quick adjustments. [KifS] mentions there are potentials aspects that can be refined, like more realistic sail response and usability, but it already achieved the main project goals. There are a myriad of potential ways to add new tech to the ancient art of sailing. We’ve seen a DIY autopilot system, full sensor arrays, and an open source chart plotter. It’s even been proven you can have a wind powered land vehicle that travels faster than the wind. Source: LEARN SAILING MECHANICS WITHOUT LEAVING DRY LAND ### ERASING EEPROMS ISN’T ALWAYS AS EASY AS IT SEEMS When is 14 volts not actually 14 volts? Given [Anders Nielsen]’s recent struggles with erasing an old-school EEPROM, it’s when you really need it that things tend to go pear-shaped. A little background is perhaps in order. [Anders] is working on a scratch-built programmer for ROMs to complement his 65uino project, which puts a complete 6502 computer into the footprint of an Arduino Uno. He wisely started the ROM programmer project at the beginning, which was to generate the correct voltages for programming. This turned out to be not as easy as you might think thanks to the solderless breadboard’s parasitic effects on the MIC2288 switching boost regulator he chose. The video below is a continuation of the programmer build, which ends up being just as fraught as the first part. Being able to generate the programming voltages is one thing; getting them onto the right pins at the right time using nothing but the 5-volt GPIOs on a microcontroller is another. In true retro fashion, [Anders] tackled that problem with a pair of small-signal transistors, which seemed to work once the resistor values were sorted, at least when applying a 12-volt signal intended to show the ROM’s hard-coded manufacturer ID on the data bus. But erasing the ROM, which requires 14 volts while the chip enable line is held high for 100 ms, proved a little trickier. Despite multiple tries, the ROM wouldn’t erase thanks to the 14-volt rail being dragged down to around 9 volts. [Anders] fixed that with a new base resistor on the driver, to increase the current and keep the voltage up where it needs to be. Just goes to show you that the data sheets don’t always tell the whole story. We’ve been enjoying the unfolding story of this programmer, and we’re looking forward to the next installment. Source: ERASING EEPROMS ISN’T ALWAYS AS EASY AS IT SEEMS ### DON’T PANIC: A COOPERATIVE BOMB DEFUSING GAME [Heath Paddock] wanted to confound his friends with a game that mimics an escape room in a box. About six months after starting, he had this glorious thing completed. It’s a hardware version of a game called Keep Talking and Nobody Explodes where players have five minutes to defuse a suitcase bomb. This implementation requires at least two players, one with the box-bomb itself, and one who holds all the knowledge but can’t see the box-bomb to defuse it. [Heath]’s version has twice as many modules as the original game, each hand-wired one driven by an Arduino. One of the modules is an LED maze. There are two green anchor LEDs in one of six configurations, and and blue and a red LED. The object is to move the blue LED next to the red one without touching any walls. Of course, the box-holder can’t see the walls and must describe the configuration of the anchor LEDs to their partner in order to get started. All of the modules are quite different, which likely makes for an extremely fun and challenging five minutes. [Heath] reports that getting inter-module communication down was a long road. Eventually, [Heath] settled on a mesh network configuration and connected everything in a big loop. Be sure to check out the walk-through video after the break. This isn’t the first time we’ve seen a hardware implementation of this game. Here’s one that uses a Raspberry Pi. Source: DON’T PANIC: A COOPERATIVE BOMB DEFUSING GAME ### SUPER BRIGHT NIXIE-LIKE LINEAR DOT DISPLAY LED Bar graphs are one of the best ways to provide visual feedback to users in projects where using a screen might be an overkill. Especially in projects where you need to indicate level, intensity, and other values that are worth representing on a bar graph. The quality of LED bar graphs has not really improved over time. Users are still subjected to the low resolution due to spaces between the LEDs, the poor brightness, and high power consumption of the LEDs. There have been several attempts to fix this, with different products on different electronics stores, but one recent LED bar graph which caught our attention with its next-gen feel and brightness is the Nixie-Like Linear Dot LED bar graph recently evaluated in a blog post on Tindie. A solid attempt in replacing the classic IN-13 linear bar graph Nixie tube whose price has increased incredibly in the past few years, the super bright High-resolution LED paragraph designed by US-based Studio 449 and provides a modern looking high performing LED bar graph without the huge expense and high-power requirements of the old Nixie tubes. Featuring a linear array of TLC59283 LED drivers with 128 densely-placed orange SMD LEDs placed 1mm apart, the new graph allows you to attain a resolution of up to 128 points/steps, all on a portable 25 x 150 mm board dimensions, which ensures it does not cause a significant change in the form factor of your project. Read more: SUPER BRIGHT NIXIE-LIKE LINEAR DOT DISPLAY ### WIRELESS SD CARD READER USING ESP8266 One of the good things about being a maker is the power it gives you to create your own stuff. Believing USB devices have not lived up to their designation of truly being universal and working irrespective of the kind of ports they are plugged into, Hackaday user, Neutrino, recently embarked on a mission to develop devices that function irrespective of the kind of USB port they are plugged into, with the first device attempt being a Wireless SD card reader with FTP support. The wireless SD card reader allows users to bypass the need to plug the SD card into a device before file operations on it can be performed. Once an SD card is inserted into the reader and the reader connected to a USB port (either with data enable or Power only like that of chargers), the wireless SD card comes on and creates an access point which when connected to, allows users to send and receive files from the SD Card, wirelessly, via an FTP Server. While wireless card readers have been around for a while they are usually, relatively expensive and the option being provided by Neutrino’s build is a considerably cheaper route to making these useful devices. Some of the major  low-cost components used in Neutrino’s wireless SD card include: Espressif ESP8266 ESP-12E module1x Micro SD card1x Micro SD adapter Read more: WIRELESS SD CARD READER USING ESP8266 ### New Arduino Cloud Editor offers a classic Arduino IDE experience The world of Arduino development has just been given a significant boost with the introduction of a new online platform known as the Arduino Cloud Editor. This platform is changing the way developers work with Arduino projects by providing a seamless experience that can be accessed from anywhere with an internet connection. Unlike the traditional Arduino Integrated Development Environment (IDE), the Cloud Editor is a major update aimed at improving your efficiency and the way you manage your projects. The Cloud Editor brings together the previously separate simple and full editors into one robust online tool. This means you no longer have to switch between different versions, making your work more streamlined. Even though this new tool is available, you can still use the existing IDE if you prefer, which makes the transition to the cloud smoother. Arduino Cloud Editor IDE One of the key improvements in the Cloud Editor is the way it handles libraries and examples. If you’re working on complex projects that require a variety of resources, you’ll find it easier to find and use what you need. This is a big step forward in making project management more intuitive. Debugging is an essential part of development, and the Cloud Editor’s serial monitor has been upgraded to help you with this. It now has features like the ability to download logs and add timestamps, giving you more detailed information to solve problems and refine your projects. Another important aspect of the Cloud Editor is that it works with all devices compatible with the Arduino IDE. This means you can use it on any device that has a browser, which gives you a lot of flexibility in how and where you work on your projects. Keeping your projects organized is easier with the Cloud Editor thanks to a centralized sketch repository. This includes a sketchbook feature that lets you create folders to keep your workspace tidy and your projects easy to manage. The Cloud Editor also makes a distinction between standard “Sketches” and “IoT Sketches” for projects that connect with the Arduino Cloud. While it doesn’t support Chromebooks right away, there are plans to add this feature, which will make the platform even more accessible. The Arduino Cloud itself is a comprehensive platform for IoT projects. It works with a wide range of devices and programming languages, and you can access it from your browser or mobile device. This means you can always get to your projects, no matter where you are. If you’re new to the Cloud Editor, there’s plenty of documentation to help you get started. There’s also a promotional offer for the Maker plan, which gives new users a chance to try out the Cloud Editor at a special rate. The launch of the Arduino Cloud Editor is a big moment for developers who use Arduino. With its wide range of features, better debugging tools, and compatibility with many devices, the Cloud Editor is likely to become a key tool for developers around the world. Whether you’re working on personal projects or complex IoT solutions, the Cloud Editor is designed to support your work and improve your experience with Arduino. Source: New Arduino Cloud Editor offers a classic Arduino IDE experience ### TRENZ TE0802: ZYNQ ULTRASCALE+ MPSOC DEVELOPMENT BOARD Designed and manufactured by our partner, Trenz Electronic, the TE0802 is a development board integrating a Xilinx Zynq UltraScale+ MPSoC device. The board features multiple connectivity interfaces, including DisplayPort, VGA, USB 3.0, and Gigabit Ethernet RJ45. With a cost-optimized ZU2CG UltraScale+ MPSoC, embedded developers and users familiar with Arm Cortex-R and Arm Cortex-A53 processors can get started in applications such as industrial motor control, sensor fusion, IoT, Real-time I/O, and medical devices. The versatile onboard I/O, including push buttons, slide switches, a seven-segment LED display, and 12-pin Pmod connectors, provide everything you need in one convenient package. The Trenz TE0802 is an excellent choice for getting started with the Zynq UltraScale+ family. Applications that require higher performance may be better served with a Genesys ZU, which features a ZU3EG UltraScale+ MPSoC with additional capacity and processing power. Features: MPSoC:  XCZU2CG – Xilinx Zynq UltraScale+ MPSoCPackage: 1SBVA484ETemperature Grade: Extended (0 to +100 °C)RAM/Storage:SDRAM: LPDDR4 8Gb 256Mx16x 2SPI Flash 256Mb (32M x 8) 133 MHzEEPROMs 2Kb (256 x 8)Interfaces:Two 12-pin Pmod ConnectorsUSB JTAG/UART microUSB1GB Ethernet RJ45USB 3.0 Host (Type A Connector)microSD CardM.2 SSD PCIe3.5 mm Earphone Jack (PWM Output)Display PortVGA4 Digit 7-Segment LED Display Read more: TRENZ TE0802: ZYNQ ULTRASCALE+ MPSOC DEVELOPMENT BOARD ### IoT Air Quality Sensor In this Instructable, I will walk you through the steps to build an IoT Air Quality Sensor. This is an inexpensive air quality sensor with reasonable accuracy and is accessible to internet through WiFi. This project is to integrate 3 sensors that detect different kinds of gases and particles with Nodemcu and then, send the data detected to the internet. The 3 sensors are MQ2 sensor for smoke, MQ9 sensor for carbon monoxide and PMS3003 G3 particle sensor for PM1.0, PM2.5 and PM10. Nodemcu 1.0 ESP8266 is a very good micocontroller for developing IoT project because it has an inbuilt WiFi function by ESP8266 chip. It provides easy and very stable connection to the internet. Step 1: Bill of Materials Things you would need: Nodemcu 1.0 ESP8266MQ2 gas sensorMQ9 gas sensorPMS3003 G3 particle sensor3.3V to 5V boost converter180ohm resistor x2 and 330 ohm resistor x2Analog Multiplexer 4051 (CD4051BE)1.3 inches OLED monitor SSD13067.4V Li-ion batteryLi-ion battery Charger BoardBreadboard Step 2: Nodemcu 1.0 ESP8266 Nodemcu 1.0 ESP8266 is a very good micocontroller for developing IoT project because it has an inbuilt WiFi function by ESP8266 chip. It provides easy and very stable connection to the internet. One drawback of Nodemcu is that it has only one analog I/O pin. For this project, there are 2 sensor, MQ2 and MQ9 gas sensor using analog output. In this case, a technique, called multiplexing, can be used. Instead of reading output from 2 sensor at the same time, reading data one by one. In this project, an analog multiplexer CD4051BE is used. It is a 8-channel multiplexer which means it can operate with 8 outputs. If you do not like to use multiplexer, simple circuit using diodes can also be achievable. You can take a look at Multiple Analog Inputs Using One Analoge Pin by Ingenerare or ESP8266 ADC - Multiple Analog Sensors by breagan22. Another drawback is that Nodemcu only supplies 3.3V output. For many devices and the three sensors using in this project, they need 5V power supply to operate. Therefore, a 3.3V to 5V boost converter is needed to step up the voltage or simply supply the devices by other 5V supply. There are many firmware for nodemcu. Nodemcu 1.0 is programmable by Arduino IDE, but few steps is needed before you can use it. You can look at Quick Start to Nodemcu (ESP8266) on Arduino IDE by Magesh Jayakumar. Step 3: Connection The above is the connection of all different components. 3.3V to 5V boost converter is connected to the 3.3V output of nodemcu. I will explain how to connect other components below. Step 4: Step 3: Connecting MQ2 and MQ9 Gas Sensor MQ2 and MQ9 gas sensor both have four pins: VCCGNDDO (Digital Control)AO (Analog Output) The analog output of MQ2 and MQ9 is between 0V to 5V whereas the analog pin of nodemcu can only read between 0V to 3.3V. That means nodemcu cannot read the data if MQ2 or MQ9 sensor output is above 3.3V. The data read is not accurate. Therefore, voltage is needed step down. In this project, voltage divider by two resistors is used. The voltage output is determined by the ratio of the value of two resistors. I use 180ohm as R1 and 330ohm as R2 so that Vout is 3.3V. So, Vin is connected to AO pin of MQ gas sensors. Vout is connected to channels of the multiplexer. Only three pins of each sensor are used: Vcc to 5V supplyGND to nodemcu GND pinVout of voltage divider to CD4051BE channel 1 and channel 2(pin14 and 15) Multiplexer connection: Vdd (pin 16) to 5V supplyINH, Vee, Vss (pin 6, 7, 8) to nodemcu GND pincommon out/in (pin 3) to nodemcu A0 pinA, B, C (pin 11, 10, 9) to nodemcu D0, D1, D2 A, B, C (pin11, 10, 9) are used to select channel for output. A, B, C are digital input which means only read 0 and 1. 3-digit binary number is formed in the order of CBA. As we use channel 1 and 2, denary number of 1 and 2 in 3-digit binary number are 001 and 010 respectively. Therefore, when we want output of channel 1, D0 output 1, D1 and D2 output 0. When we want output of channel 2, D0 output 0, D1 output 1 and D2 output 0. Step 5: Connecting PMS3003 Sensor PMS3003 has 8 pins for different purposes. In fact, only 4 pins is used in this project: VCC (pin 1) to 5V supplyGND (pin 2) to nodemcu GND pinRXD (pin 4) to nodemcu tx pinTXD (pin 5) to nodemcu rx pin Step 6: Connecting 1.3 Inches OLED Display SSD1306 It has 4 four pins. Connection: VCC to 3.3V pin of nodemcuGND to GND pin of nodemcuSCL to D3 pin of nodemcuSCA to D4 pin of nodemcu Step 7: Programming I use Arduino IDE to program. I use thingspeak as IoT platform. Change to your API key in the program. Change to your own SSID and password. Source: IoT Air Quality Sensor ### ARDUINO, VIRTUALLY While simulating an Arduino isn’t a new idea, a recent project by [LRusso] provides an open source JavaScript simulator that runs in your browser. You can try it out live or host it yourself if you prefer. The simulator looks much like the standard IDE, so there isn’t much to learn. You can select from several targets, including a UNO R3, a MEGA 1280, a MEGA 2560, or a NANO V3. At the bottom of the screen, you’ll see the correct number of digital pins, analog pins, and the serial monitor. The code is relatively new, and we noticed that the digital and output pins seem to work only for outputs. There is no way to modify any of the values from the user interface. You can, however, enter things into the serial monitor. You can run a canned demo that uses digital and analog output. There is also another sample that uses the serial port. Unlike some other simulators, you can’t really add much external circuitry but, for some purposes, that isn’t a problem. If you are looking for more, there is Simulide, which is also free. Falstad can do mixed signal simulations with Arduino code. There’s also Wokwi, which we’ve covered a few times before. Source: ARDUINO, VIRTUALLY ### INTRODUCING SPARKFUN SERVICES Electronics retailer SparkFun Electronics has announced the launch of nine new value-added services covering board development, logistics, and training to all its customers. By Rich Pell @ eenewsembedded.com Over the last decade, says the company, it has tested and refined ideas for services by partnering with companies such as Digi-Key, RedHat, Sphero and u-blox, resulting in creative and mutually beneficial outcomes spanning consultation, development, manufacturing, and logistics, which has helped form the foundation for the following new services : Development Board Design and ManufacturingCustom AssemblySales/Demo Kit DevelopmentCustom Kit DevelopmentTape and ReelCustom ProcurementStrategic Inventory ManagementMulti-Address ShippingWorkshops and Training “From the start, SparkFun has been dedicated to making electronics more accessible,” says Glenn Samala, SparkFun CEO. “With these service offerings, we are able to leverage our development expertise and logistics capabilities to help our business partners achieve their goals.” “While most of these services are not new to us and were developed to meet the needs of our partners over the last decade, we are excited to now be able to offer them to a wider audience,” says Samala. “By sharing access to our network, we hope to help streamline our customers’ ability to integrate the tech they have into the product they need.” Read more: INTRODUCING SPARKFUN SERVICES ### AUDIO VU/SOUND LEVEL METER WITH LM339 This is an “Audio VU Meter” or “Sound Level Meter”, it is a general-purpose bar-graph Audio VU meter designed for fun projects. All you need is to hook up one wire to the output of the audio amplifier’s speaker pin along with GND and see the magic. The response of the circuit is very fast and it provides beautiful visual representation from audio input signal. A simplified schematic is provided to give the general idea of the operation.  The signal is applied to a series of 20 comparators, each of them is biased to a different comparison level by the resistor string. In the circuit diagram, the resistor string is connected to the 100K potentiometer which provides reference voltage 1.9V to 12V. As the input voltage varies from 0 to 1.9V, the comparator’s outputs are driven low one by one, switching on the LED indicators. This circuit will work with the audio signal level from 1.9V to 12V, it will not work with the audio line signal.  String resistor values calculated to use this project with audio amplifier of 1W to 10W. PR2 provided to adjust the input audio signal level. Testing the board is simple, keep both potentiometer PR1 and PR2 at the center, hook-up 2 wires GND and Input signal to Audio amplifier speaker out, adjust the PR1 so all LEDs are in ON condition at the full audio signal level. Read more: AUDIO VU/SOUND LEVEL METER WITH LM339 ### TORADEX ANNOUNCES AVAILABILITY OF DAHLIA CARRIER BOARD FOR VERDIN SOMS Toradex, a leader in embedded computing, announces the release and availability of Dahlia, the latest addition to its carrier board offerings for the Verdin family of System on Modules (SoMs). Dahlia provides a simple and convenient development platform for the Verdin SoMs. The board provides easy access to the most common interfaces in a compact 120mm x 120mm form factor. As with all Toradex carrier boards, the design is fully open and is an ideal starting point for your own customized Verdin carrier board. Highlights: Simple power via USB-C (PD and BC)UART and JTAG interfaces conveniently accessible via a single USB-C connectorGigabit Ethernet, PCI Express, MIPI DSI, MIPI CSI-2, CAN, etc.Free and open design – allowing you to access the complete Altium design and manufacturing data Verdin modules provide a modern, future-proof set of interfaces focusing on ease-of-use and robustness. The Verdin line expands on the already successful Colibri and Apalis SoM families and comes with the same extensive software, documentation, ecosystem and support. This includes Torizon – the easy-to-use industrial Linux platform – and Toradex BSP Layers and Reference Images for Yocto Project. Read more: TORADEX ANNOUNCES AVAILABILITY OF DAHLIA CARRIER BOARD FOR VERDIN SOMS ### FEEDING THE FIRE BY ROBOT It might seem a little bit counterintuitive, but one of the more carbon-neutral ways of heating one’s home is by burning wood. Since the carbon for the trees came out of the air a geologically insignificant amount of time ago, it’s in effect solar energy with extra steps. And with modern stoves and well-seasoned wood, air pollution is minimized as well. The only downside is needing to feed the fire frequently, which [Anders] solved by building a robot. [Anders]’ system is centered around a boiler, a system which typically sits in a utility area like a basement and directs its heat to the home via another system, usually hot water. An Arduino Mega controls the system of old boat winches and various motors, with a grabber arm mounted at the end. The arm pinches each log from end to end, allowing it to grab the uneven logs one at a time. The robot also opens the boiler door and closes it again when the log is added, and then the system waits for the correct set of temperature conditions before grabbing another log and adding it. And everything can be monitored remotely with the help of an ESP32. The robot is reportedly low-maintenance as well, thanks to its low speed and relatively low need for precision. The low speed also makes it fairly safe to work around, which was an important consideration because wood still needs to be added to a series of channels every so often to feed the robot, but this is much less often than one would have to feed logs into a boiler if doing this chore manually. It also improves on other automated wood-burning systems like pellet stoves, since you can skip the pellet-producing middleman step. It also eliminates the need to heat your home by burning fossil fuels, much like this semi-automated wood stove. Source: FEEDING THE FIRE BY ROBOT ### PUSH THE EDGE WITH UP XTREME LITE AAEON, a leading developer of edge computing solutions, introduces the latest from UP Board, the UP Xtreme Lite. UP Xtreme Lite brings the powerful 8th Generation Intel® Core™ processors on a platform that’s even easier for developers on a budget. The UP Xtreme Lite is designed to provide developers with a platform that’s flexible, powerful, and a great value while not sacrificing performance. Powered by the 8th Generation Intel Core i3/i5/i7 processors (formerly Whiskey Lake), the UP Xtreme Lite provides scalable performance with support for up to 16 GB SO-DIMM memory and SATA III (6.0 Gb/s) available with SATA port and M.2 2280 slot. Expandability for the UP Xtreme Lite includes M.2 2230 E-Key slot, M.2 2280 M/B-Key supporting two PCIe [x1] lanes and M.2 3042/3052 B-Key. UP Xtreme Lite is designed to be quickly adaptable to any edge computing application. It can easily connect to a range of devices thanks to four USB 3.2 Gen 1 ports, two COM ports, 40-pin HAT header and more on-board connectors. With support for Wi-Fi expansion, SIM card modules and two Gigabit Ethernet ports, the UP Xtreme Lite is a great choice as an IoT or edge network gateway. The UP Xtreme Lite is also the first product in AAEON’s line up to offer support for 5G modules, along with supporting 4G/LTE communication. Read more: PUSH THE EDGE WITH UP XTREME LITE ### Arduino Frequency Counter Tutorial for Electronics Enthusiasts In this guide, learn to construct a frequency counter device utilizing an Arduino UNO board. This device showcases signal frequency values on a 1602 LCD screen. It is designed specifically to measure the frequency of PWM signals that have a peak voltage of 5V. Hardware Required: Sure, here's a rephrased list of the components needed to complete this project: - Atmega328P datasheet (for Arduino UNO board) - 16×2 LCD screen - 330 ohm resistor - Potentiometer (10k ohm variable resistor) - Breadboard - Jumper wires Arduino frequency counter circuit: The following details the circuit diagram for the project. Utilizing a 16×2 LCD screen with 2 rows and 16 columns, it serves to exhibit the frequency and period values of the input voltage. Here's the pin mapping configuration: - RS connects to Arduino digital pin 2 - E connects to Arduino digital pin 3 - D4 connects to Arduino digital pin 4 - D5 connects to Arduino digital pin 6 - D6 connects to Arduino digital pin 7 - D7 connects to Arduino digital pin 8 - VSS, RW, D0, D1, D2, D3, and K link to Arduino GND - VEE connects to the output of the 10k ohm variable resistor (or potentiometer) - VDD links to Arduino 5V - A connects to Arduino 5V through a 330 ohm resistor The VEE pin regulates the LCD contrast, while A (anode) and K (cathode) designate the back light LED pins. The PWM signal comprises two pins, designated as positive (+) and negative (-), and they are linked to the circuit as demonstrated earlier. The positive terminal links to Arduino's digital pin 5, while the negative terminal connects to the Arduino GND pin. Arduino frequency counter code The Arduino code provided necessitates a supporting library, namely FreqCount, to facilitate the project process. This library can be acquired through the Arduino library manager (accessible via "Manage Libraries..."), or alternatively, it can be installed manually by obtaining and installing its zip file. Below is the download link for the Arduino FreqCount library: Direct link to Arduino FreqCount library The FreqCount library utilizes the Timer/Counter1 module to tally the number of pulses within a set duration. For this specified duration, the Timer/Counter2 module is employed. Full Arduino code: /************************************************************************* * * Arduino frequency counter. * This is a free software with NO WARRANTY. * https://simple-circuit.com/ * ************************************************************************/ #include #include     // include Arduino LCD library // LCD module connections (RS, E, D4, D5, D6, D7) LiquidCrystal lcd(2, 3, 4, 6, 7, 8); void setup(void) {   // set up the LCD's number of columns and rows   lcd.begin(16, 2);   lcd.print("FREQUENCY:");   // initialize freqCount library with time basis of 1000ms (1 second)   // Arduino counts number of pulses during period of 1 second   FreqCount.begin(1000); } // main loop void loop() {      if (FreqCount.available()) {     unsigned long count = FreqCount.read();     lcd.setCursor(0, 1);     lcd.print(count);  // print frequency value in Hz     lcd.print(" Hz      ");   } } // end of code. The video below shows a protoboard circuit of the project: ### LTC7804 40 V 3 MHZ BOOST CONTROLLER WITH SPECTRUM FREQUENCY Analog Devices’ LTC7804 offers low Iq, small solution size, and PassThru™ operation for up to 99.9% efficiency ADI’s LTC7804 is a low IQ, 3 MHz PassThru operation capable synchronous boost DC/DC switching regulator controller that operates up to a 40 V input voltage. Its low quiescent current extends operating runtime in battery-powered systems. Spread spectrum frequency operation helps reduce radiated and conducted EMI peaks, and up to 3 MHz switching reduces the solution size, ideal for a broad range of applications and markets. Features: Synchronous operation for reduced power dissipationPassThru operation/100% duty cycle capability for synchronous MOSFETWide VIN range: 4.5 V to 40 V, operates down to 1 V after start-upOutput voltage up to 40 VLow operating IQ: 14 μASpread spectrum operationSelectable fixed frequency (100 kHz to 3 MHz) Read more: LTC7804 40 V 3 MHZ BOOST CONTROLLER WITH SPECTRUM FREQUENCY ### SKIP THE RADIO WITH THIS SOFTWARE-DEFINED ULTRASOUND DATA LINK We know what you’re thinking: with so many wireless modules available for just pennies, trying to create a physical data link using ultrasonic transducers like [Damian Bonicatto] did for a short-range, low-bitrate remote monitoring setup seems like a waste of time. And granted, there are a ton of simple RF protocols you can just throw at a job like this. Something like this could be done and dusted for a couple of bucks, right? Luckily, [Damian] wanted something a little different for his wireless link to a small off-grid solar array, which is why he started playing with ultrasound in an SDR framework. The design for his “Software-Defined Ultrasonics” system, detailed in Part 1, has a pair of links, each with two ultrasonic transducers, one for receiving and one for transmitting. Both connect to audio amplifiers with bandpass filters; the received signal is digitized by the ADC built into an Arduino Nano, while the transmitted signal is converted to analog by an outboard DAC. The transducers are affixed to 3D printed parabolic reflectors, which are aimed at each other over a path length of about 150′ (46 m). Part 2 of the series details the firmware needed to make all this work. A lot of the firmware design is dictated by the constraints introduced by using Arduinos and the 40-kHz ultrasonic carrier, meaning that the link can only do about 250 baud. That may sound slow, but it’s more than enough for [Damian]’s application. Perhaps most importantly, this is one of those times where going slower helps you to go faster; pretty much everything about the firmware on this system applies to SDRs, so if you can grok one, the other should be a breeze. But if you still need a little help minding your Is and Qs, check out [Jenny]’s SDR primer. Source: SKIP THE RADIO WITH THIS SOFTWARE-DEFINED ULTRASOUND DATA LINK ### A DASHBOARD OUTSIDE THE CAR One of the biggest upsides of open communications standards such as CAN or SPI is that a whole world of vehicle hacking becomes available, from simple projects like adding sensors or computers to a car or even building a complete engine control unit from the ground up. The reverse is true as well; sensors and gauges using one of these protocols can be removed from a car and put to work in other projects. That’s the idea that [John] had when he set about using a vehicle’s dashboard as a information cluster for his home. The core of the build is an Astra GTE dashboard cluster, removed from its host vehicle, and wired to an Arduino-compatible board, in this case an ESP32. The code that [John] wrote bit-bangs an SPI bus and after some probing is able to address all of the instrument gauges on the dashboard. For his own use at home, he’s also configured it to work with Home Assistant, where each of the gauges is configured to represent something his home automation system is monitoring using a bit mask to send data to specific dials. While this specific gauge cluster has a lot of vehicle-specific instrumentation and needs a legend or good memory to tie into a home automation system without any other modification, plenty of vehicle gauges are more intuitive and as long as they have SPI they’d be perfect targets for builds that use this underlying software. This project takes a similar tack and repurposes a few analog voltmeters for home automation, adding a paper background to the meters to make them easier to read. Source: A DASHBOARD OUTSIDE THE CAR ### FLASH AN LED FROM AC-MAINS POWER LED technology is opening the door to a variety of high-power-illumination applications. The circuit in Figure 1 can let you know when ac power is available. To drive a power LED from the ac line requires a converter or a similar arrangement. In this circuit, a passive dropper greatly simplifies the total design. You can also simplify the circuit to run on dc power, which lets you use it from automotive batteries to supply light at night. by TA Babu @ EDN The design comprises an inrush-limiting resistor, R1; a half-wave rectifier with a filtering capacitor comprising D2, D3, D4, and C2; a relaxation oscillator; and two high-power LEDs. Because the circuit drives the LED with a constant current, you can use any LED color to suit the situation. The circuit uses a simple DIAC (diode-alternating-current) relaxation oscillator, which activates a constant-current switching circuit comprising IC2 and Q1. The DIAC turns on when capacitor C3 charges through diode D1 and resistor R2 from the mains voltage. After a number of half-cycles of the mains, the voltage on C3 exceeds the break-over voltage of the DIAC, the DIAC conducts, and C3 discharges through R3 and optocoupler IC1. The optocoupler activates the constant-current switching circuit, resulting in a brief, intense flash of light from the LEDs. Read more: FLASH AN LED FROM AC-MAINS POWER ### Android App-Enabled WS2811 LED Control with Arduino via Bluetooth Hello everyone, welcome back to Techatronic. Today, we're diving into an exciting project centered around illuminating effects. You might have come across RGB and pixel lighting in various settings such as decorations, vehicles, and even light bulbs. Our focus today is on working with WS2811 in conjunction with Arduino Bluetooth control using an Android app. We'll provide you with all the necessary steps to set this up. Specifically, we'll be creating an Android app utilizing the MIT App Inventor to control both the color and patterns of the lights. If you're interested in recreating this project, stay tuned, follow along, and we'll guide you through each step. Introduction The WS2811 IC facilitates addressable RGB lighting, allowing for easy programming with a wide array of effects. I've engaged in numerous projects involving WS2811 pixel lights, commonly employed in home, shop, restaurant, and bar decorations. Now, I aim to simplify the control of WS2811 using Arduino through mobile phones. To accomplish this, we'll leverage the MIT App Inventor. This project involves two primary steps: developing the Android app and handling the circuitry and coding. Let's commence with the initial phase – creating WS2811 control via Arduino using an Android app. Additionally, I've previously utilized this same Android app in various projects, such as controlling a Bluetooth-enabled RC car. Create an android application. Today, we'll guide you through creating an Android app utilizing the MIT App Inventor. This app will leverage the phone's Bluetooth capability to transmit characters. The app will feature buttons; upon tapping a button, it will transmit specific data to the Arduino. Essentially, it's an application designed for Bluetooth control. Let's dive into the step-by-step process of crafting this application. Step 1 Visit the official MIT App Inventor website and proceed to create your account. Click on the 'Create App' button, where you'll find the choice to either create a new account or log in using your Google account. step 2. Sure, here's a rephrased version: 1. "Begin by initiating a new project and naming it accordingly. 2. You'll find a dashboard for creating the application interface. 3. Within the layout section on the left-hand side, drag and drop the horizontal arrangement onto the mobile screen." step 3. To adjust the width, click on the right side and choose 'fill parent'. Next, navigate to the user interface section and place the button onto the mobile screen within the horizontal arrangement. Drag and drop at least three buttons into this area.   Step 4. Modify the properties of the buttons, such as color and name, from the right sidebar. Move the Bluetoothclient 1 element from the connectivity section to the mobile screen using drag and drop functionality. Step 5. Sure, here are the rephrased instructions for two different blocks in an app interface: 1. Locate and select the 'block button' situated in the upper right-hand corner, then proceed to commence the coding process." 2. "Create two distinct blocks within the interface: one for control and another for Bluetooth functionality. These blocks should encompass 'list picker 1' and 'Bluetooth' respectively. Step 6. make 3 more blocks as given in the image from control, bluetoothclient1 and text. Once your application is prepared, proceed by clicking the 'Design' button, followed by 'Build' and select 'Android App.' The website will display a QR code, which plays a crucial role in controlling RGB with Arduino for your project. Download 'MIT App Inventor' from the Google Play Store onto your mobile device. Scan the identical QR code to automatically download the app onto your phone. Next, we move on to the second phase of this project: establishing the circuit, which is a straightforward process. WS2811 Arduino Circuit diagram Bluetooth control using Android app PCBWay PCB Prototyping Services I've set up the entire circuit on a breadboard, but as you're aware, using a breadboard isn't the most efficient approach for this project. That's where PCBWay's Rapid PCB Prototyping for Research Work comes in. Personally, I highly recommend PCBWay because they can provide your initial boards within just 24 hours, ensuring you get it right on your first attempt! The prototyping phase stands as a pivotal time for engineers, students, and hobbyists alike. PCBWay not only accelerates the production of your boards but also ensures precision and cost efficiency. This significantly diminishes expenses and expedites the electronic development process. PCBWay offers a spectrum of PCBs ranging from 2 Layer PCBs to sophisticated HDI and flex boards. Despite the diverse functionalities and application areas of the produced PCBs, I'm genuinely impressed by the board quality, prompt delivery, and the cost-effectiveness they offer. WS2811 with Arduino code Bluetooth control using Android app #include #define LED_PINA 13 #include SoftwareSerial mySerial(4, 5); // RX, TX #define NUM_LEDS 100 CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds(leds, NUM_LEDS); mySerial.begin(9600); Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: int q; if(mySerial.available()>0) { char m = mySerial.read(); Serial.println(m); // Serial.println(t); switch (m) { // warm slowly pattern start here (RED) case 'A': while(1) { if(mySerial.available()>0) { break; } for(q=0; q<=90; q++){ if(mySerial.available()>0) { break; } for ( i = 0; i <=NUM_LEDS; i++ ) { leds[i] = CRGB ( 255,0, 0); if(mySerial.available()>0) { break; }} FastLED.setBrightness( q); FastLED.show(); delay(d); if(mySerial.available()>0) { break; } } for(q=90; q>=0; q--){ if(mySerial.available()>0) { break; } for ( i = 0; i <=NUM_LEDS; i++ ) { leds[i] = CRGB ( 255,0, 0); if(mySerial.available()>0) { break; }} FastLED.setBrightness( q); FastLED.show(); delay(d); if(mySerial.available()>0) { break; } } if(mySerial.available()>0) { break; } } // warm slowly pattern end here (RED) // warm slowly pattern start here (BLUE) case 'B': while(1) { for(q=0; q<=90; q++){ for ( i = 0; i <=NUM_LEDS; i++ ) { leds[i] = CRGB ( 0,255, 0); } FastLED.setBrightness( q); FastLED.show(); delay(d); } for(q=90; q>=0; q--){ for ( i = 0; i <=NUM_LEDS; i++ ) { leds[i] = CRGB ( 0,255, 0); } FastLED.setBrightness( q); FastLED.show(); delay(d); } } If you encounter any challenges, refer to our previous article on uploading code to Arduino. With this information, you should be able to independently create your own system to control WS2811 using an Android app. If you encounter any difficulties, feel free to ask for assistance in the comments section. ### A TOUCHSCREEN REFLOW OVEN CONTROLLER USING AN ARDUINO PRO MINI We have seen people make many simple reflow ovens, comprising of an old toaster oven, a Solid State Relay (SSR), a thermocouple, and a microcontroller to get it functioning. Hobbyists and makers have been converting old toaster ovens into PCB reflow machines in other to save money, rather than buying expensive ones. This has moved Mangey_Dog to design a reflow oven, that looks more like an over the shelf toaster that you can buy at any electronic store, with all the components integrated inside the main chassis. He bought the toaster for the project from a German eBay store for around £22, and due to his limited budget, and due to the pandemic that delayed the shipping of the part from china he couldn’t buy all new components. He settled for a used German-made 1000-watt Kleiner pizza oven, which wasn’t totally perfect due to its 1000-watt, but met the specifications he needed for this build, and sort for components locally. After turning on the oven, he found out unfortunately that the oven’s heating elements weren’t what he wanted. They were slow at heating up to temperature, only rising at one degree per second. To increase the heat, he wrapped the heating chamber with ceramic insulation, which was supposed to be installed in the original oven, but likely left off so as to cut costs. He also equipped the oven with a halogen heating element, which he says increased the oven up to 6-degrees per second. As he progressed with the build, Mangey_Dog integrated an Arduino Pro Mini and touchscreen interface from Nextion displays, although he is not a fan of their product due to the low quality of parts he bought from them over time, however, the display part he got from them for the project offered some nice graphics to control the oven, then a thermocouple to sense the accurate temperature readings, and a dimmer module rated at 4000W to maintain the heating components, instead of a solid-state relay. The Arduino and the dimmer work together to enable efficient circuit control overheating temperatures around the chamber. The Arduino and dimmer control kept the current in the house steady without any bulb flickering when it was turned on to full power. Read more: A TOUCHSCREEN REFLOW OVEN CONTROLLER USING AN ARDUINO PRO MINI ### Arduino-Based Smartphone-Controlled Light System Hello everyone, welcome back to Techatronic. Currently, phone-controlled lighting has become quite prevalent and easily available in the market. However, today, we'll demonstrate how to create a similar system at a significantly lower cost. This phone-controlled lighting setup is versatile and can be utilized anywhere by simply plugging it in and operating it via your mobile phone. An accompanying app will enable you to control the lighting seamlessly. Introduction The Android app-controlled light is a setup allowing you to manage a light bulb via a dedicated application. We're designing this system with an LED bulb that the app can control. You can access the app for control through the provided download link. Alternatively, if you prefer creating the app yourself, our previous article, "WS2811 with Arduino Bluetooth control using Android app," serves as a reference. Additionally, this bulb can also be operated using a standard switchboard. Hence, we'll establish the connections accordingly. The phone-controlled light will link to the regular AC power supply. It's a straightforward example of IoT (Internet of Things) and smart automation. Similarly, to controlling this light, you can manage various other devices such as motors, fans, AC units, coolers, depending on the AC load. The selection of a suitable relay depends on the load. To begin, download and install the app using the provided link. Therefore, presented here is a comprehensive, step-by-step guide for creating a phone-controlled lamp. The initial phase involves familiarizing oneself with the components essential for this project. Phone control Light Components Required Arduino Uno Bluetooth HC-05 5v single channel Relay Led Bulb Some wires After knowing the components we have to connect them together in write manner so, we required a circuit diagram which can help us to connect all the components. Circuit Diagram for Phone control light Phone control light Arduino Code void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(7, OUTPUT); digitalWrite(7, HIGH); } void loop() { // put your main code here, to run repeatedly: if(Serial.available()>0) { char m= Serial.read(); if(m=='A') { digitalWrite(7, HIGH); } else { digitalWrite(7, LOW); } } } This exemplifies the variety of home automation projects we've undertaken. If you're interested in exploring further, we've provided links to different home automation projects below: - WiFi-Based Home Automation with NodeMCU ESP8266 - Blynk Home Automation System - IoT-Based Home Automation Project - Home Automation Using Arduino and Bluetooth - GSM-Based Home Automation Utilizing Arduino & SIM900 Each of these projects represents a distinct type of home automation system. You can select and create any of these based on your specific needs and preferences. Working of Phone control Lamp Upon launching the application and establishing a connection with the device, it signifies the successful pairing of the mobile phone's Bluetooth with the Light Bluetooth device. This establishes a Bluetooth communication link between both devices, enabling the mobile phone to transmit data to the light. Essentially, the microcontroller, in this case, an Arduino, contains specific code facilitating this data exchange. PCBWay PCB Prototyping Services I've set up the entire circuit on a breadboard. However, considering that a breadboard setup isn't optimal for this project, PCBWay provides rapid PCB prototyping for research purposes. Personally, I highly recommend PCBWay because they can deliver your initial boards within just 24 hours! The prototyping phase stands as a crucial period for engineers, students, and hobbyists. PCBWay not only accelerates board production but also ensures accuracy and cost-effectiveness, significantly reducing both cost and development time for your electronic projects. PCBWay offers a wide spectrum of PCBs, ranging from 2 Layer to advanced HDI and flex boards, each tailored to diverse functionalities and applications. I am thoroughly impressed by their board quality, prompt delivery, and cost-efficiency. Imagine an app with two buttons; pressing the first button sends 'A.' Upon reception by the light system, a code triggers the light to turn on. Similarly, pressing the second button sends 'B,' prompting the system to process and turn off the light upon receiving 'B' in the data stream. The Arduino device receives data via Bluetooth, paired with a phone's Bluetooth connection. Subsequently, Arduino proceeds to verify and compare this received data with the information stored in its database. Upon evaluation, Arduino sends commands to activate the relay. Once triggered, the relay operates as an electronic switch, capable of being activated by a 5V voltage. In this setup, the relay effectively controls the on/off functionality of a light bulb. Essentially, Arduino manages the switching of the relay, thereby controlling the light's activation and deactivation. ### ROHDE & SCHWARZ RELEASES NEW SIGNAL GENERATOR Rohde & Schwarz (R&S) released the SMCV100B, a signal generator that covers 5G NR extended FR1 frequency range up to 7.126 GHz. It leverages the R&S WinIQSIM2 simulation software, which supports common cellular and wireless connectivity standard. This includes standards for IoT and Wi-Fi. Working within the automotive industry, the R&S SMCV100B is suitable for end-of-line testing of radios and GNSS navigation equipment. Per a company press release, for Go/NoGo tests, the generator can output GPS, GLONASS, Galileo and BeiDou signals of a single navigation satellite. Predefined, time-limited I/Q sequences can be output for functional tests with fixed satellite positions. The generator also supports analog and digital radio standards in addition to second and third-generation digital terrestrial and satellite-based television standards. A direct RF concept to generate output signals for frequencies up to 2.5GHz is used to allow I/Q modulation and RF signal generation for performance in the digital domain. This concept supports enhanced SSB phase noise performance. Per the company, the R&S SMCV100B, a general-purpose instrument, can be deployed in labs at universities and schools in addition to production lines. Read more: ROHDE & SCHWARZ RELEASES NEW SIGNAL GENERATOR ### Arduino and Silicon Labs partner to make Matter protocol more accessible The official Arduino team responsible for creating  awesome microcontrollers and a leading platform in the maker and educational communities, has joined forces with Silicon Labs, a prominent player in the world of microcontrollers and wireless chips. This collaboration is set to bring the Matter protocol, a new standard for smart home devices, into the Arduino environment. This move is significant because it promises to make cutting-edge Internet of Things (IoT) technology more approachable for a wide range of users, from students and hobbyists to professional developers. At the Consumer Electronics Show (CES) in 2024, the partnership made waves by unveiling a new, easy-to-use Arduino library for the Matter protocol. This library is designed to simplify the process of developing IoT projects. Alongside this, they announced the integration of the Arduino core with Silicon Labs microcontrollers, which now works smoothly with the Arduino Integrated Development Environment (IDE). This integration is a big deal because it makes it easier for people to create and use IoT applications, no matter their level of technical expertise. Rob Shane, the Vice President of Global Mass Markets at Silicon Labs, expressed his enthusiasm for the partnership. He highlighted the benefits of combining Silicon Labs’ high-tech capabilities with Arduino’s user-friendly approach. This combination is expected to spur innovation in various areas, such as smart home technology, industrial IoT solutions, and educational projects. Arduino and Silicon Labs The Arduino community is encouraged to start experimenting with the Matter protocol right away. The new core is compatible with existing boards like the Silabs xG24 Explorer Kit and the Sparkfun Thing Plus Matter. These boards are available for early adopters who want to explore what Matter has to offer. Glenn Samala, CEO of SparkFun, commented on the importance of bringing Matter into the Arduino world. He believes that this step is key to making IoT development more streamlined and fostering a more connected world. Looking ahead to Arduino Day in 2024, there’s excitement about the introduction of a new member to the Nano board family. This new board will feature the SiLabs MGM240SD22VNA and is expected to make a significant impact on IoT development with its ease of use and advanced capabilities. The partnership between Arduino and Silicon Labs is likely to have far-reaching effects for the Arduino community. By making advanced IoT technologies more widely available, it’s expected to spark a wave of creativity in various sectors, including smart homes, industrial IoT, and education. This collaboration between Arduino and Silicon Labs, with the integration of the Matter protocol into the Arduino ecosystem, represents a major step forward in IoT development. It aims to provide a diverse group of users with the tools they need to create innovative IoT solutions, shaping the future of how devices and applications connect and interact. Source: Arduino and Silicon Labs partner to make Matter protocol more accessible ### DARKROOM ROBOT AUTOMATES AWAY THE TEDIUM OF FILM DEVELOPING Anyone who has ever processed real analog film in a darkroom probably remembers two things: the awkward fumbling in absolute darkness while trying to get the film loaded into the developing reel, and the tedium of getting the timing for each solution just right. This automatic film-developing machine can’t help much with the former, but it more than makes up for that by taking care of the latter. For those who haven’t experienced the pleasures of the darkroom — and we mean that sincerely; watching images appear before your eyes is straight magic — film processing is divided into two phases: developing the exposed film from the camera, and making prints from the film. [kauzerei]’s machine automates development and centers around a modified developing tank and a set of vessels for the various solutions needed for different film processes. Pumps and solenoid valves control the flow of solutions in and out of the developing tank, while a servo mounted on the tank’s cover gently rotates the reel to keep the film exposed to fresh solutions; proper agitation is the secret sauce of film developing. The developing machine has a lot of other nice features that really should help with getting consistent results. The developing tank sits on a strain gauge, to ensure the proper amount of each solution is added. To avoid splotches that can come from using plain tap water, rinse water is filtered using a household drinking water pitcher. The entire rig can be submerged in a heated water bath for a consistent temperature during processing. And, with four solution reservoirs, the machine is adaptable to multiple processes. [kauzerei] lists black and white and C41 color negative processes, but we’d imagine it would be easy to support a color slide process like E6 too. This looks like a great build, and while it’s not the first darkroom bot we’ve seen — we even featured one made from Lego Technics once upon a time — this one has us itching to get back into the darkroom again. Source: DARKROOM ROBOT AUTOMATES AWAY THE TEDIUM OF FILM DEVELOPING ### FLIR ETS320 – NON-CONTACT THERMAL IMAGING CAMERA SOLUTION FOR ELECTRONIC TESTING Whether you are carrying out scientific research or evaluating a product, heat can be an important indicator of how a system is functioning. FLIR ETS320 is a thermal camera solution designed for instant temperature checks on electronic devices and printed circuit boards. Made specifically for benchtop laboratory testing, the ETS320 comes with a microscope-style stand that is easy to set up and simplified features that allow users to give more attention to their work without having to worry much about camera controls. The wireless thermal imager is a nearly affordable solution for engineers and laboratory test technicians looking at how to reduce electronic test times and improve product design. The system has the capacity to measure temperatures across over 76,000 points at a time, locating hotspots and potential points of failure within the component. It can also identify areas with faults and thermal gradients since it is highly sensitive to temperature change of 0.06°C and less. The design of the ETS320 is such that it provides you with immediate feedback on the component you are testing. It shows crisp thermal imagery on a vibrant 3-inch LCD display and an instant guide to the source of PCB failures. The camera itself is mounted on a silver pole and locked in place with a thumbscrew, but can still be moved up and down with the help of a fine-adjustment knob. Some highlight features and specification of the device include: Display – Vibrant 3 inch LCD IR resolution – 320 x 240 (76,800 pixels) Viewing angle – 45° x 34° Focused distance – 70mm ± 10mm Measurement accuracy – ±3% or ±3°C Image capture frequency – 9Hz Temperature Range of Object – -20°C to 250°C (-4°F to 482°F) Connectivity – Connect PC to USB for immediate sharing of thermal data Weight – 1.27 pounds Dimensions – 5.9 x 11.8 x 8.7 inches Read more: FLIR ETS320 – NON-CONTACT THERMAL IMAGING CAMERA SOLUTION FOR ELECTRONIC TESTING ### Arduino-Based Medication Alert System with RTC Integration Greetings everyone, welcome back to Techatronic. In this latest article, we're presenting a highly beneficial project known as the Medicine Reminder. This particular creation aims to assist individuals who require medication. Essentially, it comprises a box equipped with multiple drawers, three of which have the capability to open and close. In today's world, many individuals have essential medications that must be taken at specific times, making timely consumption crucial. To address this need, we've developed an exceptional Medicine Reminder project utilizing Arduino. Once the medicine schedule is set, this innovative system automatically prompts medication reminders by opening and closing designated drawers, accompanied by an audible buzzer signal. Introduction The medication reminder project holds significant importance for patients requiring consistent and timely intake of prescribed medicines. Our Automatic Medicine Reminder utilizing Arduino functions akin to an alarm system, displaying the specific medicine names. Often, we tend to forget medication, which can be detrimental for certain medical conditions. Hence, this project serves as a valuable aid in such scenarios. The Medicine Reminder features an LCD screen that exhibits the medicine names scheduled for consumption at designated times. Upon system activation, it prompts the user to configure medicine reminders, allowing for three set times: once, twice, or thrice a day, with the option to add more through the code. Using four buttons, the user sets the timing for each reminder. Upon setting the times, the clock initiates, continually comparing the current time with the user-entered data to trigger reminders accordingly. We'll provide a detailed guide comprising all the necessary steps to create this medicine reminder project. It's essential to follow each step diligently to successfully complete this project. Additionally, we recommend referring to specific articles to gain a foundational understanding of Arduino and how to establish connections between an RTC and Arduino before initiating this project. Construction During the construction phase, understanding the project flow is essential. Initially, we'll compile a list of necessary components. Material Required for Medicine Reminder Arduino Mega This serves as a microcontroller development board, functioning as the central controller in this project. If you seek information about Arduino, you can refer to the article available on our website. RTC3231 Module The RTC3231 is a real-time clock system built around a chip known as rtc3231. Equipped with a coin battery, it consistently provides power to the module, allowing it to retain the set time consistently. 4- push button Push buttons represent some of the most commonly used switches that establish or interrupt a circuit when pressed. jumper wires they use to make the connection over the breadboard buzzer It makes noise whenever we power it. basically, it converts electrical energy into sound energy. 16×2 LCD display 16×2 displays are common uses in the project there are 16 columns and 2 rows that’s why it is known as 16×2 LCD. Breadboard if you want to learn Circuit Diagram for Medicine Alarm:- Code For medicine reminder project //Medicine Reminder using Arduino Uno // Reminds to take medicine at 8am, 2pm, 8pm /* The circuit: LCD RS pin to digital pin 12 LCD Enable pin to digital pin 11 LCD D4 pin to digital pin 5 LCD D5 pin to digital pin 4 LCD D6 pin to digital pin 3 LCD D7 pin to digital pin 2 LCD R/W pin to ground LCD VSS pin to ground LCD VCC pin to 5V 10K resistor: ends to +5V and ground wiper to LCD VO pin (pin 3)*/ #include #include #include #include int pushVal = 0; int val; int val2; int addr = 0; RTC_DS3231 rtc; const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; // lcd pins LiquidCrystal lcd(rs, en, d4, d5, d6, d7); #define getWellsoon 0 #define HELP_SCREEN 1 #define TIME_SCREEN 2 //bool pushPressed; //flag to keep track of push button state int pushpressed = 0; const int ledPin = 13; // buzzer and led pin int ledState = LOW; int Signal = 0; int buzz = 13; int push1state, push2state, push3state, stopinState = 0; // int push1Flag, push2Flag, Push3Flag = false; // push button flags int push1pin = 9; int push2pin = 8; int push3pin = 7; int stopPin = A0; int screens = 0; // screen to show int maxScreen = 2; // screen count bool isScreenChanged = true; long previousMillis = 0; long interval = 500; // buzzing interval unsigned long currentMillis; long previousMillisLCD = 0; // for LCD screen update long intervalLCD = 2000; // Screen cycling interval unsigned long currentMillisLCD; // Set Reminder Change Time int buzz8amHH = 8; // HH - hours ##Set these for reminder time in 24hr Format int buzz8amMM = 00; // MM - Minute int buzz8amSS = 00; // SS - Seconds int buzz2pmHH = 14; // HH - hours int buzz2pmMM = 00; // MM - Minute int buzz2pmSS = 00; // SS - Seconds int buzz8pmHH = 20; // HH - hours int buzz8pmMM = 00; // MM - Minute int buzz8pmSS = 00; // SS - Seconds int nowHr, nowMin, nowSec; // to show current mm,hh,ss // All messeges void gwsMessege(){ // print get well soon messege lcd.clear(); lcd.setCursor(0, 0); lcd.print("Stay Healthy :)"); // Give some cheers lcd.setCursor(0, 1); lcd.print("Get Well Soon :)"); // wish } void helpScreen() { // function to display 1st screen in LCD lcd.clear(); lcd.setCursor(0, 0); lcd.print("Press Buttons"); lcd.setCursor(0, 1); lcd.print("for Reminder...!"); } void timeScreen() { // function to display Date and time in LCD screen DateTime now = rtc.now(); // take rtc time and print in display lcd.clear(); lcd.setCursor(0, 0); lcd.print("Time:"); lcd.setCursor(6, 0); lcd.print(nowHr = now.hour(), DEC); lcd.print(":"); lcd.print(nowMin = now.minute(), DEC); lcd.print(":"); lcd.print(nowSec = now.second(), DEC); lcd.setCursor(0, 1); lcd.print("Date: "); lcd.print(now.day(), DEC); lcd.print("/"); lcd.print(now.month(), DEC); lcd.print("/"); lcd.print(now.year(), DEC); } void setup() { Serial.begin(9600); // start serial debugging if (! rtc.begin()) { // check if rtc is connected Serial.println("Couldn't find RTC"); while (1); } if (rtc.lostPower()) { Serial.println("RTC lost power, lets set the time!"); } // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // uncomment this to set the current time and then comment in next upload when u set the time rtc.adjust(DateTime(2019, 1, 10, 7, 59, 30)); // manual time set lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Welcome To"); // print a messege at startup lcd.setCursor(0, 1); lcd.print("Circuit Digest"); delay(1000); pinMode(push1pin, INPUT_PULLUP); // define push button pins type pinMode(push2pin, INPUT_PULLUP); pinMode(push3pin, INPUT_PULLUP); pinMode(stopPin, INPUT_PULLUP); pinMode(ledPin, OUTPUT); delay(200); Serial.println(EEPROM.read(addr)); val2 = EEPROM.read(addr); // read previosuly saved value of push button to start from where it was left previously switch (val2) { case 1: Serial.println("Set for 1/day"); push1state = 1; push2state = 0; push3state = 0; pushVal = 1; break; case 2: Serial.println("Set for 2/day"); push1state = 0; push2state = 1; push3state = 0; pushVal = 2; break; case 3: Serial.println("Set for 3/day"); push1state = 0; push2state = 0; push3state = 1; pushVal = 3; break; } } void loop() { push1(); //call to set once/day push2(); //call to set twice/day push3(); //call to set thrice/day if (pushVal == 1) { // if push button 1 pressed then remind at 8am at8am(); //function to start uzzing at 8am } else if (pushVal == 2) { // if push button 2 pressed then remind at 8am and 8pm at8am(); at8pm(); //function to start uzzing at 8mm } else if (pushVal == 3) { // if push button 3 pressed then remind at 8am and 8pm at8am(); at2pm(); //function to start uzzing at 8mm at8pm(); } currentMillisLCD = millis(); // start millis for LCD screen switching at defined interval of time push1state = digitalRead(push1pin); // start reading all push button pins push2state = digitalRead(push2pin); push3state = digitalRead(push3pin); stopinState = digitalRead(stopPin); stopPins(); // call to stop buzzing changeScreen(); // screen cycle function } // push buttons void push1() { // function to set reminder once/day if (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = true; EEPROM.write(addr, 1); Serial.print("Push1 Written : "); Serial.println(EEPROM.read(addr)); // for debugging pushVal = 1; //save the state of push button-1 lcd.clear(); lcd.setCursor(0, 0); lcd.print("Reminder set "); lcd.setCursor(0, 1); lcd.print("for Once/day !"); delay(1200); lcd.clear(); } } void push2() { //function to set reminder twice/day if (push2state == 1) { push2state = 0; push1state = 0; push3state = 0; // pushPressed = true; EEPROM.write(addr, 2); Serial.print("Push2 Written : "); Serial.println(EEPROM.read(addr)); pushVal = 2; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Reminder set "); lcd.setCursor(0, 1); lcd.print("for Twice/day !"); delay(1200); lcd.clear(); } } void push3() { //function to set reminder thrice/day if (push3state == 1) { push3state = 0; push1state = 0; push2state = 0; // pushPressed = true; EEPROM.write(addr, 3); Serial.print("Push3 Written : "); Serial.println(EEPROM.read(addr)); pushVal = 3; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Reminder set "); lcd.setCursor(0, 1); lcd.print("for Thrice/day !"); delay(1200); lcd.clear(); } } void stopPins() { //function to stop buzzing when user pushes stop push button if (stopinState == 1) { // stopinState = 0; // pushPressed = true; pushpressed = 1; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Take Medicine "); lcd.setCursor(0, 1); lcd.print("with Warm Water"); delay(1200); lcd.clear(); } } void startBuzz() { // function to start buzzing when time reaches to defined interval // if (pushPressed == false) { if (pushpressed == 0) { Serial.println("pushpressed is false in blink"); unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; // save the last time you blinked the LED Serial.println("Start Buzzing"); if (ledState == LOW) { // if the LED is off turn it on and vice-versa: ledState = HIGH; } else { ledState = LOW; } digitalWrite(ledPin, ledState); } } else if (pushpressed == 1) { Serial.println("pushpressed is true"); ledState = LOW; digitalWrite(ledPin, ledState); } } void at8am() { // function to start buzzing at 8am DateTime now = rtc.now(); if (int(now.hour()) >= buzz8amHH) { if (int(now.minute()) >= buzz8amMM) { if (int(now.second()) > buzz8amSS) { ///////////////////////////////////////////////////// startBuzz(); ///////////////////////////////////////////////////// } } } } void at2pm() { // function to start buzzing at 2pm DateTime now = rtc.now(); if (int(now.hour()) >= buzz2pmHH) { if (int(now.minute()) >= buzz2pmMM) { if (int(now.second()) > buzz2pmSS) { /////////////////////////////////////////////////// startBuzz(); ////////////////////////////////////////////////// } } } } void at8pm() { // function to start buzzing at 8pm DateTime now = rtc.now(); if (int(now.hour()) >= buzz8pmHH) { if (int(now.minute()) >= buzz8pmMM) { if (int(now.second()) > buzz8pmSS) { ///////////////////////////////////////////////////// startBuzz(); ///////////////////////////////////////////////////// } } } } //Screen Cycling void changeScreen() { //function for Screen Cycling // Start switching screen every defined intervalLCD if (currentMillisLCD - previousMillisLCD > intervalLCD) // save the last time you changed the display { previousMillisLCD = currentMillisLCD; screens++; if (screens > maxScreen) { screens = 0; // all screens over -> start from 1st } isScreenChanged = true; } // Start displaying current screen if (isScreenChanged) // only update the screen if the screen is changed. { isScreenChanged = false; // reset for next iteration switch (screens) { case getWellsoon: gwsMessege(); // get well soon message break; case HELP_SCREEN: helpScreen(); // instruction screen break; case TIME_SCREEN: timeScreen(); // to print date and time break; default: //NOT SET. break; } } }   ### AR18/AR35 SERIES SINGLE-TURN ABSOLUTE ENCODERS Broadcom’s AR18 and AR35 series miniature programmable single-turn absolute encoders with resolution ranging from 17-bits to 21-bits Broadcom’s AR18 and AR35 series are the miniature absolute encoder ASICs designed to cater to the growing demand for space-constrained applications. The AR18 encoder is designed for an overall diameter of 18 mm and offers user-programmable resolution ranging from 17-bit, 19-bit, and 21-bit single-turn absolute output. The AR35 encoder is designed for an overall diameter of 35 mm and offers 17-bit and 21-bit single-turn absolute output. Both the AR18 and AR35 series provide the incremental ABI and UVW in differential mode. Both come with a recommended temperature range of -40°C to +115°C suitable for most industrial applications. Dual-mode operating voltages of 3.3 V and 5 V enable handheld and portable device applications. Features Miniature absolute encoder ASIC surface mount DFN package: 10.9 mm (L) x 9.1 mm (W) x 1.5 mm (H User-programmable resolution ranging from: 17-bit, 19-bit, and 21-bit single turn (OD18)17-bit and 21-bit single turn (OD35)User-programmable incremental output (ABI) resolution ranging from 128 CPR to 8192 CPRSelectable SSI mode communication protocolRoHS-compliantUser-programmable commutation signal (UVW) in 2-pole, 3-pole, 4-pole, 5-pole, 12-pole, 30-pole, 32-pole pairsDifferential output for ABI and UVWHigh temperature range of -40°C to +115°C suitable for most of the industrial operation Read more: AR18/AR35 SERIES SINGLE-TURN ABSOLUTE ENCODERS ### COMPACT LOW-POWER MINI GRAPHIC LCD DISPLAY VISIONS‘ EA-DOGS102 series graphic LCDs are available in an FSTN positive transflective, STN negative transmissive, and FSTN positive reflective version. These displays have a 2.54 mm pitch and can be soldered directly or plugged into socket strips. Therefore, cumbersome gluing procedures, the need for designing a special mounting device, and error-prone cable connections that may lose contact are no longer a concern. This LCD family was designed for use in the German industry and will have an availability of 15+ years. The extremely efficient ratio of external dimensions to the active display area helps in designing very compact devices. Furthermore, its low-power use [single supply 2.5 V to 3.3 V (typically 250 µA)] makes it ideal for handheld applications. The EA 9780-4USB development board and free windows simulator are all users require to evaluate pin connected chip-on-glass LCDs with and without backlight. Simply plug the 2.54 mm connector pins of the display into the socket strips of the development board. Proprietary hardware or software development is not required. Decisions can be made quickly at a minimum expense. Features High-contrast LCD supertwist display (STN and FSTN) with 10 µm dot gapFSTN pos. transflective, STN neg. transmissive, and FSTN pos. reflective version (cannot be backlit)Optional LED backlights in various colors; white, amber, green/red, and customs102 x 64 pixels (corresponds to 8 x 17 characters or 4 x 12 large characters)UC1701 controller with SPI (4-wire) interfacePower supply: single supply 2.5 V to 3.3 V (typ. 250 µA) Read more: COMPACT LOW-POWER MINI GRAPHIC LCD ### Arduino-Powered Bidirectional Counter with IR Sensor Hello everyone, welcome back to Techatronic. Today, we're diving into a highly practical project – the Bidirectional Counter. Our goal with this project is to tally individuals passing through the sensor. Bidirectional counters have become increasingly prevalent, especially aiding us during the pandemic. They find specific utility in seminar halls and conference rooms, accurately recording the total number of people entering or exiting an area. For instance, in a scenario where there's a limit of 100 people allowed in a designated space, this counter automates the counting process without requiring human intervention. Introduction This project functions as a people-counting system facilitated by sensors. Termed a bidirectional counter, it employs two sensors—one positioned at each side—to effectively tally individuals entering and exiting. A 16×2 LCD display serves as the project's output, showcasing the count of individuals inside and outside the area, along with the net count of people within the room. Construction of bidirectional Counter Below, we will provide all the necessary information and materials required to construct this Arduino counter project. It is essential to adhere to the provided instructions and utilize the given data to ensure successful implementation of the project. Once the circuit and code assembly are completed, replicate the circuit layout exactly as depicted in the accompanying image. Bidirectional visitor counter using Arduino Counter Circuit diagram Bidirectional Counter Code This project was completed using Arduino Uno, employing C/C++ programming language within the Arduino IDE software. We're providing the code sketch here, which you can upload directly to your Arduino Uno board. #include const int rs=12, en=11, d4=5, d5=4, d6=3, d7=2 ; const int in=6,out=7; int temp=0,femp=0,wemp=0; LiquidCrystal lcd(rs,en,d4,d5,d6,d7); void setup() { Serial.begin(9600); lcd.begin(20,4); pinMode(in,INPUT); pinMode(out,INPUT); pinMode(8, INPUT_PULLUP); lcd.print("bidirectional counter"); lcd.setCursor(0,1); lcd.print("IN"); lcd.setCursor(6,1); lcd.print(femp); lcd.setCursor(0,2); lcd.print("OUT"); lcd.setCursor(6,2); lcd.print(wemp); lcd.setCursor(0,3); lcd.print("NET"); lcd.setCursor(6,3); lcd.print(temp); } void loop() { int m=digitalRead(8); if(m==1) { if(digitalRead(in)==1) { delay(100); if(digitalRead(out)==1) { temp=temp+1; femp=femp+1; wemp; lcd.clear(); lcd.print("HOPE SECURITY"); lcd.setCursor(0,1); lcd.print("IN"); lcd.setCursor(6,1); lcd.print(femp); lcd.setCursor(0,2); lcd.print("OUT"); lcd.setCursor(6,2); lcd.print(wemp); lcd.setCursor(0,3); lcd.print("NET"); lcd.setCursor(6,3); lcd.print(temp); delay(1000); }} else if(digitalRead(out)==1) { delay(100); if(digitalRead(in)==1) { temp=temp-1; femp; wemp=wemp+1; // if(temp<=0) //{temp=0; //wemp=0; //femp=0; // } lcd.clear(); lcd.print("HOPE SECURITY"); lcd.setCursor(0,1); lcd.print("IN"); lcd.setCursor(6,1); lcd.print(femp); lcd.setCursor(0,2); lcd.print("OUT"); lcd.setCursor(6,2); lcd.print(wemp); lcd.setCursor(0,3); lcd.print("NET"); lcd.setCursor(6,3); lcd.print(temp); delay(1000); }} } else {lcd.clear(); lcd.print("HOPE SECURITY"); femp=0; temp=0; wemp=0; lcd.setCursor(0,1); lcd.print("IN"); lcd.setCursor(6,1); lcd.print(femp); lcd.setCursor(0,2); lcd.print("OUT"); lcd.setCursor(6,2); lcd.print(wemp); lcd.setCursor(0,3); lcd.print("NET"); lcd.setCursor(6,3); lcd.print(temp); } } Bidirectional Counter Working The operation of a Bidirectional counter is straightforward. Initially, understanding the functionality of each component from the list of components is essential. Let's start by discussing the sensor. In this setup, we utilize an IR sensor designed to detect the presence of an individual within its range. Whenever someone approaches the sensor, it promptly detects their presence and transmits this information. For a comprehensive understanding of the IR sensor's operation, detailed information is available on my website. Moving on, let's delve into the controller or the central processing unit (CPU) employed in this project. We've selected the Arduino Uno as the controlling unit. Naturally, a robust controller is necessary to manage all aspects of this project, from acquiring input to processing and generating output. Serving as the project's brain, the Arduino Uno interacts with the IR sensor, receiving input from it. This setup effectively interfaces the IR sensor with the Arduino, which acts as the counter. As the Arduino receives input from the IR sensor, it proceeds to process this information and responds accordingly based on predefined conditions. The concluding segment of this system involves the utilization of Arduino, serving as the output component for this project. Arduino plays a crucial role in transmitting instructions to the display, dictating what should be showcased on it. We've integrated a 16×2 LCD display to exhibit comprehensive details regarding the project and the count of individuals entering and leaving a room. This liquid crystal display operates by using analog signals to illuminate crystals, displaying the desired numbers or letters. Should you encounter any difficulties in connecting the display, please refer to our guide on connecting a 16x2 display with Arduino. To comprehend the functionality of the bidirectional counter project, it employs two sensors—S1 and S2. When an individual crosses the S1 sensor initially, the system awaits the crossing of the S2 sensor. Only when both conditions are met does the project tally the person entering the sensor. Conversely, if the S2 sensor is crossed first followed by the S1 sensor, the project registers the person exiting the system or room. This delineates the operational mechanism of the bidirectional counter. We've furnished comprehensive details encompassing the code and circuitry for the bidirectional visitor counter using Arduino. Application of Bidirectional Counter Utilize in a seminar hall for people counting purposes. Apply in a conference hall to track attendance. Suitable for use in school and college classrooms. Also applicable for monitoring parking spaces. ### DIY CHEMISTRY POINTS THE WAY TO OPEN SOURCE BLOOD GLUCOSE TESTING Every diabetic knows that one of the major burdens of the disease is managing supplies. From insulin to alcohol wipes, diabetes is a resource-intensive disease, and running out of anything has the potential for disaster. This is especially true for glucose test trips, the little electrochemical dongles that plug into a meter and read the amount of glucose in a single drop of blood. As you might expect, glucose test strips are highly proprietary, tightly regulated, and very expensive. But the chemistry that makes them work is pretty simple, which led [Markus Bindhammer] to these experiments with open source glucose testing. It’s all part of a larger effort at developing an open Arduino glucometer, a project that has been going on since 2016 but stalled in part thanks to supply chain difficulties on the chemistry side, mainly in procuring glucose oxidase, an enzyme that oxidizes glucose. The reaction creates hydrogen peroxide, which can be measured to determine the amount of glucose present. With glucose oxidase once again readily available — from bakery and wine-making suppliers — [Markus] started playing with the chemistry. The first reaction in the video below demonstrates how iodine and starch can be used as a reagent to detect peroxide. A tiny drop of glucose solution turns the iodine-starch suspension a deep blue color in the presence of glucose oxidase. While lovely, colorimetric reactions such as these aren’t optimal for analyzing blood, so reaction number two uses electrochemistry to detect glucose. Platinum electrodes are bathed in a solution of glucose oxidase and connected to a multimeter. When glucose is added to the solution, the peroxide produced lowers the resistance across the electrodes. This is essentially what’s going on in commercial glucose test strips, as well as in continuous glucose monitors. Hats off to [Markus] for working so diligently on this project. We’re keenly interested in this project, and we’ll be following developments closely. Source: DIY CHEMISTRY POINTS THE WAY TO OPEN SOURCE BLOOD GLUCOSE TESTING ### 13 AMAZING GERBER VIEWER SOFTWARE FOR WINDOWS Gerber Viewer Software for Windows is a software that enables you to open and view Gerber files (GRB files) through the help of their extensive toolset. Some of this software are Gerber editor software also and allows you to view and make changes to Gerber PCB designs. The Gerber file viewer software can export the design in various formats, like SGV, PDF, PNG, PDF, JPEG, etc. You can also take a print out of the design if you want. We have various Geber Viewer software, but I’ll be discussing 12 popular ones. ViewMate ViewMate from Pentalogix features a broad set of tools available for enhanced viewing functions. Its large array of selection tools enables you to select components, layer options to hide/delete/add layers, visibility toolbar to change layer/component visibility and do much more. It also enables you to select a distance unit from inch, mm, mil, and cm to measure the distance between components. Another function it has is allowing you to add traces/paths to a diagram as orthogonal trace, 90 degrees trace, elbow, circle, add text, etc., but you cannot save the drawing. The drawing with new additions can also be printed. It offers you the ability to experiment with the layers of a Gerber file. GerbMagic GerbMagic is a free viewer for Gerber RS-274x and Protel ASCII PCB (Protel v2.5 to v2.8 formats). It can also convert Gerber RS-274x and Protel ASCII PCB to PostScript, PDF, TIFF, BMP and RID formats. It is free, simple to use, and feature-rich Gerber Viewer software. It features all the basic tools needed to view Gerber files, such as Layered view, zoom, move, align, and Measure tool as well. You can also save a Gerber file as raster or vector image formats, like: bmp, eps, pdf, tiff, etc. Read more: 13 AMAZING GERBER VIEWER SOFTWARE FOR WINDOWS ### DIY ARDUINO NANO HV UPDI PROGRAMMER In May, Arduino released a guide on how you can create a UPDI programmer for under $10. Now Dlloydev has posted a guide on Github how to make an Arduino Nano HV UPDI programmer. The Nano HV UPDI programmer will enable you to use the additional configuration settings for the UPDI pin without the fear of getting locked out from the MCU. The Nano HV features 3 programming modes: UPDI, HV or PCHV, with the target voltage at 5V. To get started, you have to install megaTinyCore, then Install the HV Programmer Firmware. After installation, you click on the green “Clone or download” button, then select “Download ZIP“. When you are through with the download, you unzip the file in a folder on your PC, then load the sketch “jtag2.updi.ino” into the Arduino IDE. Note that you have to uninstall the Write Protect jumper from the programmer for you to carry on with the project, the reason for this is that with a jumper installed, the auto-reset circuit of the programmer is disabled. This protects against accidental overwriting of the firmware and also ensures quick programming sessions by eliminating extra bootloader delays that would be caused by triggering the reset. Moving forward, from the IDE, you select Tools > Board > “Arduino Nano”. Then you select Tools > Port > (serial port used by the Nano). After that, you select Sketch > Upload. When you are through with the upload, You have to install the Write Protect jumper. Finally, from the IDE, select Tools > Programmer > “jtag2updi (megaTinyCore)”. After going through all these processes, you can now use the Nano HV programmer to “Burn Bootloader” or to “Upload Using Programmer” from the Arduino IDE. However, you have to make sure to choose the appropriate board, chip, and port setting target. Then you can choose Programmer Mode Selection you want. To know if it is programming mode, the red and yellow LEDs will be ON. On startup, the yellow LED will indicate overload status. When the programming mode is set to HV or PCHV, bright blue LED flashes to indicate the HV pulse during programming of the target. On startup, the OVL sense analog input (A6) will be checked. If the voltage on A0-A5 (target power) has dipped below 90% (4.5V), then the yellow LED will indicate overload status by blinking at 4Hz. The user will then need to correct the problem and press reset to clear. Read more: DIY ARDUINO NANO HV UPDI PROGRAMMER ### CH32 RISC-V MCUS GET OFFICIAL ARDUINO SUPPORT Like many of you, we’ve been keeping a close eye on the CH32 family of RISC-V microcontrollers from WCH Electronics. You can get the CH32V003, featuring 2 kB RAM and 16 kB of flash for under fifteen cents, and the higher-end models include impressive features like onboard Ethernet. But while the hardware is definitely interesting, the software side of things has been a little rocky compared to what we’ve come to expect from modern MCUs. Things should start looking up a bit though with the release of an Arduino core for the CH32 direct from WCH themselves. It’s been tested on Windows, Linux, and Mac, and supports the CH32V00x, CH32V10x, CH32V20x, CH32V30x, and CH32X035 chips. Getting it installed is as easy as adding the URL to the Arduino IDE’s Boards Manager interface, though as the video below shows, running it on Linux does require an extra step or two. So far, we’ve seen several projects, like this temperature sensor or this holiday gizmo that use [cnlohr]’s open-source toolchain. But there’s no question that plenty of hobbyists out there feel more comfortable in the Arduino environment, and if those folks are now able to pick up a CH32 and do something cool, that means more people jumping on board, more libraries developed, more demo code written…you get the idea. Just like the ESP8266’s popularity exploded when it was added to the Arduino IDE, we’ve got high hopes for the CH32 family in the coming months. Source: CH32 RISC-V MCUS GET OFFICIAL ARDUINO SUPPORT ### XMEMS LAUNCHES MONTARA, WORLD’S FIRST MONOLITHIC TRUE MEMS SPEAKER Today xMEMS Labs emerged from stealth mode to reinvent sound with the introduction of Montara, the world’s first monolithic true MEMS speaker, delivering high fidelity, full-bandwidth sound and low total harmonic distortion (THD) for sealed in-ear personal audio devices, including true wireless stereo (TWS) earbuds.  Montara is also the world’s first IP-57 rated microspeaker, enabling water and dust-resistant earbuds. Consumers will benefit from enhanced audio fidelity with raised levels of clarity and detail for instruments and vocals, extremely low latency, waterproof earbuds, and longer listening times. Montara eclipses early hybrid-MEMS speakers by implementing the entire speaker (actuator and diaphragm/membrane) in silicon, reducing package height and eliminating driver matching and calibration due to inherent variability in membrane assembly. The combination of Montara’s design innovation and monolithic capacitive piezo-MEMS manufacturing material results in precise actuation, quality sound, speaker-to-speaker uniformity and repeatability. Montara Features: Sound QualityFull bandwidth (20Hz-20kHz) with flat frequency response at >110dB SPLAbility to replace multiple balance armature drivers with a single chipBetter SPL/mm3ConsistencyHighly uniform and reliable semiconductor processEliminates driver matching and calibrationConsistent silicon membrane movement enables active compensation for low THD (< 0.5% (200Hz ~ 20KHz))Low Latency<0.1ms mechanical latency enables active noise cancelation (ANC) across wider frequency rangeRobustness: monolithic piezoMEMS 10,000g mechanical shock resistanceLonger listen times Read more: XMEMS LAUNCHES MONTARA, WORLD’S FIRST MONOLITHIC TRUE MEMS SPEAKER ### T-Display AMOLED Touch ESP32 board binary converter project The T-Display AMOLED Touch ESP32 is an advanced version of the well-known ESP32 board, now equipped with a touch interface. This addition transforms the board into a more interactive platform, suitable for a wide range of applications.   T-Display-S3 AMOLED is a display screen module with a 1.91″ diagonal screen, based on our previous S3 module, we have upgraded the screen, resolution and antenna from LCD to AMOLED and the antenna to 3D antenna. Using SPI interface, it is compatible with any microcontroller with SPI capability. The module is equipped with a built-in battery management system, making it a convenient solution for portable applications. The compact size and low power consumption make it ideal for wearable and IoT projects. The Touch version stands out from its predecessor with a larger size and an extra I2C connector, which is essential for enhancing your project’s capabilities. These modifications may necessitate adjustments in your coding and project design. To minimize confusion, it would be helpful if these two versions were referred to by different names in the market. T-Display AMOLED Touch ESP32 board If you would like to learn more about the Touch version, check out the binary converter project created by Volos Projects that demonstrates the new functionalities. The T-Display AMOLED Touch ESP32 board represents a significant enhancement, offering new opportunities for your projects. With proper guidance and resources, you can overcome the initial learning curve and fully utilize the touch interface. Whether you’re a seasoned developer or a newcomer, the Touch version is a valuable asset to your electronics toolkit, unlocking a realm of interactive possibilities. Source: T-Display AMOLED Touch ESP32 board binary converter project ### Creating a DIY Laser-Based Room Security Alarm A laser security alarm stands out as a highly effective system designed to detect any object or individual's presence. Within a designated room, multiple laser beams are often employed. Reflective mirrors are commonly utilized to create a laser grid. When any object intersects these beams, triggering contact with the laser, the alarm system activates instantly. Introduction Certainly! Here's a revised version of the text: "In movies, we often witness sophisticated laser security setups, where triggering even a single laser beam sets off an alarm. Motivated by these portrayals, we've developed our own laser security alarm system. In this article, we'll provide comprehensive details on how we constructed this system, including the coding procedures. We're eager to share the entire process of creating this system and the coding involved in its functionality. We hope you'll recognize the effort behind this project and kindly lend us your support by giving it your attention. The term LASER stands for Light Amplification by Stimulated Emission of Radiation. This technology extends the path of light, significantly increasing its intensity compared to ordinary light, making it clearly visible. Additionally, we've implemented a lens to amplify the light's magnitude in our setup." How to make laser security Alarm system We've employed a reflection technique to construct the laser trap, employing a sequence of six mirrors arranged to reflect the laser progressively. Ultimately, the laser reaches a light detector sensor positioned at the end of this sequence. The sensor used is known as an LDR sensor, short for Light Dependent Resistor. When light strikes the sensor, it triggers an output. We've strategically placed this sensor at the termination point where the laser arrives after bouncing off the mirrors. To create this impressive DIY laser security system, we require specific components, which are detailed in the following list. Required Components for laser security Alarm Certainly! Here's a rephrased version of the information provided: "Laser Light Module: Laser light, generated by a device known as a laser, is highly directional and monochromatic, characterized by a single tone or frequency. The production of laser light occurs as excited atoms or molecules release photons that stimulate other particles to emit more photons, resulting in a concentrated beam. Arduino Uno: The Arduino Uno represents a microcontroller development board capable of controlling various devices through programming. It serves as a prime example of an embedded system wherein electronic components are managed via coding. LDR Sensor: An LDR (Light Dependent Resistor) sensor detects incident light directly, converting it into an electrical signal due to its photosensitive nature. Small Mirrors: These are tiny reflective surfaces essential for efficiently redirecting the laser beams. Wires: A collection of wires is necessary to successfully assemble this project, aiding in the connections. Buzzer: An electronic device that converts electrical signals into audible sound. When the laser beam is disturbed, this buzzer emits sound as an alarm signal. RGB Light: RGB represents Red, Green, and Blue, the fundamental colors in lighting. For this project, green light remains constant within the RGB setup. However, if the laser is touched or interrupted, the light changes to red as an alert signal." Circuit Daigram for DIY Laser security room You can assemble the circuit based on the provided circuit diagram for this project. Once you've gathered the necessary components and followed the circuit diagram, we'll proceed to create the code in the C/C++ language accordingly. Arduino code for Laser security Alarm void setup() { // put your setup code here, to run once: pinMode(2, INPUT_PULLUP); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(6, OUTPUT); Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: int m = digitalRead(2); Serial.println(m); delay(100); if(m==1) { //Serial.print("LASER ON"); digitalWrite(3, HIGH); digitalWrite(4, LOW); digitalWrite(6, LOW); delay(500); } else { // Serial.print("LASER OFF"); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(6, HIGH); delay(500); } } ### UEYE LE AF CAMERA MODELS FROM IDS FEATURE A PRACTICAL AUTOFOCUS FUNCTION IDS extends selection of automatically focusable board-level cameras. Thanks to their practical autofocus function, uEye LE AF industrial cameras deliver perfectly focused images even with frequently changing object distances. IDS Imaging Development Systems GmbH now offers additional camera variants with 2.1 and 3.1 MP Sony sensors which provide more flexibility in terms of application design and camera integration. For the first time, the company also offers models with upright USB Type-C alignment in this product family. In addition to the previously available uEye LE AF cameras with 6.4 MP (IMX178, 58 fps) and 18.1 MP (AR1820HS, 20 fps) sensors, customers can now also purchase models with 2.1 (IMX290, 120 fps) or 3.1 MP (IMX265, 80 fps). All cameras feature a USB 3.1 Gen 1 interface, USB Power Delivery – which can be used, for example, to power an LED light source or a photoelectric sensor – and allow the use and control of liquid lenses. The autofocus function ensures sharp images in the blink of an eye, even if the lens is not physically accessible or if the distance between the lens and the object changes frequently. The board-level cameras are therefore particularly well-suited for applications in fields such as logistics (e.g. for parcel acceptance and sorting) or traffic monitoring. Due to their compact design with dimensions of only 36 x 36 x 20 mm they also prove their strengths in embedded vision systems. This means that they are also interesting for integration into small medical or industrial devices. Read more: UEYE LE AF CAMERA MODELS FROM IDS FEATURE A PRACTICAL AUTOFOCUS FUNCTION ### GRAPHCORE LAUNCHES 7NM AI PROCESSOR AI processor company Graphcore Ltd. (Bristol, England) has announced its second-generation ‘Colossus’ intelligent processor unit (IPU), the GC200, claiming the 7nm chip is the world’s most sophisticated microprocessor. By Peter Clarke @ eenewseurope.com The company has also introduced a 1U board containing four GC200 processors that it calls the IPU-Machine or M2000. The chip is manufactured by foundry TSMC in a 7nm FinFET manufacturing process allowing far greater integration than was possible with Graphcore’s first IPU, which was implemented in TSMC’s 16nm FinFET process. Graphcore CEO Nigel Toon described the GC200 as “the world’s most advanced processor” in a Youtube video stating it contains 59.4 billion transistors, 1,472 independent processor cores able to support 8,832 computing threads in parallel. The chip has also tripled the amount of on-chip memory able to support processors moving up to 900Mbytes. This results in a naked maximum performance of 250 TeraFlops of AI compute at FP16.16 and FP16.SR (stochastic rounding). The GC200 supports much more FP32 compute than any other processor, the company has claimed. As with the first IPU the GC200 was designed to use Graphcore’s Poplar software development and management environment. However, the company has also introduced changes in data storage to increase off-chip memory bandwidth to 180Tbytes per second and in inter-IPU communications fabric, Toon said. Read more: GRAPHCORE LAUNCHES 7NM AI PROCESSOR ### SPYING ON THE ESP32’S GPIO The ESP32 has been a go-to microcontroller platform for a while now, thanks to its versatile capabilities, integrated Wi-Fi and Bluetooth connectivity, and low power consumption. It’s ideal for a wide range of projects especially those revolving around IoT, partially because of all of the libraries and tools available for it now. The latest tool from [The Last Outpost Workshop] adds a feature we didn’t know we wanted until now: a webserver showing real-time updates of what all of the GPIO pins are doing. The live GPIO pin monitoring library sets up the ESP32 to stream information about what all of the pins are doing in real time to a webserver, which displays the information as a helpful graphic. The demonstration in the video below shows and example troubleshooting a situation where the code is correct but there’s a mistake in the wiring, helping to quickly identify the problem and hopefully eliminating a wild goose chase for a bug in the software. The library can be quickly installed using the Arduino IDE and only requires the use of one other library and a few lines of code to get everything up and running. As far as a debugging tool goes, something like this could save a lot of us a significant amount of time, especially with how easy it is to set up. A real-time look into the pins and their behavior, including those set up for PWM, is invaluable for plenty of situations. Of course if you’re building something like a real-time operating system that needs responses within a very specific interval you may want to look at more in-depth strategies for probing the GPIO. Source: SPYING ON THE ESP32’S GPIO ### Arduino-Powered Door Automation with Motion Sensor Introduction Hello enthusiasts, welcome back to Techatronic. Have you ever encountered an automatic door that seamlessly opens and closes on its own? In this guide, we'll demonstrate how you can craft your very own automatic door opener using a sensor and Arduino UNO. Typically, these types of entrances are commonplace in hotels, metros, offices, etc., and often employ specialized motors for their operation. However, in our project, we're utilizing a servo motor for this specific purpose. For more insights into IoT and fundamental electronics, explore our collection of articles. Additionally, we offer an Ebook focused on Arduino, featuring over 10 intriguing projects complemented by well-explained code and circuit diagrams. To get started, follow the provided circuit diagram and proceed to upload the code to your Arduino. Description Securely attach the servo motor's rotating shaft to the cardboard gate, ensuring free rotation capability. Upon entering the IR sensor's range, the servo motor initiates rotation, automatically opening the door. After a predefined two-second delay, the door will autonomously close. The code provided can be adjusted to modify the time delay according to your specific needs. The red LED illuminates upon successful closure of the door, while the green LED signals the impending door opening. For further exploration, you can examine our creation of a smart dustbin utilizing Arduino and IR sensors. Components Required Arduino UNO Servo motor IR sensor Red and green LEDs 220 ohm resistor Jumper wires and a breadboard USB cable for uploading the code Circuit for Automatic Door Opener With Sensor Take a servo motor and link its VCC wire to the Arduino's 5-volt pin. Subsequently, connect its negative wire to the GND pin of the Arduino. Establish a connection between the signal wire of the servo motor and the Arduino's digital-9 pin. Connect the VCC pin of the IR sensor module to the Arduino's 5-volt pin, and link the GND pin of the IR sensor module to the Arduino's GND pin. Attach the OUT pin of the IR sensor to the digital-7 pin of the Arduino. Now, acquire two LEDs and connect their negative legs to the GND pin of the Arduino using a 220-ohm resistor. Connect the positive leg of the red LED to the digital-11 pin of the Arduino. Similarly, link the positive pin of the green LED to the digital-10 pin of the Arduino. Your circuit assembly is now completed, allowing you to proceed with the subsequent steps. PCBWay PCB Prototyping Services I've completed the circuit assembly on a breadboard. However, I acknowledge that a breadboard setup may not be the most efficient for this project type. That's why PCBWay provides rapid PCB prototyping services tailored for research endeavors. Personally, I highly recommend PCBWay due to their ability to deliver accurately fabricated boards in just 24 hours on your first attempt! The prototyping phase stands as a pivotal time for engineers, students, and enthusiasts. PCBWay not only expedites the production of your boards but also ensures accuracy and cost efficiency. This significantly minimizes expenses and accelerates the development timeline for your electronic projects. PCBWay offers a spectrum of PCBs, ranging from 2 Layer boards to highly advanced HDI and flex boards. Despite the significant differences in functionality and application areas among the PCBs they manufacture, I'm thoroughly impressed with the board quality, delivery speed, and cost-effectiveness. Code for Automatic Door Opener With Sensor // Techatronic.com #include Servo s1; int val = 0 ; void setup() { Serial.begin(9600); // sensor buart rate s1.attach(3); pinMode(2,INPUT); pinMode(5,OUTPUT); // led green pin pinMode(6,OUTPUT); // led red pin } void loop() { val = digitalRead(2); // IR sensor output pin connected Serial.println(val); // see the value in serial mpnitor in Arduino IDE delay(1); if(val == 1 ) { digitalWrite(5,HIGH); // LED ON digitalWrite(6,LOW); // LED OFF s1.write(90); delay(2000); } else { digitalWrite(5,LOW); // LED OFF digitalWrite(6,HIGH); // LED ON s1.write(0); } } We trust you found the automatic door opener with a sensor interesting, and we encourage you to attempt building it yourself. Should you encounter any uncertainties regarding this project, please don't hesitate to ask in the provided comment section. Additionally, explore more articles related to Arduino and Raspberry Pi authored by our team. ### How To Make An Arduino Game Controller Introduction Creating your own game controller using an Arduino board can be an exciting and rewarding project for both beginners and experienced hobbyists. With the widespread popularity of gaming, custom controllers offer a unique and personalized gaming experience. This step-by-step guide will walk you through the process of making your very own Arduino game controller, allowing you to unleash your creativity and technical skills. Whether you are a gaming enthusiast looking to enhance your gaming experience or a tech-savvy individual eager to delve into the world of Arduino, this project provides an excellent opportunity to learn about electronics, programming, and hardware integration. By following this guide, you will gain valuable insights into the principles of circuitry, coding, and interfacing electronic components, all while having fun and creating a functional device. The Arduino platform, known for its user-friendly interface and extensive community support, serves as an ideal foundation for this project. By leveraging the versatility of Arduino, you can customize your game controller to suit your preferences, whether it's for a specific game genre or a particular gaming console. Furthermore, the skills acquired during this project can be applied to various other DIY electronics endeavors, fostering a deeper understanding of hardware and software integration. This guide aims to provide clear and concise instructions, making the process accessible to individuals with varying levels of technical expertise. Whether you are new to Arduino or have prior experience with microcontrollers, this project will enable you to gain practical skills and knowledge that can be applied to future electronic projects. Get ready to embark on an engaging journey of creativity, problem-solving, and technical exploration as we dive into the exciting world of Arduino game controller creation. Materials Needed Before diving into the creation of your Arduino game controller, it’s essential to gather the necessary materials and components. The following items will be required to complete this project: Arduino Board: The heart of the project, the Arduino board serves as the central processing unit for the game controller. Opt for a reliable and compatible Arduino board, such as the Arduino Uno or Arduino Mega. USB Cable: A standard USB cable will be needed to connect the Arduino board to your computer for programming and power. Joystick Module: This component allows for precise control in games and is essential for creating a functional game controller. Ensure that the joystick module is compatible with the Arduino platform. Pushbuttons: Select high-quality pushbuttons to serve as the action buttons on the game controller. The number of pushbuttons will depend on the desired layout and functionality of the controller. Resistors: Various resistors will be required to protect the components and ensure proper voltage levels within the circuit. Refer to the specifications of the components for the appropriate resistor values. Breadboard and Jumper Wires: A breadboard and jumper wires will facilitate the prototyping and connection of the components, allowing for a modular and adjustable setup during the construction phase. Soldering Iron and Solder: If permanent connections are preferred, a soldering iron and solder will be necessary for securing the components onto a perfboard or custom circuit board. Computer with Arduino IDE: A computer equipped with the Arduino Integrated Development Environment (IDE) is essential for programming and uploading code to the Arduino board. Game Controller Enclosure (Optional): If desired, an enclosure or housing for the game controller can be crafted using 3D printing, laser cutting, or traditional fabrication methods. By ensuring that you have all the required materials at hand, you can proceed with confidence, knowing that you are well-equipped to embark on this exciting DIY electronics project. Setting Up the Arduino Before delving into the construction of the game controller, it is crucial to set up the Arduino board and ensure that it is ready for programming and hardware integration. Follow these steps to prepare the Arduino for the upcoming stages of the project: Install Arduino IDE: Begin by downloading and installing the Arduino IDE on your computer. The Arduino IDE is available for various operating systems and can be obtained from the official Arduino website. Once installed, launch the IDE to verify that it is functioning correctly. Connect the Arduino Board: Using a standard USB cable, connect the Arduino board to your computer. Ensure that the board is recognized by the computer and that the necessary drivers are installed. The Arduino IDE should detect the connected board, allowing you to proceed with programming. Install Board Drivers (If Necessary): In some cases, specific Arduino boards may require additional drivers to be installed on the computer. Refer to the documentation provided by the board’s manufacturer to determine if any additional drivers are needed and install them accordingly. Select the Correct Board and Port: Within the Arduino IDE, navigate to the “Tools” menu and select the appropriate Arduino board from the “Board” submenu. Additionally, choose the correct port to which the Arduino board is connected. This step is essential for ensuring that the code is uploaded to the correct board. Test the Connection: To verify that the Arduino board is properly set up and communicating with the computer, upload a simple test sketch, such as the “Blink” example, to the board. This will confirm that the board is functioning as expected and is ready for further programming. By carefully following these steps, you can establish a solid foundation for the Arduino board, ensuring that it is primed for the subsequent stages of the project. With the board set up and the necessary software in place, you are now prepared to proceed with the hardware integration and programming required to create the Arduino game controller. Source: How To Make An Arduino Game Controller ### SELPIC P1 – HANDS ON REVIEW OF THE SMALLEST PORTABLE HANDHELD PRINTER As we have featured earlier this month the Selpic P1 is going to launch on Indiegogo in late July. But what is Selpic P1? Is it another handheld printer going around or it has something more to offer? Selpic claims this to be the world’s smallest Handheld Portable printer that enables you to print on almost any surface like using an ordinary pen. It’s highlights include: Lightweight and PortablePrint Anything, Anywhere600dpi print resolution90 pages of ink capacity (5% in coverage)up to 6 colors to choose from3 hrs working time per charge With its pen styled shape, you can carry it around with you and get ready to use it anytime. It can easily print text, images, graphics, QR codes, and barcodes even on porous surfaces. The print head features 300 tiny nozzles with 0.002 of nozzle spacing and each nozzle can eject 18m drops per second. This leads to a high-quality and clear print result in printing logos or anything else on almost any surface. The printer comes along with a user-friendly smartphone APP that lets you define the print artwork. All you have to do is to connect the Selpic P1 with your smartphone over wifi and then you are ready to edit the artwork and print. The printer comes in a good quality box that includes: The handheld printer1x ink cartridgeUSB type C cableMaintenance ManualAlcohol wipes to clean the headGuarantee Card etc. Read more: SELPIC P1 – HANDS ON REVIEW OF THE SMALLEST PORTABLE HANDHELD PRINTER ### MULTIBAND IOT ANTENNA SUPPORTS LTE, GPS, BLUETOOTH AND WIFI Johanson Technology’s single antenna matching solution covers all relative frequency bands Multiple frequency, protocol, and functionality solutions for IoT connectivity continue to push size and performance limits. To address this, Johanson Technology developed a multiband flexible solution using one antenna. This solution covers cellular (LTE), sub-GHz (868/915 MHz), GPS and/or GNSS (GLONASS), 2.4 GHz (Bluetooth® and/or Wi-Fi®) using one SMT chip antenna and two 6-channel RF switches. The entire solution requires a PCB area of about 360 mm, making it very compact with industry-accepted radiated gain and efficiency in a 51 mm x 51 mm board.. Features Single antenna matching solution to cover all relative frequency bandsCan resonate at multiple frequenciesRequires antenna matching networks to cover cellular/sub-GHz/GPS-GNSS/2.4 GHz bands to achieve high efficiency and bandwidthEntire solution requires a PCB area of about 360 mm, making it very compact with industry-accepted radiated gain and efficiency in 51 mm x 51 mm board Applications IoTWearablesM2MSmart homeWi-Fi/802.11Wireless LAN, Bluetooth, and home RF868/915 MHz, 2.4 GHz, and 5.5 GHz ISM band:LoraZigbee®GPSUWB Read more: MULTIBAND IOT ANTENNA SUPPORTS LTE, GPS, BLUETOOTH AND WIFI ### FLASHLIGHT DOOR LOCK IS A BRIGHT IDEA There are many ways to lock a door. You could use a keypad, an RFID card, a fingerprint or retina scan, Wi-Fi, Bluetooth, the list goes on. You could even use a regular old metal key. But none of these may be as secure as [mircemk]’s Arduino-based door lock that employs a smartphone’s flashlight as a pass code. At first blush, this seems horribly insecure. Use a plain old flashlight to open a door? Come on. But the key is in the software. In fact, between the typed-in pass code and the flash of light it generates, this lock kind of has two layers of security. Here’s what’s going on: inside the accompanying smart phone application, there’s a list of passwords. Each of these passwords corresponds to a flash of light in milliseconds. Enter the correct password to satisfy the Arduino, and the phone’s flashlight is activated for the appropriate number of milliseconds to unlock the door. As you’ll see in the video below, simply flashing the light manually doesn’t unlock the door, and neither does entering one of the other, bogus passwords. Although it does activate the flashlight each time, they don’t have the appropriate light-time length defined. Hardware-wise, there is an Arduino Nano Every in charge of the LDR module that reads the flashlight input and the 12 V relay that unlocks the door. Be sure to check it out it the video after the break. If you want to keep your critters from bringing wild critters back inside, check out this Wi-Fi cat door that lets you have a look at what might be dangling from their jaws before unlocking the door. Source: FLASHLIGHT DOOR LOCK IS A BRIGHT IDEA ### A HIGH-END STUDIO MULTIPLEXER SURRENDERS TO AN ARDUINO The equipment used in professional radio and TV studios is both extremely high quality and very expensive indeed, and thus out of the reach of an experimenter. Happily as studios are refurbished there’s a steady supply of second-hand equipment which can be surprisingly cheap, but as [Nathan] found out with a Quartz audio router, comes with no control software. What’s to be done with what’s essentially a piece of junk? Remove its brain and replace it with one that can be controlled, of course! On the PCB alongside a bank of switch matrices is an FPGA which does the heavy lifting. That’s “heavy” in a limited sense, because all it does is handle the chip select lines for the matrices and write data to their registers. This is a task that can be handled by a microcontroller, so in goes an Arduino Nano, which along with a few other board modifications delivers a serial-controlled studio router. The interesting part for us in this project comes from a look at the date codes on the board, they’re from the early 2000s. This is (roughly) contemporary with the ATmega chip on the Arduino, so we’re curious as to why the designers saw fit to use an FPGA when the microcontrollers of the day were clearly up to the task for much less outlay. We suspect a touch of millennium-era price inflation, but we can’t be sure. Source: A HIGH-END STUDIO MULTIPLEXER SURRENDERS TO AN ARDUINO ### ZYNQ ULTRASCALE+ RFSOC ZCU208 ES1 EVALUATION KIT The Zynq® UltraScale+™ RFSoC ZCU208 Evaluation Kit is the ideal RF test platform for both out-of-box evaluation and cutting-edge application development. The Xilinx Zynq UltraScale+ RFSoC ZCU208 ES1 Evaluation Kit features a Zynq UltraScale+ RFSoC ZU48DR, which integrates eight 14-bit 5GSPS ADCs, eight 14-bit 10GSPS DACs, and eight soft-decision forward error correction (SD-FEC) cores designed to jumpstart RF class applications. The combination of Arm® Cortex®-A53 and Cortex-R5 subsystems, UltraScale+ programmable logic, and the highest signal processing bandwidth in a Zynq UltraScale+ device, makes the ZCU208 evaluation kit the most comprehensive RF Analog-to-Digital signal chain prototyping platform. Key Features Industry’s only single-chip adaptable radio platformZynq UltraScale+ RFSoC XCZU48DR-2FSVG1570E silicon featured on the ZCU208 Evaluation boardIntegrated 8x 5GSPS ADC, 8x 10GSPS DAC, 8x SD-FEC design exampleLidless package for improved thermal dissipationComes equipped with all board-level features needed for design developmentDDR4 Component – 4GB, 64-bit, 2666MT/s, attached to programmable logic (PL)DDR4 SODIMM – 4GB 64-bit, 2400MT/s, attached to the processing subsystem (PS)FPGA Mezzanine Card (FMC+) interface for I/O expansion, including 12x 33Gb/s GTY transceivers and 34 user-defined differential I/O signalsQuad zSFP/zSFP+ cage assembly8 user-I/O, single-color LEDsIncludes reference design mezzanine cards to reduce development timeCLK104 RF clock add-on card, showcasing internal reference clocking and external sampling clockingXM650 N79 band loopback add-on card allows simple out-of-box loopback and example reference layout for balunsXM655 breakout add-on card allows in-depth lab-based measurements including multi-tile synchronization (MTS) Read more: ZYNQ ULTRASCALE+ RFSOC ZCU208 ES1 EVALUATION KIT ### MEET THE LIFE DATA LINK MONITOR DESIGNED TO COMBAT COVID-19 Covid-19 has inspired hundreds of health-related electronics projects from ventilators whose shortage was the initial worry for health professionals across the world to “basic” vital monitoring which was discovered to be very useful along the line. One of many projects which had remarkable engineering quality and huge potential in terms of application is the Life Data Link Monitor developed by team Horizon Medical comprising of hackster users; Jose Granados and Docomar01. An open-source, low-cost, AI-enabled vital signs monitor designed to help manage the health status of COVID-19 patients, the Life Monitor was created to provide an innovative way for doctors to assess vital signs of thousands of patients via an AI-enabled IoT platform, to reduce the stress level of doctors and their contact with infected patients while ensuring the patients are monitored and get the best care possible. The Life Monitor makes use of up to 7 low-cost and small, wearable medical sensors that monitor parameters like; ECG, SpO2, Temperature, Heart Rate, Respiration Rate, accelerometer (activity and fall detection), estimated Blood Pressure, and pulmonary sounds and coughing (which is achieved via a lungs microphone). The device connects to a gateway which could be a phone, tablet, or a headless server via Bluetooth 5. The data is also securely transmitted to a cloud-based platform that leverages the power of the cloud and edge computing-based AI to draw inferences that help detect and manage worsening conditions of COVID patients. Some features and specifications of the device include: 1 channel electrocardiography (ECG, also known as EKG) compatible with snap-type electrodes.Respiration Rate (RR) measurement.Photoplethysmography (PPG) and Oxygen Saturation (SpO2%) monitoring.Temperature measure.Activity and Fall detection. read more: MEET THE LIFE DATA LINK MONITOR DESIGNED TO COMBAT COVID-19 ### Exploring Arduino: LED Control using Rotary Encoder Introduction Hello everyone, welcome back to Techatronic. Within this article, we'll be creating an Arduino LED project using a rotary encoder and a 16x2 LCD module. To ensure ease of understanding, we've included circuit diagrams and detailed connection descriptions for each setup. The rotary encoder comprises 5 pins, two for power and three for data. Its bi-directional rotation allows for control and selection of activities on the Arduino with LED. So, without further delay, let's delve into this Arduino LED project. Also, explore our articles on IoT and basic electronics. Ensure accurate connections before uploading the provided code to the Arduino board. Description In the initial setup, which involves a basic rotary encoder project, rotating the encoder's knob displays various position values on the Arduino serial monitor screen within the LED project. These values correspondingly increase or decrease based on the knob rotation. Moving on to the second and third setups, both incorporate an LCD and LEDs connected to the Arduino LED circuit. You have the option to identify and select a particular LED based on its position, visible on the LCD screen. In this Arduino LED project, simply choose the LED and press the rotary encoder's knob. If the chosen LED was previously off, it will turn on, and conversely, if it was on, it will turn off. A state of 0 signifies the LED with Arduino is off, while 1 denotes it is on. Rotating the knob of the rotary encoder adjusts the positional value, enabling you to designate the LED you wish to control. Furthermore, explore our creation of a music-reactive LED using Arduino for additional projects. Components Required for arduino and LED Arduino UNO 16×2 LCD I2C module Breadboard and jumper wires LEDs of different colors Rotatory Encoder USB cable for uploading the code Circuit for Arduino with LED Project Circuit for Rotatory Encoder With Arduino Initially, establish a connection by linking the VCC pin of the rotary encoder to the Arduino's 5V pin. Subsequently, connect the GND pin of the rotary encoder to the Arduino's GND pin. Next, create connections by attaching the CLK and DT pins of the rotary encoder to the digital-2 and digital-4 pins of the Arduino. Finally, complete the circuit by connecting the SW pin of the rotary encoder to the digital-3 pin of the Arduino. Your circuit setup is now finished. Proceed by uploading the provided code below. Code: // TECHATRONIC.COM int counter = 0; int aState; int aLastState; const int RotaryCLK = 2; //CLK pin on the rotary encoder const int RotaryDT = 4; //DT pin on the rotary encoder const int RotarySW = 3; //SW pin on the rotary encoder void setup() { pinMode (RotaryCLK,INPUT); // CLK PIN OF ROTATRY ENCODER pinMode (RotaryDT,INPUT); // DT PIN OF ROTATRY ENCODER Serial.begin (9600); // Reads the initial state of the 2 aLastState = digitalRead(RotaryCLK); } void loop() { aState = digitalRead(RotaryCLK); // Reads the "current" state of the outputA // If the previous and the current state of the 2 are different, that means a Pulse has occured if (aState != aLastState){ // If the outputB state is different to the 2 state, that means the encoder is rotating clockwise if (digitalRead(RotaryDT) != aState) { counter ++; } else { counter --; } Serial.print("Position: "); Serial.println(counter); } aLastState = aState; // Updates the previous state of the 2 with the current state } Circuit Without I2C Module In this setup, we're constructing the project without utilizing an I2C module. Begin by establishing connections between the pins of the 16×2 LCD and the analog pins of the Arduino according to the provided diagram. For a detailed reference on the connections or Arduino interfacing with LED, please refer to our article. Utilize five LEDs of different colors and link their negative legs to the GND pin of the Arduino through a 220 ohm resistor. Connect the positive leg of the red LED to the digital-10 pin of the Arduino. Similarly, connect the positive legs of the yellow, green, blue, and white LEDs to the digital-9, digital-8, digital-7, and digital-6 pins of the Arduino, respectively. Next, establish connections by linking the VCC pin of the rotary encoder to the 5-volt pin of the Arduino, and connect the GND pin of the rotary encoder to the GND pin of the Arduino. Wire the CLK and DT pins of the rotary encoder to the digital-2 and digital-4 pins of the Arduino. Lastly, connect the SW pin of the rotary encoder to the digital-3 pin of the Arduino. Your circuit assembly is now complete. Proceed by uploading the provided code to your Arduino setup. Code: // TECHATRONIC.COM #include "LiquidCrystal.h" LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); // RS=A0, E=A1, D4=A2, D5=A3, D6=A4, D7=A5 const int RotaryCLK = 2; //CLK pin on the rotary encoder const int RotaryDT = 4; //DT pin on the rotary encoder const int RotarySW = 3; //SW pin on the rotary encoder (Button function) int ButtonCounter = 0; //counts the button clicks int RotateCounter = 0; //counts the rotation clicks bool rotated = true; //info of the rotation bool ButtonPressed = false; //info of the button int CLKNow; int CLKPrevious; int DTNow; int DTPrevious; float TimeNow1; float TimeNow2; const int whiteLED = 6; const int blueLED = 7; const int greenLED = 8; const int yellowLED = 9; const int redLED = 10; bool whiteLEDStatus = false; bool blueLEDStatus = false; bool greenLEDStatus = false; bool yellowLEDStatus = false; bool redLEDStatus = false; void setup() { Serial.begin(9600); lcd.begin(16,2); lcd.setCursor(0,0); //Defining position to write from first row, first column . lcd.print("W B G Y R POS"); lcd.setCursor(0,1); //second line, 1st block lcd.print("0 0 0 0 0 0"); //You can write 16 Characters per line . delay(3000); //wait 3 sec pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(whiteLED, OUTPUT); //white LED pinMode(blueLED, OUTPUT); //blue LED pinMode(greenLED, OUTPUT); //green LED pinMode(yellowLED, OUTPUT); //yellow LED pinMode(redLED, OUTPUT); //red LED digitalWrite(whiteLED, LOW); digitalWrite(blueLED, LOW); digitalWrite(greenLED, LOW); digitalWrite(yellowLED, LOW); digitalWrite(redLED, LOW); CLKPrevious = digitalRead(RotaryCLK); DTPrevious = digitalRead(RotaryDT); attachInterrupt(digitalPinToInterrupt(RotaryCLK), rotate, CHANGE); attachInterrupt(digitalPinToInterrupt(RotarySW), buttonPressed, FALLING); //either falling or rising but never "change". TimeNow1 = millis(); //Start timer 1 } void loop() { printLCD(); ButtonChecker(); } void buttonPressed() { //This timer is a "software debounce". It is not the most effective solution, but it works TimeNow2 = millis(); if(TimeNow2 - TimeNow1 > 500) { ButtonPressed = true; } TimeNow1 = millis(); //"reset" timer; the next 500 ms is counted from this moment } void rotate() { CLKNow = digitalRead(RotaryCLK); //Read the state of the CLK pin // If last and current state of CLK are different, then a pulse occurred if (CLKNow != CLKPrevious && CLKNow == 1) { // If the DT state is different than the CLK state then // the encoder is rotating CCW so increase if (digitalRead(RotaryDT) != CLKNow) { RotateCounter++; if(RotateCounter > 4) { RotateCounter = 0; } } else { RotateCounter--; if(RotateCounter < 0) { RotateCounter = 4; } } } CLKPrevious = CLKNow; // Store last CLK state rotated = true; } void printLCD() { if(rotated == true) //refresh the CLK { lcd.setCursor(12,1); lcd.print(RotateCounter); Serial.println(RotateCounter); rotated = false; } } void ButtonChecker() //this is basically the menu part. keep track of the buttonpressed and rotatecounter for navigation { if(ButtonPressed == true) { switch(RotateCounter) { case 0: if(whiteLEDStatus == false) { whiteLEDStatus = true; digitalWrite(whiteLED, HIGH); //white LED is turned ON } else { whiteLEDStatus = false; digitalWrite(whiteLED, LOW); //white LED is turned OFF } lcd.setCursor(0,1); // Defining positon to write from second row, first column . lcd.print(whiteLEDStatus); Serial.println(whiteLEDStatus); break; case 1: if(blueLEDStatus == false) { blueLEDStatus = true; digitalWrite(blueLED, HIGH); } else { blueLEDStatus = false; digitalWrite(blueLED, LOW); } lcd.setCursor(2,1); // Defining positon to write from second row, first column . lcd.print(blueLEDStatus); break; case 2: if(greenLEDStatus == false) { greenLEDStatus = true; digitalWrite(greenLED, HIGH); } else { greenLEDStatus = false; digitalWrite(greenLED, LOW); } lcd.setCursor(4,1); // Defining positon to write from second row, first column . lcd.print(greenLEDStatus); break; case 3: if(yellowLEDStatus == false) { yellowLEDStatus = true; digitalWrite(yellowLED, HIGH); } else { yellowLEDStatus = false; digitalWrite(yellowLED, LOW); } lcd.setCursor(6,1); // Defining positon to write from second row, first column . lcd.print(yellowLEDStatus); break; case 4: if(redLEDStatus == false) { redLEDStatus = true; digitalWrite(redLED, HIGH); } else { redLEDStatus = false; digitalWrite(redLED, LOW); } lcd.setCursor(8,1); // Defining positon to write from second row, first column . lcd.print(redLEDStatus); break; } } ButtonPressed = false; //reset this variable } Circuit with I2C module In this setup, we're constructing a project utilizing an I2C module. Begin by connecting the VCC pin of the I2C module to the Arduino's 5-volt pin and linking the GND pin of the I2C module to the Arduino's GND pin. Proceed by joining the SDA pin of the module to the Arduino's analog-4 pin and attaching the SCL pin of the module to the Arduino's analog-5 pin. Follow the diagram for proper connections between the pins of the 16×2 LCD and the I2C module. Utilize LEDs of five distinct colors, connecting their negative legs to the Arduino's GND pin via a 220-ohm resistor. Connect the positive leg of the red LED to the digital-10 pin of the Arduino. Similarly, link the positive leg of the yellow, green, blue, and white LEDs to the digital-9, digital-8, digital-7, and digital-6 pins of the Arduino, respectively. Subsequently, connect the VCC pin of the rotary encoder to the Arduino's 5-volt pin and link the GND pin of the rotary encoder to the Arduino's GND pin. Then, attach the CLK and DT pins of the rotary encoder to the digital-2 and digital-4 pins of the Arduino. Connect the SW pin of the rotary encoder to the digital-3 pin of the Arduino. Following these steps completes the circuit setup. Now, please upload the provided code. Code: // TECHATRONIC.COM // I2C LIBRARY //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library #include #include LiquidCrystal_I2C lcd(0x3F,16,2); // SDA = A4 // SCL = A5 const int RotaryCLK = 2; //CLK pin on the rotary encoder const int RotaryDT = 4; //DT pin on the rotary encoder const int RotarySW = 3; //SW pin on the rotary encoder (Button function) int ButtonCounter = 0; //counts the button clicks int RotateCounter = 0; //counts the rotation clicks bool rotated = true; //info of the rotation bool ButtonPressed = false; //info of the button int CLKNow; int CLKPrevious; int DTNow; int DTPrevious; float TimeNow1; float TimeNow2; const int whiteLED = 6; const int blueLED = 7; const int greenLED = 8; const int yellowLED = 9; const int redLED = 10; bool whiteLEDStatus = false; bool blueLEDStatus = false; bool greenLEDStatus = false; bool yellowLEDStatus = false; bool redLEDStatus = false; void setup() { Serial.begin(9600); lcd.init(); // Arduino // lcd.begin(); // nodemcu lcd.backlight(); lcd.setCursor(0,0); //Defining position to write from first row, first column . lcd.print("W B G Y R POS"); lcd.setCursor(0,1); //second line, 1st block lcd.print("0 0 0 0 0 0"); //You can write 16 Characters per line . delay(3000); //wait 3 sec pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(whiteLED, OUTPUT); //white LED pinMode(blueLED, OUTPUT); //blue LED pinMode(greenLED, OUTPUT); //green LED pinMode(yellowLED, OUTPUT); //yellow LED pinMode(redLED, OUTPUT); //red LED digitalWrite(whiteLED, LOW); digitalWrite(blueLED, LOW); digitalWrite(greenLED, LOW); digitalWrite(yellowLED, LOW); digitalWrite(redLED, LOW); CLKPrevious = digitalRead(RotaryCLK); DTPrevious = digitalRead(RotaryDT); attachInterrupt(digitalPinToInterrupt(RotaryCLK), rotate, CHANGE); attachInterrupt(digitalPinToInterrupt(RotarySW), buttonPressed, FALLING); //either falling or rising but never "change". TimeNow1 = millis(); //Start timer 1 } void loop() { printLCD(); ButtonChecker(); } void buttonPressed() { //This timer is a "software debounce". It is not the most effective solution, but it works TimeNow2 = millis(); if(TimeNow2 - TimeNow1 > 500) { ButtonPressed = true; } TimeNow1 = millis(); //"reset" timer; the next 500 ms is counted from this moment } void rotate() { CLKNow = digitalRead(RotaryCLK); //Read the state of the CLK pin // If last and current state of CLK are different, then a pulse occurred if (CLKNow != CLKPrevious && CLKNow == 1) { // If the DT state is different than the CLK state then // the encoder is rotating CCW so increase if (digitalRead(RotaryDT) != CLKNow) { RotateCounter++; if(RotateCounter > 4) { RotateCounter = 0; } } else { RotateCounter--; if(RotateCounter < 0) { RotateCounter = 4; } } } CLKPrevious = CLKNow; // Store last CLK state rotated = true; } void printLCD() { if(rotated == true) //refresh the CLK { lcd.setCursor(12,1); lcd.print(RotateCounter); Serial.println(RotateCounter); rotated = false; } } void ButtonChecker() //this is basically the menu part. keep track of the buttonpressed and rotatecounter for navigation { if(ButtonPressed == true) { switch(RotateCounter) { case 0: if(whiteLEDStatus == false) { whiteLEDStatus = true; digitalWrite(whiteLED, HIGH); //white LED is turned ON } else { whiteLEDStatus = false; digitalWrite(whiteLED, LOW); //white LED is turned OFF } lcd.setCursor(0,1); // Defining positon to write from second row, first column . lcd.print(whiteLEDStatus); Serial.println(whiteLEDStatus); break; case 1: if(blueLEDStatus == false) { blueLEDStatus = true; digitalWrite(blueLED, HIGH); } else { blueLEDStatus = false; digitalWrite(blueLED, LOW); } lcd.setCursor(2,1); // Defining positon to write from second row, first column . lcd.print(blueLEDStatus); break; case 2: if(greenLEDStatus == false) { greenLEDStatus = true; digitalWrite(greenLED, HIGH); } else { greenLEDStatus = false; digitalWrite(greenLED, LOW); } lcd.setCursor(4,1); // Defining positon to write from second row, first column . lcd.print(greenLEDStatus); break; case 3: if(yellowLEDStatus == false) { yellowLEDStatus = true; digitalWrite(yellowLED, HIGH); } else { yellowLEDStatus = false; digitalWrite(yellowLED, LOW); } lcd.setCursor(6,1); // Defining positon to write from second row, first column . lcd.print(yellowLEDStatus); break; case 4: if(redLEDStatus == false) { redLEDStatus = true; digitalWrite(redLED, HIGH); } else { redLEDStatus = false; digitalWrite(redLED, LOW); } lcd.setCursor(8,1); // Defining positon to write from second row, first column . lcd.print(redLEDStatus); break; } } ButtonPressed = false; //reset this variable } About the Code Initially, we set up a counter variable and set its initial value to 0. Subsequently, we specify the three pins used by the rotary encoder. Within the loop function, we continuously monitor the rotation of the rotary encoder and display the current position value. In relation to the LEDs, we additionally verify whether the user has pressed the button. If the button is pressed at a particular position, the corresponding device will toggle on or off according to the prevailing conditions. ### VCSEL LASERS POWERFUL EMITTERS WITH SHORT RISE TIMES LASER COMPONENTS has expanded its range of VCSEL lasers. Its wide range of products now includes emitters with 850nm and 940nm in power classes between 200mW and 50W. All products are characterized by extremely short rise times and thus support pulse trains in the low nanosecond range and below. Thanks to the semiconductor structure, the emission wavelength remains nearly constant, even with temperature fluctuations. This allows narrow-band bandpass filters to be used on the detector side. Upon customer request, the laser diodes are also available as powerful arrays. In vertical-cavity surface-emitting lasers (VCSELs), light is emitted perpendicular to the chip’s surface and can therefore be easily collimated. The high power and short pulse sequence of the compact multi-mode lasers make this technology attractive for the LiDAR market, among others. There, these properties ensure greater ranges and higher resolutions. Market researchers therefore assume that the global market for VCSEL lasers will grow rapidly in the next ten years. Read more: VCSEL LASERS POWERFUL EMITTERS WITH SHORT RISE TIMES ### Mastering Arduino Servo Control: A Comprehensive Tutorial Introduction Hello enthusiasts, welcome back to our latest post featuring Arduino UNO. In this article, we'll demonstrate how to create your own Arduino servo control remote system. This setup involves utilizing an IR remote control for wireless signal transmission, coupled with a TSOP IR receiver module on the receiving end. To control the servo motor, a simple button press on the IR remote suffices. Explore additional articles on IoT and basic electronics. Ensure accurate connections and upload the code as instructed. Description Initially, the servo motor is positioned at 0 degrees. When you press buttons on the IR remote, the Arduino servo control initiates positional changes. The code already specifies various positions and their corresponding codes, allowing customization as needed. For instance, pressing button 1 on the IR remote triggers rotation of the servo motor to a specific position. This circuit is the simplest setup for this project. Now, LEDs are integrated with the Arduino, enabling them to automatically illuminate upon pressing the IR remote buttons. The inclusion of LEDs in the circuit serves the purpose of indicating signal reception by the Arduino. In the third circuit iteration, an LCD module is incorporated, providing visibility into the values received by the Arduino. Feel free to explore our Arduino IR remote control project for reference. Components Required for Arduino with Servo Control system Here is a rundown of the necessary components. Verify that each component is functioning correctly and possesses the accurate values: - Arduino UNO - TSOP IR receiver - Servo motor - IR remote - Three LEDs of various colors - 16×2 LCD - 10K potentiometer - Jumper wires and a breadboard - 220-ohm resistors - USB cable utilized for code uploading Circuit for arduino servo control This post includes three circuit diagrams, providing options for you to select based on your preference. Ensure precision and firmness in all connections. Utilize a breadboard to establish the common connections as illustrated in the diagrams. Only with Servo motor Link the positive power lead of the TSOP IR receiver to the 5-volt pin of the Arduino. Connect the negative power lead to the Arduino's GND pin. Then, attach the OUT lead of the IR receiver to the digital-4 pin of the Arduino. Regarding the servo motor, connect the VCC wire to the 5-volt pin of the Arduino. Link the GND wire to the GND pin of the Arduino. Lastly, connect the signal wire of the servo motor to the digital-3 pin of the Arduino for this remote-controlled servo. Your connections are now successfully established. Servo motor Arduino code #include #include Servo s1; int RECV_PIN = 4; int S ; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); s1.attach(3); Serial.println("Enabling IRin"); irrecv.enableIRIn(); Serial.println("Project Started"); s1.write(0); } void loop() { if (irrecv.decode(&results)) { S = results.value, HEX ; Serial.println(S); irrecv.resume(); // Receive the next value } if(S == 2295 ) { s1.write(90); } if(S == -30601 ) { s1.write(180); } if(S == 18615 ) { s1.write(120); } if(S == 10455 ) { s1.write(70); } if(S == -22441 ) { s1.write(0); } delay(10); } arduino With LEDs and Servo Motor Connect the VCC wire of the servo motor to the 5 volts pin on the Arduino. Link the GND wire of the servo motor to the GND pin on the Arduino. Connect the positive power leg of the TSOP IR receiver to the 5 volts pin on the Arduino. Then, attach the negative power leg to the GND pin on the Arduino. Next, connect the OUT leg of the IR receiver to the digital-4 pin on the Arduino. Connect the signal wire of the servo motor to the digital-3 pin on the Arduino. Take an LED and connect its positive leg to the digital-8 pin on the Arduino. Attach the positive leg of the second LED to the digital-9 pin on the Arduino. Connect the positive leg of the third LED to the digital-10 pin on the Arduino. Connect the negative legs of all three LEDs to the GND pin on the Arduino using a 220 ohm resistor. Your connections are now complete. servo motor arduino code with IR remote #include #include Servo s1; int RECV_PIN = 4; int S ; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); s1.attach(3); Serial.println("Enabling IRin"); irrecv.enableIRIn(); Serial.println("Project Started"); pinMode(8,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); s1.write(0); } void loop() { if (irrecv.decode(&results)) { S = results.value, HEX ; Serial.println(S); irrecv.resume(); // Receive the next value } if(S == 2295 ) { s1.write(90); digitalWrite(8,HIGH); digitalWrite(9,LOW); digitalWrite(10,LOW); } if(S == -30601 ) { s1.write(180); digitalWrite(8,LOW); digitalWrite(9,HIGH); digitalWrite(10,LOW); } if(S == 18615 ) { s1.write(60); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,HIGH); } if(S == 10455 ) { s1.write(0); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); } delay(10); } Arduino With 16×2 LCD and Servo Motor Begin by linking the OUT leg of the IR receiver to the digital-4 pin of the Arduino. Utilize an LED, connecting its positive leg to the digital-8 pin on the Arduino. Proceed by attaching the positive leg of the second LED to the digital-9 pin on the Arduino. Connect the positive leg of the third LED to the digital-10 pin on the Arduino. Following this, connect the negative legs of all three LEDs to the GND pin of the Arduino via a 220 ohm resistor, as illustrated above. Connect the positive power leg of the TSOP IR receiver to the 5 volts pin on the Arduino. Then, link the negative power leg to the GND pin of the Arduino. Attach the VCC wire of the servo motor to the 5 volts pin of the Arduino and the GND wire of the servo motor to the GND pin of the Arduino. Finally, connect the signal wire of the servo motor to the digital-3 pin on the Arduino. Your connections are now finalized. Arduino With 16×2 LCD and Servo Motor #include #include #include "LiquidCrystal.h" LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); Servo s1; int RECV_PIN = 4; int S ; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); s1.attach(3); lcd.begin(16,2); Serial.println("Enabling IRin"); irrecv.enableIRIn(); Serial.println("Project Started"); pinMode(8,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); s1.write(0); lcd.setCursor(0,0); lcd.print("TECHATRONIC.COM "); delay(2000); lcd.setCursor(0,0); lcd.print("TV REMOTE PROJECT "); } void loop() { if (irrecv.decode(&results)) { S = results.value, HEX ; Serial.println(S); irrecv.resume(); // Receive the next value } if(S == 2295 ) { s1.write(90); digitalWrite(8,HIGH); digitalWrite(9,LOW); digitalWrite(10,LOW); lcd.setCursor(0,1); lcd.print("90 Dgree B led "); } if(S == -30601 ) { s1.write(180); digitalWrite(8,LOW); digitalWrite(9,HIGH); digitalWrite(10,LOW); lcd.setCursor(0,1); lcd.print("180 Dgree G led "); } if(S == 18615 ) { s1.write(60); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,HIGH); lcd.setCursor(0,1); lcd.print("60 Dgree R led "); } if(S == 10455 ) { s1.write(0); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); lcd.setCursor(0,1); lcd.print("0 Dgree led OFF "); } delay(10); } About the Code Initially, we define the data type for each variable and subsequently assign their respective values. Following this, we specify the pin modes for every input or output pin utilized in the setup. Within the loop function, we acquire user input to facilitate ongoing processes. To execute specific operations, we utilize if conditional statements, ensuring execution only if the foundational condition proves true. ### VU METER BUILT WITH NEAT GRAPHICAL VFD DISPLAY VFD displays are beloved for their eerie glow that sits somewhere just off what you’d call blue. [mircemk] used one of these displays to create an old-school VU meter that looks straight out of a 1970s laboratory.  The build uses an Arduino Nano as the brains of the operation, which uses its analog inputs to process incoming audio into decibel levels for display on a VU meter. It’s then charged with driving a GP1287 VFD display. Unlike some VFDs that have preset segments that can be illuminated or switched off, this is a fully graphical dot matrix display that can be driven as desired. Thus, when it’s not acting as a bar graph VU meter, it can also emulate old-school moving-needle meters. Though, it bears noting, the slow updates the Arduino makes to the display means it’s kind of like those dodgy skeumorphic music apps of the 16-bit era; i.e. it’s quite visually jerky. Overall, it’s a neat project that demonstrates how to work with audio, microcontrollers, and displays all in one. We’ve featured other projects from [mircemk] before, too, almost all of which appear in the same blue and grey project boxes. Video after the break. Source: VU METER BUILT WITH NEAT GRAPHICAL VFD DISPLAY ### BOXER-8251AI: MORE POWER, GREATER FLEXIBILITY FOR AI AT THE EDGE AAEON, a leader in AI edge solutions, announces the release of the BOXER-8251AI AI edge box PC powered by NVIDIA® Jetson Xavier™ NX. With greater performance and compact size, the BOXER-8251AI offers greater flexibility to bring even more smart applications to life. The BOXER-8251AI is powered by the innovative Jetson Xavier NX from NVIDIA. Featuring a six-core 64-bit ARM processor, it boasts 384 CUDA® cores, 48 Tensor Cores, and two NVDLA engines capable of running multiple neural networks in parallel, delivering accelerated computing performance up to 21 TOPS. Built to bring dedicated AI processing to the edge, the system also features 8GB of LPDDR4 memory and 16GB of onboard eMMC memory that’s expandable through the Micro-SD card slot. One of the most innovative features of the NVIDIA Jetson Xavier NX is the ability of users to select five different performance modes. These modes allow users to tailor the number of cores, processor speed, and power draw the system utilizes. Thanks to extensive testing and development by AAEON, along with rugged thermal design, users are able to match processor performance with a thermal performance for each operating mode. The BOXER-8251AI also provides users with greater flexibility with its compact size and I/O features. With two COM ports and four USB 3.2 Gen 1 ports, as well as Gigabit Ethernet port, the BOXER-8251AI can easily integrate into existing applications as well as new ones. Its rugged, fanless design keeps dust and other contaminants out of the system, offering reliable and low-maintenance operation for more stable performance. Read more: BOXER-8251AI: MORE POWER, GREATER FLEXIBILITY FOR AI AT THE EDGE ### Arduino GSM Communication: Calling and Messaging Tutorial Introduction Hello everyone, welcome back to our latest post. Are you familiar with a GSM module? In this article, we'll explore making calls and sending messages using Arduino and the GSM module. If you're new to understanding how a GSM module operates with Arduino, we recommend getting acquainted with it first. Ensure the connections are accurately set up, and then proceed to upload the provided code to your Arduino. Don't forget to explore our other articles on Arduino and IoT that we've published. Description Within this Arduino GSM project, we're equipped to initiate phone calls or send SMS using a GSM module. Utilizing two push buttons, the first button allows you to initiate a phone call by providing the intended mobile number. The execution status of the task can be monitored on the serial monitor screen. An LED illuminates upon button press, signifying the ongoing task, and automatically switches off upon completion. Additionally, explore our GSM-based forest fire alert system designed for digitalization. Components Required in GSM project Arduino UNO SIM 900 GSM module A pair of push buttons Resistors with a value of 220 ohms Dual LEDs Jumper wires along with a breadboard USB cable utilized for code uploading Arduino with GSM Module Circuit Arduino UNO LED 1 LED 2 220 Ohm Resistor 4 Pin Anode Terminal     5 Pin Anode Terminal   GND     Terminal 1   Cathode Terminal Cathode Terminal Terminal 2 Arduino UNO Button 1 Button 2 220 Ohm Resistor 7 Pin Terminal 1     8 Pin   Terminal 1   GND Terminal 2 Terminal 2 Terminal 1   Terminal 1   Terminal 2     Terminal 1 Terminal 2 Link a 12-volt, 2-amp DC power supply to the GSM module. Connect the Arduino's digital pin 10 to the GSM module's Tx pin. Join the GND pin of the Arduino with the GSM module's GND pin. Attach the digital pin 11 of the Arduino to the Rx pin of the GSM module. Next, connect the negative legs of two LEDs to the Arduino's GND pin via a 220-ohm resistor. Connect one LED's positive leg to the Arduino's digital pin 4 and the other LED's positive leg to digital pin 5. Take a push button and connect one of its pins to the Arduino's 5V pin. Connect the other pin to the Arduino's digital pin 8. Repeat this step for the second push button, linking it to the Arduino's digital pin 7. Your circuit setup is now complete. Additionally, explore GSM-based Home Automation for more information. Code for gsm and Arduino // TECHATRONIC.COM // Download Library of SoftwareSerial link given // https://github.com/PaulStoffregen/SoftwareSerial #include SoftwareSerial gsm(10,11); // SoftSerial( RX , TX ); // 10 pin connect to TX of GSM SIM 900 Module // 11 pin connect to RX of GSM SIM 900 Module const int buttonPin1 = 7; // Push Button 1 const int buttonPin2 = 8; // Push Button 2 int buttonState1 = 0; int buttonState2 = 0; void setup() { delay(10000); Serial.begin(9600); gsm.begin(9600); pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); pinMode(5,OUTPUT); // LED1 pin D5 pinMode(4,OUTPUT); // LED2 pin D4 } void loop() { buttonState1 = digitalRead(buttonPin1); buttonState2 = digitalRead(buttonPin2); if (Serial.available()>0) switch(Serial.read()) { case 'r': RecieveMessage(); break; } if (gsm.available()>0) Serial.write(gsm.read()); if (buttonState1 == HIGH) { gsm.println("ATD7007651787;"); //replace x by your number delay(100); digitalWrite(5,HIGH); // LED1 ON gsm.println("ATH"); delay(2000); Serial.println("calling....."); digitalWrite(5,LOW); // LED1 OFF } if (buttonState2 == HIGH) { Serial.println ("Sending Message"); digitalWrite(4,HIGH); // LED2 ON gsm.println("AT+CMGF=1"); //Sets the GSM Module in Text Mode delay(1000); Serial.println ("Set SMS Number"); gsm.println("AT+CMGS=\"7007651787\"\r"); //Mobile phone number to send message, replace x by your number delay(1000); Serial.println ("Set SMS Content"); gsm.println("Techatronic.com");// Messsage content delay(100); Serial.println ("Finish"); gsm.println((char)26);// ASCII code of CTRL+Z delay(1000); Serial.println ("Message has been sent "); digitalWrite(4,LOW); // LED2 ON } } void RecieveMessage() { Serial.println ("gsm RECEIVE SMS"); delay (1000); gsm.println("AT+CNMI=2,2,0,0,0"); // AT Command to receive a live SMS delay(1000); Serial.write ("Unread Message done"); } We trust you found this Arduino and GSM module project for calls and messages enjoyable and comprehended its functionality thoroughly. Should you encounter any uncertainties concerning this GSM project, please don't hesitate to share your queries in the comments section below. Additionally, explore our collection of articles on Arduino and Raspberry Pi for more insights. ### ROCK PI E SBC FEATURES ROCKCHIP RK3328, WITH 64BITS QUAD CORE PROCESSOR In the past, we have seen some Rockchip boards from Radxa, like the Rock pi N10(RK3399Pro) and the Rock PiS powered by the RK3308 Cortex-A35 processor. Now, Radxa has launched a Rock Pi E SBC, which is a Rockchip RK3328 based SBC. It is equipped with a 64bits quad core processor, USB 3.0, dual ethernet, wireless connectivity at the size of 2.5×2.2 inch (56x65mm), making it perfect for IoT and network applications. ROCK Pi E comes in various ram sizes from 512MB to 4GB DDR3, and uses uSD card for OS and storage as well as supporting eMMC module. Optionally, ROCK Pi E supports PoE, additional HAT is required. The SBC that is similar to the ROCK Pi E in the market, is the NanoPi R2S dual Gigabit Ethernet SBC from FriendlyElec, which is powered by Rockchip RK3328 SBC. The major difference between the two SBC is that Rock Pi E is equipped with one Gigabit Ethernet port, a USB 3.0 port, a built-in WiFi, and Bluetooth connectivity which is unavailable on the NanoPi R2S. The following are specifications of Rock Pi E: SoC – Rockchip RK3328  quad-core Arm Cortex-A53 processor @ up to 1.3 GHzSystem Memory – 256MB, 512MB, 1GB, or  2GB DDR3Storage – MicroSD card slot up to 128GB, eMMC module support ( 16GB / 32GB / 64GB / 128GB)Video & Audio – 3.5mm AV output jack (Not 100% sure whether composite video is supported)Connectivity1x Gigabit Ethernet port with PoE support via an additional HAT10/100M EthernetWireless2.4 GHz 802.11 b/g/n Wifi 4 and Bluetooth 4.2 via RTL8723DU ORDual-band 802.11b/g/n/ac WiFi 5 and Bluetooth 4.2 via RTL8821CUUSB – 1x USB 3.0 Type-A host portExpansion – 40-pin expansion header with 1x USB 2.0, 1x I2C, 1x SPI, 2xUART, 1x I2S, 5V, 3.3V and GND signalsMisc – Reset key, Maskrom key, LEDsPower Supply – 5V via USB-C portDimensions – 56 x 65mm. Read more: ROCK PI E SBC FEATURES ROCKCHIP RK3328, WITH 64BITS QUAD CORE PROCESSOR ### ARDUINO MEASURES REMAINING BATTERY POWER WITH ZERO COMPONENTS, NO I/O PIN [Trent M. Wyatt]’s CPUVolt library provides a fast way to measure voltage using no external components, and no I/O pin. It only applies to certain microcontrollers, but he provides example Arduino code showing how handy this can be for battery-powered projects. The classical way to measure a system’s voltage is to connect one of your MCU’s ADC pins to a voltage divider made from a couple resistors. A simple calculation yields a reading of the system’s voltage, but this approach has two disadvantages: one is that it constantly consumes power, and the other is that it ties up a pin that you might want to use for something else. There are ways to mitigate these issues, but it would be best to avoid them entirely. Microchip application note 2447 describes a method of doing exactly that, and that’s precisely what [Trent]’s Arduino library implements. What happens in this method is one selects Vbg (a fixed internal voltage reference that is temperature-independent) as Vin, and selects Vcc as the ADC’s voltage reference. This is essentially backwards from how the ADC is normally used, but it requires no external hookup and is only a bit of calculation away from determining Vcc in millivolts. There is some non-linearity in the results, but for the purposes of measuring battery power in a system or deciding when to send a “low battery” signal, it’s an attractive solution. Being an Arduino library, CPUVolt makes this idea very easy to use, but the concept and method is actually something we have seen before. If you’re interested in the low-level details, then check out our earlier coverage which goes into some detail on exactly what is going on, using an ATtiny84. Source: ARDUINO MEASURES REMAINING BATTERY POWER WITH ZERO COMPONENTS, NO I/O PIN ### BLE MODULE CLAIMS TO BE WORLD’S SMALLEST LG Innotek announced that it has developed the world’s smallest Bluetooth module. With this development, LG Innotek is gearing up to advance further into the communication module market for Internet of Things (IoT). LG Innotek’s “Bluetooth low energy (BLE) module for IoT” is a key component that enables data communications for IoT devices such as glucose measuring patches, smart lighting, outlets, switches, wireless earphones, and hearing aids. Thanks to its low power consumption feature, the module is mainly used for IoT devices that require limited power supply, such as small wearable devices. By linking various IoT devices to the smartphone, users can conveniently track blood glucose levels, remotely control lighting, outlets, switches, and operate wireless earphones or hearing aids at a short distance. Notably, the IoT products featuring LG Innotek’s BLE module are small and slim but boast of excellent communication performance. With differentiated radio frequency (RF) signal design and antenna technology, and ultra-precision circuit technology, component space is reduced while the data transmission distance is increased. Read more: BLE MODULE CLAIMS TO BE WORLD’S SMALLEST ### Enhancing Safety: Arduino-Based Smart Helmet for Accident Detection Hello everyone, welcome back to Techatronic. The smart helmet encompasses a range of functionalities including navigation, call management, accident detection, alcohol sensing, and various other features aimed at transforming the helmet into a smart device. Prioritizing the safety and security of the rider, this helmet serves as a crucial aid. For instance, it prevents bike ignition if the rider is inebriated, ensuring safety on the road. Loaded with multiple features, the primary objective of this smart helmet project revolves around ensuring the driver's safety. The helmet integrates various electronic elements like GPS, GSM, and multiple sensors. Additionally, for the GSM module, a functional 2G or 3G SIM card is necessary. Our aim consistently revolves around addressing community issues through innovation. Prior projects, including the Sign Language Glove and Blind Stick, demonstrate our commitment to solving challenges. These same principles guide the development of this smart helmet. This innovative concept introduces a smart helmet project utilizing Arduino for accident detection. Designed to mitigate potential damages during accidents, this helmet not only safeguards the wearer but also initiates calls to relatives and transmits location data through a GSM module. How does the system will work? Initially, let's focus on the transmitter section designed for deployment within the helmet. Within this segment, we've integrated two sensors: an alcohol sensor and an accident detection sensor. The alcohol sensor, recognized as the MQ3 sensor, requires some understanding of its attributes and functionalities. Components Required for smart helmet :- MQ3 sensor (Alcohol Sensor) The MQ3 sensor is uniquely designed to detect alcohol solely from the moisture present in the air. It identifies the moisture content specific to alcohol, detecting this element using a metal electrode housed within the sensor, which becomes active upon contact with alcohol. Electrons flow between the electrodes within the MQ3 sensor. Upon alcohol contact, the conductivity of the electrode increases. This change in conductivity is detected at the output pin, aiding the detection process in the Arduino-based smart helmet project. The MQ3 sensor can be easily interfaced with Arduino or any other controller being utilized here. The MQ3 sensor operates at an input voltage of 5V, provided through the Vcc pin. Extended usage of the MQ3 sensor over long durations may lead to potential malfunctions. Vibration Sensor SW-420 Another crucial sensor to note is the vibration sensor, specified as the SW-420 model. The operational mechanism of this vibration sensor is notably straightforward. Enclosed within the cylindrical structure are numerous small metal balls. The sensor contains multiple metal lines, where each pair is linked to the ground and signal wire. Upon vibration, these balls make contact with both lines, completing the electrical circuit and generating a signal at the output pin. This vibration sensor serves as a trigger for the GSM module. Continuously transmitting signals to the Arduino—our designated microcontroller in this smart helmet project—the vibration sensor prompts actions in response to signal variations. If the sensor detects vibrations within the smart helmet, close to an accident scenario, the Arduino activates the GSM module to send messages and initiate calls. GSM SIM800L Module. Incorporated within this smart helmet project is the GSM SIM800L Module, utilized for location tracking. Activation of this module is initiated through the vibration sensor. The GSM SIM800L Module is a low-power device capable of supporting 2G and 3G SIM cards, facilitating communication functionalities. The GSM SIM800L module, characterized by its compact size and affordability, serves as a GSM module enabling device connectivity to GSM networks. This module possesses the capability to communicate through SMS, voice calls, or GPRS with other devices. It supports quad bands covering the 850/900/1800/1900 MHz frequency bands. Operating over both 2G and 3G bands, the SIM800L module adopts the UART protocol, utilizing Rx and Tx pins for data transmission and reception. This module is compatible with power inputs ranging from 3.3 volts to 5 volts, requiring a minimum power supply of 2 amps. For optimal performance, it's recommended to utilize a 5V 2A external power supply to power the module. For those interested in programming the GSM module, a comprehensive list of AT commands and instructions is provided below for reference. Command Description AT+CSMS To Select message service AT+CPMS To Preferred message storage AT+CMGF select Message format AT+CSCA Service center address AT+CSMP Set text mode parameters in sim AT+CSDH To Show text mode parameters in Sim AT+CSCB Select cell broadcast message types AT+CSAS Save settings in the gsm module AT+CRES Restore all settings AT+CNMI Message indications to TE AT+CMGL To make the list of messages AT+CMGR Read new message AT+CMGS Send a new message AT+CMSS Send message from sim storage AT+CMGW Write a message to gsm memory AT+CMGD Delete message Note that although the module offers user-friendly features, it demands a basic understanding of electronics and programming. Additionally, ensure compatibility with a suitable SIM card and a stable cellular network connection within your vicinity. Within the program, we'll include the designated phone number to which SMS and calls will be directed. GPS Module neo 6m module The Arduino-based helmet project incorporates the Neo 6M module to transmit the current location. The NEO-6M GPS module is compact and cost-effective, capable of receiving GPS signals to determine precise latitude, longitude, and time data. It seamlessly operates with the Global Positioning System (GPS) and is compatible with the Global Navigation Satellite System (GNSS). The GPS Neo 6M module communicates via the UART protocol, establishing connectivity with any microcontroller. In this project, the module interfaces with Arduino through the UART protocol, utilizing the RX and TX pins for connectivity. A dedicated library assists in calibrating the sensor via code implementation. The NEO-6M GPS module finds widespread application in navigation systems, geotagging, tracking devices, and unmanned aerial vehicles (UAVs). It's essential to highlight that the module's optimal performance necessitates an unobstructed view of the sky for receiving GPS signals. Consequently, its functionality might be limited indoors or in regions with poor satellite coverage. NRF module NRF24L01 In the smart helmet project, there exist two devices: a transmitter and a receiver, both requiring data transmission. To facilitate bidirectional communication between them, we're employing NRF modules. The NRF modules are compact, affordable, ultra-power devices operating on a 2.4 GHz wireless transceiver. These modules are suitable for wireless communication projects, enabling connections among multiple NRF modules for seamless communication. Utilizing the SPI (Serial Peripheral Interface) protocol, NRF modules establish communication among devices. In this setup, one NRF module is linked to the transmitter, while the other connects to the receiver module. Single channel Relay module Here in the receiver section we are using a relay which will be trigger the motor which is to be pretend the bike engine. Upon receiving data from the transmitter to initiate motor action, the relay module needs to be activated. The relay module is essential for operating the 12V DC motor. DC motor 12v We've implemented a 12V DC motor with gears in this setup. When the driver is detected as being inebriated, the motor will automatically switch off, resulting in the bike engine being turned off. The 12V DC motor is linked to a 12V external power source, facilitated via a relay that consistently activates the motor. The Arduino cannot directly operate the DC motor due to potential back electromotive force (EMF) issues and the low current capacity at its pins. Arduino Mega for Tranmitter At the transmitter site, we've opted for the Arduino Mega. Numerous electronic components with different communication protocols, like NRF, GSM, GPS, and more, need to be connected. The Arduino Mega offers over 60 pins, facilitating seamless communication with various devices, making it well-suited and compatible with our project requirements. Arduino Nano The Arduino Nano, featuring the Atmel ATmega328P microcontroller chip, is a compact and diminutive microcontroller board. Resembling the well-known Arduino Uno, it boasts a smaller physical size. This board is crafted for straightforward programming via the Arduino Integrated Development Environment (IDE), utilizing a USB connection for ease of use. Smart Helmet Project Circuit Diagram (Transmitter) Presented here is the circuit diagram for the receiver circuit of the smart helmet. It includes components such as the alcohol sensor, push button, servo motor, GPS, GSM, and NRF module. Connection Table Arduino Mega MQ-3 Alcohol Sensor 5V VCC G, GND GND A0 Pin A0 Pin Servo motor 5V Red GND Black DATA Orange GSM SIM800L 2 Rx 3 Tx 5v Vcc GND Gnd GPS NEO 6M Module 10 Rx 11 Tx 5v Vcc GND Gnd Vibration Sensor A1 Din 5v Vcc Gnd Gnd NRF Module 50 MISO 51 MOSI 52 SCK 8 CSN 7 CE 3.3V Vcc Gnd Gnd Now we have to make the Transmitter connection to complete the project. Smart Helmet Project Circuit Diagram (Receiver) Connection Table Arduino Nano Relay Module D6 In 5v Vcc Gnd Gnd NRF 24L01 12 MISO 11 MOSI 13 SCK 7 CE 8 CSN 3.3v Vcc Gnd Gnd Here , we have shared all the details for Receiver and transmitter to complete the project. Now we are going to share the code for both the device. Smart Helmet Project Code #include #include #include #include #include #include RF24 radio(7, 8); // CE, CSN const byte address[6] = "00001"; Servo myservo; int pos = 0; int state = 0; const int pin = A1; float gpslat, gpslon; TinyGPS gps; SoftwareSerial sgps(10, 11); SoftwareSerial sgsm(2, 3); void setup() { // put your setup code here, to run once: pinMode(A0, INPUT_PULLUP); pinMode(A1, INPUT_PULLUP); pinMode(A2, INPUT_PULLUP); pinMode(A3, INPUT_PULLUP); myservo.attach(9); sgsm.begin(9600); sgps.begin(9600); radio.begin(); radio.openWritingPipe(address); radio.setPALevel(RF24_PA_MIN); radio.stopListening(); Serial.begin(9600); myservo.write(180); delay(500); } void loop() { // put your main code here, to run repeatedly: int m = analogRead(A0); int n = analogRead(A1); int o =digitalRead(A2); int p =digitalRead(A3); Serial.print(m); Serial.print(" "); Serial.print(o); Serial.print(" "); Serial.print(n); Serial.print(" "); Serial.println(p); delay(100); if(o==0) { myservo.write(180); delay(500); } else if (p==0) { myservo.write(0); delay(500); } sgps.listen(); while (sgps.available()) { int c = sgps.read(); if (gps.encode(c)) { gps.f_get_position(&gpslat, &gpslon); } } if(m>=500) { const char text[] = "H"; radio.write(&text, sizeof(text)); delay(100); } else { const char text[] = "A"; radio.write(&text, sizeof(text)); delay(100); } if(n>=700) { sgsm.listen(); sgsm.print("\r"); delay(1000); sgsm.print("AT+CMGF=1\r"); delay(1000); /*Replace XXXXXXXXXX to 10 digit mobile number & ZZ to 2 digit country code*/ sgsm.print("AT+CMGS=\"+919560718291\"\r"); delay(1000); //The text of the message to be sent. sgsm.print("Latitude :"); sgsm.println(gpslat, 6); sgsm.print("Longitude:"); sgsm.println(gpslon, 6); delay(1000); sgsm.write(0x1A); delay(4000); sgsm.println("ATD +919560718291;"); //replace x by your number delay(20000); //digitalWrite(5,HIGH); // LED1 ON sgsm.println("ATH"); delay(2000); Serial.println("calling....."); } else { Serial.print(""); } } Once the provided code has been uploaded to the transmitter component of the project, the next step involves uploading the provided code into the Receiver section. Smart helmet code for Receiver #include #include #include RF24 radio(7, 8); // CE, CSN const byte address[6] = "00001"; void setup() { pinMode(6, OUTPUT); pinMode(3, INPUT_PULLUP); Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.setPALevel(RF24_PA_MIN); radio.startListening(); } void loop() { int c= digitalRead(3); if(c==0) { while(1) { if (radio.available()) { char m; radio.read(&m, sizeof(m)); Serial.println(m); //char m = text; if(m=='H') { while(1) { digitalWrite(6, HIGH ); delay(200); int c= digitalRead(3); if(c==0) { break;} } } else if(m=='A') { digitalWrite(6, LOW ); delay(200); } } } } else { digitalWrite(6, HIGH ); delay(200); } }   ### ROBOTIC ROSE OF ENCHANTMENT DROPS PETALS ON COMMAND In Disney’s 1991 film Beauty and the Beast, an enchantress curses the young (10 or 11-year-old) prince to beast-hood for spurning her based solely on her appearance. She gives him a special rose that she says will bloom until his 21st birthday, at which time he’ll be turned back into a prince, provided that he learned to love by then. If not, he’ll be a beast for eternity. As the years go by, the rose drops the occasional petal and begins to wilt under the bell jar where he keeps it. [Gord Payne] was tasked with building such a rose of enchantment for a high school production and knocked it out of the park. With no budget provided, [Gord] used what he had lying about the house, like nylon trimmer line. In fact, that’s probably the most important part of this build. A piece of trimmer line runs up through the stem made of tubing and out the silk rose head, which connects with a custom 3-D printed part. Each loose petal hangs from the tubing using a short length of wire. Down at the base, the trimmer line is attached to a servo horn, which is connected to an Adafruit Circuit Playground. When the button is pressed on the remote, the servo retracts the trimmer line a little bit, dropping a petal. Be sure to check out the demo after the break. Dropping petals is an interesting problem to solve. Most of the flower hacks we see around here involve blooming, which presents its own set of troubles. Source: ROBOTIC ROSE OF ENCHANTMENT DROPS PETALS ON COMMAND ### Arduino Pro welcomes new System Integrators Partner : Patti Engineering It has been announced this week that Arduino Pro has teamed up with Patti Engineering to enhance the digital transformation of manufacturing processes. This collaboration is a key component of the Arduino Pro System Integrators Partnership Program, which is designed to incorporate Arduino technologies into professional projects, thereby elevating manufacturing productivity and quality. Manufacturers are currently navigating the shift towards Industry 4.0, a movement characterized by the integration of digital technologies into all areas of business. With the guidance of Patti Engineering, manufacturers can leverage the expertise of both companies to implement cutting-edge digital solutions that streamline production and improve operational efficiency. This partnership is poised to assist manufacturers in adopting advanced technologies that are essential for staying competitive in today’s fast-paced market. One of the key areas of focus for this partnership is the enhancement of production lines through the use of robotics. Patti Engineering’s proficiency in robotics is expected to lead to more efficient and reliable manufacturing operations. By integrating robotic systems, manufacturers can look forward to increased productivity and consistent product quality, which are critical factors for success in the industry. Arduino Pro Another crucial aspect of modern manufacturing is the control system that governs automated processes. Patti Engineering brings a wealth of experience in working with top manufacturers to optimize production through sophisticated control systems. The collaboration with Arduino Pro will provide tailored solutions that align with the specific needs of manufacturers, enhancing control and flexibility in their operations. The issue of material visibility and tracking is also addressed through this partnership. Misplaced materials can result in significant costs for manufacturers. Patti Engineering’s asset tracking solutions offer improved visibility and traceability of materials throughout the production process. By employing the latest technologies, manufacturers can ensure accuracy and accountability, which are vital for maintaining high standards of production. Patti Engineering The strategic alliance between Arduino Pro and Patti Engineering is a concerted effort to drive innovation and technological advancement in the manufacturing sector. This collaboration is set to unlock new possibilities and establish benchmarks for manufacturing excellence. It represents a commitment to fostering a culture of innovation that can propel the industry forward. “We believe that Patti Engineering’s wealth of experience and proficiency in Industry 4.0, robotics, control systems integration, and asset tracking will bring unparalleled value to our community,” Paul Kaeley, Strategic Sales Advisor to Arduino commented. “Together, we look forward to pushing the boundaries of what is possible and driving innovation in the world of technology and manufacturing.” Furthermore, the expansion of the Arduino Pro System Integrators Partnership Program through the inclusion of Patti Engineering not only extends Arduino Pro’s reach but also reinforces its commitment to enabling the professional community to utilize technology for sophisticated and advanced applications. This program is a testament to Arduino Pro’s dedication to the professional application of its technologies across various projects. The partnership between Arduino Pro and Patti Engineering marks a critical step towards achieving comprehensive Industry 4.0 capabilities for manufacturers. By drawing on the combined expertise of these leaders in technology and engineering, manufacturers are well-positioned to benefit from the ongoing evolution of the industry. The future of manufacturing is being shaped by increased connectivity, efficiency, and innovation, and this partnership is at the forefront of that transformation. Source: Arduino Pro welcomes new System Integrators Partner : Patti Engineering ### Arduino UNO LCD Game: An Entertaining Display Project Introduction Mastering Arduino programming is a straightforward endeavor. All you require is a computer and a bit of time. Among the significant Arduino programming simulators available, Wokwi stands out. Why, you ask? Find out here. This article demonstrates the process of interfacing the LCD1602 with an Arduino UNO, complete with programming. Thanks to the Wokwi embedded systems simulator, presenting this project is effortlessly achievable. All I need to do is share a link. Connection diagram Arduino UNO and lcd1602 simulator Components needed Arduino UNO, jumper wires, LCD1602, USB cable for powering the UNO, and a toggle switch are the components needed for this setup. Brief description This project initiates the game upon pressing the switch. Your objective is to shield the character from incoming blocks. The score will be prominently showcased at the top right corner of the display. As it's evident, the character used isn't a conventional symbol. It's possible to design your own symbols and store them within the LCD's EEPROM location for display. Conclusion Simplifying project sharing on the Wokwi simulator allows you to effortlessly share your projects with others. This sharing feature is beneficial for seeking assistance or showcasing your designs. If you have inquiries about this project or the simulation tool itself, feel free to ask. Schematics Code #include #define PIN_BUTTON 2 #define PIN_AUTOPLAY 1 #define PIN_READWRITE 10 #define PIN_CONTRAST 12 #define SPRITE_RUN1 1 #define SPRITE_RUN2 2 #define SPRITE_JUMP 3 #define SPRITE_JUMP_UPPER '.' // Use the '.' character for the head #define SPRITE_JUMP_LOWER 4 #define SPRITE_TERRAIN_EMPTY ' ' // User the ' ' character #define SPRITE_TERRAIN_SOLID 5 #define SPRITE_TERRAIN_SOLID_RIGHT 6 #define SPRITE_TERRAIN_SOLID_LEFT 7 #define HERO_HORIZONTAL_POSITION 1 // Horizontal position of hero on screen #define TERRAIN_WIDTH 16 #define TERRAIN_EMPTY 0 #define TERRAIN_LOWER_BLOCK 1 #define TERRAIN_UPPER_BLOCK 2 #define HERO_POSITION_OFF 0 // Hero is invisible #define HERO_POSITION_RUN_LOWER_1 1 // Hero is running on lower row (pose 1) #define HERO_POSITION_RUN_LOWER_2 2 // (pose 2) #define HERO_POSITION_JUMP_1 3 // Starting a jump #define HERO_POSITION_JUMP_2 4 // Half-way up #define HERO_POSITION_JUMP_3 5 // Jump is on upper row #define HERO_POSITION_JUMP_4 6 // Jump is on upper row #define HERO_POSITION_JUMP_5 7 // Jump is on upper row #define HERO_POSITION_JUMP_6 8 // Jump is on upper row #define HERO_POSITION_JUMP_7 9 // Half-way down #define HERO_POSITION_JUMP_8 10 // About to land #define HERO_POSITION_RUN_UPPER_1 11 // Hero is running on upper row (pose 1) #define HERO_POSITION_RUN_UPPER_2 12 // (pose 2) LiquidCrystal lcd(11, 9, 6, 5, 4, 3); static char terrainUpper[TERRAIN_WIDTH + 1]; static char terrainLower[TERRAIN_WIDTH + 1]; static bool buttonPushed = false; void initializeGraphics(){ static byte graphics[] = { // Run position 1 B01100, B01100, B00000, B01110, B11100, B01100, B11010, B10011, // Run position 2 B01100, B01100, B00000, B01100, B01100, B01100, B01100, B01110, // Jump B01100, B01100, B00000, B11110, B01101, B11111, B10000, B00000, // Jump lower B11110, B01101, B11111, B10000, B00000, B00000, B00000, B00000, // Ground B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111, // Ground right B00011, B00011, B00011, B00011, B00011, B00011, B00011, B00011, // Ground left B11000, B11000, B11000, B11000, B11000, B11000, B11000, B11000, }; int i; // Skip using character 0, this allows lcd.print() to be used to // quickly draw multiple characters for (i = 0; i < 7; ++i) { lcd.createChar(i + 1, &graphics[i * 8]); } for (i = 0; i < TERRAIN_WIDTH; ++i) { terrainUpper[i] = SPRITE_TERRAIN_EMPTY; terrainLower[i] = SPRITE_TERRAIN_EMPTY; } } // Slide the terrain to the left in half-character increments // void advanceTerrain(char* terrain, byte newTerrain){ for (int i = 0; i < TERRAIN_WIDTH; ++i) { char current = terrain[i]; char next = (i == TERRAIN_WIDTH-1) ? newTerrain : terrain[i+1]; switch (current){ case SPRITE_TERRAIN_EMPTY: terrain[i] = (next == SPRITE_TERRAIN_SOLID) ? SPRITE_TERRAIN_SOLID_RIGHT : SPRITE_TERRAIN_EMPTY; break; case SPRITE_TERRAIN_SOLID: terrain[i] = (next == SPRITE_TERRAIN_EMPTY) ? SPRITE_TERRAIN_SOLID_LEFT : SPRITE_TERRAIN_SOLID; break; case SPRITE_TERRAIN_SOLID_RIGHT: terrain[i] = SPRITE_TERRAIN_SOLID; break; case SPRITE_TERRAIN_SOLID_LEFT: terrain[i] = SPRITE_TERRAIN_EMPTY; break; } } } bool drawHero(byte position, char* terrainUpper, char* terrainLower, unsigned int score) { bool collide = false; char upperSave = terrainUpper[HERO_HORIZONTAL_POSITION]; char lowerSave = terrainLower[HERO_HORIZONTAL_POSITION]; byte upper, lower; switch (position) { case HERO_POSITION_OFF: upper = lower = SPRITE_TERRAIN_EMPTY; break; case HERO_POSITION_RUN_LOWER_1: upper = SPRITE_TERRAIN_EMPTY; lower = SPRITE_RUN1; break; case HERO_POSITION_RUN_LOWER_2: upper = SPRITE_TERRAIN_EMPTY; lower = SPRITE_RUN2; break; case HERO_POSITION_JUMP_1: case HERO_POSITION_JUMP_8: upper = SPRITE_TERRAIN_EMPTY; lower = SPRITE_JUMP; break; case HERO_POSITION_JUMP_2: case HERO_POSITION_JUMP_7: upper = SPRITE_JUMP_UPPER; lower = SPRITE_JUMP_LOWER; break; case HERO_POSITION_JUMP_3: case HERO_POSITION_JUMP_4: case HERO_POSITION_JUMP_5: case HERO_POSITION_JUMP_6: upper = SPRITE_JUMP; lower = SPRITE_TERRAIN_EMPTY; break; case HERO_POSITION_RUN_UPPER_1: upper = SPRITE_RUN1; lower = SPRITE_TERRAIN_EMPTY; break; case HERO_POSITION_RUN_UPPER_2: upper = SPRITE_RUN2; lower = SPRITE_TERRAIN_EMPTY; break; } if (upper != ' ') { terrainUpper[HERO_HORIZONTAL_POSITION] = upper; collide = (upperSave == SPRITE_TERRAIN_EMPTY) ? false : true; } if (lower != ' ') { terrainLower[HERO_HORIZONTAL_POSITION] = lower; collide |= (lowerSave == SPRITE_TERRAIN_EMPTY) ? false : true; } byte digits = (score > 9999) ? 5 : (score > 999) ? 4 : (score > 99) ? 3 : (score > 9) ? 2 : 1; // Draw the scene terrainUpper[TERRAIN_WIDTH] = '\0'; terrainLower[TERRAIN_WIDTH] = '\0'; char temp = terrainUpper[16-digits]; terrainUpper[16-digits] = '\0'; lcd.setCursor(0,0); lcd.print(terrainUpper); terrainUpper[16-digits] = temp; lcd.setCursor(0,1); lcd.print(terrainLower); lcd.setCursor(16 - digits,0); lcd.print(score); terrainUpper[HERO_HORIZONTAL_POSITION] = upperSave; terrainLower[HERO_HORIZONTAL_POSITION] = lowerSave; return collide; } // Handle the button push as an interrupt void buttonPush() { buttonPushed = true; } void setup(){ pinMode(PIN_READWRITE, OUTPUT); digitalWrite(PIN_READWRITE, LOW); pinMode(PIN_CONTRAST, OUTPUT); digitalWrite(PIN_CONTRAST, LOW); pinMode(PIN_BUTTON, INPUT); digitalWrite(PIN_BUTTON, HIGH); pinMode(PIN_AUTOPLAY, OUTPUT); digitalWrite(PIN_AUTOPLAY, HIGH); // Digital pin 2 maps to interrupt 0 attachInterrupt(0/*PIN_BUTTON*/, buttonPush, FALLING); initializeGraphics(); lcd.begin(16, 2); } void loop(){ static byte heroPos = HERO_POSITION_RUN_LOWER_1; static byte newTerrainType = TERRAIN_EMPTY; static byte newTerrainDuration = 1; static bool playing = false; static bool blink = false; static unsigned int distance = 0; if (!playing) { drawHero((blink) ? HERO_POSITION_OFF : heroPos, terrainUpper, terrainLower, distance >> 3); if (blink) { lcd.setCursor(0,0); lcd.print("Press Start"); } delay(250); blink = !blink; if (buttonPushed) { initializeGraphics(); heroPos = HERO_POSITION_RUN_LOWER_1; playing = true; buttonPushed = false; distance = 0; } return; } // Shift the terrain to the left advanceTerrain(terrainLower, newTerrainType == TERRAIN_LOWER_BLOCK ? SPRITE_TERRAIN_SOLID : SPRITE_TERRAIN_EMPTY); advanceTerrain(terrainUpper, newTerrainType == TERRAIN_UPPER_BLOCK ? SPRITE_TERRAIN_SOLID : SPRITE_TERRAIN_EMPTY); // Make new terrain to enter on the right if (--newTerrainDuration == 0) { if (newTerrainType == TERRAIN_EMPTY) { newTerrainType = (random(3) == 0) ? TERRAIN_UPPER_BLOCK : TERRAIN_LOWER_BLOCK; newTerrainDuration = 2 + random(10); } else { newTerrainType = TERRAIN_EMPTY; newTerrainDuration = 10 + random(10); } } if (buttonPushed) { if (heroPos <= HERO_POSITION_RUN_LOWER_2) heroPos = HERO_POSITION_JUMP_1; buttonPushed = false; } if (drawHero(heroPos, terrainUpper, terrainLower, distance >> 3)) { playing = false; // The hero collided with something. Too bad. } else { if (heroPos == HERO_POSITION_RUN_LOWER_2 || heroPos == HERO_POSITION_JUMP_8) { heroPos = HERO_POSITION_RUN_LOWER_1; } else if ((heroPos >= HERO_POSITION_JUMP_3 && heroPos <= HERO_POSITION_JUMP_5) && terrainLower[HERO_HORIZONTAL_POSITION] != SPRITE_TERRAIN_EMPTY) { heroPos = HERO_POSITION_RUN_UPPER_1; } else if (heroPos >= HERO_POSITION_RUN_UPPER_1 && terrainLower[HERO_HORIZONTAL_POSITION] == SPRITE_TERRAIN_EMPTY) { heroPos = HERO_POSITION_JUMP_5; } else if (heroPos == HERO_POSITION_RUN_UPPER_2) { heroPos = HERO_POSITION_RUN_UPPER_1; } else { ++heroPos; } ++distance; digitalWrite(PIN_AUTOPLAY, terrainLower[HERO_HORIZONTAL_POSITION + 2] == SPRITE_TERRAIN_EMPTY ? HIGH : LOW); } delay(50); } ### ARDUINO AUTO-GLOCKENSPIEL LOOKS PROPER IN COPPER What is it about solenoids that makes people want to make music with them? Whatever it is, we hope that solenoids never stop inspiring people to make instruments like [CamsLab]’s copper pipe auto-glockenspiel. At first, [CamsLab] thought of striking glasses of water, but didn’t like the temporary vibe of a setup like that. They also considered striking piano keys, but thought better of it when considering the extra clicking sound that the solenoids would make, plus it seemed needlessly complicated to execute. So [CamsLab] settled on copper pipes. That in itself was a challenge as [CamsLab] had to figure out just the right lengths to cut each pipe in order to produce the desired pitch. Fortunately, they started with a modest 15-pipe glockenspiel as a proof of concept. However, the most challenging aspect of this project was figuring out how to mount the pipes so that they are close enough to the solenoids but not too close, and weren’t going to move over time. [CamsLab] settled on fishing line to suspend them with a 3D-printed frame mounted on extruded aluminium. The end result looks and sounds great, as you can hear in the video after the break. Of course, there’s more than one way to auto-glockenspiel. You could always use servos. Source: ARDUINO AUTO-GLOCKENSPIEL LOOKS PROPER IN COPPER ### BLUE-GREEN CHIP LEDS – IDEAL FOR COLOR UNIVERSAL DESIGN APPLICATIONS ROHM recently announced the 1608-size high accuracy blue-green chip LEDs, SMLD12E2N1W and SMLD12E3N1W. These products support the adoption of Color Universal Design (CUD) in a variety of applications, such as fire alarm system indicator lights, industrial equipment warning lamps and public transportation information displays. Color is considered to be one of the most important means of communication and is used in a variety of ways – daily. However, approximately over 200 million people with P-type and D-type color deficiencies around the world find it difficult to distinguish between red and green, possibly resulting in information being inaccurately conveyed – depending on the combination of colors used. Furthermore, since color vision can vary from person to person, it is difficult to perceive how different people see certain colors, which can be very inconvenient and also problematic as other people may not notice this deficiency. As a result, there is a growing need in the society to implement Color Universal Design that takes into account the various types of color vision in order to deliver information accurately to as many people as possible. ROHM succeeded in developing blue-green chip LEDs with special wavelengths. These products are ideal for implementing Color Universal Design in a wide range of devices, utilizing a vertically integrated production system from the element fabrication stage and leveraging ROHM’s strength thorough quality control. The SMLD12E2N1W and SMLD12E3N1W are the first* 1608 size LEDs to be certified by the Japanese NPO (Non-Profit Organization), Color Universal Design Organization (hereafter referred to as CUDO) – making it possible to achieve color schemes and designs that can be easily discernible by everyone, including those who cannot distinguish differences in color. Read more: BLUE-GREEN CHIP LEDS – IDEAL FOR COLOR UNIVERSAL DESIGN APPLICATIONS ### 1D LED PONG, ARDUINO-STYLE Maybe it’s just us, but isn’t it kind of amazing that in a world of pretty darn realistic games, PONG is still thrilling to play? This 1D implementation by [newsonator] is about as exciting as it gets. It works like you’d probably expect — the light moves back and forth between the two players. Keep it in the green and you have a nice, gentle volley going. Let it hit your red LED and you’ve lost a point. But if you can push your button while your yellow LED is lit, the light speeds up tremendously until the next button press in the green. Our only wish is that subsequent yellow-light button presses would make it speed up even more. But there are really just the two speeds with the current programming. Inside the cool laser-cut box is an Arduino Uno and a 9V battery, plus a current-limiting resistor and the all-important buzzer. We like how [newsonator] wired up the LEDs to the Arduino by soldering them to a row of header pins and sticking that into the Arduino so it can be used in other projects down the line. We also like how [newsonator] shoved a couple of dowels through the box to ultimately support the two buttons. Check out the intro video after the break for the overall details. The build is done over a few different short videos which follow. Although this is pretty small, it isn’t quite the minimum viable. Source: 1D LED PONG, ARDUINO-STYLE ### GURU RELEASES OVER-THE-AIR WIRELESS POWER DEVELOPER KIT GuRu Wireless, a developer of mmWave wireless power solutions, announced the availability of its new evaluation and development kit. The new kit was developed to facilitate testing, evaluation, and proof-of-concept designs, all of which is based on the company’s proprietary, 24GHz, smart RF lensing technology. Further, the kit can power devices over-the-air from three feet and further. “GuRu received incredible feedback on prototypes unveiled earlier this year at the Consumer Electronics Show and is now excited to empower partners and OEMs for innovating products for staying powered and connected in meaningful ways,” said CEO of GuRu Wireless Florian Bohn, in a press release. “Via our latest evaluation kit, partners can assess potential use case scenarios and implement wireless power for desired applications.” The eval kit for wireless power transmission over-the-air contains the following per the release: Transmitter: For desktop type environment, in a convenient, small form factorPower Supply: 15/20 Volt DC for transmitter (industry-standard USB-C connector)Recovery Unit: 5 Volt DC with a two-pin connector (Extra recovery units available upon request)Software & Button Interface: For control and monitoring. Updates periodically availableSpecialized Software and Hardware: Add-ons and updates available for partners Read more : GURU RELEASES OVER-THE-AIR WIRELESS POWER DEVELOPER KIT ### PORTING CP/M TO A Z80 THING It is hard to describe the Brother SuperPowerNote. It looks like a big old Z80-based laptop, but it says it is a notebook. The label on it says (with lots of exclamation marks) that it is a word processor, a communications system, a personal scheduler, and a spreadsheet organizer. Brother also promises on the label that it will “Increase your power to perform on the job, on the road or at home!” Plenty of exclamation marks to go around. The label also touts DOS or Windows, but [Poking Technology] didn’t want that. He wanted CP/M. See how he did it in the video below. This is a very early laptop-style word processor with a floppy and a strange-looking screen. It also had serial and parallel ports, odd for a word processor, and probably justified the “communication system” claim on the label. The device looked practically unused and came up immediately without the main battery and a replacement coin cell. The LCD was decidedly not like a modern LCD. It reminded us of a giant Sharp Zaurus. Want to see the insides? Jump to around the 24-minute mark. The circuit board inside is fairly small, with a lot of empty space and some unpopulated components. Inside is a Z180, along with some memory chips. There’s also a very common floppy disk controller. While it would be possible to replace the ROM chip, it would be a pain, so instead, he dug through an executable file. That way, he was able to figure out how to load software. Then, it was a matter of understanding the hardware with a logic probe and oscilloscope. Once the hardware gave up its secrets, it was easy enough to port CP/M. The extra 64K of memory available is now a disk cache, so the performance looks pretty good. True, you probably aren’t going to get one of these venerable machines and run CP/M on it yourself. But the process is fascinating to watch, and we do love peeking inside this old hardware. Compared to a modern OS, CP/M is fairly easy to bootstrap on a new system, even if it is an ESP32. We’ve even seen CP/M taught to use an Arduino from a Z80. Source: PORTING CP/M TO A Z80 THING ### EFCO ANNOUNCES INDUSTRY’S FIRST MEDIA PLAYER WITH ADVANCED SECURITY EFCO, a world-class supplier of industrial computers and gaming and EMS solutions, today announced VideoStar100, the first media player integrated with SecuBoot™ to provide the most advanced security available for digital displays. Equipped with an AMD industrial-grade Ryzen™ Embedded V1000/R1000 APU, VideoStar100 provides the performance to support three (R1000) or four independent 4k displays and can be used for applications ranging from slot machines to digital display walls, especially for those displays used to introduce the games. “We wanted to give our customers the most secure, yet cost-effective, solution to play 4K digital display content. Because VideoStar100 is equipped with SecuBoot™, this media player is uniquely able to provide the same level of security for your content as is required on today’s casino gaming floors,” Ira Lo, CTO for EFCO commented. “We are the first company to bring this level of security to a media player, and it also provides high performance applications with support for up to four independent 4k displays.” About SecuBoot™ Security is a priority for VideoStar100 and the integrated SecuBoot™ ensures that a trusted game environment is operating by preventing malicious applications. This prevents “unauthorized” programs or viruses from USB devices or from Internet hackers to change the operating system during the system start-up process. EFCO SecureBoot™ provides a complete algorithm to cover BIOS Lock, Device Verification, Storage Checksum, and Whisper Talk, which meets country and/ or regional regulations.  Read more: EFCO ANNOUNCES INDUSTRY’S FIRST MEDIA PLAYER WITH ADVANCED SECURITY ### STM32L4+ DISCOVERY KIT IOT NODE, LOW-POWER WIRELESS, BLE, NFC, WIFI With the B-L4S5I-IOT01A Discovery kit for IoT node, users develop applications with a direct connection to cloud servers. The Discovery kit enables a wide diversity of applications by exploiting low-power communication, multiway sensing and Arm® Cortex®-M4 core-based STM32L4+ Series features. The support for ARDUINO® Uno V3 and Pmod™ connectivity provides unlimited expansion capabilities with a large choice of specialized add-on boards. Key Features Ultra-low-power STM32L4+ Series STM32L4S5VIT6 microcontroller based on the Arm® Cortex®-M4 core with 2 Mbytes of Flash memory and 640 Kbytes of RAM in LQFP100 package64-Mbit Quad-SPI Flash memory from Macronix™Bluetooth® 4.1 module (SPBTLE-RF) from STMicroelectronics802.11 b/g/n compliant Wi-Fi® module (ISM43362-M3G-L44) from Inventek SystemsDynamic NFC tag based on ST25DV04K with its printed NFC antenna2 digital omnidirectional microphones (MP34DT01) from STMicroelectronicsCapacitive digital sensor for relative humidity and temperature (HTS221) from STMicroelectronicsHigh-performance 3-axis magnetometer (LIS3MDL) from STMicroelectronics3D accelerometer and 3D gyroscope (LSM6DSL) from STMicroelectronics260-1260 hPa absolute digital output barometer (LPS22HB) from STMicroelectronicsTime-of-flight and gesture-detection sensor (VL53L0X) from STMicroelectronicsHighly-secure solution (STSAFE-A110) from STMicroelectronics2 push-buttons (user and reset)USB OTG FS with Micro-AB connectorARDUINO® Uno V3 expansion connectorPmod™ expansion connector Read more: STM32L4+ DISCOVERY KIT IOT NODE, LOW-POWER WIRELESS, BLE, NFC, WIFI ### RASPBERRY PI CHANGES HATS Following on the heels of their Raspberry Pi 5 launch and some specifications for their RP1 all-in-one peripheral chip, the Raspberry Pi folks have now released an update to the HAT peripheral hardware specification reflecting the new model. Called the HAT+, it represents a major step forward with some significant changes. Most visible will be changes to the mechanical specification, for while the original HAT specification was very rigid this new version is much looser. A HAT+ must only mate with the 40-pin connector, including the ID pins, and line up with only a single mounting hole compared to the four on the original. Electrically, a HAT+ must recognise the standby power state in which the 3.3-volt line is powered down while the 5-volt line remains active, while software-wise, there are changes to the content of the ID EEPROM including the ability to inform about stackable smaller HATs.   As the Arduino folks will no doubt tell you, the danger for the maintainers of a popular standard is that it risks becoming a victim of its own success, leaving it to ossify as it falls behind the cutting edge. For the Raspberry Pi, it must be a tight balance between keeping it up to date and not losing earlier models, and by our reckoning, they may just have achieved it. We like how some have allowed multiple HATs, and we wonder if this will work — or will be made to work — with the HAT+. You usually think of HATs as having sensors or lights, but that isn’t always the case. Source: RASPBERRY PI CHANGES HATS ### CONNECTED SECURE AND WEARABLE ELECTROCARDIOGRAM (ECG) DESIGN Microchip’s innovative design for portable and accurate ECG heart monitoring applications The electrocardiogram or ECG machine design from Microchip Technology is used to monitor and record the electrical activity of the heart. This design features the SAML22, a high-performance, 32-bit Arm® Cortex®-M0+ microcontroller with ultra-low-power technology, the BTLC1000 Bluetooth® Low Energy (BLE) 4.1 module, the ECC508A Crypto Authentication chip, and the NeuroSky® CardioChip™ ECG biosensor. Since each heartbeat produces an electrical impulse in the heart, the generated cardiac electrical potentials can be measured with sensors placed on the body at different locations. Abnormal electrical activity can indicate conditions such as heart attack, chest trauma, reduced blood flow to the heart, arrhythmia, or heart deformities. The ECG demo measures a complex heart rate and computes other heart-related data. Patient movement is also tracked via an on-board accelerometer. The BTLC1000 BLE module on this board allows the demo to communicate with tablets, smartphones, or PCs for IoT capability. The demand for portable and accurate ECG monitoring has grown substantially. Despite the smaller size of these portable products, ECG devices still require precision filtering, high-performance processing power, and integrated high-resolution graphics control that is separate from the main microcontroller core.  Read more: CONNECTED SECURE AND WEARABLE ELECTROCARDIOGRAM (ECG) DESIGN ### FAST PAPER TAPE FOR THE NUCLEAR FAMILY We’ve enjoyed several videos from [Chornobyl Family] about the computers that controlled the ill-fated nuclear reactor in Chornobyl (or Chernobyl, as it was spelled at the time of the accident). This time (see the video below) they are looking at a high-speed data storage device. You don’t normally think of high-speed and paper tape as going together, but this paper tape reader runs an astonishing 1,500 data units per second. Ok, so that’s not especially fast by today’s standards, but an ASR33, for example, did about 10 characters per second. An IBM2400 tape drive, for reference, could transfer at least 10 times that amount of data in a second, and a 3400 could do even better. But this is paper tape. Magnetic tape had much higher density and used special tricks to get higher speeds mechanically using vacuum columns. It was still a pretty good trick to move 4 meters of paper tape a second through the machine. The reader needed a bit of TLC after spending decades stored in a chicken shed. What do you think it looked like after living with the chickens? Yep. That’s exactly what it looked like. Cleaning and painting ensued. Most tape readers used either brushes to sense the holes or light sensors. This reader used light sensors because you can more easily reach high speeds with that technique. Also inside is a very large motor that runs a fan to cool the electronics. The same motor pulls the tape through the path using a mechanism that reminded us of a cheap 3D printer extruder. And move it does. You can see the machine chew through a tape at the end of the video. A lot different than watching an ASR33 or Flexowriter reading a tape. Making a paper tape reader today isn’t very hard — and you could probably just use a webcam and some vision software. Paper tape wasn’t just for computers. They ran CNC machines, typesetters, and even taught Morse code. Source: FAST PAPER TAPE FOR THE NUCLEAR FAMILY ### Innovative Keyless Bike Technology: Arduino and Android App Integration Interested in starting your bike without a traditional key? Absolutely! We've developed a project tailored for tech enthusiasts eager to incorporate advanced technology into their bikes. Through our keyless bike project, you gain full control over your bike, including engine start and ignition. Additionally, you can conveniently locate your bike with the click of a button. This project offers a captivating blend of functionalities. I'm personally planning to install this innovation on my bike soon, and I'll be sharing a video of the process on my YouTube and Instagram channels. Stay tuned! Introductions The user-friendly keyless bike Arduino project offers seamless functionality. An Android mobile application serves as the control hub for your bike. With this app, you gain the ability to: - Activate and deactivate your bike - Engage the bike's self-start feature - Locate your bike using horn and indicator controls Our project enables you to manage these aspects through wireless communication linking your bike to the mobile phone. For those eager to delve into this project, we'll be sharing comprehensive details here. To successfully undertake this endeavor, familiarize yourself with the electronics basics provided on our website. Let's embark on this journey without any delay! Required components The components required for this keyless bike project include: - Arduino Nano - Bluetooth HC-05 - LEDs - 4-channel relay - USB A-type cable - Breadboard - Hook-up wires With these components, you have all you need to get started. Let's understand the role of each component in this project. The Arduino Nano serves as the central controller, playing a pivotal role in this task. It possesses the capability to store, process, and operate various sensors and modules. In this setup, the Arduino Nano takes charge of controlling the Bluetooth module and relays. It receives data from the Bluetooth module, compares it with programmed data, and subsequently activates or deactivates the relays. Relays function as electronic switches, capable of controlling circuits with minimal current. Similar to pressing a button to operate a light or fan, relays manage bike components such as ignition, engine, and indicators by responding to low-voltage signals. The Bluetooth module acts as the wireless communication bridge in this keyless bike project, establishing a connection between the bike and the mobile phone. We've developed an Android app specifically for this purpose, which facilitates the Bluetooth HC-05 module's connection to the bike. The download link for the app is provided below for your convenience. Circuit diagram Code void setup() { Serial.begin(9600); // buart rate pinMode(12,OUTPUT); // pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(11,OUTPUT); // LED //digitalWrite(12,HIGH); // relay module high } void loop() { if(Serial.available()>0) { char data= Serial.read(); Serial.println(data); if(data=='A') { digitalWrite(10,HIGH); delay(300); digitalWrite(10,LOW); delay(300); digitalWrite(10,HIGH); delay(300); digitalWrite(10,LOW); delay(300); digitalWrite(10,HIGH); delay(300); digitalWrite(10,LOW); delay(300); digitalWrite(10,HIGH); delay(300); digitalWrite(10,LOW); delay(300); } else if(data=='C') { digitalWrite(11,LOW); // LED OFF delay(500); } else if(data=='D') { digitalWrite(11, HIGH); // LED OFF delay(500); } else if(data=='B') { digitalWrite(12,LOW); // LED OFF delay(1000); digitalWrite(12,HIGH); // LED OFF delay(1000); } else { } } } To transfer the provided code to your Arduino, connect it using the cable provided. If you encounter any difficulties during the sketch upload process, feel free to seek assistance from our website for guidance. How to operate the application. Step 1: Power up the system and initiate Bluetooth pairing. Begin by supplying power to the system. Then, proceed to your phone's settings. Access the Bluetooth settings and locate the "Pair new device" option. From the list displayed, choose the HC-05 device. Next, launch the provided application on your phone. Within the application interface, tap on the "Connect" tab. Select the HC-05 device from the available list to establish the connection. Additionally, I've constructed the entire circuit on a breadboard, which, as you may be aware, is not the most efficient setup for this kind of project. Therefore, I'd like to introduce PCBWay, a service that provides rapid PCB prototyping for your research endeavors. Personally, I highly recommend PCBWay as they ensure the delivery of your initial prototype boards within just 24 hours! The prototyping phase stands as a crucial juncture for engineers, students, and enthusiasts alike. PCBWay doesn't just expedite the creation of your boards; it ensures precision and cost-effectiveness. This significantly reduces expenses and accelerates the electronic development process. PCBWay offers a spectrum of PCBs, ranging from 2 Layer boards to highly advanced HDI and flex boards. Despite the varying functionalities and intended applications of the PCBs they produce, I'm genuinely impressed by the consistent quality of the boards, their timely delivery, and their cost-efficiency. Keyless bike project Working Once the application establishes a connection with the device, the 'Connect' tab within the app interface transitions to 'Connected'. Whenever a key is pressed in the app, the phone transmits a character to the Bluetooth module linked to the Arduino system. For instance, pressing the 'Turn On Bike' tab in the application triggers the phone to transmit the character 'A' to the Arduino system. Subsequently, the Arduino system compares this received data with the programmed instructions we've written. If a match is found within the programmed data, it triggers a corresponding action. For instance: ```cpp if (received_data == 'A') { // Bike start sequence // Perform specific actions // ... } else { // Bike remains inactive // No action taken } ``` In this manner, the entire system operates. Your feedback and queries are welcomed in the comment section. Thank you for your attention! Source: ### Ultimate Control: NRF 24L01 Remote for RC Cars and Planes Hello, welcome back to Techatronic, fellow enthusiasts. Today, we're excited to showcase our latest project: the NRF Remote Control designed specifically for RC cars. This innovative remote is capable of controlling various car models. Additionally, it requires an accompanying device installed within the car or the respective unit to be controlled remotely. The remote control system comprises a transceiver and a controller, effectively managing the remote's functionalities. Introduction This RC remote control utilizes the NRF24L01 module, responsible for enabling wireless communication, as depicted in the accompanying images. The remote automatically pairs with the receiver device. Upon pressing any key or joystick module, it transmits the corresponding information. Previously, we engineered a gesture-controlled robot employing the Bluetooth HC-05 master-slave communication system. In this project, we follow a similar process, but we've incorporated the NRF module instead. The communication range of this module is impressive, reaching nearly 100 meters. This capability is the primary reason for choosing the NRF 24L01 module for this RC Car remote control. Comprehensive guidance on interfacing the NRF module with Arduino, including coding and circuitry, will be provided here to enable you to recreate this exceptional project by following the provided instructions. Below is the list of components utilized in this project. Components Required:- NRF24L01 with antenna Arduino nano Joystick module Zero PCB push button wires The NRF24L01 module serves as a wireless communication module with an extensive range. This versatile module supports 125 distinct channels, facilitating seamless connections among various modules. Each channel can accommodate up to 6 units for communication purposes. Remarkably, this module boasts remarkably low power consumption, operating at a mere 10 mA during transmission. To put it into perspective, this consumption is notably lower than that of a standard LED. However, caution is necessary during connections, as exceeding the maximum required voltage of 3.3V can result in module burnout. Notably, there's no indicator LED to signal its operational status. We've integrated this module into our NRF remote control system for its superior communication capabilities and minimal power consumption. The module interfaces via SPI pins, including MOSI, MISO, SCK, CE, and CSN, connecting these to corresponding pins on the Arduino or the controller in use. There are two variations available for the NRF module: the standard NRF24L01 module and another equipped with a long-range antenna capable of communication within a 500-meter range. The long-range variation features the RFX2401C chip, housing both a Power Amplifier (PA) and a Low-Noise Amplifier (LNA) in addition to the duck antenna. Our project involves connecting this module to an Arduino Nano for transmitting data from the transmitter to the receiver. Previously, we successfully interfaced the joystick module with the Arduino, and you can find comprehensive information about it in the provided link. For the completion of our project, we now require the circuit diagram. NRF Remote Circuit Diagram Transmitter The circuit diagram provided here offers a clear depiction of the connections required. The vertical and horizontal pins of the joystick should be linked to the A0 and A1 pins, respectively, while the push button needs to be connected to the digital input pins. As for the NRF24L01 module, it should be connected according to the specifications for SPI communication. Connection Table Arduino nano Joystick module NRF 24L01 Push Button pin 2 – – PUSH BUTTON1 T1 pin3 – – PUSH BUTTON2 T1 pin4 – – PUSH BUTTON3 T1 pin5 – – PUSH BUTTON4 T1 pin7 – CE – pin8 – CSE – pin11 – MOSI – pin12 – MISO – pin13 – SCK – A0 V1 — – A1 H1 – – VCC VCC – – GND GND GND PB1 T2, PB2 T2, PB3 T3, PB4 T4 3V3 – VCC – NRF Remote control Circuit Diagram Receeiver Here the same connection for nrf and arduino and LEDs connect directly to the Arduino nano. Connection Table Arduino nano LEDs NRF24L01 A7 L1 ANODE – A6 L2 ANODE – A5 L3 ANODE – A4 L4 ANODE – 13 – SCK 12 – MISO 11 – MOSI 8 – CSE 7 CE 5 L5 ANODE – 4 L6 ANODE – 3 L7 ANODE – 2 L8 ANODE – VCC – – GND ALL CATHODE GND 3V3 – VCC Now, we need the code. NRF Remote Control for RC Car code for transmitter //Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ #include #include #include RF24 radio(7, 8); // CE, CSN const byte address[6] = "00001"; void setup() { Serial.begin(9600); radio.begin(); radio.openWritingPipe(address); radio.setPALevel(RF24_PA_MIN); radio.stopListening(); pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); pinMode(A0, INPUT_PULLUP); pinMode(A1, INPUT_PULLUP); } void loop() { int m = digitalRead(2); int n = digitalRead(3); int o= digitalRead(4); int p = digitalRead(5); int q = analogRead(A0); int r = analogRead(A1); Serial.print(m); Serial.print(" "); Serial.print(n); Serial.print(" "); Serial.print(o); Serial.print(" "); Serial.print(p); Serial.print(" "); Serial.print(q); Serial.print(" "); Serial.println(r); if(m==0) { const char text[] = "A"; radio.write(&text, sizeof(text)); delay(100); } else if(n==0) { const char text[] = "B"; radio.write(&text, sizeof(text)); delay(100); } else if(o==0) { const char text[] = "C"; radio.write(&text, sizeof(text)); delay(100); } else if(p==0) { const char text[] = "D"; radio.write(&text, sizeof(text)); delay(100); } else if(q>=1000) { const char text[] = "E"; radio.write(&text, sizeof(text)); delay(100); } else if(q<20) { const char text[] = "F"; radio.write(&text, sizeof(text)); delay(100); } else if(r<20) { const char text[] = "G"; radio.write(&text, sizeof(text)); delay(100); } else if(r>1000) { const char text[] = "H"; radio.write(&text, sizeof(text)); delay(100); } else { const char text[] = "nothing"; radio.write(&text, sizeof(text)); delay(100); } } here we using the terms in code which define the following like #include #include #include Here we are including the nrf libraries into the front end code from backend. RF24 radio(7, 8); // CE, CSN const byte address[6] = "00001"; First line define the pins we are using for ce and ece pin of NRF module. and the second line define the address of the nrf to communicate with the other nrf module Serial.begin(9600); radio.begin(); radio.openWritingPipe(address); radio.setPALevel(RF24_PA_MIN); radio.stopListening(); The initial step initiates serial communication between the Arduino and the computer, primarily utilized to view data on the serial monitor. Following this, the subsequent step triggers radio communication between the two NRF modules. Once this communication is established, the data is transmitted at the same frequency, ensuring that the receiver can accurately receive the information. pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); pinMode(A0, INPUT_PULLUP); pinMode(A1, INPUT_PULLUP); These all lines of codes configuring the input pins which will be used by joystick and push buttons. if(m==0) { const char text[] = "A"; radio.write(&text, sizeof(text)); delay(100); } there we are using some conditions like if any button press then what will bee send from transmitter to receiver. NRF Remote Control for RC Car code for Receiver Certainly, here's a rephrased version of the provided code: ```cpp #include #include #include RF24 radio(7, 8); // CE, CSN const byte address[6] = "00001"; void setup() { Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.setPALevel(RF24_PA_MIN); radio.startListening(); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(A3, OUTPUT); pinMode(A2, OUTPUT); pinMode(A5, OUTPUT); pinMode(A4, OUTPUT); } void loop() { if (radio.available()) { char text[32] = ""; radio.read(&text, sizeof(text)); Serial.println(text); if (strcmp(text, "E") == 0) { digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, LOW); } else if (strcmp(text, "F") == 0) { digitalWrite(2, LOW); digitalWrite(3, HIGH); digitalWrite(4, LOW); digitalWrite(5, HIGH); } else if (strcmp(text, "H") == 0) { digitalWrite(2, LOW); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, LOW); } else if (strcmp(text, "G") == 0) { digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, HIGH); } else { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); } } } ``` This code initializes the NRF24L01 module for wireless communication. It sets up the necessary pins and listens for incoming data, responding with specific actions based on the received commands ("E", "F", "H", "G"). The Arduino's digital output pins 2, 3, 4, and 5 are controlled accordingly based on the received commands. After uploading the both code try to plug the power and observe on thee serial monitor. Source: Ultimate Control: NRF 24L01 Remote for RC Cars and Planes ### HALL-EFFECT SENSOR FEATURES RATIOMETRIC ANALOG OUTPUT TDK-Micronas‘ HAL1880 is an entry-level Hall-effect sensor with ratiometric analog output, offering the best compromise related to sensor function vs system cost. It includes programmable clamping to extend error signaling capability and diagnostics associated with the state of various internal circuits (magnetic signal out of range). A one-pin programming interface enables the simultaneous programming of several devices through the output pin. The HAL1880 is a programmable sensor: major characteristics like magnetic field range, sensitivity, offset, and the temperature coefficients are programmable in nonvolatile memory. The sensor is designed for industrial and automotive applications, is AEC-Q100 qualified, and operates in the junction temperature range from -40°C up to +170°C. It is available in the very small leaded package TO92UA. Features Overvoltage and reverse-voltage protection at VSUP pinMeasurement ranges from ±20 mT to ±160 mTShort-circuit protected push-pull output5 V supply operation Read more: HALL-EFFECT SENSOR FEATURES RATIOMETRIC ANALOG OUTPUT ### BINARY CLOCK KIT BLIPS AGAIN Back in 1978, the world was a bit different. There was no Raspberry Pi, no Internet, and not even an ESP32 to build projects with. And rather than order electronics kits from Tindie or Adafruit, [Dr. Francitosh] selected this binary clock with his mother from a catalog, and made the order via mail. Simpler times. The good Doctor, AKA [Greg Smith], was a young electronics tinkerer, and his mother wanted a good project-in-a-box to show off his skills. Thus, a Greymark Binary Clock was ordered and assembled. Then, sadly, the beloved clock crashed from its proud mantle position, doomed to never to blink or blip again. Or was it? [Greg] finally got his hands on the old project, and just had to get it working again. The inner circuit board was broken right through, and that presented an opportunity to not just repair the clock, but to teach the old dog some new tricks. Before we get there, there’s a fascinating teardown of how the original circuit used a pair of 7490s to take the 50 or 60 Hz of grid power and downconvert it to a stable 1 hz pulse. From there, a series of even more 7490 Binary Coded Decimal counter chips keep track of the ticking seconds, minutes, and hours. While this clock may be from a simpler time, [Greg] doesn’t live in that time any longer. He saved the project box, panel, original LEDs, and switches. But the new heart of this reborn machine is a Raspberry Pi Pico W. This gives full emulation of the old behavior, as well as setting the time over Bluetooth, grabbing time from NTP, and even listening for the Atomic Clock radio signal. Best of all, the project looks just like it did back in 1978. Mom would be proud. Source: BINARY CLOCK KIT BLIPS AGAIN ### Exploring the Best: Top 10 Arduino Projects That Define Creativity The Arduino platform has gained immense popularity, especially among newcomers to electronics. Unlike previous programmable circuit boards, Arduino simplifies the process by eliminating the need for additional hardware to load new code; just a USB cable is all that's required. If you're keen on delving into Arduino and exploring various project possibilities, you're in the right spot. This guide aims to provide a concise overview of the diverse projects achievable with Arduino. Locking Projects Using Arduino Securing your home or business space is crucial to safeguard your belongings and restrict unauthorized access. Modern security systems leverage advanced technologies like fingerprints, retina scanners, iris scanners, face IDs, tongue scanners, RFID readers, passwords, pins, patterns, and various biometrics for user authentication. Employing an Arduino-driven password or pin-based system stands out as a cost-efficient alternative. Numerous Arduino-based locking projects exemplify this approach. These projects include the Arduino Door Lock System, RFID and Keyboard lock system, door unlocking via a knock sequence, push-button lock utilizing Arduino, gesture-controlled lock, and the ultrasonic BT Door lock. Rover Projects The pioneering Arduino Robot stands as the premier vehicle driven by Arduino technology globally. Within this robot, two CPUs are integrated into each of its two PCBs. The Motor Board governs motor functions, while the Control Board oversees sensor readings and devises operational strategies based on this data. Both boards function as complete Arduinos, open to programming via the Arduino IDE. The versatility of Arduino extends to crafting various rover models, such as voice-controlled rovers, line-following rovers, autonomous rovers, rovers equipped with IR remote capabilities, outdoor rovers, survey rovers, and rovers controlled through apps or gestures. Game Projects Using Arduino Several noteworthy Arduino-powered gaming initiatives span from classic games on compact displays to intricate projects demanding assembly. Among the array of Arduino gaming projects are: 1. Spaceship Simulator. 2. VR Headset. 3. Snake. 4. Chess. 5. Pinball Machine. 6. Simon Says. 7. LED Tetris. 8. Claw Machine. Automation Projects The versatility of Arduino renders it highly suitable for a prevalent field of applications: automation. With an Arduino board, an extensive array of automation projects becomes achievable. Automation has redefined convenience, enabling tasks like smartphone-controlled room lighting and seamless event scheduling. Rather than relying on conventional switches, managing all your home devices from a single handheld device is now within reach. Among the automation projects employing Arduino are creations such as the Automatic Motion Sensor Trash, Home Automation systems, Automatic Hand Sanitizer Dispensers, Automated Shower Boilers, and IR Remote Controlled Home Appliances. Health Projects A medical device equipped with internet connectivity, capable of measuring various health parameters of a patient such as heartbeat, body temperature, blood pressure, ECG, steps, and more, falls under the category of an Arduino-based patient health monitoring system. This technology can promptly record, transmit, and send alerts in case of sudden changes in a patient's health status. IoT, as defined by this, encompasses a wide spectrum ranging from smartwatches and fitness trackers to high-end hospital equipment that connects to the internet. Innovative medical tools are continually emerging through Arduino-based health projects. These tools are designed to monitor metrics like ECG, temperature, moisture levels, and heart rate, while also tracking the patient's physical condition and location. Examples of such advancements include Smart wristbands, Smart Bio wear, Portable ECG devices, Ultrasonic imaging systems, Smart Disinfection, and sanitation tunnels, as well as Smart Health Kits. Drone Projects Drones represent unmanned aerial vehicles spanning various sizes, ranging from micro-level designs to multi-rotor quadcopters. Equipped with cameras, these drones facilitate aerial views and recording capabilities. Comprised of multiple elements, the pivotal component within a drone is its flight controller, essentially functioning as its core. The Arduino development board emerges as an ideal choice for this purpose, offering versatility through a range of models. From the compact Arduino Nano to the more expansive Arduino Mega, these boards are sufficiently compact to integrate seamlessly into a drone's framework. Illustrative examples of drone projects encompass an Autopilot drone, Mind Control Drone, Quadcopter, Autonomous High Altitude Slider, Kite Power Autopilot, and Hovercraft. Robotics Projects Arduino Robotics projects serve as an educational gateway into the realms of electronics, mechanics, and software. They offer a collection of project instances that can be replicated effortlessly, along with an expansive robotics platform enabling a diverse array of tasks. Various categories of robotics projects employing Arduino include Ball Tracking Robots, Lathe-Electronic Lead Screws, Programmable Robotic Arms, Open CAT, 3D Printers, Firefighter Robots, Spider Robots, and Drawing Robots. Audio Projects Arduino proves to be an excellent hobby for those enthusiastic about both hardware and software tinkering. Functioning as a programmable logic controller, Arduino exhibits its potential by executing a diverse array of captivating tasks, contingent upon your programming proficiency. One distinctive category of Arduino projects revolves around employing it to craft or amplify musical experiences. Within this realm, projects range in complexity from relatively simple to more demanding endeavors. Illustrative examples encompass crafting a paper piano using Arduino, developing a VFO/RF Generator, designing an Arduino MP3 Player, constructing an Arduino UNO Guitar Pedal, creating an Arduino beat detector, fashioning a mini-vintage internet radio, and establishing Morse code communication setups with Arduino. IoT Projects   The Arduino IoT Cloud represents a technology empowering creators to swiftly, effortlessly, and securely develop interconnected products. Real-time data sharing among multiple connected devices is enabled, along with convenient monitoring through a user-friendly interface. Illustrative applications of this technology encompass the IOT Bicycle radar, IOT Pet feeder, Telegram BOT, Wi-Fi IR Blaster, Arduino BT Camera, and Smart Parking System. Sensors Projects The capability of an Arduino to effortlessly collect sensor data stands as a key attribute contributing to its immense value. Sensors function as tools converting physical parameters like light intensity or temperature into electrical signals. For instance, a thermocouple generates a voltage corresponding to the temperature it measures. These devices find application across diverse industries such as manufacturing, machinery, aviation, automotive, medical, and robotics, among others. Several sensor-based projects illustrate this versatility, including the Smart Plant Incubator, Gas IOT Monitor, 3D Scanner, Temperature Monitoring system, gas sensor-enabled smoke detection, and water quality monitoring system. Next Steps I hope this tutorial on 'Understanding Arduino' provided you with a comprehensive insight into the platform and its functionalities. If you aspire to delve deeper into these technologies and pursue a career as a developer or programmer, obtaining course certifications can greatly benefit you. These certifications will aid in your understanding of Arduino, programming languages, and equip you with the skills required to excel as a developer or programmer. Consider enrolling in an Internet of Things (IoT) course to expand your knowledge. Should you have any specific inquiries regarding 'what is Arduino,' please don't hesitate to reach out to us. Feel free to share your suggestions or questions about utilizing Arduino projects in the comments section below. Our team of experts is dedicated to promptly addressing your queries! ### A HAM RADIO ANSWERING MACHINE For those who grew up with a cell phone in their hand, it might be difficult to imagine a time where the phone wasn’t fully integrated with voicemail. It sounds like a fantastical past, yet at one point a separate machine needed to be attached to the phone to record messages if no one was home to answer. Not only that, but a third device, a cassette tape, was generally needed as a storage device to hold the messages. In many ways we live in a much simpler world now, but in the amateur radio world one group is looking to bring this esoteric technology to the airwaves and [saveitforparts] is demonstrating one as part of a beta test. The device is called the Boondock Echo, and while at its core it’s an ESP32 there’s a lot going on behind the scenes. It has an audio interface which is capable of connecting to a radio given the correct patch cable; in this case with a simple Baofeng handheld unit. The answering machine can record any sounds that come in. However, with a network connection the recordings are analyzed with an AI which can transcribe what it hears and even listen for specific call signs, then take actions such as sending emails when it hears triggers like that. Boondock also plans for this device to be capable of responding as well, but [saveitforparts] was not able to get this working during this beta test. While an answering machine might seem like a step backwards technologically, an answering machine like this, especially when paired with Google Voice-like capabilities from an AI, has a lot of promise for ham radio operators. Even during this test, [saveitforparts] lost a radio and a kind stranger keyed it up when it was found, which was recorded by the Boondock Echo and used to eventually recover the radio. Certainly there are plenty of other applications as well, such as using AI instead of something like an Arduino to do Morse decoding. Source: A HAM RADIO ANSWERING MACHINE ### MEET THE IOT-READY, ESP32-BASED MAIA DEVELOPMENT BOARD So far so good, only a few boards have been able to take advantage of the extra USB OTG interface offered by the ESP32-S2 processor released back in 2019, and one of them is the new Maia development board from Stetel Things. As a quick reminder, the ESP32-S2 was unveiled with quite some incredible features like a primary 240 MHz Xtensa LX7 processor, a RISC-V based ultra-low power coprocessor (free and open-source), an in-built USB OTG interface, WiFi, a camera interface and several hardware security features amongst others. The new Maia development board by the Italy-based Stetel Things offers an easy platform for makers to develop, play, and build USB and IoT devices. The board comes with an interesting layout that comprises of the Espressif ESP32-S2 microcontroller, a micro USB OTG port which sits next to a typical USB Type-C port for power and debugging, and a small area that can be used for prototyping. The Maia development board is perfect for many ESP32-S2 projects from Portable Secure IoT applications and USB OTG devices, to RISC-V development with a second ULP Weighing 13.6 grams with dimensions of 5.9 cm by 4.9 cm, the Maia comes at a fair size for the features it embodies. Some of the key features and specifications include; Espressif System ESP32-S2 single-core LX7 running @ 240 Mz with a RISC-V ultra-low power CPU320KB RAM and 4MB flash1x USB-C for programming and 1x micro USB OTG port for data (both ports can be used as power input) Read more: MEET THE IOT-READY, ESP32-BASED MAIA DEVELOPMENT BOARD ### ARDUINO ADDS FOUR NEW BOARDS TO THE ARDUNINO NANO FAMILY Arduino has announced a new set of boards to the Ardunino Nano family. The boards were on display last weekend at Maker Faire Bay Area in San Mateo at the Arduino booth.  Banzi also delivered a talk on “The State of Arduino” at the Faire’s Center Stage. The new family of Arduino Nano boards includes: the Arduino Nano Every, the Arduino Nano 33 IoT, the Arduino Nano 33 BLE, and the Arduino Nano 33 BLE Sense. The Arduino Nano Every features a ATmega4809, which is much more powerful Microchip than the ATmega328P found in the original Arduino Nano. The Ardunino Nano Every enables a Microchip ATSAMD11 Arm Cortex-M0+ processor for USB to serial communications. The Nano Every is Arduino’s 5V compatible board in the smallest available form factor: 45x18mm! The small footprint and low price, makes the Nano Every suitable for wearable inventions, low-cost robotics, electronic musical instruments, and general use to control smaller parts of a larger projects. The board comes in two options: with or without headers, allowing you to embed the Nano Every inside any kind of inventions, including wearables. The board comes with tessellated connectors and no components on the B-side. These features allow you to solder the board directly onto your own design, minimizing the height of your whole prototype. Read more: ARDUINO ADDS FOUR NEW BOARDS TO THE ARDUNINO NANO FAMILY ### SMALL EDGE AI BOARD MONITORS ASSETS Industrial automation company Flicq has introduced its 2nd generation Edge AI smart sensor board, for Industrial Internet of Things (IIoT) with the launch of SmartEdge. Claiming to be the world’s smallest Edge AI smart sensor board, SmartEdge delivers plug-and-play asset monitoring capability that companies can deploy anywhere. Industries are moving increasingly toward remote monitoring of equipment and they care about the flexibility of deploying systems where they want to as much as they do want visibility about the condition of their assets, with low latency and actionable insights. With performance typically only available from cloud-based systems, the 2nd Gen Flicq SmartEdge delivers three-year battery-life, deep analytics and wireless connectivity. Industries continue to depend on real time insights to improve their operating efficiency and Flicq is pushing the edge computing performance envelope to achieve lower latency and deliver the best analytics capabilities in an extremely small form-factor. Read more: SMALL EDGE AI BOARD MONITORS ASSETS ### Building a ChatGPT client with Arduino Dive into the fascinating world where hardware meets artificial intelligence by creating a ChatGPT client using the Arduino Giga R1 WiFi. This project is perfect for those who love to tinker with technology and are eager to explore new ways to interact with AI. By following this guide, you’ll learn how to combine the power of the Arduino platform with the intelligence of ChatGPT to build something truly interactive.   The Arduino Giga R1 WiFi is a powerful microcontroller that’s designed for projects needing both WiFi and advanced processing power. When you add the Giga R1 display shield to it, you get a visual interface that makes it easier to interact with your projects. This combination is ideal for creating a ChatGPT client that can communicate with you and provide responses. Arduino ChatGPT client To start integrating ChatGPT with your Arduino, you’ll need to go through several steps. First, make sure your Arduino Giga R1 WiFi is set up correctly. Then, gather the software and libraries that allow your device to communicate over the internet and handle data in the JSON format. These are crucial for connecting with the ChatGPT API. You’ll need to install the Arduino Integrated Development Environment (IDE) on your computer. This is where you’ll write and upload your code to the Arduino board. Within the IDE, you’ll add the `WiFiNINA` library for internet connectivity and the `ArduinoJson` library for parsing JSON data. These are essential for the functionality of your ChatGPT client. Once your Arduino is ready to connect to the internet, you’ll set up the Giga R1 display shield. This involves physically attaching the shield to your Arduino and programming it to display messages from ChatGPT and receive your input. You’ll create functions that handle this interaction, allowing for a smooth conversation with the AI. Arduino GIGA R1 WiFi features Microcontroller (STM32H747XI): The board is equipped with a dual-core 32-bit STM32H747XI microcontroller. This includes a Cortex®-M7 running at 480 MHz and a Cortex®-M4 at 240 MHz. This dual-core setup allows for simultaneous running of micropython and Arduino, offering versatility in programming and application. Wireless Communication (Murata 1DX): It supports both Wi-Fi® and Bluetooth® for wireless connectivity. This feature enables easy connection to the Arduino IoT Cloud, allowing for remote monitoring and control of projects. The onboard ATECC608A ensures secure communication. Hardware Ports and Communication: The GIGA R1 WiFi includes: 4 UARTs (hardware serial ports) 3 I2C ports (1 more than its predecessors) 2 SPI ports (1 more than its predecessors) 1 FDCAN These ports facilitate a wide range of communication options with various peripherals. GPIOs and Extra Pins: The board maintains the form factor of the Mega and Due for compatibility with custom shields. It offers 76 GPIO pins, accessible from underneath for easy project expansion. Notably, it operates at 3.3V. Additional pins include a VRTC for RTC battery connection and an OFF pin for powering down the board. Connectors: The GIGA R1 WiFi is equipped with: A USB-A connector for hosting USB sticks, mass storage devices, and HID devices like keyboards or mice. A 3.5mm input-output jack connected to DAC0, DAC1, and A7. A USB-C® connector for power, programming, and simulating HID devices. A JTAG connector (2×5 1.27mm) for debugging. A 20-pin Arducam camera connector. Higher Voltage Support: Unlike its predecessors, which support up to 12 volts, the GIGA R1 WiFi can handle a voltage range of 6 to 24 volts, making it suitable for a wider range of applications. The potential uses for your new ChatGPT client are limited only by your imagination. Imagine creating a voice-activated assistant for your home or a smart system that gives you advice on how to care for your plants. The capabilities of the ChatGPT model and your creativity define the boundaries of what you can achieve. By building a ChatGPT client with the Arduino Giga R1 WiFi and the Giga R1 display shield, you’re embarking on a project that not only lets you interact with AI but also opens up opportunities for innovative applications in various fields. This guide will help you create a device that’s both engaging and potentially useful in creating new solutions. For more details on the project jump over to the official Arduino website. Source: Building a ChatGPT client with Arduino ### Hands-On Arduino Uno Projects for Engineering Beginners The Arduino UNO, powered by ATmega328P, stands as a microcontroller equipped with 14 digital I/O pins, among which 6 facilitate PWM output. Additionally, it features 6 analog inputs, a 16 MHz quartz crystal, a USB connection, a power jack, an ICSP header, and a reset button. This Uno serves as a user-friendly plug-and-play device. To initiate usage, one simply connects it to a computer via USB or powers it with an AC-DC adapter or battery. Programming the Arduino Uno necessitates the Arduino IDE, which must be installed on a computer for coding purposes. The ATmega328P comes preprogrammed with a bootloader, enabling users to upload new code without an external programmer. This article compiles Arduino Uno projects ideal for beginners and engineering students. Simple Arduino Uno Projects for Beginners Below are a few thrilling Arduino projects suitable for beginners. After installing the Arduino software IDE, establish a connection between the computer and the Arduino UNO board using a USB connection. Within the IDE, navigate to "TOOLS" and then "BOARD" to select the appropriate board from the dropdown menu. Next, proceed to "TOOLS," and under "PORT," choose the port labeled as "ARDUINO." Arduino Uno Board Blink an LED The necessary hardware components include: Arduino UNO board. Breadboard. Jumper Wires. LED. 220Ω Resistor. USB cable. Step 1: Connect the ground pin on the Arduino to row 15 on the breadboard using a black jumper wire. Step 2: Attach the red jumper wire from pin 13 on the Arduino to column F, 7th row on the breadboard. Step 3: Insert the longer end of the LED into row 7 of column H on the breadboard. Step 4: Place the shorter leg of the LED into row 4 of column H on the breadboard. Step 5: Position one end of the resistor into row 4 of the Ground rail on the breadboard and connect the other end to column I, row 4 on the breadboard. Then, establish the connection between the Arduino and the computer using a USB cable. Once all connections are made, proceed to program the Uno. Open the Arduino IDE, which includes various pre-built programs. For instance, to execute a blinking LED program, navigate to FILE, choose EXAMPLES, then access the BASICS section, and finally select BLINK. This action will display the Blink LED program for use. Utilize the "verify" button located at the top left of the IDE box to compile the program and check for errors. Once it displays "Done Compiling," indicating error-free code, the program is set for use. Proceed by clicking the "upload" button to transfer the program onto the Arduino board. Upon successful uploading, the board's built-in LED will flash rapidly for a brief period, initiating the program's execution. If there are no errors, the LED connected to the breadboard will alternate between turning on for a second and then off for a second, continuing this cycle. Similarly, following the previously outlined process, selecting different code and adjusting the necessary hardware enables hassle-free operation with the Uno. Arduino Uno Test This serves as a straightforward and fundamental electronic project. It involves using an Arduino Uno to assess the Uno board's functionality by employing a flashing LED directly connected to the Uno board. Designing a Push Button to Turn ON and OFF a LED Using an Arduino Uno, you can construct this uncomplicated project involving a push-button switch. The push button serves the purpose of toggling an LED on and off. Designing a Potentiometer to Change the Resistance Values of an LED You can create this potentiometer circuit using an Arduino Uno on a breadboard. This uncomplicated project serves the purpose of regulating LED resistance. By adjusting the knob, you can control the frequency of the LED. LED Scrolling This uncomplicated LED scrolling project involves the blinking of six LEDs simultaneously or in a backward and forward sequence. Such a circuit design was inspired by the Knight Rider show, where a vehicle showcased looping LEDs. Arduino to Increase or Decrease the Intensity of the LED The Arduino Uno board is employed for this straightforward LED fade project. It utilizes a PWM pin, allowing for the manipulation of LED brightness by adjusting its intensity, thereby enabling both increase and decrease in brightness levels. Arduino Uno LCD Display Project The Arduino Uno board is the foundation for this LCD (liquid crystal display) screen project. This display is capable of presenting text on its screen. With this project, it becomes possible to showcase phrases such as "Hello World" on the LCD. Additionally, a potentiometer is employed to regulate the display's contrast. DC Motor Control Within this project for DC motor speed control, an Arduino Uno is employed to regulate the motor's speed using a switching transistor. Accurate connections on the breadboard ensure successful motor rotation. Arduino Uno Projects for Engineering Students Below are a variety of Arduino project ideas intended for engineering students to explore and experiment with. Arduino Uno Projects Below are the Arduino Uno projects tailored for engineering students. Arduino Uno GPS Tracker Project Utilizing an Arduino Uno and GPS, this project is designed to facilitate vehicle tracking. A GSM modem equipped with a SIM card is incorporated for communication purposes. The system can be installed within a vehicle, allowing for easy tracking in case of theft using a mobile phone. Furthermore, this application serves as an efficient solution for tracking college or school buses. Driverless Metro Train Using Arduino-Uno Historically, metro train accidents have occurred due to various factors, including driver errors, signal malfunctions, and challenges associated with manual operation. In response to this issue, an Arduino Uno-based driverless metro train has been developed. This innovation aims to enhance railway network management, mitigating human errors and ensuring improved safety and comfort for passengers during travel while consuming less power. Arduino Uno Project Smart Dustbin This particular project involves creating an intelligent trash bin utilizing the Arduino Uno board. Its purpose is to mitigate roadside garbage overflow effectively. By implementing this project, it contributes to maintaining clean and eco-friendly surroundings. The project utilizes a routing algorithm to optimize the vehicles' paths, reducing their number while efficiently collecting garbage through the shortest routes possible. Arduino Uno IR Sensor Project The purpose of this project is to manage light-emitting diodes (LEDs) via an infrared sensor and remote control. When a button on the remote is pressed, an infrared signal is transmitted to the infrared sensor as a code. Subsequently, the sensor receives this signal and forwards it to the Arduino for processing. Arduino Uno Project using Vending Machine The objective of this project involves constructing a vending machine employing Arduino Uno, incorporating an RFID system. Upon swiping an RFID tag across the reader, a specified quantity of liquid is dispensed. An alphanumeric LCD display provides instructions and guidance throughout the liquid dispensing process. This machine finds application in various institutions such as colleges and hospitals, offering automated service to customers without requiring human intervention. Door Lock based on Fingerprint and Arduino Uno This project establishes a fingerprint-based door lock system enabling door unlocking via fingerprints. Its primary purpose is to enhance security by eliminating the use of keys, which are considered less secure. In this setup, the door unlocks upon a fingerprint being scanned or tapped on the door lock mechanism. Robot Car The aim of this project is to create a robot car using Arduino Uno. The robot car utilizes a DC motor, and its control is facilitated by Arduino Uno in conjunction with a Motor Driver IC. Home Automation using Arduino Uno The focus of this project is on creating a home automation system for convenient control of household appliances. By utilizing an Android app, along with Arduino Uno and a few modules, users can effectively manage their electrical devices. This system enables the control of household appliances through voice commands facilitated by Bluetooth connectivity. Arduino Uno Projects with Sensors Below, we delve into Arduino Uno projects that incorporate sensors. Thermometer using LM35 Sensor & Arduino Uno Monitoring temperature in a particular environment holds significant importance. This measured parameter enables temperature control in industries, computer CPUs, incubators, and various other applications. Thus, a properly configured temperature sensor is employed to trigger other devices when the ambient temperature surpasses or falls below a predetermined value. Consequently, the Didactic Thermometer is designed using the LM35 temperature sensor. Arduino Uno & IR Sensor-based Automatic Gate Opener Currently, there has been a rise in the utilization of automation systems. Likewise, an automated gate for opening and closing has been developed. When an individual approaches the gate, it automatically opens upon detecting their presence and closes on its own. This system is versatile and can be applied to main gates or car garages. Mini Weather Station The purpose of this project is to create a compact weather station utilizing Arduino Uno. This setup employs a WiFi connection to transmit data online, utilizing the ThingSpeak platform. The station is primarily focused on gathering data such as temperature, light intensity, atmospheric pressure, and humidity by utilizing various sensors. Soil Moisture Sensor using Arduino Uno Within this project, the soil moisture sensor interfaces with the Arduino Uno board. Operating within a 2 to 5-volt supply range, this sensor has a detection length of 38mm. Resembling a fork, it can be effortlessly inserted into the soil. The primary function of this sensor is to ascertain the moisture level within the soil. As soil moisture rises, the analog output voltage also increases accordingly. Window Alarm Annunciator This project aims to create a window alarm annunciator utilizing Arduino Uno. The primary purpose of the annunciator is to signal operators in power plants and industries about irregularities or variations in parameters. Audio Meter using Arduino Uno The aim of this project is to create an audiometer utilizing an Arduino Uno along with an LCD. The SVI (Standard Volume Indicator) or VU meter, commonly utilized to exhibit signal levels in audio devices, serves as the core feature. Within this system, the Uno board processes the intensity of two audio signal channels—right and left—and showcases them as bars on the display. This project primarily utilizes the Arduino Uno's analog input pins to gauge the audio signal levels. Alarm Clock using Arduino Uno This project introduces an alarm clock created using an Arduino Uno. It involves a straightforward setup utilizing an LCD and a real-time clock (RTC) module. To construct this project, a prototyping shield along with a power supply can be employed. The piezoelectric buzzer serves the purpose of producing sound during set intervals. Wi-Fi Controlled Robot The project showcases a robot controllable via WiFi, facilitated by the ARMA IoT shield and the Blynk App, offering remote access from any location. The Uno board establishes a WiFi connection using the ARMA IoT shield, enabling control via the Blynk app, compatible with both Android and iOS platforms. GPS Clock using Arduino Uno Creating a clock utilizing GPS and Arduino Uno is the purpose of this project. These GPS-enabled clocks provide precise timekeeping and are commonly employed in public spaces such as airports, bus stations, and railway terminals. They also find extensive use within military contexts due to their accuracy and reliability. Additionally, here are more project ideas suitable for engineering students using Arduino Uno. These ideas serve as valuable resources for students working on project development. Arduino UNO Projects using Ultrasonic Sensor An Arduino Uno projects list with an ultrasonic sensor is discussed below. Ultrasonic Sensor 4WD Smart Robot Car This project involves crafting a Smart Robot Car capable of navigating around obstacles and adhering to provided directions to reach a destination. It offers the flexibility of both automatic and manual control via a Bluetooth module. The hardware components utilized include an Arduino UNO, Dual H bridge motor driver, Ultrasonic sensor, Bluetooth module, Contact avoidance sensor, Line Tracking sensor, and Li-Ion battery. Door Alarm using an Ultrasonic Sensor & Arduino Uno This project aims to create a door alarm system utilizing an ultrasonic sensor employed as a distance measurement tool. The sensor's primary role is to detect an object's proximity to a predefined target. Upon someone approaching within a specific range, the system triggers a door alarm. The buzzer activation is automatically controlled based on the detected distance value. Ultrasonic Range Detector This project involves employing an Ultrasonic sensor in tandem with Arduino to measure distance without the need for a physical ruler. Similar to how bats gauge distance using echolocation, ultrasonic transmitters emit sound waves and measure distance by calculating the time taken for these waves to hit an object and return to the Ultrasonic receiver. Here's a list of notable Arduino Uno projects: 1. Arduino motion detector camera utilizing Arduino UNO. 2. Integrated smart belt aiding the mobility of the blind. 3. Trash talker system implemented with bolt IoT. 4. Door alarm system employing the ultrasonic sensor. 5. Mini Acoustic Levitation project. 6. Geiger counter simulator built with Arduino. 7. Arduino HC-04 and 8×8 matrix MAX7219 collaboration. 8. Water level alert system. 9. Automated clothes and shoe donation machine. 10. Auto ultrasonic car project. 11. Arduino Soliton radar experiment. 12. Blind runner alarm - speed measuring device. These projects showcase the versatility of Arduino Uno, utilizing both hardware and software capabilities. The adaptable nature of Arduino boards makes them highly favorable for projects, appealing to both students and professional engineers. As an open-source platform, Arduino serves as an instrumental tool for learning and implementing emerging technologies such as IoT. How has Arduino assisted you in transforming your ideas into reality? ### MINI METERS MONITOR MICROPROCESSOR MAXIMIZATION [Lex] over at Computing: The Details loves to make fun projects. Recently, they have created a hardware CPU monitor that displays how PCs are parallelizing compile tasks at a glance. The monitor is built from 14 analog meters, along with some WS2812 RGB LEDs. Each meter represents a core on [Lex]’s CPU, while the final two meters show memory and swap usage. The meters themselves are low-cost 5 mA devices. Of course, the original milliamps legends wouldn’t do much good, so [Lex] designed and printed graduations that glue over the top. The RGB LED strip is positioned so two LEDs fit under each meter. The LEDs allow a splash of color to draw attention to the current state of the machine. The whole bank going red would sure get our attention! The system is controlled by an Arduino Mega, with the meters driven using the PWM pins. The only extra part is a 1 kΩ resistor. The Arduino wrangles the LEDs as well. Sadly [Lex] did not include the software. They did describe it though. Basically they are using a Rust program to call systemstat, obtaining the current CPU utilization data in Linux. A bit of math converts this into pointer values and LED colors. The data is then sent via USB-serial to the Arduino Mega. The software savvy will say it’s pretty easy to replicate, but the hardware-only hackers among us might need a bit of help. This isn’t the first custom meter we’ve seen on Hackaday. Your author’s first project covered by Hackaday was for a meter created using an automotive gauge stepper motor. I didn’t include source code either – but only because [Guy Carpenter]’s Switec X25 library had me covered. Source: MINI METERS MONITOR MICROPROCESSOR MAXIMIZATION ### Arduino Magic: Building an Easy EMF Detector from Scratch The EMF detector showcased in this video utilizes a minimal number of components, making it straightforward to construct without the need for any tuning. It functions excellently right from its initial power-on, requiring no adjustments. Project description An EMF (electromagnetic field) meter serves the purpose of gauging electromagnetic radiation within a specific space. Its function involves detecting and quantifying the intensity of electromagnetic fields emitted by diverse sources, including electrical appliances, power lines, wireless devices, and other electronic equipment. EMF meters find widespread applications in scientific research, industrial and commercial environments, and residential spaces. Their primary role involves evaluating potential health hazards linked to extended exposure to elevated electromagnetic radiation levels. Individuals worried about personal electromagnetic field exposure, particularly those experiencing electromagnetic hypersensitivity (EHS), also employ EMF meters. In a previous video of mine (https://www.youtube.com/watch?v=gVDJj16gzY0), I discussed a method of creating an extremely sensitive device like this. However, it necessitates an extensive experimental setup. The EMF detector showcased in this video boasts a minimal component count, making it straightforward to assemble without the need for tuning. It performs admirably right from its initial power-up. Its simplicity, however, limits its sensitivity compared to the higher sensitivity of the previous model. Nonetheless, it remains capable enough to detect a power cable within a wall. Additionally, it features a prominently visible progress bar and provides the field value in a relative number, ensuring clear readability. As previously noted, constructing the device is straightforward and requires a few components: - Arduino Nano Microcontroller - SH1106 (or SSD1306) OLED display - Buzzer For the antenna, a standard short wire suffices, or, in this specific instance, a small segment of copper pipe was utilized. Upon activation, the initial display shows the logo followed by the main screen after a brief delay. We must allow some time for the EMF field value to stabilize around zero, provided there's no nearby radiation source affecting the device. Apart from the visual indicators, the EMF detector incorporates an auditory signal featuring three distinct frequencies: 100, 500, and 1000 Hertz, correlating with the field's intensity. The code sets the specific thresholds prompting frequency changes. Furthermore, this device exhibits sensitivity to static electricity, thereby doubling as an Electroscope. Lastly, the device is housed within a well-suited PVC box, adorned with colored self-adhesive tape lining. Interestingly, I repurposed the box from a previous project, rendering the light sensor non-functional for this specific application. Code #include #include #include #include #define OLED_RESET 4 #define SCREEN_ADDRESS 0x3C Adafruit_SH1106 display(OLED_RESET); #define PIN_ANTENNA A0 #define CHECK_DELAY 1000 #define lmillis() ((long)millis()) const unsigned char zmaj [] PROGMEM = { // 'zmaj7 60x60, 128x64px 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x80, 0x00, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x00, 0x00, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x04, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0c, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x80, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x40, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x80, 0x60, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x80, 0x30, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x3f, 0xfa, 0x80, 0x0f, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xbf, 0xf4, 0x80, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd9, 0x3f, 0xe9, 0x80, 0x00, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa2, 0xff, 0xd3, 0x00, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x85, 0xff, 0xa6, 0x01, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x85, 0xff, 0x4c, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x85, 0xfe, 0x98, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x85, 0xfd, 0x30, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x82, 0x02, 0x60, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa1, 0xfc, 0x80, 0x01, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x41, 0x80, 0x00, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xbe, 0x00, 0x04, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x40, 0x00, 0x0b, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x05, 0x23, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x47, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x00, 0x00, 0x87, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x00, 0x00, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x80, 0x00, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4c, 0x01, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa6, 0x03, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3, 0x04, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x8c, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x88, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x90, 0x53, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x90, 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x8a, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x87, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x01, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x00, 0x81, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; void setup() { Serial.begin(9600); pinMode(PIN_ANTENNA, INPUT); display.begin(SH1106_SWITCHCAPVCC, SCREEN_ADDRESS); display.clearDisplay(); display.drawBitmap(0, 0,zmaj, 128, 64, WHITE); // display.drawBitmap(x position, y position, bitmap data, bitmap width, bitmap height, color) display.display(); delay(2000); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(22,10); display.println("mircemk");// Print text display.setCursor(10,40); display.println("EMF METER"); display.display(); delay(2000); } void showReadings(int emfValue) { display.clearDisplay(); display.setTextSize(3); display.setTextColor(WHITE); display.setCursor(5,40); display.println("EMF"); display.setCursor(70,40); display.println(emfValue); display.display(); } void loop() { static int avgValue = 0, emfValue = 0; static long nextCheck = 0, emfSum = 0, iterations = 0; emfValue = constrain(analogRead(PIN_ANTENNA), 0, 1023); emfSum += emfValue; iterations++; if (lmillis() - nextCheck >= 0) { avgValue = emfSum / iterations; emfSum = 0; iterations = 0; showReadings(avgValue); nextCheck = lmillis() + CHECK_DELAY; } display.drawRoundRect(0, 5, 126, 30, 2, WHITE); display.fillRect(5, 10, 120, 23, BLACK); display.fillRect(5, 10, map(emfValue, 0, 1023, 0, 118), 20, WHITE); display.display(); if (emfValue > 80 && emfValue <150) { tone (12,100,500); } if (emfValue > 151 && emfValue <250) { tone (12,500,500); } if (emfValue > 251 ) { tone (12,1000,500); } } ### GNSS MODULES: ELARA AND ERINOME Würth Elektronik’s GNSS modules are available in UART and I²C interfaces Würth Elektronik’s GNSS modules, Elara and Erinome series, are suitable for different application areas, such as tracking and navigation devices, container localization, fleet management or autonomous agricultural machines. Elara Modules: The Elara-I module is a compact GNSS module with an integrated antenna for operation in location-based applications, products, and services. Based on the Qualcomm SirfStar V 5e B01 chipset, it supports two major GNSS constellations (GPS and GLONASS). The integrated antenna on top of the Elara-I module allows easier hardware integration, as no effort for antenna integration and matching is required. The compact 10 mm x 10 mm design allows the module to fit in small-size applications. The Elara-II module is a compact GNSS module for operation in location-based applications, products, and services. Based on the Qualcomm SirfStar V 5e B01 chipset, it supports two major GNSS constellations (GPS and GLONASS). The Elara-II is one of the smallest GNSS modules currently on the market with an ultra-compact 4.1 mm x 4.1 mm design which allows the module to fit in small-size applications. The connection of an external antenna through the RF pad is required for module operation. Read more: GNSS MODULES: ELARA AND ERINOME ### LED TESTER ALSO CALCULATES RESISTOR FOR TARGET VOLTAGE [mircemk] built a slick-looking LED tester with a couple handy functions built in. Not only can one select a target current to put through an LED, but by providing a target voltage, the system will automatically calculate the necessary series resistor. If for example the LED is destined for 14 V, this device will not only show how the LED looks at the chosen current, but will calculate the required resistor to get the same results on a 14 V system. The buttons on the left control the target current and the voltage of the destination system. Once an LED is connected it will light up and the display indicates the LED’s forward voltage, the LED current, and the calculated series resistor value to obtain the same result at the selected target voltage. It’s a handy way to empirically dial in LED brightness values without needing to actually set up any particular test environment. On the inside there’s little more than a handful of passive components, an Arduino, an LCD display, and a few buttons. This kind of tool reminds us of the highly clever component testers that hit the hobbyist scene years ago, showing what kind of advanced tricks a modern microcontroller is capable of with the right programming. (Here’s a look at how those work, if you’re interested in some deeper details.) [mircemk] demonstrates his tool in the video, embedded below. We particularly like the attention he paid to the enclosure, giving it a very functional layout. It goes to show that when designing something, it’s never too early to consider enclosure and UI layout. Source: LED TESTER ALSO CALCULATES RESISTOR FOR TARGET VOLTAGE ### ARBITRARY WAVE GENERATOR FOR THE RASPBERRY PI PICO Once upon a time, if you wanted to generate some waveforms, you needed to buy an expensive off-the-shelf function generator or whip up a big pile of analog electronics. Not so today, when you can grab a fast microcontroller off the shelf and have it squirt out whatever fancy waves you might desire. That’s just what [rgco] did to build this nifty arbitrary wave generator. The build improves on prior work by [rgco] with the Arduino Uno, with which they built a device that could output at 381 kilosamples per second, with each sample update taking 42 instruction cycles. Thanks to the Pi Pico’s faster clock speed and certain performance optimizations, they were able to up that to a mighty 125 megasamples per second, using the DMA and PIO subsystems to output a new sample every single clock cycle. The result is a cheap function generator you can build with a Pi Pico and a handful of resistors, which will probably cost you the grand total of $12. It readily outperforms, at least in regards of speed, devices based on the AD9833 function generator chip, which only runs at 25 megasamples. Plus, that chip can only output sines, triangles, and squares! Even a passable function generator can be a useful tool to have in the workshop, as we’ve seen before. Video after the break. Source: ARBITRARY WAVE GENERATOR FOR THE RASPBERRY PI PICO ### A YAMAHA DX7 ON A USB DONGLE The Yamaha DX7 was released in 1983, with its FM synthesis engine completely revolutionizing the electronic music world at the time. It didn’t come cheap, and still doesn’t today, but we are blessed with emulators that can give us the same sound on a budget. In that vein, [Kevin] decided to whip up a Yamaha DX7 you can carry around in a little USB dongle.  The build centers around the use of a Raspberry Pi Zero, Zero W, or Zero 2W configured to run the MiniDEXED DX7 emulator. The Pi is then set up with a dongle adapter board that allows it to run in USB Gadget mode. The Zero line of Raspberry Pis are perfect for this use, as they draw less current and so can, under the right conditions, run off a computer’s USB port. The Pi receives MIDI commands over the USB interface, and outputs sound via a Pimoroni Audio Shim. Effectively, the result is a single-channel DX7 synth that plugs in via USB; or eight channels if you use the more powerful Zero 2W. [Kevin] readily admits that there probably isn’t much use for a DX7 dongle, given that you could just load a DX7 emulator in your DAW of choice instead. Regardless, it’s a fun build, and one that ably demonstrates the USB Gadget mode of operation for the Raspberry Pi. Video after the break. Source: A YAMAHA DX7 ON A USB DONGLE ### 2.4 GHZ MODULES: PROTEUS-III AND THYONE-I Würth Elektronik’s 2.4 GHz modules feature six configurable I/O pins and a small 8 mm x 12 mm size Würth Elektronik offers the Bluetooth® Low Energy 5.1 module Proteus-III and the proprietary version Thyone-I. The modules measure only 8 mm x 12 mm x 2 mm, feature an integrated antenna, encryption technology, six configurable I/O pins, and are based on the Nordic Semiconductor nRF52840 chipset. They can be used for IoT and M2M applications; for example, to build radio-based maintenance interfaces and sensor networks. The WE-ProWare firmware, which has been industry proven over many years, makes the modules extremely versatile. The Proteus-III module is a radio sub module/device for wireless communication between devices such as control systems, remote controls, sensors, and more. With regards to Bluetooth LE 5.1, it offers a fast and secure data transmission of data packages between two or more parties (point-to-point topology). A serial interface (UART) is available for communication with the host system. The Proteus-III uses the Bluetooth LE standard to provide general data transmission between several devices. The standard itself offers a wide range of configurations and possibilities to suit and optimize sophisticated customer applications. Read more: 2.4 GHZ MODULES: PROTEUS-III AND THYONE- ### Illuminate Your Space: Crafting an Arduino Sunflower Introduction Arduino isn't solely for complex projects; it can also serve as a platform for simpler ones, imparting valuable skills to beginners. Our aim is to demonstrate the fun side of electronic components, educating others about circuits and components. In this tutorial, let's embark on creating an Arduino Sunflower DIY project. This type of project not only sparks inspiration but also fosters a deeper understanding of electronics, which is essential for learning. The inclusion of a servo motor is pivotal in our choice of this do-it-yourself (DIY) endeavor. Our objective is to simplify the learning process around the servo motor for you. When approaching Arduino with enthusiasm and purpose, the process of connecting any component becomes much more manageable. Therefore, let's first grasp the concept of an Arduino sunflower before delving into constructing the circuit. What is Arduino Sunflower? The Arduino sunflower essentially mimics the behavior of a sunflower by tracking and following light sources. It involves the utilization of a servo motor, two photoresistors, and a sunflower model to enable movement based on light cues. Notably, this project creates a do-it-yourself (DIY) flower using cardboard sheets, not an actual flower. Hardware Components You will require the following hardware to make Arduino sunflower. S.no Component Value Qty 1. Arduino UNO 1 2. Photoresistor LDR 2 3. Servo Motor SG90 1 4. Breadboard – 1 5. Jumper Wires – 1 Steps for Making Arduino Sunflower To craft the Arduino Sunflower, you'll require easily accessible basic electronic components: an Arduino, servo motor, and photoresistor. Follow a series of steps to construct the circuit for this project. Schematic Make connections according to the circuit diagram given below. Wiring / Connections Arduino Servo Motor Photoresistor Sensor 1 Photoresistor Sensor 2 5V VCC One End GND GND One End D9 Signal A0 Other End Other pin Installing Arduino IDE Initially, you'll need to download the Arduino IDE Software from the official Arduino website. Here's a straightforward, step-by-step guide on installing the Arduino IDE. Code Now copy the following code and upload it to Arduino IDE Software. #include int sensorPin = A0; int servoPin = 9; int sensorValue = 0; int servoGrad = 90; int tolerance = 40; Servo myservo; void setup() { pinMode( sensorPin, INPUT); myservo.attach( servoPin ); myservo.write( servoGrad ); } void loop() { sensorValue = analogRead(sensorPin); if ( sensorValue < (512-tolerance) ) { if (servoGrad < 180) servoGrad++; } if ( sensorValue > (512+tolerance) ) { if (servoGrad > 0) servoGrad--; } myservo.write( servoGrad ); delay(100); } Let’s Test It Now, it's the moment to test the device post the code upload. Let's power on the Arduino and put the Arduino sunflower to the test. You'll notice its enthusiasm in seeking out the light. The motor initiates rotation toward the light source. For a closer inspection, move it to a darkened space and then activate your phone's flashlight to observe the outcomes. Working Explanation The entire functionality of the circuit hinges on the code. Let's delve into understanding the code: Initially, we define the Arduino pins essential for the circuit's construction. Within the void setup, the sensor pin (a photoresistor) is primarily set as an input. By calling the Servo.attach() function, the default position of the servomotor is set at 90 degrees. Subsequently, the Servo.write() function follows this call to initialize the servomotors at a specific position. In the void loop, the analogRead function is utilized to capture values from the photoresistor sensor. A conditional statement is introduced: if the sensor value falls below a defined threshold and the motor angle is less than 180 degrees, the motor will rotate. Conversely, if the sensor value surpasses a predefined threshold, the servo motor is evaluated; if the motor angle is less than 180 degrees, the motor will remain stationary. The code includes delays to accommodate the reading of subsequent values. Source: Illuminate Your Space: Crafting an Arduino Sunflower ### Arduino IDE: Transforming Digital Electronics in PHYS 432 Introduction This guide provides a concise overview of initiating Arduino microprocessor programming through the Arduino Integrated Development Environment (IDE). While these instructions cater specifically to the Arduino Nano board utilizing the ATmega328 microprocessor, a similar process should be applicable to various Arduino boards. Please note that this guide does not serve as a comprehensive introduction to Arduino or programming for Arduino devices. For more extensive insights into the Arduino microprocessor board family, refer to arduino.cc. The website offers detailed tutorials for specific projects on the tutorials page, and numerous other online resources are available for beginners and tutorials to aid in getting started. Requirements To successfully proceed with this introductory guide, you'll require a few essential items: An Arduino Nano or a compatible clone. A computer. A USB cable for linking the Nano to your computer. In the provided labkits, a short mini-USB to USB-A cable is included. If your computer lacks a USB-A port, you'll need an adapter or a dedicated cable suitable for your device. The Arduino Integrated Development Environment (IDE). You can either download and install it on your computer or access it as a web service. Both versions are available on the downloads page. I haven't personally used the web service, which requires an account, but it should function effectively. For similar instructions, Arduino offers a corresponding set of guidelines accessible here. First Sketch Once you've obtained the Arduino IDE, your next step involves initiating a new project, known as a "sketch" in Arduino terminology. Typically, the initial sketch involves blinking the LED on the Arduino board. Verifying that your development environment is functioning correctly and ensuring successful board connectivity is crucial at this stage. This verification process is vital as being able to download a program to your board and witnessing its functionality serves as a significant test before advancing to more complex tasks. To initiate your initial sketch, launch the Arduino IDE and choose either of the following options: 1. Navigate to "File : Examples : Basic : Blink" in the IDE. 2. Download the file from this location. 3. Alternatively, copy and paste the provided code snippet directly into the IDE editor. /* Blink Turns an LED on for one second, then off for one second, repeatedly. Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to the correct LED pin independent of which board is used. If you want to know what pin the on-board LED is connected to on your Arduino model, check the Technical Specs of your board at: https://www.arduino.cc/en/Main/Products modified 8 May 2014 by Scott Fitzgerald modified 2 Sep 2016 by Arturo Guadalupi modified 8 Sep 2016 by Colby Newman This example code is in the public domain. http://www.arduino.cc/en/Tutorial/Blink */ // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } Please be aware that Arduino sketches are typically saved in a somewhat obscure location by default. Consider utilizing "File : Save As..." to store your sketch in a more accessible location for easier retrieval. However, the IDE also offers a convenient "File : Open Recent" directory, facilitating quick access to recently saved sketches. Compiling and Uploading Connect your Arduino to your computer using the USB cable. Upon connection, one of the LEDs on the board, typically labeled "Power," should illuminate. After a brief moment, the adjacent LED should commence blinking. It's essential to note that for this sketch, your Arduino doesn't need to be placed in a breadboard (in fact, I advise against it for now), and there's no requirement for any external devices to be attached. Due to conducting pins, it's recommended to avoid placing your board directly on a metal surface. However, apart from this precaution, you should be good to go. Personally, I prefer to let it rest suspended in the air at the end of the short USB cable connected to my laptop. The initial step involves compiling the sketch and checking for errors. Begin by selecting the appropriate board via "Tools : Board" (this is a one-time setup). We'll be using the Arduino Nano. Next, compile the sketch by pressing the left button on the sketch toolbar. This button, adorned with a checkmark icon and labeled "Verify," essentially performs the compilation. Although the board doesn't necessarily need to be connected at this stage, you must select the board beforehand. Review the console output at the bottom of the sketch for any displayed errors. Any text highlighted in red indicates an error that requires rectification before proceeding. Typically, the first sketch shouldn't have any errors, but as you begin making alterations (which is encouraged!), mistakes may occur. If you're familiar with writing in C or C++, you shouldn't encounter significant issues. However, if you're accustomed to Python, note that the syntax here bears a resemblance, albeit with the caveat that spacing doesn't hold significance. Nevertheless, each command must conclude with a semi-colon. Additionally, the console provides useful details regarding the program memory and dynamic memory your sketch utilizes. Given that dynamic memory is limited to 2k, it can deplete rapidly. To upload the compiled sketch onto the board, you'll need to locate the board on the system and select a bootloader. Go to "Tools : Processor" and choose ATmega328P, as this tends to be compatible with most purchased boards. However, occasionally, you might encounter a board with an older bootloader. If you encounter download errors, try switching to the "ATmega328P (Old Bootloader)" option. Typically, one of these two selections should work. Additionally, you'll need to identify the serial connection to the board. Navigate to "Tools : Port" where you'll find an entry corresponding to your Arduino. This entry might have a unique name (e.g., /dev/usb.serial-1420 on Mac or something like COM1 on Windows). Each time you plug in your board, it acquires a different USB-serial connection, so you may need to reselect this whenever starting a new session. If there are multiple choices, try selecting one initially and switch to the other if it doesn't function. After selecting these parameters, you should be ready to upload your compiled sketch onto the board. Click the "Upload" button in the toolbar (depicted as an arrow) and carefully review the console output. If anything appears in red, the upload didn't succeed. If that happens, attempt using a different port first. If that fails, switch to the other ATmega328P bootloader. The upload command also recompiles your sketch in case there were any modifications, allowing you to simply press the upload button again to retry. If there were no errors, your Arduino Nano should now be running your sketch. If you're unable to locate a serial port or the Port menu item is grayed out, it's likely that your computer lacks a driver for the CH340 USB interface chip utilized in these Arduino clones. This issue is more prevalent in older operating systems. Although most recent operating systems should have the driver pre-installed, this isn't always the case. Several websites offer instructions for installing the driver, but one reliable source with instructional videos is available at Sparkfun: How to install CH340 Drivers. Verification It's quite easy to deceive yourself when dealing with embedded systems and microprocessors. Specifically, the Arduino Nano arrives preloaded with the same Blink program that you've just uploaded, making it challenging to ascertain whether your program is genuinely running. To verify its execution, try modifying the blink duration by altering the argument within the delay functions. digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second The initial digitalWrite command activates the LED, while the second one deactivates it. The delay functions determine the duration (in milliseconds), typically set for one second on and one second off by default. Adjust the numerical values, for instance, to 500, to accelerate the LED blinking. Compile and upload the sketch, then confirm that the LED now blinks at a quicker pace. Everything enclosed within the loop() section runs continuously on the microprocessor. You can introduce various commands within this loop() section, and they will be executed accordingly. For instance, you could replicate this sequence of writing HI/delay/writing LO/delay multiple times, applying distinct delays each time to create diverse flashing patterns. If successful, congratulations! You've validated that communication with your board and sketch uploads are functioning correctly. It's advisable to verify basic code like this for any new board, as there's a chance of encountering boards that are non-operational upon arrival. Note: The only method to power off your Arduino is by disconnecting it from the USB port. You can safely do this at any time. Once programmed, the Arduino's program memory retains the last uploaded sketch and will execute it upon powering up again. Troubleshooting If errors occur during the compilation phase, carefully review your code for any syntax errors, as these issues are generally unrelated to the board itself. Typically, syntax errors within your code are the primary cause. In some instances, memory depletion may occur, especially in more complex sketches or with extensive use of strings. For errors encountered during the upload stage, the probable causes are usually related to selecting an incorrect processor or an incorrect port. Adjusting these settings may resolve the issue. If these changes do not rectify the problem, there might be an issue with the board. Seek assistance, as troubleshooting further might exceed your current skill level. In case you encounter a scenario where a previously functional board refuses to be programmed or the program appears unresponsive, you can perform a forced reset by pressing and holding the button on the Nano board for a few seconds. This action is rarely necessary, but I've occasionally found it helpful. ### NEON PIXELS MATRIX DISPLAY CLOCK Pierre @pierremuth.wordpress.com shares his latest project with us. It’s a neon lamp dot matrix clock based on INS-1 tubes. He writes: As a big enthusiast of glowing neon, I had to do something with the INS-1 (ИНC-1) tubes. Disclaimer: this project is inefficient in many aspects, fortunately plenty of time was available during the 2020 lock-down. Fortunately, these single dot tubes are still easy to find in large quantities and rather cheap. Made by Gazotron, it seems they buildup a large stock at that time. The INS-1 has the advantage to be small and produce a nice dot due to the lens-style front. Plus its striking voltage is maximum 100V, lower than regular Nixies. At first I imagined 5×7 dot character modules, such as the TIL305, but bigger. While playing and trying to make a tiny and simple 5V to 100V step-up power supply, I realized how simple it can be. Here we just need to reach the striking voltage and only 0.5mA. As there is yet non-uniformity in brightness between tubes, no strong voltage accuracy is needed. Without the signal generator, it is a diode and a coil, shorted to ground with a transistor at high frequency. Read more: NEON PIXELS MATRIX DISPLAY CLOCK ### FISNAR DC50 DIGITAL DISPENSE CONTROLLER Fisnar DC50 Digital Dispense Controller is a general purpose, easy to use digital dispenser with a bright 4-digit LED display.It's user-friendly programming enables a dispense cycle to be quickly created and automatically displayed within minutes. The DC50 has two modes of operation.Manual Mode: The dispense operation is manually controlled by a foot pedalTimed Mode: Dispenses at the pre-set time for controlled, repeatable shot sizes. Additionally, the DC50 dispense controller is fully compatible with dispensing both low and high viscosity fluids thanks to its adjustable 0-100psi pressure regulator and vacuum suckback valve. It is a highly reliable and low-cost dispensing solution for both new and experienced users. Read more: FISNAR DC50 DIGITAL DISPENSE CONTROLLER ### ON SEMICONDUCTOR RELEASED THE RSL10 MESH PLATFORM On Semiconductor released a Bluetooth Low Energy mesh networking solution based on the company’s ultra-low-power RSL10 System-in-Package (RSL10 SIP). The solution has elements needed for the development and deployment of mesh networks. It consists of two RSL10 Mesh Nodes and a Strata Gateway for connectivity to the Strata Developer Studio. Further, sensing and indicator devices were incorporated into the node hardware, including an ambient light sensor (LV0104CS), temperature sensor (N34TS108), magnetic sensors, LED indicators, and a triple-output NCP5623B LED driver (for color mixing purposes). A built-in battery charger for batteries with Li-Ion or Li-Poly chemistries is also featured. The company noted that the mesh nodes can be configured to perform different roles and display different functional aspects. The Strata Gateway allows users to evaluate processes to be carried out using the intuitive Strata Developer Studio. Additionally, the cloud-connected software allows for provisioning of additional mesh and supports firmware-over-the-air (FOTA) updates. Read more: ON SEMICONDUCTOR RELEASED THE RSL10 MESH PLATFORM ### Sound Off: Silencing Noise Pollution with Arduino and IoT Increasing noise levels have become a major issue in many urban areas today due to factors like population increases, urban development, and technological advancements. Moreover, excessive noise from a neighbor or colleague can seriously impact one's well-being and quality of life. Conversations conducted at high volumes in office settings are understandably disruptive. Having a coworker who regularly speaks loudly can undermine focus and hinder productivity for those around them. To help address noise-related disturbances in the workplace, we are introducing a noise detection and recording device. This innovative solution monitors sound levels and alerts the user whenever noise exceeds a predetermined threshold. It also automatically captures the offending sounds and saves the audio files for future review. By objectively documenting disturbances and their sources, this new technology aims to raise awareness, encourage consideration among colleagues, and potentially resolve recurring noise complaints through respectful discussion. The goal is to foster a more conducive environment where all employees can work effectively without unnecessary distractions. This Sound Monitoring System is suited for use in environments like libraries, offices and classrooms where focusing undivided attention is important. Its purpose is to help promote focused spaces conducive to their intended functions. The system works to objectively identify times when sound levels exceed what is generally considered appropriate for the given setting. This data collection aims to increase awareness of how noise can impact others so minor disturbances can be addressed respectfully and productively between all parties. To construct this solution, the following components are required: Components Required Vibration motor/ Buzzer Bluetooth HC 05 Sound sensor module Wires Arduino Nano Coding To begin, we will declare and initialize the necessary variables to store values and pin assignments within our code. The SoftwareSerial library will then be imported to enable Bluetooth communication. Next, the pin modes for the Arduino pins will be set and the baud rate for the Bluetooth module established. The main program logic will be contained within a loop function. Here, we will implement a conditional statement to check the number received via Bluetooth. This number will determine the threshold level for the noise sensor. Upon receiving the threshold input, the loop will call a separate sensor function. This function will collect an average reading from the noise sensor over time (see Figure 1). By averaging the readings, small fluctuations can be filtered out to determine if sound levels exceed the preset threshold level. This overall flow allows dynamic setting of the sensor threshold remotely via Bluetooth while continuously monitoring sound levels within the local environment. Fig 1. Arduino Code setting variables Fig 2. Arduino code for reading strings from Bluetooth. Within the sensor function, a for loop will repeatedly collect sensor readings a specified number of times (e.g. 160 iterations) to build a sample dataset. The function will calculate the average value from this dataset. This filtering process mitigates transient fluctuations in the readings. Next, a conditional statement will compare the calculated average to the predefined threshold level set remotely via Bluetooth. If the average sound reading exceeds the threshold, the function will transmit the value to a companion mobile application (see Figure 3). This app, to be developed in a subsequent step, will receive any detected exceedances of the threshold. It allows for real-time monitoring of noise levels as assessed by the sensor system against the adjustable limit. By averaging the multiple sensor readings within the for loop, parsing them against the threshold, and communicating the results to the app, this function delivers continuous noise monitoring functionality as per our designed implementation. Fig 3. Arduino code calculating noise level App Making We are going to use the MIT app inventor for creating our app. In the first part, we need to create a layout and add the following components A list picker A text level 2 buttons 1 text view Sound recorder Tiny DB Bluetooth client After that join the code blocks according to fig 4 . Fig 4. App Layout Fig 5.MIT App code blocks Connection Now connect all the components as illustrated below (Refer Fig 6). Arduino Nano Components Pin A7 Sound Sensor Out 5v VCC Bluetooth & Sound sensor GND GND Bluetooth & Sound senor D4 RX D3 TX D12 Buzzer VCC GND Buzzer GND Fig 6. Connection Testing We are now ready to power on the Arduino board and pair the Bluetooth module with the custom mobile application. Once a connection is established, testing of the system can commence. Simple sounds at increasing volumes should be made near the sensor to intentionally cause the readings to surpass the preset threshold. When this occurs, the Noise Detector device will activate a buzzer, providing an immediate audible notification. Simultaneously, the mobile app will begin recording the detected sound through triggering by the exceeded threshold value. Recording on the app will continue until noise levels drop back below the limit. This demonstrates the full integrated functionality of the hardware sensor system jointly operating with the software app (see Figure 7). Remote monitoring of occurrences, durations and audio samples of exceeded noise thresholds is now possible through the combined solution. Proper operation validates a fully functional noise monitoring prototype has been successfully developed through following the outlined design and implementation steps. Fig 7. App Working ### IBASE UNVEILS 1U RACKMOUNT NETWORK COMPUTING APPLIANCE WITH 25 GBE PORTS New Enterprise Network Security Solution based on Intel Xeon Processor D-2100 IBASE Technology Inc. , a leader in the manufacture of network appliances and embedded systems, is pleased to announce its latest FWA8600 1U rackmount network computing appliance based on the Intel Xeon D-2100 processor product family and with up to 25 GbE ports. This highly scalable system is designed for managing data driven workloads and enabling robust levels of performance in enterprise network security, Unified Threat Management and WAN optimization applications. The FWA8600 supports up to 128GB RDIMM with four DDR4-2666 DIMM sockets and one Intel I210-AT Ethernet controller. The device comes with network interface card (NIC) slots to accommodate up to three IBN cards with 8x GbE ports each and one IBN-P401Q card for a maximum of 25 GbE ports. For flexible I/O connectivity and expansion features, it offers a PCIe x8 slot, an M.2 expansion slot to interface with SATA 3.0 and PCIe x4 bus for high data throughput, as well as two USB 3.0, and an RJ45 serial console with LCM display for easy operation. LAN bypass is available in certain configuration. FWA8600 FEATURES: Intel Xeon D-2100 processor product family4x DDR4 RDIMMs; Max. 128 GB1x Intel I210-AT GbE4x NIC modules; Max. 24 GbE portsOptional IPMI module Read more: IBASE UNVEILS 1U RACKMOUNT NETWORK COMPUTING APPLIANCE WITH 25 GBE PORTS ### Enhance Home Security with a DIY Arduino Window Alarm Annunciator This project demonstrates an Arduino Uno-based window alarm annunciator system. Annunciators are commonly employed in industrial settings like manufacturing facilities, power plants, and other process operations to monitor changing plant conditions. The annunciator alerts operators to any abnormal or deviant parameter readings that require attention. Similarly, such a device can serve as a home security or fire alarm monitoring windows. A prototype of the window alarm annunciator is depicted in Figure 1. At the heart of the system is an Arduino Uno microcontroller board which processes sensor input data and triggers alarm notifications. When motion is detected near a window, the Arduino could activate visual and audible alerts to make security personnel aware. This helps automate monitoring of potentially vulnerable access points. With the flexibility and programming capabilities of the Arduino platform, simple annunciator designs like this one show promise for diverse monitoring and alarm applications both industrially and residentially. Fig. 1: Author’s prototype for Window Alarm Annunciator Circuit and working The circuit schematic for the window alarm annunciator is provided in Figure 2. At the core is the Arduino Uno microcontroller board (labeled as board1) which coordinates the various components. There are seven LEDs (LED1 through LED7) connected to digital pins on the Arduino to serve as visual indicators. Three tactile switches (S1 through S3) wired to other pins allow for user input/control. Additional discrete passive elements like resistors are incorporated as needed. For example, current-limiting resistors enable the LEDs to safely illuminate under digital control from the Arduino pins. Taken together, the Arduino along with the LEDs, switches and basic supporting parts comprise the full circuit design. By following this schematic, the annunciator prototype's functionality can be replicated through the programmed interactions of its electronic subsystems. The Arduino board integrates it all through embedded code, responding to switch presses and toggling LED patterns based on simulated sensor readings or alarm conditions. Fig. 2: Circuit diagram of the window alarm annunciator This alarm system employs seven input connections, labeled CON1 through CON7, to trigger alarms through normally-open (NO) contacts. Additionally, three input switches (S1 through S3) are provided for testing, acknowledging, and resetting the alarm. Out of eight outputs, seven are connected to LEDs corresponding to the seven input alarm contacts, while the eighth output is dedicated to a buzzer. (A hooter can be substituted for the buzzer with additional circuitry.) All alarm inputs are designed for NO contacts. In addition to digital pins 2 through 13 on the Arduino, analog pins A0 through A5 are also utilized as digital I/O pins to monitor the seven different input conditions. Upon the closure of any input alarm contact, the corresponding output LED will blink rapidly, and the piezo buzzer will activate to draw attention to nearby users. Pressing the acknowledge pushbutton switch (S2) silences the alarm. With the acknowledge button pressed and the input alarm contact still closed, the LED will blink at a slower rate. In other words, if the alarm input contact is opened, the alarm sound will cease, but the LED will continue to flash at a reduced rate. Pressing the reset button (S3) completely extinguishes the LED. Let's consider an example. Initially, all inputs are open, and all LEDs are off. If a problem arises with the first machine, the first input I/P1 at CON1 will close, causing LED1 to flash rapidly and PZ1 to emit an alarm sound. With I/P1 closed and S2 pressed, PZ1 will deactivate, but LED1 will remain illuminated. When S2 is pressed with I/P1 open, PZ1 will remain off, and LED1 will blink slowly until S3 is momentarily pressed. The test pushbutton switch S1 is provided to verify the LEDs and buzzer functionality. Pressing S1 will cause all window alarm LEDs to glow steadily and activate the buzzer. This will continue until S1 is released. Software The annunciator code is written as an Arduino sketch (Annunciator.ino) using the Arduino programming language within the Arduino IDE version 1.8.5 environment. Before compiling and uploading this program to the Arduino Uno, first check that the elapsedMillis library function is present in the IDE. This can be done by navigating to Sketch > Include Libraries. If the elapsedMillis function is not already listed, it needs to be installed. Download the zip file containing the elapsedMillis library from the specified source.efymag.com URL. Next, add this .zip library file to the IDE using the steps Sketch > Include Libraries > Add .ZIP Library. Browse and select the downloaded elapsedMillis zip. This will incorporate the necessary function into the library listings. Verify it now shows up in the libraries menu. Only then is the Annunciator sketch code ready to be loaded onto the Arduino board using the usual upload procedure from the IDE interface. The elapsedMillis calls will now be properly resolved during programming. Construction and testing The printed circuit board (PCB) design for the annunciator is depicted in Figures 3 and 4. Figure 3 shows the circuit board layout, outlining how the different components connect via the copper traces. Figure 4 then provides a view of the component placement guide, specifying where each discrete part is soldered onto the PCB. After assembling according to these graphical designs, enclose the fully built circuit inside an appropriate enclosure case. Mount all the LED indicators flush onto one side of the enclosure cabinet for easy viewing. Similarly, fasten the piezo buzzer to the opposite side so its audible alerts are directed outward. Power for the system is derived directly from the USB connection to the Arduino board, avoiding the need for an extra power supply module. Simply plug the Arduino into the laptop or PC over USB to energize the entire annunciator device. Following these assembly and enclosure instructions allows replication of a working prototype based on the described Arduino-driven window alarm annunciator design. ### HIGH-PERFORMANCE MULTIMEDIA SINGLE BOARD COMPUTER WITH NXP I.MX 8M CPU The Multimedia CPU i.MX 8M from NXP (4x ARM® Cortex®-A53 (64 Bit) with 1.5GHz & Cortex®-M4 CPU) is perfect for applications with demanding graphics in building automation, all kinds of HMI in industry and medical technology, as well as POS and POI terminals. With Linux on the Cortex®-A53 cores and FreeRTOS on the Cortex®-M4 core, NXP continues its heterogeneous concept and offers an ideal possibility for real-time processing. For graphics processing the CPU offers OpenGL/ES 3.1, OpenGL 3.0, Vulkan, OpenCL 1.2 as well as the playback of videos up to 4Kp60. F&S Elektronik Systeme (manufacturer of embedded boards for more than 20 years with headquarters in Stuttgart) has placed this powerful CPU on the new Single Board Computer armStone™MX8M (PicoITX format). Up to 8GB LPDDR4 RAM, 1GB SLC NAND Flash and additionally up to 64GB eMMC, as well as USB3.0, Audio IN/OUT/MIC, Gigabit Ethernet, mPCIe (SIM Slot), MIPI CSI, 3x I2C, SPI, 4x UART, CAN and SDIO (uSD Slot) are available. 2x LVDS (up to FullHD) and DVI up to 4k are available for display interface. A resistive or PCAP touch panel is connected via I2C. Another option is an OnBoard WLAN/BT module (pre-certified) with antenna socket. As with all armStone™ single board computers, many of the signals are on common connectors or on the 66-pin feature bus. The armStone™MX8M is powered by 5V (a pluggable 12/24V adapter is offered as an accessory), the power consumption is only a few watts. With a temperature range of up to -20°C – +70°C, the armStone™MX8M can also be used outdoors. Linux (Buildroot, Yocto follows) is available as operating system. Read more: HIGH-PERFORMANCE MULTIMEDIA SINGLE BOARD COMPUTER WITH NXP I.MX 8M CPU ### Craft Your Own Wireless Frequency Meter with Arduino: A DIY Guide This project details the development of a wireless Arduino frequency meter capable of determining the frequency of AC sinusoidal waveforms between 50Hz and 3kHz. Figures 1 and 2 depict the prototype hardware constructed for the transmitting and receiving functions. Figure 1 shows the transmitting circuit board which incorporates the frequency sensing components. Figure 2 presents the receiver module containing the Arduino microcontroller used for digital processing and readout display. Rather than relying on wired connection between sensing and analysis stages, these dual circuit boards communicate results wirelessly via RF transmission and reception. This permits remote monitoring of alternating current frequencies in hard to access locations. The goal of designing dedicated transmit and receive devices was to create a portable frequency measurement solution. Equipped with its own power supply and radio modules, each half can operate independently yet still share data without physical tethering. Fig. 1: Authors’ prototype of the transmitter side Fig. 2: Authors’ prototype of Wireless Frequency Meter (Receiver side) The block diagrams of the transmitter and receiver sides are shown in Figs 3 and 4, respectively. Fig. 3: Block diagram of the transmitter side Fig. 4: Block diagram of the receiver side Circuit and working The main components used in the Wireless Frequency Meter project and their role is described below. Arduino Uno The Arduino Uno is utilized on the receiving end of this wireless frequency meter system. At the core of the Uno is an AVR ATmega328P microcontroller (MCU) which provides the processing capabilities. Key specifications of this MCU include 32kB of ISP flash memory for program storage, 2kB of RAM for data, and 1kB of EEPROM. Additionally, it can operate at up to a 16MHz clock frequency. The Uno board features six analog inputs and fourteen digital I/O pins that the MCU can interface with. It also supports various communication protocols like UART, SPI and I2C via its serial capabilities. For this receiver application, digital I/O pin 5 is used as an input, connecting directly to the DATA pin of the 434MHz RF receiving module. Pins 7 through 12 on the Arduino then drive a 16x2 character LCD for displaying the measured frequency readings to the user. By leveraging the I/O and processing power of the Arduino Uno, it serves as the centralized hub to wirelessly obtain frequency data and clearly display results. Rectifier diodes Specialized diodes transform the AC input signal into a pulsating DC signal on the transmitter side. MCT2E The MCT2E opto-coupler IC serves two crucial purposes: isolating the input stage from the subsequent stage and generating signals from the pulsating DC waveform on the transmitter side. LCD The 16×2 LCD, located at the receiver end, is responsible for displaying the frequency measurement. It is connected to the Arduino Uno board in 4-bit mode. The LCD's pins RS, EN, D4, D5, D6, and D7 are linked to the Arduino's digital I/O pins 12, 11, 7, 8, 9, and 10, respectively. 434 MHz TX-RX modules The 434MHz transmitter (TX) and receiver (RX) modules serve as essential components for transmitting and receiving radio frequency (RF) signals between two devices. These modules operate at a carrier frequency of 434MHz, ensuring seamless communication. Figures 5 and 6 illustrate the circuit diagrams for the transmitter and receiver sides, respectively. These diagrams provide a clear visual representation of the electronic components and their connections. Fig. 5: Circuit diagram of the transmitter side Fig. 6: Circuit diagram of the receiver side In the realm of electronics, accurately measuring the frequency of signals is crucial for a wide range of applications. This guide delves into the construction of an Arduino-based wireless frequency meter, empowering you to measure frequencies with ease and precision. Transmitter Side: Capturing and Processing the Signal Signal Input: The signal whose frequency is to be measured is applied to the test signal input terminals (refer to Fig. 5). Ensure the signal is an alternating one and its amplitude does not exceed 10V peak-to-peak. Bridge Rectifier: The bridge rectifier converts the alternating input signal into a pulsating DC signal. Optocoupler: The pulsating DC signal is then fed to pin 1 of the MCT2E optocoupler. This optocoupler utilizes an internal LED to generate spikes, doubling the frequency of the input signal. 434 MHz TX: The frequency-doubled signal is finally directed to the DATA pin of the 434 MHz TX module. Receiver Side: Decoding and Displaying the Measured Frequency 434 MHz RX: The 434 MHz RX module demodulates the received signal, extracting the frequency information. Arduino Uno: The DATA pin of the 434 MHz RX is connected to digital I/O pin 5 of the Arduino Uno. The Arduino's processing power is utilized to calculate the frequency of the test signal. LCD and Serial Monitor: The calculated frequency is displayed on both the LCD and the serial monitor of the Arduino IDE. This provides a clear and convenient way to view the measured frequency. With this Arduino-based wireless frequency meter, you can effectively measure frequencies with remarkable accuracy, expanding your capabilities in electronics exploration and experimentation. Fig. 7: Test signal frequencies (1576Hz and 2399Hz) displayed on the serial monitor This project can be used for experimenting, learning, testing and troubleshooting audio equipment in the audible range between 50Hz and 3kHz. The components used in the project are listed in Table 1. Software The Arduino Integrated Development Environment (IDE) version 1.6.5 provides the interface for programming the Arduino Uno microcontroller board. Within the IDE, the appropriate COM port and Arduino board model must be selected from the Tools menu. Next, the source code file named "freq_meter_wl_1.ino" is uploaded to the Uno board. To view output, open the serial monitor from the same Tools menu. Set the baud rate to 9600 to establish communication and observe the frequency readings displayed in Hertz. Should any issues arise, debugging can be assisted by validating voltages at marked test points on the schematic diagrams. Table 2 lists the expected voltage levels across different test points, serving as a reference during troubleshooting. Calibrating signals at the test points as per the table allows tracing potential issues to specific sections of the circuit implementation. This aids rapid verification and refinement of the wireless frequency measurement design. ### TWO-CHANNEL GUITAR STOMP BOX MAKES MOMENTARY SWITCHES LATCHING When we first saw [Maarten Tromp]’s article about a “momentary latching switch” for guitar effects pedals, we have to admit to being a bit confused. When it comes to push-button switches, “momentary” and “latching” seem to be at odds with each other, with different mechanisms inside the switch to turn one into the other. What gives? As it turns out, [Maarten]’s build makes perfect sense when you consider the demands of a musical performance. Guitar effects pedals, or “stomp boxes,” are often added to the output of electric guitars and other instruments to change the signals in some musically interesting way. The trouble is, sometimes you only need an effect for a few bars, and the push-on, push-off switches on many effects pedals make that awkward. [Maarten]’s idea was to build a stomp box with momentary switches that act as inputs to an ATtiny2313 microcontroller rather than directly controlling the effect. That way, a bit of code can determine how long the switch is tapped, and activate a relay to do the actual switching accordingly. A short tap of the button tells the microcontroller to latch the relay closed until another tap comes along; a long press means that the relay is held open only as long as the button is held down. Yes, he could have used a 555, a fact which [Maarten] readily acknowledges, but with some loss of flexibility; he currently has the threshold set at 250 milliseconds, which works for his performance style. Changing it would be a snap in code, as would toggling the latching logic. A microcontroller also makes expansion from the two-channel setup shown here easier. Looking for more effects pedal action? We’ve got a bunch — a tube-amp tremolo, an Arduino Mega multipedal, a digital delay line. Take your pick! Source: TWO-CHANNEL GUITAR STOMP BOX MAKES MOMENTARY SWITCHES LATCHING ### BEHOLD THE TRACK-TWISTING MÖBIUS TANK It started with someone asking [James Bruton] about using a Möbius strip as a tank tread. He wasn’t sure what the point would be, but he was willing to make one and see what happened. Turns out it works reasonably well! The main design challenge was creating a tread system that would allow for the required rotation. [James] designed in the ability for each link to rotate about 18 degrees, and ensured plenty of open space on the upper side of the drive train to accommodate a full 180 degree twist. It took a little fine-tuning and looks a bit trippy, but in the end works about as well as a regular tread system. [James] shows off a good technique to keep in mind when constructing big assemblies like this tank. It takes a lot of time and material to print large pieces, and in such cases it’s especially important to minimize rework. [James] therefore designs smaller, separate pieces as interfaces to other parts. This way, if changes are needed down the line (for example, to adjust motor placement or change tension on parts), only a smaller interface piece needs to be redone instead of having to re-print a huge part. The unit uses an Arduino Mega, two 24 V gearmotors to drive each tread independently, an RC radio receiver, and some beefy BTS7960 DC motor drivers to drive the motors. [James]’ unit is pretty big, but we’ve also seen 3D printed tanks capable of carrying a human driver. It’s clear that build plate size doesn’t seem to limit tank designs. Watch the Möbius tank get built and drive around in the video, just below the page break. Source: BEHOLD THE TRACK-TWISTING MÖBIUS TANK ### CUBIIO 2: LASER CUTTER & METAL ENGRAVER WITH AUTOFOCUS Whether it’s to print your name on personal belongings, elevate product value with your own logo or print your favorite photo on any surface, this 2nd generation machine gives an output resolution of 500 DPI. After we saw what could be described as “the very first palm-sized compact laser engraver and the most funded fabrication tool ever on Kickstarter” back in 2017, designer of the compact Cubiio Laser Engraver is back with a more powerful and much faster laser cutter and metal engraver with Autofocus and WiFi remote control. Measuring 30 cm x 22 cm, the 2nd generation of the laser engraver features a workspace bigger than the size of an A4 paper and offers plenty of room to bring your ideas and creativity to life. It is a portable, easy-to-use, and safe machine designed particularly for makers, bakers, designers, handcrafters, leather workers, carpenters, and anyone with amazing imaginations. Some cool things about the Cubiio 2 include its maximum cutting thickness of 5mm and its ability to cut through materials like leather, felt, wood, cardboard, paper, acrylic, fabric, and many others. If the material appears to be too thick for a single pass to cut through, the Cubiio 2 will focus continually downward into it for subsequent passes until it is able to cut. Read more: CUBIIO 2: LASER CUTTER & METAL ENGRAVER WITH AUTOFOCUS ### Arduino Cloud for IoT and more enhanced further from user feedback The Internet of Things (IoT) landscape is a dynamic and rapidly evolving field, with the Arduino Cloud platform standing as a key player. Recently, this platform has undergone a significant upgrade, a testament to Arduino’s commitment to fostering community-driven innovation. This upgrade, largely influenced by user feedback, has transformed the platform into a more intuitive, powerful, and user-friendly tool, making IoT accessibility more democratic than ever before. The most noticeable change in the Arduino Cloud is the overhauled user interface (UI) design. The UI is the gateway through which users interact with the Arduino Cloud, and the new design is aimed at making this interaction as smooth as possible. The interface is clean, visually appealing, and focuses on the user’s projects and data. This redesign is not merely a cosmetic adjustment; it’s a strategic move designed to enhance user interaction and engagement with the platform. Arduino Cloud  Enhancements Aiding this seamless interaction is the newly refined navigation bar. This feature allows for smooth transitions between devices, sketches, and dashboards. The navigation system is designed to be intuitive and user-friendly, reducing the learning curve for beginners while enhancing the experience for seasoned users. The sketch management system, a critical component in the IoT sphere where sketches form the backbone of any project, has also been significantly improved. This digital sketchbook is now more secure and organized, allowing users to manage their sketches with ease. For those keen to kickstart their IoT projects, the platform now provides instant access to pre-built templates. Accessible directly from the navigation bar, these templates cover a wide range of IoT projects, serving as a valuable resource for both beginners and experienced users. Arduino sketch management system The dashboard view has been reimagined to include Shared Spaces technology. This feature allows users to monitor their Cloud usage in real-time, providing immediate data and insights. This is particularly useful for teams working on shared projects, as it enables efficient resource management. In terms of customization, the platform now offers white labeling options. Users can personalize their dashboard with their own logo, adding a unique touch to their workspace. This feature is particularly beneficial for businesses and institutions that use the Arduino Cloud for their projects. Arduino has hinted at further enhancements to the Cloud platform in the future. These upcoming developments are expected to introduce more features and improve the overall user experience. Users are encouraged to stay tuned for future blog posts revealing these new developments. The upgraded Arduino Cloud Platform marks a significant step forward in democratizing IoT accessibility. The new features and enhancements are designed to enhance user interaction, streamline project management, and provide a more personalized experience. As Arduino continues to innovate and evolve, the future of IoT accessibility looks promising. Source: Arduino Cloud for IoT and more enhanced further from user feedback ### Track Your Valuables with the Unbeatable Power of Arduino and GPS! It is common for parents to feel concern for their children when they are apart. Questions arise around whether the kids made it safely to school, if they are alone at home, or playing with friends at the park. Ensuring a child's well-being when away creates worry that is familiar to caregivers worldwide. The natural protective instincts of parents lead to pondering scenarios like: Did my son get on the bus okay? Is my daughter by herself right now? Who is watching over my kids at recess? Not knowing can stir unease until reuniting or confirming all is well. To help address parental concerns over children's whereabouts, today we will create a smart tracking device. The goal is to have a way to keep tabs on a child when apart. Additionally, this tracker could be used to monitor the location of vehicles or other possessions. By building this system, it aims to provide peace of mind for caregivers. Knowing a child is safe and accounted for should help lessen worries. The same concept applies to tracking vehicles or valued items. Let's get started on constructing this innovative location tracker. The end result will be a tool to offer reassurance over what matters most when out of sight. Now we can begin the process of designing and putting together this helpful monitoring solution. Components GPS Module Arduino Nano SIM800L 2G SIM card OLED Display Small 3V battery Wires Prerequisites The first step is to prepare the Arduino integrated development environment (IDE) by installing necessary libraries. We will need the 'Tiny GPS++' and 'FONA' libraries to interface with the GPS and cellular modules. To acquire these, go to the Tools menu in the Arduino IDE. Select Library Manager from the dropdown. This will open the library installation window. Enter "Tiny GPS++" in the search bar to find the first library. Click install to add it to your Arduino library folder. Then search for and install "FONA" in the same manner. Having the proper libraries loaded into the IDE is crucial, as our code will reference functions and files from them. Taking a few minutes upfront to add these via the Library Manager saves trouble down the road. With the libraries now incorporated, the Arduino is prepared to communicate with the key components for our tracking project. Let's proceed to the next steps of assembly. Coding To begin programming the tracker, we first need to initialize the required libraries at the top of the code. Below that, declare the necessary variables which will hold the critical data like the SMS message content, GPS location coordinates, and other information. Following this, define the pin mappings that connect the Arduino to the GPS and cellular modules. These associate the physical pins to the virtual pin numbers used in code. Next is the setup function, where initialization tasks occur. Here we set the baud rates for serial communication with each module. The SIM800L cellular board is set to 4800 baud, while the GPS module is configured for 9600 baud. Proper baud rate selection is important for reliable transmission between the microcontroller and external devices. With the libraries included, variables declared, pin mappings defined and baud rates configured, we have laid the groundwork for the remaining code functionality. Fig 1. Fig 2. The main program logic will be contained within a loop function. Here we will continuously check if the SIM800L cellular module has received any incoming messages. If a message is present, it will be converted from bytes into a string that can be easily read and understood. The string will then be examined for a "get location" command. Upon detecting this command, the get_location() function will be called. This separate function is dedicated to acquiring and returning the latest GPS data from the GPS module. Back in the main loop, if the command was issued, the GPS location results retrieved from get_location() will be sent as a reply SMS back to the originating device. In this way, any authorized user can trigger a remote location update simply by texting the tracker. The loop function continuously monitors for requests, while get_location() focuses solely on updating from the GPS module. Fig 3 Connection Now connect the components as shown in the pic below: Fig 4.Connection created in Fritzzing ### NUM PAD REBORN AS STREAM DECK Stream decks are cool and all, but they are essentially expensive, albeit sorta cool-looking macro pads. So why not try to make your own? You don’t necessarily have to start from scratch. It all started when [dj_doughy] found an extremely clicky num pad in a recycle pile. It was so clicky, in fact, that even though [dj_doughy] didn’t need an external num pad, they wanted to keep it around as a fidget toy. From the video after the break, they look to be white ALPS switches. The only problem? It had a PS/2 connector. Well, okay, there was another problem. The chip inside seemingly has no datasheet available. [dj_doughy] took to Discord for help, and was advised to just have the thing use extended keys, like F13-F24, and assign those as hotkeys in OBS. In order to make it USB, [dj_doughy] need a microcontroller capable of acting as a Human Interface Device (HID). While [dj_doughy] tested using an Arduino Leonardo, they ended up using an Arduino Beetle due to its diminutive size. [dj_doughy] had a bit of trouble with the code sending two key presses, but found out they were just missing some variables. Now it works like a charm. Would you like a macro pad that lets you physically reassign macros? Then check out this tile-based macro pad. Source: NUM PAD REBORN AS STREAM DECK ### AI WITH GOOGLE CORAL TPU AND GATEWORKS SBCS Artificial Intelligence (AI) & Machine Learning (ML) are shaping and advancing complex automated technology solutions. Having these capabilities integrated into hardware allows for solutions that can recognize objects in an image, analyze and detect abnormalities in patterns or find key phrases. These functionalities can be paramount for applications including, but not limited to, autonomous vehicles and robots, monitoring devices for IoT networks, and voice & language processing applications. Nearly any industry can take advantage of this powerful technology, including manufacturing, oil and gas, security and defense, agriculture and automotive. Google Coral TPU & Gateworks SBC Highlights: Rugged SBC & TPU SolutionAccelerates neural networks with edge TPUPerformance: 4 TOPS (Trillion Operations Per Second)Half-size Mini-PCIe Form Factor (PCIe Gen2 x1)Supported Framework:​ TensorFlow LiteWorks with ​AutoML Vision EdgePower: 2 Watts Typ, 4 Watts Max-20 to +70C Operating Temperature A rugged & compact platform that can provide AI & ML in a single small package is available from Gateworks. Gateworks single board computers can be paired with a Google Coral Tensor Processing Unit (TPU). A demonstration has been created showcasing these two pieces working together in an image recognition scenario. The Google Coral Mini-PCIe card is inserted into a Gateworks SBC which also has an USB webcam connected to it. Read more: AI WITH GOOGLE CORAL TPU AND GATEWORKS SBCS ### ATSAMD51 MACHINE LEARNING MCUS Microchip’s TensorFlow Lite kit features the Microchip ATSAMD51 microcontroller The ATSAMD51J19 high-performance microcontroller family from Microchip Technology was formerly targeted for general purpose applications until now. The ATSAMD51J19 can now be used for edge computing in machine learning applications using the Adafruit ByBadge and TensorFlow. ATSAMD51 microcontrollers feature a 32-bit Arm® Cortex®-M4 processor with floating point unit (FPU) running up to 120 MHz, up to 1 MB dual-panel Flash with ECC, and up to 256 KB of SRAM with ECC. Machine learning has come to the “edge” – small microcontrollers that can run a very miniature version of TensorFlow Lite to do ML computations. Complex hardware to start developing the TensorFlow models is no longer needed. Teachable Machine is a free service for TensorFlow experimentation that takes the pain out of training models. In just a few moments users can get video data for image recognition, train a model, and export it for use with TF or TF Lite. Use a mod of tiny sorter to send a WebUSB signal to a Circuit Playground Express to light up LEDs based on which class was detected. The TensorFlow kit utilizing the Microchip ATSAMD51 Cortex-M4 processor is a cutting edge development platform for machine learning applications. TensorFlow Kit Contents Adafruit PyBadge with SAMD51 Cortex-M4F processor @ 120 MHz with display, speaker, and buttonsElectret microphone amplifier – MAX4466 with adjustable gainJST PH 3-pin to female socket cable – 200 mm Read more: ATSAMD51 MACHINE LEARNING MCUS ### ARDUINO STICKER DISPENSER SAVES TIME What’s the worst part about packaging up a whole lot of the same basic thing? It might just be applying the various warning stickers to the outside of the shipping box. Luckily, [Mr Innovative] has built an open-source automatic sticker dispenser that does the peeling for you, while advancing the roll one at a time quite satisfyingly. This tidy build is made primarily of 20×20 extruded aluminium and stainless steel smooth rod. All the yellow bits are 3D printed. The brains of this operation is an Arduino Nano, with an A4988 stepper motor driver controlling a NEMA17. Our favorite part of this build is the IR sensor pair arranged below the ready sticker. It detects when a sticker is removed, then the stepper advances the roll by one sticker height. The waste is collected on a spool underneath. Between the video and the instructions, [Mr Innovative] has made it quite simple to build one for yourself. Definitely check this one out after the break. [Mr Innovative] may as well go by [Mr. Automation]. Check out this automated wire prep machine from a few years ago. Source: ARDUINO STICKER DISPENSER SAVES TIME ### Grab Control of Industrial Automation with This DIY Joystick System This system allows remote control of up to four industrial devices using a joystick and Arduino Nano microcontroller board. Figure 1 presents a block diagram of the joystick-controlled industrial automation setup. Key components include: An Arduino Nano which processes signals from the joystick and outputs control commands. A joystick module that generates analog position readings for the Arduino to interpret as movement commands. Up to four industrial appliances/machines that can be selectively activated based on joystick position, such as motors, pumps, solenoids etc. Relay modules to switch high-voltage/current loads under command of the Arduino's low-power outputs. The Arduino reads the joystick and maps positions to commands for individual relays connected to each appliance. This provides a simple interface for operating multiple industrial systems simultaneously from a single joystick control station. Fig. 1: Block diagram of the joystick-controlled industrial automation system The electrical schematic for the joystick control system is presented in Figure 2. At its core is an Arduino Nano microcontroller board (Board 1) which oversees operation. A 7805 5V voltage regulator IC (IC1) steps down power from a wall adapter transformer (X1) to stable 5V for the Arduino circuitry. Four NPN transistors (T1 through T4) act as switching elements, each controlling one relay through the Arduino. A joystick module (JM1) provides analog position readings to the microcontroller. Four 12V single-pole single-throw relays (RL1 through RL4) handle remote switching of high-voltage appliances. Together, these components enable the Arduino to monitor joystick movement and selectively energize the relay coils, thus allowing control of separate loads from the single joystick interface. The regulator, transistors and relays safely interface the low-voltage control signals to industrial equipment. Fig. 2: Circuit diagram of the joystick-controlled industrial automation system Joystick module Joysticks come in various physical forms. A common joystick module is pictured in Figure 3. This type of joystick module produces analog voltage signals that vary based on shaft position. Specifically, as the joystick shaft is moved in different directions, the corresponding output voltage changes. By reading these voltage levels with a microcontroller, the direction of joystick movement can be interpreted programmatically. For example, pushing the shaft fully forward may output 3.3V on one pin and 0V on another, indicating forward motion. Releasing the shaft returns it to the center position with voltages around 1.65V on both pins. This analog position encoding allows a microcontroller to continuously monitor joystick deflection without mechanical switches. It can then initiate appropriate control actions based on decoded motion directions from the variable voltage outputs. Fig. 3: Joystick module This joystick module contains two axes of control - X and Y. Each axis has a potentiometer whose shaft position controls the associated voltage level. Specifically, the potentiometers' wiper outputs - labeled VRx and VRy at connector CON1 - act as voltage dividers whose values vary with shaft position. VRx responds to horizontal (left-right) movements while VRy reacts to vertical (up-down) motions. Therefore, the four possible combinations of shaft positions along the two axes produce distinct voltage readings on the VRx and VRy pins. These analog signals connect to the Arduino Nano's two ADC input pins A0 and A1 for digitization. By monitoring the voltage levels, the Arduino can determine joystick direction. Pushing the shaft in a given direction causes one pin voltage to rise while the other falls. An additional button is included but not utilized here. As illustrated in Figure 2, the joystick module interfaces with the Arduino's ADC inputs. The microcontroller then outputs signals through pins D2 to D5 to control four relays (RL1 to RL4) for selective actuation of loads. Power supply The power supply circuit utilizes a full-wave rectifier design to provide the necessary voltage levels. It contains: A step-down transformer (X1) rated at 230V AC primary to 12V-0-12V, 750mA on the secondary side. Rectifier diodes D1 and D2 (1N4007 type) which convert the AC to pulsating DC. Smoothing capacitors C1 and C2 that filter the rectified voltage into a stable DC output. Voltage regulator IC1 (7805 type) that takes the raw 12V and regulates it down to a clean 5V supply. This circuit design addresses the two voltage requirements. The 12V DC output after rectification and filtering powers the relay coils. Meanwhile, the 5V rail regulated by IC1 is used to operate the Arduino Nano microcontroller board. By stepping down mains AC and employing rectification, regulation and filtering stages, the power supply generates the appropriate DC levels necessary to interface the low-voltage microcontroller with high-current industrial relay loads. Arduino Nano The Arduino Nano is a compact microcontroller board compatible with the ATMega328 chip. Its key specifications include: Logic level and recommended operating voltage of 5V and 7V-12V input range respectively. Broad 6V-20V input voltage tolerance limits. Fourteen digital pins capable of input/output, of which six provide Pulse Width Modulation (PWM) output. Eight analog input pins for reading variable voltages. Pin current rating of 40mA to safely interface actuators and sensors. 32kB flash memory with 30kB available for code after reserving 2kB for the bootloader. 2kB SRAM and 1kB EEPROM for data storage. 16MHz clock speed for acceptable processing performance. These specs allow the Arduino Nano to reliably interface with various peripherals and sensors while running user programs to control industrial automation systems. Operation In the centered, neutral position of the joystick module, the digital readings for the VRx and VRy analogue outputs will both be 512. This is because the Arduino Nano has a 10-bit analog-to-digital converter (ADC), which maps the analogue voltages to integer digital values ranging from 0 to 1023. At the midpoint voltage level when the joystick is untouched, which represents the idle or standby mode, the ADC correctly converts this voltage to the middle digital code of 512. So when monitoring the ADC inputs connected to VRx and VRy, a reading of 512 on both channels indicates the joystick is in the zeroed-out center position with no movement registered along either axis. This baseline value allows software to detect any deflection from neutral. Case 1 Moving the joystick shaft left along the x-axis causes the digital value from the VRx input to drop below 50. The program code detects this condition and sets the Arduino's pin D2 to HIGH. This forward biases the base-emitter junction of transistor T1, switching it to the ON state. With T1 conducting, current flows through relay RL1's coil, activating the switching contacts. As a result, the load device wired to RL1 receives power and turns on. Diode D3 acts as a flywheel diode, providing a path for the back EMF created when the relay coil is de-energized to ensure proper switching without damage to the transistor. In summary, left joystick movement elicits a response from the microcontroller to energize RL1 via T1, enabling remote control of the specific load through positional input on the x-axis. Case 2 If the joystick shaft is moved right along the x-axis, the digital reading from the VRx input will exceed 900. The program detects when the value surpasses this threshold and activates Arduino pin D3, switching it high. This forward biases the base of transistor T2, facilitating current flow through its collector-emitter path. As a result, relay RL2's coil is energized via transistor T2. The activated relay contacts then power on the electrical load connected to RL2. In essence, by moving the joystick right, the microcontroller triggers transistor T2 and relay RL2 to remotely toggle the state of the corresponding device. The positional control along the x-axis is thus implemented through intuitive joystick deflection. Case 3 If the joystick shaft is pushed down along the y-axis, the digital reading from the VRy input will drop below 50. When this condition occurs where the value is less than 50, the program sets Arduino pin D4 high. This forward biases transistor T3, allowing current to flow through its collector and emitter path. As a result, relay RL3's coil is activated via T3. With the relay coil now energized, the contacts switch to power on the load device wired to RL3. In essence, downward movement along the y-axis triggers the microcontroller to energize transistor T3 and relay RL3, toggling the respective electrical appliance on remotely. This realizes real-time control based on vertical joystick deflection. Case 4 If the joystick shaft moves up along the y-axis, the digital reading from the VRy input will exceed 900. When the value registers above 900, the program turns on Arduino pin D5. This forward biases transistor T4, enabling current to pass through its collector and emitter terminals. Energization of transistor T4 subsequently activates relay RL4's coil. With the relay now powered, its contacts switch to deliver power to the load wired to RL4. In summary, upward movement along the y-axis prompts the microcontroller to trigger transistor T4 and relay RL4, thereby remotely controlling the associated industrial device. The system thus provides functional vertical movement control via the joystick. Software program The core functionality is implemented through software loaded onto the Arduino Nano's onboard memory. The program is written in the Arduino programming language, commonly called a sketch. The Arduino IDE version 1.6.8 is used to compile and transfer this sketch to the microcontroller. The ATmega328P chip features a pre-installed bootloader that allows uploading new code without an external programmer. To run the program, the Nano board connects to a PC via USB. The correct COM port is selected in the IDE. The sketch named "joystick_control.ino" is compiled then uploaded, selecting the matching Nano board from the Tools menu. This loads the sketch into the MCU's memory, where it oversees all primary operations. In this simple project, external libraries are unnecessary - the sketch directly reads joystick values, compares the VRx and VRy readings using if/else logic, and controls the four appliances accordingly. The uploaded sketch is thus the driving force behind bringing the hardware system to life through software control of the joystick interface and relays. Construction and testing Figures 4 and 5 depict the printed circuit board (PCB) layout design and component placement diagram for the physical joystick control system. To construct the system, first connect the transformer power output wires to the board's terminals labeled X1. Then attach the joystick module's signal wires to the header JM1. Once the programming sketch has been uploaded as previously explained, mount the Arduino Nano onto the PCB in the designated space. Switch on the power supply to energize the board. From this point, the operator can test bidirectional control by deflecting the joystick shaft left, right, up and down. This positional input will actuate the intended electrical loads remotely. Figure 6 shows the author's realized prototype of this joystick-controlled automation system assembled on the PCB according to the layout designs. By following the schematic and board designs, one could replicate this proof-of-concept demonstration of industrial remote selection via an intuitive joystick interface. Fig. 4: PCB layout of the joystick-controlled industrial automation system Fig. 5: Components layout for the PCB Fig. 6: Author’s prototype ### MS5839-02BA36 DIGITAL ALTIMETER TE Connectivity’s digital altimeter delivers sensing accuracy for both pressure and temperature measurements TE Connectivity’s (TE) MS5839 is an ultra-compact digital altimeter that is optimized for applications where chlorine and saline are present. The robust, gel-filled design of the MS5839 enables operation in harsh media environments while providing accurate and reliable digital measurements. This MEMS-based sensor offers advanced water resistance, chlorine resistance, shielding, low power consumption, and digital interconnectivity in an ultra-compact, low-profile package. The board-level design delivers sensing accuracy for both pressure and temperature measurements. Miniaturization, performance, and precision are key for sensors embedded in consumer devices like swim watches and diving equipment. Expanding on TE’s portfolio of ultra-compact digital altimeters, the MS5839 2-bar model is designed to meet the next generation of device manufacturer designs and challenges. Benefits Enables ultra-compact design with robust gel-filled construction that is suitable for harsh media environmentsFacilitates both pressure- and temperature-combination sensing with precise 24-bit digital output and I²C interfaceOffers advanced water resistance, chlorine resistance, and digital interconnectivity with low power consumption Read more: MS5839-02BA36 DIGITAL ALTIMETER ### LMD-401 RADIO TRANSCEIVER MODULE FOR INDUSTRIAL APPLICATIONS The LMD-401 is a low power narrow band synthesized transceiver with GFSK modulation, designed for use in the North American ISM licensed band Saelig Company, Inc. has announced the Circuit Design LMD-401 RF Transceiver Module for industrial applications, which is certified to FCC Part 90 in the USA and ISED RSS-119 in Canada.  The LMD-401, a successor to the successful LMD-400-R, is a compact integrated module with the long-range transmission and excellent interference rejection characteristics demanded for today’s battery-operated radio equipment. The LMD-401 is pin- and performance-compatible with the LMD-400-R, but provides reduced current consumption and a greater operating temperature range. Users can set operating frequencies in 12.5kHz steps within the 458MHz to 462.5MHz band, now with improved RF output flatness up to 10mW. Receiver performance includes superior interference rejection characteristics that meet the highest European EN300220 receiver standard, category 1. The LMD-401 is designed to have low spurious emissions and excellent interference rejection capabilities, with sensitivity to -116dBm. Users can expect stable operation, even in a site where multiple radio units are being operated simultaneously.  All high frequency circuits are enclosed inside a robust housing to provide exceptional resistance against shock and vibration. Using a TCXO as the reference oscillator circuit ensures high frequency stability over a wide temperature range. Read more: LMD-401 RADIO TRANSCEIVER MODULE FOR INDUSTRIAL APPLICATIONS ### Smart Washroom: Experience Hands-Free Lighting with IR Sensors This Arduino Uno and IR sensor-based system automatically controls the lighting in a bathroom connected to AC mains power. The IR sensors detect when a person enters or exits the room. Upon detection of entry, the light bulb or tube light is immediately switched on. When the sensors no longer detect a presence, the lighting will automatically switch off. This helps conserve electricity by preventing the light from remaining on unintentionally after use of the bathroom. The prototype created by the author is depicted in Figure 1. Fig. 1: Author’s prototype for Automated Washroom Light Using IR Sensors Circuit and working The circuit diagram for the automated washroom lighting system is presented in Figure 2. At the core is an Arduino Uno microcontroller (Board 1). A BC547 transistor (T1) acts as a switch, controlled by the Arduino. Infrared sensor modules (Module 1 and Module 2) detect movement and feed those readings to the Arduino. A relay (RL1) handles switching the actual light on and off when triggered by the Arduino. Together, these components allow the Arduino to monitor the IR sensors and toggle the lamp connected to the relay accordingly. Fig. 2: Circuit diagram of automated washroom light Infrared sensor As shown in Figure 3, the project utilizes low-cost infrared (IR) motion sensors known as FC-51 sensors to detect when a person enters or leaves the washroom. Specifically, it employs two pairs of these IR sensor modules, which are commonly used in applications that require objects or movement to be sensed. The FC-51 sensors function by emitting infrared light and looking for reflected infrared radiation. When an object such as a person enters the detection range, it causes a change in the reflected IR pattern that the sensor can identify. In this setup, one pair is positioned at the entry point while another pair is at the exit. This dual detection allows the Arduino to distinguish someone entering versus exiting for automatic light control purposes. Fig. 3: IR sensor module Each IR sensor module contains three pins - Vcc, Vout, and GND. The Vcc pin provides power and is connected to the Arduino Uno's 5V pin to receive the 5V DC supply. The GND pin is wired to the Arduino's common ground. The critical Vout pin acts as the sensor's output. For IR Module1, Vout connects to digital pin 8 on the Arduino. IR Module2's Vout connects to digital pin 7. When motion is detected, the Vout pin outputs a low (0V) logic level. Otherwise, it outputs a high (5V) level. By reading the digital states of both sensor modules via their Vout pins, the Arduino can determine if someone is entering or exiting based on which signal changes state. Specifically, a low signal on the entry sensor pin followed by a low signal on the exit sensor pin indicates movement into the room, whereas the reverse order corresponds to movement out of the room. This allows automatic controlled of the lights. 5V relay A 5V electromechanical relay (RL1) performs the actual switching of the light bulb on and off. As illustrated in Figure 4, this type of "sugar cube" relay has five terminals. Two terminals are used to supply power to energize the coil inside the relay. The remaining three terminals serve different electrical contact functions: Common (COM) provides a common connection point. Normally Closed (NC) connects to COM when the relay is de-energized. Normally Open (NO) is isolated from COM when de-energized. In the circuit, the light bulb is connected between the NO and COM terminals. When the relay coil is not powered, the NO terminal is open. However, when the Arduino energizes the coil, the COM terminal temporarily bridges to NO, connecting the light bulb to the 230V AC mains supply and switching it on. This relay therefore allows the microcontroller to control AC power remotely. Fig. 4: Pin details of 5V sugar cube relay In the AC power scheme, the Neutral (N) wire from the 230V source connects directly to the light bulb via the relay. Meanwhile, the Live (L) wire runs straight to the light bulb. The Arduino's operation is based on readings from the paired IR sensors. When Module2 (located outside) first detects motion followed by Module1 (inside) detecting the same, the microcontroller infers someone is entering. It then drives Pin 9 high to supply 5V. However, this 5V output alone cannot energize the relay directly. So transistor T1 (a BC547 NPN amplifier) boosts the current to a level sufficient to power the relay coil. This closes the relay contacts, linking the Neutral wire to the light bulb and switching it on. Conversely, if Module1 detects motion first followed by Module2, the Arduino realizes the person is exiting. It pulls Pin 9 low to remove the 5V, cutting off the transistor and de-energizing the relay. The light turns off as the Neutral wire is disconnected. Both sensors are needed - using only one would not allow distinguishing entry from exit as the state would not change. Module2 is installed just outside the bathroom door, while Module1 remains near the inside of the door to reliably sense traffic. Software The Arduino Uno microcontroller serves as the brains to interpret signals from the two IR sensors and control the circuit accordingly. It runs software stored onboard in its internal memory. Specifically, the software is written in the Arduino programming language and loaded using the Arduino IDE version 1.8.5. This IDE compiles and uploads the code, named "bathroom.ino", to the microcontroller. The ATmega328P chip on the Arduino features a pre-programmed bootloader that allows code upload without an external programmer. Within the code, a global variable called "count" is initialized to zero to track state. The setup void contains initialization code wiring digital pins 7 and 8 as inputs for the sensors, and pin 9 as an output to control the relay. Serial communication is also initialized for debugging. The core loop void handles the logic flow. It first checks the "in" sensor for a signal. Upon detection, a while loop executes to monitor the "out" sensor. Once that sensor also detects motion, the loop exits and count increments. Conversely, if the "out" sensor detects first, count decrements in an else if block instead. For testing, a show function prints values over serial but is unnecessary in the final application. Together, the software enables automated control based on IR input readings. Fig. 5: Arduino code void setup ( ) The design assumes only a single person will occupy the bathroom at a given time. As such, the software monitors the "count" variable to determine the appropriate relay state. As shown in Figure 5, an if statement checks if count equals one. This represents the scenario when a person has been detected entering but not yet exiting. If true, digital pin 9 is set high, energizing the relay and switching on the light. Conversely, if count does not equal one, pin 9 is held low. This de-energizes the relay, disconnecting power to the light fixture. By toggling pin 9 based solely on count equalling one, the circuit automatically accounts for someone being inside without requiring continuous sensing. This single-occupancy logic keeps the light on until detection of an exit, avoiding unnecessary switching from minor motion inside the bathroom area. Construction and testing The circuit is constructed on a printed circuit board (PCB) with a layout depicted in Figures 6 and 7. As shown, the layout organizes the components and traces to efficiently route connections between pins. Once the build is complete on the PCB, the "bathroom.ino" source code is uploaded to the Arduino Uno microcontroller. For testing and use, 5V DC power is applied at connector CON1 while 230V AC mains enter through CON2. The light fixture wires to connector CON3. As illustrated in Figure 8, the paired infrared motion sensors are installed - one (Module 2) just outside the bathroom door, the other (Module 1) near the inside of the doorframe. This placement allows optimum detection of movement into and out of the room. When powered up, connected to mains, and with the sensors installed as guided, the automated control system is ready for operation. It will now detect bathroom occupancy and automatically toggle the lighting accordingly without manual intervention. Fig. 6: PCB layout for the automated washroom light Fig. 7: Components layout of the PCB Fig. 8: Sensors’ installation near the door ### SBG SYSTEMS ELLIPSE-D MINIATURE DUAL GPS INS Ellipse-D is the smallest Inertial Navigation System (INS) integrating a Dual-antenna, multi-band GNSS receiver, capable of delivering precise heading as well as centimeter-level position accuracy in the most challenging GNSS conditions. It provides attitude, heading, heave as well as navigation outputs. Ellipse-D is an ideal choice for magnetic denied applications and can operate in all dynamic conditions with optimal performance. It features 0.05° Roll and Pitch (RTK), Post-processing with Qinertia PPK Software. The Ellipse-D is equipped with state-of-the-art MEMS sensors, especially very low noise gyroscopes. The Ellipse-D enables a 9-axis IMU sensor, a dual-antenna RTK GNSS module offering one-centimeter accuracy, with a 64-bit microprocessor for processing data. The Ellipse-D is also equipped with high-quality accelerometers with Internal FIR filters coupled with Coning & Sculling integrals to provide efficient vibration rejection. Additional features includes a temperature sensor, pressure sensor, and odometer input. The Ellipse-D inertial navigation sensor specifications include: SoC – Unknown 64-bit microprocessor for data processingGNSS – Dual antenna GNSS with support for GPS, GLONASS, GALILEO, BEIDOU; Supported features: SBAS, RTK,      RAWSensors – 3-axis gyroscope, 3-axis accelerometer, 3-axis magnetometer, temperature sensors, pressure sensorHost Interface:RS-232, RS-422, USB  up to 921,600 bpsCAN 2.0A/B up to 1 Mbit/sProtocols – Binary eCom, NMEA, ASCII, TSS Read more: SBG SYSTEMS ELLIPSE-D MINIATURE DUAL GPS INS ### AN OPEN-SOURCE EBIKE MOTOR CONTROLLER DIY e-bikes are often easy to spot. If they’re not built out of something insane like an old washing machine motor, the more subtle kits that are generally used still stand out when compared to a non-assisted bike. The motors tend to be hub- or mid-drive systems with visible wires leading to a bulky battery, all of which stand out when you know what to look for. To get a stealthy ebike that looks basically the same as a standard bicycle is only possible with proprietary name-brand solutions that don’t lend themselves to owner repair or modification, but this one has at least been adapted for use with an open source motor controller. The bike in use here is a model called the Curt from Estonian ebike builder Ampler, which is notable in that it looks indistinguishable from a regular bicycle with the exception of the small 36-volt, 350-watt hub motor somewhat hidden in the rear wheel. [BB8] decided based on no reason in particular to replace the proprietary motor controller with one based on VESC, an open-source electric motor controller for all kinds of motors even beyond ebikes. Installed on a tiny Arduino, it fits inside the bike’s downtube to keep the stealthy look and can get the bike comfortably up to around 35 kph. It’s also been programmed to turn on the bike’s lights if the pedals are spun backwards, and this method is also used to change the pedal assist level, meaning less buttons and other user-interface devices on the handlebars. [BB8] has been working on this for a while, and although the bulk of a working ebike controller is there, it still doesn’t support the torque sensing pedals included with this bike. We’re presuming that this is still a work-in-progress as the Arduino and associated code easily interfaces with all the other sensors available on this bike. Hopefully this open-source motor controller finds its way into other proprietary systems as well, since a lot of these ebikes can turn into massive paperweights if the companies who originally built them go out of business or simply decide to stop supporting older models. Of course, you can avoid this issue entirely by building your own ebike from spare parts. Source: AN OPEN-SOURCE EBIKE MOTOR CONTROLLER ### ZYNQ ULTRASCALE+ MPSOC BASED FZ3 CARD FOR DEEP LEARNING MYIR introduces a powerful FZ3 Card for deep learning. Built around the Xilinx Zynq UltraScale+ ZU3EG MPSoC, with Computing Power up to 1.2TOPS and MobileNet up to 100FPS, the FZ3 Card is an ideal machine learning hardware for developers to develop, validate or just directly integrate it into their end artificial intelligence (AI) products, thus accelerating their AI applications. The FZ3 Card (with the installed radiator) has the size of 100mm by 70mm, integrated with 4GB DDR4, 8GB eMMC, 32MB QSPI Flash and 32KB EEPROM, many peripherals are routed out on board including USB 2.0, USB 3.0, Gigabit Ethernet, TF, DisplayPort (DP), PCIe interface, MIPI-CSI, BT1120 camera, USB-UART, JTAG, IO expansion interfaces. The Card is also provided with rich software resources, it’s able to run PetaLinux 2019.1, and fully compatible to use Baidu Brain’s AI development tools like EasyDL, AI Studio and EasyEdge, which makes it much easier for developers to quickly leverage Baidu-proven technology or deploy self-defined models, enabling faster deployment. Typical applications of the FZ3 Card are AI camera, AI computing device, robotics, intelligent car, intelligent electronic scale, patrol UAV and other embedded intelligent applications. MYIR provides FZ3 Kit as a whole development kit, it contains the FZ3 Card and some necessary accessories including one 12V/2A power adaptor, one 16GB TF card, one mini USB cable and one mini DP to HDMI cable. The FZ3 Kit is priced at only $259/unit. Read more: ZYNQ ULTRASCALE+ MPSOC BASED FZ3 CARD FOR DEEP LEARNING ### SERVO CLAW GAME PUTS YOUR MUSCLES TO THE TEST As fun as claw games are, the jaws are always disappointingly weak, and you usually end up with bupkis. What if the jaws were completely within your  control? That’s the idea behind [Upside Down Labs]’ muscle-controlled servo claw game. While electromyography (EMG) is great for identifying neuro-muscular abnormalities and allows for amazing prosthetic limbs to work, it can also be used for fun. As you’ll see in the video after the break, accurate block-stacking (and possible candy-grabbing) depends on teamwork and tensed muscles. Though the user provides the muscle, the brains behind this operation is an Arduino Uno with a Muscle BioAmp shield stacked on top, which [Upside Down Labs] also created. This shield makes it ridiculously easy to connect EMG sensors and other I²C devices like screens and, well, servo claws. From there, it’s really just a matter of printing the claw, connecting it to a 9g servo, and using an accompanying kit to prepare the skin and connect the muscles to the Arduino. Be sure to check it out in tense block-stacking action after the break. If you want to listen in on your muscles, look no further than the BioAmp EMG Pill. Source: SERVO CLAW GAME PUTS YOUR MUSCLES TO THE TEST ### ROBOT SUNFLOWER FOLLOWS THE SUN Real flowers do it, and even the Beatles did it. [Robo Hub] now has a plastic sunflower that tracks the sun using, of course, an Arduino. It may not qualify as a real robot, but it does mimic a real sunflower. The electronics aren’t earth-shattering, of course. An Arduino, a light sensor, and a servo motor are all you really need. But we enjoyed the whimsy and the artistic sensibility. This would be a great school project, for example. Interesting enough to get kids interested but not so hard as to be undoable. You can see a video of the ersatz flower below. There are actually a pair of light sensors, as you might expect. That way you can determine which sensor is getting the most light. Obviously, these can’t be on-off sensors. They are, in fact, light-dependent resistors, so you get a nice analog reading. Of course, you might not need an Arduino for this. A 555 driving a servo and a handful of discrete components could measure a bridge with the photoresistors and get the same effect. On the other hand, a microcontroller these days is inexpensive and versatile, so why not? Usually, people tracking the sun are trying to get more energy. That doesn’t have to be any more complicated, though. Source: ROBOT SUNFLOWER FOLLOWS THE SUN ### LITTELFUSE ADDS 105ºC RATED, 800V SOLID STATE RELAY TO PRODUCT LINE Littelfuse, Inc. a global manufacturer of leading technologies in circuit protection, power control, and sensing, announced the PLA172P OptoMOS® Relay, an 800 V normally-open single-pole 6-pin solid-state relay (SSR). It is the first solid-state relay in the Littelfuse product portfolio that comes with guaranteed electrical parameters at 105 °C ambient operating temperature. “The PLA172P is an extension to our OptoMOS solid-state relay product line, offering our highest voltage rating (800V) in a surface mount SSR Flatpack package,” said Steve Andrezyk, Global Product Manager at Littelfuse. “It also has our highest temperature range in a solid-state relay, extending our operational temperature range from 85 ºC up to 105 ºC, enabling hardware engineers to precisely design their circuits at very challenging temperatures. This combination of high voltage rating, high-temperature range, and surface-mountable packaging is recommended for applications including: IndustrialInstrumentationMedicalIsolation Test EquipmentBattery Isolation MonitorsIndustrial Solar Field Isolation Monitor The PLA172P OptoMOS relay includes these key benefits: Replaces electro-mechanical relays (EMRs) that are bulky and prone to failing drop testsUnique device pinout provides more than 6.8 mm of pad-to-pad separation between the high voltage output pins preventing arcing5000 VRMS input-to-output isolation5 mA low input control current over operating temperature range Read more: LITTELFUSE ADDS 105ºC RATED, 800V SOLID STATE RELAY TO PRODUCT LINE ### Control Devices with Your Hands - Without a Camera! Have you ever imagined commanding a device solely with hand motions? Envision your phone wirelessly sending emojis to friends representing your hand gestures in real-time. This vision is now a reality! Using ST's innovative multi-zone Time-of-Flight sensors, camera-free gesture recognition is possible. AI algorithms running on the low-power STM32 microcontroller identify hand poses with minimal processing requirements. Users can define customized gesture vocabularies, collect training data, build machine learning models, and develop fully-customized applications! Without need for cameras, ST sensors unlock entirely new interactions between people and technology through simple movement of the hands. Approach This hand gesture recognition solution identifies a customizable set of hand poses using an ST multi-zone Time-of-Flight sensor. The development process involves: Defining your own collection of hand gestures Collecting training data from multiple users via the ToF sensor's 8 x 8 distance and signal readings Employing the training script from ST's MCU Model Zoo to build an AI model Implementing the trained model on your selected STM32 MCU using either STM32Cube.AI Dev Cloud or the "Hand Posture Getting Started" included in the Model Zoo This approach allows for rapid development with configurable gestures, a small memory footprint and low processing requirements. Depending on the application, the ToF sensor may face the user, ceiling or be attached to a moving object - enabling use in products like personal computers, interactive displays, smart appliances and augmented reality devices. ### ADVANTECH LAUNCHES EDGE NETWORK APPLIANCE DESIGNED READY FOR 5G & WI-FI 6 Advantech a global leader in IoT, today announced its new FWA-1112VC network appliance which introduces a series of innovative features to its widely adopted range of entry and mid-level white boxes for software-defined WAN (SD-WAN) and universal Customer Premises Equipment (uCPE). Major upgrades include extended connectivity choice, with dual 10GbE SFP+ and PoE+ support, in addition to a future-proof design ready to adopt coming 5G and Wi-Fi 6 technologies. The FWA-1112VC is a fanless and compact platform that fits working environments where noise levels need to be kept down. It also supports wide operating temperature range to meet edge deployment needs, extending uCPE use cases from enterprise to smart city and industrial IoT. The new Advantech FWA-1112VC white-box appliance is based on Intel Atom® processor and has been cost optimized to run SD-WAN and network security workflows. It provides flexible WAN connectivity options including 5G, 4G/LTE, Wi-Fi 5, Wi-Fi 6 and 10 GbE SFP+ configurations. Encryption and compression acceleration are supported using Intel® QuickAssist with DPDK providing the technology needed to accelerate packet handling without consuming additional resources. Additional features include PoE+, eMMC and dual 4G/LTE support and improved surge protection. Its fanless design allows for wide operating temperature ranges from -20 ⁰C up to +70 ⁰C to meet harsh environments requirements at the edge. Fanless and compact with wide operating temperature range extends SD‑WAN and uCPE use cases to Smart City and Industrial IoTThe new cost-optimized FWA-1112VC also features 10GbE SFP+ connectivity to meet increasing WAN speed demandsThe platform has been validated by leading uCPE and service provider partners ADVA and Combridge, member of Deutsche Telekom Group Read more: ADVANTECH LAUNCHES EDGE NETWORK APPLIANCE DESIGNED READY FOR 5G & WI-FI 6 ### HOW MIROMICO DESIGNED THE INDUSTRY’S SMALLEST LORAWAN MODULE FOR THE IOT Miromico develops innovative IoT solutions in volume using state-of-the-art wireless technologies, including LoRaWAN, Sigfox, and NB-IoT. The Zurich, Switzerland-based company also provides design services in the areas of ICs, electronic systems, and software. By:Christine Young The company is disrupting the design of sensors by tapping into novel wireless communications technologies. In doing so, Miromico is producing low-cost, battery-powered sensors that operate for more than 10 years. To facilitate fast prototyping and development for its customers, its designs are based on standard Miromico modules that can be used out of the box. Using these modules, designers can bring wireless connectivity to a variety of products. While many of the company’s LoRaWAN modules are based on chipsets that are large and do not provide security, IoT applications demand the opposite. “In LoRaWAN, our clients want to have access to novel and highly integrated technologies. We needed for the extension of our LoRaWAN module family a microcontroller that is small, offers security, and is cost competitive. At the same time, we also wanted to have a strong partner with competence in security,” explained Dr. Schekeb Fateh, who works in business development at Miromico. The company found its microcontroller solution in the MAX32625/MAX32626 microcontrollers from Maxim’s family of ultra-low-power microcontrollers, which are ideal for IoT applications and wearables. The FMLR-6x-x-MA62x, which measures just 8.6mm x 9.3mm, is the world’s smallest LoRaWAN module. Read more: HOW MIROMICO DESIGNED THE INDUSTRY’S SMALLEST LORAWAN MODULE FOR THE IOT ### Create Stunning GUIs for STM32 Microcontrollers with TouchGFX Description TouchGFX is an advanced, cost-free graphical user interface (GUI) library optimized for STM32 microcontrollers. Leveraging the STM32's hardware-accelerated graphics capabilities, architecture and ecosystem, TouchGFX empowers the Human-Machine Interface (HMI) revolution by enabling the development of stunning smartphone-caliber user interfaces on embedded devices. This ranges from simple, low-color applications to more sophisticated interfaces with high-resolution and extensive color support. TouchGFX exploits the STM32's graphical processing power to accelerate creation of visually appealing embedded UIs, from basic to highly advanced.   TouchGFX is optimized to run smoothly on STM32 microcontrollers while requiring only minimal memory resources. The TouchGFX solution is distributed as an STM32Cube Extension Package (X-CUBE-TOUCHGFX), which contains all necessary TouchGFX software to assist developers in building their user interface applications. TouchGFX's seamless integration within the STM32 ecosystem allows users to leverage related development tools and libraries, streamlining the design process and accelerating time to market. Its compatibility with the established STM32 software environment provides an easier and more efficient workflow for creating embedded graphical applications. ### RECHARGEABLE 100-ΜAH BATTERIES COME IN PINT-SIZED SMD FORMAT TDK Corporation presents a new packing unit for CeraCharge, the world’s first SMD technology solid-state rechargeable battery, in the compact size EIA 1812 (4.4 x 3.0 x 1.1 mm3). The packing unit (B73180A0101M199) includes 10 blister-packed CeraCharge batteries that come in a vacuum-sealed plastic bag. The components are manufactured in regular series production and are suitable for test purposes, prototype construction and the installation of pilot lines. The packing unit can be obtained quickly and easily from selected TDK service distributors. CeraCharge can be recharged more than 1,000 times, and has a capacity of 100 µAh at a nominal voltage of 1.5 V. Currents in the range of a few mA can also be rapidly drawn. Thanks to the SMD technology, it is simple to fit the batteries and process them in reflow soldering processes, which in turn, reduces the production costs of the device. CeraCharge is designed for a temperature range of -20 °C to +80 °C. Unlike most ordinary technologies, CeraCharge is a solid-state rechargeable battery that uses a ceramic solid as electrolyte instead of liquid electrolyte, thus eliminating the risk of fire, explosion or leakage of electrolyte fluid. In a similar way to ceramic capacitors, CeraCharge is based on multilayer technology and combines a relatively high energy density in a very compact space, with process security, when manufacturing multilayer construction components. Read more: RECHARGEABLE 100-ΜAH BATTERIES COME IN PINT-SIZED SMD FORMAT ### BUILDING PENNY’S COMPUTER WATCH FROM INSPECTOR GADGET When you help your bumbling Uncle Gadget with all kinds of missions, you definitely need a watch that can do it all. Penny’s video watch from Inspector Gadget has a ton of features including video communication with Brain and Chief Quimby, a laser, a magnet, a flashlight, a sonar signal, and much more. To round out her Penny costume, [Becky Stern] has created a 3D printed version of Penny’s incredibly smart watch. It listens for Penny’s iconic phrase — come in, Brain! — and then loads a new picture of Brain on the rounded rectangle TFT display. Inside the watch is an Arduino Nicla Voice, which has to be one of the tinier machine learning-capable boards out there. [Becky] created the watch case in Tinkercad and modified a watch band from Printables to fit her wrist. With such a small enclosure to work with, [Becky] ended up using that really flexible 30 AWG silicone-jacketed wire for all the fiddly connections between the Arduino and the screen. After getting it all wired up to test, she found that the screen was broken, either from pressing it into the enclosure, or having a too-close encounter with a helping hands. Let that be a lesson to you, and check out the build video after the break. More interested in Uncle Gadget’s goodies? Check out these go-go-Gadget shoes and this propeller backpack for skiers. Source: BUILDING PENNY’S COMPUTER WATCH FROM INSPECTOR GADGET ### REAL NES PLAYS FRAME-PERFECT FOR YOU ON TWITCH Have you ever wanted to be the best Super Mario Brothers speedrunner, but you just couldn’t do the frame-perfect inputs? Fear not, because [Gregory Strike] is here to save the day with his automatic NES controller! In his previous video, [Greg] already made an automatic controller that plays a sequence of inputs at the perfect time, but it still failed some of the frame-perfect tricks. So what gives? Deviation in the timing of the NES itself gives, as he shows how the NES doesn’t sample inputs at exactly the same time every frame. To account for this, he used the latch signal, which starts the controller reading process as a time reference, and replaced his digital “mixtape” with a more time-flexible Arduino. After the modification, he shows it pulling off frame-perfect inputs every time he plays Super Mario Brothers. But if you have a controller that can do frame-perfect inputs and it can be connected to a computer, you can connect the controller to the internet! That’s right, [Greg] created a Twitch bot that tells the Arduino exactly what inputs to send, which then relays it to the NES. It accepts simple sequences of inputs via chat, and you can try it out right now on [Greg]’s Twitch stream. This project shows promising results, and we think it’s possible to do much more with its internet connection. We’re certainly looking forward to what [Greg] decides to make next. Video after the break. Source: REAL NES PLAYS FRAME-PERFECT FOR YOU ON TWITCH ### BEHOLD THE MEGA-WHEELIE, A HUGE ONE-WHEELED ELECTRIC SKATEBOARD DIY electric personal vehicles are a field where even hobbyists can meaningfully innovate, and that’s demonstrated by the Mega-Wheelie, a self-balancing one-wheeled skateboard constructed as an experiment in traversing off-road conditions. [John Dingley] and [Nick Thatcher] have been building and testing self-balancing electric vehicles since 2008, with a beach being a common testing ground. They suspected that a larger wheel was the key to working better on rough ground and dry sand and tested this idea by creating a skateboard with a single wheel. A very big, very wide wheel, in fact. The Mega-Wheelie houses a 24V LiFePO4 battery pack, 450 W gearmotor with chain and sprocket drive, SyRen motor controller from Dimension Engineering, Arduino microcontroller, and an inertial measurement unit to enable the self-balancing function. Steering is done by leaning, and the handheld controller is just a dead man’s switch that disables the vehicle if the person piloting it lets go. Design-wise, a device like this has a few challenging constraints. A big wheel is essential for performance but takes up space that could otherwise be used for things like batteries. Also, the platform upon which the pilot stands needs to be as low to the ground as possible for maximum stability. Otherwise, it’s too easy to fall sideways. On the other hand, one must balance this against the need for sufficient ground clearance. In the end, how well did it work? Well enough to warrant a future version, says [John]. We can’t wait to see what that looks like, considering their past 3000 W unicycle’s only limitation was “personal courage” and featured a slick mechanism that shifted the pilot’s weight subtly to aid steering. A video of the Mega-Wheelie (and a more recent unicycle design) is embedded just below the page break. Source: BEHOLD THE MEGA-WHEELIE, A HUGE ONE-WHEELED ELECTRIC SKATEBOARD ### BUILD AN EASY REPLICA OF HAL 9000 Adafruit’s PropMaker Feather is a microcontroller board designed specifically for building props with electronic features. Thus, what better way to show it off than by building a nifty replica of the most menacing AI ever to roam this solar system? That’s right, it’s the Adafruit HAL9000 build! Following the 80/20 rule, this version is intended to be reasonably authentic while remaining affordable and easy to build. It’s built around Adafruit’s existing Massive Red Arcade Button, which looks like a decent simulacra of HAL9000’s foreboding, perceptive lens. It’s placed in a case assembled from laser-cut acrylic, with a neat inkjet-printed label on top. Where previously, sound effects were courtesy of an Arduino Uno with a Wave Shield, this version uses the PropMaker Feather, based on the RP2040, instead. It’s actually possible to assemble with zero soldering thanks to quick-connect wires and screw terminals on the PropMaker Feather. Fundamentally, if you’re building a simple prop that needs audio or LEDs, the PropMaker Feather could be a useful tool for the job. Alternatively, consider building a HAL replica with more capability, like controlling your home. Just don’t give it too much responsibility—we all know how that ends. Video after the break. Source: BUILD AN EASY REPLICA OF HAL 9000 ### Bluetooth 5.3 SoC: The Future of Wireless Connectivity Description The BlueNRG-LPS is an ultra-low power programmable Bluetooth Low Energy wireless system-on-chip (SoC) solution from STMicroelectronics. It includes highly optimized 2.4 GHz radio IPs for excellent radio performance and minimal power consumption, allowing for exceptional battery life. The BlueNRG-LPS supports Bluetooth Low Energy 5.3, enabling point-to-point connections and Bluetooth Mesh networking to reliably establish large device networks. It can also be used for proprietary 2.4 GHz wireless communication requiring ultra-low latency. The BlueNRG-LPS contains an Arm Cortex-M0+ microcontroller that operates up to 64 MHz and a dedicated Bluetooth Low Energy core coprocessor for handling timing-critical operations via DMA. It supports key Bluetooth Low Energy 5.3 features such as 2 Mbps data rate, long-range coded PHY, advertising extensions, channel selection algorithm #2, GATT caching, direction finding, simultaneous connections in multiple roles, extended packet length, LE Ping procedure, periodic advertising, and more. The BlueNRG-LPS offers enhanced security with hardware true random number generation, AES encryption up to 128-bit, public key accelerator (PKA), CRC calculation, unique 64-bit ID, and flash memory protection. The PKA supports modular arithmetic and scalar multiplication for elliptic curves up to specified sizes. The BlueNRG-LPS can function as a standalone device managing the application and Bluetooth stack, or as a network processor. It contains high-speed memory types such as 192 KB flash, 24 KB RAM, 1 KB OTP ROM, and 7 KB system ROM. Direct data transfer between memory and peripherals is enabled via eight DMA channels. Additional features include a 12-bit ADC, low-power RTC, timers, SPI/I2S, UART, I2C, and standard communication interfaces. The BlueNRG-LPS operates from -40 to +105°C on a 1.7V to 3.6V supply. Comprehensive power saving modes allow low-power design. An integrated switching regulator and power dropout circuit generate resets when VDD drops below 1.65V. Package options provide up to 20 I/Os.   ### TIM’S DRAW BOT GETS AROUND WITH A PEN If you grew up playing with LOGO on an old 8-bit computer, you’re probably familiar with the concept of a drawbot. It’s a simple robot that drags a pen around to draw on paper. [Tim] decided to build one that uses a simple skid-steer design to get around the page.  An Arduino Nano is the brains of the operation, paired with a CNC Shield that allows it to drive a pair of stepper motors. The stepper motors drive the wheels via cogged belts, with the 3D-printed rims fitted with square rubber drive belts used as tires for additional grip. A third jockey wheel is used for balance, in addition to the two main driven wheels. A servo is used to raise and lower the pen as needed. All the hardware is mounted on to a simple tray chassis, which was 3D printed along with most of the other basic componentry. The robot does a good job of plotting out a drawing on a small scale, with [Tim] using it to outline his name on paper. We’ve featured some other great drawbots before, too, including this nifty spray-can version. Video after the break. Source: TIM’S DRAW BOT GETS AROUND WITH A PEN ### DRIVING AN OLED SCREEN WITH A 6502 SINGLE-BOARD COMPUTER Twenty years ago, if you wanted an LCD for a project, you’d probably end up with something salvaged from a mobile phone or an HD44780 character display. These days, little OLEDs can be had for a few bucks and they’ve taken the maker world by storm. [Anders Nielsen] has recently been experimenting with driving these displays from the vintage 6502 CPU, and he’s even got scrolling operation down pat. The best part is that [Nielsen] is doing all this on a single-board computer running his own assembly code. That’s right – there’s no compilers here. It’s bare metal coding at it’s best. The build uses a 6507 chip running at 1 MHz, paired with a 6532 RIOT and just 128 bytes of RAM—a similar setup to the Atari 2600. The video explains how the code stacks up and drives the display, achieving the scrolling effect. It makes a huge difference to usability, especially compared to chunking pages at a time to the postage stamp-sized screen. He demonstrates a legitimate usage case too, using the setup as a serial terminal for a Raspberry Pi. The 6502 architecture still looms large in the collective consciousness; we’ve been talking about programming it in assembly for years. Video after the break. Source: DRIVING AN OLED SCREEN WITH A 6502 SINGLE-BOARD COMPUTER ### BATTERY MANAGEMENT IC WITH UART INTERFACE FOR SENSING AND CELL BALANCING Infineon Technologies AG has expanded its product offering for Battery Management System (BMS) with the TLE9012AQU a new sensing and balancing IC that is designed for batteries in hybrid and electric cars and other applications. It can measure the voltage in up to twelve battery cells with an accuracy of ± 5.8 mV over the entire temperature and voltage range as well as the operating life cycle. By supporting up to five external temperature sensors, the device provides an integrated cell balancing function and uses an iso-UART interface for communication. The BMS helps optimally utilize the battery capacity so that it operates for the longest possible range in an electric car, it also makes sure that the battery does not age prematurely. It is also used to determine the battery’s state of charge and state of health to estimate the available range and remaining service life. The TLE9012AQU helps in providing necessary measurement data and ensures a balanced state of charge through cell balancing. Cell balancing is achieved through twelve balancing switches integrated on the chip- one per channel. They are designed for currents up to 150 mA and if there are higher balancing currents, the device can also support external switches. The cell balancing can be programmed to stop without a signal from the microcontroller after a defined time of up to 32 hours or when the cell has reached a defined voltage so that the microcontroller switches to sleep mode for saving energy. Read more: BATTERY MANAGEMENT IC WITH UART INTERFACE FOR SENSING AND CELL BALANCING ### NEW SILENT SWITCHER OFFERS 95% EFFICIENCY AT 2 MHZ Compact, ultralow-emission, high-speed synchronous monolithic stepdown regulators ideal for noise-sensitive and space-critical applications July 8, 2020 – Geneva, Ill.: Richardson RFPD, Inc., an Arrow Electronics company, announced today the availability and full design support capabilities for the Power by Linear Silent Switchers from Analog Devices, Inc. ADI’s Silent Switchers offer high efficiency at high switching frequencies while maintaining ultralow EMI emissions. These regulators bring new levels of performance for synchronous stepdown DC/DC converters. Maximum input voltages ranging from 8 V to 65 V make them ideal for applications that require from 1 A up to 15 A of output current, including automotive, industrial and communications systems applications. The Silent Switcher family uses special design and packaging techniques to offer 95% efficiency at 2 MHz while easily passing the CISPR 25 Class 5 Peak EMI limits. Read more: NEW SILENT SWITCHER OFFERS 95% EFFICIENCY AT 2 MHZ ### GWINSTEK GLC-9000 LEAKAGE CURRENT TESTER The GLC-9000 Leakage Current Tester provides comprehensive testing for general purpose electric equipment. Saelig Company, Inc. has introduced the GWInstek GLC-9000 Leakage Current Tester performs leakage current (also called touch current) tests on general purpose electric (IEC 60990) equipment. This tester uses nine measurement device networks to simulate the human body interacting with equipment under test.  Leakage current testing is needed to ensure that products to comply with specific standards and regulations such as IEC, UL, JIS, etc. The GLC-9000 features a large TFT LCD touch panel for test configuration, displaying measurement setting information and results simultaneously. 50 preset testing conditions are provided, which conform to IEC60990 and other standards, to allow for quick general electric equipment test setups. 30 additional memory locations are available for user-defined tests. A Meter mode is also provided on the GLC-9000, using the measurement terminals T1/T2 to display measured voltage. During voltage measurement, the SELV (safety extra low voltage) function is used to detect whether a voltage value between measuring points exceeds the SELV preset.  Measurements are made with up to 0.01uA and 0.1V resolution. 50 Preset Test Conditions Conform to IEC 60990Up to 30 memorized customer-defined testsTouch Panel with Color LCD Display9 measurement network simulate Human Body resistanceMeter Function with SELV/CONV FunctionUpper & Lower Limits for PASS/FAILLeakage current measuring modes : DC/AC/AC+DC/AC PeakInterfaces : RS-232/GPIB/USB Host & Device/EXT I/O Read more: GWINSTEK GLC-9000 LEAKAGE CURRENT TESTER ### Arduino Programming with .NET and Sketch Introduction Arduino serves as a development platform for creating embedded applications, incorporating a variety of sensors and actuators. It relies on open-source hardware, offering a range of Arduino models for your development needs. This book is tailored for developers, particularly those proficient in .NET, who aim to craft Arduino programs for both general and specialized applications. For the Readers This book presupposes a potential background in programming and specifically targets individuals with prior experience in .NET development who are interested in transitioning to Arduino board-based embedded programming. How This Book Is Organized This book adopts a sequential method, guiding you through the process of creating Arduino programs through the utilization of sketches and .NET. It delves into various Arduino functionalities, encompassing digital and analog I/O operations, serial communication, SPI, and the I2C bus. The book also elucidates how .NET interfaces with Arduino sketch programs to enable the remote control of sensor and actuator devices. It introduces the concept of the Internet of Things (IoT) and its practical application, culminating in the establishment of a connection between an Arduino board and a cloud server. Required Software, Materials, and Equipment Typically, it is advisable to have a computer running the Windows operating system, specifically Windows 10, for optimal performance. You'll want to install both Arduino software and Visual Studio on your computer. To execute our demonstration effectively, you will require various Arduino models. Additionally, you should have a variety of sensor and actuator devices on hand, along with several network modules like WiFi, Bluetooth, GPS, and LoRa. Introduction to Arduino Boards and Development Arduino stands out as one of the most renowned development boards, offering seamless integration of sensor and actuator devices. In this section, we will delve into the intricacies of working with Arduino development and getting your development machine ready. To undertake this chapter, you will need one of the available Arduino board models for practical implementation. The chapter encompasses the following key subjects: 1. Investigating various Arduino boards. 2. Establishing the development environment. 3. Initiating your inaugural project. 4. Delving into sketch programming. 5. Harnessing the power of Arduino programming with Visual Studio. Exploring Arduino Boards Arduino is a development platform that enables the creation of embedded applications using a variety of sensor and actuator devices. It operates on open source hardware principles, allowing individuals to design their own Arduino-compatible boards, but it's important not to use the Arduino name due to trademark restrictions. At present, Arduino boards are manufactured by both Arduino LLC (www.arduino.cc) and Arduino SRL (www.arduino.org), and there are distinctions between certain models produced by these entities. In general, an Arduino board offers a range of digital and analog input/output (I/O) pins for interfacing with external devices. Moreover, Arduino supports communication via UART, SPI, and I2C protocols. Each Arduino model possesses its own unique features and physical design. It's crucial to select the appropriate board model for your specific needs. An example of an Arduino board is illustrated in Figure 1-1. Figure 1-1. Arduino UNO R3 board One of the benefits of using an Arduino board is its user-friendliness. You won't have to engage in soldering electronic components, as the Arduino board is preassembled and readily usable. Simply connect sensor and actuator devices to the board using jumper cables. In this segment, we will delve into the different Arduino boards offered by both Arduino LLC and Arduino SRL, each with its own distinctive features. To make the most of your Arduino board, it's essential to identify and comprehend the specific Arduino model you are working with. I will present a range of Arduino models categorized by complexity and intended applications. Let's embark on our exploration of Arduino boards. Arduino Boards for Beginners I suggest the Arduino UNO board for individuals interested in learning Arduino programming. It serves as a versatile development board with support for various Arduino shields. Additionally, it's commonly featured in tutorials and books as the go-to experimental platform. The Arduino UNO offers a comprehensive range of I/O protocols, including digital and analog I/O, SPI, UART, and I2C/TWI, making it well-suited for interfacing with sensors and actuators. Moreover, it's readily available and accessible for purchase. Figure 1-2. Arduino UNO board from Arduino LLC Arduino Boards for Advanced Users In certain situations, there is a need to enhance the input/output capabilities of your circuit board or to troubleshoot your programs. The Arduino MEGA 2560 board offers a larger number of I/O pins, approximately 54 in total, and features an advanced microcontroller unit (MCU) designed to boost program performance. This board is powered by the Atmega 2560 MCU with an internal flash memory capacity of 256 KB. Additionally, the Arduino MEGA 2560 board is equipped with two UARTs. More information about this board can be found at the following links: - Official Arduino website: https://www.arduino.cc/en/Main/ArduinoBoardMega2560 - For the Arduino MEGA 2560 from Arduino SRL, you can find details at: http://www.arduino.org/products/boards/arduino-mega-2560. For a visual representation of the Arduino MEGA 2560 board, please refer to Figure 1-3. Figure 1-3. Arduino MEGA 2560 Many Arduino boards lack a built-in debug chip, so if you wish to debug your program, you will need to incorporate an extra debugging tool. Fortunately, you can utilize the Arduino ZERO board from Arduino LLC (available at https://www.arduino.cc/en/Main/ArduinoBoardZero) and the Arduino M0 PRO board from Arduino SRL (accessible at http://www.arduino.org/products/boards/arduino-m0-pro) for debugging without the need for additional tools. These boards are equipped with Atmel's Embedded Debugger (EDBG), which can be used for debugging purposes. I recommend utilizing these Arduino models if you have concerns about debugging without additional tools. An illustration of a form of the Arduino Zero board is displayed in Figure 1-4. Figure 1-4. Arduino ZERO Arduino for Internet of Things Today, the term "the Internet" is commonly employed to describe the means of remotely accessing data. It enables data retrieval from virtually any device and any location. When considering Arduino, the ability for our boards to connect to the Internet proves highly advantageous. Picture this: your boards are capable of detecting physical objects and transmitting this information to your smartphone. This becomes a reality when our boards are connected to the Internet. There exists a variety of options for integrating network modules into Arduino shields, which facilitate the connection of Arduino boards to the Internet. In essence, this means you may need to acquire supplementary modules to establish Internet connectivity for your boards. Thankfully, several Arduino board models come equipped with built-in network modules. In the subsequent discussion, we will explore some Arduino board models with this Internet connectivity capability. One such model is the Arduino UNO WiFi, which is essentially an Arduino UNO board featuring an additional chip, the ESP8266. This chip serves the dual purpose of connecting to pre-existing WiFi networks and functioning as an access point (AP) node. The Arduino UNO WiFi is manufactured by Arduino SRL, and its physical form is depicted in Figure 1-5. To access more detailed information about the Arduino UNO WiFi, you can visit the following website: http://www.arduino.org/products/boards/arduino-uno-wifi. Figure 1-5. Arduino UNO WiFi The Arduino/Genuino MKR1000 is a compact development board created by Arduino LLC, specifically tailored for IoT applications. Powered by the ATSAMW25 System-on-Chip (SoC), this board combines the SAMD21 Cortex-M0+ processor, the WINC1500 WiFi module, and the ECC508 CryptoAuthentication, making it well-suited for IoT connectivity, including seamless access to cloud servers. For more in-depth information on the Arduino/Genuino MKR1000, you can refer to the official documentation at https://www.arduino.cc/en/Main/ArduinoMKR1000. As depicted in Figure 1-6, this board boasts a small form factor. Figure 1-6. Arduino/Genuino MKR1000 Many Arduino boards are compatible with a real-time operating system (RTOS) environment. The Arduino YUN, in particular, is a unique board that combines a microcontroller unit (MCU) and a WiFi MCU, which operates on the OpenWrt Linux system, known as Linino OS. This board essentially functions as a compact computer with a Linux operating system, allowing you to oversee the Arduino MCU ATmega32u4 from the Linux environment. Furthermore, it is possible to interact with the Linux API directly from your Arduino program. The Arduino YUN board is equipped with built-in WiFi and Ethernet modules, making it well-suited for various Internet of Things (IoT) applications. In Figure 1-7, you can see an illustration of the Arduino YUN board. To explore and purchase this board, please visit the following website: http://www.arduino.org/products/boards/arduino-yun. Figure 1-7. Arduino YUN If you need an Arduino board that comes with Bluetooth Low Energy (BLE) connectivity, you might want to explore the Arduino/Genuino 101 board, as depicted in Figure 1-8. This particular board is equipped with an Intel Curie microcontroller that includes an integrated BLE module. It allows you to wirelessly control and communicate with the board using Bluetooth from your smartphone, whether it's an Android or iPhone device. Figure 1-8. Arduino/Genuino 101 Arduino-Compatible In general, the original Arduino board is relatively costly. If you are concerned about the price while embarking on your Arduino learning journey, you have the option of purchasing an Arduino-compatible board. It's worth noting that Arduino makes its designs and schematics available through an open-source project, enabling us to create our own Arduino-compatible board without explicitly using the "Arduino" name. Typically, these Arduino-compatible boards are produced by third-party companies. This section will explore various Arduino-compatible boards available in the market. One such example is the SparkFun RedBoard, which is an Arduino-compatible board manufactured by SparkFun. This board shares a similar form factor with the Arduino UNO board and is powered by an ATmega328 microcontroller with the Optiboot (UNO) Bootloader pre-installed. To facilitate development, you can utilize the Arduino IDE to write Sketch programs and then upload them to the RedBoard. If you are interested in acquiring the SparkFun RedBoard, it is available for purchase at https://www.sparkfun.com/products/12757. You can view the SparkFun RedBoard in Figure 1-9. Figure 1-9. SparkFun RedBoard The Really Bare Bones Board (RBBB) is an Arduino-compatible board created by Modern Device. Unlike some other boards, the RBBB doesn't come with an integrated serial module. To program it using a Sketch, you'll require a separate serial tool, like an FTDI cable. You can see an image of the RBBB board in Figure 1-10. For more details and the option to purchase this board, visit https://moderndevice.com/product/rbbb-kit/. Figure 1-10. Really Bare Bones Board (RBBB) Feather is a line of Arduino development products offered by Adafruit. One of the Feather board variants is the Adafruit Feather 32u4 Adalogger, which includes a MicroSD module for data storage. You can create Arduino programs with the Adafruit Feather 32u4 Adalogger. To explore more details and purchase this board, visit https://www.adafruit.com/products/2795. Figure 1-11. Adafruit Feather 32u4 Adalogger In the upcoming segment, we'll establish our computer's development environment, employing the official Arduino development application. Setting up Your Development Environment Arduino development offers the advantage of easy setup for a development environment, as it is compatible with various platforms like Windows, Linux, and Mac. This book primarily focuses on the Windows platform and also delves into the utilization of .NET technology to interact with Arduino boards. Your initial step should involve installing the Arduino software. Depending on the type of Arduino module you possess, if you have Arduino boards from Arduino LLC, you can obtain the Arduino software from https://www.arduino.cc/en/Main/Software. For Arduino boards from SRL, the software can be downloaded from this site: http://www.arduino.org/downloads. Once you've downloaded and installed the Arduino software, you can launch the program, and Figure 1-12 displays the Arduino interface from Arduino LLC. Figure 1-12. Arduino IDE You can now connect your Arduino board to your computer. If you're using Arduino boards with ATTiny and ATMega MCUs like the Arduino UNO, there's no need to manually install a driver because the Arduino software has already taken care of it for you. For example, when I connected my Arduino UNO to a Windows 10 computer, I found that the system recognized it as COM5, as illustrated in Figure 1-13. Figure 1-13. Arduino UNO is recognized in Device Manager on Windows 10 To create a .NET application that interacts with Arduino boards, Visual Studio is a necessary tool. If you don't possess a Visual Studio license, you have the option to acquire and install the Visual Studio Express edition from the following web address: https://www.visualstudio.com/vs/visual-studio-express/. For my testing purposes, I employ Visual Studio 2015 with update 2, as depicted in Figure 1-14. Source: Arduino Programming with .NET and Sketch ### LOW-POWER AI SENSOR BOARD FOR MACHINE LEARNING AT THE EDGE Eta Compute has launched an integrated, ultra-low-power AI Sensor Board, the ECM3532 AI Sensor Board, which has been designed for machine learning at the edge. The board was developed to cut the initial phase of smart sensor development through its TENSAI SoC. The low power ECM3532 AI Sensor Board contains almost every function needed for a working prototype. Because of the low power design, the board is able to for months on a single battery cell while performing machine learning algorithms. It integrates two PDM microphones, one pressure and temperature sensor, and one 6-axis MEMS accelerometer and gyroscope. It has a form factor of only 1.4 inch x 1.4 inch. The embedded battery socket and Bluetooth connectivity through ABOV Semiconductor’s A31R118 chip, makes it an ideal asset for IoT deployment and field testing application prototypes. The board’s expansion connector makes it simple to add other RF interfaces. “Our fully integrated ECM3532 AI Sensor Board reduces risk, complexity, and costs for developers creating low power smart sensors and accelerates their time to proof of concept,” said Ted Tewksbury, CEO of Eta Compute. “For the first time, they can rely on a single, fully integrated board complemented by Edge Impulse’s comprehensive SaaS development platform to drive innovative IoT solutions to market.” “Designing low-power devices with embedded machine learning has been a huge challenge,” said Zach Shelby, CEO of Edge Impulse. “The new Eta Compute AI Sensor Board opens up endless application possibilities for developers without compromising on power consumption, and with full support on Edge Impulse we reduce development time to days instead of months.” Read more: LOW-POWER AI SENSOR BOARD FOR MACHINE LEARNING AT THE EDGE ### Ultrasonic Security System This tutorial provides a straightforward guide for crafting a small security device with an Arduino. Step 1: Assemble Materials Step 2: Setup Attach a red wire from the 5V pin on the Arduino to the positive segment of the breadboard. Establish a connection with a black wire from the GND pin on the Arduino to the negative segment of the breadboard. For the components, use the following pins: - Buzzer is connected to pin 7. - On the Ultrasonic Sensor, link Echo to pin 3 and Trig to pin 2. - LEDs are connected as follows: RedLED to pin 4, YellowLED to pin 5, and GreenLED to pin 6. Connect the green wires to the LEDs by joining them in series with the positive side of the LED, while the negative side of the LED should be linked to the negative segment of the breadboard through a 220 ohm resistor. Step 3: Assembly - Breadboard To begin, we'll establish a connection between the 5V and GND pins on the Arduino and the breadboard. As previously noted, ensure that the wire connected to the 5V pin is linked to the positive section of the breadboard, and the wire connected to the GND pin is linked to the negative section of the breadboard. Step 4: Assembly - Ultrasonic Sensor It's time to set up the HC-SRO4 ultrasonic sensor! A useful suggestion is to position the ultrasonic sensor on the far right of the breadboard, ensuring it faces outward. To follow the setup image, establish a connection by attaching the GND pin from the ultrasonic sensor to the negative rail on the breadboard. Then, link the Trig pin on the sensor to pin 2 on the Arduino, and connect the Echo pin on the sensor to pin 3 on the Arduino. Lastly, connect the VCC pin on the ultrasonic sensor to the positive rail on the breadboard. If you encounter any confusion, consult the image above. Step 5: Assembly - LEDs The subsequent action involves linking the LEDs to both the breadboard and the Arduino. If necessary, I strongly advise you to refer back to the setup image in Step 2. Attaching the LEDs is a straightforward process with a lot of repetition involved. Let's commence by connecting the Green LED. To achieve this, connect the anode (the longer leg) to pin 6 on the Arduino using a green wire and link the cathode (the shorter leg) to the negative channel on the breadboard using a 220 ohm resistor. Subsequently, repeat this procedure for the Yellow and Red LEDs. Ensure that you connect the anode (the longer leg) of the yellow LED to pin 5 on the Arduino and the anode of the red LED to pin 6. Upon completing these steps, your configuration should resemble the illustration above. Although resistors are not absolutely mandatory, I highly recommend using them. Step 6: Assembly - Buzzer The final step in setting this up involves linking the buzzer with both the breadboard and the Arduino. This is a relatively straightforward aspect of the entire process. You only need to attach the lengthier pin of the buzzer to pin 7 of the Arduino using a green wire, and then link the shorter pin of the buzzer to the negative rail of the breadboard through a 220-ohm resistor. Using a resistor to connect the shorter pin of the buzzer to the negative rail of the breadboard is strongly recommended. This practice significantly lowers the buzzer's volume and extends its lifespan. Code Ultrasonic Security System 1#define trigPin 2 2#define echoPin 3 3#define LEDlampRed 4 4#define LEDlampYellow 5 5#define LEDlampGreen 6 6#define soundbuzzer 7 7int sound = 500; 8 9 10void setup() { 11 Serial.begin (9600); 12 pinMode(trigPin, OUTPUT); 13 pinMode(echoPin, INPUT); 14 pinMode(LEDlampRed, OUTPUT); 15 pinMode(LEDlampYellow, OUTPUT); 16 pinMode(LEDlampGreen, OUTPUT); 17 pinMode(soundbuzzer, OUTPUT); 18} 19void loop() { 20 long durationindigit, distanceincm; 21 digitalWrite(trigPin, LOW); 22 delayMicroseconds(2); 23 digitalWrite(trigPin, HIGH); 24 delayMicroseconds(10); 25 digitalWrite(trigPin, LOW); 26 durationindigit = pulseIn(echoPin, HIGH); 27 distanceincm = (durationindigit/5) / 29.1; 28 29 if (distanceincm < 50) { 30 digitalWrite(LEDlampGreen, HIGH); 31} 32 else { 33 digitalWrite(LEDlampGreen, LOW); 34 } 35 36 if (distance < 20) { 37 digitalWrite(LEDlampYellow, HIGH); 38} 39 else { 40 digitalWrite(LEDlampYellow,LOW); 41 } 42 if (distance < 5) { 43 digitalWrite(LEDlampRed, HIGH); 44 sound = 1000; 45} 46 else { 47 digitalWrite(LEDlampRed,LOW); 48 } 49 50 if (distanceincm > 5 || distanceinsm <= 0){ 51 Serial.println("Outside the permissible range of distances"); 52 noTone(soundbuzzer); 53 } 54 else { 55 Serial.print(distance); 56 Serial.println(" cm"); 57 tone(buzzer, sound); 58 } 59 60 delay(300); 61} Source: Ultrasonic Security System ### NEW LOW-POWER, GENERAL-PURPOSE LATTICE FPGA FAMILY Lattice Semiconductor has introduced a new general-purpose FPGA family that has been developed to combine high I/O density, low-power, small packages and fast interfaces. The Lattice Certus-NX series provides up to double the I/O density per mm 2 of similar FPGAs, and provides power savings, a small footprint, reliability, and instant-on performance. Devices in the family support PCI Express (PCIe) and Gigabit Ethernet interfaces to provide faster data co-processing, signal bridging, and system control. General-purpose Certus-NX FPGAs are applicable to a wide range of applications, from data processing in industrial equipment to system management in communications infrastructure. The Certus-NX devices are developed on the Lattice Nexus platform using 28 nm FD-SOI process technology. Key Features Of The Lattice Certus-NX FPGA Family Include: Up to 3x smaller form factor. As an example, Certus-NX FPGAs can provide a full PCIe solution in a 36 mm 2 footprint. Using the smallest package available in the family can still deliver double the I/O density per mm 2 of competing FPGAs for better design flexibility.Robust I/O interfacing capability through access to Lattice’s IP library. Notable IP blocks available on Certus-NX include:1.5 Gbps differential I/O with performance that is up to 70 percent higher than competing FPGAs.5 Gbps PCIe, 1.5 Gbps SGMII, and 1066 Mbps DDR3. These IP blocks can be tested on Certus-NX development boards for the fast implementation of interfaces.Strong authentication and encryption – Certus-NX FPGAs support AES-256 encryption with ECDSA authentication for the protection of the devices throughout their whole lifecycles.Up to 4x lower power consumption – Certus-NX FPGAs feature a programmable back bias to allow user-selectable high-performance or low-power operating modes.Instant-on performance – The devices have ultra-fast device configuration from SPI memory that can be up to 12x faster than similar competing FPGAs. Individual I/Os can configure in just 3 ms, and the full-device startup can be achieved in only 8-14 ms depending on device capacity. Read more: NEW LOW-POWER, GENERAL-PURPOSE LATTICE FPGA FAMILY ### ARDUINO PORTENTA H7 FEATURES STM32H747 AND HIGH PERFORMANCE DUAL CORE Arduino boards have been offering “beginner aimed” microcontrollers for a while now. It appeals to hobbyists, engineers, upcoming developers etc. Millions of users and thousands of companies across the world already use Arduino as an innovation platform. In recent times, however, we have seen Arduino products designed majorly for the professional market, like the Arduino’s MKR line of boards aimed at industrial use, and the pro version targeting advanced users. Arduino Portenta is the latest board for heavy duty use. The Arduino Portenta H7 module was announced on CES. It has some similarities to other MKR boards, but the Arduino Portenta H7 board is quite different from other Arduinos. The new Portenta is based on STMicroelectronics’  STM32H747, featuring two cores a Cortex-M7 running at 480MHz, and a Cortex-M4 running at 240MHz. The two cores can operate independently, and run a different sketch. The Portenta can operate at a temperature  of -40° and 85°C. The Portenta enables a graphics engine and enables output either through a DisplayLink (on USB-C) or a Display Serial Interface (DSI). The board features two 80-pin, high-density connectors. This enables the user gain more access to the chip’s functions. The board has a DSI and camera connector, but you will need a carrier board to access it. Additional features include connectivity via Ethernet, WiFi, and Bluetooth, 8MB RAM, 16MB flash, and an NXP SE050C2 crypto chip. The board can be programmed with high-level languages and AI while performing low-latency operations on its customizable hardware. Read more: ARDUINO PORTENTA H7 FEATURES STM32H747 AND HIGH PERFORMANCE DUAL CORE ### FRAMEWORK MOTHERBOARD TURNED CYBERDECK The beauty of a modular ecosystem lies in how it allows individuals to repurpose components in unconventional ways. This is precisely what [Ben Makes Everything] has achieved by using a Framework laptop’s motherboard and battery to create a slab-style cyberdeck. (Video, embedded below.) The Framework motherboard presents an excellent choice for custom portable computer projects due to its relatively compact size and built-in modular I/O port options, all based on USB-C. Framework even released additional documentation to support this use-case. It’s significantly more powerful than the standard Raspberry PI, which is typically employed in similar projects. Ben chose a 2400 x 900 IPS display that can draw power and video through a single USB-C cable. For user input, he opted for an Apple keyboard and an optical trackball with a PS2 interface. He utilized a Arduino Pro Micro as a PS2-to-USB adaptor, using the remaining pins on the Arduino as a versatile interface for electronic projects. The enclosure is crafted from machined aluminum plates with 3D printed spacers to secure all components. The screen can be tilted up to 45 degrees for more ergonomic desktop use. The Framework motherboard is equipped with four USB-C ports for peripheral devices; [Ben] allocated one for the display and another for a USB hub which connects the keyboard, Arduino, and external USB and HDMI connectors. The remaining USB-C ports are still available for original Framework expansion cards. The completed project not only looks fantastic but may also be highly functional. It would have been a great entry in our recent Cyberdeck Challenge. Source: FRAMEWORK MOTHERBOARD TURNED CYBERDECK ### SOM PROVIDES ARM CORTEX-A7 PERFORMANCE IN QFN-STYLE PACKAGE Direct Insight has introduced a QSMP Solder-down module featuring the STMicro ST32M1 single/dual core ARM Cortex-A7 processor. The module has been manufactured by the Direct Insight’s partner, Aachen-based Ka-Ro Electronics. The SOM has been built around an ST32M1 family processor that is powered by a single or dual 650MHz ARM Cortex-A7 core, which is supported by a separate ARM Cortex-M4 operting at 200MHz with up to 512MB of DDR3L RAM and up to 4GB eMMC Flash. The ST chip also offers a wide range of interfaces. The chip has been developed to provide low power operation, combined with security features and high-performance. To boost performance, the ST32M157C can offer a powerful 3D GPU and the integrated security features include secure boot and an AES/TDES/SHA crypto-engine. The QSMP SoM measures 27mm square and is only 2.3mm high. It has been manufactured in a solder-down package that features a QFN-type pin-out that is based on a 1mm pitch with 100 edge-located pads. The SoM has been built this way to assist inspection and simplify routing. It even permits a two-layer baseboard and a base plane. The ground plane design helps the modules ‘float’ into position during reflow, unlike a BGA which requires X-Ray inspection to ensure full connectivity. The QS solder-down modules are small enough to prevent warping. The package’s design also improves thermal efficiency and EMI performance with the base functioning as both a ground pad and a thermal conductor. The modules can operate across the industrial temperature range of -40 or -25 to +85degC. Read more: SOM PROVIDES ARM CORTEX-A7 PERFORMANCE IN QFN-STYLE PACKAGE ### Sensors Guide The intention behind this guide is to furnish valuable insights into the typical sensors employed in the RAD SLDP. It's worth noting that sensors produced by various manufacturers might have slight variations compared to the ones outlined in this guide, but comprehensive documentation for all these sensors can be easily accessed online. If you require further details on Arduino coding, we recommend consulting the Arduino Coding Guide. Gas Sensor EG1004 includes an Adafruit Gas Sensor that exhibits an increase in its analog voltage when it detects gas. While this sensor is capable of detecting various gases, it cannot differentiate or identify the specific gas it has detected. Wiring Please be aware that while the LED in the circuit is optional, it can be useful for testing purposes. Pin Configuration: - VCC: Connect to 5V - Signal: Attach to A0 (or any available analog pin) - GND: Ground connection Programming: Since the Adafruit Gas Sensor operates as an analog sensor, we will utilize the analogRead() function to obtain the analog voltage reading from the sensor. To view the sensor's readings, incorporate a print statement within the loop section of your code. Ensure that you activate the serial monitor by initializing it with the command "Serial.begin(9600)" in the setup section of your code. UV Sensor (GUVA-S12SD) EG1004 offers a GUVA-S12SD UV Light Sensor Breakout, which employs a UV photodiode to generate an analog voltage output that can subsequently be translated into the UV Index. The UV Index scale, established by the EPA, serves as a reference for sun exposure guidance. In Figure 1, you can observe the UV Index scale, and Figure 2 illustrates the connection between voltage, analog values, and the UV Index. Spectral Detection Range: 240nm to 370nm Power Supply: 2.7V to 5.5V Wiring Important: You have the flexibility to connect the sensor to either a 5V or 3.3V power source. Important: You have the flexibility to connect the sensor to either a 5V or 3.3V power source. Pin Configuration: - Positive (+): Connect to either 5V or 3.3V. - Output (OUT): Link to A0 (or any other analog pin of your choice). - Negative (-): Ground connection. Programming: Because the GUVA-S12SD is an analog sensor, you'll employ the analogRead() function to retrieve the voltage reading from the sensor. The initial reading needs to be transformed into a voltage value, and the formula for this conversion varies based on whether you are using a 3.3V or 5V power supply. For a 3.3V power supply, you can use the following formula: Voltage (V) = Reading * (3.3/1024.0) If you are working with a 5V power supply, the formula is as follows: Voltage (V) = Reading * (5.0/1024.0) Please keep in mind that it's crucial to work with decimal numbers in the formula to ensure accurate voltage values. Temperature Sensor (TMP36) The EG1004 module includes an Analog TMP36 temperature sensor. These sensors generate an analog signal based on the voltage variation, which is directly related to temperature. The TMP36 sensors are capable of measuring temperatures within a range spanning from -40°C to 150°F and operate with a power supply voltage in the range of 2.7V to 5.5V. Wiring Instructions: Please note that you can connect the sensor to either the 5V or 3.3V power pins. Pins VCC: 3.3V or 5V Signal: A0 (or any analog pin) GND: ground Code Given that the TMP36 is an analog sensor, we'll utilize the analogRead() function to retrieve the voltage reading from the sensor. The initial reading obtained needs to be transformed into voltage, and the specific formula for this conversion depends on whether you are utilizing a 3.3V or 5V power supply. For a 3.3V power supply, you can use the formula: Voltage (mV) = reading * (3300.0/1024.0) For a 5V power supply, the formula is: Voltage (mV) = reading * (5000.0/1024.0) Here's an illustrative example of how to code this formula for a 5V power supply. It's crucial to note that the numbers should be in decimal form to ensure accurate temperature values. To conclude, you'll need to convert this voltage value into Celsius using the formula below: Temperature (Celsius) = (Voltage (mV) - 500.0) / 10.0 Here's an example of implementing this formula in code. Once more, please observe the use of decimal formatting for the numerical values. Pulse Sensor EG1004 includes an ANMBEST Pulse Sensor, which is an optical heart rate sensor (PPG) specifically created for use with Arduino. This sensor utilizes an ambient light sensor to detect variations in reflected light caused by the movement of blood through tissue. By establishing a predefined threshold, the Arduino can monitor the analog signal coming from the sensor. Once the signal surpasses the threshold, it signifies the detection of a heartbeat. After the signal falls below the threshold, the Arduino will remain in a state of readiness for the signal to once more exceed the threshold, signifying the presence of another heartbeat. Voltage Range: 3V to 5V Wiring Pins - GND (black wire): Corresponds to Ground - VCC (red wire): Operates at 5V - Signal (purple/pink wire): Connected to A0 (or any other analog pin) Code Library Installation To make use of the sensor, you need to install the PulseSensorPlayground Library in the Arduino IDE. Here's how to get the library: 1. Launch the Arduino IDE. 2. Navigate to Tools >> Manage Libraries. 3. Search for "PulseSensor Playground." 4. Click on "Install." Library Inclusion The PulseSensor Playground library supplies all the necessary functions and methods for sensor interaction. To access these functions, you must include the library at the beginning of your Arduino code. This can be achieved with the following code snippet: ### STAGE LIGHTING HACK KEEPS LA BOHÈME FROM BECOMING A DUMPSTER FIRE With all due respect to the Utah Opera’s production of La bohème, we just couldn’t resist poking a little fun at master electrician [David Smith]’s quick lighting hack for the opera. And who knew an opera from 1896 would need a garbage can fire? Live and learn. In what appears to be a case of “The show must go on,” [David] was called on to improve an existing fire effect for one scene in the opera, which was reportedly a bit “artificial and distracting.” This is a pretty common problem in live productions of all types; it’s easy to throw light at a problem, but it’s often hard to make it both convincing and unobtrusive. Luckily, he had both the time to come up with something, and a kit full of goodies to make it happen. A balled-up strip of Neopixels provided the light, with an Arduino running some simple code to randomize the intensity and color of the RGBs. [David] stuck with the warm white, red, and green colors, to keep the color temperature about right for a fire, and drove the LEDs with a couple of MOSFETs that he keeps in his kit to fix busted dimmer packs. The overall effect worked well, but the holes knocked in the side of the greatly abused garbage can let too much light out, making the effect distracting on stage. The remedy was simple: a cylinder of printer paper surrounding the LED tape. The paper not only acted as a diffuser but held the tape in place inside the can. The electrical crew ran two circuits to the can — one to keep the Arduino running throughout the show, and one to power the LED tape. The former made sure the audience didn’t see the microcontroller boot sequence, and the latter gave the electrician a way to control the effect from the dimmer console. The brief video below shows it in action during a rehearsal. Hats off to [David] and the whole crew for the stagecraft heroics and for getting this thrown together so quickly. Source: STAGE LIGHTING HACK KEEPS LA BOHÈME FROM BECOMING A DUMPSTER FIRE ### SE-DPIN: 16 TO 256 CHANNEL I/O CARD FOR PXIE AND ATE INSTRUMENTS Salland Engineering delivers over 28 years of services to develop and build custom ATE instruments for the semiconductor industry. CEO, Paul van Ulsen said; “Building high density instruments is always about finding the right balance between performance, density/throughput within the right available power and cooling at the right cost per channel.“ To address these challenges, Salland decided to design the Instrument IP themselves. This enables customers to benefit from proven and available building blocks to achieve high performance and very high density at the right cost.Salland’s ‘’off-the-shelf’’ custom OEM instrument solutions allow customers to build ATE instruments at a fraction of the cost and at minimal risk. In this respect Salland follows a similar approach as Elevate, building standard solutions for custom applications. Salland’s latest proof of concept is a scalable 200MHz DPin IO technology based on ElevATE’s Mystery Octal SOC ASIC. This is a 64ch PXIe card with 8 Mystery ICs onboard featuring: 64 (/32)-channel, 200MHz/up to 500Mbps Digital I/O card in PXIe formatBased on ElevATE Mystery ASIC and a FPGA based timing generatorScalable architecture in blocks of 16 channels up to 256+Technology can be used in all kind of form-factors; modules, ATE, PXIe, etc. With the Mt. Mystery ASIC, Salland was able to dramatically increase channel count and speed in an air-cooled solution designed to fit into the strict power/space requirements for a PXIe card. Read more: SE-DPIN: 16 TO 256 CHANNEL I/O CARD FOR PXIE AND ATE INSTRUMENTS ### ARDUINO-CONTROLLED COIL WINDER Coil winders are a popular project because doing the deed manually can be an incredibly tedious and time consuming task. After building one such rig, [Pisces Printing] wanted to find even further time savings, and thus designed an improved, faster version. At it’s heart, it’s a straightforward design, using a linear rail and a leadscrew driven by a stepper motor. Control is via an Arduino Nano, with a few push buttons and a 16 x 2 LCD display for user feedback. Often, completing a first build will reveal all manner of limitations and drawbacks of a design. In this case, the original winder was improved upon with faster stepper motors to cut the time it took to wind a coil. A redesigned PCB also specified a better buck converter power supply to avoid overheating issues of the initial design. A three-jaw lathe-style chuck was also 3D printed for the build to allow easy fixing of a coil bobbin. Designing custom tools can be highly satisfying in and of itself, beyond the productivity gains they offer. Video after the break. Source: ARDUINO-CONTROLLED COIL WINDER ### SPINNING UP A NEW LAUNDRY MONITOR For all that modern washers and dryers do, they don’t let you know when they’re finished. Or they do, but it’s only a short victory song that plays once and can be easy to miss. What most of us need is a gentle reminder that there’s damp laundry festering in the washer, or fresh laundry in the dryer getting wrinkly. This laundry monitor from [Sparks and Code] is version 2.0. The first version was working fine, but it was based on vibration (or lack thereof). Fast forward a few years, and [Sparks and Code] got a modern pair that’s so finely tuned, it doesn’t produce enough vibration to register. Back to the drawing board [Sparks and Code] went, and eventually came up with version 2.0. Now, [Sparks and Code] is detecting whether the machines are on using a pair of split-core transformers to monitor power at the breaker box. With these, you just run the wire through the hole, and it gives the relative mV value going through the wire on a 3.5mm cable. Those cables are connected to an ESP32 inside the 3D-printed box, which is mounted above the cabinet door. Since [Sparks and Code] already has home assistants all over the house, it was easy to integrate and have them all play the message ‘please flip the laundry’. Once this project was all buttoned up, they thought of one issue — the self-cleaning cycle. Since it takes about four hours, they like to run it overnight. You can see the problem here — no one wants to hear Alexa at 3AM. Fortunately, [Sparks and Code] was able to adjust the Python script to ignore these events. Be sure to check out the build video after the break. If only the dryer could empty itself and fold the clothes. Oh wait, there’s a robot for that. Source: SPINNING UP A NEW LAUNDRY MONITOR ### 17 Cool Arduino Project Ideas for DIY Enthusiasts Arduino is a versatile platform that seamlessly integrates open-source software and hardware, enabling individuals to effortlessly develop interactive projects. You can acquire single board computers compatible with Arduino and employ them to craft practical inventions. Beyond the hardware, proficiency in the Arduino language and utilization of the Arduino IDE are essential for successful project creation. You have the option to code through a web editor or employ the Arduino IDE in an offline capacity. Regardless of your choice, there are official resources readily available to help you master Arduino. Now that you have a grasp of the fundamentals, I'll introduce some of the most compelling Arduino projects. You can either try your hand at building them as they are or tailor them to bring your unique ideas to life. Interesting Arduino project ideas for beginners, experts, everyone The listed projects require different additional hardware components. Be sure to visit the official link to these projects, originally featured on the official Arduino Project Hub, for more details. It's essential to mention that these projects aren't prioritized in any specific order. You're welcome to choose the one that appeals to you the most. 1. LED Controller Are you in search of uncomplicated Arduino ventures? Well, here's a straightforward one for you. This project is one of the simplest and allows you to manage LED lights. You don't need to invest in pricey LED gadgets to adorn your room or for any other purpose. Instead, you can create an LED controller and tailor it for your specific needs. This endeavor involves using the Arduino UNO board and a few additional components, including an Android phone. For more details, you can explore the project by following the link provided below. 2. Hot Glue LED Matrix Lamp Here's another engaging Arduino LED project for you. In our exploration of using LEDs for decorative purposes, we can delve into crafting a visually appealing LED lamp. To embark on this project, it's essential to have a 3D printer at your disposal. Additionally, the primary materials required include an LED strip and an Arduino Nano R3. After you've successfully 3D printed the lamp's casing and assembled its components, the remaining steps involve affixing the glue sticks and resolving the wiring. While this may seem straightforward in description, you can delve deeper into the intricacies of the project by visiting the official Arduino project feature site for a more comprehensive guide. 3. Arduino Mega Chess Interested in having your very own digital chessboard? Absolutely doable! The key components you'll require include a TFT LCD touchscreen display and an Arduino Mega 2560 board. If you happen to have access to a 3D printer, you can craft a stylish casing and customize it as needed. For some inspiration, be sure to explore the initial project. 4. Enough Already: Mute My TV This is a fascinating project. While I won't debate its practicality, it offers a unique solution for those bothered by specific TV celebrities or personalities. With this system, you can effortlessly silence their voices whenever they appear on TV. In its early testing phase, this technology was employed in a time when streaming services weren't as prevalent. You can gain a better understanding by watching the video above and attempting to replicate it, or you can explore further details by following the provided link. 5. Robot Arm with Controller If you're looking to have both automated functionality and manual control over your robot, building a robot arm with an Arduino UNO controller is a highly practical Arduino project. This project involves creating a robot arm, and you can enhance its versatility by crafting a customized case using a 3D printer. This robot arm can be applied to a wide range of use cases. For example, it can be utilized for tasks like cleaning up garbage or other activities where direct intervention isn't desirable. 6. Make Musical Instrument Using Arduino I've come across numerous musical instruments created with Arduino, and if you're seeking something unique, the internet is a fantastic resource to explore. To replicate this project, you'll require a Pi Supply Flick Charge and an Arduino UNO. This is an exciting Arduino endeavor that allows you to transform the simple act of tapping and waving your hand into musical sounds. Moreover, it's not a complex project, so you're bound to enjoy the process of creating it. 7. Pet Trainer: The MuttMentor Get ready to be thrilled by an innovative pet training solution powered by Arduino! The project employs the Arduino Nano 33 BLE Sense and harnesses the power of TensorFlow to create a compact neural network that understands your pet's typical behaviors. As a result, a buzzer provides positive reinforcement when your pet follows your instructions. This versatile concept can be customized to suit your specific needs. Explore the particulars in the following section. 8. Basic Earthquake Detector Typically, we rely on government authorities to provide earthquake statistics and warnings. However, by using Arduino boards, you can easily construct a simple earthquake detector and access real-time data independently. Click the button below to discover the necessary information to create one yourself. 9. Security Access Using RFID Reader As the project suggests, RFID tagging is an identification system employing compact radio frequency identification technology. In this particular endeavor, you'll be crafting an RFID reader with Arduino and integrating it with an Adafruit NFC card to bolster security access. To explore all the intricate details, simply click the button below, and please don't hesitate to share your experiences with its functionality. 10. Smoke Detection using MQ-2 Gas Sensor This Arduino project has the potential to be among the top choices for DIY enthusiasts. You don't have to invest heavily in purchasing smoke detectors for your residence; a homemade solution can serve the purpose to a certain extent. Unless you require a sophisticated and fail-safe setup in combination with your smoke detector, a simple and cost-effective solution should suffice. Moreover, you can explore additional uses for the smoke detector in various applications. Source: 17 Cool Arduino Project Ideas for DIY Enthusiasts ### The Arduino CLI just got some new exciting features The arduino-cli tool just got some new exciting features with the release of 0.11.0: Command-line completionExternal programmer supportInternationalization and localization support (i18n) Command-line completion Finally, the autocompletion feature has landed! With this functionality, the program automatically fills in partially typed commands by pressing the tab key. For example, with this update, you can type arduino-cli bo: And, after pressing the key, the command will auto-magically become:  There are a few steps to follow in order to make it work seamlessly. We have to generate the required file — to do so, we have added a new command named “completion.”  To generate the completion file, you can use: By default, this command will print on the standard output (the shell window) the content of the completion file. To save to an actual file, use the “>” redirect symbol. Now you can move it to the required location (it depends on the shell you are using). Remember to open a new shell! Finally, you can press to get the suggested command and flags. In a future release, we will also be adding the completion for cores names, libraries, and boards. Read more: The Arduino CLI just got some new exciting features ### SIMPLE CIRCUIT KEEPS PROCESS CONTROL LOOPS IN TUNE Spare a moment’s pity for the process engineer, whose job it is to keep industrial automation running no matter what. These poor souls seem to be forever on call, fielding panicked requests to come to the factory floor whenever the line goes down. Day or night, weekends, vacations, whatever — when it breaks, the process engineer jumps. The pressures of such a gig can be enormous, and seem to have weighed on [Tom Goff] enough that he spent a weekend building a junk bin analog signal generator to replace a loop calibrator that he misplaced. Two process control signaling schemes were to be supported — the 0 to 10 VDC analog signal, and the venerable 4-20 mA current loop. All that’s needed for both outputs is an Arduino and an LM358 dual op-amp, plus a few support components. The 0-10 V signal starts as a PWM output from the Arduino, with its 0-5 V average amplified by one of the op-amps set up as a non-inverting amp with a gain of 2. With a little filtering, the voltage output is pretty stable, and swings nicely through the desired range — see the video below for that. The current loop output is only slightly more complicated. An identical circuit on a separate Arduino output generates the same 10 V max output, but a code change limits the low end of the range to 1 V. This output of the op-amp is fed through a 500-Ω trimmer pot, and the magic of Ohm’s Law results in a 4-20 mA current. The circuit lives on a piece of perf board in a small enclosure and does the job it was built for — nothing fancy needed. And spoiler alert: [Tom] found the missing loop calibrator — after he built this, of course. Isn’t that always the way? Source: SIMPLE CIRCUIT KEEPS PROCESS CONTROL LOOPS IN TUNE ### NOBLE GRAPHS: DISPLAYING DATA WITH NEON LIKE ITS 1972 In the days before every piece of equipment was an internet-connected box with an OLED display, engineers had to be a bit more creative with how they chose to communicate information to the user. Indicator lights, analog meters, and even Nixie tubes are just a few of the many methods employed, and are still in use today. There are, however, some more obscure (and arguably way cooler) indicators that have been lost to time. [Aart Schipper] unearthed one such device while rummaging around in his father’s shed: a pair of Burroughs Bar Graph Glow-Transfer Displays. These marvelous glowing rectangles each have two bars (think the left and right signals on an audio meter, which is incidentally what they were often used for), each with 201 neon segments. Why 201, you may ask? The first segment on each bar is always illuminated, acting as a “pilot light” of sorts. This leaves 200 controllable segments per channel. Each segment is used to “ignite” its neighboring segment, something the manufacturer refers to as the “Glow-Transfer Principle.” By clever use of a three-phase clock and some comparators, each bar is controlled by one analog signal, keeping the wire count reasonably low. Don’t get us wrong, the warm, comforting glow of Nixie tubes will always have a special place in our hearts, but neon bar graphs are just hard to beat. The two do have a similar aesthetic though, so here’s hoping we see them used together in a project soon. Source: NOBLE GRAPHS: DISPLAYING DATA WITH NEON LIKE ITS 1972 ### 5 Factors You Must Check When Admitting Your Child To A New School Introduction Finding the ideal school for a child must be a top priority for parents, but it doesn't have to be difficult. Firstly, you need to consider some of the basic factors. These factors will only put the names of the schools on your list. These factors are as follows: Budget. Distance from home. Transportation from your home. You can find this basic information from the following sources: Speaking with dependable relatives and friends. Finding a parent support organization. Visiting different school websites around your locality. However, beyond these factors, there are a number of considerations that you must take into account. Therefore, this guide will help you find the right questions to clarify before selecting the perfect school for your child. So keep reading! Things You Need To Consider When Selecting A School Below are some of the major factors that greatly influence your child's future and academic excellence— 1. Reputation Of The School Your child's perception of the school and their parents is greatly influenced by the school they attend. As a result of the school's reputation, people may assume that its pupils are all-academic and uninterested in extracurricular activities. It's critical to look at the school's national ranking, connections, accreditations, and the academicians connected to it to comprehend how the general public views the institution. This will give you a better picture of the school's reputation in the neighborhood and its kids and parents. 2. Finding A Culturally Fit School An important factor you need to consider before admitting your child to a new school is whether the place is culturally fit for your family. Therefore, you must evaluate the following factors to establish cultural relevance: The school's social-emotional learning curriculum. Behavioral expectations. Entitlement culture. Parental participation in neighborhood projects. Policies on bullying. Screen time. Inclusive practices. Sustainability. You can consider admitting your child to an international school. These schools conduct an extremely inclusive environment. Moreover, they have an amazingly fitting culture that helps students adapt to any place when they must move out or change schools. By studying these criteria, you can better comprehend the school's dedication to their child's achievement and well-being. 3. Qualification Of The Teachers Teachers have a big impact on a kid's personality and mental growth. The learning process for a youngster can be significantly impacted by their credentials, teaching strategies, and approaches. To promote growth and development, teachers should also foster a nurturing environment. They should be informed about societal concerns, including patriarchal norms, sexual education, gender identity, etc. Teachers who are informed and open-minded about these subjects can foster an environment where kids feel free to express themselves. Their knowledge of these subjects can assist in addressing any queries or worries, promoting a more well-rounded education. Therefore, evaluating teachers to ensure your child is learning in a favorable setting is essential. 4. Safety And Security Measures For Students Put safety first while selecting a school. A safe atmosphere is as important as a well-rounded educational setting for a child's well-being and development. Therefore, you must look for schools with emergency procedures, trained staff, surveillance systems, and other security features. Examine the school's resources, policies, oversight, background checks, and approval for after-school pick-up. Think about the type of security system, such as CCTV cameras and security guards. Look for emergency response plans and drills to prepare pupils for potential disasters. Ask about the school's visitor access policy and identification requirements to ensure that only people with permission can enter the building. Thus, a well-rounded school prioritizes safety, well-trained staff, and emergency procedures to guarantee a happy learning environment for parents and students. 5. Extracurricular Activities Practices And Encouraged In The School Children need extracurricular activities to have a well-rounded education because they can pursue their interests, learn new skills, and interact with peers outside the classroom. Participating in these activities can improve academic performance and self-confidence. While doing sports is important, creative students can also benefit from participating in book, debate, painting, or poetry clubs. These activities provide social connection, a break from screen time, and the growth of critical thinking, creativity, and collaborative abilities. Students can find their passions and talents by pursuing various interests and hobbies, promoting a more balanced education and personal development. Pick The Best For Your Child Success at a school may depend on various things, including academics and extracurricular activities like sports, the arts, student government, faculty, and community involvement. While having strong academics is important, personality development is as important. For a school to be successful, its mission and goals are essential. To carry out the school's mission and philosophy, teachers are essential. Instead of focusing primarily on language competency, teacher proficiency tests should consider traits like kindness, empathy, and the ability to form ties with students. ### BUILDING A CHAOTIC OSCILLATOR FROM COMMON COMPONENTS Sometimes you find things you have not even been looking for… A chaotic oscillator is an electronic circuit that can exhibit “chaotic“, nonperiodic behavior. A commonly cited example is Chua’s circuit, but there are many others. I always regarded these as carefully designed, rather academic, examples. So I was a bit surprised to observe apparently chaotic behavior in a completely unrelated experiment. A while ago a took an interest in recreating an ancient logic style based on discrete transistors, resistor-transistor-logic (RTL), with todays components. I discussed some of my findings earlier and continued to work on transistor selection and circuit optimization afterwards in collaboration with Yann from Hackaday TTLers. The tool of choice to evaluate the switching speed of different logic gate designs is to build ring-oscillators from chains of inverters. One random variation I tried, was to use LEDs in series with the base of the transistor. In combination with PMBT3904 transistors, this surprisingly yielded an oscillator that switched between frequencies that were several orders of magnitude apart when varying the supply voltage. A closer look revealed a region with unpredictable behavior close to the switching voltage. You can find the chronological investigation, including my (limited) understanding of the principles, in this log entry. One question of interest was how easy it is to recreate these results. Was it just a random fluke? It turns out, it is extremely simple. Read more: BUILDING A CHAOTIC OSCILLATOR FROM COMMON COMPONENTS ### Awesome Arduino Projects for Engineers and Students Are you in search of intriguing and innovative Arduino project ideas? Look no further! Below, you'll find an assortment of captivating and distinctive project concepts that can be pursued with Arduino. These projects span a broad spectrum of applications, including home automation, the creation of smart gardening systems, robot construction, IoT device design, and even the development of wearable technology. These Arduino projects are suitable for both newcomers and seasoned creators, offering an excellent opportunity to acquire skills in programming, electronics, and creative problem-solving. Previously, we delved into over 45 mini-projects, but this time, let's dive into Arduino projects that are distinct and remarkable. Unleash your creativity and breathe life into your concepts with these captivating Arduino projects! 1. Automated Washroom Light Using IR Sensors The basis of this project lies in the combination of an Arduino Uno and IR sensors, which facilitates the automatic control of a washroom's light powered by AC mains. As soon as someone enters the washroom, the light source, whether it's a bulb or a tube light, will be activated automatically. Conversely, when the person exits the washroom, the light will promptly deactivate. For detailed instructions on how to create this project, you can refer to the comprehensive step-by-step guide titled "Arduino-based Automated Washroom Light Using IR Sensors. 2. Joystick-Controlled Industrial Automation System With the aid of a joystick and an Arduino Nano board, this project has the capability to manage as many as four industrial electrical devices. You can access the details of this Arduino project on the "Make This Joystick-Controlled Industrial Automation System" page. 3. Arduino Based Real-Time Digital Clock With Temperature Display Here is an alternative phrasing: "In this project, you'll learn how to create a real-time clock (RTC) that also displays the temperature. This DIY clock utilizes an Arduino, a DS3231 RTC chip, and an SSD1306 OLED display with a resolution of 128x64 pixels. For detailed instructions, follow our step-by-step guide: 'Building an Arduino-Based Real-Time Clock with Temperature Display. 4. Smart GPS Tracker Using Arduino This project involves creating a smart tracking system capable of monitoring a child's whereabouts. Additionally, the device has broader applications for tracking vehicle locations and other objects. For comprehensive project details, please refer to our resource on the Arduino-based GPS Tracker. 5. Flash Twenty LEDs Using Arduino Here is a circuit that operates twenty LEDs in a random sequence. The circuit incorporates a microchip to control the rate of random flashing for the LEDs. You can find the full circuit connection details in the following resource: "Flashing Twenty LEDs with Arduino. 6. Alarm Clock Radio Using Arduino In this project, we'll guide you through the creation of an Arduino-based alarm clock radio. The key highlight of this project is its ability to not only display the current date and time but also set alarms for specific times, with the added functionality of a radio. For comprehensive project details, please refer to: "Arduino-Based Alarm Clock with Radio – Complete Project Guide. 7. Arduino-Based Wireless Frequency Meter This project introduces a wireless frequency meter based on Arduino, created to gauge the frequency of sinusoidal AC signals within the 50Hz to 3kHz range. You can access the complete project details here: "Constructing an Arduino-Based Wireless Frequency Meter. 8. Arduino-Based Window Alarm Annunciator Featured here is a window alarm annunciator system constructed around an Arduino Uno board. Annunciators find primary utility in process plants, power generation facilities, and industrial settings, serving as a means to monitor diverse plant conditions and promptly notify operators of any anomalies or parameter deviations. Create an Alarm Annunciator for Windows Using Arduino Uno 9. Noise Detector with Automatic Recording System The Noise Detector System, featured in the "Noise Detector with Automatic Recording System Using Arduino With IoT" project, can serve as a valuable tool in environments like libraries, offices, and classrooms. Its primary function is to identify individuals who are creating excessive noise, enabling appropriate measures to be taken in response. 10. Temperature-Based Fan Speed Control and Monitoring Using Arduino This project involves the automation of fan speed control and monitoring. It adjusts the electric fan's speed based on specific requirements using an Arduino microcontroller. You can find this project titled "Temperature Based Fan Speed Control and Monitoring Using Arduino. 11. ESP8266 Wireless Web Server This ESP8266-based wireless web server project is built around an Arduino. The ESP8266 is equipped with an integrated 32-bit low-power CPU, along with ROM and RAM. It serves as a comprehensive, self-contained Wi-Fi network solution capable of hosting software applications independently or in conjunction with a microcontroller (MCU). You can find this project under the name "ESP8266 Wireless Web Server. 12. Digital IC Tester With Embedded Truth Table In this article, we introduce an Arduino-powered digital IC tester that combines high capability, reliability, and cost-effectiveness. We've created a versatile program with various functions for testing different integrated circuits (ICs). You can access the complete project details for this Digital IC tester, complete with the embedded truth table, at the following location: [Link to Digital IC tester with the embedded truth table]. 13. Arduino Based RF Controlled Robot Introducing an uncomplicated Arduino-powered robot controlled via RF (Radio Frequency) for remote operation. This robot can be assembled inexpensively and swiftly. The RF remote control offers the added benefit of an extensive control range (up to 100 meters when equipped with suitable antennas) and is omnidirectional in its functionality. You can access this project and its details on our page titled "Arduino-Based RF-Controlled Robot. 14. Fancy Lights Controller The featured fancy lights controller is designed using the Arduino, an open-source single-board microcontroller that is readily available in pre-assembled hardware. The circuit itself is a compact and versatile digital light controller with four channels, capable of operating in various modes. It requires only a minimal number of external components. The controller orchestrates the illumination of four LEDs, creating a variety of sequences and patterns under the command of the Arduino board. You can find more details about this project on the "Fancy Lights Controller" page. 15. PC-based Oscilloscope In this guide, we'll explain how to create a budget-friendly oscilloscope using your personal computer and an Arduino board for signal acquisition. This DIY oscilloscope is capable of capturing frequency signals of up to 5kHz. The core component of this oscilloscope is the Arduino board, which reads data from its built-in analog-to-digital converter (ADC) and transfers it to your PC through a USB connection. You can find the full project details for this PC-based oscilloscope at [link to project]. 16. Humidity & Temperature Monitoring For newcomers in the realm of Internet of Things (IoT), working with Arduino microcontrollers (MCUs) can be a straightforward and enjoyable experience. This article delves into the domain of humidity and temperature monitoring through Arduino. The project entails the utilization of the DHT-11 Humidity and Temperature sensor to collect data, which is then visually represented on the ThingSpeak platform. To achieve this, the Arduino MCU is combined with an ESP8266 Wi-Fi module. You can access this project by visiting the "Humidity & Temperature Monitoring" link. Source: Awesome Arduino Projects for Engineers and Students ### CHUWI LARKBOX WORLD’S SMALLEST 4K MINI PC Ultra-small Size/Intel J4115 Processor/6GB RAM/128GB ROM/4K Video Output/Ultra-silence Cooling Fan Due to its super compact size, Larkbox is fantastic for a desk where space is scarce. What’s more, it can be taken anywhere in your bag, enabling you to work anywhere without the need to switch devices. To make this even easier, we made Larkbox super lightweight so you won’t even notice you’re carrying it. Unlike a traditional PC that can weigh upwards of 5KG, Larkbox is designed as the ultimate ease of use PC. Ultra-small form factor and lightweight design ensure that Larkbox is never a burden to your daily life. LarkBox Can Do More Than Your Everyday Desktop PC. Doesn’t occupy large amounts of space.Powerful functionality.Great as an office or home PC.4K output for a great visual experience.Ideal for home theatres, digital signage, projectors, and monitoring.Less extra heat while lowering operating costs​. mall, yet with decent power Despite its size, Larkbox packs a mighty punch. This opens up endless use cases for Larkbox. Due to the form factor, Larkbox is fantastic for POS and digital signage, kiosks, and CCTV systems. The options for Larkbox are endless, small, and powerful enable it to complete all manner of tasks, anywhere, with ease. Read more: CHUWI LARKBOX WORLD’S SMALLEST 4K MINI PC ### FULL SELF-DRIVING, ON A BUDGET Self-driving is currently the Holy Grail in the automotive world, with a number of companies racing to build general-purpose autonomous vehicles that can get from point A to point B with no user input. While no one has brought one to market yet, at least one has promised this feature and had customers pay for it, but continually moved the goalposts for delivery due to how challenging this problem turns out to be. But it doesn’t need to be that hard or expensive to solve, at least in some situations. The situation in question is driving on a single stretch of highway, and only focuses on steering, so it doesn’t handle the accelerator or brake pedal input. The highway is driven normally, using a webcam to take images of the route and an Arduino to capture data about the steering angle. The idea here is that with enough training the Arduino could eventually steer the car. But first some math needs to happen on the training data since the steering wheel is almost always not turning the car, so the Arduino knows that actual steering events aren’t just statistical anomalies. After the training, the system does a surprisingly good job at “driving” based on this data, and does it on a budget not much larger than laptop, microcontroller, and webcam. Admittedly, this project was a proof-of-concept to investigate machine learning, neural networks, and other statistical algorithms used in these sorts of systems, and doesn’t actually drive any cars on any roadways. Even the creator says he wouldn’t trust it himself, but that he was pleasantly surprised by the results of such a simple system. It could also be expanded out to handle brake and accelerator pedals with separate neural networks as well. It’s not our first budget-friendly self-driving system, either. This one makes it happen with the enormous computing resources of a single Android smartphone. Source: FULL SELF-DRIVING, ON A BUDGET   ### 2023 HALLOWEEN HACKFEST: A SPOOKY MUSCLE-BRAIN INTERFACE What could be better than a Halloween decoration? Something more perennial, or even something that could also be found in a classroom or lab. Something like [Markus Bindhammer]’s spooky muscle-brain interface. It was inspired by a series called “Tales From the Loop” in which a character’s muscle electrical activity is measured in preparation to adjust his prosthetic hand. Essentially, it does what you think it does: attach the sensors to your muscles, move them around, and watch the brain light up. [Markus] started with a children’s learning kit that involves molding the brain and discs out of red rubbery goop, the vertebrae out of plaster, and then assembling the whole thing. Instead, [Markus] molded the brain and vertebrae in two-part silicone for durability, and used two-component colored epoxy for the discs. As the inspiring series is set in the 80s (we assume the brown, dingy 80s and not the fun, neon 80s), [Markus] gave the enclosure/stand an appropriate color scheme. Inside that box there’s an Arduino Pro Micro, a Grove EMG detector, and a mini step-up converter module. And of course, under the brain, there’s a NeoPixel ring. Don’t miss the build and demo video after the break.   There are a ton of things you can do with blinkenlights for Halloween. How about a light-up candy slide, or a bucket that seems them coming? Source: 2023 HALLOWEEN HACKFEST: A SPOOKY MUSCLE-BRAIN INTERFACE ### AI-POWERED SNORE DETECTOR SHAKES THE PILLOW SO YOU WON’T If you snore, you’ll probably find out about it from someone. An elbow to the ribs courtesy of your sleepless bedmate, the kids making fun of you at breakfast, or even the lady downstairs calling the cops might give you the clear sign that you rattle the rafters, and that it’s time to do something about it. But what if your snores are a bit more subtle, or you don’t have someone to urge you to roll over? In that case, this AI-powered haptic snore detector might be worth building. The most distinctive characteristic of snoring is, of course, its sound, and that’s exactly what [Naveen Kumar] chose as a trigger. To differentiate between snoring and other nighttime sounds, [Naveen] chose an Arduino Nicla Voice sensor board, which sports a Syntiant NDP120 deep-learning processor and a built-in MEMS microphone. To generate a model that adequately represents the full tapestry of human snores, a publicly available snoring dataset — because of course that’s a thing — was used for training. Importantly, the training data included samples of non-snoring sounds, like sirens and thunder, as well as clips of legit snoring mixed with these other sounds. The model is trained with an online tool and downloaded onto the board; when it detects the sweet sound of sawing wood three times in a row, a haptic driver board vibrates the pillow as a gentle reminder to reposition. Watch it in action in the brief video below. Snoring is something that’s easy to make light of, but in all seriousness, it’s not something to be taken lightly. Hats off to [Naveen] for developing a tool like this, which just might let you know you’ve got a problem that bears a closer look by a professional. Although it might work better as a wearable rather than a pillow-shaker. Source: AI-POWERED SNORE DETECTOR SHAKES THE PILLOW SO YOU WON’T ### ENERGY HARVESTING PMIC AVAILABLE AS SAMPLES Nowi BV (Delft, The Netherlands) has samples available of its NH2 energy harvesting power management IC (PMIC). The NH2D0245 comes in a QFN package measuring 3mm by 3mm. Including the external capacitor, it has an assembly footprint of just 3mm by 3.6mm. The NH2 is designed to extract the low power output of an energy harvesting source to charge a variety of energy storage elements such as a rechargeable battery or a super-capacitor. It is optimized for Solar PV (indoor and outdoor). NH2 (NH2D0245) – production ready samples of NOWI high-performance energy harvesting PMIC for low power applications. NH2 comes in the compact QFN package of only 3mm x 3mm. Including the external capacitor it has an assembly footprint of just 3mm x 3.6mm. NOWI PMIC is designed to extract the low power output of an energy harvesting source to charge a variety of energy storage elements such as a rechargeable battery or a super-capacitor. It is optimised for Solar PV (indoor and outdoor). The NH2 is essentially a dc-to-dc converter that sits between the source and a capacitor. It has maximum power point tracking (MPPT) with an interval of less than 1 second. Read more: ENERGY HARVESTING PMIC AVAILABLE AS SAMPLES ### BECAUSE YOU CAN: LINUX ON AN ARDUINO UNO There are a few “Will it run” tropes when it comes to microcontrollers, one for example is “Will it run Doom?“, while another is “Will it run Linux?”. In one of the lowest spec examples of the last one, [gvl610] has got an up-to-date Linux kernel to boot on a vanilla Arduino Uno. And your eyes didn’t deceive you, that’s a full-fat kernel rather than the cut-down μClinux for microcontrollers. Those of you who’ve been around a while will probably have guessed how this was done, as the ATmega328 in the Uno has no MMU and is in to way powerful enough for the job. It’s running an emulator, in this case just enough RISC-V to be capable, and as you’d imagine it’s extremely slow. You’ll be waiting many hours for a shell with this machine. The code is written in pure AVR C, and full instructions for compilation are provided. Storage comes from an SD card, as the ATmega’s meagre 32k is nowhere near enough. If you’re having a bit of deja vu here we wouldn’t blame you, but this one is reputed to be worse than the famous 2012 “Worst PC Ever“, which emulated ARM instead of RISC-V. Source: BECAUSE YOU CAN: LINUX ON AN ARDUINO UNO ### BADMINTON STRING WINDER GETS THE TENSION JUST RIGHT If you want to keep your badminton game at its peak, you’ll need a good racket with a proper set of strings. When an injury kept [Antonie Colin] off the court for a few months, building a restringing machine helped pass the time. The design is straightforward, using commonly-available motion components and 3D-printed parts. The round assembly at one end is used to hold the racket during the restringing process. A leadscrew mechanism driven by a stepper motor is used to apply tension to the strings, anywhere from 18 lbs to 34 lbs. Strings can also be prestretched if so desired. The stringing process is managed by an Arduino, which uses a loadcell to monitor tension placed on the strings. An LCD screen on the device provides feedback on the process and allows various functions to be selected. Flying clamps are used to hold strings in place during the process, either fitted from above or below the device as needed. If you find yourself regularly restringing your badminton racket, or you simply don’t trust your local pro shop to do so, you might find this build useful. You might also like to build a shuttlecock launcher for training if your practice partners aren’t available on the regular. Our badminton department is looking rather bare at the moment, so don’t hesitate to send your own nifty hacks in to the tipsline! Source: BADMINTON STRING WINDER GETS THE TENSION JUST RIGHT ### MEET FONTEDIT – THE CUSTOM FONT EDITOR FOR LCD, LED AND E-PAPER DISPLAYS Fonts sourcing/creation, usage and management, are some of the major challenges firmware developers face with projects where the display (TFTs, Epaper displays, etc.), is a critical element of the project’s performance. From access to clear and good looking fonts to managing the size of the font files when running on MCUs with limited memory, is an issue that cost developers tons of time during product development, but all of that is about to change thanks to Fontedit. Developed by Dominik Kapusta, as a personal solution to the challenges with fonts for an E-paper display based project, Fontsedit is a software that provides embedded software developers with an easy way to import, preview, edit and export a font for use in embedded systems’ displays. It is capable of opening any general-purpose fixed-width desktop font and gives users the freedom to use custom fonts (although, for now, it has to be a font registered in your operating system). The software automatically imports font glyphs for characters in the ASCII printable range (32…126 or 0x20…0x7e), and list all the available glyphs with an edit view that allows users to fine-tune individual glyphs. Font glyphs can be edited by interacting with the editor using the mouse and the keyboard. For example, Clicking and dragging the mouse can be used to set pixels (making them black), while holding Alt or Ctrl (⌘) can be used to erase. The touchpad scroll (or mouse wheel) with Ctrl (⌘) can be used to zoom (in or out)  the editor canvas. Read more: MEET FONTEDIT – THE CUSTOM FONT EDITOR FOR LCD, LED AND E-PAPER DISPLAYS ### SCREECH OWL IS A TRIBUTE TO THE EOWAVE PERSEPHONE The Eowave Persephone was a beautiful thing—a monophonic ribbon synth capable of producing clean, smoothly varying tones. [Ben Glover] used to own a nice example that formerly belonged to Peter Christopherson, but lost it in the shifting sands of time. His solution was to build one of his own from scratch. Known as the Screech Owl, the build is based around a custom shield designed to suit the Arduino Leonardo. The primary control interface is a Softpot 500 mm membrane potentiometer, layered up with a further thin film pressure sensor which provides aftertouch control. The Leonardo reads these sensors and synthesizes the appropriate frequencies in turn. All the electronics is wrapped up inside a tidy laser-cut enclosure that roughly approximates the design of the original Eowave device. [Ben] noted the value of services like Fiverr and ChatGPT for helping him with the design, while he also enjoyed getting his first shield design professionally manufactured via JLCPCB. It’s a tidy build, and in [Ben’s] capable hands, it sounds pretty good, too. We’ve seen some other great ribbon controlled synths before, too. Video after the break. Source: SCREECH OWL IS A TRIBUTE TO THE EOWAVE PERSEPHONE ### VECOW LAUNCHES MTC-7000 SERIES ALL-IN-ONE MULTI-TOUCH COMPUTER Vecow Co., Ltd., a team of global embedded experts, announces the release of the latest Industrial Multi-Touch Computer, MTC-7000 Series. With various LCD sizes from 10.1″ to 21.5” widescreen multi-touch computer, MTC-7000 Series is powered by 8th Gen Intel® Core™ U-series processor (Whiskey Lake) and is ideal for Machine Vision, Telemedicine, Factory Automation, Smart Retail and ITS (Intelligent Transportation System) or any AIoT/Industry 4.0 applications. Vecow MTC-7000 Series features 8th Gen Intel® Core™ i7/i5/i3 processor that delivers a 40% improvement in CPU performance and enables more powerful system performance than 7th Gen Intel® Kaby Lake processor. Vecow MTC-7000 Series provides projected capacitive touch technology with 10-point multi-touch function for highly responsive sensing, zoom in/zoom out function for improving the ease and efficiency of data and information processing and user-preference settings. It also meets the durability requirement by supporting up to 7H hardness anti-scratch touch surface to elevate longevity on the touch screen. Vecow MTC-7000 Series supports a various set of I/O configurations, including 4 10G USB, 2 GigE LAN, 2 COM, 1 2.5” easy-access SSD/HDD kit, and a full-size mSATA, providing a higher level of customization. For example, it features 2 Mini PCIe slots that allow the user to install the 3rd party wireless modules such as WiFi/4G/3G/LTE/GPRS/UMTS for seamless communications. With 9V to 48V DC-in and 500V Surge Protection, Vecow MTC-7000 Series not only prevents overvoltage but keeps the system stable. Read more: VECOW LAUNCHES MTC-7000 SERIES ALL-IN-ONE MULTI-TOUCH COMPUTER ### A BUZZING, FLASHING PHONE RINGER FOR THE ELDERLY For a lonely person, elderly or otherwise, the sound of a ringing phone can be music to the ears, unless of course it’s another spam call. But what good is a phone when you can’t hear it well enough to answer? [Giovanni Aggiustatutto] was tasked with building an additional ringer for a set of cordless landline phones belonging to an elderly friend. Rather than try to intercept the signal, [Giovanni] chose to simply mic up the phone base that’s connected to the phone port on the router and send a signal over Wi-Fi to a second box which has a loud piezo buzzer and a handful of LEDs. At the heart of this build is a pair of ESP8266 Wemos D1 minis and an Arduino sound sensor module inside a pair of really nice-looking 3D printed boxen that may or may not have been inspired by an IKEA air quality sensor. On the receiving side, a green LED indicates the system is working, and the red LEDs flash as soon as a call comes in. All the code, schematics, and STL files are available for this build, and between the Instructable and the build video after the break, you should have no trouble replicating it for the hard-of-hearing in your life. Source: A BUZZING, FLASHING PHONE RINGER FOR THE ELDERLY ### NEW 6 MM POTENTIOMETER FOR HIGH TEMPERATURE LEAD-FREE SMD PRODUCTION Piher Sensing Systems has re-designed its popular PT-6 Carbon Potentiometer for high temperature lead-free SMD production. High-temperature plastics, flat suction areas for vacuum pipettes optimum assembly and a new pad design enables PIHER’s customers to employ automated placement of this components on their circuit board using reflow solder and thus simplify their manufacturing processes. A wide range of options, including the unique stop positions (detents) that provide users desirable tactile feedback on each position setting and selection. Detents not only add a crisp “click” sensation for each position but also offer significant savings in both cost and space; and are particularly advantageous in industrial, home automation and domestic power tool applications to prevent accidental movement. “The detent feature for 6mm potentiometer lines is a complete market breakthrough, says Jose Luis Macía, Commercial Director. “With the re-engineered 6mm potentiometers, PIHER now provides a reliable rotary ‘click’ sensation into its smallest line of rotary controls on both standard mounting versions (through hole and SMD).” Read more: NEW 6 MM POTENTIOMETER FOR HIGH TEMPERATURE LEAD-FREE SMD PRODUCTION ### Amazing Alien inspired escape room The world of escape rooms has seen a significant evolution in recent years, with creators constantly pushing the boundaries of what’s possible. One such creator, known by the username Wired_Workshop on Reddit, has taken this concept to a whole new level by creating an ‘Alien’-themed escape room puzzle for an event at the Maker Alliance Summer Camp in Kentucky. This project is a testament to the power of creativity, technical skill, and a deep appreciation for the iconic ‘Alien’ franchise. The ‘Alien’ franchise, with its distinct visual aesthetic, has left an indelible mark on the world of science fiction. The franchise’s design work, largely credited to H. R. Giger, is renowned for its eerie, biomechanical style that perfectly encapsulates the terror and fascination of encountering the unknown. Wired_Workshop’s escape room puzzle pays homage to this unique aesthetic, incorporating it into the design and gameplay of the puzzle. Alien Inspired escape room The puzzle was part of an ’80s-themed escape room, a fitting setting given the ‘Alien’ franchise’s roots in that era. Wired_Workshop’s contribution to this event was not just a simple puzzle, but a fully immersive experience that included sequences from the ‘Alien’ films and even a ‘Predator’ Easter egg, acknowledging the shared cinematic universe of the two franchises. This attention to detail and respect for the source material added a layer of authenticity to the puzzle, making it a true tribute to the ‘Alien’ franchise. “I built an Alien self destruct escape room puzzle to go in a 80’s themed escape room for the Maker Alliance summer camp event! “ Creating such an intricate puzzle required a variety of fabrication techniques. Wired_Workshop employed methods such as 3D printing, CNC routing, and welding to bring the puzzle to life. These techniques allowed for the creation of intricate, detailed components that added to the overall realism of the puzzle. The use of Arduino technology was a key element in the creation of the puzzle. An Arduino Mega 2560 board was used to control LEDs and monitor user input through a keypad, a large switch lever, and glowing canisters that players must lift. Additionally, an Arduino Nano-driven fog machine was used to create a smoke effect, further enhancing the immersive experience of the puzzle. The puzzle-solving process was designed to be challenging yet engaging. Players were required to complete tasks in the correct order, guided by available clues, to solve the puzzle. This process not only tested the players’ problem-solving skills but also their knowledge of the ‘Alien’ franchise. Solving this puzzle provided a clue for the next puzzle in the escape room, created by another attendee, adding an element of continuity to the overall escape room experience. Wired_Workshop’s ‘Alien’-themed escape room puzzle is a testament to the power of creativity and technical skill. It showcases how a deep appreciation for a franchise can be transformed into an immersive, engaging experience. The project serves as an inspiration for other creators, demonstrating the limitless possibilities of escape room design when combined with a passion for a particular theme. Source: Amazing Alien inspired escape room ### NEW PHASE LOCKED OSCILLATORS AVAILABLE IN TAPE AND REEL PACKAGING High Performance Fixed Frequency PLO at 9.25 GHz Z-Communications, Inc. announces a new RoHS compliant fixed frequency phase locked loop model SFS9250C-LF operating in the X-band. The SFS9250C-LF is a simple to use plug and play PLO allowing for quick integration. It is designed to produce a fixed signal at 9250 MHz while locked to an external 10 MHz reference oscillator. This remarkable PLO features exceptionally low phase noise of -75dBc/Hz, -92dBc/Hz, and -118dBc/Hz at the 1kHz, 10kHz and 100kHz offsets, respectively. The SFS9250C-LF is designed to deliver an output power of -3 dBm into a 50 ohm load while operating off a VCO voltage supply of 5Vdc and drawing 90mA and a phase locked loop voltage of 3Vdc while drawing 11mA. This unmatched product features a typical harmonic suppression of -30dBc and spurious suppression of -70dBc. It is housed in Z-COMM’s standard SFS-L1 package measuring 1.0 in. x 1.0 in. x 0.22 in. The SFS9250C-LF is also ideal for automated surface mount assembly and is available in tape and reel packaging. Features: SFS9250C-LF features a typical harmonic suppression of -30 dBc and spurious suppression of -70 dBcDelivers an output power of -3 dBm into a 50 ohm load while operating off a VCO voltage supply of 5 VDC and drawing 90 mA and a phase locked loop voltage of 3 VDC while drawing 11mADesigned to produce a fixed signal at 9250 MHz while locked to an external 10 MHz reference oscillator Read more: NEW PHASE LOCKED OSCILLATORS AVAILABLE IN TAPE AND REEL PACKAGING ### BROADCOM AFBR-S50MV85I TIME-OF-FLIGHT SENSOR MODULE AFBR-S50MV85I is a multi-pixel optical distance and motion measurement sensor module, based on the optical Time of Flight principle AFBR-S50MV85I is a multi-pixel optical distance and motion measurement sensor module, based on the optical Time of Flight principle. The technology has been developed with a special focus on applications with the need for the highest speed and accuracy at medium distance ranges, with small size and very low power consumption. Due to its best-in-class ambient light suppression, use in outside environments is possible in full sunlight. The sensor accurately measures against white, black, colored as well as metallic and retroreflective surfaces. Key Features Very Fast Measurement Rates: up to 3 kHzOperation up to 200 kLuxMultipixel for 3D Motion DetectionAccuracy Error Typically Below ±1% Additional Features An integrated calibrated clock sourceUnambiguous range up to 100 m in 2f modeReference Pixel for system health monitoringLaser Class 1 eye safety ready Additional Info The module has an integrated infrared laser light source and an internal clock source. A single power supply of 5.0 V is required. Data is transferred using a digital Serial Peripheral Interface (SPI) using standard 3.3 V CMOS levels. For system health monitoring a Reference Pixel is used in addition to the integrated voltage and temperature sensors.  Read more: BROADCOM AFBR-S50MV85I TIME-OF-FLIGHT SENSOR MODULE ### AUTO XYLOPHONE USES HOMEMADE SOLENOIDS Want to play the xylophone but don’t want to learn how? [Rachad]’s automatic xylophone might be just the ticket. It uses homemade solenoids to play tunes under computer control. Think of it as a player piano but with electromagnetic strikers instead of piano keys. You can hear the instrument in action in the video below.   Since the project required 24 solenoids, [Rachad] decided to build custom ones using coils of wire and nails. We were amused to see a common curling iron used as an alternate way to apply hot glue when building the coils. The other interesting part of the project was the software. He now uses a toolchain to convert MIDI files into a serial output read by the Arduino. Eventually, he wants to train an AI to read sheet music, but that’s down the road, apparently. Honestly, we were a bit surprised that it sounded pretty good because we understand that the material used to strike the xylophone and the exact position of the strike makes a difference. We doubt any orchestra will be building one of these, but it doesn’t sound bad to us. The last one of these we saw did have more conventional strikers if you want to compare. Honestly, we might have just bought the solenoids off the shelf but, then again, we don’t make our own relays either. Source: AUTO XYLOPHONE USES HOMEMADE SOLENOIDS ### EFS SERIES SURFACE POTENTIAL SENSORS TDK’s EFS series sensors eliminate the effects of disturbances in the electric field intervening between the photosensitive drum and the detection electrode TDK’s EFS series sensors are feedback surface voltage sensors that support the improved image quality of color copiers and next-generation color printers with the reliability of ±0.05 V or below. The voltage sensors are constructed using high-stability output circuits that feed the detected photosensitive drum surface potential back to the electrical field control chopper and probe shield cover. EFS series sensors eliminate the effects of disturbances in the electric field intervening between the photosensitive drum and the detection electrode. They also show extremely stable and precise output performance where the adverse effects of temperature fluctuations and detection distance (probe positioning) are greatly reduced. Features: Reliability of ±0.05 V or lowerAvailable sensing distance of 1.5 mm to 3.5 mmIn this range, output voltage variation is small and robust output stability can be obtained despite changes in the ambient temperatureUnique optimized structure and circuit design have achieved miniaturization and weight reduction, as well as greater performance in response to market needsQuick responsiveness of 11 ms which supports high-speed machinesExtremely stable output performance is maintained for long periods of time through accurate driving made possible with the unique structural design and superelastic alloy chopper consisting of the piezoelectric element with optimized conversion efficiency Read more: EFS SERIES SURFACE POTENTIAL SENSORS ### SMART COFFEE REPLACES ESPRESSO MACHINE CONTROLLER WITH ARDUINO, SENSORS A common hacker upgrade to an espresso machine is to improve stability and performance with a better temperature controller, but [Schematix]’s Smart Coffee project doesn’t stop there. It entirely replaces the machine’s controller and provides an optional array of improvements for a variety of single-boiler machines (which is most of them). Smart Coffee isn’t free, it costs 16 NZD (about 10 USD) but there is a free demo version. There is no official support, but there are wiring guides and sources aplenty from which to purchase the various optional parts. It runs on an Arduino MEGA 2560 PRO (or similar microcontroller) and supports a wide array of additional hardware including pressure transducer, water level sensor, flow meter, OLED display, and more. Modification of one’s espresso machine is a rewarding endeavor, but the Smart Coffee project provides a way for one to get straight to the hacking and function modifying, instead of figuring out the wiring hardware interfacing from scratch. We’ve seen [Schematix]’s work before with a DIY induction heater which showed off thoughtful design, and it’s clear he takes his coffee at least as seriously. Check out the highly comprehensive overview and installation video for Smart Coffee, embedded just below the page break. Source: SMART COFFEE REPLACES ESPRESSO MACHINE CONTROLLER WITH ARDUINO, SENSORS ### CREE ADDS RGB SURFACE-MOUNT LEDS FOR COLOR DIRECTIONAL SIGNAGE Cree has announced the CV94D-FCC LED that integrates three emitters in a compact surface-mount device (SMD) package. The package includes tightly packed red, green, and blue (RGB) emitters enabling full-color signs or displays based on solid-state lighting (SSL) technology. Most of the freeway signage has been based on amber monochromatic technology. But signs that are either full color, or even that just have a portion of the display capable of color, can do a better job of grabbing attention and expressing a message.Cree identified the target application as intelligent transportation systems, with a primary example being dynamically changeable signs that are increasingly being suspended above freeways. We have written quite a lot of late about LED-based, directly- or self-emissive color displays. Self-emissive means the LEDs deliver the video images as opposed to, say, being used for backlights in a liquid-crystal display (LCD). The technology has long been used in applications such as sports stadium video boards and façades at locations such as Times Square in New York. Finer pixel pitch is even bringing the technology indoors. In the transportation segment, meanwhile, dynamic signs allow cities and states to deliver important information to drivers. In the US, for example, the signs broadcast what are called Amber Alerts when a child is abducted. They also notify drivers of road closures and lately have been used to display coronavirus reminders. Read more: CREE ADDS RGB SURFACE-MOUNT LEDS FOR COLOR DIRECTIONAL SIGNAGE ### AN SMD CAPACITOR GUIDE For electronics, your knowledge probably follows a bit of a bell curve over time. When you start out, you know nothing. But you eventually learn a lot. Then you learn enough to be comfortable, and most of us don’t learn as much about new things unless we just happen to need it. Take SMD components. If you are just starting out, you might not know how to find the positive lead of an SMD capacitor. However, if you’ve been doing electronics for a long time, you might not have learned all the nuances of SMD. [Mr SolderFix] has been addressing this with a series of videos covering the basics of different SMD components, and this installment covers capacitors. If you are dyed-in-the-wool with SMD, you might not get a lot out of the video, but we picked up a few tips, like using a zip tie for applying flux. The video starts with an examination of the different packages and markings. Then it moves on to soldering the components down. We haven’t run into the little trimmer capacitors, so that was new to us, also. It is a great idea for a series, and the photography of the solder is very clear and useful. Worth a watch! SMD parts don’t have a lot of room for markings, so they can be a bit cryptic. If you show up at a Supercon, you can always join us to show off your SMD soldering skills. Source: AN SMD CAPACITOR GUIDE ### MEET THE STRATIX 10 NX FPGA: THE FIRST AI-OPTIMIZED FPGA FROM INTEL As the immense value proposition of Edge Computing becomes more obvious, Chip manufacturers are working twice as hard to be the one that develops the SOC, FPGA, or MPU that provides designers with all that is needed to develop powerful Edge AI-based solutions. While a lot of progress has been made with MPUs and SOCs via impressive boards like the Google’s Coral and the intel compute stick, there are very few FPGA solutions out there with the kind of specifications required for Edge-AI. Taking a stab at this, Intel recently announced the launch of a new, AI-Optimized FPGA called the Stratix 10 NX. The Stratix 10 NX is an AI-optimized FPGA, designed for high-bandwidth, low-latency AI acceleration applications. It delivers accelerated AI compute solution through AI-optimized compute blocks with up to 15X more throughput compared to the standard Intel Stratix 10 FPGA DSP Block. It provides an in package 3D stacked HBM high-bandwidth DRAM and up to 57.8G PAM4 transceivers. The Stratix 10 NX comes with a unique combination of capabilities that provides designers with all that is needed to develop customized hardware with integrated high-performance AI. At the center of these capabilities is a new type of AI-optimized block called the AI Tensor Block, which is tuned for the common matrix-matrix or vector-matrix multiplications used in AI computations, with capabilities designed to work efficiently for both small and large matrix sizes. According to Intel’s spec sheet, a single AI Tensor Block achieves up to 15X more INT8 throughput compared to the standard Intel Stratix 10 FPGA DSP Block. Read more: MEET THE STRATIX 10 NX FPGA: THE FIRST AI-OPTIMIZED FPGA FROM INTEL ### LESSONS LEARNED WHILE BUILDING A DIY PEN PLOTTER There was a time when plotters were the pinnacle of computer graphics output. While they aren’t as common as they used to be, there are some advantages to having a plotter. [Symon] wanted a plotter and decided to make one from scratch. Truthfully, he wants to build a CNC machine, so the plotter is just a stepping stone. In fact, some of it may be a little much for just a plotter. Other design choices have worked for the plotter, but don’t look like they will work well for the eventual CNC design. As an example, the plotter uses 2020 extrusions and lead screws. An Arduino with a CNC shield provides the brains. GRBL, of course, runs on the Arduino, so the whole machine runs fine with normal G-code. This post will be especially interesting if you want to build a plotter or something similar. We especially like that it covers the design rationale for each choice made It is great to learn from others successes and, of course, their mistakes. If you really want just a plotter, you don’t have to spend much. You can even go super minimal if you want. Source: LESSONS LEARNED WHILE BUILDING A DIY PEN PLOTTER ### MEET THE INNOVATIVE SMOKE ALARM/DETECTORS FROM X-SENSE Smoke Alarms are devices that sense smoke as an indication of fire. They are critical to safety in homes and businesses and are required for most property insurance plans. However, these devices exist in different shapes and sizes on the market, with different features incorporated by different manufacturers, in such numbers that it becomes a difficult task for a non-technical person to choose and establish the difference between them. For this reason, we thought it’d be a good idea to lend our voice to the conversation, starting with a review of one of the coolest Smoke detectors out there: the X-sense SD03. Made by X-sense, which is regarded as one of the most innovative home safety brands, the SD03 Smoke sensor leverages the capacities of an advanced photoelectric sensor combined with the low-power and high-performance features of an ST chipset, to detect dangerous smoke levels from slow-burning and smoldering fires, quickly, in a way that empowers the device to provide the earliest possible warning of fire while minimizing false alarms. Designed with reliability in mind, the device features routines that ensure the device is active, and is at all times capable of detection and alerts, through an automatic self-check which is performed every 10s. The check evaluates all critical elements including the sensors and battery life to be sure they are in good condition. If an issue is detected, the device notifies the user via beeps and an LED indicator. Read more: MEET THE INNOVATIVE SMOKE ALARM/DETECTORS FROM X-SENSE ### AUTONOMOUS WHEELCHAIR LETS JETSON DO THE DRIVING Compared to their manual counterparts, electric wheelchairs are far less demanding to operate, as the user doesn’t need to have upper body strength normally required to turn the wheels. But even a motorized wheelchair needs some kind of input from the user to control it, which still may pose a considerable challenge depending on the individual’s specific abilities. Hoping to improve on the situation, [Kabilan KB] has developed a self-driving electric wheelchair that can navigate around obstacles by feeding the output of an Intel RealSense Depth Camera and LiDAR module into a Jetson Nano Developer Kit running OpenCV. To control the actual motors, the Jetson is connected to an Arduino which in turn is wired into a common L298N motor driver board. As [Kabilan] explains on the NVIDIA Blog, he specifically chose off-the-shelf components and the most affordable electric wheelchair he could find to bring the total cost of the project as low as possible. An undergraduate from the Karunya Institute of Technology and Sciences in Coimbatore, India, he notes that this sort of assistive technology is usually only available to more affluent patients. With his cost-saving measures, he hopes to address that imbalance. While automatic obstacle avoidance would already be a big help for many users, [Kabilan] imagines improved software taking things a step further. For example, a user could simply press a button to indicate which room of the house they want to move to, and the chair could drive itself there automatically. With increasingly powerful single-board computers and the state of open source self-driving technology steadily improving, it’s not hard to imagine a future where this kind of technology is commonplace. Source: AUTONOMOUS WHEELCHAIR LETS JETSON DO THE DRIVING ### Create a PCB light panel with touch capacitive technology for managing a NeoPixel LED strip In this guide, we will illustrate the process of crafting a touch capacitive PCB with an ATMega328P IC, designed to oversee Neo-Pixel LED strips. Our PCB boasts versatile capabilities, encompassing music-reactive, random animation, and RGB control modes. Building on our prior exploration of touch capacitive technology in the touch capacitive piano tutorial, this project focuses on designing a touch capacitive-based light panel with three distinct modes for NeoPixel strip control. These modes encompass the 'Ring Mode,' which allows color adjustments via sliders on the board, the 'RGB Mode' permitting color and intensity modifications within the RGB spectrum, and finally, the 'Music Mode,' where LED colors and intensities synchronize with the playing music. This sophisticated project became a reality thanks to PCB boards manufactured by PCBWay, and we'll also elucidate the process of designing and ordering these boards from PCBWay. Materials needed for constructing the front panel PCB. To assemble a PCB piano with an Arduino Nano, you'll need the subsequent components. ATMega328P IC (DIP Package) SMD Resistors (1Mega Ohm, 0805) X 9 SMD Resistors (1K, 0805)x1 Piezoelectric Buzzer SMD 78M05 IC SMD Electrolytic Capacitor (10uF,16V,4x45mm) x 2 SMD Capacitor ( 22pF 0805) x 11 Crystal Oscillator (16 MHz) Schematic illustration of the PCB light panel circuit In the given circuit diagram, nine 1 Mega Ohm resistors are linked to Pin PB1 of the ATMega328P IC, serving as a common connection point. Additionally, digital pins PD2 to PD7 and PB0 are connected to the corresponding terminals of each resistor. In the diagram below, the remaining digital pins are interfaced with a 1x5 pin header and labeled as "REMAINING DIGITAL PINS." We've established a connection involving eight 22uF capacitors, with each capacitor connected to a corresponding resistor. Furthermore, the negative terminal of each capacitor is linked to the ground pin of the Atmega328p IC. In addition, there's a power section responsible for supplying a stable 5V to both the ATMega328P IC and the Neo Pixel Please take note: If deemed necessary, capacitors can be incorporated. It is highly advisable to employ small capacitors within the range of 20pF to 400pF to ensure stable data detection. It's important to ground these capacitors, as doing so mitigates the parallel resistance to the body. In my personal case, I opted not to utilize capacitors because the system functions adequately without them. However, I have included references to capacitors in the schematic above to facilitate their inclusion during practical implementation. It's worth emphasizing that the values of these capacitors must fall within the 20pF to 400pF range, as specified in the documentation of the "Capacitive Sensor" library What is the functioning principle of the Capacitive Sensor Library? This is where Arduino libraries become invaluable, and credit goes to the creators of the "Capacitive Sensor" library, Paul Badger and Paul Stoffregen. When we touch the conductive plate, this library allows us to detect a change in capacitance. In this library, one of the digital pins functions as a send pin (set as OUTPUT), while the other serves as a receive pin (set as INPUT). The crucial aspect of detecting capacitance changes lies in the time interval between when the send pin goes high and when the receive pin also goes high. Upon setting the send pin to a high state (or 5 volts), the resistor-capacitor pair introduces a delay between the moment the send pin becomes high and when the receive pin registers a high value from the send pin. The Capacitive Sensor library furnishes a function that elevates the send pin to HIGH, subsequently monitoring and counting the time until the receive pin reaches a HIGH state. This function returns a time value, which is instrumental for discerning changes in capacitance. When the time value increases or decreases, it signifies alterations in capacitance. A greater capacitance will cause the receive pin to take more time to reach the high state, whereas lesser capacitance will result in a shorter duration. Consequently, we can establish a baseline for the normal state and then monitor for changes each time the send pin toggles. Creating a printed circuit board (PCB) for the light panel PCB With the schematic in hand, we can now move forward to design the layout of the PCB for the Touch Capacitive Based PCB Light Panel. You have the flexibility to employ any PCB software you prefer for this task. In our case, we are utilizing the EasyEDA platform to craft both the schematic and the PCB for our project. Provided below are 3D model perspectives showcasing the top and bottom layers of the PCB Light Panel. Placing an order for PCBs through PCBWay Now, once you've completed the design to your satisfaction, you can proceed to place an order for the PCB: Step 1: Visit https://www.pcbway.com/ and, if you're a first-time user, create an account. Next, navigate to the "PCB Prototype" section and input your PCB's dimensions, the desired number of layers, and the quantity of PCBs you need. Step 2: Continue by selecting the "Quote Now" button. This will direct you to a page where you can specify additional parameters such as the board type, number of layers, PCB material, thickness, and more. Many of these options come with default selections, but if you have specific preferences, you can make your choices on this page. Step 3: The last step involves uploading the Gerber file and completing the payment. PCBWAY conducts a verification process to ensure the validity of your Gerber file before proceeding with payment. This ensures that your PCB is fabrication-ready and will be delivered to you as promised, without any issues. Putting together the PCB for the Touch Capacitive Light Panel Following the order placement, the PCB arrived at my location within a few days, delivered by a courier service. It was meticulously labeled and thoughtfully packaged in a well-organized box. The PCB's quality met my expectations, consistent with my previous experiences. You can observe both the top and bottom layers of the board below for reference. After confirming the accuracy of the tracks and footprints, I proceeded with the PCB assembly. The finished soldered board is depicted below: Programming the PCB Light Panel The complete code for the PCB Light Panel based on touch capacitive technology is available for download from the project's GitHub repository. The "CapacitiveSensor" library is exceptionally user-friendly, and it comes with comprehensive documentation on how to utilize it effectively. Before delving into the program, let's first install the "CapacitiveSensor" library in the Arduino IDE. To do this, download the library's zip file and navigate to the "Sketch -> Include Library" section in the Arduino IDE toolbar. Add the zip file by selecting the "Add .Zip Library..." option, as illustrated in the image below. Afterward, restart the Arduino IDE. You can similarly install the ADCTouch.h library using a similar process. Once you have successfully installed the necessary library files, commence the code by incorporating all the required libraries. The Adafruit_NeoPixel.h library is employed for managing single-wire-connected LED pixels and strips. In our setup, we use it to control the Neo-Pixel LED strip. Additionally, the CapacitiveSensor library is utilized to detect touch input on the PCB pads #include #include #include Following that, in the subsequent lines, we have instantiated nine objects using the CapacitiveSensor() function. These instances specify the pins to which the touchpads are linked. The function's syntax takes the form of CapacitiveSensor(byte sendPin, byte receivePin), wherein one of the digital pins functions as the send pin (configured as OUTPUT), while the other serves as the receive pin (configured as INPUT) within this library. CapacitiveSensor Mode_Pad = CapacitiveSensor(9,8); CapacitiveSensor RGB_Pad = CapacitiveSensor(9,7); CapacitiveSensor Music_Pad = CapacitiveSensor(9,6); CapacitiveSensor Ring_L_Pad = CapacitiveSensor(9,5); CapacitiveSensor Ring_LT_Pad = CapacitiveSensor(9,4); CapacitiveSensor Ring_T_Pad = CapacitiveSensor(9,3); CapacitiveSensor Ring_TR_Pad = CapacitiveSensor(9,2); Subsequently, declare the Neo Pixel strip object, where the first argument represents the quantity of pixels within the Neo Pixel strip, and the second argument designates the pin to which the LED strip is attached. Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_PIXELS, PIN, NEO_GRB + NEO_KHZ800); Following that, we've established several functions for detecting touch input on the pads and rings. The initial three functions, specifically ModeMode(), RGBMode(), and MusicMode(), serve to identify touch input on the pads employed to switch between distinct PCB modes. In the initial function, we examine the values of the first pad, labeled 'MODE,' and return 1 if the detected values surpass 500; otherwise, it returns zero. Likewise, two additional functions are defined for the RGB pad and MUSIC pad, each tailored to their respective functionalities. boolean ModeMode(){ long Mode_Pad_Value = Mode_Pad.capacitiveSensor(30; if (Mode_Pad_Value>500) return 1; else return 0; } boolean RGBMode(){ long RGB_Pad_Value = RGB_Pad.capacitiveSensor(30); if (RGB_Pad_Value>500) return 1; else return 0; } boolean MusicMode(){ long Music_Pad_Value = Music_Pad.capacitiveSensor(30); if (Music_Pad_Value>500) return 1; else return 0; } The Check_Ring_Pos() function serves a dual purpose: it identifies touch input on the rings and retains information about the ring's position. These ring positions play a crucial role in discerning whether the rings are rotated clockwise or counterclockwise. Similarly, we've introduced another function for monitoring slider positions and gauging the swipe direction based on the pad positions along the slider. char Check_Ring_Pos() { char ring_pos = 0; char result = 0; long Ring_L_Pad_Value = Ring_L_Pad.capacitiveSensor(30); long Ring_LT_Pad_Value = Ring_LT_Pad.capacitiveSensor(30); long Ring_T_Pad_Value = Ring_T_Pad.capacitiveSensor(30); long Ring_TR_Pad_Value = Ring_TR_Pad.capacitiveSensor(30); if (Ring_L_Pad_Value>500) ring_pos = 1; if (Ring_LT_Pad_Value>500) ring_pos = 2; if (Ring_T_Pad_Value>500) ring_pos = 3; if (Ring_TR_Pad_Value>500) ring_pos = 4; char current_ring_pos = ring_pos; Serial.println(current_ring_pos - pvs_ring_pos); if ((current_ring_pos - pvs_ring_pos) == 1) result = 1; if ((current_ring_pos - pvs_ring_pos) == -1) result =2; if (current_ring_pos != pvs_ring_pos); pvs_ring_pos = current_ring_pos; return result; } With our ability to determine whether a specific pad was touched and in which direction, we can now leverage these readings to transition between the three modes. In the RGB mode, the slider pads allow us to adjust the brightness of the lights. Swiping from left to right increases the brightness, while swiping from right to left decreases it. Additionally, we can employ the Ring pads, rotating them clockwise or counterclockwise, to alter the colors. In the Mode mode, the Ring pads come into play, enabling us to rotate the lights in both clockwise and counterclockwise directions. void RGB_Mode(){ Serial.print("We have entered RGB Mode"); beep(); uint16_t i, j, k; Brightness = 255; while(1){ char Sider_Status = Check_Slider_Pos(); char Ring_Status = Check_Ring_Pos(); if (Sider_Status ==1){ //return 0 for no movement and 2 for right to left Serial.println ("Moved Left to Right"); beep(); Brightness = Brightness+50; Serial.print(Brightness); } …………………………………….. When the Music Mode pad is touched, the Arduino initiates the process of monitoring the microphone's output. It subsequently adjusts the intensity and color of the lights randomly in response to the music. void Music_Mode(){ Serial.print("We have entered MUSIC Mode"); beep(); while(1){ if (digitalRead(A5)==LOW) { Serial.print("TAP"); for(int i=0; i< 48; i++) { strip.setBrightness(random (100,255)); strip.setPixelColor(i, strip.Color(random (0,255), random (0,255), random (0,255))); strip.show(); } Creating the casing for the Touch Capacitive PCB Light Panel using 3D printing The plan is to mount the PCB light panel on a wall, and to achieve this, I 3D-printed a holder specifically tailored to the PCB. I took measurements of the arrangement using my vernier caliper to create a custom casing. Once the design was complete, it resembled the image below. You can also obtain the STL file for the casing on Thingiverse, allowing you to print your own casing using it. Evaluating the performance of the Touch Capacitive PCB Light Panel   Now, supply power to the board using a 12V adapter. You can utilize the three touchpads labeled MODE, RGB, and MUSIC to toggle between various modes, and the sliders to modify the light's brightness and color. Code #include #include #include #define PIN 10 //Neo pixel connected to pin 10 #define BUZZER 13 //BUZZER is connected to pin D13 #define N_PIXELS 23 //48 neopixel in led strip #define MIC A5 // Microphone is connected at pin A5 #define N 10 // Number of samples #define fadeDelay 25 // fade amount #define noiseLevel 25 // Amount of noice we want to chop off int ref1,ref2,ref3, ref4,ref5;       //reference values to remove offset fro using analog pins are capacitive touch char pvs_slider_pos = 0; char pvs_ring_pos = 0; int samples[N]; // storage for a sample   int periodFactor = 0; // For period calculation int t1 = -1;   int T; int slope; byte periodChanged = 0; int Brightness=0; int led_position=0; CapacitiveSensor   Mode_Pad = CapacitiveSensor(9,8); CapacitiveSensor   RGB_Pad = CapacitiveSensor(9,7); CapacitiveSensor   Music_Pad = CapacitiveSensor(9,6); CapacitiveSensor   Ring_L_Pad = CapacitiveSensor(9,5); CapacitiveSensor   Ring_LT_Pad = CapacitiveSensor(9,4); CapacitiveSensor   Ring_T_Pad = CapacitiveSensor(9,3); CapacitiveSensor   Ring_TR_Pad = CapacitiveSensor(9,2); //create a NeoPixel strip Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_PIXELS, PIN, NEO_GRB + NEO_KHZ800); boolean ModeMode(){     long Mode_Pad_Value =  Mode_Pad.capacitiveSensor(30);     if (Mode_Pad_Value>500)     return 1;     else     return 0; } boolean RGBMode(){     long RGB_Pad_Value =  RGB_Pad.capacitiveSensor(30);     if (RGB_Pad_Value>500)     return 1;     else     return 0; } boolean MusicMode(){     long Music_Pad_Value =  Music_Pad.capacitiveSensor(30);     if (Music_Pad_Value>500)     return 1;     else     return 0; } char Check_Ring_Pos() {     char ring_pos = 0;     char result = 0;     long Ring_L_Pad_Value =  Ring_L_Pad.capacitiveSensor(30);     long Ring_LT_Pad_Value =  Ring_LT_Pad.capacitiveSensor(30);     long Ring_T_Pad_Value =  Ring_T_Pad.capacitiveSensor(30);     long Ring_TR_Pad_Value =  Ring_TR_Pad.capacitiveSensor(30);     if (Ring_L_Pad_Value>500)     ring_pos = 1;     if (Ring_LT_Pad_Value>500)     ring_pos = 2;     if (Ring_T_Pad_Value>500)     ring_pos = 3;     if (Ring_TR_Pad_Value>500)     ring_pos = 4;   char current_ring_pos = ring_pos;   Serial.println(current_ring_pos - pvs_ring_pos);   if ((current_ring_pos - pvs_ring_pos) == 1)   result = 1; //Serial.print("Ring touched clockwise");   if ((current_ring_pos - pvs_ring_pos) == -1)   result =2; //Serial.print("Ring touched counter clockwise");   if (current_ring_pos != pvs_ring_pos);   pvs_ring_pos = current_ring_pos;   return result; } char Check_Slider_Pos() {     char slider_pos = 0;     char result = 0;     int sensorValue1 = ADCTouch.read(A0);        int sensorValue2 = ADCTouch.read(A1);         int sensorValue3 = ADCTouch.read(A2);        int sensorValue4 = ADCTouch.read(A3);     int sensorValue5 = ADCTouch.read(A4);        sensorValue1 -= ref1;            sensorValue2 -= ref2;     sensorValue3 -= ref3;            sensorValue4 -= ref4;     sensorValue5 -= ref5;     if (sensorValue1>50)     slider_pos = '1';     if (sensorValue2>50)     slider_pos = '2';     if (sensorValue3>50)     slider_pos = '3';     if (sensorValue4>50)     slider_pos = '4';     if (sensorValue5>50)     slider_pos = '5';   char current_slider_pos = slider_pos;   if ((current_slider_pos - pvs_slider_pos) == 1)   result = 1; //Serial.print("Slider Left to Right");   if ((current_slider_pos - pvs_slider_pos) == -1)   result =2; //Serial.print("Slider Right to Left");   if (current_slider_pos != pvs_slider_pos);   pvs_slider_pos = current_slider_pos;   return result; } void RGB_Mode(){   Serial.print("We have entered RGB Mode");   beep();   uint16_t i, j, k;   Brightness = 255;   while(1){ //Stay in RGB mode   char Sider_Status = Check_Slider_Pos();   char Ring_Status = Check_Ring_Pos();   if (Sider_Status ==1){ //return 0 for no movement and 2 for right to left   Serial.println ("Moved Left to Right");   beep();   Brightness = Brightness+50;   Serial.print(Brightness);   }   if (Sider_Status==2){ //return 0 for no movement and 2 for right to left   Serial.println ("Moved Right to Left");   beep();   Brightness = Brightness-50;   Serial.print(Brightness);    }   if (Ring_Status==1) {//return 0 for no movement and 2 for counter clockwise   Serial.println ("Ring in Clockwise");   beep();   i = random (0,255);   j = random (0,255);   k= random (0,255);   }   if (Ring_Status==2) {//return 0 for no movement and 2 for counter clockwise   Serial.println ("Ring in Counter-Clockwise");   beep();   i = random (0,255);   j = random (0,255);   k= random (0,255);   }   for(int x=0; x0; i--) {      strip.setBrightness(255);      strip.fill(255,(i+0),(1+i));      strip.fill(0,0,i);      strip.show();      delay(20);   }   }   if ( RGBMode() || ModeMode() || MusicMode())   break;   } } void Music_Mode(){   Serial.print("We have entered MUSIC Mode");   beep();   while(1){ //Stay in RGB mode   if (digitalRead(A5)==LOW)   {     Serial.print("TAP");       for(int i=0; i< 48; i++)   {      strip.setBrightness(random (100,255));      strip.setPixelColor(i, strip.Color(random (0,255), random (0,255), random (0,255)));      strip.show();   }   delay(100);   }   else   {   for(int i=0; i< 48; i++)   {      strip.setBrightness(0);      strip.setPixelColor(i, strip.Color(random (0,255), random (0,255), random (0,255)));      strip.show();   }   }   if ( RGBMode() || ModeMode() || MusicMode() )   break;   } } void setup() {   // start the strip and blank it out   strip.begin();   //strip.show();   //cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example    Serial.begin(9600);    ref1 = ADCTouch.read(A0, 500);        ref2 = ADCTouch.read(A1, 500);         ref3 = ADCTouch.read(A2, 500);        ref4 = ADCTouch.read(A3, 500);    ref5 = ADCTouch.read(A4, 500);    pinMode(BUZZER, OUTPUT); } void loop() {   //strip.clear();  strip.show();     if (ModeMode()==1)     Mode_Mode();     if (RGBMode()==1)     RGB_Mode();     if (MusicMode()==1)     Music_Mode(); } void beep(){ tone(BUZZER,400); delay(50); noTone(BUZZER); }     ### 2023 HALLOWEEN HACKFEST: TREAT TROUGH OF TERROR IS ACTUALLY PRETTY CUTE Even though it seems the worst of COVID has passed, October generally kicks off cold and flu season, so why not continue to pass out Halloween treats in a socially-distanced fashion? That is, of course the idea behind [Gord Payne]’s Halloween Treat Trough of Terror. Lay a treat at the top of the trough and it will activate the LED strips that follow the treat down to the end, as well as some spooky sounds. The treat in question is detected by an SR-04 ultrasonic distance sensor connected to an Arduino Nano. All in all this was a highly successful build as far as neighborhood entertainment value goes. Toddlers stared in awe at the blinkenlights, teenagers proclaimed it ‘sick’, and we can only assume that the adults were likely happy to see something aimed at kids that’s not scary. [Gord] has a nice how-to if you want to build your own, and of course, the Arduino sketch is available. Be sure to check it out in action after the break. Don’t have room to build a treat slide? Here’s a socially-distanced dispenser that lets them stomp a giant button. Source: 2023 HALLOWEEN HACKFEST: TREAT TROUGH OF TERROR IS ACTUALLY PRETTY CUTE ### USING LORA NODES AS SOIL MOISTURE SENSING ANTENNAS Although we generally think of Internet of Things (IoT) and similar devices as things that are scattered around above ground, there are plenty of reasons to also have such devices underground. These so-called IoUT devices are extremely useful when it comes to monitoring underground structures, but communication via radiowaves is obviously impacted when soil is in the way. Although there are ways to get around this, a 2022 paper by Maja Škiljo and colleagues in Sensors covers an interesting way to make use of this signal attenuation property of changing moisture levels in soil. By quantifying the exact attenuation of the signal received at the gateways, they were able to determine the soil moisture levels around the LoRa node which had been buried at a depth of approximately 14 centimeters. This LoRa node used off-the-shelf components consisting of an ATmega328P-based Arduino Pro Mini and SX1276-based RFM95W LoRa module with a spring antenna. During experimentation in- and outdoors it was determined that a narrowband, printed (PCB) antenna was optimal for soil moisture sensing purposes. Other than the interesting question of how to keep soil moisture sensing nodes like this powered up over long periods of time (perhaps periodic retrieval to replenish the battery), this would seem to be a very interesting way to monitor the soil moisture levels in something like a field, where each node can provide its own ID and the received signal providing the relevant data in the form of the SNR and other parameters recorded by the gateway. (Heading image: The measurement results of: (a) RSSI in dBm collected from gateway 2 and (b) soil moisture during the winter period. (Credit: Maja Škiljo et al., 2022) ) Source: USING LORA NODES AS SOIL MOISTURE SENSING ANTENNAS ### CPU BUILT FROM DISCRETE TRANSISTORS We all know, at least intellectually, that our computers are all built with lots of tiny transistors. But beyond that it’s a little hard to describe. They’re printed on a silicon wafer somehow, and since any sufficiently advanced technology is indistinguishable from magic, they miraculously create a large part of modern society. Even most computers from 40 or 50 years ago were built around various inscrutable integrated circuits. On the other hand, this computer goes all the way back to first principles and implements a complete processor out of individual transistors instead. The transistor computer uses over 2000 individual transistors to implement everything comprising the 11-bit CPU. The creator, Reddit user [ Weekly_Salamander_78] also has an online interactive book that walks through each of the steps that is required to get to the point of having a working computer like this. Starting with a guide on building logic gates from transistors it will eventually cover the arithmetic logic unit, adders, memory, clocks, and everything else that is needed for the complete CPU to get up and running. The design does rely on an Arduino for memory to simplify some things, and in the end it’s able to run a Hello, World! program and play a simple dinosaur game as well. Building a computer out of discrete components like this is an impressive accomplishment, although we might not envy the creator of it when it comes time for troubleshooting or maintenance of all of those individual components. Presumably it would be much easier to work on than something like a relay computer, but for now we’ll all take a moment to be thankful that almost no one needs to work on debugging vacuum tube computers anymore. Source: CPU BUILT FROM DISCRETE TRANSISTORS ### ON SEMICONDUCTOR LOW DROPOUT (LDO) LINEAR VOLTAGE REGULATORS Delivering LDO products in high performance, low power, small form factor solutions to enhance end products ON Semiconductor’s portfolio of Low Dropout (LDO) Linear Voltage regulators can operate as precision current regulators providing highly stable and accurate voltages with low noise, high PSRR, low dropout, and a very low quiescent current consumption. They provide a wide range of input voltage options with fixed and adjustable output voltage. Available in single and dual output configuration. Key features Small size – Industries smallest form factor to performance ratioLow noise / High PSRR – Market leading PSRR performanceLong battery life – Low Iq to Extend Battery LifeWide Input Voltage – 1.0V to 700V input available In addition to their robust design and high reliability, the portfolio offers a variety of protections, making them virtually blow-out proof including overcurrent protection, overvoltage protection, overheat protection, and safe area compensation. Aside from a combination of ideal performance characteristics above, the portfolio is also offered in a variety of package sizes to match specific application requirements for applications such as industrial, consumer, portable & wireless (cameras, tablets, wireless handsets, and smartphones), IoT, and automotive. Read more: ON SEMICONDUCTOR LOW DROPOUT (LDO) LINEAR VOLTAGE REGULATORS ### Compact Soil Moisture Monitoring Device for IoT with Low Power Consumption Many soil monitoring sensors are available, compatible with Arduino and other embedded modules, making them suitable for programming in different project domains, including Smart Agriculture Monitoring Systems. However, a challenge arises due to the lack of a standardized, versatile module that can be easily adapted to various projects and applications. In this endeavor, our goal is to develop a cost-effective, interconnected solution that includes a pre-assembled soil monitor built from a range of components. The development of this advanced project was made possible by the creation of low-power and compact PCB boards through PCBWay, and we will also provide insights into the process of designing and ordering these boards with PCBWay. Within this project, our objectives encompass accomplishing the following: Having Soil sensor and the Microcontroller on a single board. 18650 Lithium battery-based system Reverse Polarity Protection for the battery USB Port to program, get a log or charge the battery Low power consumption Wi-Fi Connectivity Small size to be fit inside a 3D printed enclosure A ready to use and ready to manufacturing product Design the PCB Ability to increase the Soil probe current Essential Components for Constructing a Soil Moisture Monitoring Device The comprehensive Bill of Materials (BOM) is provided in the following inventory: Qty Value Package Parts 1 Pin Header - 0.254" 1X02 JP1 1 Jumper - 0.254" 1 .1uF/50v C0603 C5 1 0.1uF / 6.3V C0603 C1 1 0.1uF / 6.3V C0805 C8 1 0R R0805 R6 1 1.25k R0603 R9 1 100R R0805 R11 1 100k M0805 R14 2 10k R0603 R12, R13 1 10k R0805 R10 1 10uF C0805 C4 1 10uF / 6.3V C0805 C7 4 12k M0805 R1, R2, R3, R4 1 12k R0805 R5 1 18650 BATTERY HOLDER HOLDER BAT1 2 2.2uFuF / 6.3V C0805 C2, C3 1 22.1k R0603 R15 1 2N3904 SOT23 Q1 1 2k R0603 R17 1 330R R0603 R8 1 47.5k R0603 R16 1 470pF/10V C0805 C6 1 629105136821 USB-MICRO J1 1 680R R0603 R7 1 ESP-12E/F ESP-12E IC1 1 LTC4054ES5-4.2#TRMPBF SOT95P280X100-5N U1 1 MIC5219-3.3YM5 SOT23-5 IC3 2 RED LED CHIPLED_0805 LED1, LED2 1 SILABS_CP210 SILABS_MLP28 IC2 2 SKRPABE010 SKRPABE010 SW1, SW2 1 SRV05 SC-74 D1 1 SS14 DO-214AC D2 2 SS8050 SOT23 T1, T2 1 Si2301 SOT23-3 Q2 Circuit Schematic for an Intelligent Plant Monitoring Device The comprehensive diagram for the intelligent soil moisture monitoring device is presented below. Let's explore the connections of the components. To enhance clarity, we've divided the schematic into separate blocks, aligning with the operational principle of each major component. Control Application This is the ESP-12 microcontroller, which is programmed using the programmer. It's a highly popular and cost-effective WiFi-based microcontroller with multiple pins. The R6 component is a 0-ohm jumper that serves to activate the deep sleep mode. There are four resistors for pull-up purposes connected to the IO0, IO2, EN, and RST pins. C1 and R4 form a time delay circuit to ensure a proper reset during each reset state or power-on mode. Additionally, there's a pull-down resistor on the IO15 pin. The soil probe connects to two pins, IO5 and IO4. The TX and RX pins are linked to the UART to USB bridge. SW1 and SW2 are utilized for the RST and Boot modes. There's also an ADC pin employed to gauge changes in the soil probe corresponding to variations in soil moisture levels. The Sensing Probe The Soil Monitor utilizes a pair of pins, IO5 and IO4, to collectively deliver a dual current (25mA x 2 = 50mA). Due to the minimal current variation, a transistor is employed to amplify the signal, resulting in a substantial number of alterations that can be detected by the ADC. This circuit design is adopted from the SparkFun Soil Probe. UART to USB Conversion In this context, the conversion of RX-TX to the USB port is necessary. This conversion is essential both for programming the module and for obtaining the necessary logs on the UART terminal during the development phase. To achieve this, we opted for the widely acclaimed CP2102 Module. A jumper is employed to disconnect the CP2102 and its associated circuitry from the power supply, conserving battery power when the probe is utilized in an application rather than for development purposes. Nonetheless, regardless of the RST and BOOT switches, an automatically configurable logic, employing a transistor, is established in this setup to program the board with an auto-boot and reset capability. The USB Input Segment The USB input segment incorporates effective ESD protection mechanisms to safeguard the device from electrostatic discharge surges. The USB connector utilized in this configuration bears the part number 629105136821, which is the Wurth Elektronic Micro USB Port. Alternatively, a compatible USB port with a generic package can also be employed. Additionally, an LED indicator is integrated here to signal the presence of USB power. Battery Charging Segment The lithium battery is charged using an Analog Devices IC, specifically the LTC4054ES5-4.2#TRMPBF, which is an 800mA, 4.2V battery charger. Resistor R9 is employed to deliver an 800mA charge current to the battery. An LED connected to the charge status pin serves as an indicator for the charging process. It remains continuously lit during the charging phase and extinguishes when the battery charging is finished. Voltage Regulation Component Because we are utilizing a 3.3V logic level controller and the battery operates within a voltage range of 3.7V nominal to 4.2V maximum, we require a voltage regulator to achieve the desired output voltage. In this context, we've selected the MIC5219-3.3V IC. The rationale behind this choice is its capacity to provide 500mA of current, precise load and line regulation, an extremely low dropout voltage, in addition to a 500mV output at 500mA and an ultra-low noise regulation feature. This component is readily available and is also cost-effective, making it an ideal low-dropout voltage regulator for our application. Another critical consideration is safeguarding against reverse polarity. To address this, we've implemented a high-power P-channel MOSFET to offer seamless reverse polarity protection. Specifically, Q2 will activate only when the battery is correctly connected. If the battery is inserted in the wrong orientation, Q2 will deactivate and disconnect the entire circuit from the battery. Additionally, D2 is utilized to prevent reverse current flow into the charger. In cases where the USB is not plugged in, this diode significantly reduces battery leakage current. While the diode's voltage drop may affect charging characteristics, it is an acceptable trade-off given its infrequent use due to the extended battery backup. Manufacturing the PCB for the Plant Monitoring Device The PCB design has been completed based on the following specifications: Displayed above is a 2D image of the PCB. Particular emphasis should be placed on the Sensor Probe section - In this specific section, the solder mask layer has been deliberately omitted on both the top and bottom layers. To ensure robust connectivity on both layers, multiple vias have been interconnected. It is recommended, and if feasible, highly advantageous to opt for gold plating in this area. Doing so enhances connectivity by offering a low-resistance path through the gold mask. However, it's important to note that this choice does come with a substantial increase in the PCB cost. For the sake of prototypes and testing, we have utilized a standard solder mask with SnPb. Furthermore, it is recommended to avoid copper thickness less than 35um for this PCB. We have also adhered to the appropriate trace thickness for the 3.3V line, in accordance with IPC standards, to accommodate the 500mA of current flow. Taking into account the fact that both our battery traces and the USB input can supply 800mA of current, we have applied the same consideration to the VUSB (5V input) and battery traces. Ultimately, we generated 3D files and exported them in STEP format before fabricating the physical PCB to ensure that all components are correctly positioned and ready to fit inside the enclosure. Please disregard the battery capacity; it is included solely for illustrative purposes. Placing an Order for PCBs through PCBWay Now that the design has been concluded, you can move forward with the PCB order: Step 1: Access the PCBWay website and, if this is your first visit, register an account. Then, within the PCB Prototype section, input your PCB's dimensions, layer count, and the quantity of PCBs you need. Step 2: Continue by selecting the "Quote Now" button. You will be directed to a page where you can configure additional parameters such as board type, layers, PCB material, thickness, and more. Most of these options come pre-selected by default, but if you have specific preferences, you can make your selections here. Step 3: The last stage entails uploading the Gerber file and completing the payment. PCBWay conducts a validation check on your Gerber file to ensure its validity before allowing you to proceed with payment. This procedure ensures that your PCB is compatible with the fabrication process and will be delivered as promised.   Assembling the PCB Following the placement of the board order, it was delivered to me via courier within a few days, neatly packaged in a well-labeled box. The PCB quality met expectations, as usual. Below, you can see both the top and bottom layers of the board: Once I had confirmed that the tracks and footprints were accurate, I moved forward with the PCB assembly. Here is an image of the fully soldered board: Adafruit IO Setup Adafruit IO serves as an open data platform, enabling the consolidation, visualization, and analysis of real-time data in the cloud. By utilizing Adafruit IO, you gain the capability to upload, showcase, and oversee your data through the internet, transforming your projects into IoT-enabled solutions. With Adafruit IO, you can manage motors, access sensor data, and craft intriguing IoT applications that operate seamlessly over the internet. In order to utilize Adafruit IO, the initial step involves creating an account on the Adafruit IO platform. To achieve this, navigate to the Adafruit IO website and click on the "Get started for Free" option located in the top right corner of the screen. Once you have completed the account registration, log in to your account and access your account username and AIO key by clicking on "View AIO Key" located in the top right corner. Clicking on "AIO Key" will trigger a pop-up window displaying your Adafruit IO AIO Key and username. Copy both the key and the username, as you will require them later in your code. Next, you'll need to establish a feed. To do so, select "Feed," then go to the "Actions" menu, where you will find various options. Among these options, choose "Create a New Feed." Following this step, a new window will appear where you should input the Name and, optionally, a Description for your feed. Once this information is provided, click on "Create," and you will be directed to the feed you've just established. After the feed is created, the next step involves setting up an Adafruit IO dashboard to visualize these readings in a graph. To generate a dashboard, access the Dashboard section, then proceed to the "Actions" menu, where you can select "Create a New Dashboard." In the subsequent window, provide a name for your dashboard and click on "Create." The dashboard has been successfully created. Now, we will incorporate the 'Line Chart' block into it. To add a block, click on the 'Gear' icon located in the top right corner, then choose 'Create New Block.' In the subsequent window, select the Line Chart block and the specific Feed from which you wish to display the data. The completed dashboard will have this appearance: Programming the ESP-12E The comprehensive code for the Smart Plant Monitoring Device can be found towards the conclusion of this document. In this section, we will elucidate crucial segments of the code. The code relies on the Adafruit_MQTT and ESP8266WiFi.h libraries. You can obtain the Adafruit_MQTT.h library from the provided link, while the ESP8266WiFi.h library is automatically included with the ESP board package installation. Once you've successfully installed the libraries in the Arduino IDE, initiate the code by incorporating the necessary library files. #include #include “Adafruit_MQTT.h” #include “Adafruit_MQTT_Client.h” In the subsequent lines, input the Wi-Fi and Adafruit IO credentials that you had previously copied from the Adafruit IO server. This information should encompass the MQTT server, Port No, User Name, and AIO Key. Const char *ssid = “Wi-Fi Name”; const char *pass = “Password”; #define MQTT_SERV “io.adafruit.com” #define MQTT_PORT 1883 #define MQTT_NAME “Usernae” #define MQTT_PASS “Password” Adafruit MQTT serves a dual purpose: data can be both published to and subscribed from the broker. In this context, we will be publishing data to the broker. To do so, we start by establishing an Adafruit_MQTT_Client mqtt() object, followed by configuring the Adafruit IO feed to store the sensor data. Adafruit_MQTT_Client mqtt(&client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish Moisture = Adafruit_MQTT_Publish(&mqtt,MQTT_NAME “/f/Moisture”); Within the moisture() function, our initial step involves retrieving moisture data from the soil moisture sensor, which is linked to the A0 pin of the ESP. Subsequently, these readings are transformed into a percentage format, and finally, the data is transmitted to the Adafruit IO feed. Void moisture() { MQTT_connect(); moisturePercentage = ( 100.00 – ( (analogRead(moisturePin) / 1023.00) * 100.00 ) ); Serial.println(“Soil Moisture is = “); Serial.println(moisturePercentage); Serial.println(“%”); delay(900); Moisture.publish(moisturePercentage); } Next in line is the void loop(). This is where all the operations are executed. Within this loop, the initial action is to invoke the moisture() function for obtaining sensor data and transmitting it to Adafruit IO. Ultimately, the crucial function to be called is ESP.deepSleep(). This function places the module into a sleep state for the specified duration, which is set to 1 hour in this instance. Void loop() { moisture(); delay(3000); Serial.println(“deep sleep for 1 hour”); ESP.deepSleep(3600e6); } Testing the Smart Plant Monitoring Device With all the preparations completed, the final stage is to place this device inside a plant pot and observe its performance. However, prior to that, let's begin by uploading the code to the ESP-12E. To do this, connect the USB cable to the micro-USB port on the device, choose 'Generic ESP8266 Module' as the board type, select the appropriate port number, and then click the upload button. The device has been configured to gather sensor data, share it on Adafruit IO, and subsequently enter Deep Sleep mode for a duration of one hour. The Adafruit IO platform will exhibit the soil moisture measurements. To determine the battery's operational duration, we conducted measurements of current consumption in both normal mode and deep sleep mode using the Nordic Power Profiler Kit II. In the graph below, you can observe that the current consumption in normal mode registered at 70mA. Furthermore, the average current consumption in deep sleep mode amounted to 280 µA. These readings were employed in the calculation of battery runtime. The calculations are presented as follows: During wake mode, the device draws a current of 70 mA for approximately 10 to 12 seconds every hour, which amounts to 288 seconds or roughly 5 minutes per day. For the remaining 23 hours and 55 minutes, the device remains in a sleep state. Hence, the cumulative current consumption will be: The overall current usage equals the current drawn during wake mode plus the current utilized during sleep mode. Ttotal = 0.005A + 0.00669A = 0.01169 Battery Run Time = Battery Capacity (2600mAh) / Current Consumption (0.01169A)= 2.6 Ah/ 0.01169 = 222 Days These calculations are performed as approximations, providing an estimate of the battery's operational duration. That concludes the video, which offers a comprehensive explanation of the circuit, code, and its functioning. If you have any inquiries, kindly leave them in the comments section or feel free to initiate a discussion on our forum. Code #include #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" const int moisturePin = A0;  // moisteure sensor pin const int probe1 = 5;  const int probe2 = 4;  float moisturePercentage;              //moisture reading const char *ssid =  "Galaxy-M20";     // Enter your WiFi Name const char *pass =  "ac312124"; // Enter your WiFi Password WiFiClient client; #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "aschoudhary" // Your Adafruit IO Username #define MQTT_PASS "1ac95cb8580b4271bbb6d9f75d0668f1" // Adafruit IO AIO key Adafruit_MQTT_Client mqtt(&client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish Moisture = Adafruit_MQTT_Publish(&mqtt,MQTT_NAME "/f/Moisture");  // Moisture is the feed name where you will publish your data const unsigned long Interval = 50000; unsigned long previousTime = 0; void setup() {   Serial.begin(9600);   delay(10);   pinMode(probe1, OUTPUT);   pinMode(probe2, OUTPUT);   digitalWrite(probe1, HIGH);   digitalWrite(probe2, HIGH);   Serial.println("Connecting to ");   Serial.println(ssid);   WiFi.begin(ssid, pass);   while (WiFi.status() != WL_CONNECTED)   {     delay(500);     Serial.print(".");              // print ... till not connected   }   Serial.println("");   Serial.println("WiFi connected");     } void moisture() {    MQTT_connect();   moisturePercentage = ( 100.00 - ( (analogRead(moisturePin) / 1023.00) * 100.00 ) );    Serial.println("Soil Moisture is  = ");   Serial.println(moisturePercentage);   Serial.println("%");     delay(900);    Moisture.publish(moisturePercentage); } void loop() {   moisture();   delay(3000);   Serial.println("deep sleep for 1 hour");   ESP.deepSleep(3600e6); } void MQTT_connect()  {   int8_t ret;   // Stop if already connected.   if (mqtt.connected())    {     return;   }   uint8_t retries = 3;   while ((ret = mqtt.connect()) != 0) // connect will return 0 for connected   {         mqtt.disconnect();        delay(5000);  // wait 5 seconds        retries--;        if (retries == 0)         {          // basically die and wait for WDT to reset me          while (1);        }   } }   ### BOONTON PMX40 40GHZ RF POWER METER FOR USB-CONNECTED RF POWER SENSORS The PMX40’s intuitive, multi-touch display provides a standalone solution for capturing, displaying, and analyzing peak and average RF power in both the time and statistical domains for up to four RF channels. Saelig Company, Inc. has introduced the Boonton PMX40 40GHz RF Power Meter which combines the utility of traditional benchtop instrument, the flexibility and performance of modern USB RF power sensors, and the simplicity of a multi-touch display. It utilizes the excellent performance and capabilities of the external Boonton RTP and CPS families of USB RF power sensors which offer 3ns rise times and 195 MHz of video bandwidth. They can make accurate measurements virtually independently of signal modulation bandwidth. Up to four USB sensors can be connected for multi-channel power measurements.  Independent or synchronized multi-channel measurements of CW, modulated, and pulsed signals provide great flexibility in a benchtop unit without the need for PC control. This makes it ideal for use in ATE/rack-mount setups. The PMX40’s intuitive, multi-touch display enables fast configuration of the sensors, as well as easy access to measurement and analysis tools, providing a standalone solution for capturing, displaying, and analyzing peak and average RF power in both the time and statistical domains. The meter also incorporates a test source to verify sensor operation. For simple, intuitive measurements of repetitive waveforms, the PMX40 Continuous Mode of operation provides a numeric display of average, maximum and minimum signal powers. Analysis of fast-rising single pulses or pulses with short pulse repetition intervals (PRIs) requires an instrument with sophisticated trigger and data acquisition capability;  Read more: BOONTON PMX40 40GHZ RF POWER METER FOR USB-CONNECTED RF POWER SENSORS ### TURING COMPLETE PROGRAMMING ON ARM WITH TWO INSTRUCTIONS There are many questions that can be asked for software projects, with most of these questions starting with ‘Why…?’. This is true for the challenge of proving that cascading stylesheets are Turing-complete, or that you don’t need all those fancy ISA bits of an ARM processors when you already got the LDM and STM commands in the 32-bit ISA. What originally started off as a bit of a running gag in a group of developers led to [Kellan Clark] implementing a Turing-complete computer and a functioning interpreter using nothing but these two opcodes. These two opcodes essentially allow the storing or reading of data into memory from any combination of the 16 general-purpose registers (GPRs). This makes them both extremely versatile and also extremely open to ‘abuse’ like in this example. For a straightforward implementation that could prove the concept, [Kellan] decided to pick one of everyone’s favorite esoteric programming languages: Brainf**k, creating the charmingly titled Armf**k that allows anyone to write BF programs for any suitable ARM processor, like the ARM7TDMI in the Game Boy Advance that [Kellan] targeted. As a proof of concept it’s unquestioningly intriguing, and a great example of how the most powerful parts of any ISA are those that move data around. After all, as anyone who writes ASM and C knows, computers are just machines that can copy bytes around really fast to make stuff happen. Mind-blowing examples like these serve to illustrate that point quite well. Source: TURING COMPLETE PROGRAMMING ON ARM WITH TWO INSTRUCTIONS ### NVIDIA JETSON TX2 AI COMPUTING PLATFORM FOR AIOT APPLICATIONS IBASE Technology Inc, a world-leading manufacturer of industrial motherboard boards and embedded computing solutions has revealed its latest EC-3200 AI computing platform that is based on the cutting-edge power-efficient and high-performance NVIDIA Jetson Tegra X2 (TX2) processor. The NVIDIA Jetson TX2 pairs a dual-core Denver 2 alongside a quad-core ARM® Cortex®-A57 processor and provides 256 CUDA cores on the NVIDIA’s advanced Pascalä GPU architecture with up to 1.33 TFLOPS, delivering exceptional AI performance. Designed to operate under an extended temperature range from -20°C to +60°C, the EC-3200 leverages the integrated GPU-computing power of the Jetson TX2 platform in building edge inference servers to analyze and better manage real-time traffic flow in smart cities or to optimize the efficiency of operational processes in intelligent factories. “Current edge and cloud-based AI products require better computational and video analytics capability to perform demanding real-time data processing and overcome latency issues,” said Wilson Lin, Director of IBASE Product Planning Department. “The EC-3200 is no doubt a durable solution, especially built with a fanless design for non-stop operation, and takes advantage of the GPU-accelerated parallel processing of NVIDIA Jetson TX2 to handle data-intensive and mission-critical workloads with power efficiency and unmatched reliability.” Read more: NVIDIA JETSON TX2 AI COMPUTING PLATFORM FOR AIOT APPLICATIONS ### SIMPLE STM32 FREQUENCY METER HANDLES UP TO 30MHZ WITH EASE [mircemk] had previously built a frequency counter using an Arduino, with a useful range up to 6 MHz. Now, they’ve implemented a new design on a far more powerful STM32 chip that boosts the measurement range up to a full 30 MHz. That makes it a perfect tool for working with radios in the HF range. The project is relatively simple to construct, with an STM32F103C6 or C8 development board used as the brains of the operation. It’s paired with old-school LED 7-segment displays for showing the measured frequency. Just one capacitor is used as input circuitry for the microcontroller, which can accept signals from 0.5 to 3V in amplitude. [mircemk] notes that the circuit would be more versatile with a more advanced input circuit to allow it to work with a wider range of signals. It’s probably not the most accurate frequency counter out there, and you’d probably want to calibrate it using a known-good frequency source once you’ve built it. Regardless, it’s a cheap way to get one on your desk, and a great way to learn about measuring and working with time-varying signals. You might like to tke a look at the earlier build from [mircemk] for further inspiration. Video after the break. Source: SIMPLE STM32 FREQUENCY METER HANDLES UP TO 30MHZ WITH EASE ### Machine for Cutting Resistor Reels Utilizing Arduino Technology Introduction In advanced electronics PCB assembly lines, pick and place machines are typically used to retrieve components from an SMD reel and position them on a PCB. However, this becomes impractical for medium-scale production or when employing THT (through-hole type) components on your PCB. This situation is particularly relevant in cost-effective board assemblies, such as LED drivers and transformer less power supplies. To enhance the efficiency of this assembly process and facilitate the preparation of the necessary component quantities, we have developed the Arduino-based Resistor Cutting reels Machine. This machine is versatile and capable of managing various types of component reels, including those containing resistors, diodes, and similar items. It can precisely extract a specified quantity of components from a reel and then cut them to the desired amount. Consequently, it enables us to efficiently divide an entire reel into smaller, precisely measured segments. Fundamental Mechanism and Operation When I embarked on this project, I came across an existing project on the internet titled "Resistor Cutting Robot" by Pablo. While I found this project quite impressive, my goal was to enhance its reliability and simplify the construction process for a wider audience. To achieve this, I incorporated the following key improvements: The aim is to create a machine that is easily constructible, allowing individuals with access to a 3D printer to assemble it without the requirement for an extensive array of power tools. Enhance the precision and dependability of the machine by incorporating an MOC7811 optoisolator sensor, serving as a feedback mechanism for our Arduino. This addition enables us to precisely monitor the quantity of components pushed during each operation. Substitute the wooden base with readily accessible aluminum extrusion from the market, thereby enhancing the design's durability and user-friendliness. Modify the cutting mechanism by transitioning from stepper motors to servo motors, simplifying the design and making it more straightforward to construct. Enable universal access to the entire design by offering it as open-source, providing editable CAD files, schematics, and the Arduino code for all to use. Materials Needed for Constructing a Resistor Reel Cutting Machine As previously mentioned, the concept behind this construction was to keep the materials and tools required as straightforward and accessible as possible. You will exclusively require the following components to construct your resistor cutting machine. Mechanical Elements Aluminum Extrusion Profile 20x40 6T Slot Smooth Shaft Rod 8mm Diameter Threaded Rod 8mm Diameter Nema17 motor Coupling for 8mm soft shaft Flanged Ball Bearing 8mm bore – 2pcs Pillow Block Mount 8mm bore – 2pcs Cast Corner Bracket for 2020 Aluminum Extrusion – 4pcs Sliding T nut for 2020 Aluminum Extrusion – 20 pcs M4 6mm Socket Screws for T nut – 20 pcs Timing Belt for pully Electrical Components Nema17 Stepper Motor MG90S Servo Motor with Metal Gear Arduino Nano 16x2 LCD Screen A4988 Stepper Motor Driver module MOC7811 opto-coupler sensor 12V 2A DC adapter Push buttons 50V 100uf electrolytic capacitor Connecting Wires and perf board The Mechanical Assembly of the Arduino-Based Resistor Cutting Machine The entire mechanical assembly for the machine is divided into smaller sections and is elaborated upon below. Driving Mechanism: The primary driving motor for our machine is the NEMA17 stepper motor. If you are unfamiliar with working with NEMA17 stepper motors, you can refer to this article that provides a basic guide on using NEMA17 with an A4988 stepper motor driver module. The NEMA17 motor is linked to an 8mm flexible shaft through a coupler, as illustrated below. This setup ensures that when the motor rotates, the flexible shaft also rotates in tandem. We opted for a stepper motor due to its ability to provide consistent step control throughout the machine's operation, resulting in uniform feeding. As depicted in the image above, we've utilized a 3D-printed motor mount to secure the NEMA17 motor firmly to the aluminum extrusion bar. Feeding Mechanism: Moving on to the subsequent phase of the machine, we have the feeding system. This is accomplished through the utilization of a flexible shaft, a threaded rod, a pair of pillow blocks, and feeding rollers, as demonstrated below. Feeding Roller: This component is a 3D-printed part with a timing belt adhered to it. The rubber surface of the timing belt offers sufficient friction and pressure to ensure consistent advancement of the reel strip. Flexible Shaft: The flexible shaft is connected to the stepper motor, and the feeding roller is securely fastened onto the flexible shaft. This arrangement allows for the adjustment of the spacing between the feeding rollers as needed, and the roller rotates in sync with the stepper motor. Pillow Blocks: To ensure that the flexible shaft remains parallel to the aluminum extrusion, we have incorporated two pillow blocks, one on each side of the flexible shaft. Additionally, these two blocks assist in adjusting the gap between the flexible shaft and the threaded rod, thereby allowing control over the pressure applied by the rollers to the resistor reel. Threaded Rod and Flanged Bearing: We've employed an 8mm threaded rod with a flanged bearing positioned beneath the flexible shaft. These flanged bearings serve the dual purpose of securing the resistor reel in position and enabling free rotation as the roller moves, facilitating the feeding of the reel into the cutting section. Although the flanged bearing might not be entirely visible in the image above, you can refer to the video linked at the bottom of this page for a clearer comprehension. Reel Guide: The reel guide consists of a pair of 3D-printed components affixed to the aluminum extrusion. As depicted in the image, the resistor reel is directed into the rollers via this reel guide, ensuring that the reel consistently enters at a right angle to the feeding rollers. Counting and Feedback System: While I had carefully designed the feeding mechanism to the best of my ability, there were occasional occurrences of resistor reel slippage, resulting in uneven feeding. Therefore, I found it necessary to incorporate a sensor to tally the number of resistors being fed into the machine before the cutting process. This addition provides valuable feedback, allowing us to ensure that the operation runs seamlessly. In the depicted illustration, you can observe our installation of an MOC7811 optocoupler sensor designed to keep track of the resistors or diodes being dispensed from the feeding mechanism. It's worth noting that we have adjusted and adapted the distance between the sensor's transmitter and receiver to accommodate the entire strip's passage through the sensor. Cutting Mechanism: The final component of the machine is the Cutting Mechanism, which operates using two servo motors with blades affixed to their horns, as demonstrated below. I maintain my belief that there is ample room for enhancement in this particular aspect, particularly concerning the method of mounting the blades. I welcome any suggestions or input from readers who may have better alternatives. However, it's worth noting that employing two servos does offer an advantage, as it allows for independent control of the blades. We can fine-tune the servo angles individually to maintain close proximity of the blades to the strip and ensure they move at an equal speed and synchronized timing, thus guaranteeing a consistent cut on both sides. Schematic for the Arduino-Operated Resistor Reel Cutting Machine Below is the comprehensive circuit diagram for our homemade Arduino-based resistor cutting machine: As depicted, the circuit is quite straightforward. We've employed a 12V 2A adapter to supply power to the entire setup. The onboard 5V regulator on the Arduino Nano is utilized to energize the MOC7811 sensor and the servo motor, with power sourced from the 5V pin on the Arduino board. The connection between the 16x2 LCD and the Arduino Nano is facilitated by an I2C module, which is connected to the I2C pins on the Arduino, specifically pins A4 and A5. In the provided schematics, we've presented the MOC7811 circuit separately because Fritzing lacks a dedicated component for it. The 220-ohm resistor serves the purpose of regulating the current passing through the photodiode, while the 10K resistor acts as a pull-up resistor for the sensor's output pin. When an object is detected, the Sigout pin registers a voltage of 0V; otherwise, it reads 5V. This pin is connected to an analog pin on the Arduino to monitor the presence of any components passing through the sensor. As evident from the image above, I have assembled the entire circuit on a custom PCB (printed circuit board), incorporating header pins for connecting the stepper motor, servo motors, LCD display, and sensor. Subsequently, I secured the board and the LCD display firmly in position using L-clamps and a selection of screws, as illustrated in the image below: Programming the Arduino for the Resistor Reel Cutting Machine The comprehensive code for the resistor cutting machine is available at the end of this page. In this section, I will elucidate the crucial sections of the code. The entire code was developed and verified for Arduino Nano utilizing the old bootloader. If you have any queries, feel free to post them in the comment section below. Within the void setup function, we initiate by specifying the characteristics of input and output pins. It's noteworthy that we've designated the push button pin as an input with pull-up enabled. Consequently, when the button is pressed, the digital read will yield a zero. // Sets pinmodes pinMode(stepPin,OUTPUT); pinMode(dirPin,OUTPUT); pinMode(enablePin,OUTPUT); pinMode(pushButton,INPUT_PULLUP); Subsequently, we position our servo motors to their initial state. This action retracts the blades from the feeding path, allowing us to load the resistor reel into position. Adjustments to the values of left_pos and right_pos may be necessary depending on your specific needs. //Move servo to default position left_servo.attach(9); // attaches the servo on pin 9 to the servo object left_servo.write(left_pos); delay (1000); right_servo.attach(10); //attaches the servo on pin 10 to the servo object right_servo.write(right_pos); delay(1000); After completing the initialization process, we've employed a while loop to keep the program in a holding state while continually monitoring the push button's status. Only when the push button is pressed will the code progress further. This approach provides the user with an opportunity to prepare the machine before it commences its operation. while(digitalRead (pushButton) ==HIGH) //Wait here till this the button is long pressed { } We've implemented a function named "step_forward()" to advance the stepper motor by a single step. During this process, it increments a variable named "step_count" and simultaneously monitors for any issues in the resistor reel feed. Specifically, as the motor rotates, the resistor reel should progress forward, and the MOC7811 sensor should be activated by the resistor passing through it. If the sensor fails to detect any components while the stepper motor is in motion, it signifies a fault, prompting us to halt the process. This fault condition is addressed within the "else" loop in the code snippet below. void step_forward() { if (Step_count < Max_steps_before_fault) { digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction digitalWrite(stepPin,LOW); delayMicroseconds(1000); digitalWrite(stepPin,HIGH); delayMicroseconds(1000); Step_count++; } else { lcd.clear(); lcd.setCursor(3,0); lcd.print("Step Fault"); digitalWrite(enablePin,HIGH); //Diable Stepper Motor while (1); } } Continuing further, we have introduced another function named "chop()." Its purpose is to engage the servo motors and execute the cutting of the resistor reel once the desired number of components have been dispensed. It's crucial to ensure that both servo motors move simultaneously and cover the same distance. To achieve this synchronization, we have employed two "for" loops, as demonstrated below. void chop() { for (int steps = 0; steps <= 120; steps += 1) { left_pos = 170-steps; //moves servo from 160 to 60 right_pos = 60+steps; //moves servo from 60 to 160 left_servo.write(left_pos); right_servo.write(right_pos); delay(3); } delay(100); for (int steps = 0; steps <= 120; steps += 1) { left_pos = 60+steps; //moves servo from 60 to 160 right_pos = 170-steps; //moves servo from 160 to 60 left_servo.write(left_pos); right_servo.write(right_pos); delay(3); } } In the "void loop," there isn't much to manage. Our primary task is to continually turn the stepper motor until the sensor detects the presence of a resistor. To maintain a controlled pace, we've inserted a 20-millisecond delay between each motor step. //ROTATE the STEPPER TILL WE FIND A RESISTOR if (sensorValue<500)//if no resistor is found { step_forward(); delay(20); } In case the sensor is obstructed by a resistor, we acknowledge this by increasing the "Resistor_count" variable and subsequently continue with the step-forward operation. //IF RESISTOR DETECTED - Step forward till the resistor is passed if (sensorValue>500)//resistor detected { Resistor_count = Resistor_count+1; Step_count=0; while (sensorValue>500)//while resistor is still under sensor { step_forward(); sensorValue = analogRead(A0); delay(20); } } When the machine has dispensed the necessary quantity of resistors, it's time to cut the resistor reel, and the following code accomplishes this task precisely. You have the flexibility to adjust the "chop_count" variable according to your desired number of resistors for the cutting process. //IF COUNT REACHED if (Resistor_count==Chop_Count) { step_forward();step_forward();step_forward();step_forward(); step_forward();step_forward(); //few steps forward to cut exactly in the middle of two resitors chop(); Total_cut++; Resistor_count=0; delay(200); } The Arduino-Powered Resistor Cutting Machine in Operation Operating the machine is quite straightforward. Simply power it on, and the machine will go through its initialization process. Afterward, you'll be prompted to press a button. Prior to doing so, ensure you have your resistor or any other component reel with tape ready to feed into the machine. During this stage, the stepper motor will be deactivated, allowing you to manually adjust the motor's position to align the reel correctly, as illustrated in the image below. Following this, simply press the start button, and our machine will spring into action. If you'd like to observe the entire operation in action, you can watch the comprehensive demonstration video linked at the bottom of the page. To wrap up this article, I'm reaching its conclusion. I trust you found it enjoyable and gained some valuable insights. If you have any suggestions or innovative ideas for improvement, please don't hesitate to share them in the comment section; your feedback is highly appreciated. Additionally, if you have any questions about this project or similar endeavors, feel free to explore our forums for further discussions. Code /* Resistor cutting CNC Machine   *  Servo is connected to PWM pins 9 and 10   *  A4988 Stepper Driver Enable, Step and Dir pincs connected to D6, D3 and D4 resp.  *  I2C LCD dipslay connected to A4 and A5  *  MOC7811 is connected to A0  *  Push Button Connected to D8  */ #include   #include #include // defines pins numbers const int stepPin = 3;  const int dirPin = 4;  const int enablePin = 6; const int pushButton = 8; const int  Max_steps_before_fault=25; const int Job_Complete = 20; int Chop_Count = 0; int Resistor_count = -1; int Step_count =0; int Total_cut = 0; int left_pos = 170;    // variable to store the servo position int right_pos =60; Servo left_servo; Servo right_servo; LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() {     // Sets pinmodes   pinMode(stepPin,OUTPUT);    pinMode(dirPin,OUTPUT);   pinMode(enablePin,OUTPUT);    pinMode(pushButton,INPUT_PULLUP);   //Diable Stepper Motor   digitalWrite(enablePin,HIGH);   Serial.begin(9600);// initialize serial communication at 9600 bits per second:   lcd.begin ();   lcd.backlight();   //Move servo to default position   left_servo.attach(9);  // attaches the servo on pin 9 to the servo object   left_servo.write(left_pos);   delay (1000);   right_servo.attach(10); //attaches the servo on pin 10 to the servo object   right_servo.write(right_pos);   delay(1000);   if (digitalRead (pushButton) ==HIGH)   Chop_Count = 5;   else   Chop_Count =20;   lcd.clear();   lcd.setCursor(1,0);   lcd.print("Resistor Cutter");   lcd.setCursor(4,1);   lcd.print("Mode Set");   delay(3000);   lcd.clear();   lcd.setCursor(1,0);   lcd.print(" ~Chop "); lcd.print(Chop_Count); lcd.print(" pcs");   lcd.setCursor(0,1);   lcd.print(" Press to Start");   while(digitalRead (pushButton) ==HIGH) //Wait here till this the button is long pressed    {     } //Enable Stepper Motor   digitalWrite(enablePin,LOW);   lcd.clear();   lcd.setCursor(0,0);   lcd.print("R_Count:  /5"); //display the count in 8th place    lcd.setCursor(0,1);   lcd.print("Job:  /20 ");//display number of pcs at 4 and Steps at 14   delay (1000); } void step_forward() {   if (Step_count < Max_steps_before_fault)   {     digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction     digitalWrite(stepPin,LOW);      delayMicroseconds(1000);      digitalWrite(stepPin,HIGH);      delayMicroseconds(1000);      Step_count++;   }   else   {     lcd.clear();   lcd.setCursor(3,0);   lcd.print("Step Fault");   digitalWrite(enablePin,HIGH);    //Diable Stepper Motor   while (1);     } } void chop() {        for (int steps = 0; steps <= 120; steps += 1) {      left_pos = 170-steps; //moves servo from 160 to 60     right_pos = 60+steps; //moves servo from 60 to 160     left_servo.write(left_pos);       right_servo.write(right_pos);                delay(3);                         }   delay(100);      for (int steps = 0; steps <= 120; steps += 1) {      left_pos = 60+steps; //moves servo from 60 to 160     right_pos = 170-steps; //moves servo from 160 to 60      left_servo.write(left_pos);       right_servo.write(right_pos);                delay(3);                         } } void loop() {   lcd.setCursor(14,1);   lcd.print(Step_count);//display  Steps at 14   lcd.setCursor(8,0);   lcd.print(Resistor_count+1); //display the count in 8th place    lcd.setCursor(4,1);   lcd.print(Total_cut);//display  pcs at 4   int sensorValue = analogRead(A0); // read the input on analog pin 0 from MOC7811   //ROTATE the STEPPER TILL WE FIND A RESISTOR    if (sensorValue<500)//if no resistor is found      {      step_forward();      delay(20);     }   //IF RESISTOR DETECTED - Step forward till the resistor is passed    if (sensorValue>500)//resistor detected      {      Resistor_count = Resistor_count+1;      Step_count=0;      while (sensorValue>500)//while resistor is still under sensor       {         step_forward();         sensorValue = analogRead(A0);         delay(20);       }     }    //IF COUNT REACHED     if (Resistor_count==Chop_Count)    {      step_forward();step_forward();step_forward();step_forward(); step_forward();step_forward(); //few steps forward to cut exactly in the middle of two resitors      chop();      Total_cut++;      Resistor_count=0;      delay(200);    }    //Press the button for emergency stop    if (digitalRead (pushButton) ==LOW)    {       lcd.clear();       lcd.setCursor(0,0);       lcd.print(" Emergency Stop");       digitalWrite(enablePin,HIGH);    //Diable Stepper Motor       while (1);     }    //Stop the machine after 20 cuts        if (Total_cut == Job_Complete)    {       lcd.clear();       lcd.setCursor(0,0);       lcd.print(" Job Completed ");       digitalWrite(enablePin,HIGH);    //Diable Stepper Motor       while (1);     }   ### Arduino GIGA Display Shield Has Microphone, IMU and Supports Multitouch Good news for users of the The Arduino GIGA R1 WiFi board: you can now add a nice touch display to your board with minimum effort thanks to the brand-new Arduino GIGA Display Shield. It provides a 3.97” RGB touch screen with 480 × 800 pixels and capable of producing 16.7 million colors. The touch screen is multitouch enabled and supports gestures and up to five simultaneous touchpoints. Not Just a Display Besides the display, the shield also has an Arducam 20-pin camera connector, an MP34DT06JTR omnidirectional digital microphone from STMicroelectronics, a Bosch BMI270 6-axis Inertial Measurement Unit (IMU) and an RGB LED. It Connects to the Back The GIGA Display Shield connects to the two low, black pin sockets of GIGA R1 WiFi, but through the backside. This is possible because these sockets are accessible from both sides of the GIGA R1. This means that the extension connectors of the GIGA R1 on the top side remain accessible. Therefore, the display shield does not conflict with other extension shields. Powerful Touch Display Unit The GIGA Display Shield is larger (11.8 cm × 9 cm × 4 cm) than the GIGA R1 WiFi and completely hides it from view. As it has its own mounting holes, it turns the GIGA R1 into a nice, powerful display module that is easy to embed instead of a clumsy stack of Arduino shields. The GIGA R1 with its ARM Cortex-M7 and Cortex-M4 cores has plenty of processing power for creating high-quality graphics and animations. The GIGA Display Shield Has a Camera Connector As mentioned earlier, the shield also has a 20-pin camera connector. It is the same type of two-sided connector as on the GIGA R1 board. The RGB LED can indicate, for instance, if the camera or microphone are on. Building your own Wi-Fi video intercom or cloud dashboard has never been easier. The IMU is suitable for portable and handheld devices, but can also be used in static applications for vibration or shock detection. Source: Arduino GIGA Display Shield Has Microphone, IMU and Supports Multitouch ### SAM CONTROLLERS ABOUT TO LAUNCH POWER H MINI V2 DRIVER FOR DC MOTORS Sam Controllers are set to release Power H Mini V2 Driver for DC Motors. This Power H Mini V2 H-bridge provides a 12A Peak current, inbuilt pulse width modulation, and plug and play drivers. In 2018 Sam Controllers released the open-source Power H Mini H-bridge, which said to enable a lot of flexibility for DC motor applications. The 2018 tiny board had a voltage range of 4V to 28V, also has a peak current of 12A and a pinout and Interface similar to A4988, DRV8825, and other similar versions. Sam Controllers will be launching the new version which is Power H Mini V2 board, which offers extremely low heat resistance, and advanced energy recuperation. In the area of robotics application, the energy regains means that motors have much sharper, more controlled acceleration curves, and also breaks becomes faster and uniformly without waste of heat on the controller. The Power H Mini retains the peak current of 12A like its older version, it has two-wire control system and inbuilt PWM (Pulse width Modulation). It is made for full-bridge control of a single DC motor and two half bridges can control two motors, additionally, three motors can be controlled using mechanically dependent settings. The board is further equipped with an automotive-grade STMVNH7100AS H-bridge, and it has a similar board size with a 15mm x 20mm dimensions since it is a DC motor driver, it competes in use with H-bridge motor drivers based on the L298 or BTS7960 transistor design which is always produced in a module 2-3x, and it also integrates a dual inflexible high-side driver also having two low side switches. Read more: SAM CONTROLLERS ABOUT TO LAUNCH POWER H MINI V2 DRIVER FOR DC MOTORS ### FEED YOUR FASTENERS IN LINE, WITH A BOWL FEEDER If you spend much time around industrial processes, you may have seen a vibrating bowl feeder at work. It’s a clever but simple machine that takes an unruly pile of screws or nuts and bolts, and delivers them in a line the correct way up. They do this by shaking the pile of fasteners in a specific way — a spiral motion which encourages them to work to the edge of the pile and align themselves on a spiral track which leads to a dispenser. It’s a machine [Fraens] has made from 3D printed parts, and as he explains in the video below the break, there’s more to this than meets the eye. The basic form of the machine has a weighted base and an upper bowl on three angled springs. Between the two is an electromagnet, which provides the force for the vibration. The electromagnet needed to be driven with a sine wave which he makes with an Arduino and delivers as PWM via an H-bridge, but the meat of this project comes in balancing the force and frequency with the stiffness of the springs. He shows us the enormous pile of test prints made before the final result was achieved, and it’s a testament to the amount of work put into this project. The final sequence of a variety of objects making the march round the spiral is pure theatre, but we can see his evident satisfaction in a job well done. Oddly this isn’t the first bowl feeder we’ve seen, though it may be one of the most accomplished. We particularly like this tiny example for SMD parts. Source: FEED YOUR FASTENERS IN LINE, WITH A BOWL FEEDER ### TINY MEMS MICROPHONE FEATURES 185ΜA ULTRA-LOW POWER MODE The InvenSense T3902 is what TDK Corporation claims to be the world’s lowest power Pulse Density Modulation (PDM) microphone for mobile, IoT and other consumer devices. The multi-mode bottom-port MEMS microphone offers an exceptionally efficient 185µA ultra-low power mode, high SNR of 64.5 dB, and high Acoustic Overload Point (AOP) of 120 dB in a 3.5×2.65×0.98mm package. The microphone’s AlwaysOn functionality in low-power mode enables immediate accessibility upon wake command. TDK’s new T3902 microphone enables OEM partners to differentiate their product offerings by improving the consumer experience with reduced power consumption. This is especially critical to wearable and IoT designs where reduced board space and battery size are key factors to enabling a small form factor as well as providing a flexible and efficient (low power AlwaysOn) system design. Key features 5 × 2.65 × 0.98 mm surface‐mount packageLow power: 185 µA in Low‐Power ModeExtended frequency response from 36 Hz to >20 kHzSleep Mode: 12 µAHigh power supply rejection (PSR): −97 dB FSFourth‐order Σ‐Δ modulatorDigital pulse density modulation (PDM) outputCompatible with Sn/Pb and Pb‐free solder processesRoHS/WEEE compliant Read more: TINY MEMS MICROPHONE FEATURES 185ΜA ULTRA-LOW POWER MODE ### Creating an Animatronic Eye with Arduino Using 3D Printing Introduction In this endeavor, we're embarking on the construction of an Arduino-based animatronic eye. The inspiration for this project was born during my online quest for innovative project ideas, and this concept instantly captivated my interest. Firstly, its aesthetic appeal combined with a straightforward mechanism made it an intriguing choice. Moreover, the project provided a substantial learning opportunity in the realm of mechatronics. I'd like to extend my appreciation to Will Cogley, who not only crafted the 3D model but also generously shared all source files with the maker community. In his own words, his intention was to design it with accessibility in mind for fellow enthusiasts. It's worth noting that there are two versions of this animatronic eye design available: a basic version and an advanced one. For this particular project, we've opted to construct the basic version. Throughout our journey, we'll be sharing our firsthand experience, including any challenges we encountered along the way. Essential Components for Crafting the 3D Printed Animatronic Eye The bill of materials (BOM) for this project is quite minimal, as the 3D printer handles most of the labor, and we primarily require a few screws and bolts, many of which are readily available at your local hobby store. A complete list of BOM is given below. Six SG90 Servo Motor Screws M2, M3, and M4 Arduino UNO Jumper Cables Breadboard Pinheadder PLA Filament and 3D Printer Processing and Assembly After Production - Animatronic Eye Mechanism After completing the 3D printing of all the components, the next step involves sanding the eye and certain other essential parts to ensure seamless assembly. Once these components have been properly sanded, we can proceed with the assembly process. If every part has been printed accurately, your final product should closely resemble the image depicted below. Our construction process commences with the attachment of 5 out of 6 servo motors to the Servo_Block module, as illustrated in the image below. I've utilized a black background for the image capture, as it enhances the image's level of detail. Next, we'll establish a connection between the Servo_Block and the Main_Base, resulting in a configuration resembling the image displayed below. Additionally, we've employed four 12mm M3 Allen screws to reinforce the device's legs. Following that, we will proceed to link the Eye-Adaptor with the Fork for each eye. After completing this step, we will attach the Eye-Holder to the Eye-Adaptor and the Three-point Connector to the Fork. Once all these steps are completed, the assembly will closely resemble the depicted image below. Upon completing the aforementioned steps, we will proceed to link the sixth and final servo to the Sub_Base. Subsequently, we will connect the Sub_Base to the Main_Base using screws. Following this, we will insert the Place Holder Eye into the eye adaptor. Additionally, we have fastened the X-Arm and Y-Arm with screws. Next, we will attach the Eyelid Connectors to the Eyelids, securing them in position with M3 screws from both sides. If you've executed all the steps accurately, the image will resemble the one displayed above. In it, you can observe that we've successfully linked all the eyelids to the eyelid connectors and secured them to the servo motor arms using screws. With this assembly complete, we can proceed to the coding phase. Circuit Diagram for the Animatronic Eye Created with 3D Printing Below, you'll find the schematic diagram for the self-made 3D printed animatronic eye, which is both straightforward and user-friendly. While the project's creator and author originally included the PCA9685 IC, a 16-channel 12-bit PWM servo motor driver, in the schematic diagram, we won't be utilizing it for this project. This is because the Arduino's Servo Library can efficiently manage the operation of all six servos without the need for the PCA9685 IC. As previously mentioned, the hardware setup is quite uncomplicated. We employ six of the Arduino's pins to manage the six servo motors. A brief examination of the Arduino's specifications reveals that it offers six PWM pins, and we utilize all of these pins to govern our entire set of six servo motors. Code for Operating the Animatronic Eye with Arduino The Arduino code for the animatronic eye is straightforward and highly comprehensible. To enable this code's functionality, we will utilize Arduino's Servo.h library. Our code commences by incorporating the essential libraries and establishing instances necessary for the management of all six servo motors. #include Servo top_left_eyelid; Servo bottom_left_eyelid; Servo top_right_eyelid; Servo bottom_right_eyelid; Servo Yarm; Servo Xarm; Following that, we delve into our setup() function. Within this function, we have clearly specified the correlation between each part of the eye and its corresponding Arduino pin. This setup proves valuable, as it allows us to easily disconnect and reconnect the components precisely as they were initially configured. top_left_eyelid.attach(10); bottom_left_eyelid.attach(11); top_right_eyelid.attach(5); bottom_right_eyelid.attach(6); Yarm.attach(9); Xarm.attach(3); Subsequently, we initiate serial communication for debugging purposes and invoke specific functions to maintain the eye's position at its center while keeping it open. Additionally, we incorporate deliberate delays to enhance stability. Serial.begin(9600); open_eye(); eye_ball_centert(); delay(2000); Following that, we move on to the loop() function. However, before delving into the loop function itself, it's crucial to elucidate some essential functions that serve as the foundation for comprehending the loop's contents. These functions are pivotal, as they play a central role in controlling the system's eye movements. The foremost among these is the "open_eye()" function. When examining the hardware setup, you'll observe the need to rotate one servo clockwise while simultaneously turning another servo counterclockwise. This same action is replicated for both the right and left eyelids. void open_eye() { top_left_eyelid.write(55); bottom_left_eyelid.write(36); top_right_eyelid.write(2); bottom_right_eyelid.write(160); } Moving forward, we encounter the "close_eye()" function. Within the close_eye function, we replicate precisely the reverse of the actions performed in the open_eye function. void close_eye() { top_left_eyelid.write(2); bottom_left_eyelid.write(120); top_right_eyelid.write(46); bottom_right_eyelid.write(55); } Continuing, we arrive at the "look_up()" and "look_down()" functions. When examining the hardware configuration, it becomes evident that adjusting the Y-arm of the device corresponds to the vertical movement of the eyeball, either upward or downward. void look_up() { Yarm.write(132); } void look_down() { Yarm.write(45); } Subsequently, we come to the "eye_ball_left()" and "eye_ball_right()" functions, which mirror the functionality of the up and down functions. The only distinction lies in the angles at which the device operates. void eye_ball_left() { Xarm.write(50); } void eye_ball_right() { Xarm.write(130); } Moving on, we encounter the "eye_ball_center()" function. Within this function, we configure the X-arm and Y-arm to be positioned at 90 degrees, allowing us to precisely align the eye to the central position. void eye_ball_centert() { Xarm.write(90); Yarm.write(90); } We now introduce a series of additional functions that I've designed to simplify our operations. Among these functions, the first is "synchronous_close()." Invoking this function will initiate one complete cycle of closing and opening the eye. void synchronous_close() { close_eye(); delay(420); open_eye(); delay(222); } Following that, we have the "random_close()" function, which will randomly toggle between opening and closing the eye. This adds a captivating and dynamic effect to the display. void random_close() { close_eye(); delay(random(220, 880)); open_eye(); delay(random(220, 880)); } Moving forward, we introduce the "random_movement()" function. Within this function, we've incorporated the Arduino's "random()" function within the delay function to achieve random eye movements. void random_movement() { Xarm.write(60); delay(random(250, 340)); Yarm.write(80); delay(random(250, 340)); Xarm.write(120); delay(random(250, 340)); Yarm.write(140); Xarm.write(60); delay(random(250, 340)); Yarm.write(80); delay(random(250, 340)); Xarm.write(120); delay(random(250, 340)); Yarm.write(140); eye_ball_centert(); delay(300); synchronous_close(); random_close(); } Let's now delve into the core of our Arduino program, the "void loop" function. Within this pivotal function, we orchestrate a sequence of eye movements, including left, right, and center adjustments, followed by vertical movements of up and down. Additionally, we incorporate eye blinking actions into the loop. This entire sequence is repeated several times, introducing an element of randomness to the eye's motion. Towards the conclusion of the function, we incorporate two "for" loops, serving as illustrative examples of how to attain smooth and controlled eyeball motions. void loop() { eye_ball_left(); delay(680); eye_ball_right(); delay(680); eye_ball_centert(); delay(450); synchronous_close(); eye_ball_centert(); delay(450); look_up(); delay(400); look_down(); delay(400); eye_ball_centert(); delay(300); random_close(); delay(450); look_up(); delay(400); look_down(); delay(400); random_movement(); delay(400); eye_ball_centert(); delay(300); top_left_eyelid.write(2); bottom_left_eyelid.write(120); delay(200); top_left_eyelid.write(55); bottom_left_eyelid.write(36); delay(200); open_eye(); delay(500); for (int i = 60; i < 120; i++) { Xarm.write(i); Yarm.write(i - 5); delay(10); } eye_ball_centert(); delay(400); synchronous_close(); for (int i = 120; i > 60; i--) { Xarm.write(i); Yarm.write(i - 5); delay(10); } } With the completion of the code section, we can now proceed to the subsequent section of the article. Testing and Troubleshooting the 3D Printed Animatronic Eye Due to the demanding nature of the mechanical aspect of this project, we encountered several initial challenges. In this section, I will address these issues. Our initial hurdle involved the eye placeholders, which were not moving seamlessly due to excessive friction between them and the eyelids. To address this issue, we resolved it by loosening the screw that secures the Eye-Holder to the sub-base of the device, which are the marked screws depicted above. Subsequently, we encountered another challenge related to connecting the servo arms to the eyelid arms, as well as the X-arm and Y-arm. This presented a significant issue, as the absence of proper joints would impede the device's smooth operation. In the image below, you can observe images of all the servo arms. Code #include Servo top_left_eyelid; Servo bottom_left_eyelid; Servo top_right_eyelid; Servo bottom_right_eyelid; Servo Yarm; Servo Xarm; void setup() {   top_left_eyelid.attach(10);   bottom_left_eyelid.attach(11);   top_right_eyelid.attach(5);   bottom_right_eyelid.attach(6);   Yarm.attach(9);   Xarm.attach(3);   Serial.begin(9600);   open_eye();   eye_ball_centert();   delay(2000); } void loop() {   eye_ball_left();   delay(680);   eye_ball_right();   delay(680);   eye_ball_centert();   delay(450);   synchronous_close();   //synchronous_close();   eye_ball_centert();   delay(450);   look_up();   delay(400);   look_down();   delay(400);   eye_ball_centert();   delay(300);   random_close();   delay(450);   look_up();   delay(400);   look_down();   delay(400);   random_movement();   delay(400);   eye_ball_centert();   delay(300);   top_left_eyelid.write(2);   bottom_left_eyelid.write(120);   delay(200);   top_left_eyelid.write(55);   bottom_left_eyelid.write(36);   delay(200);   open_eye();   delay(500);   for (int i = 60; i < 120; i++)   {     Xarm.write(i);     Yarm.write(i - 5);     delay(10);   }   eye_ball_centert();   delay(400);   synchronous_close();   for (int i = 120; i > 60; i--)  {     Xarm.write(i);     Yarm.write(i - 5);     delay(10);   } } void random_movement() {   Xarm.write(60);   delay(random(250, 340));   Yarm.write(80);   delay(random(250, 340));   Xarm.write(120);   delay(random(250, 340));   Yarm.write(140);   Xarm.write(60);   delay(random(250, 340));   Yarm.write(80);   delay(random(250, 340));   Xarm.write(120);   delay(random(250, 340));   Yarm.write(140);   eye_ball_centert();   delay(300);   synchronous_close();   random_close(); } void random_close() {   close_eye();   delay(random(220, 880));   open_eye();   delay(random(220, 880)); } void synchronous_close() {   close_eye();   delay(420);   open_eye();   delay(222); } void eye_ball_left() {   Xarm.write(50); } void eye_ball_right() {   Xarm.write(130); } void eye_ball_centert() {   Xarm.write(90);   Yarm.write(90); } void look_up() {   Yarm.write(132); } void look_down() {   Yarm.write(45); } void close_eye() {   top_left_eyelid.write(2);   bottom_left_eyelid.write(120);   top_right_eyelid.write(46);   bottom_right_eyelid.write(55); } void open_eye() {   top_left_eyelid.write(55);   bottom_left_eyelid.write(36);   top_right_eyelid.write(2);   bottom_right_eyelid.write(160); } ### HACKADAY PRIZE 2023: ABUSE A REFERENCE CHIP FOR A CHEAP INSTRUMENT A Rogowski coil is a device for measuring AC current that differs from a conventional current transformer in that it has no need to encircle the conductor whose current it measures. They’re by no means cheap though, so over time we’ve seen some interesting variations on making one without the pain in the wallet. We particularly like [Stephen]’s one, because he eschews exotic devices for an interesting hack on a familiar chip. He’s taken the venerable TL431 voltage reference chip and turned it into an op-amp. We had to look at the TL431 data sheet for this one and shamefacedly admit that since we’d only ever used the chip as a voltage reference, we hadn’t appreciated this capability. In this mode, it’s a op-amp with the inverting input connected to a fixed rail, so it can accept a feedback network to its non-inverting input just like any other. He’s using it as both integrator and amplifier, as well as, of course, in a more conventional power supply. We like the instrument, and the use of the TL431 in an unexpected manner is the cherry on the cake. Here’s a previous Rogowski circuit using more conventional parts. You can dive a bit more into the theory, too. Source: HACKADAY PRIZE 2023: ABUSE A REFERENCE CHIP FOR A CHEAP INSTRUMENT ### Exploring Arduino: An Open-Source Platform for Creative Electronics Prototyping Introduction Arduino represents an open-source electronics prototyping platform built upon versatile and user-friendly hardware and software components. Its purpose is to cater to artists, designers, hobbyists, and individuals keen on crafting interactive objects or environments. Getting Started with Arduino UNO The Arduino platform offers a variety of board options to choose from. For beginners, you can acquire a basic "Arduino UNO" board for under $5 through numerous online retailers. I recommend considering an "Arduino Starter Kit," which includes an Arduino UNO board along with an assortment of electronic components such as LEDs, resistors, transistors, motors, a breadboard, wires, and more. The Arduino UNO board comprises the following key components: Microcontroller: It features an Atmel ATmega328P 8-bit microcontroller (acquired by Microchip in 2016) with 32KB of Flash memory for program storage, 2KB of SRAM for data storage, and 1KB of EEPROM for non-volatile data. The microcontroller operates at a clock speed of 16MHz. Power Input Options: The Arduino board can be powered through various methods, including: USB Connector (5V): This connector serves a dual purpose, providing power and facilitating serial communication with a computer (e.g., for program loading). DC Power Jack (7-12V): You can use an AC-to-DC adapter or a battery pack to supply power through this jack. Vin/GND Pins (7-12V): Alternatively, power can be provided through these pins using a 7-12V source, such as a 9V battery. Power via 5V Supply: While the 5V pin is designed for powering external components, caution is advised when using it to power the Arduino to avoid potential polarity and voltage issues. Using the USB connector for power is a safer option. Power Output: The board provides regulated 5V and 3.3V output pins for powering external components. If the board is powered via USB, it can supply a total current of 500mA for both on-board and external use via the 5V power out pin (other power sources provide less current). The 3.3V pin can deliver 50mA. On-board LEDs: The Arduino UNO board includes several built-in LEDs for debugging purposes: Power-on LED: Indicates that the board is receiving power. Load and Pin 13 LED: Flickers during sketch upload and is connected to Digital Pin 13 for program testing and debugging. TX and RX LEDs: Indicate communication between the Arduino board and your computer, flickering during sketch upload and serial communication. Reset Button: Allows you to reset or restart the program. Digital Input/Output Pins: The board provides 14 digital pins (numbered from 0 to 13) that can be configured as inputs or outputs using the pinMode(0-13, INPUT|OUTPUT) function. You can use digitalRead(0-13) to read and digitalWrite(0-13, HIGH|LOW) to write to these pins. Each pin operates at 5V (HIGH) and 0V (LOW) and can provide or receive a maximum current of 40mA, with a continuous current limit of 20mA. The total current for the microcontroller should not exceed 200mA. PWM Output: Six of the pins (pins 3, 5, 6, 9, 10, and 11, marked with '~') can produce Pulse Width Modulated (PWM) output with the analogWrite(3|5|6|9|10|11, dutyCycle) function. PWM allows you to generate square wave signals with varying duty cycles, useful for simulating "analog" output to control the brightness of LEDs or the speed of motors. The PWM frequency is 980Hz for pins 5 and 6, and 490Hz for other PWM pins. There are 6 analog input pins labeled A0 to A5 on the Arduino board. By default, each of these pins can measure voltage levels ranging from 0V to 5V with a 10-bit resolution through an analog-to-digital converter (ADC). You can modify the upper range using the AREF pin and the analogReference() function. It's important to note that these analog pins are distinct from the digital pins, which are numbered from 0 to 13. To work with these analog pins, you can utilize pinMode(A0-A5, INPUT) (which is optional but recommended) and analogRead(A0-A5) to obtain readings in the 10-bit analog input range of [0,1023].While the primary purpose of the analog input pins A0-A5 is to handle analog input, they can also function as digital pins, akin to digital pins 0-13, for both input and output operations. You can employ pinMode(A0-A5, INPUT/OUTPUT) to specify their input/output mode and use digitalRead(A0-A5) or digitalWrite(A0-A5, HIGH|LOW) to read from or write to these pins.Additionally, the Arduino board includes 1 programmable serial port (USART) that can be configured using Digital Pin 0 for RX (receive) and Digital Pin 1 for TX (transmit). Alternatively, you can use the USB connection for communication with a PC, such as for loading programs.Furthermore, there are interrupt capabilities on the Arduino board. Pins 2 and 3 can be employed for "external" interrupts and mapped to INT0 and INT1. All 20 pins (comprising the 14 digital and 6 analog pins) can be utilized for "pin-change" interrupts. To summarize the key functions related to digital and analog pins: pinMode(0-13|A0-A5, INPUT|OUTPUT): This function sets the pin to either INPUT or OUTPUT mode. Digital pins are numbered from 0 to 13, while analog pins are labeled A0 to A5. digitalRead(0-13|A0-A5), digitalWrite(0-13|A0-A5, HIGH|LOW): These functions are applicable to all digital and analog pins for reading from or writing to them. analogWrite(3|5|6|9|10|11, dutyCycle): This function is specifically for PWM digital pins and allows you to set the duty cycle, ranging from 0 to 255 (0 for low and 255 for high). analogRead(A0-A5): This function is used to read a 10-bit input within the range of [0, 1023] for voltage levels between 0V and 5V from the analog input pins. Lastly, it's important to consider protective measures to safeguard the Arduino board. Ensuring Arduino Board Safety: A common issue I've observed with my students is the rough handling of the Arduino board, which can lead to unintentional short circuits due to exposed connections underneath. To mitigate this risk, you have the option to either acquire a protective casing or employ masking tape to shield the underside of the Arduino board. Moreover, it's advisable to disconnect the power or USB cable from the Arduino board while you're in the process of connecting or configuring the circuitry. This practice not only safeguards the Arduino but also prevents potential damage to your valuable PC. Step 1: Acquire the Arduino IDE by downloading it Begin by obtaining the Arduino IDE. To do this, visit the Arduino website, select the version that corresponds to your operating system (for instance, Windows or Mac OS X), and retrieve the zip file, such as "arduino-1.8.x-windows.zip. Next, extract the contents of the downloaded file into a directory of your preference. For example, you can choose to extract it to "D:\myProject." This action will result in the Arduino Development Kit being unzipped into "D:\myProject\arduino-1.8.x." For the sake of this article, we will refer to the installed directory as "$ARDUINO_HOME." Inside this directory, you will find the Arduino SDK executable named "arduino.exe." Step 2: Connect the Arduino Board to Begin Driver Installation (Best of Luck Required!) Connect the Arduino board to your computer using the USB cable. You will notice that the "POWER ON" LED illuminates in either green or orange. (For Windows) Proceed with driver installation by following these steps: Open "Control Panel." Access "Device Manager" (right-click and choose "run as administrator"). Locate and right-click on the "Unknown device" (or find it under "Ports (COM & LPT)"). Select "Update Device Driver." Set the driver location to "$ARDUINO_HOME\drivers," which corresponds to the unzipped Arduino directory. Disregard any warning messages. The device will be recognized as "Arduino Uno (COMxx)" within the "Ports (COM & LPT)" section. If your computer fails to detect the board (i.e., there is no unknown device in the previous step), consider the following troubleshooting steps: Attempt a different USB port. Test with another Arduino board. Experiment with your Arduino board on an alternative computer. And so on... However, refrain from dedicating excessive time to resolving Arduino driver issues Step 3: Open the Arduino SDK to Begin Crafting Your Initial Program Execute "arduino.exe" located in the $ARDUINO_HOME directory. Paste the following program (referred to as a "sketch" in Arduino) into the editor panel: #define BUILTIN_LED_PIN 13 // A Built-in LED connected to digital Pin 13 /* * Setup() runs only once for initialization */ void setup() { pinMode(BUILTIN_LED_PIN, OUTPUT); // Set Pin 13 (digital) to OUTPUT mode } /* * loop() repeats forever after setup() completed */ void loop() { digitalWrite(BUILTIN_LED_PIN, HIGH); // Set Pin 13 to HIGH (5V) to turn ON its built-in LED delay(1000); // Delay in msec digitalWrite(BUILTIN_LED_PIN, LOW); // Set Pin 13 to LOW (0V) to turn OFF its built-in LED delay(1000); // Delay in msec } Select the "Verify" button (or navigate to the "Sketch" menu ⇒ "Verify/Compile"; or use the Ctrl-R shortcut) to compile the code Press the "Upload" button (or go to the "File" menu ⇒ "Upload"; or use the Ctrl-U shortcut) to transfer the code to the Arduino board. You should observe the LED beneath Pin 13 blinking in orange, indicating the program is being loaded. If you encounter the error message "avrdude: stk500_getsync(): not in sync: resp=0x30," follow these steps: Navigate to the "Tool" menu. Access "Serial Port." Choose the appropriate "COMx" port. You can confirm the correct COM port by going to "Control Panel" ⇒ "Device Manager" and noting the COM port setting for "Arduino UNO." Once the program has been successfully loaded, you will observe the LED located beneath Pin 13 (the same LED used during program loading) alternately illuminating and extinguishing at one-second intervals, continuously. Dissecting the Program An Arduino program, known as a "sketch," typically consists of a minimum of two functions: "setup()" executes once during startup or after a reset for initialization tasks, while "loop()" runs endlessly after the "setup()" function completes. The "pinMode(pinNumber, INPUT|OUTPUT)" function configures the specified "pinNumber" to operate either as an INPUT or OUTPUT. With the "digitalWrite(pinNumber, HIGH|LOW)" function, you can set a digital output pin to either a HIGH state (5V) or LOW state (0V). Keep in mind that a digital output pin has a maximum current output of 40mA, with a continuous current limit of 20mA. Furthermore, the "#define" directive is resolved during compile-time, potentially reducing the SRAM usage compared to employing a variable. Examples Arduino IDE provides many examples, under "File" ⇒ "Examples", or "File" ⇒ "Sketchbook". For example, the above codes can be found under "File" ⇒ "Examples" ⇒ "Built-in Examples" ⇒ "01.Basics" ⇒ "Blink". 3.  Get Set, but Before Go.. 3.1  Electronic Tools and Equipment Essential or Required Digital Multimeter (A budget-friendly multimeter can be purchased for under $20). Explore online tutorials or YouTube videos to acquire proficiency in using the digital multimeter. Familiarize yourself with the following key functions: Measuring Resistance. Conducting Continuity Checks. Determining DC Voltage. Measuring DC Current (in series). Keep in mind that the primary applications of a digital multimeter involve measuring resistance, DC voltage, and DC current. To visualize waveforms, you would require an oscilloscope. Toolbox Essentials: Include screwdrivers (both flathead and Phillips), a wire cutter, wire stripper, pliers, a power mains test pen or screwdriver, insulation tape, and masking tape (for labeling and sealing). Also, stock up on 22-Gauge solid wires in various colors, a breadboard, and more. For Soldering: Equip yourself with a soldering station, complete with a stand, third hand tool, wet sponge, solder sucker, and solder wick. You can either read a tutorial like "How to Solder: Through-Hole Soldering" or refer to online videos for guidance on soldering techniques. If your soldering iron features temperature control, set it to an initial range of approximately 350-370°C. Note that a breadboard is primarily intended for prototyping purposes. To create your final product, you'll need to solder components onto a printed circuit board (PCB). Optional or Beneficial Desirable Addition: Consider including a DC Power Supply, such as a 160W Digital Bench Power Supply with adjustable output from 0 to 32V DC and a current range of 0 to 5A. This is particularly valuable as it eliminates the reliance on batteries. It's essential to familiarize yourself with the following functions: Configuring the desired output DC voltage. Setting the output DC current LIMIT to prevent overloading and potential damage. Reading and interpreting the displayed voltage and current output values accurately. A quality DC power supply typically features two output channels, referred to as "master" and "slave" (some models also include an additional third channel for 5V). These channels can be configured in the following ways: Isolated: In this mode, each supply operates as an entirely separate and independent unit. This is the most commonly used configuration. Parallel: The output from the slave unit is combined with that of the master unit to increase the overall current capability. Series: The positive output terminal of the slave unit is internally connected to the negative output terminal of the master unit. You can readily read the supply voltage and current values from the control panel. It's important to closely monitor the current reading to prevent any potential damage to your circuitry. DC power supplies typically operate in constant-voltage mode, maintaining a stable voltage output. You can set a current limit for the supplies as a safeguard for your circuits. Once the current limit is reached, the supply switches to constant-current mode and will not provide additional current. For production purposes, you can obtain cost-effective switching DC power supplies. It's crucial to know your required voltage (e.g., 5V, 12V) and the maximum current rating (e.g., 3A, 5A, 10A, 50A) when selecting the appropriate supply. Really NICE to Have Oscilloscope Function Generato 3.2  Etiquette Kindly adhere to sound electronic work practices: Avoid Metal Contact: Never place the Arduino Board on a metal surface, unless you intend to encounter some unwanted smoke! Apply insulating masking tape underneath or employ an appropriate plastic or wooden enclosure. Disconnect Power: Whenever you are making circuit connections, disconnect the power source from the Arduino board to prevent potential short-circuits and the risk of damaging the board. Exercise Patience and Methodology: Be patient, systematic, and avoid taking shortcuts in your work. Organize Your Workspace: Maintain an organized workbench by storing all components and loose parts in designated containers. Follow Color Codes: Recognize the purpose of wire colors. In DC circuits, utilize RED for power and BLACK for ground. Note that color codes are crucial in electronics, and individuals with color blindness may face limitations in this field. Use Appropriate Cables and Connectors: Ensure you select the correct cables with the appropriate gauge number and connectors for your specific project. Trim Wires Judiciously: Trim your connecting wires to the necessary minimum length for your final product; you're not angling for fish with them. Create Comprehensive Diagrams: Produce well-drawn design diagrams, circuit diagrams, connection diagrams, etc., to facilitate your work. Write Effective Programs: Craft high-quality programs and provide comments for your programming statements to enhance clarity. Invest in the Right Tools: Remember that the quality of your work is reflected in your toolbox. Obtain and employ the right tools for your tasks LEDs I shall follow the exercises in: "SparkFun Inventor's Kit (SIK) Experiment Guide - v4.0" (the latest version at the time of this writing) @ https://learn.sparkfun.com/tutorials/sparkfun-inventors-kit-experiment-guide---v40/introduction. The older version of "SparkFun Inventor's Kit (SIK) Guide for Arduino" @ https://www.sparkfun.com/products/retired/11227, with PDF User's Guide @ http://cdn.sparkfun.com/datasheets/Kits/SFE03-0012-SIK.Guide-300dpi-01.pdf. "Oomlout's Arduino Experimentation Kit (ARDX)" @http://www.oomlout.com/a/products/ardx/. I shall provide more technical explanation and computation for my engineering students. You need the hardware components to do these exercises. I suggest you purchase an "Arduino Starter Kit" which comes with common electronic components  LED Ex 1: Blinking LED (with a Current Limiting Resistor) Reference: "SIK Circuit 1A: Blink an LED" or "Oomlout CIRC01 Getting Started" Goal: To create a repeating LED blinking sequence with a one-second interval. Required Components: 1x LED (5mm, Red, or White) - Be mindful of LED polarity. The shorter leg featuring a flat side signifies the cathode (-), while the longer leg corresponds to the anode (+). It's advisable to be proficient in using a digital multimeter for checking diode polarity. 1x 330Ω resistor Circuit Diagram Program Execute the program located in "$ARDUINO_HOME\examples\01.Basics\Blink\Blink.ino," or use the one provided below: /* * Blink: Turns ON an LED on for one second, then turn OFF for one second, repeatedly. */ #define LED_PIN 13 // Give it a name for easy referencing /* * setup() run once for initialization */ void setup() { pinMode(LED_PIN, OUTPUT); // initialize the digital pin as output } /* * loop() repeats forever after setup() completes */ void loop() { digitalWrite(LED_PIN, HIGH); // turn the LED ON by making the voltage HIGH (5V) delay(1000); // wait for the given millisecond digitalWrite(LED_PIN, LOW); // turn the LED OFF by making the voltage LOW (0V) delay(1000); // wait for the given millisecond } An Arduino program, known as a sketch, comprises a minimum of two functions: setup() and loop(). The setup() function executes once during startup or after a reset, primarily for initialization tasks. Conversely, the loop() function runs indefinitely after the setup() completes. In the program's initialization phase (inside setup()), Pin 13 is configured as an OUTPUT by employing the pinMode() function. This pin can subsequently produce either a digital HIGH (5V) or LOW (0V) signal. Following this initialization, the program sets Pin 13 to HIGH (5V), introduces a 1000-millisecond delay (1 second), toggles Pin 13 to LOW (0V), and adds another 1000-millisecond delay. This sequence repeats continuously within the loop() function. Dissecting the Circuit for Engineering Students In contrast to resistors, LEDs exhibit non-linear behavior and do not adhere to Ohm's law. LEDs are regarded as current-driven devices with a consistent voltage drop. To achieve maximum brightness in a standard 5mm LED, it is recommended to maintain a forward current of 20mA In practical design applications, we typically consider the forward voltage of LEDs as fixed at 3.6V (applicable to white, blue, and green LEDs) or 2.2V (as indicated in the datasheet for red LEDs). We must select a resistor, denoted as R and referred to as the current-limiting resistor, in a manner that ensures a current of IL=20mA flows through both the resistor and the LED. Assuming a 5V supply voltage (where digital pin 13 outputs 5V when set to HIGH), the calculations are as follows:For white, green, or blue LEDs: R = (5-3.6)V / 20mA = 70Ω For red LEDs: R = (5-2.2)V / 20mA = 140Ω (as specified in the datasheet)Opting for a higher resistor value will result in reduced current, leading to a dimmer LED or no illumination at all. Conversely, selecting a lower resistor value will increase the current, potentially wasting power and risking damage to the LED. In engineering design, this initial R value serves as a starting point. You can then assess the brightness, measure voltage and current, and subsequently fine-tune the resistor value as needed. The LED's power consumption amounts to 72mW (for white, green, and blue LEDs) or 44mW (for red LEDs) when you calculate it as 20mA multiplied by 3.6V or 2.2V, respectively. The cumulative power consumed by the LED at 20mA current and 5V supply voltage is 100mW It's important to be aware that the digital output pins of the Arduino can deliver a maximum current of 40mA (or a continuous current of 20mA). This level of current is suitable for driving 1-2 LEDs in parallel, each at 20mA. However, it's not adequate to power more than two LEDs to their maximum brightness. When two LEDs are connected in series, the combined voltage drop ranges from 4.4V to 7.2V (calculated as 2.2 to 3.6V each multiplied by 2). It's important to note that a 5V power supply cannot effectively operate more than two LEDs in series. In scenarios where three LEDs are arranged in series, such as in certain LED strips, a 12V supply is commonly employed. Practices for Engineering Students LEDs sourced from various manufacturers may come with varying specifications, including forward current and forward voltage ratings. Furthermore, you might encounter situations where it's challenging to locate the precise datasheet for a specific LED. In such cases, the best approach is to rely on your trusty multimeter to measure these parameters yourself. Please take note: If you have only been provided with a 330Ω resistor, you have the option to create a parallel connection of two resistors to achieve a total resistance of 165Ω (following Ohm's law). Alternatively, you can connect three of them in parallel to obtain a resistance of 110Ω. Set pin 13 to the HIGH state (to activate the LED): Utilize a digital multimeter to gauge the voltage at pin 13 and across the LED. For voltage measurement, position the meter in parallel, following the provided illustration, and configure it to measure either 20V or employ the auto-range function. Utilize Ohm's law to calculate the current passing through the resistor, which is the same current flowing through the LED. With a digital multimeter, gauge this current and subsequently compare it to the calculated value. For measuring current, INTERRUPT the circuit and position the meter in SERIES, following the provided illustration, then set the meter to measure either 200mA or employ the auto-range function. Answer: For a white LED paired with a 330Ω resistor, the measured LED forward voltage is 2.77V, and the measured forward current is 5.9mA. The calculated IL = (5 - 2.77) / 330 = 5.75mA. For a white LED with a 165Ω resistor, the measured LED forward voltage is 2.85V, and the measured forward current is 10.6mA. The calculated IL = (5 - 2.85) / 165 = 13mA. For a red LED with a 330Ω resistor, the measured LED forward voltage is 1.90V, and the measured forward current is 8.4mA. The calculated IL = (5 - 1.90) / 330 = 9.3mA. For a red LED paired with a 165Ω resistor, the measured LED forward voltage is 1.95V, and the measured forward current is 15mA. The calculated IL = (5 - 1.95) / 165 = 18.5mA. It's important to note that the measured forward voltages remain relatively constant, while the forward current and LED brightness exhibit variations. Switch pin 13 to the LOW state (to deactivate the LED) and carry out the preceding measurements once more. Replicate these measurements for RED, WHITE, GREEN, and BLUE LEDs. Perform the same measurements for a configuration involving two LEDs in parallel. Redo the measurements for a setup with two LEDs in series. Repeat the measurements once more, this time with three LEDs connected in parallel. LED Exercise 1a: Change the Blinking Time To alter the frequency of the blinking, you have the option to adjust the delay, which is currently configured at 1000 milliseconds (or 1 second) LED Ex 2: Controlling the Brightness of a Single-Color LED via PWM To manage the LED's brightness, utilize pin 9 instead of pin 13. Pin 9 can generate a Pulse Width Modulation (PWM) square wave through the analogWrite(pinNumber, dutyCycle) function (refer to the PWM Tutorial). The dutyCycle parameter determines the duration of the ON state in the square wave, with values ranging from 0 (always OFF) to 255 (always ON). Experiment with the subsequent program: #define LED_PIN 9 // LED connected to digital PWM pin 9 #define DUTY_CYCLE 192 // Duty cycle for the PWM over [0,255] /* Setup() runs only once */ void setup() { pinMode(LED_PIN, OUTPUT); // Set to OUTPUT mode } /* loop() repeats forever */ void loop() { analogWrite(LED_PIN, DUTY_CYCLE); // Try other values from 0 to 255 delay(1000); // time delay in msec before repeat // Fade in from min to max in increments of 5 for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) { analogWrite(ledPin, fadeValue); delay(30); // small delay to see the effect } // Fade out from max to min in decrements of 5 for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) { analogWrite(ledPin, fadeValue); delay(30); } } The LED's luminance corresponds to the duty cycle, with the ON duration determining its brightness. For instance, if the duty cycle is set to 64, the LED will shine at 25% of its maximum brightness LED Basics LED is a Diode An LED (Light Emitting Diode) is fundamentally a diode.Diodes allow the passage of current in the forward direction, going from the anode to the cathode, but not in the reverse direction. When current flows in the forward direction, it moves from the anode to the cathode, resulting in the emission of light (although ordinary diodes emit only a small amount of light). The voltage and current applied to the diode in this direction are referred to as forward voltage and forward current, respectively. The forward voltage typically falls within the range of 0.7V to 1.0V. Conversely, in the reverse direction, the diode permits little to no current flow, or at most a minimal leakage current LEDs exhibit a considerably higher forward voltage when compared to typical diodes. While a standard diode typically features a voltage drop ranging from approximately 0.7V to 1.0V, LEDs can have significantly higher voltage drops, ranging from 2.2V for Red LEDs to 3.6V for Green, Blue, and White LEDs. This discrepancy arises because LEDs are constructed using semiconductor materials other than silicon (as it's challenging to induce silicon to emit light). Instead, materials like AlGaInP, InGaN, and InGa1N are employed. It's worth noting that white, green, and blue LEDs exhibit higher forward voltage values than their red counterparts. A standard 5mm LED typically operates with a forward current of 20mA, resulting in power consumption ranging from 44mW to 72mW, depending on the specific LED with forward voltage in the range of 2.2V to 3.6V. LEDs are Current Devices A resistor is a linear component that adheres to Ohm's law, which states V = I * R. A diode operates as a non-linear component, deviating from Ohm's law. The relationship between forward current (If) and forward voltage (Vf) is exponential, expressed as If = I0 * exp(k * Vf) or Vf = (1/k) * ln(If/I0). Due to this exponential relationship, doubling the forward current (If) results in only a marginal increase in the forward voltage (Vf). Consequently, in practical applications, we can assume a constant forward voltage (Vf), such as 2.2V for red 5mm LEDs or 3.6V for green, blue, and white 5mm LEDs, regardless of the forward current (If). Essentially, diodes are treated as current-controlled devices, where we regulate the current to achieve the desired performance (e.g., 20mA for full brightness in a 5mm LED). Furthermore, since voltage remains constant, power consumption is also solely determined by the current (e.g., 4.4mW for red LEDs or 7.2mW for white LEDs). Classes of LEDs LEDs can be classified into two classes: Small devices, usually in the form of 5mm (or T1 3/4) components, operate at a standard current of 20mA. They serve as indicators in various applications, such as cell phone backlights, flashlights, road signage, truck taillights, traffic lights, automobile dashboards, and more. For instance, a typical 5mm white LED, with a forward current of 20mA and a forward voltage of 3.6V, consumes power at a rate of 72mW. To create a 1W flashlight, you would need 14 of these LEDs, and for a 14W fluorescent bulb replacement (when comparing wattages, without considering lumens), you would require 194 of them. In LED strips, you'll encounter surface-mount 5050 RGB LED modules, each featuring three LEDs in red, green, and blue. These modules require a total of 60mA (3x20mA) to achieve full white illumination. Power devices, typically ranging from 1 to 3 watts, operate at a current of 350mA. These components are employed for illumination purposes rather than as indicators. They find application in various scenarios such as flashlights, replacements for incandescent bulbs or tubes, large-screen TVs, projector lights, automotive headlights, airstrip runway lighting, and more. Controlling LEDs with High Current Using Power Transistors As previously stated, an Arduino's digital pin can provide a maximum output current of 40mA (or 20mA continuously). It's not suitable for driving more than two LEDs rated at 20mA in parallel. Additionally, the digital pin outputs 5V, making it unsuitable for driving 3 LEDs in series (2.2V*3=6.6V). If our goal is to control multiple LEDs in parallel using a single Arduino digital output pin, we must employ an external power supply and a power transistor switch capable of handling higher currents. Choosing a Power Transistor In LED applications, we usually opt for a "TO-220" package power transistor with a 1W power dissipation capability, as illustrated below. If necessary, you can affix an external heat sink. There are two categories of transistors: Bipolar Junction Transistors (BJT): BJT comprises three terminals designated as Base (B), Emitter (E), and Collector (C). BJT operates as a current-controlled device, with the Base current regulating the current flowing between the Collector and Emitter. There are two variations of BJT: NPN and PNP. They share identical structures, differing only in polarity. Metal Oxide Semiconductor Field-Effect Transistor (MOSFET): MOSFET, too, consists of three terminals denoted as Gate (G), Source (S), and Drain (D). Unlike BJT, MOSFET functions as a voltage-controlled device, where the Gate voltage governs the current passing between the Source and Drain. MOSFET comes in two types: n-channel and p-channel. In contemporary electronics, MOSFETs are prevalent for high-power applications due to their superior power handling efficiency. BJTs, on the other hand, continue to be employed for low-current tasks, such as switching, owing to their cost-effectiveness. For examples, IRLB8721PbF N-channel Power MOSFETs (Datasheet) are capable of toggling 30V at 16A (equivalent to controlling 750 LEDs at 20mA) using signals of 3.3V and 5V. They can dissipate up to 2 watts (400mA at 5V) without requiring a heat sink, operating efficiently at room temperature. The IRF630 N-Channel Power MOSFET is designed to switch 200V at 9A with a VGS of 20V. Similarly, the IRF520 N-Channel Power MOSFET can handle 100V at 9A. For NPN Epitaxial Darlington Transistors, the TIP120/121/122 series (Datasheet) offers the capability to switch 60/80/100V at 5A, making them suitable for controlling up to 250 LEDs at 20mA each. Transistor as an Electronic Switch A transistor has the versatility to operate either as an amplifier in its active mode or as a switch in its saturation mode. In this section, our primary focus will be on using a transistor as a switch. Much like a mechanical switch that you push to close a circuit and push again to open it, a transistor can function as an "electronic" switch N-Channel MOSFET as a Switch An N-channel MOSFET can act as an active-high voltage-controlled switch. When you apply a HIGH voltage to the Gate (G), it connects (switches on) the Drain (D) and Source (S). Conversely, when you set the Gate (G) to LOW, it disconnects (switches off) the Drain (D) and Source (S), as shown in the illustration. The n-channel MOSFET turns on when VGS (Gate-Source Voltage) is greater than VTH (threshold voltage). When the transistor is switched on by setting VIN (Gate voltage) to HIGH, the voltage drop across the MOSFET, VDS (Drain-Source Voltage), is approximately 0.2V, and the current through it, IL, is controlled by the current limiting resistor RL. For example, if the load requires 2.2V and 350mA, and the supply voltage is VDD = 5V, you can calculate RL as (5V - 2.2V - 0.2V) / 350mA = 7Ω. When the transistor is switched off by setting VIN to LOW, IL becomes 0, effectively cutting off the current. It's possible to interchange the positions of RL and the load in the circuit. MOSFETs have an extremely high input resistance, almost infinite, making them compatible with nearly any logic gate or driver. To ensure reliable switching, it's common practice to include a high-value resistor RGS (ranging from 10KΩ to 1MΩ) between the gate and source. This resistor serves to discharge any electric charge on the gate and turn off the MOSFET. Without it, very small currents from sources like your finger, capacitive coupling, or inductive coupling could inadvertently change the gate voltage. The inclusion of the gate resistor RG is optional. A small resistor (around 100Ω) can be used to prevent ringing in the circuit by damping oscillations. Let's consider that we are powering the following load: Suppose that VDD=5V, RL=(5-2.2-0.2)V/100mA=26Ω. P-Channel MOSFET as a Switch Much like the N-channel MOSFET, the P-channel MOSFET exhibits: Operating in an active LOW configuration, the P-channel MOSFET turns on when Vin equals 0V or when VSG exceeds its threshold voltage (VTH). You have the option to connect one terminal of the load to the ground. The P-channel MOSFET serves as a "high-side" switch, a less commonly used choice compared to the "low-side" switch configuration typically employed with N-channel MOSFETs. In the case of N-channel MOSFETs, the Source (S) is linked to ground, while for P-channel MOSFETs, the Source (S) connects to VDD. NPN BJT as a Switch To enable the connection (switching on) between the collector (C) and emitter (E) in an NPN transistor, you raise the base (B) to a high voltage level, ensuring that IB (base current) exceeds the threshold current (ITH). Conversely, you deactivate (switch off) the connection between the collector (C) and emitter (E) by lowering the base (B) to a low voltage level. When an NPN transistor is in its saturation mode, it operates as an electronic switch controlled by current: When a modest base current (IB) exceeding the threshold current (ITH) is applied, the transistor activates, allowing current to flow through the collector, emitter, and consequently, the connected load. Conversely, when IB equals zero, the transistor deactivates, causing no current to pass through the collector, emitter, or the load. You may switch the position of the RL and the load To activate an NPN transistor, we set VIN to a high level, typically 5V, allowing a base current (IB) to flow from the base to the emitter. When the transistor is turned on, we can consider VBE as approximately 0.8V and VCE as about 0.2V. This simplification treats diodes as current-controlled devices with relatively constant voltage drops. Let's assume VDD is 5V, and we want to achieve a load current (IL) of 100mA. Using Ohm's law, we calculate the load resistor (RL) as follows: RL = (5V - 2.2V - 0.2V) / 100mA = 26Ω. To determine the base resistor (RB), we use the relationship IC = hFE * IB, where hFE represents the transistor's current gain, typically lower in the saturation region compared to the active region. Let's assume hFE is 10 (or 20) for saturation. If VIN is 5V, we can calculate RB as follows: RB = (5V - 0.8V) / (100mA / 10) = 420Ω. If the transistor fails to turn on, consider using a lower resistance value for RB. It's important to note that these values serve as initial approximations for your design, and it's advisable to fine-tune them by measuring voltages and currents with a multimeter. We can turn OFF an npn transistor by setting VIN to low (0V). In this case, IB=0, results in IC=0 PNP BJT as a Switch Active low (instead of active high for NPN). "high-side" switch (instead of "low-side" switch for NPN). One terminal of load can be connected to ground (instead of one terminal to VDD for NPN). Emitter connects to VDD (instead of Ground for NPN) Exercises Utilize either an NPN Bipolar Junction Transistor (BJT) or an N-channel Metal-Oxide-Semiconductor Field-Effect Transistor (MOSFET) to control a parallel configuration of five LEDs. Employ a multimeter to measure both the currents and voltages in the circuit. LED Strips An LED strip, also referred to as LED tape or ribbon light, consists of a flexible circuit board adorned with surface-mounted LEDs, like the 5050 SMD RGB LED module, along with additional components. Typically, these strips feature an adhesive backing, and some are designed to be waterproof, suitable for outdoor use. LED strips can be categorized into the following types: In the non-addressable (or analog) type, individual LED control is not possible, and all LEDs display the SAME color uniformly. In the addressable (or digital) type, every segment incorporates a Driver IC chip that includes latches and shift registers. By transmitting digitally coded data serially to these chips through the Data-In (DI) and optionally the Clock-In (CI) connections, you gain the capability to individually control the color of each LED within the segments. However, it's worth noting that addressable LED strips tend to be more costly. An LED strip is constructed from uniform segments, each of which incorporates 1 to 3 LED modules, along with their respective current-limiting resistors. All these segments are connected in parallel for power supply. LED strips generally function at either 12V (when there are 3 LED modules connected in series per segment) or 5V (when only one LED module is in each segment). This voltage configuration is necessary because an individual LED typically requires a forward voltage of 2.2-3.6V, and 5V isn't adequate to power multiple LEDs in series. Every red, green, and blue LED consumes 20mA of current. Consequently, when producing a full white color, they collectively require 60mA. In the case of a 20-RGB-module per meter configuration, this translates to a substantial power draw of 1.2A per meter. It's essential to emphasize that attempting to power the LED strips directly from the Arduino board is not feasible since the board can supply only up to 500mA, which falls significantly short of the required current. To properly power these LED strips, you must connect them to an external power supply. Non-Addressable (Analog) 12V RGB LED Strip There are four leads labeled as +12V, G, R, and B in the configuration. Within each segment, three 5050 RGB LED modules are linked in series, with a common anode (+) connected to the +12V lead. Additionally, each component includes a current-limiting resistor, typically falling in the range of 150-390Ω. All these segments are interconnected in parallel. Considering that the forward voltage of an LED varies between 2.2-3.6V, when three LEDs are arranged in series, they collectively require 6.6-10.8V. Consequently, to effectively power three LEDs in series, a power supply voltage of 9-12V is essential. Each LED module draws a current of 20mA. The maximum current for each strip segment is capped at 12V and 60mA. In the case of segments spaced 50mm or 100mm apart, corresponding to 20 or 10 segments per meter, the maximum current load is 1.2A per meter. However, based on my personal measurements, a 20-segments-per-meter RGB LED strip draws approximately 970mA when supplied with 12V, and 370mA when operated at 9V, which still provides sufficient brightness. Transistor Driver To operate the LED strip effectively, an external power supply is required. Additionally, three power transistors, such as N-channel MOSFETs or NPN BJTs, are necessary to manage the current for each of the RGB components, as outlined below. The Arduino pins are connected to RIN, GIN, and BIN to enable the control of the RGB LEDs, turning them on or off as needed. Arduino Connection Connect RIN, GIN and BIN to Arduino pins; Connect the 12V/GND to power supply; Connect the GND from power supply to arduino (to establish common ground). To control the brightness and color of the LEDs, you can use PWM output to drive RIN, GIN and BIN to turn on/off the LED at the specified duty cycle Addressable (Digital) RGB LED Strip Certain addressable LED strips come equipped with four leads, denoted as GND/DI/CI/+5|12V or GND/DO/CO/+5|12V. In this context, DI and CI signify "Data-In" and "Clock-In," while "DO" and "CO" represent "Data-Out" and "Clock-Out." It's essential to establish connections with the "IN" end of the strip. The "OUT" end is reserved for daisy-chaining to the "IN" end of another strip in a cascading configuration. For each segment, there is an LED driver clip that incorporates latches and shift registers. Data is transmitted through the shift registers via the DI (Data-In) connection, utilizing the CI (Clock-In) signal for synchronization. The initial LED driver reads the first 24 bits of data (comprising 8 bits each for Red, Green, and Blue) from DI, while the subsequent LED driver processes the next 24 bits, and so forth. In the case of some addressable LED strips, they feature only three leads, omitting the CI (Clock-In) connection. In such instances, you must send the coded data with precise timing through DI, typically at frequencies of 800kHz or 400kHz. Addressable LED strips are available in both 12V and 5V variants. In the 12V version, each segment accommodates 3 LED modules connected in series. Conversely, for the 5V version, there is only one LED module per segment. This distinction arises because individual LEDs typically necessitate a forward voltage of 2.2-3.6V, rendering a 5V supply incapable of powering more than one LED in series. Establishing a connection with an addressable LED strip is a simple process: Directly link the LED strip's +12V/+5V and GND to an external power source. Establish a connection by attaching DI and CI to any of the digital pins on the Arduino. Create a common ground by connecting the ground (GND) of the power supply with the ground (GND) of the Arduino. Streamline your programming tasks with the help of specialized library code. Two widely used libraries for programming addressable LED strips, NeoPixel and FastLED (compatible with both 3-wire and 4-wire chipsets), will be discussed in detail below. 3-Lead 12V RGB Addressable LED Strip (WS2811) / 3-Lead 5V RGB Addressable LED Strip The WS2812 comprises an integrated package featuring a WS2811 LED driver IC chip combined with a 5050 RGB LED within each segment. The 5050 is a compact surface-mount module housing three RGB LEDs in a single 5mm x 5mm case. This configuration is designed to operate with a 5V power supply. The WS2812B represents an enhanced iteration of the WS2812. The 12V RGB LED strips consist of three 5050 LED modules and a distinct WS2811 LED driver IC chip that is not integrated with the 5050 LEDs. This setup requires a 12V power source to effectively power the three LEDs arranged in series. In the case of the WS2812 5V RGB LED strip, which has only one LED per segment with a forward voltage ranging from 2.2-3.6V, it can be effectively powered using a 5V supply. The maximum current consumption per segment amounts to 60mA, accounting for 3x20mA per RGB LED. For a 60-segment per meter LED strip, the total maximum current draw reaches 3.6A (60mA * 60 segments). To accommodate this, it's imperative to employ an external 5V power supply rather than relying on the Arduino board to deliver the required current. In the case of the WS2811 12V RGB LED strip, the maximum current load per segment also amounts to 60mA. When considering a strip with 20 segments per meter, it results in a current draw of 1.2A per meter. The WS2812/WS2811 LED strip utilizes a 3-wire configuration comprising +5V|+12V, GND, and Data-In (DI), without the need for a Clock-In (CI) wire. The WS2811 controller internally generates the clock signal, obviating the requirement for a separate CI connection. Instead, you must transmit the serial coded data through the DI wire with precise timing, typically set at 400kHz or 800kHz. Connecting the strip to Arduino is simple: Connect +5V|+12V and GND to an external power supply. Connect the power supply's GND to Arduino's GND. Connect the DI to any Arduino's digital pin. To program WS2811 LED drivers, you typically need to cascade the 24-bit RGB color code for each pixel down the DI line until it reaches its designated location, adhering to specific timing requirements. However, this process has been significantly streamlined through the utilization of library codes. There are two widely recognized libraries for programming addressable LED strips: NeoPixel and FastLED, both of which will be detailed below. NeoPixe You need to customize these lines: #include #define DATA_PIN 6 // Data-In (DI) connects to this pin #define NUM_LEDS 60 Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, DATA_PIN, NEO_GRB + NEO_KHZ800); In setup(): void setup() { strip.begin(); // initialize strip's buffer to all zeros (off) strip.show(); // Update all LEDs } You can then play with the color in loop(): // Set the color of a particular LED via setPixelColor() uint32_t color = strip.Color(255, 0, 0); // Set R, G and B of a color strip.setPixelColor(8, color); // Set LED 8's color strip.show(); // Update ALL LEDs delay(1000); // You can retrieve the color of a LED via getPixelColor() strip.setPixelColor(9, strip.getPixelColor(8)); strip.show(); // Update ALL LEDs delay(1000); // To switch an LED off use the color BLACK (0,0,0) strip.setPixelColor(8, strip.Color(0,0,0)); // Set LED color strip.show(); // Update all LEDs delay(1000); // Set all LEDs to green color = strip.Color(0, 255, 0); for (int i = 0; i < strip.numPixels(); ++i) { strip.setPixelColor(i, color); } strip.show(); // Update all LEDs delay(1000); Execute and examine the remaining examples. NeoPixel utilizes a display buffer that corresponds to all the LEDs within the strip. To configure this buffer, you are required to invoke strip.begin(). You can modify the color within the buffer using strip.setPixelColor(index, color), and when you are ready to update the strip's LEDs, you can activate strip.show() to transmit all the values from the buffer to the strip. Color is expressed as a uint32_t, encompassing the red, green, and blue components. strip.Color(R, G, B): translate the R, G and B into a color value in a uint32_t. strip.setPixelColor(pixelIndex, color): set the color of a particular pixel. strip.getPixelColor(pixelIndex): returns a 32-bit color value of a particular pixel. strip.numPixels(): returns the number of pixel declared during initialization. strip.setBrightness(level): adjust the brightness of all the LEDs with level ranges from 0 (off) to 255 (max brightness). setBrightness() was intended to be called once, in setup(), to limit the current/brightness of the LEDs throughout the life of the sketch. It is not intended as an animation effect itself!  FastLED 3.1 FastLED is compatible with both 4-wire and 3-wire chipsets, whether or not they include a Clock-In (CI). You are required to tailor these connections: #include "FastLED.h" #define NUM_LEDS 60 // Number of LEDs in your LED strip #define DATA_PIN 6 // Data-In (DI) connecting to this pin // For four-wire chipsets with a Clock-In (CI) only //#define CLOCK_PIN 7 // Clcok-In (CI) connecting to this pin // Define an array of LEDs to keep the RGB values of each LED CRGB leds[NUM_LEDS]; In setup(): void setup() { // For 3-wire chipsets without Clock-In (CI) FastLED.addLeds(leds, NUM_LEDS); // or set to WS2812 or WS2811 .... // For 4-wire chipsets with a Clock-In (CI) //FastLED.addLeds(leds, NUM_LEDS); } You can then play with the color in loop(): // To switch an LED Off, set the color to Black for that particular LED and call the show() function: leds[8] = CRGB::Black; // Array index begins at 0, up to NUM_LEDs - 1 // Set color to black via pre-defined constant CRGB::Black FastLED.show(); // Show changes // Set an LED to a specific color leds[8] = CRGB::Red; // Set LED 8 to red via pre-defined constant CRGB::Red FastLED.show(); // Show changes delay(1000); // You can set each of the RGB components individually leds[18].r = 255; // Set red component, value between 0 and 255 leds[18].g = 125; // Set green leds[18].b = 0; // Set blue FastLED.show(); // Show changes, no change in leds[8] delay(1000); // Set all LEDs to pre-defined constant ForestGreen (0x228B22) for (i = 0; i < NUM_LEDS; ++i) { leds[i] = CRGB::ForestGreen; } FastLED.show(); // Show changes delay(1000);  Motors Circuit Diagram Dissecting the Circuit In the circuit described above, we employ a P2N2222AG NPN BJT transistor with a maximum rating of 40V and 200mA (as detailed in the datasheet) as an electronic switch. This transistor turns on when pin 9, connected to its base (b), produces a HIGH signal at 5V. The base current (IB) is calculated as (5V - 0.8V) / 330Ω, resulting in 13mA. When turned on, there is a voltage drop of 0.2V across the collector (c) and emitter (e) of the transistor. Conversely, the transistor is in the OFF state when pin 9 outputs a LOW signal (0V). In this setup, a transistor is essential because the output from pin 9, with a maximum current of 40mA, is inadequate to directly power the DC motor. However, only a small amount of current (2mA) is required to activate the transistor. The rotation speed of a DC motor is directly proportional to the applied voltage when there is no load. As a load is introduced, the speed decreases, and the current drawn by the motor also correlates with the torque it produces. DC motors come in a variety of specifications. For instance, one toy DC motor is designed to operate within a voltage range of 1.5V to 4.5V, and under no load, it can reach a speed of 23,000 RPM when powered at 4.5VDC, drawing a current of 70mA (as per the datasheet). Another toy DC motor is suitable for operation in a voltage range of 1.0V to 3.0V and achieves a no-load speed of 6,600 RPM when supplied with 1.0V DC, consuming a current of 110mA (according to the datasheet). In general, DC motors like these typically require around 100mA of current to function correctly, a current level that cannot be provided directly from an output pin on devices like the Arduino, which has a maximum current output of 40mA. The transistor used in this setup has a rating of 200mA, which comfortably accommodates the motor's current requirements. DC motors come in a variety of specifications. For instance, one toy DC motor is designed to operate within a voltage range of 1.5V to 4.5V, and under no load, it can reach a speed of 23,000 RPM when powered at 4.5VDC, drawing a current of 70mA (as per the datasheet). Another toy DC motor is suitable for operation in a voltage range of 1.0V to 3.0V and achieves a no-load speed of 6,600 RPM when supplied with 1.0V DC, consuming a current of 110mA (according to the datasheet). In general, DC motors like these typically require around 100mA of current to function correctly, a current level that cannot be provided directly from an output pin on devices like the Arduino, which has a maximum current output of 40mA. The transistor used in this setup has a rating of 200mA, which comfortably accommodates the motor's current requirements. Practice Connect the DC motor directly to 5V. Measure the no load current. Set pin 9 to HIGH (to turn on the transistor): Using a digital multimeter, measure the voltage at pin 9, the voltage across the base and emitter VBE. Compute the base current IB (through the base resistor). Measure the voltage across the collector and emitter VCE. Measure the collector current IC Arduino Mega 2560 The Arduino UNO has its constraints, such as its ability to drive approximately 300-400 LED pixels due to its 2KB of SRAM and its limited number of available I/O pins. Many of your projects might demand the capabilities of a more robust microcontroller, such as the Arduino Mega 2560, which has superseded the original Arduino Mega model. Arduino Mega 2560 has: 54 digital I/O pins, of which 15 can be used as PWM outputs (pins 2-13, 44-46). Each pin could provide 20mA current. (Compared with Arduino UNO: 14 digital pins, 6 PWMs.) Use function pinMode(0-53, INPUT|OUTPUT) to configure the pin for input or output; and digitalRead(0-53) or digitalWrite(0-53, HIGH|LOW) to read or write. For PWM pins, you can use function analogWrite(2-13|44-46, dutyCycle) with duty cycle of between 0 (off) to 255 (on) to output PWM signal. 16 analog input pins. (Compared with Arduino UNO: 6) Use function pinMode(A0-A13, INPUT) (optional but nice to have) and analogRead(A0-A13) to read the 10-bit analog input [0,1023]. These analog input pins can also be used for digital input/output like the digital I/O pins, with pin number for A0-A13. 4 Serial ports (USART) (Compared with Arduino UNO: 1). ATmega2560 microcontroller @ 16MHz, with 256KB of Flash memory for program, 8KB of SRAM for data, and 4KB of EEPROM for non-volatile data. More on Arduino Microcontroller The Arduino UNO is powered by the ATmega328P microcontroller, boasting the following attributes: A low-power CMOS 8-bit microcontroller founded on the AVR enhanced RISC architecture. Utilizes an advanced RISC Architecture featuring 131 instructions, with most executing in a single clock cycle. Equipped with 32x8 general-purpose registers. Offers up to 20 MIPS throughput at 20MHz. Provides 32 KBytes of Flash memory for program storage with 10,000 write/erase cycles. Includes 1 KBytes of EEPROM memory capable of 100,000 write/erase cycles. Contains 2 KBytes of SRAM. Features six PWM channels. Equipped with a 6-channel 10-bit ADC. Offers one programmable Serial USART. Provides two Master/Slave SPI Serial Interfaces. Includes one Byte-oriented 2-wire Series Interface (I2C compatible). Features two 8-bit Timer/Counters with separate prescalers and compare modes. Includes one 16-bit Timer/Counter with separate prescalar, compare mode, and capture mode. Supports interrupt and wake-up on pin change. Has an operating voltage range of 1.8V to 5.5V. Exhibits a power consumption of 0.2mA in Active Mode @ 1MHz, 1.8V, 25°C. The Arduino Mega2560, on the other hand, is powered by the ATmega2560 microcontroller, which is an 8-bit microcontroller. Memory Types of Memory The Arduino board comprises three distinct memory pools: 1. **Flash Memory:** This space is dedicated to storing the program, often referred to as program space. Both Flash and EEPROM memory are non-volatile, meaning the data remains intact even when the power is turned off. 2. **SRAM (Static RAM):** SRAM is utilized for storing program data and variables. Unlike Flash and EEPROM, SRAM is volatile, which means the data stored in it is lost when the power is turned off. 3. **EEPROM (Electrical Erasable Programmable Read-Only Memory):** This memory is designed for retaining long-term data. The Arduino UNO, which employs the ATmega328 microcontroller, offers the following memory specifications: - 32KB of Flash (approximately 0.5KB is allocated for the bootloader). - 2KB of SRAM. - 1KB of EEPROM. On the other hand, the Arduino Mega2560, featuring the ATmega2560 microcontroller, possesses: - 256KB of Flash (with around 8KB used for the bootloader). - 8KB of SRAM. - 4KB of EEPROM. It's crucial to note that SRAM in the Arduino UNO is quite limited. For instance, each LED in an LED strip necessitates 3 bytes of SRAM. With 2KB of SRAM, the UNO can only support approximately 682 LEDs, assuming all available SRAM is allocated. If you exceed the SRAM's capacity, your program may appear to load successfully but may not run correctly or exhibit unexpected behavior. To conserve SRAM, consider these strategies: - Utilize smaller data types, such as using a byte or uint8_t instead of an int to reduce memory usage. - If data doesn't need to be modified, store it in Flash memory to free up SRAM. Programming EEPROM EEPROM.length(): return total number of bytes of EEPROM. EEPROM.write(address, value): write a byte with value of 0 to 255 to the EEPROM at address. For example, to initialize and clear the EEPROM: for (int i = 0 ; i < EEPROM.length() ; i++) { EEPROM.write(i, 0); // write 0 to all the addresses } An EEPROM write takes 3.3ms to complete. The EEPROM memory has a specified life of 100,000 write/erase cycles, so you may need to be careful about how often you write to it. EEPROM.read(address): read the value (in byte) from the EEPROM address. EEPROM.put(address, data): write any data type or object (struct) to the EEPROM starting from address. The data could be multi-byte, you can use sizeof(type) to check the size of data type in bytes. EEPROM.update(address, data): Similar to EEPROM.put(), but does not rewrite the value if it didn't change (Recall that EEPROM has a certain write/erase life). EEPROM.get(address, data): read any data type or object from EEPROM starting from address into data Serial Communication Every Arduino board is equipped with at least one serial port, also known as UART or USART. This serial communication takes place through digital pin 0 (RX) and pin 1 (TX), as well as via USB when connected to a computer through a USB-to-Serial adapter. The Serial object represents this serial port. If you activate serial communication, you cannot use pins 0 and 1 for other purposes. You can make use of the Arduino IDE's Serial Monitor to interact with the Arduino board. In the case of the Arduino Mega2560, it boasts three extra serial ports: - Serial1, accessible through pins 18 (TX) and 19 (RX). - Serial2, which can be utilized via pins 16 (TX) and 17 (RX). - Serial3, available on pins 14 (TX) and 15 (RX). Notably, these additional serial ports are not connected to the built-in USB-to-Serial adapter, and if you wish to employ them, you'll need an additional USB-to-Serial adapter. void setup() { // open serial port, set baud rate to 57600 Serial.begin(57600); // Arduino board writes to computer via serial port Serial.println("Serial port started at baud rate of 57600"); } The Serial's functions are: Serial.begin(baudRate, [config]): setup serial communication. Serial.end(): Disable serial communication. Pins RX and TX can be used for general input/output. Serial.print(value, [format]) and Serial.println(value, [format]): Prints data to the serial port as human-readable ASCII text, with an optional format. Serial.println() terminates with a newline. For examples, Serial.print(123); // 123 Serial.print(1.23); // 1.23 Serial.print("Hello"); // Hello Serial.print(123, DEC); // 123 Serial.print(123, HEX); // 7B Serial.print(123, OCT); // 173 Serial.print(123, BIN); // 01111011 Serial.print(1.2345, 2); // 1.23 (2 decimal places) Serial.print(1.2345, 3); // 1.234 (3 decimal places) Here are the functions related to serial communication: - `Serial.write(value)`: Transmit binary data through the serial port. The data is sent as either a single byte or a sequence of bytes. For sending data in a human-readable format, you can use `print()`. - `Serial.available()`: Retrieve the count of bytes (characters) ready for reading from the serial port. - `Serial.read()`: Retrieve the first byte of incoming serial data as an integer (or -1 if there's no available data to read). void setup() { Serial.begin(57600); } void loop() { char inChar; if (Serial.available() > 0) { inChar = (char)Serial.read(); // Read one byte (in int) Serial.println(inChar); // Format in ASCII text Serial.println(inChar, DEC); // Format in DEC } } Here are some additional functions related to serial communication: - `Serial.peek()`: This function returns the next byte of incoming serial data as an integer but doesn't remove it from the internal serial buffer. If there's no available data, it returns -1. - `Serial.flush()`: When invoked, this function waits for the ongoing transmission of outgoing serial data to finish before proceeding. - `serialEvent()`: This is a callback function that is triggered when serial data becomes available for processing. You can use `Serial.read()` within this function to read the incoming data. To understand more about this, you can refer to the "serialEvent tutorial." Interrupts Polling vs. Interrupt There are two methods for managing external inputs: polling and interrupts. In the polling approach, you regularly check the status of external inputs and execute the processing routine when the input is detected. In the interrupt approach, you connect an interrupt service routine (ISR) to an external input. The ISR is activated when the input is triggered. External Interrupt Pins Within the Arduino UNO, two pins (2 and 3) are available for external interrupts and can be assigned to INT0 and INT1. Meanwhile, in the Arduino Mega2560, you have access to six pins (2, 3, 18, 19, 20, 21) that can be utilized for external interrupts. Interrupt Service Routine (ISR) Interrupt Service Routines (ISRs) are specialized functions that don't accept parameters or return any values. When multiple ISRs are present, only one can be executed at a given moment, and the remaining interrupts will be invoked sequentially once the current one has completed, following a priority order. It's important to note that functions like `millis()`, which relies on interrupts for timekeeping, won't function (or increment) within an ISR. Similarly, `delay()` also depends on interrupts and will not operate correctly inside an ISR. This situation may lead to potential loss of serial data. To share data between the primary program and an ISR, global variables are employed. These variables should be declared as volatile, ensuring they are stored in RAM rather than in a register for multi-threading compatibility. Efforts should be made to keep the ISR as concise as possible. Its primary role is to update global variables (marked as volatile) to indicate changes in state. For example, const byte ledPin = 13; const byte interruptPin = 2; volatile byte state = LOW; void setup() { pinMode(ledPin, OUTPUT); pinMode(interruptPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin), toggle, CHANGE); } void loop() { digitalWrite(ledPin, state); } void toggle() { state = !state; } Enable/Disable Interrupts The `noInterrupts()` function can be utilized to deactivate all interrupts, while `interrupts()` can be employed to reactivate them. This capability can be valuable in real-time applications, particularly when specific critical, time-sensitive code segments must be executed. For instance, void loop() { ...... noInterrupts(); // critical, time-sensitive code here interrupts(); ...... }   ### CONFLUENCE OF NERDERY You might find yourself, dear Hackaday reader, attracted to some pretty strange corners of the tech world. Who knows when that knowledge of stenography, ancient retrocomputing, and floppy disk internals will all combine to get someone falsely accused out of jail? Go read this story and come on back, but the short version is that [Bloop Museum] helped recover some 40+ year old court evidence off of some floppies to right an old wrong. If you looked at the combination of extremely geeky topics, you’d say it’s unlikely to find anyone well versed in any one of them, and you’d say that the chances of anyone knowing enough in each these fringe domains to be helpful is exceedingly low. But I’m absolutely sure that the folks at [Bloop Museum] had some more to throw into the mix if they were called for. Or better yet, they might know exactly the right geeks to call in. And that’s the other heartwarming part of the story. When [Bloop Museum] didn’t know everything about old stenography formats, they knew the right people to reach out to – the Plover open stenography project. Who is going to know more? Nobody! Together, the nerd community is an unstoppable resource. So remember, when you’re hanging out with your geek friends, to keep a running catalog of everyone’s interests. Because you never know when you’re going to need an expert in re-gilding frames, or relocating bee hives, or restoring 1930’s radio sets. Or decoding obscure data formats to get someone out of jail. HACKADAY HALLOWEEN We’re running the 2023 Halloween Hackfest and it’s your chance to document your Halloween projects, and win fame, fortune, or at least one of three $150 DigiKey gift certificates, plus some Arduino schwag courtesy of the contest’s sponsors! You’ve got until the end of October, so get on it! Source: CONFLUENCE OF NERDERY ### THAT’S NOT A JUNKER… THAT’S MY GENERATOR If you live somewhere prone to power outages, you might have thought about buying a generator. The problem is that small generators are cheap but — well — small. Big generators are expensive. [Jake von Slatt] had an idea. He has a “yard car” which we thought might be a junk car but, instead, it is an old car he uses to drive around his yard doing tasks. It has a winch and a welder. Now it has a big generator, too. You can follow the project in the three videos found below. The project started with a scrap generator with a blown motor. Of course, the car has a motor so — in theory — pretty simple. Remove the generator from the motor and graft it to the car’s motor. But the details are what will kill you. The first video shows the teardown of the generator unit and some planning. Some custom parts that were recovered from the scrap pile replaced some of the parts on the generator, including a custom casting leftover from another project that took a bit of machining to repurpose. By the second video, he had a proof of concept working, but it had a small problem. He was controlling the speed of the motor with a stick on the accelerator linkage. So, he modified an idler from an AC compressor to limit the speed of the generator. The final video uses an Arduino to drive the cruise control to keep a steady RPM to the generator. Overall, this is an interesting project both because it is unusual and useful, but also because of the wide range of skills [Jake] demonstrates — he knows his way around a machine shop, a car, and the Arduino. Pretty impressive! We’d rather reuse a car engine than drive the generator ourselves. For some reason, that comes up repeatedly. Source: THAT’S NOT A JUNKER… THAT’S MY GENERATOR ### OSRAM OPTO SEMICONDUCTORS SPL SXL90A LIDAR QFN PACKAGED SMT LASERS Osram SPL SxL90A LiDAR QFN Packaged SMT Lasers are infrared high-power SMT components for LiDAR (Light Detection and Ranging) applications. This allows autonomous vehicles to “see” farther and more effectively. The AEC-Q102 qualified four-channel and single-channel pulse lasers offer a performance of 125W at 40A per channel and an efficiency of up to 33%. The single-channel-version (SPL S1L90A_3 A01) offers low thermal resistance of 31K/W, whereas the four-channel device (SPL S4L90A_3 A01) offers just 17K/W. This makes it easy for heat to dissipate from the components even at high currents. The four-channel version features a chip with four emission areas that deliver an outstanding optical power at 480W. The laser enables a much longer detection range at a size of just 3.35mm x 2.45mm x 0.65mm. This makes it only slightly larger than the single-channel-version of size 2.0mm x 2.3mm x 0.65mm. The two high-power SMT lasers also enable short pulse widths of around 2ns. Features 905nm laser wavelengthAEC-Q102 automotive qualifiedHigh duty cycles and low Rth1- or 4-channel pulsed laser modules Read more: OSRAM OPTO SEMICONDUCTORS SPL SXL90A LIDAR QFN PACKAGED SMT LASERS ### Arduino Uno vs. Mega vs. Micro: Which One Should You Use? The popularity of Arduino boards has skyrocketed in recent times, thanks to the growing demand for automation in the market. These microcontrollers have become the go-to option for beginners looking to embark on their project-building journey, offering unparalleled ease of use and a wide range of options. Arduino has released several common boards that make it easier for users to get their job done efficiently. In this article, we will explore the three most commonly used Arduino boards: Arduino Uno, Arduino Mega, and Arduino Micro. We will delve into their technical specifications, major differences, and provide tips to help you choose the right Arduino board for your project. What is an Arduino Microcontroller? Arduino is an open-source hardware development board that allows users to develop projects and interact with the real world. It is a powerful tool for solving real-world problems and provides access to the world of microcontrollers. The controller used in Arduino is based on the ATmega AVR microcontroller, and it utilizes a development part called Arduino IDE. By using the C++ programming language, Arduino automates tasks and offers a wide range of learning opportunities. However, it is important to consider the drawbacks of Arduino when selecting the best board for your project. Arduino Microcontroller: Pros and Cons Let's start with the advantages of using an Arduino board: Easy to use: Arduino is known for its simplicity and user-friendly interface. It employs simple programming languages like C and C++, making it ideal for beginners. The board itself has a minimal hardware interface, making it easy for users of all levels of expertise. Cross-platform support: Unlike some microcontrollers that are limited to Windows, Arduino provides support for Windows, Linux, and macOS, making it accessible to a wider range of users. Cost-effective: Arduino boards are surprisingly affordable, making them accessible to regular users. Additionally, the IDE required to operate the board is an open-source platform, further reducing project costs. Libraries: Arduino offers a wide range of libraries that enhance its functionality. These libraries enable users to control external modules, motors, and sensors, making integration with external devices a breeze. Active user community: Arduino's open-source nature has fostered a vibrant online community. Users can find support and inspiration from various projects and discussions on Arduino forums. On the other hand, there are a few limitations to keep in mind: Lack of multitasking: Unlike Raspberry Pi, Arduino can only run a single program at a time. Users must shut down one program to execute another on the Arduino board. Limited memory: Arduino boards have limited storage capacity. For example, the popular Arduino Uno board has 2KB of SRAM and 32KB of flash memory. This means that only a few hundred lines of code can be used, making Arduino more suitable for educational purposes rather than large-scale industrial projects. Communication limitations: Arduino boards are limited to Wi-Fi and Bluetooth platforms. To enable these features, additional hardware is required, which can increase the overall project cost. Limited programming language support: Arduino boards primarily support C and C++, lacking support for languages like Python, Java, and JS. This limits their application to specific areas. Lack of optimization: The microcontrollers used in Arduino boards are optimized for beginners, prioritizing ease of use over performance. If the same microcontrollers were used with AVR, performance could be improved. Arduino Uno: The Open-Source Microcontroller Board Arduino Uno is a widely used open-source microcontroller board based on the Microchip ATmega328P microcontroller. It is an excellent choice for beginners looking to explore electronic and coding applications in their projects. Arduino Uno was the first board released by Arduino.cc and is known for its user-friendly nature. The board features a combination of digital and analog pins, including 6 analog pins and 14 digital pins, along with a USB port for serial communication, a power jack, and ICSP headers. Six of the 14 digital pins can be used as PWM outputs. Additionally, it is equipped with a 16MHz crystal oscillator that provides the clock signal and synchronizes communication on the board. The board can be powered by a USB cable or an external 9V battery supply. Arduino Uno is programmed using an integrated development environment (IDE) that can be accessed both online and offline. The ATmega328 microcontroller allows for the uploading of new code without the need for external hardware, thanks to its pre-programmed bootloader. Arduino Uno is one of the most popular Arduino boards and is available in two versions: surface mount (SMD) and through-hole, which utilize either surface mount or through-hole ATmega328 components. The Arduino Uno board can be powered either through a USB cable or an external power supply. For external power, you can use either a battery or an AC-DC adapter. When plugging in the adapter, make sure to use a 2.1mm center-positive plug. To connect a battery, insert leads into the GND and VIN pin headers on the POWER connector. The board can operate within a voltage range of 6 to 20 volts, depending on the external power supply. However, supplying less than 7V may cause instability, while using more than 12V can lead to overheating and damage. The optimal voltage range for the Arduino Uno board is between 7-12V. The power pins on the Arduino Uno board are configured as follows: VIN: This pin is used to provide input voltage to the Arduino board when using external power. 5V: These pins output a constant 5V supply through a regulator on the board. You can supply power to these pins from the VIN pin, a DC power adapter, or the USB connector. However, ensure that the proper voltage is supplied through this pin. 3.3V: The onboard regulator generates a 3.3V supply, with a maximum current of 50mA. GND: This pin provides the ground connection for the Arduino board. Communication Process The Arduino Uno board can communicate with computer devices and other microcontrollers. It supports the UART TTL (5V) serial communication protocol through digital pins 0 (RX) and 1 (TX), which serve as receiver and transmitter pins, respectively. The ATmega16U2 chip on the board acts as a virtual COM port, enabling serial communication over USB. The necessary USB COM drivers are included in the 16U2 firmware, eliminating the need for external driver installation. The Arduino software's serial library facilitates serial communication through the digital pins on the board. Additionally, the Arduino Uno board supports SPI and I2C communication, which can be utilized with the SPI and Wire libraries, respectively. Memory The ATmega328 microcontroller on the Arduino Uno board has a total storage capacity of 32KB, with 0.5KB allocated for the bootloader. It also has 1KB of EEPROM and 2KB of SRAM. The pinMode(), digitalWrite(), and digitalRead() functions allow for input and output on any of the 14 digital pins on the Uno. Each of these pins operates at 5V with a maximum current of 40mA and has an internal pull-up resistor with a value between 20-50k Ohms. Some of the pin configurations on the Arduino Uno board include: Serial Pins: Pins 0 (RX) and 1 (TX) are used to receive and transmit TTL serial data. External Interrupts: Pins 2 and 3 can trigger an interrupt on a low value, change in value, or rising and falling edges. TWI (Two-Wire Interface): A4 (SDA) and A5 (SCL) pins support TWI communication and can be used with the Wire library. AREF: This pin is the reference voltage for the analog pins and can be used with the analogReference() function. Reset: This pin is used to reset the microcontroller when necessary. LED-Pin 13: This pin controls the built-in LED on the board, turning it on when the pin is high and off when the pin is low. Arduino Mega The Arduino Mega is a microcontroller board based on the ATmega2560. It is the largest board in the Arduino series, featuring 54 digital input and output pins, with 14 of them capable of PWM output. It also has 16 analog inputs and 4 UART ports for serial communication. The board includes a 16MHz crystal oscillator, USB connector, reset buttons, ICSP header, and power jack, providing all the necessary components for the microcontroller to operate. The Arduino Mega is fully compatible with all Arduino designs. Power: The power pins on the Arduino Mega board are as follows: - VIN: This is the input voltage for the Arduino board. - 5V: This pin provides a regulated and constant power supply to the microcontroller and other components on the board. - 3.3V: This pin generates a 3.3V supply through the onboard regulator, with a maximum current draw of 50mA. - GND: This is the ground pin for the microcontroller. Input and Output Pins: Each of the 54 pins on the Arduino Mega can be used as both input and output pins, utilizing functions such as pinMode(), digitalWrite(), and digitalRead(). Serial Pins: The Arduino Mega has pins 0 (RX) and 1 (TX) specifically for receiving and transmitting TTL serial data. These pins are connected to the corresponding pins of the Arduino Mega USB to TTL serial chip. External Interrupt: Certain pins on the Arduino Mega can initiate interrupts based on low, rising, or falling edges, or when the value changes. PWM Pins 0-13: These pins provide 8-bit PWM output signals and can be used with the analog write function. I2C Pins 20 (SDA) and 21 (SCL): The Arduino Mega supports the I2C wire library and has these dedicated pins for I2C communication. Analog Inputs: The Arduino Mega has 16 analog input pins, providing 10 bits of resolution. The AREF pin and analogReference() function allow you to change the upper end of the analog input range from the default range of ground to 5 volts. AREF: This pin serves as the reference voltage for the analog inputs and is used with the analog references() function. RESET: The RESET pin is used to reset the microcontroller. Communication: The Arduino Mega 2560 offers multiple communication options for connecting with computer devices. It has 4 hardware UART for TTL 5V serial communication, and the ATmega chip provides a virtual com port to the computer software. The board also supports serial communication through a library, as well as I2C and SPI communications. Arduino Micro The Arduino Micro is a microcontroller board based on the Atmega32U4. It features 20 digital input/output pins, 12 analog pins, and 7 PWM outputs among the 20 digital pins. The board includes a micro USB connection port, reset button, and ICSP header. The 16 MHz crystal oscillator on the Arduino Micro helps synchronize the clock signal, and the USB port allows communication between the board and the computer. Serial communication is used to interface with computer devices. Pins Configuration of Arduino Micro: The digital pins on the Arduino Micro can be configured as either input or output using the digitalWrite(), digitalRead(), and pinMode() functions. The board operates at a voltage of 5V, and each pin can handle a current of up to 40mA. There is also an internal pull-up resistor with a value between 20-50 kiloohms. Pin Description: - Serial Pins 0 (RX) and 1 (TX): These pins are used for receiving and transmitting TTL serial data using the ATmega32U4 microcontroller. - TWI Pins 2 and 3: These pins are used for TWI communication and are supported by the wire library. - External Interrupts: Certain pins on the board can be configured to activate an interrupt based on value changes, rising or falling edges, or other conditions. - PWM: The analogWrite() function can be used to generate 8-bit PWM output signals. - Analog Inputs (A0-A11): The Arduino Micro has 12 analog input pins that can also be used as digital input/output pins. Each pin has 1024 unique values. - SPI: The SPI library is used for SPI communication, and these pins are not connected to any of the digital pins. - LED 13: This is an onboard LED similar to those found on Arduino Uno and Mega boards. It is set to high when the corresponding pin receives a high signal. - AREF: This pin is used as the reference voltage for analog inputs and works with the analogReference() function. - RESET: The reset pin is used to reset the program running on the microcontroller when needed. Power Connection Pins: - VIN: This pin is used to provide input voltage to the Arduino Micro when an external power supply is used. It can also receive a 5V input voltage through the USB connection port. - 5V: This regulated power pin provides a constant 5V supply. It can be powered either through VIN or the regulated 5V power source. - 3V: This pin generates a 3.3V supply through the board's regulator and can provide a maximum current of 50mA. - GND: This is the ground pin used for grounding the board. Differences between Arduino Uno and Arduino Micro: Dimensions: - Arduino Uno: 2.7" x 2.1" - Arduino Micro: 1.88" x 0.7" Connectivity: - Arduino Uno: 12 I/O pins, 6 PWM pins, 6 analog pins - Arduino Micro: 20 I/O pins, 7 PWM pins, 12 analog pins Computing: - Arduino Uno: ATmega328P processor, 32kb flash memory, 2kb SRAM - Arduino Micro: ATmega32U4 processor, 32kb flash memory, 1kb EEPROM, 2.5kb SRAM Communication: - Both Arduino Uno and Arduino Micro support serial communication, SPI, and I2C. Differences between Arduino Uno and Arduino Mega: Dimensions: - Arduino Uno: 2.7" x 2.1" - Arduino Mega: 4" x 2.1" Connectivity: - Arduino Uno: 14 I/O pins, 6 PWM pins, 6 analog pins - Arduino Mega: 54 I/O pins, 15 PWM pins, 16 analog pins Computing: - Arduino Uno: ATmega328P processor, 32kb flash memory, 2kb SRAM - Arduino Mega: ATmega2560 processor, 256kb flash memory, 8kb SRAM, 4kb EEPROM Communication: - Both Arduino Uno and Arduino Mega support serial communication, SPI, and I2C. Setting up Arduino Boards: All Arduino microcontrollers can be programmed using the Arduino software. They come with a pre-burned bootloader, allowing you to upload new code without the need for external hardware. The ATmega firmware source code is available in the Arduino repository. Communication with the Arduino boards is done through a USB connection, which acts as a virtual com port for the software. The Arduino IDE software includes a serial monitor that facilitates sending and receiving data in text format. The software serial library enables communication on the digital pins of the Arduino boards. Tips for Selecting the Right Arduino Boards: When selecting the appropriate Arduino board for your project, there are several factors to consider. One important factor is the pin configuration. If you require more I/O pins or analog pins for your output devices, the Arduino Mega is the best choice as it offers more I/O pins compared to Arduino Uno and Arduino Nano. If you are concerned about the size of your circuit and have a small number of external devices, the Arduino Nano is a suitable option. It reduces the overall cost of the project. Conclusions: Arduino is a microcontroller designed for rapid prototyping, particularly for beginners. Creating your PCB prototype for Arduino, you have simple access to the board's schematic and those of any Arduino shields.   ### AAEON EDGE SOLUTIONS: MONITORING FOR HEALTHY PRACTICES IN BANKING AAEON, a leading manufacturer of AI and IoT platforms, has worked with partners and developers to create solutions designed to address COVID-19 and other infectious diseases. While the current pandemic is winding down in some areas, many companies are rethinking what it means to do business in a world where it is key to be aware of how disease spreads. One key sector is in banking, where many kinds of customers may visit on a daily basis. In Southeast Asia, AAEON is partnering with developers to deploy the BOXER-8170AI and SCA-M01 IoT Node Board in body temperature and meeting room monitoring. Fever detection and monitoring is an application that AAEON products such as the BOXER-8120AI, RT-620R and RT-660R are seeing great success powering in large facilities including hospitals and transit stations. However, the unique security requirements of banks generally mean there is only a single entrance that is monitored by posted security. Banks also usually don’t see crowds on the level of hospitals and metro stations, and when busy, banks are still easily managed by the security personnel present. The SCA-M01 IoT Node Board provides a perfect solution, offering low power consumption while still providing the computing power necessary for the task with an Arm Cortex M4 MCU+FPU. Connected directly to cameras, or even embedded in the cameras themselves, the SCA-M01 helps power fever detection and facial recognition at the edge to allow immediate notification for security staff.  Read more: AAEON EDGE SOLUTIONS: MONITORING FOR HEALTHY PRACTICES IN BANKING ### 3D PRINTED ROBOT WANTS TO BE YOUR PET Robots are cool. Robots you build yourself are cooler, especially ones that use stuff you have lying around already. Snoopy is a new open-source robot that uses an Arduino as a brain but with a 3D printed body and a short list of parts that can probably be sourced from the junk drawer. It’s still being developed, but it looks like a cool project heading in the right direction to produce an interesting robot. It’s based on a new robot software platform called Kaia.ai that is built on top of the Robot Operating System 2 (ROS2), but with a more friendly and beginner-focused interface. Currently, the Snoopy project includes enough to get up and running with a printed frame and the electronics to install an Arduino running ROS2 that controls it. That’s an excellent place to start if you want to get into robotics, but without diving straight into the technical challenges of working with real-time operating systems. It is also interesting that the previous project from the creator (called Kiddo) fell into the complexity trap, where you keep adding features and create an overly complex design that is a pain to build. Hopefully the designers have learned from Kiddo and will keep Snoopy simple. We’ve covered plenty of other robot projects here at Hackaday, from ones that venture into nuclear reactors to ones that write your thank-you notes for you or give you hugs. We’ve even looked at how to give your robots a personality. Combine all those together with Snoopy and you could build a hugging, compassionate robot that has nice handwriting and can repair a nuclear reactor. And if you do, write it up and send it to our tips line! Source: 3D PRINTED ROBOT WANTS TO BE YOUR PET ### BUTTON, BUTTON, WHO’S GOT THE (PICO) BUTTON? There is an episode of Ren and Stimpy with a big red “history eraser’ button that must not be pressed. Of course, who can resist the temptation of pressing the unpressable button? The same goes for development boards. If there is a button on there, you want to read it in your code, right? The Raspberry Pi Pico is a bit strange in that regard. The standard one lacks a reset button, but there is a big tantalizing button to reset in bootloader mode. You only use it when you power up, so why not read it in your code? Why not, indeed? Turns out, that button isn’t what you think it is. It isn’t connected to a normal CPU pin at all. Instead, it connects to the flash memory chip. So does that mean you can’t read it at all? Not exactly. There’s good news, and then there’s bad news. THE GOOD NEWS The official Raspberry Pi examples show how to read the button (you have read all the examples, right?). You can convert the flash’s chip-select into an input temporarily and try to figure out if the pin is low, meaning that the button is pushed. Sounds easy, right? THE BAD NEWS The bad news is really bad. When you switch the flash chip-select to an input, you will lose access to the flash memory. But we are running from the flash memory! So, the first thing to think about is that the code will need to run from RAM. But that’s not all. The Pico has interrupts and two CPU cores. So even if you are out of the flash memory, there’s no reason to assume someone else won’t want to use it simultaneously. So, to make this work, you need to disable interrupts and shut down the other CPU core while you read the pin. THE EXAMPLE Looking at the example, they do everything but disable the second core. I recently had to put this code in an Arduino-style program; there is excellent Arduino support for the Pico. Putting the function in RAM is pretty easy: 1 bool __no_inline_not_in_flash_func(_get_bootsel_button)() { The rest is just manipulating the I/O pins and turning interrupts on and off: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 uint32_t flags = save_and_disable_interrupts(); // Set chip select to Hi-Z hw_write_masked(&ioqspi_hw->io[CS_PIN_INDEX].ctrl, GPIO_OVERRIDE_LOW << IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_LSB, IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_BITS); // Note we can't call into any sleep functions in flash right now for (volatile int i = 0; i< 1000; ++i); // The HI GPIO registers in SIO can observe and control the 6 QSPI pins. // Note the button pulls the pin *low* when pressed. bool button_state = !(sio_hw->gpio_hi_in & (1u << CS_PIN_INDEX)); // Need to restore the state of chip select, else we are going to have a // bad time when we return to code in flash! hw_write_masked(&ioqspi_hw->io[CS_PIN_INDEX].ctrl, GPIO_OVERRIDE_NORMAL << IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_LSB, IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_BITS); restore_interrupts(flags); That leaves the core. I put a wrapper around this function to avoid any possible problems with it being called from RAM (though it would probably work): 1 2 3 4 5 6 7 8 9 10 bool get_bootsel_button(void) {    bool rv; // freeze    rp2040.idleOtherCore();    rv = _get_bootsel_button(); // unfreeze    rp2040.resumeOtherCore();    return rv; } It works. But I do worry about how inefficient it must be. You usually want to poll a button often. Turning off the other core, disabling interrupts, and the idle loop to let the pin settle — all that will take time. In practice, it seems to work OK, but it must be slowing things down some. IN RETROSPECT… So, can you read the Pico button? Yes. Should you? Maybe. For some applications, it is probably just fine. But if you are worried about performance, it probably isn’t the best idea. With two 133 MHz cores, a ton of memory, easy debugging, and those cool peripheral processors, there’s a lot to love about the Pico. Just maybe not the BOOTSEL button. Source: BUTTON, BUTTON, WHO’S GOT THE (PICO) BUTTON? ### INNOPHASE RELEASES INP1010, INP1011 TALARIA TWO MODULES InnoPhase released the INP1010 and INP1011 Talaria TWO™ modules. The solutions host wireless connectivity and an integrated microcontroller for edge of network IoT designs. According to the company, the Talria TWO is the world’s lowest power Wi-Fi solution because of its digital polar radio architecture. The recipience of the CES 2020 Innovation Award, Talaria TWO is incorporated with the INP1010 and INP1011 modules. Some features per a company press release include Wi-Fi and BLE for wireless data, an embedded Arm Cortex-M3 for system control and user applications, and advanced security elements for device safeguards. Furthermore, they can operate in stand-alone mode in combination with the external MCU, or in a hybrid mode. This allows for system control and processing to be shared between the module and the MCU. Read more: INNOPHASE RELEASES INP1010, INP1011 TALARIA TWO MODULES ### LATENCY METER FOR ACCURATE GAMING The gaming world experienced a bit of a resurgence in 2020 that is still seen in the present day. Even putting aside the effects from the pandemic, the affordability and accessibility has arguably never been better. Building a gaming PC can have its downsides, though, and a challenging issue to troubleshoot is input lag or input latency. This is something that’s best measured with standalone hardware, and if this is an issue on your setup you may want to take a look at this latency meter. Unlike other measurement devices that use the time between a mouse button input and the monitor’s display of a bullet or shooting event, this one looks at mouse movement and the change in the scene instead. This makes it much more versatile than other methods since it’s independent of specific actions, and can be used in any game without any specific events needed to perform the measurement. A camera is placed on the monitor’s top edge and the Arduino-based device sends mouse commands to the computer while measuring the time between those commands and the shift in the image on the monitor. The project is open source, so with the right hardware it’s possible to build one to troubleshoot latency issues or just to learn more about a particular hardware configuration’s behavior. Arduinos and other microcontrollers have been doing all kinds of things by pretending to be human interface devices like this for a while now. One of our favorites of late was this effects pedal that replicates musical effects on mice and keyboards. Source: LATENCY METER FOR ACCURATE GAMING ### NEXPERIA RELEASES NEW GAN FET DEVICES Nexperia released a new set of GaN FET devices (650 V GAN041-650WSB in TO-247 and GAN039-650NBB in CCPAK) that feature the company’s high-voltage GaN HEMT H2 technology in both TO-247 and the company’s proprietary CCPAK surface mount packaging. The cascode within the devices allows for higher levels of switching FOMs and on-state performance.Features of the new GaN FET devices, per a press release, include the following: The new GaN technology employs through-epi vias, reducing defects and shrinking die size by around 24%. RDS(on) is also reduced to just 41 mΩ (max., 35 mΩ typ. at 25 °C) with the initial release in traditional TO-247, with high threshold voltage and low diode forward voltage. The reduction will further increase, to 39 mΩ (max., 33 mΩ typ. At 25 °C) with CCPAK surface-mount versions. Because the parts are configured as cascode devices, they are also simple to drive using standard Si MOSFET drivers. Both versions meet the demands of AEC-Q101 for automotive applications. Nexperia’s CCPAK surface-mount packaging leverages the company’s copper-clip package technology, which replaces internal bond wires. The technology allows for reduction in parasitic losses, optimizes electrical and thermal performance, and improves reliability,  Read more: NEXPERIA RELEASES NEW GAN FET DEVICES ### What is iPaaS cloud based Integration-Platform-as-a-Service In today’s interconnected world, where data and applications cross boundaries at lightning speed, iPaaS—Integration Platform as a Service, plays an increasingly vital role. Essentially, iPaaS is a cloud-based service designed to integrate disparate systems, applications, and data sources, providing a seamless experience for both businesses and consumers. If you’ve ever wondered how your customer relationship management (CRM) tool interacts smoothly with your email marketing software, the answer likely involves iPaaS. What is iPaaS? To enhance your understanding, iPaaS offers several key features that make it indispensable: Data Integration: This is the crux of iPaaS. Imagine consolidating data from various touchpoints like databases, cloud storage, and third-party services into a single, coherent system. API Management: iPaaS provides a secure and efficient way to manage Application Programming Interfaces (APIs) that govern how different software components interact. Business Process Automation: If you’re looking to reduce redundancy and improve efficiency, iPaaS can help automate repetitive tasks and workflows. Real-time Monitoring and Analytics: Make informed decisions with real-time data analytics and monitoring features. Security and Compliance: Rest easy knowing that iPaaS takes care of data encryption, user authentication, and compliance with regulations such as GDPR. How does it work? In case you’re curious how this all comes together, iPaaS operates through a centralized platform that acts as an intermediary between different systems. Simply put, it receives data from one system, processes it as necessary, and then sends it to another system. This can be as simple as syncing contact information between your email tool and CRM or as complex as automating an entire supply chain management system. Here are some advantages that iPaaS offers businesses : Scalability: As your business grows, iPaaS scales with you. No need to invest in additional hardware or manpower. Cost-Effectiveness: By reducing manual intervention and streamlining processes, iPaaS can significantly cut down operational costs. Flexibility: iPaaS is usually designed to be modular and customizable, allowing you to pick and choose functionalities as per your business needs. Rapid Deployment: Time is of the essence, and iPaaS solutions are generally quick to implement, enabling you to hit the ground running. iPaaS acts as the nerve center for an organization’s various systems. Imagine a situation where your marketing team uses one tool for email campaigns, while sales use another for managing customer relations. iPaaS ensures that these systems “talk” to each other, sharing data and actions so that no manual transfer or synchronization is necessary. It’s like having a digital traffic cop at every intersection, ensuring a smooth flow of data and processes. Let’s consider a typical sales scenario. A lead is captured through a website form and is immediately stored in a CRM system. The marketing team then sends promotional emails via an email marketing platform. With iPaaS, the moment that lead becomes a qualified opportunity in the CRM, an invoice can be automatically generated in the accounting software, inventory levels checked in real-time, and even contracts pre-filled for quicker closure. Every step is automated, reducing the scope for errors and speeding up the sales process. The future appears bright for iPaaS. With an increasing number of businesses migrating to the cloud, the demand for seamless integration is higher than ever. Companies like Salesforce and Microsoft are heavily investing in iPaaS solutions to keep up with this growing need. A few practical applications of iPaaS: E-commerce: iPaaS can integrate inventory systems with online marketplaces, ensuring real-time stock updates. Healthcare: Medical records can be securely and efficiently transferred between different healthcare systems. Finance: Think of real-time stock trading platforms that need to pull data from multiple exchanges. Creating integrations through iPaaS is generally straightforward: Identify Data Sources: The first step is identifying which systems need to be integrated. Select Connectors: iPaaS platforms offer a range of pre-built connectors for popular services. Map Data Fields: Define how data should be transferred between systems. For instance, the ’email’ field in your CRM might map to the ‘user email’ in your marketing software. Set Triggers and Actions: Specify what events in one system trigger actions in another. Test and Deploy: Before full deployment, test the integration to ensure it works as expected. If you’re operating in a multi-software environment—which, let’s face it, most of us are—iPaaS is almost certainly beneficial for you. Whether you’re a startup looking to integrate a few tools or a large corporation aiming to unify dozens of systems, iPaaS provides a robust, flexible solution. Security is a paramount concern when you’re dealing with data integration. You’ll be pleased to know that iPaaS providers usually offer robust security features, including end-to-end encryption and multi-factor authentication, to keep your data safe. Integration Platform as a Service (iPaaS) is essentially a cloud-based orchestration hub that enables disparate systems and applications to communicate, integrate, and cooperate seamlessly. Its relevance cannot be overstated in today’s digital age, where a multitude of systems, from CRMs to supply chain management tools, need to interact in real-time to deliver a cohesive business experience. iPaaS is a powerful tool that offers more than just a quick fix for system integration; it’s a long-term strategy for business efficiency and scalability. From API management to robust security protocols, iPaaS has carved a niche for itself as an essential part of modern business infrastructure. So, whether you’re looking to streamline your operational workflows, integrate complex systems, or simply enhance your data handling capabilities, iPaaS has something for everyone. For more information on solutions that are provided by companies such as IBM jump over to the companies official website for more details. Source: What is iPaaS cloud based Integration-Platform-as-a-Service ### ELEKTOR ARCHIVE 1974-2019 IN A USB STICK FOR ONLY 99.95€ This handy USB stick (32 GB, USB 3.0) is loaded with all the Elektor magazine English editions (as PDFs) from 1974 to 2019. Elektor engineers, authors, and editors aim to inspire you to master electronics and computer technology by presenting professionally designed circuits that are easy to build. We also cover the latest developments in electronics and information technology. With the Elektor Archive on a USB stick, you can browse our previous English editions at your convenience and learn about MCU-based projects, robotics, electronics testing, embedded programming, analog techniques, and much more. All the Elektor magazine editions are stored as PDFs on a 32-GB USB stick (USB 3.0). The 10,000+ articles have been classified by date of publication (month/year), and a comprehensive index enables you to search the entire USB stick. Subject areas include: Audio & videoComputers & microcontrollersRadio, hobby & modellingHome & gardenPower supplies & batteriesTest & measurementSoftwareAnd everything else that doesn’t fit in one of these categories. Read more: ELEKTOR ARCHIVE 1974-2019 IN A USB STICK FOR ONLY 99.95€ ### THE MOST EFFICIENT HEAT SINKS ARE PRODUCED COST-EFFICIENTLY BY VALCUN We live in a society in which we strive for higher performance and efficiency in everything around us. Computers go to a 7nm process, supercomputers do 148.6 petaflops and electric cars aim for a range of 1000km. From a technological point of view, these evolutions usually come down to a higher energy density, and related temperature hotspots. Traditional solutions such as air cooling with extruded aluminium profile are no longer sufficient. By Jonas Galle (ValCUN) There is a need for more efficient cooling to maintain our technological progress. Cooling with a fluid (water, glycol, …) instead of air provides 10x to 100x better thermal transfer. An optimized design of the heat sink can increase the efficiency by a factor of two or more. Generative optimised design is so complex that they cannot be produced by traditional techniques such as milling, die-casting, extrusion, … The only alternative is an additive manufacturing (AM). Several metal AM techniques are available today. Main disadvantage of these AM technologies is the production price and speed. These barriers are the main reasons why we don’t yet see them in mainstream applications. Economical serial production of complex heat sinks is the focus of ValCUN. This is done by hybrid manufacturing. Hightech where needed and fast and economical where possible. ValCUN combines traditional production technologies such as diecasting or extrusion with its disruptive metal AM technology. For the cooling of three IGBT’s a generative design increased cooling performance by 40%. Manufacturing 100.000 coolers with metal additive manufacturing technology known as SLM would not be possible within two year on one machine and would cost more than € 100 per part. Read more: THE MOST EFFICIENT HEAT SINKS ARE PRODUCED COST-EFFICIENTLY BY VALCUN ### KINETIC SCULPTURE INTERMITTENTLY LIGHTS UP THE NIGHT We absolutely love the impetus of this project, as it definitely sounds like something a Hackaday reader would go through. After finally deciding between a CNC router and a laser cutter, [Eirik Brandal] was planning to “Hello, World” the CNC with something quick and simple, like maybe a few acrylic plates with curves and some electronics. Instead, feature creep took over, “things escalated out of control”, and [Eirik] came up with this intriguing and complicated kinetic sculpture. As you’ll see in the demo video below, this is a motor-driven sculpture with sound and intermittent light. It has an Arduino Nano Every, two motors, and eight gears with various cog counts to accommodate the project. The light comes from LEDs that are attached to the DIY gears with their legs bent and their little feet sliding around homemade slip rings in order to alight. But what about the sound? There’s an affixed piezo disk that picks up the gears’ vibrations and chafing, and this gets amplified to augment the acoustic sounds of the sculpture. Be sure to check out the quite satisfying demo video after the break, and stick around for the build video. Are you as fascinated by kinetic sculptures as we are? Here’s on that uses machine learning in order to bring balance to itself. Source: KINETIC SCULPTURE INTERMITTENTLY LIGHTS UP THE NIGHT ### Training an Arduino UNO R4 powered robot using machine learning If you are interested in learning more about training robots using machine learning techniques and technologies you might be interested in a new Arduino project to ascertain whether a basic robot could navigate using only LiDAR, as opposed to more resource-intensive computer vision techniques.   LiDAR, or Light Detection and Ranging, is a remote sensing method that uses light in the form of a pulsed laser to measure distances. It’s a technology that has been gaining traction in the field of autonomous vehicles and robotics, and this project aimed to push its boundaries further  and is demonstrated by YouTuber Nikodem Bartnik with a LiDAR equipped mobile robot. The robot’s hardware was constructed in accordance with the Open Robotic Platform (ORP) rules. This included two DC motors, an UNO R4 Minima, a Bluetooth module, and an SD card. The adherence to ORP rules ensured that the robot was built on a platform that promotes open-source hardware and software, fostering innovation and collaboration in the robotics community. Robot machine learning Bartnik’s approach to training the robot was meticulous and innovative. He collected a point cloud from the spinning lidar sensor by manually driving the robot through a series of courses. This data was then imported and transformations were performed to minify the classification model. This process of data collection and transformation was crucial in training the robot to recognize and navigate obstacles. Training robots using machine learning The foundational concept involves integrating machine learning algorithms into robotic systems to enable them to adapt to varying educational needs and contexts. These robots can be designed to perform tasks such as tutoring in specific subjects, assisting with hands-on experiments, or facilitating group activities. Importantly, the adaptive nature of machine learning allows these robots to learn from student interactions, thereby continuously improving their educational efficacy. The training process usually comprises data collection, model selection, and iterative refinement. Initially, the robot is trained using a dataset that may include student responses, facial expressions, or other interaction metrics. Algorithms such as decision trees, neural networks, or reinforcement learning can be used to build the model. The trained model is then deployed into the robot, which starts interacting with students. Feedback loops are essential here: As the robot engages with students, new data is collected and used to update the model, enabling a cycle of continuous improvement. The workflow typically includes the following stages: data collection, data preprocessing, model selection, training, evaluation, and deployment. Data Collection: The first step is gathering data that the machine learning algorithm can learn from. This data can come from various sources such as sensors on the robot, human-robot interactions, or even simulated environments. The type of data collected depends on the task the robot is designed to perform. For instance, if the robot is being trained for object recognition, you might collect images of the objects from various angles and lighting conditions. Data Preprocessing: Raw data usually needs to be cleaned and transformed to be useful. This might involve normalizing sensor readings, annotating images, or segmenting time-series data. The goal is to prepare the data in a way that makes it easier for the machine learning algorithm to identify patterns. Model Selection: The next step is choosing the appropriate machine learning algorithm. The choice depends on the nature of the problem, the type of data, and the computational resources available. Algorithms can range from simpler methods like linear regression and decision trees to complex ones like neural networks or reinforcement learning algorithms. Training: Once the model is selected, the actual training process begins. The algorithm uses the processed data to adjust its internal parameters. For supervised learning tasks, the model learns to map inputs (features) to outputs (labels) based on the training data. In unsupervised tasks, the model tries to learn the underlying structure of the data. In the case of reinforcement learning, the robot learns by interacting with its environment and receiving rewards or penalties. Evaluation: After training, the model’s performance is evaluated using a separate dataset that it hasn’t seen before, known as the validation or test set. Metrics such as accuracy, precision, and recall are commonly used to quantify the model’s effectiveness. Deployment: Once the model is trained and evaluated, it’s integrated into the robot’s control system. This enables the robot to make decisions, perform tasks, or interact with humans or other systems based on the learned patterns. Iterative Refinement: As the robot operates in the real world, additional data can be collected to further refine and update the machine learning model, allowing the robot to adapt to new conditions or tasks over time. Source: Training an Arduino UNO R4 powered robot using machine learning ### MACHINE LEARNING ROBOT RUNS ARDUINO UNO When we think about machine learning, our minds often jump to datacenters full of sweating, overheating GPUs. However, lighter-weight hardware can also be used to these ends, as demonstrated by [Nikodem Bartnik] and his latest robot. The robot is charged with autonomously navigating a simple racetrack delineated by cardboard barriers. The robot is based on a two-wheeled design with tank-style steering. Controlled by an Arduino Uno, the robot uses a Slamtec RPLIDAR sensor to help map out its surroundings. The microcontroller is also armed with a Bluetooth link and an SD card for storage. The robot was first driven around the racetrack multiple times under manual control, all the while collecting LIDAR data. This data was combined with control inputs to help create a data set that could be used to train a machine learning model. Feature selection techniques were used to refine down the data points collected to those most relevant to completing the driving task. [Nikodem] explains how the model was created and then refined to drive the robot by itself in a variety of race track designs. It’s a great primer on machine learning techniques applied to a small embedded platform. Source: MACHINE LEARNING ROBOT RUNS ARDUINO UNO ### WI-FI + BLUETOOTH 5 COMBO MODULE CATERS TO INDUSTRIAL IOT Wireless technologies provider Laird Connectivity has announced a Wi-Fi 5 (802.11ac) and Bluetooth 5.1 module that it says is purpose-built for industrial Internet of Things connectivity through a secure, reliable, and robust feature set.  Powered by the Cypress Semiconductor CYW4373E wireless solution, the Sterling-LWB5+ was intentionally designed for industrial IoT applications where performance, size, cost, and ruggedness are required to deliver reliable wireless connectivity. Careful design considerations were made, says the company, to ensure the Sterling-LWB5+ is painless when integrating into host platforms. “Our customers span multiple industries that have a diverse set of requirements and a common need we identified was the creation of a true industrial IoT module,” says Jay White, product manager for Laird Connectivity’s Wi-Fi solutions. “We took direct customer feedback and together with Cypress, made purposeful design considerations to ensure that our module caters to industrial IoT devices, is fully certified, and simplifies our customers’ BOM; reducing certification costs and improving time-to-market.” The Sterling-LWB5+ feature-set includes 802.11ac Wi-Fi and dual-mode Bluetooth, an industrial temperature specification, and a solder-down module form factor that is suitable for industrial devices where vibration and impacts are common. With an integrated PA (power amplifier) and LNA (low noise amplifier) and antenna diversity, says the company, the module ensures reliable connectivity in harsh RF environments. Read more: WI-FI + BLUETOOTH 5 COMBO MODULE CATERS TO INDUSTRIAL IOT ### BHI260AB ULTRA-LOW-POWER SMART SENSOR HUB Bosch Sensortec’s BHI260AB ultra-low-power high-performance smart sensor hub with integrated accelerometer and gyroscope Bosch Sensortec’s BHI260AB is a family of ultra-low-power smart hubs consisting of Bosch Sensortech’s programmable 32-bit microcontroller (Fuser2), a state-of-the-art 6-axis IMU, and a powerful software framework containing pre-installed sensor fusion and other sensor processing software within a small 44-pad LGA package. The Fuser2 Core is configurable to operate at 20 MHz (Long Run mode) and 50 MHz (Turbo mode). It can boot from a wide variety of hosts, ranging from a small Arm® Cortex®-M0 MCU up to multicore application processors, while it can also run standalone when booting from an attached Flash memory. In combination with its wide connectivity and extendability, the BHI260AB becomes a versatile and ideal solution when it comes to always-on sensor processing at ultra-low-power consumption. Hardware Features CPU coreARC® EM4 CPU with ARCv2 16/32 bit instruction set (up to 3.6 CoreMark/MHz)Floating point unit (FPU) / memory protection unit (MPU)4-channel micro DMA controller / 2-way associative cache controllerMemory256 kB on-chip SRAM144 kB on-chip ROM preloaded with softwareUp to 8 MB external Flash for execute in place (XiP) code execution ConnectivityHost interface configurable as SPI or I2C3 master interfaces (selectable out of 2x SPI master and 2x I2C master)Up to 25 GPIOsFast I/O operationsSPI and GPIOS up to 50 MHzI2C up to 3.4 MHzIntegrated sensor [six degrees of freedom inertial measurement unit (6-DoF IMU)]16-bit 3-axis accelerometer16-bit 3-axis gyroscope Read more: BHI260AB ULTRA-LOW-POWER SMART SENSOR HUB ### Importance of Sensors in Robotics and Interfacing with Arduino Sensors are essential for the functioning of senses. Within the field of robotics, the fundamental senses rely on basic sensors, such as mechanical switches that detect object contact, and photosensitive resistors and transistors that identify the presence or absence of light. Remarkably, a robot can accomplish significant tasks with just touch and rudimentary vision. In this month's segment, you will gain insight into linking switches and photosensors to the Arduino platform. You will also discover how to harness the data offered by these sensors to actively control a robot's motors. These components form the core foundational elements for almost any autonomous robot you create. Once you master the utilization of these sensors to execute your commands, you can deploy them in a wide array of applications. Arduino Robotics: What We’ve Covered So Far This piece of writing extends the foundation established in prior sections of this series, which predominantly focuses on creating and utilizing the ArdBot (refer to Figure 1). The ArdBot is an economical two-wheeled robot with differential steering, designed around the widely used Arduino Uno and compatible microcontrollers. If you wish to actively engage with the content, it's advisable to explore the preceding three episodes. This will ensure you have a good grasp of the storyline and characters involved. In the initial segment, Part 1, we presented the ArdBot project alongside the Arduino platform, as well as the fundamental principles of programming for this robust controller. Part 2 provided an elaborate explanation of how to assemble the ArdBot, utilizing readily available materials like plastic or aircraft-grade plywood. Moving on to Part 3, a deeper exploration of the Arduino was undertaken, delving into the intricacies of programming R/C servo motors using this platform. The concepts discussed here are applicable to a wide range of robots employing the Arduino microcontroller, and which are propelled by two motors and move on wheels or tracks. You have the flexibility to customize the methods and programming code for the specific robots you are developing. The ArdBot serves as a foundation for further expansion, while also embodying the archetype of a standard desktop-sized robot. The realm of sensors is quite intricate, encompassing a breadth of captivating aspects that can't be fully addressed within a single article. Therefore, in the upcoming month's installment, you will delve into additional categories of cost-effective sensors that can be integrated with your ArdBot (or any other robotic project). Getting in Touch With Your Robot Sensors, whether found within humans or robots, are engineered to generate a response. The nature of this response hinges on the specific type and quantity of the sensation. Interpretations are significant. For instance, a gentle summer breeze is typically perceived as pleasant. However, when the air pressure escalates to hurricane levels and the temperature plummets below freezing, those same sensations elicit considerably adverse reactions. Touch, often referred to as tactile feedback, represents a basic form of responsive sensation. The robot comprehends its surroundings by initiating physical interaction, which is detected through an array of touch sensors. The outcome of such interaction is entirely governed by the programming you implement within your robotic system. Frequently, encountering an object leads to a state of alertness. Consequently, the robot's response involves halting its ongoing activities and retreating from the situation. In alternate scenarios, contact could signify that your robot has reached its designated home base or has identified an adversary robot, signaling an impending engagement. The humble mechanical switch stands as the most prevalent and uncomplicated variation of a tactile (touch) feedback mechanism. Virtually any transient, spring-loaded switch is suitable. Upon the robot's contact, the switch comes together, thereby establishing a circuit connection. I prefer employing leaf switches (refer to Figure 2), as they operate in a manner reminiscent of a cat's whiskers. Although occasionally termed "microswitches" due to a prominent brand, I'll use the term "leaf switches" to prevent any ambiguity. Irrespective of the manufacturer or version, they are generally simple to install and often include plastic or metal strips of varying lengths that amplify the switch's sensitivity. It's possible to increase the surface area of contact for the leaf switch by affixing larger sections of plastic or metal through adhesive or soldering. As an illustration, you can take sturdy music wire (readily obtainable at hardware stores) or repurpose an inexpensive wire clothes hanger. By shaping it creatively, you can enhance the contact area. You can solder the end(s) onto the leaf. Alternatively, opt for slender segments of wood, plastic, or metal. However, ensure that the added weight of the extension doesn't inadvertently trigger the switch. Preventing false alarms is crucial. The switch can be linked either directly to a motor or, more frequently, to a microcontroller. A standard wiring diagram for the switch is depicted in Figure 2. The inclusion of a 10 kΩ pull-down resistor serves the purpose of maintaining a consistent digital LOW (0 volts) output for the switch in the absence of contact. Upon contact, the switch is engaged, resulting in an elevated output that generally reads around five volts, as illustrated here. Using Leaf Switches as Bumpers By installing two conventional leaf switches on the front of your ArdBot, it becomes capable of sensing collisions. When positioned on the sides, these switches enable your robot to ascertain whether the encountered object is located to the left or right, subsequently allowing it to navigate around the obstacle. Figure 3 depicts a set of leaf switches affixed to the front of the ArdBot, resembling bumpers. These types of switches can be readily found on various online electronics stores and are frequently encountered as surplus items. I haven't expanded the switches' contact area deliberately, as my main focus is to showcase the underlying concepts. Feel free to employ your creativity to improve the switches for achieving the desired level of sensory detection. For instance, it's immediately noticeable that the robot might not detect small objects positioned right between the switches. To address this, you can either enlarge the contact area or opt for an alternative method of "sensing" to prevent collisions proactively. For attaching each switch, locate two appropriate holes in the robot's base or create new holes through drilling. Leaf switches typically come with three terminals: common, normally open (NO), and normally closed (NC). Connect the common and NO terminals with wiring. If space is constrained, you can remove the NC connection to create additional room. In Figure 4, you can observe the schematic illustrating the linkage of the two switches to the Arduino's digital pins D2 and D3. Figure 5 presents the identical circuit configuration, depicted in a breadboard perspective. Utilize the upper section of the ArdBot's 170 tie point solderless breadboard for this purpose. Keep in mind that the lower half of the breadboard is already allocated to the ArdBot's servo wiring, as elaborated in Part 2 of this series. In the initial model, I fashioned connectors for the switches by soldering two wires onto the pins of a separable male header. These headers permit you to detach the required number of pins for your purpose. In one instance, I adjusted a connector to span three pins in width, eliminating the central pin. Subsequently, I soldered the switch wires to the outer pair of pins. For the other connector, I tailored it to encompass four pins in width, eliminating the two central pins. The manner in which these two connectors are inserted into the breadboard can be observed in Figure 5. Crucial! Ensure that all wires and additional components are securely inserted into their respective timepoint sockets on the breadboard. Unstable connections rank as the second most prevalent factor leading to issues while utilizing a solderless breadboard; the primary cause is typically misplacing wire connections into incorrect tie points! The demo program "bumper.pde" is displayed in Listing 1. The ArdBot initiates forward movement until either of its front bumper switches comes into contact with an object. As soon as the switch is activated, the robot promptly shifts into reverse, followed by executing a turn in the opposite direction of the obstacle. The time intervals are denoted in milliseconds: a 500-millisecond (half-second) reversal period and a 1,500-millisecond (1.5-second) spinning movement to the right or left. /* ArdBot bumper switch demo Requires Arduino IDE version 0017 or later (0019 or later preferred) */ #include const int ledPin = 13; // Built-in LED const int bumpLeft = 2; // Left bumper pin 2 const int bumpRight = 3; // Left bumper pin 3 int pbLeft = 0; // Var for left bump int pbRight = 0; // Var for left bump Servo servoLeft; // Define left servo Servo servoRight; // Define right servo void setup() { servoLeft.attach(10); // Left servo pin D10 servoRight.attach(9); // Right servo pin D9 // Set pin modes pinMode(bumpLeft, INPUT); pinMode(bumpRight, INPUT); pinMode(ledPin, OUTPUT); } void loop() { forward(); // Start forward // Test bumper switches pbLeft = digitalRead(bumpLeft); pbRight = digitalRead(bumpRight); // Show LED indicator showLED(); // If left bumper hit if (pbLeft == HIGH) { reverse(); delay(500); turnRight(); delay(1500); } // If right bumper hit if (pbRight == HIGH) { reverse(); delay(500); turnLeft(); delay(1500); } } // Motion routines void forward() { servoLeft.write(180); servoRight.write(0); } void reverse() { servoLeft.write(0); servoRight.write(180); } void turnRight() { servoLeft.write(180); servoRight.write(180); } void turnLeft() { servoLeft.write(0); servoRight.write(0); } void stopRobot() { servoLeft.write(90); servoRight.write(90); } void showLED() { // Show LED if a bumper is hit if (pbRight == HIGH || pbLeft == HIGH) { // Turn LED on digitalWrite(ledPin, HIGH); } else { // Turn LED off digitalWrite(ledPin, LOW); } } Feel free to explore different delay configurations based on your robot's speed characteristics. In cases where you're using swifter servo motors, opting for a briefer delay is viable. The concept revolves around rotating the robot by approximately one-quarter to one-half turn, effectively guiding it away from the obstacle. Take note that terms like "left," "right," "front," and "back" are somewhat context-dependent in the context of a robot like the ArdBot. The orientation of the front end is not fixed, allowing for flexibility in defining left and right directions. In my prototype, I positioned the two leaf switches on the end that had more available mounting space, effectively designating that end as the "front." The coding within bumper.pde is tailored to this design decision. If your robot exhibits behavior contrary to your expectations, you can interchange the values in the motion routines (such as forward, reverse, etc.). For more comprehensive insights into the servo commands' functionalities and operations, refer to Part 3 of this series. Understanding the bumper.pde Sketch Like all Arduino sketches, bumper.pde is structured into three main sections: declaration, the setup() function, and the loop() function. The initial section at the beginning of the sketch establishes the variables employed across the program. It additionally initializes two instances of the servo class. As you've learned from Part 3 of Making Robots with the Arduino, the servo class is included as a library within the Arduino programming toolkit. It's utilized for managing one or multiple R/C servos. The declaration also designates the two leaf switches as linked to digital pins D2 and D3, along with the utilization of the Arduino's internal LED (linked to pin D13) for visual indication. Within the setup() function, the servos are configured to be associated with digital pins D9 and D10. Furthermore, the pins allocated for the LED and the two switches are designated as outputs and inputs, respectively. The central segment of the sketch resides in the loop() function, which continues in an endless loop. It initiates by engaging the two servos to propel the robot in a forward direction. Subsequently, the sketch employs the digital Read statement to capture the present condition of the two switches. The real-time status of the switches is retained in a duo of variables (pbLeft and pbRight — the pb signifying pushbutton). These variables find application in various other parts of the sketch. The focal point within the loop() function revolves around the pair of if statements. Here is the statement responsible for assessing the left leaf switch: if (pbLeft == HIGH) reverse(); delay(500); turnRight(); delay(1500); } The condition "pbLeft == HIGH" examines whether the value stored in the pbLeft variable (previously determined according to the state of the left leaf switch) is set to HIGH. If it is, this signifies that the left switch is engaged, indicating the robot has encountered an obstacle. Conversely, if the value is LOW, this indicates that the switch is disengaged, and the robot proceeds with its movement. The bumper.pde sketch encompasses several functions created by the user. The majority of these, such as forward() and reverse(), pertain to controlling the servo motors. Another function, depicted as shownLED(), alternates the state of the LED linked to pin D13 on the Arduino, switching it on or off in response to the state of a switch. Employ this as a visual cue to confirm the proper functionality of the programming code. Switch Triggers Using Polling or Interrupts The coding within bumper.pde utilizes a technique referred to as polling. The sketch consistently monitors the condition of the two switches. When a switch is pressed, its state changes from LOW to HIGH. When in the HIGH state, the robot is directed to alter its course. These switches are checked or polled numerous times every second. Polling is considered appropriate when dealing with straightforward sketches and minimal demands on the Arduino's resources. However, for code that places a higher load on processing, there exists a slight possibility that the controller might overlook the closure of a leaf switch. It could be engaged in other tasks between polling intervals, remaining oblivious to any events occurring during those intervals. In reality, even with a moderately intricate sketch, you can achieve a detection rate of approximately 99 percent for switch closures. This is due to the fact that, from the perspective of a microcontroller, switch closures tend to endure as relatively extended periods of time. Even a momentary 100-millisecond (one-tenth of a second) contact becomes considerably lengthy for a microcontroller operating at 16 MHz. Consequently, it's highly probable that the switch closure will be successfully recognized. However, if it's absolutely crucial to ensure the detection of even the most momentary contact, you might want to contemplate the utilization of hardware interrupts as opposed to polling. Through an interrupt, specialized code is executed solely when a precise external event transpires. This approach is advantageous as the main program loop() is no longer required to consistently monitor the pin states, thus allowing the controller to allocate resources to other tasks. Interrupt response time is measured in microsecond intervals, even if the Arduino is engaged in concurrent activities. (Although this isn't invariably the case, contingent on the utilization of other hardware components on the controller. Nevertheless, any additional delay is typically minimal.) The Arduino Uno is equipped with two internal hardware interrupts (while the Arduino Mega supports six), linked directly to digital pins D2 and D3. These pins are the ones to which the leaf switches are already connected, meaning that only a software modification is necessary. For the interrupt implementation, refer to Listing 2 in interrupt.pde. In this version, the bumper.pde sketch has been adapted to actively monitor alterations in state on both of the hardware interrupts using the following instructions: attachInterrupt(0, hitLeft, RISING); attachInterrupt(1, hitRight, RISING); /* ArdBot interrupt bumper demo Requires Arduino IDE version 0017 or later (0019 or later preferred)*/ #include const int ledPin = 13; const int bumpLeft = 2; const int bumpRight = 3; int pbLeft = 0; int pbRight = 0; Servo servoLeft; Servo servoRight; void setup() { servoLeft.attach(10); servoRight.attach(9); // Set pin modes pinMode(bumpLeft, INPUT); pinMode(bumpRight, INPUT); pinMode(ledPin, OUTPUT); // Set up interrupts attachInterrupt(0, hitLeft, RISING); attachInterrupt(1, hitRight, RISING); } void loop() { forward(); // Start forward showLED(); // Show LED indicator // If left bumper hit if (pbLeft == HIGH) { reverse(); delay(500); turnRight(); delay(1500); pbLeft = LOW; } // If right bumper hit if (pbRight == HIGH) { reverse(); delay(500); turnLeft(); delay(1500); pbRight = LOW; } } // Motion routines void forward() { servoLeft.write(180); servoRight.write(0); } void reverse() { servoLeft.write(0); servoRight.write(180); } void turnRight() { servoLeft.write(180); servoRight.write(180); } void turnLeft() { servoLeft.write(0); servoRight.write(0); } void stopRobot() { servoLeft.write(90); servoRight.write(90); } void showLED() { // Show LED if a bumper is hit if (pbRight == HIGH || pbLeft == HIGH) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } // Interrupt handlers void hitLeft() { pbLeft = HIGH; } void hitRight() { pbRight = HIGH; } Take notice that the interrupts are labeled as 0 and 1, which correspond to pins D2 and D3 accordingly. The designations "hit Left" and "hit Right" denote the functions that are invoked upon the activation of the interrupt. Lastly, "RISING" is a predefined constant instructing the Arduino to initiate the interrupt when there is a transition from LOW to HIGH signal. Such a transition arises when the switch is engaged. Both "hit Left" and "hit Right" elevate their respective "pb" variables to the HIGH state. Subsequently, the program promptly exits the interrupt handler. During the subsequent iteration of the Arduino's loop(), it recognizes the elevated pushbutton state and executes the required obstacle evasion procedure. (Additionally, it's important to observe that the pushbutton value is intentionally reset to LOW, in preparation for the forthcoming collision event.) You could be wondering why the code governing servo control isn't placed within the interrupt handlers. The rationale behind this is as follows: the delay statement, which is employed to guide the robot around an obstacle, becomes inactive within an interrupt context. Furthermore, it's generally advisable to refrain from incorporating time-consuming operations within interrupt handlers. To Let Bounce or Debounce? In an ideal scenario, mechanical switches would generate precise and dependable digital signals for our microcontrollers. However, reality isn't flawless, and we encounter an issue known as switch bounce. Instead of obtaining a neat LOW-to-HIGH digital transition when a switch is engaged, we observe five, 10, or even numerous erratic fluctuations, resulting from the movement of the metal contacts within the switch as they settle into place. This entire process occurs at a rapid pace, often taking just a few milliseconds. In certain scenarios, it becomes imperative to eliminate the output fluctuations of a switch through a process called debouncing. Through debouncing, all the erratic fluctuations are smoothed out, resulting in a single, clean signal pulse that the microcontroller requires. Debouncing can be achieved through additional hardware components: a capacitor and a resistor form an RC network that introduces a delay in the switch signal's rise and fall, effectively eliminating the glitches. Alternatively, debouncing can also be implemented through software by employing delays, ensuring that the microcontroller only registers the initial signal transition while disregarding subsequent fluctuations. Neither the bumper.pde nor the interrupt.pde illustrations explicitly incorporate switch debouncing. Software delays are inherently embedded within the code, and the relatively sluggish nature of R/C servos negates the necessity for swift reaction times, rendering bounce-related issues inconsequential. Servos are directed within 20-millisecond intervals referred to as "frames," meaning their functioning is refreshed approximately every 20 milliseconds. Interestingly, this aligns with the most pessimistic scenario of bounce glitches stemming from the majority of switches. Consequently, even when a switch experiences vigorous bouncing, its impact on servo operations remains minimal to non-existent. If the requirement arises to debounce your switch inputs, you can access a distinct class library that can be downloaded and integrated into your Arduino setup. This library, known as "Bounce," is accessible through the primary Arduino language reference resources. Additionally, the Arduino programming IDE includes a Debounce code example as part of its offerings. Mounting Alternatives, More Switches Before proceeding further, a couple of brief points to highlight. Up to this point, the discussion has centered on the two switches located at the robot's front, on the right and left sides. However, you are welcome to position switches according to your preferences. For instance, you might opt for front and back switches or even deploy an array of switches encircling the robot's periphery. In the event that you incorporate more than two switches, you will need to resort to polling since only two pins can accommodate hardware interrupts (specifically on the Arduino Uno). In cases where you involve more than four or five switches, you might consider employing a different strategy. In the scenario where you incorporate more than two switches, you will be compelled to rely on polling, as the Arduino Uno offers only two pins that support hardware interrupts. In the event that you intend to employ more than four or five switches, you might consider adopting a parallel-to-serial (PISO) shift register chip, like the 74HC165 or CD4021. These integrated circuits accept eight parallel inputs and furnish a serial data output that the Arduino can interpret. If, for instance, you are dealing with eight switches, the PISO mechanism trims down the number of required I/O pins from eight to three. An illustrative code example for this approach is accessible at arduino.cc/en/Tutorial/ShiftIn. Let There Be Light (and let your ArdBot see it!) Aside from tactile feedback, responding to light stands as one of the most prevalent sensory functions in robotics. When actual vision is not available, robots utilize electronic elements such as photoresistors and phototransistors that exhibit sensitivity to light. Your robot can be programmed to respond to either the mere presence or absence of light, or it might possess the capability to assess various aspects of light, such as brightness, color, or other qualitative attributes. Photoresistors, often referred to as photocells, light-dependent resistors, or CdS cells (short for cadmium sulfide cells), are perhaps the most straightforward options for employing basic light sensors. The photocell operates as a resistor whose value undergoes alteration based on the intensity of light affecting its sensing surface. In situations of low light levels, the photocell exhibits high resistance, typically ranging from around 100 kΩ to over one megohm, dependent on the specific component. Conversely, as more light reaches the cell, its resistance diminishes. Under conditions of high illumination, the resistance can dwindle to as little as 1 kΩ to 10 kΩ. The specific resistance values for darkness and light fluctuate based on the component and even within photocells of the identical brand and model. The usual tolerance for these values is around 10 to 20 percent. While you can acquire new photocells, they are frequently encountered in the surplus market. Opting for a collection of assorted units and utilizing a multimeter to assess each is recommended. Photocells that are cracked or damaged are no longer functional, and their sensing surfaces can deteriorate due to exposure to air and moisture, rendering them ineffective. Dispose of any photocells that fail to respond appropriately when near a desk lamp. As a resistor, you can readily transform the output of a photocell into a fluctuating voltage by simply linking another resistor to it in a series configuration, as depicted in Figure 6. The choice of the series resistor's value is contingent upon the dark/light resistance spectrum of the photocell and the intended application. For the photocells I employed, their dark resistance hovered around 40 kΩ, and their light resistance stood at 30 ohms. In situations of average room illumination, the cells correspondingly exhibited resistance in the vicinity of 10 kΩ. Consequently, I opted for a 10 kΩ series resistor. The voltage at the junction between the photocell and the series resistor is determined by the ratio of their respective resistance values. When these two resistances are equal, the divided voltage between them equals half of the supply voltage. For instance, with a supply voltage of five volts under average room illumination, the resultant output voltage would be 2.5 volts. Connect the signal point between the photocell and the series resistor to the A0 pin on your Arduino. Proceed to compile and upload the sketch, and subsequently, open the serial monitor window. A sequence of numbers will be displayed, aligning with the converted 10-bit (0 to 1023) numerical values of the sensor's output voltage. In situations where all light to the photocell is obstructed, anticipate a low numeric reading, while under complete illumination, expect a higher numeric value. Steering Your Robot With a Flashlight With the application of two photocells positioned on either side of your ArdBot, you have the capability to guide it using a flashlight. In an environment with standard room lighting, the robot is programmed to halt, awaiting your instructions. Adjust the flashlight so that its light is distributed somewhat evenly over both photocells, and the robot will initiate forward movement. When the light intensity differs between the two cells, the robot will pivot toward the photocell that experiences a greater amount of light exposure. Consult Figure 7 for a diagram illustrating the configuration involving two photocells. Correspondingly, Figure 8 portrays the same circuit from a breadboard perspective. In my own prototype, I fashioned compact mounts for the photocells utilizing surplus PVC plastic, subsequently affixing these mounts to the top deck of the ArdBot using metallic brackets. The photocells I utilized had dimensions of 0.29" x 0.25" (elliptical shape). I drilled holes slightly smaller than the cell size, subsequently utilizing a rattail file to expand the holes until the cell could snugly fit within. In my setup, the cells were secured primarily by friction, but for your arrangement, you might opt to employ hot-melt adhesive or another appropriate bonding agent that doesn't leave behind any moisture that could lead to a potential short circuit. Figure 9 shows my ArdBot with the two photocell “eyes” attached to the front. I’ve bent the brackets back a bit so that the cells point slightly upward. Refer to Listing 4 for lightsteer.pde. It uses the current values of the photocells to make quick steering adjustments to the left or to the right. In the declarations area, the code: const int ambient = 600; const int threshold = 800; /* ArdBot steering by light demo Requires Arduino IDE version 0017 or later (0019 or later preferred) */ #include // CdS cell reference values // (you need to experiment) const int ambient = 600; const int threshold = 800; int lightLeft = 0; int lightRight = 0; Servo servoLeft; Servo servoRight; void setup() { servoLeft.attach(10); servoRight.attach(9); } void loop() { // Read light sensors connected to // analog pins A0 and A1 lightLeft = analogRead(A1); lightRight = analogRead(A0); // Stop robot if below ambient if (lightRight < ambient || lightLeft < ambient) { stopRobot(); } else { forward(); // Steer to right if right CdS below threshold if (lightRight < threshold) { turnLeft(); delay (250); } // Steer to left if left CdS below threshold forward(); if (lightLeft < threshold) { turnRight(); delay (250); } } } // Motion routines void forward() { servoLeft.write(180); servoRight.write(0); } void reverse() { servoLeft.write(0); servoRight.write(180); } void turnRight() { servoLeft.write(180); servoRight.write(180); } void turnLeft() { servoLeft.write(0); servoRight.write(0); } void stopRobot() { servoLeft.write(90); servoRight.write(90); establishes two reference values that find application in other parts of the sketch. Depending on the ambient conditions and the attributes of the photocells, you will need to conduct some trial and error with these values. Although these values proved effective in my case, you can commence with them as a baseline, but be prepared to explore alternative values as you refine the steering performance through experimentation. The ambient value establishes the upper threshold for the natural ambient light within the room. This represents the quantity of light that the photocells encounter under standard illumination circumstances. In my case, the ambient light value hovered around 520 to 530, thus I opted for a slightly elevated value of 600 to provide additional margin. The threshold value establishes the minimal level of light emitted by the flashlight. I configured this value to be 800, taking into consideration the utilization of a nine-LED flashlight at a distance of 1-2 feet from the robot, with new batteries. For optimal outcomes, employ a high-intensity flashlight in close proximity to the robot. Keep in mind that as you move farther away, the amount of light reaching the photocells diminishes. ### EVALUATION BOARD IMPLEMENTS A 5 V – 1.8 W ISOLATED FLYBACK CONVERTER The STEVAL-VP22201B evaluation board implements a 5 V – 1.8 W isolated flyback converter developed for general purpose applications operating from 85 to 265 VAC. The reference design is built around the VIPer222XSTR offline high-voltage converter from the VIPerPlus family, with 730 V Power MOSFET and PWM current-mode control. The main characteristics of the evaluation board are its small size and minimal BOM, low stand-by consumption and tight line and load regulation over the entire input and output range. Extremely low consumption under no-load condition is ensured thanks to burst mode operation that reduces the average switching frequency and minimizes all frequency related losses. ey Features Universal input mains range: 85–265 VACFrequency: 50-60HzOutput voltage: 5 VOutput current: 360 mAVery compact sizeStand-by mains consumption: < 18mW at 230 VACTight line and load regulation over the entire input and output range Read more: EVALUATION BOARD IMPLEMENTS A 5 V – 1.8 W ISOLATED FLYBACK CONVERTER ### CLOCK HACK GIVES DEC RAINBOW A NEW LEASE ON LIFE In retrocomputing circles, it’s often the case that the weirder and rarer the machine, the more likely it is to attract attention. And machines don’t get much weirder than the DEC Rainbow 100-B, sporting as it does both Z80 and 8088 microprocessors and usable as either a VT100 terminal or as a PC with either CP/M or MS-DOS. But hey — at least it got the plain beige box look right. Weird or not, all computers have at least a few things in common, a fact which helped [Dr. Joshua Reichard] home in on the problem with a Rainbow that was dead on arrival. After a full recapping — a prudent move given the four decades since the machine was manufactured — the machine failed to show any signs of life. The usual low-hanging diagnostic fruit didn’t provide much help, as both the Z80 and 8088 CPUs seemed to be fine. It was then that [Joshua] decided to look at the heartbeat of the machine — the 24-ish MHz clock shared between the two processors — and found that it was flatlined. Unwilling to wait for a replacement, [Joshua] cobbled together a temporary clock from an Arduino Uno and an Si5351 clock generator. He connected the output of the card to the main board, whipped up a little code to generate the right frequency, and the nearly departed machine sprang back to life. [Dr. Reichard] characterizes this as a “defibrillation” of the Rainbow, and while one hates to argue with a doctor — OK, that’s a lie; we push back on doctors all the time — we’d say the closer medical analogy is that of fitting a temporary pacemaker while waiting for a suitable donor for a transplant. This is the second recent appearance of the Rainbow on these pages — [David] over at Usagi Electric has been working on the graphics on his Rainbow lately. Source: CLOCK HACK GIVES DEC RAINBOW A NEW LEASE ON LIFE ### SNAPEDA LAUNCHES NEW 3D VIEWER SnapEDA is excited to share that they have launched a new and improved 3D viewer for our parts. It allows engineers to preview 3D models available on SnapEDA before download. [via SnapEDA blog] They’ve added three key features, based on feedback from our community. First, they’ve added dimensions to the viewer so that engineers can verify key measurements before downloading. This was by far, the most requested feature of our new viewer. Second, they’ve added the ability to zoom in and out to get a closer look at the component’s details. And finally, engineers can rotate the parts to see them from every angle. Benefits of using 3D models when designing PCBs include, among many others: Getting immediate visual feedback of your designs, which will aid in identifying issues such as shadowing of componentsConfirming clearances between a component and its enclosure, or between other componentsVerifying that the component outlines and designators of your parts are correctly positionedCommunicating design specifications – and demonstrating your hard work – to key stakeholders (ex: managers, clients, etc.) through beautiful 3D renderings of your circuit board What’s New In The SnapEDA 3D Model Viewer Dimensions: You can now view measurements of the models. You can enable or disable this feature by clicking on Dimensions in the bottom right-hand corner. Full-screen view: If you want to take a closer look at the 3D model, click on the Fullscreen button in the bottom right-hand corner. To exit full-screen view, click the button again, or hit the escape key on your keyboard.Zoom: Zoom in and out on the 3D model using your mouse wheel.Panning: Pan using your right mouse button and by dragging your cursor. Read more: SNAPEDA LAUNCHES NEW 3D VIEWER ### Temperature Measurement and Control In addition to its roles in controlling motors, LCDs, and LEDs, the Arduino also possesses the capability to gauge temperature measurement. By connecting an analog temperature sensor to the Arduino, it can function as an electronic thermometer. This section will guide you through the process of establishing connections and testing the precision centigrade temperature sensor. Additionally, you will gain insights into constructing an electronic thermometer utilizing the sensor and readily available electronic components. Moreover, you will acquire the know-how to exhibit the collected data through a serial monitor and an LCD. Lastly, you will be instructed on how to wire a DC motor to facilitate temperature regulation for electro mechanics. Figure 1 depicts the necessary components essential for conducting these hands-on projects and experimental endeavors. Parts List 1 Arduino Duemilanove or equivalent 1 LM35 precision centigrade temperature sensor 1 10K potentiometer 1 2N3904 NPN transistor 1 small DC motor 1 1N4001 diode 1 1K resistor 1 100W resistor 1 16x2 LCD 1 SPST switch 1 LED Solderless breadboard 22 AWG solid wire Digital multimeter Oscilloscope (optional) Electronic tools What Constitutes a Centigrade Temperature Sensor with High Precision? A precision centigrade temperature sensor is an integrated circuit (IC) that generates an output voltage proportional to the Celsius temperature scale. It doesn't necessitate external components for temperature accuracy calibration, as these are incorporated during the IC's manufacturing process. If you wish to integrate external readout devices such as LEDs or LCDs with the sensor, it's easily achievable due to the IC's low output impedance, a proportional output driver circuit, and accurately integrated calibration components. These attributes facilitate the proper operation of these optoelectronic displays. An additional impressive aspect of the precision centigrade temperature sensor is its capability to function with either a solitary DC power supply or a bipolar (positive/negative) voltage source, making it especially convenient for enthusiasts and hobbyists. Utilizing a temperature measurement IC is straightforward – you only need to connect three wires to the device and supply it with a DC power source. How It Works The output voltage of the temperature sensor IC corresponds to the temperature on the Celsius scale. In room air, the LM35 temperature sensor produces an output of around 0.23 V. When the IC is subjected to heat, its output voltage experiences an increase. To observe the fluctuating output voltage of the sensor, you can connect a voltmeter to the IC's output pin. Figure 2 illustrates the system block diagram for monitoring the output voltage of the temperature sensor. Utilizing the system block diagram as a blueprint, it is possible to construct a basic electronic thermometer. Employing the block diagram depicted in Figure 2, I designed the schematic diagram for the uncomplicated electronic thermometer circuit, as illustrated in Figure 3. Building an Electronic Thermometer During the construction of the electronic thermometer, I opted for a repurposed computer ribbon cable instead of soldering the sensor onto a prototype board. This choice facilitated unrestricted movement of the sensor. The ribbon cable's utility lies in its ability to enhance the sensor's connection to the Arduino; by inserting the IC's three pins into the openings of the connector, flexibility is achieved. On the opposite end of the ribbon cable connector, extension is achievable by introducing wires. By using longer wires, I can adjust the ribbon cable's length accordingly. Alternatively, if you possess an alternative method for enabling the sensor's free movement for remote temperature measurements, it's worth exploring. For reference, Figure 4 presents an illustration of the temperature sensor affixed to the computer ribbon cable. I employed an ohmmeter to align the temperature sensor pins, inserted into one connector, with the wires affixed to the opposing end of the computer ribbon cable. During this assembly stage, I set the ohmmeter to continuity mode to ensure accurate matching of the sensor pins with the jumper wires. For further clarity, Figure 5 provides a detailed view of the connectors at the end of the ribbon cable. I followed the pinout specifications from the LM35 datasheet to connect the sensor IC to the ribbon cable's end connector. The pinout layout of the LM35 is illustrated in Figure 6. With the ribbon cable assembly in place, I proceeded to perform the ultimate wiring of the uncomplicated electronic thermometer on the solderless breadboard. The finished electronic thermometer is depicted in Figure 7. A Computer Thermometer Crafting a computer-based thermometer entails substituting the DMM digital voltmeter with the Arduino-Processing Serial Monitor. Through the establishment of a serial connection with the computer, voltage readings from the temperature sensor become accessible. The system block diagram outlining the components of a computer thermometer is visualized in Figure 8. For the conversion of temperature sensor data, the subsequent equation is employed: Voltage at pin (Vpin) (readings from ADC) = ×(5000/1024) The programming sketch for Arduino, responsible for converting temperature sensor data into voltage and presenting it on the Serial Monitor, is outlined in Listing 1. Listing 1.  LM35 Sensor Sketch /* Converting LM35 Sensor data to Volts Sketch will take sensor data and convert it to volts. Volts value will be displayed on serial monitor Remixed sketch of ladyada's TM36 sensor tutorial http://www.ladyada.net/learn/sensors/tmp36.html Don Wilcher 03/16/12 */ //LM35 Pin Variables int sensorPin = 0;// The analog pin the LM35's Vout is connected to. /* Initialize serial connection with the computer*/ void setup() { Serial.begin(9600); // Begin serial connection with the computer pinMode(sensorPin, INPUT); } void loop() { int reading = analogRead(sensorPin);// read data from LM35 using Arduino (A0) pin float voltage = reading *5.0;// Convert sensor data to voltage voltage /= 1024.0; Serial.print(voltage); Serial.println("volts");// Print voltage on serial monitor delay(1000);// print data every second } The output voltage of the LM35 can be read using the Arduino's analog pin (A0). The circuit's schematic diagram is depicted in Figure 9. Once you've constructed the circuit schematic diagram, upload the sketch and initiate the Serial Monitor. Subsequently, you'll observe voltage data scrolling across the screen, as demonstrated in Figure 10. For handling the computer ribbon cable on the solderless breadboard, I positioned a jumper wire across it, as depicted in Figure 11. By integrating an SPST (single pole single throw) switch between pin 1 of the IC and +5VDC, you can interrupt the flow of data from the sensor to the Arduino. The circuit's revised schematic diagram for the computer thermometer is presented in Figure 12. For prototype testing, I employed a bench light as a heat source. As I maneuvered the bench light towards the sensor, there was a discernible rise in the output voltage, as demonstrated in Figure 13. Final Completion of Computer Thermometer Once the LM35 sensor circuit is operating accurately, you have the option to modify the sketch to display real temperature readings. Incorporate the subsequent lines of code into the LM35 sketch to enable the display of temperature data on the Serial Monitor: Serial.print(voltage); Serial.println("volts"); // Print voltage on serial monitor float temperatureC=(0.5-voltage)*100; //Convert voltage to temperature Serial.print(temperatureC); Serial.println(" degrees C");// Print Temperature in C Upload the modified sketch to the Arduino board to observe the voltage and temperature (in Celsius) values scrolling on the Serial Monitor interface. This presentation is exemplified in Figure 14. To show Fahrenheit temperature, you can use the following lines of code: float temperatureF=(temperatureC*9.0/5.0)+32; //Convert voltage to temperature Serial.print(temperatureF); Serial.println("degrees F");// Print Temperature in C The outcomes of the modified sketch on the Serial Monitor are illustrated in Figure 10. Listing 2 entails the sketch for exhibiting temperatures in Celsius, while Listing 3 demonstrates the presentation in Fahrenheit. Listing 10-2 LM35 Celsius Temperature Sketch /* Converting LM35 Sensor data to Volts Sketch will take sensor data and convert it to volts. Volts value will be displayed on serial monitor Remixed sketch of ladyada's TM36 sensor tutorial http://www.ladyada.net/learn/sensors/tmp36.html Don Wilcher 03/16/12 */ //LM35 Pin Variables int sensorPin = 0;// The analog pin the LM35's Vout is connected to. /* Initialize serial connection with the computer*/ void setup() { Serial.begin(9600); // Begin serial connection with the computer pinMode(sensorPin, INPUT); } void loop() { int reading = analogRead(sensorPin); // read data from LM35 using Arduino (A0) pin float voltage = reading *5.0; // Convert sensor data to voltage voltage /= 1024.0; Serial.print(voltage); Serial.println("volts"); // Print voltage on serial monitor float temperatureC=(0.5-voltage)*100; //Convert voltage to temperature Serial.print(temperatureC); Serial.println("degrees C");// Print Temperature in C delay(1000);// print data every second } Listing 10-3. LM35 Fahrenheit Temperature Sketch /* Converting LM35 Sensor data to Volts Sketch will take sensor data and convert it to volts. Volts value will be displayed on serial monitor Remixed sketch of ladyada's TM36 sensor tutorial http://www.ladyada.net/learn/sensors/tmp36.html Don Wilcher 03/16/12 */ //LM35 Pin Variables int sensorPin = 0;// The analog pin the LM35's Vout is connected to. /* Initialize serial connection with the computer*/ void setup() { Serial.begin(9600); // Begin serial connection with the computer pinMode(sensorPin, INPUT); } void loop() { int reading = analogRead(sensorPin); // read data from LM35 using Arduino (A0) pin float voltage = reading *5.0; // Convert sensor data to voltage voltage /= 1024.0; Serial.print(voltage); Serial.println("volts"); // Print voltage on serial monitor float temperatureC=(0.5-voltage)*100; float temperatureF=(temperatureC*9.0/5.0)+32; //Convert voltage to temperature Serial.print(temperatureF); Serial.println(" degrees F");// Print Temperature in C delay(1000);// print data every second } Try It Out! The LM35 sensor proves to be an exceptional integrated circuit for temperature measurement purposes, as showcased in the computer thermometer project. By leveraging the fundamental sensor circuit along with the Fahrenheit sketch, you can combine them to create a temperature monitoring system. The system block diagram for a temperature monitor is depicted in Figure 16. The underlying idea for the monitoring device revolves around deactivating the flashing LED when the temperature surpasses a predefined threshold value embedded within the sketch. The threshold value I incorporated is 78 °F, which exceeds the typical room temperature. The schematic diagram of the circuit, suitable for constructing the prototype temperature monitor, is presented in Figure 17. The prototype I assembled, following the provided circuit schematic diagram, is presented in Figure 18. Once the sketch provided in Listing 4 is uploaded to the Arduino, the LED will initiate a flashing pattern with a 2-second interval. By directing a breath of air onto the temperature sensor, the flashing LED will cease. While experimenting with various temperature extremes, observe the temperature readings as they cascade on the Serial Monitor. Modify the sketch to alter the flash rate and the threshold values, witnessing corresponding changes on the LED and the Serial Monitor display. Additionally, assess the sensor's responsiveness between temperature fluctuations. Document your findings in a laboratory notebook. Listing 10-4. LM35 Farenheit Temperature with Flashing LED Sketch /* Converting LM35 Sensor data to Volts Sketch will take sensor data and convert it to volts. Volts value will be displayed on serial monitor Remixed sketch of ladyada's TM36 sensor tutorial http://www.ladyada.net/learn/sensors/tmp36.html Don Wilcher 03/16/12 */ //LM35 Pin Variables const int sensorPin = 0;// The analog pin the LM35's Vout is connected to. const int ledPin = 9; //the number of the LED Pin /* Initialize serial connection with the computer*/ void setup() { Serial.begin(9600); // Begin serial connection with the computer pinMode(ledPin, OUTPUT); pinMode(sensorPin, INPUT); } void loop() { int reading = analogRead(sensorPin); // read data from LM35 using Arduino (A0) pin float voltage = reading *5.0; // Convert sensor data to voltage voltage /= 1024.0; Serial.print(voltage); Serial.println("volts"); // Print voltage on serial monitor float temperatureC=(0.5-voltage)*100; float temperatureF=(temperatureC*9.0/5.0)+32; //Convert voltage to temperature Serial.print(temperatureF); Serial.println(" degrees F");// Print Temperature in C if(temperatureF >78){ digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); } else{ digitalWrite(ledPin, LOW); } delay(1000);// print data every second } An engaging twist to the sketch involves varying flash rates based on normal and elevated temperatures. I replicated the flashing LED code and adjusted the duplicated version to flash more rapidly at higher temperatures measurement. Conversely, the LED maintains a slower flash rate at typical room temperatures. The remixed sketch, implementing this temperature monitoring effect, is depicted in Listing 5. Listing 10-5. LM35 Farenheit Temperature with Dual LED Flash Rates Sketch /* Converting LM35 Sensor data to Volts Sketch will take sensor data and convert it to volts. Volts value will be displayed on serial monitor Remixed sketch of ladyada's TM36 sensor tutorial http://www.ladyada.net/learn/sensors/tmp36.html Don Wilcher 03/16/12 */ //LM35 Pin Variables const int sensorPin = 0;// The analog pin the LM35's Vout is connected to. const int ledPin = 9; //the number of the LED Pin /* Initialize serial connection with the computer*/ void setup() { Serial.begin(9600); // Begin serial connection with the computer pinMode(ledPin, OUTPUT); pinMode(sensorPin, INPUT); } void loop() { int reading = analogRead(sensorPin); // read data from LM35 using Arduino (A0) pin float voltage = reading *5.0; // Convert sensor data to voltage voltage /= 1024.0; Serial.print(voltage); Serial.println("volts"); // Print voltage on serial monitor float temperatureC=(0.5-voltage)*100; float temperatureF=(temperatureC*9.0/5.0)+32; //Convert voltage to temperature Serial.print(temperatureF); Serial.println("degrees F");// Print Temperature in C if(temperatureF >78){ digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); } else{ digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(100); } delay(1000);// print data every second } An LCD Electronic Thermometer By utilizing the foundational circuit diagram illustrated in Figure 10-12 as the central measurement mechanism, it becomes possible to construct an intriguing electronic thermometer featuring an LCD display. The essential components required for this undertaking encompass the LCD screen and a pair of resistors. The configuration of the LCD electronic thermometer's functional structure is depicted in Figure 19. During the circuit's design phase, the inclusion of the LCD was instrumental in transforming the electronic device into a portable instrument suitable for temperature measurement readings in various field settings. If the intention is to exhibit temperature data on a computer interface, a USB connection can be established between the Arduino and a desktop PC or laptop. In the process of linking the LCD to the Arduino, the power (Vdd) and ground (Vss) terminals are interconnected while the 10 K potentiometer is meticulously adjusted to eliminate pixel artifacts from the display. The LED backlight of the LCD is connected through a 100-ohm resistor. This preliminary phase is crucial to ensuring the proper functionality of the LCD prior to the final integration of its components with the Arduino. The complete schematic diagram of the LCD electronic thermometer circuit is visually outlined in Figure 12. To simplify the wiring process with the Arduino, position the LCD in such a way that its pin 1 aligns with the corresponding row on the solderless breadboard. The ultimate prototype of the LCD electronic thermometer is displayed in Figure 21. Once you've successfully loaded the sketch for the LCD electronic thermometer onto the Arduino, a temperature reading will promptly appear on the screen. Should you wish to elevate the temperature reading, a simple method involves positioning the sensor amidst your fingers. The temperature information refreshes at a 10-millisecond (ms) interval, a timing parameter that can be readily adjusted within the sketch using the delay(10) command. The comprehensive code for the LCD electronic thermometer is provided in Listing 6. Listing 6. Sensor Data to Temperature Sketch /* Converting LM35 Sensor data to Temperature Sketch will take sensor data and convert it to volts then to temperature. Volts and Temperature values will be displayed on serial monitor and LCD. Remixed sketch of ladyada's TM36 sensor tutorial http://www.ladyada.net/learn/sensors/tmp36.html Don Wilcher 03/17/12 */ //LM35 Pin Variables int sensorPin = 0;// The analog pin the LM35's Vout is connected to. #include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); /* Initialize serial connection with the computer*/ void setup() { Serial.begin(9600); // Begin serial connection with the computer lcd.begin(16,2); analogReference(INTERNAL); pinMode(sensorPin, INPUT); } void loop() { int reading = analogRead(sensorPin); // read data from LM35 using Arduino (A0) pin float voltage = reading *5.0; // Convert sensor data to voltage voltage /=1024.0; Serial.print(voltage); Serial.println("volts"); // Print voltage on serial monitor float temperatureC=((100*1.1*voltage)/1024)*100; float temperatureF=(temperatureC*(9.0/5.0))+32; //Convert voltage to temperature Serial.print(temperatureF); Serial.println(" degrees F");// Print Temperature in C // display Temperature on LCD lcd.setCursor(0,0); lcd.print("Temperature="); lcd.setCursor(0,1); lcd.print(temperatureF); lcd.println(" degrees F "); delay(10);// print data every 10milliseconds } A Temperature Controller Transforming the LCD electronic thermometer into a temperature controller necessitates the utilization of a handful of electronic components. A temperature controller functions as a mechanism to activate an external element, such as a light bulb or a motor, when the electrical signal from the sensor surpasses a designated threshold. In this context, the Arduino takes action by engaging a transistor-driven DC motor circuit when the temperature measurement surpasses the predefined value established within the sketch. The sketch incorporates an established trigger value through if-else statements. By utilizing the "greater-than" sign, you establish a conditional arrangement within the sketch to monitor the temperature measurement of the sensor. When the temperature falls below the set threshold, the Arduino halts the motor; conversely, it activates the motor when the temperature surpasses the threshold. The schematic diagram of the temperature controller circuit is visually outlined in Figure 22. The schematic diagram of the temperature controller circuit can be observed in Figure 22. To avert any electrical interference with the LCD, I opted for an independent DC supply for the transistor motor driver circuit. By configuring the transistor motor driver circuit to operate at 1.5VDC, potential electrical disturbances to the LCD are minimized. The controller's prototype configuration is visually represented in Figure 23. Prior to energizing the transistor motor circuit and transferring the sketch to the Arduino, it's essential to verify the wiring for any potential errors. While grasping the temperature sensor amidst your fingers, you should observe the ascending value displayed on the LCD. Once the temperature hits 58 °F, the motor activates until the reading descends beneath this point. The temperature controller sketch has been provided in Listing 7. Listing 7. Temperature Controller Sketch /* Converting LM35 Sensor data to Temperature Sketch will take sensor data and convert it to volts then to temperature. Volts and Temperature values will be displayed on serial monitor and LCD. It turns ON a small dc motor when sensor temperature is greater than the threshold value. Remixed sketch of ladyada's TM36 sensor tutorial http://www.ladyada.net/learn/sensors/tmp36.html Don Wilcher 03/17/12 */ //LM35 Pin Variables int sensorPin = 0;// The analog pin the LM35's Vout is connected to. const int motorPin = 9; // the number of the motor pin #include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); /* Initialize serial connection with the computer*/ void setup() { Serial.begin(9600); // Begin serial connection with the computer lcd.begin(16,2); analogReference(INTERNAL); /* for Arduino Mega please use analogReference(INTERNAL1v1); */ pinMode(motorPin, OUTPUT); } void loop() { int reading = analogRead(sensorPin); // read data from LM35 using Arduino (A0) pin float voltage = reading *5.0; // Convert sensor data to voltage voltage /=1024.0; Serial.print(voltage); Serial.println("volts"); // Print voltage on serial monitor float temperatureC=((100*1.1*voltage)/1024)*100; float temperatureF=(temperatureC*(9.0/5.0))+32; //Convert voltage to temperature Serial.print(temperatureF); Serial.println(" degrees F");// Print Temperature in C // display Temperature on LCD lcd.setCursor(0,0); lcd.print("Temperature="); lcd.setCursor(0,1); lcd.print(temperatureF); lcd.println(" degrees F "); //DC Motor control if(temperatureF >58){ digitalWrite(motorPin, HIGH); } else{ digitalWrite(motorPin, LOW); } delay(10);// print data every 10milliseconds } Further Discovery Method The task presented in this chapter involves crafting a system block diagram for the temperature measurement controller. Supplementary endeavors encompass: • Integrate an LED that responds to temperature thresholds, illuminating in tandem with the small DC motor's activation. • Substitute both the motor and LED with a piezo-buzzer to introduce audible temperature notifications. • Swap the conventional 16x2 display for a 20x4 LCD screen. • Exchange the DC motor for a vibration unit to observe its electrical behavior. • Implement a speed control mechanism that adjusts the small DC motor's velocity as the temperature measurement escalates. As usual, document the ultimate designs in your lab notebook, alongside the accompanying sketches. Enjoy the process!   ### THIS ARDUINO DEBUGGER USES THE CH552 One of the things missing from the “classic” Arduino experience is debugging. That’s a shame, too, because the chips used have that capability. However, the latest IDE has the ability to work with external debuggers and if you want to get started with a classic ATMega Arduino, [deqing] shows you how to get started with a cheap CH552 8-bit USB microcontroller board as the debugging dongle. The CH552 board in question is a good choice, primarily because it is dirt cheap. There are design files on GitHub (and the firmware), but you could probably pull the same trick with any of the available CH552 breakout boards. There was a time when having a god-eye view of your embedded system required an expensive in-circuit emulation system. These were expensive, difficult to deploy, and rare. Then, CPUs started adding debugging hardware right on the chip. A few spare pins on the CPU and some sort of adapter would give you most of what you wanted from an emulation system. Although these adapters are often proprietary, sometimes they aren’t, or they have been reverse-engineered. If you know the protocol, it is easy enough to get a processor to speak it for you. That’s why you often see, for example, Raspberry Pi Picos debugging other Picos. There’s nothing you can’t do a million other ways here, but it is an excellent step-by-step tutorial for getting started without breaking the bank. Source: THIS ARDUINO DEBUGGER USES THE CH552 ### PI PICO BECOMES SRAM FOR 1981 EDUCATIONAL COMPUTER Ever since the Raspberry Pi Pico was introduced in early 2021 we’ve seen the tiny Pi being used for an astonishing variety of applications. It has powered countless clocks, gadgets, games, and accessories for all kinds of computers old and new. [Michael Wessel] has recently added an interesting new application in the “old computer” category, by turning a Pico into a 2114 SRAM emulator for his Busch 2090, an educational computer system from 1981. The pinout of the classic 2114 SRAM chip is quite simple: ten address lines, four data lines, Write Enable and Chip Select. Since the 3.3 V Pico is more or less 5V tolerant, you could directly connect these signals to its GPIO ports, but [Michael] considered it more reliable to use level shifters between the two voltage domains. He experimented with a few standard level shifter circuits, but quickly realized he had to take the 33 kΩ pulldown resistors on the Busch 2090’s address bus into account. By just adding a couple of resistors to the Pico’s ports he could make completely passive level shifters, which worked just fine since the system’s clock frequency is only 500 kHz. [Michael] demonstrates his RAM replacement in the video below, with a neat set of blinkenlights showing the data being shuttled around in real time. He has plans to make a proper PCB for his project, as well as to enable all kinds of neat features by modifying the system’s RAM in real time. This is of course not limited to the Busch 2090: the 2114 chip was widely used in the 1980s, so the PicoRAM can probably be used in many other systems of the era. Code for the Pi is available on GitHub if you’re interested in trying this for yourself. If you’d like to find out what programming a Busch 2090 feels like, you can emulate one using an Arduino. Source: PI PICO BECOMES SRAM FOR 1981 EDUCATIONAL COMPUTER ### Temperature Control of a Lightbulb Required Equipment lightbulb (incandescent, LED, CFL, etc.) AC solid-state relay (hockey-puck type, etc.) temperature sensor (TMP36, etc.) Arduino board (e.g. Uno, Mega 2560, etc.) In this example, the temperature of the lightbulb is gauged using a TMP36 sensor. This sensor is cost-effective, reasonably accurate, and encompasses a sufficient range. The Arduino board serves the dual purpose of powering the sensor and interpreting the sensor's output through an Analog Input. Additionally, the Arduino board generates the Digital Output that regulates the activation and deactivation of the solid-state relay. This digital output establishes intermittent connections and disconnections between the light bulb and the AC power source (from the wall) via the relay, facilitating the switching on and off of the light bulb. The control logic employed to determine the relay's activation and deactivation instances is programmed in Simulink, which is also utilized to visually represent both the lightbulb's temperature and the control signal. Objective The intention behind engaging in this exercise involving the lightbulb is to exemplify the control of switched systems. By turning the lightbulb on, its temperature increases, and conversely, turning it off leads to a decrease in temperature (within environmental boundaries). The lightbulb operates as a binary system, confined to two states: on or off. It either remains connected to the AC source or is disconnected; its luminosity cannot be adjusted. In this experiment, we observe the resultant "chattering" behavior of the lightbulb and explore alternative approaches aimed at mitigating the frequency of this chattering phenomenon or refining its fluctuations. This is accomplished through the application of dead bands, low-pass filters, and Pulse-Width Modulation. Furthermore, this activity facilitates exposure to Proportional (P) control, Proportional-Integral (PI) control, and first-order systems. System identification experiment To establish our temperature control system, a formal plant model (the lightbulb) might not be strictly necessary. Instead, we can adopt a logical approach that activates the lightbulb when the measured temperature dips below the desired level, and deactivates it when the temperature surpasses the desired threshold. Nevertheless, our intention is to elucidate the resultant behavior of our control system and possibly refine the control algorithm with a higher degree of intelligence. Hence, we aim to formulate a model for the lightbulb's thermal dynamics grounded in its observed response. This form of model is occasionally referred to as a black box model or a data-driven model. Once we develop such a model, our endeavor extends to explaining our observations through an understanding of the fundamental physics at play. Hardware setup Within this experiment, our chosen system is a conventional incandescent lightbulb, and our ultimate objective is to regulate the temperature of this lightbulb. To align with the capabilities of the selected temperature sensor, we opted for a 25 W bulb, ensuring that the maximum temperature remains within the confines of the sensor's range. Furthermore, you have the flexibility to utilize different bulb variants (LED, CFL, etc.) as well. In our temperature measurement setup, we will utilize the TMP36 sensor, although various other options are also available. This sensor gauges temperature in Celsius and is remarkably cost-effective, priced at just a few dollars. It offers a suitable range, reasonable precision, and the added advantage of not requiring calibration. Notably, the TMP36 sensor is frequently included in numerous Arduino starter kits available in the market. The datasheet for this sensor can be accessed here. To affix the temperature sensor to the lightbulb's surface, you can opt for thermally conductive epoxy or adhesive metal tape. Connecting the TMP36 to the Arduino Board involves the following arrangement. If the sensor is positioned such that the pins point downward and the flat side faces you, the leftmost pin corresponds to power (within the range of 2.7 V to 5.5 V), the middle pin functions as the signal interface, and the rightmost pin is for ground. Power and ground for the TMP36 are supplied by the Arduino board, while the signal—presenting a voltage that maintains a linear proportionality with temperature—is read using one of the board's Analog Inputs. To initiate the lightbulb's activation and deactivation, a digital output signal is employed from the Arduino board, facilitated by a solid-state relay. Essentially, this relay functions as an electrical switch capable of connecting or disconnecting a device (which could potentially have high power requirements) to an AC source using a low-power DC signal. In our context, the AC source originates from a standard wall outlet, while the DC signal is supplied by a Digital Output signal from the Arduino board. Consequently, our solid-state relay must be equipped to manage 120-240 V on the AC side (in North America, 120 V is required), with the DC side controllable by a 5 V signal. Given that our load, which is the lightbulb, is resistive in nature (not inductive) and doesn't demand substantial current, the choice of solid-state relay need not be overly meticulous. In our case, we are opting for a straightforward "hockey-puck" style relay. To govern the lightbulb's operation, the relay needs to be inserted into the circuit (the loop) that connects the lightbulb to the wall outlet. This necessitates modifying the cord for the lightbulb and integrating the relay into the circuit. While undertaking this task, ensure that the lightbulb is not plugged in. The insertion of the relay should occur on the neutral wire of the lightbulb's plug. The neutral wire can be identified by a white stripe or ribbing. Placing the relay on the live wire will result in the relay's terminals being connected to the power supply even when the relay is in the off state. Furthermore, remember to adequately cover the exposed relay terminals and refrain from touching the terminals when the lightbulb is plugged in. Software setup Within this experiment, we will utilize Simulink to instruct the relay, retrieve data from the temperature sensor, and generate real-time data visualization. Specifically, we will utilize the IO package offered by Math Works for this purpose. If you require guidance on utilizing the IO package, you can refer to the provided link. Additionally, we will illustrate how to integrate the control logic directly into the Arduino board. The Simulink model that we will utilize is provided below and can be downloaded from this link. If necessary, you may need to modify the COM port in the IO Setup block to correspond with the location where your Arduino board is connected. Within this model, the temperature data is acquired through an Analog Read on channel A0. Subsequently, this data is converted from counts to degrees Celsius. The raw temperature data is presented in bits, as the Arduino Board incorporates a 10-bit analog-to-digital converter. This signifies that by default, an Analog Input channel reads a voltage ranging from 0 to 5 V, dividing this interval into 2^{10} = 1024 increments. Hence, an output of 0 corresponds to 0 V, while an output of 1023 corresponds to 5 V. Given that the TMP36's maximum output voltage is 1.75 V, utilizing the on-board 3.3 V source for AREF instead of the default 5 V provides improved resolution. The data in bits is then transformed to millivolts (assuming a default 5 V reference), followed by conversion to temperature in degrees Celsius. This final conversion is grounded in the information found in the TMP36's datasheet. The model then visually exhibits the stored data through a scope and a display, and this data is also recorded in the MATLAB workspace for subsequent analysis. Within this model, the relay's operation is directed to be open (1) or closed (0), which aligns with the lightbulb's state of being on or off, through a Digital Write on channel 9. To initiate, we will employ a step input, wherein the lightbulb is initially off and is subsequently switched on. The components contributing to this functionality include the Arduino Analog Read block, Digital Write block, IO Setup block, and Real-Time Pacer block, all integrated within the IO package. The remaining blocks originate from standard Simulink libraries, specifically, they are accessible in the Math, Sinks, and Sources libraries. By double-clicking on the Analog Read block, we have the option to modify the "Sample time." The optimal sampling rate for the system while ensuring real-time communication and Simulink plotting is around 0.01 seconds. Sampling at a faster rate could lead to the Simulink model operating slower than real-time, rendering it unable to meet the specified sampling rate. Given the relatively gradual thermal dynamics of the lightbulb, a sample time of 0.1 proves to be more than satisfactory. This identical value for the sample time will be set within the Digital Write block as well. After constructing the Simulink model, it can be executed to gather a dataset similar to the one illustrated below. In the beginning, the lightbulb starts at the room temperature when the model is initiated. At t = 50 seconds, the lightbulb is switched on using the step input, commencing its heating process. To ensure accurate estimation of the initial lightbulb temperature (ambient temperature), we allow 50 seconds before activating the lightbulb. It's essential to execute the model for a considerable duration to allow the lightbulb's temperature to stabilize at a steady state. Upon analyzing the provided response data, it becomes apparent that the thermal behavior of the lightbulb exhibits characteristics resembling a first-order system. Leveraging this observation, we will utilize this property to formulate a model for the lightbulb's behavior. Modeling In this experiment, our approach involves developing a model for the lightbulb's thermal dynamics using only the step response data we have collected. This means that we will create a model based solely on the recorded data without delving into the fundamental physics underlying the system. By analyzing the collected data, it's evident that the thermal behavior of the lightbulb follows an approximate first-order pattern. Thus, we aim to create a fitting transfer function for the data, as depicted below, where $K$ represents the system's DC gain and $\tau$ symbolizes the system's time constant. In the context of our specific lightbulb system, we will define the input as the percentage of time the lightbulb is switched on, denoted as the duty cycle D(s). Correspondingly, the output we will focus on is the difference in temperature  ΔT(s) between the lightbulb's temperature T and the ambient temperature To. We have opted for  ΔT as the output choice, rather than solely T, to achieve a linear model. To adhere to the principle of a linear system, the output should exhibit a linear relationship with the input. This implies that an input of 0 should result in an output of 0. Upon analyzing the provided data, a few challenges arise when attempting to estimate the parameters K and tau due to signal noise and data drift. Noise's influence can be mitigated through techniques such as low-pass filtering or smoothing the data. In this instance, we'll take a more informal approach and visually approximate an averaged curve from the data. The data drift, which could be attributed to factors like fluctuations in ambient temperature, convection currents, voltage amplitude variations, sensor inaccuracies, etc., can similarly be accounted for by approximating an average across the variations. Upon analyzing the provided step response data, it can be deduced that the initial ambient temperature (initial lightbulb temperature) is approximately 18.5 degrees Celsius, while the lightbulb's steady-state temperature settles around 102 degrees Celsius. As the input corresponds to a full 1 (100 percent duty cycle) and the output is represented by  ΔT, this implies that the system's DC gain K is roughly 83.5 degrees Celsius (102 - 18.5). Utilizing the definition of the time constant as the period required for the system response to reach 63% of its total alteration, the estimated time constant for this system stands at approximately 66 seconds. Referencing the annotated version of the step response plot below, it's evident that 0.63 multiplied by 83.5 degrees plus 18.5 degrees equates to around 71.1 degrees, which corresponds to approximately 116 seconds. Given that the step input occurred at 50 seconds, this infers a time constant of approximately 66 seconds (116 - 50). Considering the parameter identification described above, the resultant estimated model for the thermal dynamics of the lightbulb is as follows. To assess the degree of fit between our derived model and the collected data, we will execute the subsequent MATLAB commands. Here, the output of our previous Simulink model, labeled as "temp," is stored as a timeseries. s = tf('s'); To = 18.5; % ambient/initial temperature K = 83.5; % DC gain tau = 66; % time constant P = K/(tau*s+1); % model transfer function [y,t] = step(P,350); % model step response plot(t+50,y+To); hold plot(temp,'r:') xlabel('time (sec)') ylabel('temperature (degrees C)') title('Lightbulb Temperature Step Response') legend('model','experiment','Location','SouthEast') Upon analyzing the information presented above, it becomes evident that our choice of a first-order model appears to be well-founded. This alignment with our assumption is not unexpected, especially when we delve into the fundamental physics of the lightbulb. By delving into the heat equilibrium of the lightbulb, we can outline the following: Taking into account that the speed at which energy is stored relies on the light bulb's "thermal capacitance," and the overall pace of heat transfer is determined by the light bulb's thermal conductivity (akin to the reciprocal of "thermal resistance") along with the disparity between the bulb's temperature and the ambient temperature, while considering the heat generation as the system's input (likely resembling an almost perfect step due to the rapid electrical dynamics), we can establish the following fundamental equation governing the behavior of the system. Rewriting the above in terms of , we can make use of the fact that  is approximately constant, that is , which leads to the following. Examining the provided content reveals that the thermal behavior of the lightbulb can be characterized by a first-order differential equation, the behavior of which mirrors that of an RC circuit, with the time constant ????=RC ON/OFF Control Having gained an understanding of the plant's behavior and established a model, we can now explore control strategies. Our initial approach to control involves an ON/OFF controller aimed at regulating the lightbulb's temperature. This controller activates the lightbulb when the measured temperature is below the desired temperature (error > 0), and deactivates it when the measured temperature exceeds the desired temperature (error < 0). To implement this logic, we've adjusted the Simulink model by employing a Switch block with a reference temperature of 75 degrees Celsius. The modified model is available for download here. The control strategy depicted above operates without utilizing any insight from the plant model and relies on feedback. Visualizing the feedback loop can be challenging due to the plant's presence in the real world. The illustration below aids in clarifying how the complete feedback system, comprising the Simulink model and the physical realm, aligns. Let's pause for a moment to consider how you might establish an open-loop controller for this system (without directly measuring the lightbulb's temperature) using the model we derived earlier. What potential benefits and drawbacks would be associated with such an approach? The temperature response of our lightbulb under the closed-loop ON/OFF controller is displayed below. The behavior is quite intuitive. Initially, the lightbulb is too cold, prompting the controller to activate the bulb. As a result, the bulb starts to heat up. After around 75 seconds, the lightbulb's temperature nearly reaches the target of 75 degrees Celsius, causing the controller to deactivate the bulb. As the bulb releases heat to its surroundings, its temperature declines until it falls below 75 degrees, triggering the bulb to be turned on again. Consequently, this ON/OFF control strategy leads to the lightbulb flickering, undergoing rapid on-off cycles, and causing the temperature to oscillate around the desired value. The presence of noise in the measured temperature signal can further amplify this flickering effect. The achieved control outcome is remarkably effective, as it effectively maintains the lightbulb's temperature in proximity to the desired setpoint without requiring extensive expertise for its design and implementation. Nonetheless, a potential drawback of this strategy is its potential to curtail the lightbulb's lifespan while not being particularly energy-efficient. Similar considerations are pertinent to various applications involving ON/OFF control. Moving forward, let's explore a couple of strategies to mitigate the observed temperature oscillations in the lightbulb. With Low-pass Filter One approach for reducing the chatter is to add a low-pass filter on the temperature measurement. In the model shown below, we employ a simple first-order filter with a time constant equal to 2 seconds. The filter acts on the ΔT signal to account for the fact that a transfer function assumes zero initial conditions The resultant controlled behavior is depicted below, illustrating the impact of the low-pass filter on smoothing the recorded temperature signal. An effective way to comprehend this is by envisaging the characteristics of a first-order step response, which essentially refines a swiftly changing signal (a step) by rounding off its edges. Notably, a greater time constant accentuates the rounding-off effect, consequently slowing down the filter's response. Alternatively, one can perceive the filter as executing a moving average of both current and preceding temperature measurements. This perspective can be derived from a discrete-time rendition of the filter's transfer function. With a lengthier time constant, the moving average accords more significance to past measurements in the computation. This filtering technique could have been applied during the creation of our black box plant model. However, an inherent limitation of real-time implementation with a low-pass filter is that it introduces a delay to the signal, which is evident in the illustration below. In addition to mitigating noise in the temperature measurement signal, the filter also decreased the frequency at which the lightbulb was cycled on and off, potentially enhancing the lightbulb's lifespan and efficiency. However, a trade-off exists, as the controlled temperature might deviate further from the desired temperature. The balance of these effects can be influenced by altering the filter's time constant. This influence stems from viewing the low-pass filter as a moving average. In the absence of a filter, the lightbulb promptly switches off when the temperature surpasses the desired level, and vice versa. With a moving average, the lightbulb doesn't promptly switch off upon reaching the threshold, as the average is still influenced by prior, lower measurements. It necessitates a series of recent measurements above the threshold to offset the impact of the older, sub-threshold measurements. With Dead band An alternative strategy for mitigating the frequent on-off cycles of the light bulb involves using a dead band. This concept is demonstrated in the model depicted below, utilizing a Relay block. The Relay block functions akin to a switch with hysteresis, meaning it employs distinct criteria for transitioning between "ON" and "OFF" states. In this instance, the dead band is configured at +2/-2 degrees. To clarify, when the measured temperature exceeds the desired level by 2 degrees (77 degrees in this scenario), the lightbulb switches off. Conversely, it switches on when the temperature dips 2 degrees below the desired level (73 degrees in this instance). The resultant regulated temperature is illustrated below, displaying a behavior akin to that achieved through filtering. The frequency at which the light bulb undergoes on-off cycles (and the resultant closeness to the desired temperature) can be influenced by adjusting the magnitude of the dead band. P and PI Control In our previous attempts at temperature control, we utilized ON/OFF control, where the lightbulb was either fully on when the error was positive or completely off when the error was negative. A more advanced approach to control would involve modulating the lightbulb's intensity proportionally to the extent of temperature error (and eventually, in proportion to the integral of the error as well). In simpler terms, if the lightbulb was significantly too cold (large error), it would be illuminated brightly; however, if the lightbulb was only slightly below the desired temperature (small error), it would be illuminated dimly. This strategy, where the control effort corresponds to the error's proportion, is known as Proportional Control or P Control. In mathematical terms, it is expressed as control = KP. error. While this control approach might not yield improved performance compared to the ON/OFF methods used so far, considering the system's relatively slow and comprehensible dynamics, this exercise will enhance our understanding of P and PI control and how they apply in various scenarios. P Control Within our system, we manage the lightbulb's temperature by cyclically linking and disconnecting it from the AC power source. In this manner, we lack the capability to modulate the lightbulb's brightness—it's either connected to the power or it's not. Nevertheless, we can approximate a continuous P control strategy through the utilization of Pulse-Width Modulation (PWM). In the realm of Pulse-Width Modulation, the input signal takes the form of a pulse train, specifically a square wave, maintaining a constant period (frequency) as it toggles between 1 and 0 (fully on and fully off, respectively, as we've demonstrated). The degree of "intensity" in the control is influenced by altering the proportion of time during which the input remains in the "on" state. This proportion is referred to as the Duty Cycle. The depiction of a PWM signal is provided below. When considering a first-order system, as we've encountered here, it's conceivable to envision the potential behavior of the lightbulb's temperature if the PWM signal's period were exceedingly prolonged. This scenario would yield a first-order step response ascending toward a stable value (when active), succeeded by the temperature subsiding to the ambient level (when inactive). However, in practical terms, the PWM signal's period is intentionally kept short (frequency elevated) in comparison to the dynamics of the controlled system. This design ensures minimal time for the output to either rise or decline significantly. Consequently, by varying the duty cycle of a PWM input, an effect of an almost seamless transition in the output can be achieved. The provided model below showcases the application of a P Control strategy to our lightbulb system. The implementation of the PWM signal is carried out through the displayed Analog Write block. This block represents the duty cycle as an 8-bit value (2^8 = 256). Hence, the input to the Analog Write block must fall within the range of 0 to 255. In this range, 0 signifies a 0% duty cycle, while 255 corresponds to a 100% duty cycle. The saturation block is incorporated to ensure compliance with these limits. The resulting PWM signal is produced on Digital Pin 9, the same pin we have been utilizing. It's important to note that digital pins capable of generating a PWM output are identified on the Arduino board by the presence of the ~ symbol. We will initiate by selecting a proportional gain of Kp = 1 without any specific rationale. The resultant temperature profile using this gain is depicted below. Notably, the resulting profile exhibits a notable degree of steady-state error in comparison to the provided reference temperature of 75 degrees Celsius. This outcome is in line with our expectations, given the earlier derived plant model, P(s) = 83.5/(66s + 1), which indicates that the resulting control system is of type 0. To gain deeper insights into the observed behavior and the impact of the proportional gain in a broader sense, let's conduct some analysis. An idealized depiction of our control system is illustrated below. It's worth noting that the feedback loop is expressed in terms of ΔT, as opposed to T, in order to maintain linearity in our plant with zero initial conditions. For this particular system with C(s) = Kp and the previously defined P(s), the closed-loop transfer function can be expressed as follows. Upon examining the provided information, it's evident that the closed-loop system possesses a DC gain of G{cl}(0) = 83.5Kp/(1 + 83.5Kp). Even when setting Kp = 1, the DC gain remains very close to 1, implying that the steady-state output of the control system should be closer to the 75-degree reference than it currently is. While it's reasonable to consider the influence of environmental conditions or changes in the bulb itself, these factors alone can't fully account for the magnitude of the observed error. The discrepancy between prediction and observation arises from the fact that our model was developed for a step input of 1, representing a 100% duty cycle. Upon analyzing the control input generated for Kp = 1, it becomes apparent that the lightbulb operates with a duty cycle significantly below 100%. Upon reviewing the derived expression for the DC gain, it becomes evident that elevating Kp will progressively bring the steady-state gain closer to 1. An equally noteworthy observation is that an augmented Kp value will result in an increased commanded duty cycle, thereby approaching the conditions under which our plant model, P(s), was originally developed. A more detailed examination of the closed-loop transfer function reveals that it maintains a first-order nature with a pole located at (1+83.5K_p)/66. Consequently, as Kp is increased, the system still exhibits a first-order type response, but with a quicker convergence to steady-state. Elevating Kp yields the following temperature profile and necessitates the subsequent control effort. Another option, instead of raising Kp, is to adjust the reference T{ref} in a way that aligns the steady-state temperature with the desired value. Nevertheless, this approach necessitates a dependable and consistent model to accurately determine the scaling factor. Another avenue to explore is introducing integral action into the controller. This will be our next endeavor. PI Control Incorporating a component in our controller that is proportional to the integral of the error results in what is known as a Proportional-Integral Controller or a PI Controller for brevity. In mathematical terms, this controller is represented as C(s) = Kp + Ki/s. The inclusion of such a controller renders the feedback control system as type 1, implying that it should nullify the steady-state error to a constant reference (essentially a step response). Analyzing the revised closed-loop transfer function displayed below allows us to delve deeper into this concept. For this revised closed-loop transfer function, the DC gain equates to 1. Thus, we can confirm that zero steady-state error will be achieved for a constant reference. As the value of Ki increases, the rate at which the steady-state error diminishes will accelerate. This phenomenon aligns logically when reflecting on the system's behavior observed with Kp = 1. Under that P controller, the lightbulb's temperature settled at a steady-state value below the desired level. Fundamentally, the control effort (duty cycle) reached during steady-state provided energy to the bulb at a rate that precisely balanced the rate at which heat was being dissipated to the surroundings. The control input remained unchanged due to the temperature error plateauing and the control effort maintaining proportionality to the error. However, with integral control, the control effort will persistently increase until it eradicates the steady-state error. Integration effectively accumulates the area beneath the error-time graph, resulting in the integral term of the controller augmenting the control effort as it accumulates this error (through area summation). Incorporating integral control also introduces an additional outcome: our closed-loop system transforms into a second-order response, which might lead to oscillations or overshoot. This consequence is somewhat intuitive. To better understand the implications, we will implement a PI controller with Kp = 1 and Ki = 0.02 and evaluate its response. While running this model, pay close attention to the control effort values stemming from both the proportional and integral components of the controller, as displayed. The ensuing temperature profile and control effort for this model are provided below. Initially, the error is substantial and gradually diminishes as the lightbulb's temperature rises. Consequently, the proportional control effort commences as substantial and subsequently dwindles as the error reduces. However, the integral aspect of the control effort keeps escalating, even as the error magnitude decreases, due to its cumulative nature—this integral continually sums the area underneath the error "curve." Upon the lightbulb's temperature aligning with the desired level, the error reaches zero, leading the proportional control effort to also hit zero. Notably, the integral control effort remains considerable, having accumulated all positive error since the inception of the control system. This occurrence is termed "integrator wind-up." Consequently, the lightbulb persists in heating up for a period, overshooting its intended temperature due to the influence of the integrator. At this juncture, the error turns negative, and the proportional control effort becomes negative as well. Although the integral control effort remains positive, it gradually diminishes. This process of unwinding the integrator unfolds over time. Furthermore, the temperature may subsequently fall below the desired level as it decreases. This illustration exemplifies why our closed-loop system has evolved into a second-order system, indicating it can now possess complex poles and potentially oscillate. This illustration also demonstrates a prevalent trade-off when incorporating integral control. While its inclusion can assist in reducing steady-state error, it might render the response more oscillatory and sluggish in settling. Tweaking the control gain Ki will influence the balance between these two outcomes. Revisiting our closed-loop transfer function for this feedback system, if we align the denominator with the structure of a standard second-order system, S^2 + 2ζΩns + Ωn^2, we can discern that 83.5Ki = Ωn^2 and 1 + 83.5Kp = 2ζΩn. Consequently, for a fixed Kp, augmenting Ki results in a higher Ωn and a diminished ζ, while sigma = ζΩn remains constant. This showcases how elevating Ki can accelerate the reduction of error (by lowering the rise time due to the larger Ωn), yet this comes at the expense of heightened oscillation (leading to increased overshoot due to the smaller ζ). ### NEW MINI-ITX SINGLE BOARD COMPUTERS WITH 2 SATA 3.0 STORAGE WIN Enterprises Announces Mini-ITX Form Factor with 8th Gen Intel® Core™ Processor for IoT and Factory Process Monitoring WIN Enterprises, Inc., a leading designer and manufacturer of embedded x86 motherboards and appliances for electronic OEMs, announces the MB-50040. The MB-50040 is a high performance Mini-ITX single board computer (SBC) for graphically-oriented factory process monitoring and IoT applications that require high performance. Features 8th Generation Intel® Core™ Processor Mini-ITXDDR4 2400MHz SODIMM up to 64GBSupports 3 independent displays: LVDS + DP/HDMI + DP/HDMI (Auto-detecting)DP++ resolution supports up to 4096×2304 @ 60HzMultiple expansion: 1 PCIe x4, 1 M.2 M Key (SATA/PCIe), 1 M.2 E key (PCIe/USB)Storage: 2 SATA 3.0Rich I/O: 2 Intel GbE, 4 USB 3.1, 4 USB 2.015-Year CPU Life Cycle Support Until Q1′ 31 Three independent displays are supported for factory-line visualization. One display has DP++ resolution up to 4096 x 2160 @ 60Hz. To meet the requirements of a complete IoT architecture, the unit supports 2 SATA 3.0 for plenty of storage and communication to the Cloud. The 8th Generation processor provides a wide variety of performance-based on 2-, 4- or 8-core processing capabilities.  Read more: NEW MINI-ITX SINGLE BOARD COMPUTERS WITH 2 SATA 3.0 STORAGE ### THE WEBSTICK IS A SMALL, CHEAP NAS The ESP8266 was one of the first chips that provided wireless functionality at a cost low enough to be widely popular for small microcontroller projects. This project uses one to provide rapid, small, and inexpensive network-attached storage (NAS) capabilities wherever you happen to go. With an ESP12F board at the heart to provide network connectivity, the small device also hosts a micro SD card slot and a USB-A port to provide power and programming capabilities for the device. It’s Arduino-compatible, and creator [tobychui] has provided the firmware source code necessary to bring it up on your network and start serving up files. Originally intended for people to host web services without experience setting up all of the tools needed for it, there’s services for storing and streaming music and video over the network as well. While it includes a lot more functionality than is typically included on a NAS, [tobychui] notes that with a library, something like WebDAV could be added to provide more traditional NAS capabilities. As it stands, though, having networked storage with web hosting capabilities on a PCB with a total cost of around $5 is not something to shy away from. If you’re looking for something a little more powerful for your home network, take a look at this ARM-based NAS instead. Source: THE WEBSTICK IS A SMALL, CHEAP NAS ### WILL RADIOSHACK RETURN? We suspect that if you want to write a blockbuster movie or novel, the wrong approach is to go to a studio or publisher and say, “I have this totally new idea that is like nothing you’ve ever seen before…” Even Star Trek was pitched to the network as “Wagon Train to the stars.” People with big money tend to want to bet on things that have succeeded before, which is why so many movies are either remakes or Star Trek XXII: The Search for 4 PM Dinner Specials. Maybe that’s what the El Salvador-based Unicomer Group had in mind when they bought one of our favorite brands, RadioShack. They are reportedly planning a major comeback for the beleaguered brand both online and in the physical world. In all fairness, the Shack may be better in our memories than in our realities. It was handy to stop off and pick up a coax connector, even if it cost three times the going rate for one. There was a time when RadioShack offered reasonable parts for projects, and it seems like near the end, they tried to hit that target again, but for many years, you could not find the typical parts for a modern project there anyway. However, Unicomer isn’t just a random group of investors.   Apparently, Unicomer has been operating in Central America as a RadioShack franchisee since 1998. In 2015, they bought the RadioShack brand for Central America, the Caribbean, and South America. But now, they’ve acquired the rights to the brand in over 70 countries, including the U.S., Canada, China, and Europe. We imagine their El Salvador website might hint at what is coming. We didn’t see anything in the way of components or P-Box kits, though. The Wall Street Journal reported that the new owners want to focus on cellphone products, headphones, batteries, and adapters. So, it isn’t clear if you’ll be stopping at the local mall to pick up an Arduino and a roll of solder or not. This isn’t the first Radio Shack revival attempt. We didn’t even cover the silly attempt to make it into a cryptocurrency company. But our original advice still stands: Give away content to sell components. People can buy parts anywhere at crazy low prices. What they can’t readily get is the support that helps them use those components effectively. The same holds true for computer and consumer products. It might seem silly to us, but ordinary people are probably perplexed by setting up a VPN for their home network or designing a theater room. Helping them is one avenue to creating sales in today’s price-driven market for electronics. After all, how many parts did the famous [Forrest Mims] books sell? Source: WILL RADIOSHACK RETURN? ### SMALL HIGH-CAPACITANCE THREE-TERMINAL MLCCS TARGET AUTOMOTIVE USES Murata Electronics today announced the availability of two new multilayer ceramic capacitors (MLCCs) for automotive safety-critical applications. The 0402-inch size (1.0×0.5mm) NFM15HC105D0G3D is the world’s smallest three-terminal low parasitic inductance (ESL) MLCC. The NFM18HC106D0G3L is also a three-terminal low-ESL MLCC but delivers the world’s highest capacitance of 10µF in a 0603 (1.6×0.8mm) package. The NFM15HC105D0G3D is approximately 60 percent smaller than conventional solutions with the same capacitance. The NFM18HC106D0G3L features a capacitance 10 times higher than that of similarly-sized products. These advancements are achieved by coupling Murata’s proprietary thin-layer and high-precision lamination technologies with fine-particle and homogenization technology for ceramic and electrode materials. Compared with traditional MLCCs, the three-terminal structure and resulting low ESL allows automotive engineers to reduce the number of capacitors needed to realize their design goals. The reduced capacitor count not only increases overall system reliability but reduces size and assembly complexity. The emergence of automotive technologies, such as advanced driver assistance systems (ADAS) and autonomous driving, has led to an increased number of microprocessors used in each vehicle. To ensure that these components work correctly, more and more MLCCs are being integrated. Read more: SMALL HIGH-CAPACITANCE THREE-TERMINAL MLCCS TARGET AUTOMOTIVE USES ### Arduino raises $54 million in Series B funding Arduino, the renowned open-source electronics platform, has successfully raised an additional $22 million in Series B funding. This latest round of funding brings the total to a substantial $54 million, marking a significant milestone in the company’s growth trajectory. The funding round was a collaborative effort, co-led by CDP Venture Capital and Anzu Partners. Notably, ARM, a global leader in semiconductor solutions, also participated in the funding round, further bolstering Arduino’s financial standing. CDP Venture Capital, recognized as Italy’s largest venture capital firm, made its investment through its Large Ventures initiative. This initiative is specifically designed to support the growth of Italian global category leaders, and Arduino’s inclusion in this initiative speaks volumes about its potential and the confidence investors have in its future. Arduino Uno R4 The newly acquired funding is earmarked for several strategic initiatives aimed at further developing Arduino’s platform for professional customers. The company’s primary objective is to make Internet of Things (IoT) and Artificial Intelligence (AI) more accessible to a broader audience. A significant portion of the funds will be allocated to strengthen the Research and Development (R&D) team based in Turin, Italy. The focus will be on growing enterprise application libraries and the Arduino Cloud for Business, both of which are integral to the company’s expansion plans. In addition to bolstering its R&D efforts, Arduino also plans to use the funds to expand its presence in the United States. The company recently opened an office in Austin, Texas, and strengthened its presence in Chicago, Illinois. This expansion is a strategic move to tap into the vast potential of the US market and bring Arduino’s innovative solutions closer to a wider customer base. The funds will also be utilized to accelerate go-to-market initiatives and enhance customer support in selected areas. This strategic allocation of resources is expected to help Arduino reach more customers, respond to their needs more effectively, and ultimately drive the company’s growth. Arduino’s success can be attributed to its unwavering commitment to innovation and making technology accessible. The company supports a large community of developers who play a crucial role in accelerating the deployment of new computing solutions for IoT applications. Arduino takes its role as an enabler of innovation seriously and aims to leverage all available resources to expand its platform and enhance its service. In conclusion, the successful raising of $54 million in Series B funding is a testament to Arduino’s potential and the confidence investors have in its vision. With plans to further develop its platform, strengthen its R&D team, expand its US presence, and accelerate go-to-market initiatives, Arduino is poised for significant growth. The company’s commitment to making IoT and AI more accessible is expected to continue driving its success and investor confidence in the future. Source: Arduino raises $54 million in Series B funding ### GWINSTEK C-1200 MULTI-CHANNEL LORA TESTER C-1200 is the first multi-channel LoRa-specific 1U rackmount tester for transmitter and receiver signal evaluation Saelig Company, Inc. has introduced the GWInstek C-1200 LoRa Tester – a one-box tester that incorporates a multitude of LoRa transmit and receive tests. The C-1200 provides transmitter tests that include spectrum analysis, time domain, FEI (Frequency Error Indicator), and TOA (Time-On-Air).  LoRa Receiver tests include sensitivity, BER (Bit Error Rate), and PER (Packet Error Rate). In addition to sub-GHz frequencies, the C-1200 also supports the 2.4GHz band and the FSK signal test. Users can easily edit the transmitted test payloads.  Receiving data formats supported include binary/HEX, and ASCII code, which allows data transmission results to be easily verified.  A useful transfer box C-1201 is also available for easy connection of the C-1200 to a LoRa module being tested and controlled via UART/SPI/I2C interfaces. The C-1200 can directly perform LoRa transmission signal measurement in the frequency domain as well as the time domain. In the frequency domain, LoRa’sCSS (Chirp Spread Spectrum) signal spectrum can be directly displayed; in the time domain, signal changes within a set time range can be displayed. LoRa transmission signals may encounter a frequency error caused by environmental factors, resulting in a decreased sensitivity or loss of a packet. FEI can be used to measure the DUT transmission frequency error , so that adjustments or corrections for this error can be made during production or quality control, ensuring communication quality in deployed LoRa networks. Read more: GWINSTEK C-1200 MULTI-CHANNEL LORA TESTER ### Tesla go-kart upgraded with self-driving autopilot In the realm of technological innovation, Austin Blake has made a significant stride by creating a self-driving go-kart, aptly named the Teskart. This unique invention leverages a machine learning technique known as behavioral cloning, a method that replicates human behavior to train a model. The Teskart is a testament to the potential of machine learning in the field of autonomous vehicles, albeit on a smaller scale. The Teskart is a marvel of engineering, equipped with three Logitech C920 webcams. These cameras serve as the eyes of the machine, providing visual input for the model to analyze and make steering decisions. The steering motor, salvaged from a power wheelchair, functions as a giant servo motor. This motor is controlled by an Arduino and a Cytron DC motor driver, demonstrating a creative repurposing of existing technology. Teskart Arduino technology Position feedback, a crucial aspect of any autonomous system, is achieved through a potentiometer that rotates with the motor shaft. The Arduino reads the potentiometer value and the pulse-width modulation (PWM) signal, ensuring the system is aware of its steering position at all times. A second Arduino is used to receive the predicted steering angle data from Python and convert it into a PWM signal for the first Arduino. This intricate system of feedback and control allows the Teskart to navigate its course. An onboard laptop serves multiple purposes in the Teskart. It is used for recording data, training the machine learning model, and evaluating its performance. The laptop runs the machine learning model that controls the steering and receives steering angle information from a pair of Arduino Nano boards. The laptop views the road through the webcams and uses the images to train the machine learning model, creating a closed-loop system of data collection, analysis, and action. Self-driving autopilot go-cart If you would like to learn more about creating self driving autopilot technology projects you can check out the highly recommended Udemy  course which was used by Blake to learn what he needed to fully convert his go-kart into a self driving version. Other articles you may find of interest on the subject of Arduino and projects using the platform : Arduino Nano ESP32 handheld console with round color display Arduino development boards complete guide Low-cost thermal camera built using Arduino Arduino UNO R4 Minima vs UNO R4 WiFi boards DIY Arduino Wind Speed Meter Anemometer Project Arduino Inputs and Outputs a beginners guide The steering mechanism of the Teskart is a fascinating piece of engineering. A large motor from a power chair rotates the steering column, and a potentiometer monitors that rotation. This setup works together like a servo motor, providing precise control over the steering of the go-kart. The machine learning model looks at a frame from the video many times per second and determines the best steering angle based on its training data. This real-time analysis and decision-making process is a key feature of the Teskart’s autonomous capabilities. However, like any system, the Teskart has its limitations. The most significant of these is its inability to navigate a new route. The system will always attempt to follow the same route as it was trained on, limiting its adaptability. This limitation is a common challenge in the field of machine learning and autonomous systems, where the ability to generalize from training data to new situations is a critical area of research. Austin Blake’s Teskart is a remarkable demonstration of the potential of machine learning in the field of autonomous vehicles. Despite its limitations, the Teskart represents a significant step forward in the application of behavioral cloning techniques. It serves as a testament to the power of innovation and the exciting possibilities that lie ahead in the realm of autonomous technology. Source: Tesla go-kart upgraded with self-driving autopilot ### FLUKE 365 – INDUSTRIAL CLAMP MULTIMETER WITH REMOVABLE JAWS AC and DC current measurement with a truly exceptional feature, removable jaws, for easy access to measured wires and comfortable monitoring of the display even in extremely tight spaces. There are many “standard” clamp multimeter types on the market, and only a few of them step a bit out of the line because of their construction. These certainly include Fluke 365. Miniature and, also, removable pliers connected to the instrument with a soft, flexible cable (90 cm) allow measurement even in areas where conventional pliers would be of no help. For example, in distribution boxes containing a big amount of cables, typical for industrial automation and solar segment. Key Features And Benefits: Measurement of AC and DC current 200 A (0.1A resolution)Measurement of DC and AC voltage 600 V (0.1V resolution)Resistance measurement (0.1Ohm resolution)Detachable jaws facilitate access to the wires as well as viewing the displayBuilt-in luminaire allows lighting and identification of wires in the equipmentCAT III 600 VCompact ergonomic designEMC ImmunityState-of-the-art signal processing allows use in environments with high electrical noiseLarge, easy-to-read backlit displayAutomatic range selectionFluke TL175 soft case and high-strength test leads included Read more: FLUKE 365 – INDUSTRIAL CLAMP MULTIMETER WITH REMOVABLE JAWS ### Keypad Input Processing: Basic Procedure and Applications Keypad Description The Significance of Keypads as Input Devices and their Role in Various Applications Keypads serve as essential input peripherals for data entry, similar to how keyboards are crucial to computers. Numerous applications heavily rely on users providing fundamental inputs, much like those available on the presented keypad. A fundamental technique for reading input from a keypad involves a sequential process. Begin by creating a loop that establishes a connection between one of the rows and ground (for instance, row 1), and then proceed to read each column. In a scenario where column 4 registers a 0, the pressed key corresponds to 'A.' Otherwise, continue the process by connecting row 2 to ground and systematically reading the columns until the pressed key is successfully identified." Circuit Test While the circuit features both the temperature and humidity sensor along with the ultrasonic sensor, the initial testing in this circuit is exclusively focused on assessing the functionality of the keypad and utilizing the LCD display for message visualization. Modifications were necessary in the connections from previous scenarios due to the 4x4 keypad's demand for eight digital pins. Consequently, the decision was made to employ the analog pins for interfacing with the LCD display. Code /* Arduino Security System with the Keypad and LCD Simple one-digit password */ #include //include LCD library #include //include keypad library #define redLED 11 //define the LED pins #define greenLED 12 const byte rows = 4; //number of the keypad rows const byte cols = 4; // number of the keypad columns char keyMap [rows] [cols] = { //define the symbols on the buttons of the keypad {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; char password ='6'; //create a password byte rowPins [rows] = {1, 2, 3, 4}; // digital pins related to the row pins of the keypad byte colPins [cols] = {5, 6, 7, 8}; // digital pins related to the column pins of the keypad Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, rows, cols); LiquidCrystal lcd (A0, A1, A2, A3, A4, A5); // pins of the LCD. (RS, E, D4, D5, D6, D7) void setup(){ lcd.begin(16, 2); pinMode(redLED, OUTPUT); //set the LED as an output pinMode(greenLED, OUTPUT); setLocked (true); //state of the password } void loop(){ // char whichKey = myKeypad.getKey(); //define which key is pressed with getKey lcd.setCursor(0, 0); lcd.print(" Welcome"); lcd.setCursor(0, 1); lcd.print(" Enter Password"); char whichKey = myKeypad.waitForKey(); //define which key is pressed with getKey if(whichKey == '*' || whichKey == '#' || whichKey == 'A' || //define invalid keys whichKey == 'B' || whichKey == 'C' || whichKey == 'D') { // location=0; setLocked (true); lcd.clear(); lcd.setCursor(0, 0); lcd.print(" Invalid Key! "); delay(1000); lcd.clear(); } if(whichKey == password ) { setLocked (false); lcd.clear(); lcd.setCursor(0, 0); lcd.print(" Accepted "); delay(1000); lcd.clear(); lcd.setCursor(0, 0); lcd.clear(); setLocked (true); } else { setLocked (true); lcd.clear(); lcd.setCursor(0, 0); lcd.print(" Try again "); delay(1000); lcd.clear(); lcd.setCursor(0, 0); lcd.clear(); } delay(200); } void setLocked(int locked){ if(locked){ digitalWrite(redLED, HIGH); digitalWrite(greenLED, LOW); } else{ digitalWrite(redLED, LOW); digitalWrite(greenLED, HIGH); } }       Keyboards are an effective means for users to engage with your project, enabling tasks like menu navigation, password input, and control over games and robots. Within this guide, I'll walk you through the process of configuring a keypad with Arduino. Initially, I'll elucidate how Arduino identifies key presses, followed by a demonstration of how to ascertain the pin configuration of any given keypad. As a straightforward illustration, I'll guide you through printing the recorded key presses on both the serial monitor and an LCD display. To culminate, I'll demonstrate the activation of a 5V relay upon the successful entry of a designated password. In this piece, I will employ a 4X4 matrix membrane keypad; however, I've also included code and wiring diagrams suitable for 3X4 matrix keypads. I have a preference for membrane-style keypads due to their slim profile and adhesive backing, allowing easy attachment to flat surfaces. Alternatively, telephone-style keypads with thicker buttons are available for those who favor that aesthetic. Moreover, even keypads sourced from repurposed old telephones can be effectively used with Arduino. How Keypads Work Keypad buttons are organized in rows and columns. A 3X4 keypad consists of 4 rows and 3 columns, while a 4X4 keypad comprises 4 rows and 4 columns. Underlying each key lies a membrane switch. Within a row, each switch is linked to its counterparts through a conductive trace beneath the pad. Similarly, each switch within a column is interconnected – one side of the switch is electrically connected to all other switches in that particular column via a conductive trace. This arrangement results in each row and column being extended to a solitary pin, summing up to a total of 8 pins on a 4X4 keypad. Depressing a button completes the circuit between a column and a row trace, thereby enabling the passage of current from a column pin to a row pin. The schematic representation of a 4X4 keypad illustrates the interconnection between the rows and columns. To ascertain the pressed button, the Arduino identifies the specific row and column pin engaged with the button. This process unfolds in four distinct stages: 1. Initially, with no buttons pressed, all column pins are maintained in a HIGH state, while all row pins are maintained in a LOW state: 2. Upon button press, the column pin undergoes a transition to a LOW state due to the transfer of current from the HIGH column to the LOW row pin. 3. Having identified the column housing the pressed button, the Arduino's task now lies in pinpointing the corresponding row. This involves systematically elevating each row pin to a HIGH state, simultaneously monitoring all column pins to identify the one that reverts to a HIGH state. 4. As the column pin regains a HIGH state, the Arduino successfully identifies the row pin linked to the depressed button: As depicted in the provided diagram, the convergence of row 2 and column 2 uniquely signifies the activation of the number 5 button. Connect the Keypad to the Arduino Refer to the accompanying diagrams to establish the connection between the keypad and an Arduino Uno. Select the appropriate diagram based on whether you possess a 3X4 or 4X4 keypad. How to Find the Pinout of Your Keypad In the event that the pin configuration of your keypad differs from the ones illustrated above, you can perform pin probing to ascertain the layout. To achieve this, construct a testing circuit by interconnecting an LED and a resistor for current regulation to the Arduino (or any available 5V power source), as demonstrated below: Begin by identifying the keypad pins linked to the rows of buttons. Insert the ground (black) wire into the first leftmost pin. Depress any button in the first row and maintain pressure. Next, introduce the positive (red) wire into each of the remaining pins. If the LED illuminates at a particular pin, press and hold another button in the first row, then reinsert the positive wire into the other pins. If the LED lights up on a different pin, this signifies that the ground wire is connected to the pin corresponding to the first row. If no buttons in the first row trigger the LED, the ground wire is not linked to the first row. Progress to the next pin by shifting the ground wire, then press a button in another row, and iterate the aforementioned process until each row's pin is determined. To ascertain the pins connected to the columns, insert the ground wire into the pin associated with the known first row. Subsequently, press and hold a button in that row. Insert the positive wire into each remaining pin. The pin causing the LED to illuminate corresponds to the column linked to the button in question. Proceed to press another button in the same row, and for each column, repeat the process of inserting the positive wire to identify the pins associated with each column. Programming the Keypad To provide a fundamental illustration of keypad setup, I'll guide you through the process of printing each key press to the serial monitor. The Code for a 4X4 Keypad #include const byte ROWS = 4; const byte COLS = 4; char hexaKeys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; byte colPins[COLS] = {5, 4, 3, 2}; Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(){ Serial.begin(9600); } void loop(){ char customKey = customKeypad.getKey(); if (customKey){ Serial.println(customKey); } } The Code for a 3X4 Keypad Should you opt for a 3X4 keypad, you can utilize the following code: #include const byte ROWS = 4; const byte COLS = 3; char hexaKeys[ROWS][COLS] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; byte colPins[COLS] = {5, 4, 3}; Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(){ Serial.begin(9600); } void loop(){ char customKey = customKeypad.getKey(); if (customKey){ Serial.println(customKey); } } In the provided code, lines 3 and 4 establish the quantity of rows and columns attributed to the keypad. Between lines 6 and 11, specific characters are assigned to individual buttons pressed on the keypad. This allocation mirrors the keypad's physical arrangement. Should your keypad sport an alternative layout, you have the flexibility to specify the characters corresponding to each button press. For instance, if your keypad features a left-sided column of letters instead of the right, the adjustment would look as follows: char hexaKeys[ROWS][COLS] = { {'A', '1', '2', '3'}, {'B', '4', '5', '6'}, {'C', '7', '8', '9'}, {'D', '*', '0', '#'} }; Once you've uploaded the code, access the serial monitor. Upon pressing a key, its corresponding value will be displayed. Using an LCD with the Keypad Now, let's delve into the process of displaying key presses on an LCD. A 4X4 keypad utilizes 8 pins, while a 3X4 keypad uses 7 pins. Considering the substantial pin requirement, I'll be utilizing an I2C-enabled LCD, which necessitates only 4 wires for connection to the Arduino. Connect the Keypad and LCD After the libraries have been successfully installed, proceed to link the LCD's ground and Vcc pins to the Arduino. Following that, establish the connection of the LCD's SDA and SCL pins as specified in the table below, tailored to the specific Arduino boards:   Next, establish the connection between the keypad and the Arduino. The setup should resemble the following configuration (illustrated here using an Arduino Uno): Code for Output to an LCD Once all the components are properly interconnected, proceed to upload the provided code to the Arduino: #include #include #include const byte ROWS = 4; const byte COLS = 4; char hexaKeys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; byte colPins[COLS] = {5, 4, 3, 2}; Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); LiquidCrystal_I2C lcd(0x21, 16, 2); void setup(){ lcd.backlight(); lcd.init(); } void loop(){ char customKey = customKeypad.getKey(); if (customKey){ lcd.clear(); lcd.setCursor(0, 0); lcd.print(customKey); } } On line 20, you will be required to incorporate the I2C address specific to your LCD: LiquidCrystal_I2C lcd(0x21, 16, 2); My LCD's I2C address is 0x21; however, yours is likely to differ. Refer to the datasheet for your LCD to ascertain its designated I2C address. Use a Password to Activate a Relay A highly practical application of a keypad is employing it for secure keyed entry. You can establish a password and configure the Arduino to trigger a relay or another module solely when the correct password is input. The subsequent code snippet will prompt the activation of a 5V relay upon accurate password entry: #include #include #include #define Password_Length 8 int signalPin = 12; char Data[Password_Length]; char Master[Password_Length] = "123A456"; byte data_count = 0, master_count = 0; bool Pass_is_good; char customKey; const byte ROWS = 4; const byte COLS = 4; char hexaKeys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; byte colPins[COLS] = {5, 4, 3, 2}; Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); LiquidCrystal_I2C lcd(0x21, 16, 2); void setup(){ lcd.init(); lcd.backlight(); pinMode(signalPin, OUTPUT); } void loop(){ lcd.setCursor(0,0); lcd.print("Enter Password:"); customKey = customKeypad.getKey(); if (customKey){ Data[data_count] = customKey; lcd.setCursor(data_count,1); lcd.print(Data[data_count]); data_count++; } if(data_count == Password_Length-1){ lcd.clear(); if(!strcmp(Data, Master)){ lcd.print("Correct"); digitalWrite(signalPin, HIGH); delay(5000); digitalWrite(signalPin, LOW); } else{ lcd.print("Incorrect"); delay(1000); } lcd.clear(); clearData(); } } void clearData(){ while(data_count !=0){ Data[data_count--] = 0; } return; } Alterations to the password can be made on line 10 by substituting the "123A456" text with your personalized password: char Master[Password_Length] = "123A456"; The password's length must be defined on line 5: #define Password_Length 8 In the provided example, the password appears to be 7 characters in length, but the actual length of the password is one greater than 7 due to the inclusion of a null character at the string's end. To illustrate, if your password comprises 5 characters, you would input a value of 6 for the password length. The designation of the output pin responsible for activating the relay is specified in line 7: int signalPin = 12; Upon successfully linking all components to the Arduino, your assembly should resemble the following configuration: And there you have it. Setting up a keypad is relatively straightforward. With some experimentation, you should be able to adapt the provided code to suit the requirements of various projects that involve a keypad. Should you encounter any challenges, don't hesitate to reach out in the comments section, and we'll be glad to offer assistance. ### 3.5’SBC-PX30-TVI3329A – 3.5-INCH SBC FEATURES ROCKCHIP PX30 Rockchip PX30 is the first Arm Cortex A35 processors from the company, and are designed for smart AI solutions such as smart speakers and smart displays. It usually be used in car infotainment systems, retail POS, advertising multimedia player.  It turns typically PX30 car infotainment systems come with 2GB RAM, 16GB storage, a 7″ display with 1024×600 resolution, GPS location, WiFi and Bluetooth connectivity, optional 3G/4G support, and radio support with some models support DAB (Digital Audio Broadcast).And it also has dual VOP (Video Output Processor) support to handle up to two independent displays, as well as an Ethernet MAC and a USB host block. Features Rockchip PX30 3.5-inch SBC;Max 4GB DDR3L & 64GB eMMC onboard;Support eDP, Mipi_DSI & HDMI /LVDS display;Support 2 independent displays;Support I2C,GPIO,USB,RS232,Mini_PCIe slotinterface;Support 2.4G/5G Wi-Fi, 3G/LTE & Ethernet connectivity; Read more: 3.5’SBC-PX30-TVI3329A – 3.5-INCH SBC FEATURES ROCKCHIP PX30 ### Creator Uses 3D Printer to Build a Gigantic Robotic Hand Spain-based creator Ivan Miranda used a 3D printer to build a gigantic robotic hand that will eventually be a part of a much larger project. This isn’t a basic animatronic hand, but rather one with fifteen individual motors, enabling it to fully articulate as well as grip objects. You won’t be able to 3D print this at home either, as Miranda hand built the large-format 3D printers you see fabricating this gigantic robotic hand. Once all of the parts were printed, servo motors were added to acutate each joint, while an Arduino Mega board controls them with pulse-width modulation. Most of the servos generate around 11kg-cm of torque, but the ones found in the palm at the base of each finger produce 25kg-cm for extra gripping strength. Source: Creator Uses 3D Printer to Build a Gigantic Robotic Hand ### NORDIC THINGY:91 CELLULAR IOT PROTOTYPING KIT Nordic Semiconductor’s multi-sensor kit supports LTE-M, NB-IoT, GPS, and Bluetooth low energy Nordic Semiconductor’s Nordic Thingy:91 multi-sensor prototyping kit is ideal for cellular IoT projects using the nRF9160 system-in-package (SiP). The kit is equipped with a diverse collection of sensors and interfaces that make it highly adaptable to rapid prototyping and getting a user’s proof-of-concept off the ground quickly. The Nordic Thingy:91 comes with a pre-loaded, feature-rich asset-tracking application that makes use of the on-kit sensors. LTE-M and GPS work from the device to the cloud and provides users with a working out-of-the-box asset-tracking and monitoring experience with the Nordic Thingy:91. The kit can be reprogrammed with the user’s dedicated application. The Nordic Thingy:91 is built around the nRF9160 SiP. The nRF9160 has a separate application/radio modem architecture to aid development simplicity and the overall performance. The SiP incorporates the Arm® Cortex®-M33 as a dedicated application processor which is used solely for powerful application processing. The dedicated radio system can support LTE-M, NB-IoT, and GPS technologies for precise positioning. The nRF9160 SiP integrates a full front-end RF system with a complete power management system. Security is critically important in IoT. The nRF9160 takes advantage of Cortex-M architectures by using Arm TrustZone® for secure boot and secure execution within the device. This technology has been the mainstay of secure operation in Cortex-A devices and is used to build secure operation in smartphones and tablets. Read more: NORDIC THINGY:91 CELLULAR IOT PROTOTYPING KIT ### ARDUINO-POWERED TRAP HOPES TO CATCH MICE The old adage that you’ll make a fortune by developing a better mouse trap is not super realistic, as the engineers behind Sony’s Betamax video tape standard could tell you. However, you can still learn a lot building your own, as this project from [ROBO HUB] demonstrates. The trap is intended to catch mice in a humane fashion, without injury to the animal. To that end, it uses an Arduino Nano armed with an ultrasonic distance sensor  to detect when mice have entered a plastic container. The container’s hinged door is is held open with a servo. When a mouse is detected, the servo trips the door to snap shut under the power of an elastic band. The key to making this design work well is ensuring that there are no gaps in the closed container that the mouse can use to escape. They’re wily creatures able to squeeze through positively tiny spaces, so it’s important to get this right. Besides that, you want to check the trap regularly, lest any caught mice simply claw and chew their way out. We’ve seen a few mousetraps around these parts before, too. Video after the break. Source: ARDUINO-POWERED TRAP HOPES TO CATCH MICE ### Arduino and AWS partner to enhance its edge hardware and cloud services Arduino has unveiled a strategic alliance with Amazon Web Services (AWS), a partnership aimed at bolstering its edge hardware and cloud services. This collaboration is set to offer an expanded range of options for Arduino products and Arduino Cloud customers, enabling them to seamlessly integrate AWS into their Internet of Things (IoT) projects. Since its inception three years ago, Arduino Cloud has been operating on AWS infrastructure, demonstrating the longstanding relationship between the two tech giants. Today, Arduino Cloud processes a staggering 4 billion device messages each month, positioning it as one of the most significant IoT Software as a Service (SaaS) platforms deployed on AWS. Arduino Cloud  for Business The rapid growth of Arduino’s Cloud for Business solution is another testament to the success of this partnership. Commercial customers have been vocal in their praise for its core features and integrations with Edge Impulse and Foundaries.io. In a bid to support medium to large customers in architecting custom solutions, Arduino has also joined the AWS Independent Software Vendor (ISV) program. This program is specifically designed for SaaS providers built on AWS. The partnership also opens up access to a vast network of over 100,000 AWS Partners worldwide. This network will streamline the process of integrating each cloud with one another, making it easier for businesses to leverage the power of cloud computing. In addition, Arduino currently has 12 devices in the pipeline to achieve AWS Device Qualification status. Once qualified, these devices will be officially recognized by AWS, providing customers with architectural documentation and further enhancing the credibility of Arduino’s offerings. The overarching goal of the Arduino and AWS partnership is to simplify and accelerate the deployment of commercial IoT and cloud-based solutions. By connecting the capabilities of edge hardware with the potential of cloud computing, this alliance is set to revolutionize the way businesses operate in the digital age. Other articles you may find of interest on the subject of Arduino : Low-cost thermal camera built using Arduino Arduino UNO R4 Minima vs UNO R4 WiFi boards DIY Arduino Wind Speed Meter Anemometer Project New Arduino Nano ESP32 IoT microcontroller launches €18 Arduino Inputs and Outputs a beginners guide Amazon Web Services (AWS) mazon Web Services (AWS) is a subsidiary of Amazon that provides on-demand cloud computing platforms and APIs to a diverse range of clients, from individuals to large enterprises and governments. These services are offered on a metered pay-as-you-go basis, allowing users to scale their infrastructure needs and only pay for what they use. At the core of AWS’s offerings is its Infrastructure as a Service (IaaS) model, epitomized by services like Amazon EC2 (Elastic Compute Cloud). This service provides virtual servers with scalability as a defining feature. For those looking for a more managed environment, AWS offers Platform as a Service (PaaS) solutions such as AWS Elastic Beanstalk, where developers can simply deploy their application code, and the underlying infrastructure management is handled by AWS. Storage and database needs are comprehensively addressed by AWS. The Amazon S3 (Simple Storage Service) provides scalable object storage, while Amazon EBS (Elastic Block Store) caters to block storage requirements. On the database front, AWS provides managed services ranging from relational databases with Amazon RDS (Relational Database Service) to NoSQL solutions like Amazon DynamoDB. Network security and robustness are foundational to cloud services. AWS allows users to craft isolated networks within its environment using the Amazon VPC (Virtual Private Cloud). Additionally, content delivery is accelerated and optimized via Amazon CloudFront, AWS’s content delivery network (CDN) service. Source: Arduino and AWS partner to enhance its edge hardware and cloud services ### Voice-Controlled LED System Using HC-05 Bluetooth Module and Smartphone Summary In this undertaking, we'll employ an HC-05 Bluetooth module alongside a smartphone for transmitting vocal instructions to oversee LEDs and to accept voice directives. Our approach involves utilizing an "Arduino Bluetooth Voice Controller" Android application, readily downloadable from the Play Store. The microphone captures spoken input, which is subsequently processed by the voice module through voice commands. These voice commands are issued via the mobile device to the Bluetooth setup, which possesses specific functionalities for regulating the activation and deactivation of individual LEDs. Objectives Acquiring the skill of utilizing the HC-05 module to govern Arduino through Bluetooth communication. Gaining proficiency in managing LEDs through the amalgamation of Bluetooth modules and Arduino. Applications in Various Industries Automation holds a pivotal position in the realm of technology. Home automation facilitates the management of household electrical devices like lights, doors, fans, air conditioning, and more. Additionally, it enhances home security and establishes an emergency response mechanism. Home automation not only lessens human exertion but also contributes to energy conservation and time efficiency. The central aim of home automation and security is to assist individuals with disabilities and the elderly, empowering them to oversee home appliances and receive alerts during crucial circumstances. Project Methodology Voice control entails the utilization of speech recognition technology, wherein the system comprehends spoken words. The primary objective of this endeavor is to govern LEDs through human vocal commands. Within this setup, a voice recognition module has been employed to identify user speech, thereby facilitating the toggling of LED states. The evolution of this project's application extends to the management of household devices via voice directives, thus rendering it a potential home automation solution. The commands are programmed into the Arduino board. Home appliances can be managed through two avenues: vocal instructions or employing a mobile device as a remote controller. Arduino, a user-friendly integrated development environment, is harnessed for crafting programs in C or C++ languages, which are then loaded onto the Arduino controller to execute various commands. Components:  1x Arduino Uno 1x HC-05 Bluetooth Module 3x 330 Ohm Resistors 3x LED’s Jumper Wires 1x Breadboard Project Procedure The HC-05 Bluetooth module, in its standard configuration, incorporates six pins. Nonetheless, for the scope of this project, our focus will be on four particular pins: VCC, GND, TXD, and RXD. The Bluetooth module's VCC pin establishes a connection to the Arduino's +3.3V input. The module's GND pin links to the Arduino's ground. Connecting to digital pin 0 (RXD), the module's TX pin completes its circuit, while the RXD pin interfaces with digital pin 1 (TXD). Moving forward with our voice-controlled LED setup, proceed to establish a connection between the LED and the Arduino using the breadboard. Initially, link the LED's shorter terminal to the ground. Then, connect the longer terminal of each LED to a 330-ohm resistor. A +5V power supply can be directed to the Arduino using various means. Employing a USB port from your computer is a convenient option. However, before introducing power to the Arduino, it's imperative to confirm the connection between the Arduino's GND and the breadboard's ground. Code: #include SoftwareSerial BLU(0,1); String voice; int Green = 4; //Connect To Pin #4 int Yellow = 2; //Connect To Pin #2 int Red = 3; //Connect To Pin #3 void allon() { digitalWrite(Red, HIGH); digitalWrite(Yellow, HIGH); digitalWrite(Green, HIGH); } void alloff() { digitalWrite(Red, LOW); digitalWrite(Yellow, LOW); digitalWrite(Green, LOW); } void setup() { Serial.begin(9600); BLU.begin(9600); pinMode(Red, OUTPUT); pinMode(Yellow, OUTPUT); pinMode(Green, OUTPUT); } void loop() { while (Serial.available()) //Check if there is an available byte to read { delay(10); //Delay added to make thing stable char c = Serial.read(); //Conduct a serial read if (c == '#') { break; //Exit the loop when the # is detected after the word } voice += c; } if (voice.length() > 0) { if(voice == "*turn on all LED") { allon(); } else if(voice == "*turn off all LED") { alloff(); } else if(voice == "*switch on red") { digitalWrite(Red,HIGH); } else if(voice == "*switch on yellow") { digitalWrite(Yellow,HIGH); } else if(voice == "*switch on green") { digitalWrite(Green,HIGH); } else if(voice == "*switch off red") { digitalWrite(Red,LOW); } else if(voice == "*switch off yellow") { digitalWrite(Yellow,LOW); } else if(voice == "*switch off green") { digitalWrite(Green,LOW); } voice=""; //Reset variable } } For project testing, acquire the Android app "BT Voice Control for Arduino" developed by Simple Labs IN. Afterward, access the menu icon situated in the upper-right corner and opt for 'Connect Robot.' In the ensuing window, designate the HC-05 Bluetooth module and establish a connection. Upon verbalizing specific commands from the provided code via the app, distinct LEDs should demonstrate the expected on and off behavior.   ### 3D SENSING EMITTER MODULE FOR SMARTER TOF Osram’s first intelligent emitter module for 3D sensing allows smartphones to take high-quality images and videos with a staggered depth of field. In portrait shots, the person’s face remains in focus, while the background becomes blurred. Besides optimizing image content, the module can also be used for 3D object recognition or augmented reality apps. A central task for manufacturers of smartphones and tablets is to find the right emitters, photodiodes and VCSEL driver chips (ICs), then calibrate them and finally install them in the end device. With the VCSEL-based module Bidos PLPVDC 940_P_L01 specifically designed for Time-of-Flight-(ToF) applications, Osram now eliminates a large part of these tasks for manufacturers. The module features a black package, a 3-Watt infrared VCSEL with a wavelength of 940 nanometers (nm), a matching optical system, an integrated intelligent microcontroller for driving the VCSEL and a photodiode. Together, the individual components have a 3.6×5.46mm footprint. The unit’s high optical power enables the acquisition of depth information by ToF at a distance of up to seven meters. Special safety mechanisms are integrated in the module. If the photodiode registers a change in the incidence of light, if the optics are damaged after a fall, the current supply to the VCSEL is interrupted. Read more: 3D SENSING EMITTER MODULE FOR SMARTER TOF ### REFERENCE DESIGN FOR SMALL WEARABLES FOR SOCIAL-DISTANCING STMicroelectronics, a global semiconductor leader serving customers across the spectrum of electronics applications, announces the availability of a compact and cost-effective reference design ideally suited for monitoring social distancing, assuring remote operation, provisioning, as well as warning, anti-tampering, and potentially providing contact tracing to protect human health in all environments, including in response to global or local pandemic conditions. Leveraging Bluetooth Low Energy technology through its incorporation of ST’s ultra-low-power BlueNRG-2 System-on-Chip with tunable RF output power, the BlueNRG-Tile reference design measures the signal strength of nearby Bluetooth non-connecting beacons and, in real-time, calculates proximity to these sources. The circuit can be provisioned and then operate, issuing warnings when another beacon intrudes on an adjustable perimeter or when tampered with – even when not connected to a smartphone or 5G network. The base reference design can be supplemented with ST’s S2-LP sub-GHz ultra-low-power RF transceiver to add bi-directional tag-to-cloud communication through the Sigfox “0G” Global Network, allowing private and anonymous tag provisioning, notifications, and an advisory return-channel for emergency warnings.  To assure power economy and extend battery lifetime, the ultra-low power components are further enhanced with a MEMS (Micro-Electro-Mechanical Systems) accelerometer that power cycles the unit when it isn’t moving. Optionally, internal or external memory could provide long-term storage of nearby beacons, allowing contact tracing. Read more: REFERENCE DESIGN FOR SMALL WEARABLES FOR SOCIAL-DISTANCING ### ALL-MECHANICAL COIL WINDER IS A SCRAP-BIN DELIGHT If there’s something more tedious than winding coils, we’re not sure what it is — possibly rolling and wrapping coins; that’s really a bother. But luckily, just like there are mechanical ways to count coins, there are tools to make coil production a little less of a chore, but perhaps none that have as much charm as this all-mechanical coil winder. We’d say that [Ralph (VK3ZZC)]’s amazing invention firmly falls under the “contraption” category, without a hint of the term being used as a pejorative. The rig was based on the MoReCo Coilmaster, a machine that was once commercially available at a fairly steep price, according to [Ralph], and still seems to command a premium even today. Never being able to afford an original, [Ralph] spun up his own from scrap metal and tooling no more sophisticated than a drill press. It’s a riot of brass and steel, with a hand crank that drives the main winding shaft while powering a cam that guides the wire along the long axis of the coil form. Cams can be changed out for different winding patterns, and various chucks adapt to hold different coil forms to the winding shaft. There are a ton of interesting details in the build, which [Ralph] explains over on fellow ham [Peter (VK3YE)]’s YouTube channel — video below. The neatest idea is a reservoir attached to the wire feed tube that holds beeswax. The wire gets coated with wax as it feeds out to the coil, serving not only to lubricate things a bit but also to provide some tackiness to encourage the magnet wire to stay in place on the coil form. It’s a lovely detail, although [Ralph]’s source for the wax — the coating from a block of cheese — isn’t exactly appetizing. We’ve seen coil winders before, but most of them are motorized and Arduino-fied affairs. Not that there’s anything wrong with that, but seeing an all-mechanical solution in action is pretty cool too. Source: ALL-MECHANICAL COIL WINDER IS A SCRAP-BIN DELIGHT ### Arduino Nano ESP32 handheld console with round color display If you are searching for a quick yet fantastic little project to keep you busy you might be interested in this fantastic Arduino Nano ESP32 based color handheld console created by the Volos Projects YouTube channel. The tiny handheld console features a round display and is powered by an Arduino Nano ESP32. Volos Projects, a popular YouTube channel, has recently unveiled an intriguing creation that is sure to captivate tech enthusiasts and gamers alike. Ingeniously harnessing the power of the Arduino Nano ESP32 to create a compact, handheld gaming console that boasts full-color graphics on a round display. The Nano ESP32, the heart of this handheld console, is a microcontroller unit (MCU) that outperforms most of its counterparts in terms of processing power and memory. It is a product of Espressif ESP32, a company renowned for its high-quality MCUs. The Nano ESP32 also comes equipped with built-in Wi-Fi and Bluetooth adapters, adding to its impressive list of features. Arduino Nano ESP32 handheld games console The power of the ESP32 is not to be underestimated. It was more than capable of generating vibrant video game graphics at a commendable resolution, making it the perfect choice for this handheld gaming console project. This tiny yet powerful device, with its unique round display, is a testament to the capabilities of the Arduino Nano ESP32. To demonstrate the capabilities of this handheld console, Volos Projects programmed a basic side-scrolling space shooter game. This game, aptly named GameNANO, is a testament to the potential of this compact gaming device. The code for GameNANO is readily available for download from GitHub, allowing other tech enthusiasts to replicate this project or even create their own games. Volos Projects showcased the simplicity of this system by assembling it on a breadboard. The components required for this project are minimal: an Arduino, a 1.28″ round GC9A01-driven TFT LCD, a handful of jumper wires, and a few buttons. The buttons chosen for this project are two-pin momentary push buttons, which simplify the wiring process and eliminate any potential confusion. The Arduino Nano ESP32 based color handheld console by Volos Projects is a fantastic little project that showcases the power and versatility of the Nano ESP32. It’s a perfect example of how technology can be harnessed to create fun and engaging DIY projects. Source: Arduino Nano ESP32 handheld console with round color display ### ARROW ELECTRONICS AND EXOR LAUNCH IOT EDGE PLATFORM FOR SMART FACTORIES Arrow Electronics has collaborated with Exor Embedded to create gigaSOM gS01, a full production design and an additional development kit featuring a high-performance, energy-efficient system on module (SOM) for IoT edge deployments.  The SOM combines the power and efficiency of the Intel Atom E3900 processor series with the flexibility of an Intel Cyclone 10 GX FPGA, connected with a high-bandwidth dual-lane PCIe interface to create a unified high-performing engine. gigaSOM gS01 is a combined X86 CPU and Intel high-speed FPGA design on a single system on module. With Intel’s time-coordinated computing (TCC) technology in the CPU, support for IEEE 802.1 time-sensitive networking (TSN) in the FPGA reference design, and loaded with a real-time IoT stack, the gigaSOM gS01 ensures determinism for managing synchronized and real-time smart-factory applications. The board can consolidate multiple devices such as industrial PCs, HMI controllers, and PLCs in a single module. Support for MQTT (MQ Telemetry Transport) and OPC UA (Open Platform Communications Unified Architecture) lightweight protocols lets users connect easily with Corvina Cloud – Exor’s sensor-to-cloud platform – for collecting machine IoT data and orchestrating industrial assets. Read more: ARROW ELECTRONICS AND EXOR LAUNCH IOT EDGE PLATFORM FOR SMART FACTORIES ### Gesture Sensor Control Using Arduino The DF Robot Gravity sensor now combines gesture controls and touch switches, offering an expanded array of combinations to manage the ON/OFF switch. Narrative This sensor module combines gesture recognition and touch detection capabilities into a single unit, offering an adaptable detection range spanning from 0 to 30cm. When linked to your microcontroller, it is capable of identifying a 5-way touch signal and recognizing 7 distinct gestures: leftward movement, rightward movement, forward motion, backward motion, upward pull, downward pull, and pulling and removing. Furthermore, the sensor is furnished with an auto-sleep and wake-up feature. The module incorporates a gesture recognition algorithm and delivers straightforward and dependable data output. Employ the sensor for direct communication with higher-level computers or microcontrollers such as Arduino and Raspberry Pi through a serial port connection. Operating based on the principle of infrared detection, this mechanism monitors hand motion through an infrared LED and sensing system. The infrared light interacts with the hand, then proceeds to the sensing unit for accurate interpretation. Infrared (IR) light falls within the invisible spectrum, and the sensor utilized in this process exhibits high selectivity. However, it's worth noting that IR is also present in sunlight, which is why the sensor's effectiveness is somewhat diminished when used outdoors. Application of gesture and touch: The sensor features a built-in 5-way touch pad that can be utilized for direct touch detection. Alternatively, you have the option to extend the touch pad using wires to seamlessly integrate it into your specific application. The external shield of the sensor not only preserves the benefits of the Gravity series but also enhances the sensor's durability. This versatile sensor is ideal for creating a smart lamp, crafting a DIY intelligent car, or incorporating into interactive projects that demand gesture recognition capabilities. Features: Power Supply: 3.3V - 6V (recommend 5V) Output Voltage: 0 - 3.3V Operating Current: about 56.3mA Sleep Mode Current: about 40uA Output: TTL serial port Serial Protocol Format: 9600 band rate; 8 data bits, no parity bit, 1 stop bit Note: Under intense sunlight conditions, the module's operational principle may lead to irregularities. Upon powering down, the sensor will undergo automatic initialization, rendering the prior configuration ineffective. While continuously transmitting bytes, it's essential to maintain a minimum time interval of 200 microseconds between the conclusion of the previous byte and the commencement of the subsequent one. The sensor is exclusively capable of data reception/transmission in its operational state; however, during data processing, the sensor must be in a non-operational state. Consequently, if an object is present over the sensor during data reception/transmission, it's necessary to relocate it to finalize the subsequent configurations. Normal Settings and functions: Default function when powered on: no sleep, 5-way touch, detecting height: 15cm. The default detecting height is 15cm, higher height detection needs to be set by yourself. Keep a normal speed when gesticulating to let the sensor better understand your gesture Code functions: 1) Adjust the sensing height (initially set at 20cm upon power-up). Example: DFGT.setGestureDistance(20);---Unit(cm) Max height: 30cm 2) Enable sleep mode or activate auto-sleep (sleep mode is inactive upon power-up). Example: DFGT.setSleep(4);---unit(s) 3) Enable gesture sensing (all seven gestures are recognizable upon power-up). Example(1) DFGT.enableFunction(DFGT_FUN_ALL);---enable all gestures sensing fuction Example(2) DFGT.disableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT);---disable sensing function of part gestures Example(3) DFGT.enableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT);---enable sensing function of part gestures Components Required: Led 5mm red 220ohms resistor ARDUINO NANO Breadboard Custom PCB design Circuit diagram: The digital pins of the Arduino NANO are linked to the four red LEDs. The gravity sensor interfaces with digital pins 10 and 11. The sensor's Rx is connected to the Tx pin, while the sensor's Tx is connected to the Rx, as defined in the Arduino's software serial configuration. The LEDs are assigned distinct roles corresponding to actions and functions outlined in the Arduino program. Establishing the connections is straightforward. To energize the circuit, a 5V external power supply with a current rating of 1 amp can be employed. Whenever working on a project involving this type of sensor, it's possible to create a customized PCB. My recommendation is to utilize the PCB manufacturing services offered by JLCPCB, known for delivering excellent services at competitive prices. You can explore their offerings, such as obtaining five units of a 2-layer PCB for just $2, and their SMT assembly starting from a mere $8. Simple testing code: gestures_1 The sensor's readings are displayed on the serial monitor via the Arduino's serial port (UART), and the gravity sensor is compatible with the UART interface as well. This is why the Arduino code employs software serial, with the RX pin designated as D10 and the TX pin as D11. // Modified by Sagar saini #include "DFRobot_Gesture_Touch.h" #ifdef __AVR__ SoftwareSerial mySerial(/*RX*/10, /*TX*/11); #elif defined ESP_PLATFORM // ESP32:IO16 <--> TX:sensor // ESP32:IO17 <--> RX:sensor HardwareSerial mySerial(1); #endif // init sensor object, request write and read function DFRobot_Gesture_Touch DFGT(&mySerial); int led_1 = 2; int led_2 = 3; int led_3 = 4; int led_4 = 5; int led_5 = 6; void setup() { Serial.begin(115200); pinMode(led_1, OUTPUT); pinMode(led_2, OUTPUT); pinMode(led_3, OUTPUT); pinMode(led_4, OUTPUT); pinMode(led_5, OUTPUT); // suggest default value DFGT.setGestureDistance(20); // enable all functions DFGT.enableFunction(DFGT_FUN_ALL); // disable function test //DFGT.disableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT); // enable function test // DFGT.enableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT); // set auto sleep time out, in sleep mode, something approach will wake it up // DFGT.setSleep(4); Serial.println("simple Gesture!"); } void loop() { // get an event that data saved in serial buffer int8_t rslt = DFGT.getAnEvent(); if(rslt != DF_ERR) { // disable auto sleep // DFGT.setSleep(DFGT_SLEEP_DISABLE); switch(rslt) { case DFGT_EVT_BACK: Serial.println("get event back"); digitalWrite(led_1, HIGH); break; case DFGT_EVT_FORWARD: Serial.println("get event forward"); digitalWrite(led_1, LOW); break; case DFGT_EVT_RIGHT: Serial.println("get event right"); digitalWrite(led_2, HIGH); break; case DFGT_EVT_LEFT: Serial.println("get event left"); digitalWrite(led_2, LOW); break; case DFGT_EVT_PULLUP: Serial.println("get event pull up"); all_on(); break; case DFGT_EVT_PULLDOWN: Serial.println("get event pull down"); all_off(); break; case DFGT_EVT_PULLREMOVE: Serial.println("get event pull and remove"); all_off(); break; case DFGT_EVT_TOUCH1: Serial.println("get event touch1"); digitalWrite(led_1, HIGH); break; case DFGT_EVT_TOUCH2: Serial.println("get event touch2"); digitalWrite(led_2, HIGH); break; case DFGT_EVT_TOUCH3: Serial.println("get event touch3"); digitalWrite(led_3, HIGH); break; case DFGT_EVT_TOUCH4: Serial.println("get event touch4"); digitalWrite(led_4, HIGH); break; case DFGT_EVT_TOUCH5: Serial.println("get event touch5"); digitalWrite(led_5, HIGH); break; } } } void all_on(){ digitalWrite(led_1, HIGH); // write your own functions to control digital outputs digitalWrite(led_2, HIGH); // or to do something else with the gestures digitalWrite(led_3, HIGH); // now it is upto you how you play digitalWrite(led_4, HIGH); digitalWrite(led_5, HIGH); delay(100); } void all_off(){ digitalWrite(led_1, LOW); digitalWrite(led_2, LOW); digitalWrite(led_3, LOW); digitalWrite(led_4, LOW); digitalWrite(led_5, LOW); delay(100); } Functions used: touch_video I've initialized all functions to enable the activation of various movements and touch actions. To achieve this, I've incorporated an external function within the Arduino sketch that toggles the Red LEDs linked to the Digital I/O pins. PCB designs: I crafted a shield for this uncomplicated project, a method I find to be quite effective. The shield incorporates an Arduino Nano, securely soldered onto the board, with convenient male headers in proximity for establishing connections. Displaying data is facilitated by an integrated 128x64 OLED, and for digital output purposes, a buzzer and LED are included. The power aspect is well-optimized; simply provide power through a barrel jack with a voltage range of 9 to 12 volts. Testing: I conducted testing on the sensor with a 20cm height configuration, excluding sleep mode, and with all functions activated. The sensor exhibited flawless performance under room lighting conditions. However, I'm less certain about its performance in daylight. While attempting to identify left-right gestures, the accuracy was somewhat compromised. https://duino4projects.com/wp-content/uploads/2023/08/gesture_2.mp4 The most optimal response I observed occurred when utilizing the pull up, pull down, and pull and remove functions under sunlight conditions. The sensor's performance was notably satisfactory in these scenarios since the hand covers the sensor in these three cases. The touch responsiveness is exceptional, surpassing that of other touch sensors, and the response time is remarkably swift. The touch wires have the flexibility to be extended, and it's possible to create an external copper pad tailored for various applications. I've developed a basic code snippet solely for toggling LEDs by manipulating the digital outputs of the Arduino. However, you have the freedom to craft your own functions to achieve different objectives. The ball is now in your court, allowing you to explore how you want to engage with it. Code // Modified by Sagar saini #include "DFRobot_Gesture_Touch.h" #ifdef __AVR__ SoftwareSerial mySerial(/*RX*/10, /*TX*/11); #elif defined ESP_PLATFORM // ESP32:IO16 <--> TX:sensor // ESP32:IO17 <--> RX:sensor HardwareSerial mySerial(1); #endif // init sensor object, request write and read function DFRobot_Gesture_Touch DFGT(&mySerial); int led_1 = 2; int led_2 = 3; int led_3 = 4; int led_4 = 5; int led_5 = 6; void setup() { Serial.begin(115200); pinMode(led_1, OUTPUT); pinMode(led_2, OUTPUT); pinMode(led_3, OUTPUT); pinMode(led_4, OUTPUT); pinMode(led_5, OUTPUT); // suggest default value DFGT.setGestureDistance(20); // enable all functions DFGT.enableFunction(DFGT_FUN_ALL); // disable function test //DFGT.disableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT); // enable function test // DFGT.enableFunction(DFGT_FUN_RIGHT | DFGT_FUN_LEFT); // set auto sleep time out, in sleep mode, something approach will wake it up // DFGT.setSleep(4); Serial.println("simple Gesture!"); } void loop() { // get an event that data saved in serial buffer int8_t rslt = DFGT.getAnEvent(); if(rslt != DF_ERR) { // disable auto sleep // DFGT.setSleep(DFGT_SLEEP_DISABLE); switch(rslt) { case DFGT_EVT_BACK: Serial.println("get event back"); digitalWrite(led_1, HIGH); break; case DFGT_EVT_FORWARD: Serial.println("get event forward"); digitalWrite(led_1, LOW); break; case DFGT_EVT_RIGHT: Serial.println("get event right"); digitalWrite(led_2, HIGH); break; case DFGT_EVT_LEFT: Serial.println("get event left"); digitalWrite(led_2, LOW); break; case DFGT_EVT_PULLUP: Serial.println("get event pull up"); all_on(); break; case DFGT_EVT_PULLDOWN: Serial.println("get event pull down"); all_off(); break; case DFGT_EVT_PULLREMOVE: Serial.println("get event pull and remove"); all_off(); break; case DFGT_EVT_TOUCH1: Serial.println("get event touch1"); digitalWrite(led_1, HIGH); break; case DFGT_EVT_TOUCH2: Serial.println("get event touch2"); digitalWrite(led_2, HIGH); break; case DFGT_EVT_TOUCH3: Serial.println("get event touch3"); digitalWrite(led_3, HIGH); break; case DFGT_EVT_TOUCH4: Serial.println("get event touch4"); digitalWrite(led_4, HIGH); break; case DFGT_EVT_TOUCH5: Serial.println("get event touch5"); digitalWrite(led_5, HIGH); break; } } } void all_on(){ digitalWrite(led_1, HIGH); digitalWrite(led_2, HIGH); digitalWrite(led_3, HIGH); digitalWrite(led_4, HIGH); digitalWrite(led_5, HIGH); delay(100); } void all_off(){ digitalWrite(led_1, LOW); digitalWrite(led_2, LOW); digitalWrite(led_3, LOW); digitalWrite(led_4, LOW); digitalWrite(led_5, LOW); delay(100); } ### ACCURATE CYCLE COUNTING ON RP2040 MICROPYTHON The RP2040 is a gorgeous little chip with a well-defined datasheet and a fantastic price tag. Two SDKs are even offered: one based on C and the other MicroPython. More experienced MCU wranglers will likely reach for the C variant, but Python does bring a certain speed when banging out a quick project or proof of concept. Perhaps that’s why [Jeremy Bentham] ported his RP2040-based vehicle speedometer to MicroPython. The two things that make that difficult are that MicroPython tries to be pretty generic, which means some hackery is needed to talk to the low-level hardware, and that MicroPython doesn’t have a reputation for accurate cycle counting. In this case, the low-level hardware is the PWM peripheral. He details the underlying mechanism in more detail in the C version. On the RP2040, the PWM module can count pulse edges on an input. However, you must start and stop it accurately to calculate the amount of time captured. From there, it’s just edges divided by time. For this, the DMA system is pulled in. A DMA request can be triggered once the PWM counter rolls over. The other PWM channel acts as a timer, and when the timer expires, the DMA request turns off the counter. This works great for fast signals but is inaccurate for slow signals (below 1kHz). So, a reciprocal or time-interval system is included, where the time between edges is captured instead of counting the number of edges in a period, What’s interesting here is how the hardware details are wrapped neatly into pico_devices.py. The uctypes module from MicroPython allows access to MMIO devices such as DMA and PWM. The code is available on GitHub. Of course, [Jeremy] is no stranger to hacking around on the RP2040, as he has previously rolled his own WiFi driver for the Pico W. Source: ACCURATE CYCLE COUNTING ON RP2040 MICROPYTHON ### MONITOR VOLTAGE AND CURRENT WITH THE TINY V/A METER Measuring voltage and current is an important part of the development process for any hardware product. Especially when developing a low power device, the knowledge of how much power the device is drawing at each mode of its operation is critical to the correct estimation of its battery life. While voltage can be measured in a straightforward manner, current usually require a more strenuous approach with a shunt, which if not properly selecterd could lead to errors. Even when these two are properly calibrated in the form of a meter, the tethering wires between the device and the meters can make the process not so interesting, especially when you have to do it repeatedly. To solve this, Karl Torp decided to build a palm-sized, one-for-all meter called; the Tiny V/A. Based on the Arduino Nano, the TinyV/A comprises of the nano, an INA219 sensor, a 0.96” OLED display, and a single capacitive touch button, all neatly housed inside a 3D-printed printed enclosure. It operates in a manner similar man-in-the-middle technique, taken in input from a power supply via a female barrel jack connector and supplying power to the load through a male connector output. The INA219 is a popular high side current sensor, readily available on Platforms like Alibaba, and its ability to measure both current and voltage on a load is the rock upon which the project is built. Read more: MONITOR VOLTAGE AND CURRENT WITH THE TINY V/A METER ### Creating a Fire Detector with Omniverse Replicator and Arduino Nicla This project serves as a proof-of-concept, showcasing the utilization of TinyML and a synthetic dataset for the purpose of fire detection. Story The threat posed by fires is of utmost concern to humanity, emphasizing the crucial need for reliable detection. Current flame sensors are constrained by limitations in their ability to detect fires at a distance. To surmount this challenge, I am dedicated to developing a fire detection system that is both lightweight and exceptionally precise, utilizing a machine learning approach. The complexity intensifies when real-time data processing is imperative or when there is a scarcity of available datasets for training machine learning models. Synthetic datasets play a pivotal role in addressing this predicament. This project serves as a proof-of-concept, illustrating the merits of incorporating synthetic datasets within fire detection systems. Synthetic datasets enable the simulation of scenarios that may be infrequently encountered in real-world situations yet require attention. They offer a remarkably cost-effective substitute to genuine data, a concept increasingly embraced in training deep neural networks for computer vision tasks. Various strategies, such as domain randomization, exist to bridge the disparity between synthetic training data and real-world application. This guide will navigate you through the process of training an object detection model tailored for fire detection systems. The following diagram provides a comprehensive illustration of the project's overarching architecture: Illustrated in the diagram above, the Nvidia Omniverse tool emerges as a valuable resource for crafting synthetic datasets. This versatile platform boasts photorealistic rendering capabilities and the ability to fashion dynamic scenes, facilitating the generation of exceptionally lifelike scenarios. These encompass a wide array of environmental variables, including light, color, background, and more. Subsequently, leveraging the Edge Impulse web platform, we can expeditiously train a machine learning model using cloud-based data resources. Upon the culmination of the training process, the optimized fire detection model is deployed onto the Arduino Nicla Vision. This compact and energy-efficient platform is tailor-made for edge computing applications, which aligns seamlessly with the deployment of the model. This affords real-time fire detection, enabling localized data processing that doesn't hinge on cloud connectivity. Furthermore, the machine learning model's output holds the potential to actuate various responses, such as activating a light source or dispatching notifications to smartphones. Creating Synthetic Data with NVIDIA Omniverse Replicator Similar to any machine learning endeavor, the foremost and pivotal step involves dataset preparation. Within the Nvidia Omniverse ecosystem, the Omniverse Replicator serves as a component, constituting a virtual world simulation accessible through the Omniverse Code application. You can choose to download the application for either Windows or Linux operating systems through this provided link. Once Omniverse is downloaded, access the Exchange tab and initiate the installation process for Omniverse Code. Next, establish a local Nucleus Service by accessing the Nucleus tab and adhering to the provided instructions. Once the Nucleus Service is configured, proceed to the Library tab. Launch Omniverse Code from this point to commence its utilization. You may encounter the following message: 2023-05-13 10:20:29 [Warning] [rtx.flow.plugin] rtx.flow.plugin failed to load Flow dynamic libraries (error: libnvflow.so: cannot open shared object file: No such file or directory)! Flow rendering will not be available. Try enabling the omni.Flowusd extension. In order to address this concern, it is advisable to activate the autoload feature for the Omni.Flowusd extension. This configuration can be adjusted within the Omniverse application settings. Locate the Omni.Flowusd extension and confirm that the Autoload option is enabled or marked. Save the changes to the settings and proceed to restart the Omniverse application. In the upcoming steps, our objective is to create a synthetic dataset through Python code. This will allow us to generate a wide range of data using two cameras, each capturing frames from distinct angles. To proceed, kindly access the Script Editor and insert the provided code snippet. import omni.replicator.core as rep import datetime now = datetime.datetime.now() # Camera1 focal_length1 = 25 focus_distance1 = 1200 f_stop1 = 0.4 pixel_resolution1 = (512, 512) horizontal_aperture1 = 8.5 camera1_pos = [(0, 270, 500), (500, 270, 500), (-500, 270, 500)] # Camera2 (Top view) focal_length2 = 50 focus_distance2 = 5000 f_stop2 = 2.8 pixel_resolution2 = (512, 512) horizontal_aperture2 = 8.5 camera2_pos = [(0, 1800, 0)] with rep.new_layer(): # Camera1 camera1 = rep.create.camera( position=(0, 0, 1200), rotation=(0, -90, 0), focal_length=focal_length1, focus_distance=focus_distance1, f_stop=f_stop1, horizontal_aperture=horizontal_aperture1, name='Camera1' ) # Camera2 camera2 = rep.create.camera( position=(0, 1500, 0), rotation=(-90, 0, 0), focal_length=focal_length2, focus_distance=focus_distance2, f_stop=f_stop2, horizontal_aperture=horizontal_aperture2, name='Camera2' ) # Create a new render_product (1 for each camera) render_product1 = rep.create.render_product(camera1, pixel_resolution1) render_product2 = rep.create.render_product(camera2, pixel_resolution2) # Create the floor plane floor = rep.create.plane( position=(0, 0, 0), rotation=(0, 0, 0), scale=(50, 50, 50), semantics=[('class', 'floor')], name='floor', ) # Randomize the floor material def random_Floor_Material(): floor_material = rep.randomizer.materials( materials=rep.get.material(path_pattern="/Fire/Looks/*"), input_prims=floor ) return floor_material.node rep.randomizer.register(random_Floor_Material) with rep.trigger.on_frame(num_frames=300): rep.randomizer.random_Floor_Material() with camera1: rep.modify.pose(look_at=(0, 0, 0), position=rep.distribution.sequence(camera1_pos)) with camera2: rep.modify.pose(look_at=(0, 0, 0), position=rep.distribution.sequence(camera2_pos)) writer = rep.WriterRegistry.get("BasicWriter") now = now.strftime("%Y-%m-%d") output_dir = "fire_data_" + now writer.initialize(output_dir=output_dir, rgb=True) writer.attach([render_product1, render_product2]) Drag a fire element from the flow tab and release it onto the scene. Activate the Run button located within the Script Editor tab. Following this, proceed to drag various materials from the materials tab and drop them onto the scene. In the provided code snippet, the writer is initialized and connected to the renderer to generate image outputs devoid of annotations. Let's initiate the process of generating synthetic data by clicking the "Start" button. Continuously modifying the floor material contributes to heightened data variability, thereby enhancing dataset diversity. This results in the creation of two distinct folders: "RenderProduct_Replicator" and "RenderProduct_Replicator_01." The images will be organized within the "img" folder within each of these designated folders. Upon completion of the generation process, you can review the synthetic images within these folders, as depicted below. Within the directory labeled "Render Product Replicator," you will find images showcasing a frontal perspective of the fire. Contained within the directory named "RenderProduct_Replicator_01" are images capturing a top-down view of the fire. With that, we wrap up the procedure of generating the synthetic dataset. Given the absence of annotations featuring bounding boxes for the fire, it becomes essential to devise an automated approach for this task. The subsequent section will delve into the details of this step. Automatic Image Labeling Using Grounding DINO The significant reality is that data labeling has evolved into a highly expensive and time-intensive undertaking. According to information from the NVIDIA forum, accomplishing output annotation for flow objects using internal tools within NVIDIA Omniverse Code is impractical. As a result, I have unearthed a resolution by harnessing revolutionary zero-shot object detectors like Grounding DINO, which have transformed the landscape of image labeling. To commence, employ the provided Python code below to aggregate the images from these designated folders into a unified collection. import os import shutil def copy_images(source_folders, destination_folder): # Create the destination folder if it doesn't exist if not os.path.exists(destination_folder): os.makedirs(destination_folder) for folder in source_folders: # List all files in the source folder files = os.listdir(folder) for file in files: # Check if the file is an image (you can add more image extensions if needed) if file.endswith('.png'): source_file_path = os.path.join(folder, file) destination_file_path = os.path.join(destination_folder, file) # If the destination file already exists, rename the file counter = 0 while os.path.exists(destination_file_path): counter += 1 new_filename = f"{os.path.splitext(file)[0]}_{counter}.png" destination_file_path = os.path.join(destination_folder, new_filename) # Copy the file to the destination folder shutil.copy(source_file_path, destination_file_path) if __name__ == "__main__": source_folders = ["./RenderProduct_Replicator/rgb/", "./RenderProduct_Replicator_01/rgb/"] destination_folder = "./output_folder" copy_images(source_folders, destination_folder) Upon successfully finishing the preceding assignment, proceed to adhere to the subsequent instructions. Access the "generate_annotation" Jupyter notebook and run the provided code excerpt. Ensure that your Jupyter environment is equipped with the requisite dependencies and libraries to facilitate the smooth execution of the code. Annotations in the Pascal VOC format will be generated within the export folder, as demonstrated in the illustration below. The Pascal VOC (Visual Object Classes) format is a widely embraced standard for object detection datasets. It encompasses images paired with their respective annotations, encompassing bounding box labels. Utilize the provided Python code snippet to validate the accuracy of the bounding box. import cv2 import xml.etree.ElementTree as ET def draw_bounding_box(image_path, annotation_path, output_path): # Load the image img = cv2.imread(image_path) # Parse the annotation file tree = ET.parse(annotation_path) root = tree.getroot() for obj in root.findall('object'): # Retrieve bounding box coordinates xmin = int(obj.find('bndbox/xmin').text) ymin = int(obj.find('bndbox/ymin').text) xmax = int(obj.find('bndbox/xmax').text) ymax = int(obj.find('bndbox/ymax').text) # Draw the bounding box on the image cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0, 255, 0), 2) # Save the image with bounding box cv2.imwrite(output_path, img) if __name__ == "__main__": image_path = "path/to/your/image.jpg" annotation_path = "path/to/your/annotation.xml" output_path = "path/to/save/output_image.jpg" draw_bounding_box(image_path, annotation_path, output_path) Below, you can see the images. The image labeling task has been successfully accomplished. As evident, the initial image labeling procedure can be swiftly executed in a matter of minutes through the application of the Grounding DINO zero-shot technique. Moving forward, the subsequent stage involves training the model intended for the fire detection system using Edge Impulse, ultimately culminating in its deployment onto the Arduino Nicla Vision platform. Training using Edge Impulse platform Commencing the procedure, it initiates with data collection through IoT devices, succeeded by feature extraction, model training, and ultimately, deployment and optimization tailored for TinyML devices. Configure the directory structure as depicted below. . ├── annotations │ ├── rgb_0000.xml │ ├── rgb_0001.xml │ ├── rgb_0002.xml │ ├── rgb_0003.xml │ ... └── images ├── rgb_0000.png ├── rgb_0001.xml ├── rgb_0002.png ├── rgb_0003.png ├── rgb_0004.png ├── rgb_0005.png ... In my scenario, I uploaded around 600 images alongside their corresponding annotation files. It is imperative to meticulously label and categorize each image into its respective fire class, ensuring clarity and preventing any potential confusion during the training process. After you have established and organized your classes within your datasets to your satisfaction, the next step involves training the model. Proceed to the "Create Impulse" section located in the left-hand navigation menu. Conclude by clicking the "Save Impulse" button. Next, proceed to the "Image" section. During this step, you will generate distinctive features derived from the input data. These features encompass distinct attributes that the classification algorithm will utilize to categorize images. After your exploration with the feature explorer is complete, navigate to the "Object detection" option in the left-hand navigation menu. In the context of this project, the training cycle count was configured at 100, and the learning rate was established as 0.005. Edge Impulse has created FOMO, an innovative TinyML deep learning framework designed for edge devices. FOMO enables real-time object detection on devices with limited computational and memory capabilities, breaking free from the confines of traditional bounding box detection. Instead, FOMO predicts the center of the detected object. These models are crafted to be under 100KB in size and can be effortlessly deployed onto the Arduino Nicla Vision platform. The neural network architecture is outlined as follows. Our model will undergo training via transfer learning, leveraging the foundation provided by FOMO.   Initiate model training by clicking the "Start training" button. The duration of this process can vary, typically ranging from 5 to 10 minutes, contingent upon the size of your dataset. Assuming all steps unfold as anticipated, you should observe the following outcome within the Edge Impulse interface. With an F1 score of 86.8%, the model demonstrates a commendable equilibrium between precision and recall, showcasing its effective performance in this object detection undertaking. Upon achieving your desired level of model performance, the subsequent step involves deploying it onto your Arduino Nicla Vision device. Our quantized model occupies a compact size of 56KB. The Arduino Nicla Vision is constrained by a practical memory threshold of 400 kilobytes (KB), as a portion of the random-access memory (RAM), approximately 1 megabyte (MB), is allocated to the operating system and image buffer. The device is equipped with 2MB of flash memory, supplemented by an additional 16MB of QSPI flash memory to provide extra storage capacity. Deploying the Trained Model to Arduino Nicla Vision Arduino Nicla Vision can be programmed in Micro Python environment using OpenMV IDE. Download it Afterward, navigate to the Deployment tab within Edge Impulse. Access the deployment options and select the appropriate choice, such as the OpenMV library in my instance. Towards the lower section of the page, proceed to click the "Build" button. This action will prompt the automatic download of a zip file to your computer, which you should subsequently unzip. Establish a connection between your computer and the Arduino Nicla Vision device by utilizing a USB cable. Transfer the files named "labels.txt" and "trained.tflite" to the primary directory of the Arduino Nicla Vision device. Make certain to insert the files directly into the main folder. Within the OpenMV IDE, find the Python script named "ei_object_detection.py" responsible for managing the object detection procedure. Ultimately, execute the script. Presented below is the demonstration video: Exercise caution when handling lighters and matches, as the lighter was exclusively employed for the purpose of demonstration. I've acquired synthetic training data and trained a model in the cloud through the Edge Impulse platform. Presently, this model is being executed locally on our Arduino Nicla Vision board. While it serves as a proof of concept, the Fire Detection System exhibited here stands as a comprehensive solution. This solution harnesses the capabilities of Nvidia Omniverse Replicator to craft a synthetic dataset, utilizes the advanced machine learning functionalities of the Edge Impulse platform to forge an exceptionally accurate fire detection model, and subsequently deploys this model onto the Arduino Nicla Vision for real-time edge-based fire detection. This tutorial serves as a valuable guide for individuals interested in delving into machine learning using Arduino Nicla boards. ### PEN PLOTTER USES POLAR COORDINATES To keep track of a location in a two-dimensional space, two measurements are needed. Most of the time, we would naturally think to do this by the Cartesian method, measuring position along one axis and then again along a second axis. But this isn’t the only way of keeping track of position. Polar coordinates, where the distance from the origin and an angle are used as the two measurements, works just as well, and sometimes can be a preferred method. This pen plotter tosses the expected Cartesian methodology we would typically expect in favor of this polar system. The first prototype that [André] built was a good proof of concept. A pen attached to a movable carriage on a single rotating arm produced passable drawings, but as all prototypes go this one needed some refinement. Limit switches at the ends of the table, as well as within the arm, served to orient the plotter so that it didn’t manually need to be zeroed out every time. A linear actuator was added to give finer control over the pen’s pressure on the table, and finally an encoder was added to the base of the plotter to more accurately correct positional errors in the rotating arm mechanism. With everything said and done, the polar coordinate plotter seems to work just as well as its Cartesian cousins might, orienting it like this has some advantages as well. Specifically, it is more adapted to drawing curves or circles than an X-Y device might be able to, like we saw with this similar sand-drawing plotter. Also, if allowed to rotate its entire 360-degree reach instead of just the 90 degrees shown in the video, a machine like this could theoretically reach a wider workspace more easily than other plotters. Source: PEN PLOTTER USES POLAR COORDINATES ### GUITAR DISTORTION WITH DIODES IN CODE, NOT HARDWARE Guitarists will do just about anything to get just the right sound out of their setup, including purposely introducing all manner of distortion into the signal. It seems counter-intuitive, but it works, at least when it’s done right. But what exactly is going on with the signal? And is there a way to simulate it? Of course there is, and all it takes is a little math and some Arduino code. Now, there are a lot of different techniques for modifying the signal from an electric guitar, but perhaps the simplest is the humble diode clipping circuit. It just uses an op-amp with antiparallel diodes either in series in the feedback loop or shunting the output to ground. The diodes clip the tops and bottoms off of the sine waves, turning them into something closer to a square wave, adding those extra harmonics that really fatten the sound. It’s a simple hack that’s easy to implement in hardware, enough so that distortion pedals galore are commercially available. In the video below, [Sebastian] explains that this distortion is also pretty easy to reproduce algorithmically. He breaks down the math behind this, which is actually pretty approachable — a step function with a linear part, a quadratic section, and a hard-clipping function. He also derives a second, natural exponent step function from the Schockley diode equation that is less computationally demanding. To implement these models, [Sebastian] chose an Arduino GIGA R1 WiFi, using an ADC to digitize the guitar signal and devoting a DAC to each of the two algorithms. Each distortion effect has its own charms; we prefer the harsher step function over the exponential algorithm, but different strokes. Kudos to [Sebastian] for this easy-to-understand treatment of what could otherwise be a difficult subject to digest. We didn’t really expect that a guitar distortion pedal would lead down the rabbit hole to diode theory and digital signal processing, but we’re glad it did. Source: GUITAR DISTORTION WITH DIODES IN CODE, NOT HARDWARE ### Awesome parachute system saves drones and rockets In the world of drones and hobby rockets, Niklas Bommersbach is making waves with his innovative safety system. Bommersbach has designed a system that detects critical flight behavior in drones, rockets and other aerial vehicles, activating a two-stage parachute deployment for a safe and controlled descent. At the heart of the system is an Arduino Nano microcontroller that monitors altitude using a barometric pressure sensor, deploying the parachute at a set altitude during rapid descent or in response to a manual command sent via radio. The primary parachute is loaded with a spring mechanism, with a drogue chute serving as a backup to slow descent if the primary parachute fails. The system is ingeniously designed to deploy a parachute if the drone or rocket experiences an uncontrolled descent, allowing it to return gently to the ground. This is achieved through a robust deployment mechanism and a  innovative design that triggers the deployment, both engineered by Bommersbach himself. Awesome parachute system saves drones and rockets The parachutes are housed in 3D-printed containers, which are opened by servo motors. These motors are powered by a small lithium battery that is independent of the craft’s battery, making the system self-contained. The Arduino first deploys the drogue chute to slow descent and attempt to pull out the main chute. If this fails, the Arduino can actively deploy the main chute. Bommersbach’s system is not just a safety measure for Unmanned Aerial Vehicles (UAVs), but also a testament to his ingenuity. Inspired by SpaceX-like rockets, the system is designed to reach high altitudes, pick up speed, and be in free fall for most of its descent. The system includes an electric ducted fan, a controller, batteries, transmitters, servos, and construction materials. Due to its complexity, the system costs around $1,200 and requires approximately 100 hours of construction time. However the innovative drone parachute safety system is sure to be developed further and will hopefully be made in production for those without the skills to be able to benefit and save their drones from fatal impacts. Drone parachute safety system The safety system is comprehensive, including a redundant parachute deployment system, an independent controller with its own power source, reliable software, and extensive testing. It uses a barometric pressure sensor to measure altitude, which is crucial for determining the parachute release point. Bommersbach uses the example of Jenga blocks to explain the physics behind the pressure and altitude measurement. The system also uses a technology called BRIBTIRG (brass rods I bent to interconnect ridiculous geometries) to release the parachute. The software for the system is designed to find the optimal point for parachute deployment, considering factors like wind and speed. The system includes a drogue chute, which is used to slow down falling objects and deploy a larger parachute. The system was tested using a drone, which allowed for the drogue chute to be deployed while the drone remained in stable flight. Bommersbach found that the system reaches terminal velocity quickly during descent, so the drone parachute is deployed instantly if a fail is detected. Manual parachute deployment The height for the main chute deployment is hardcoded into the system, allowing for manual intervention if something goes wrong. Niklas Bommersbach’s parachute system is a game-changer in the world of drones and rockets, ensuring their safe descent and preventing potential crashes. Source: Awesome parachute system saves drones and rockets ### STMICROELECTRONICS STSPIN32F025X & STSPIN32F060X STM32 MCU STSPIN32F025x and STSPIN32F060x system-in-package are an extremely integrated solution for driving three-phase applications STSPIN32F025x and STSPIN32F060x system-in-package are an extremely integrated solution for driving three-phase applications. It embeds an STM32F031 featuring an ARM® 32-bit Cortex®-M0 CPU, has extended temperature range -40 °C – 125 °C,  and a 250 V or 600 V triple half-bridge gate driver, able to drive N-channel power MOSFETs or IGBTs. A comparator featuring advanced smartSD function, high-voltage bootstrap diodes, multi-channel 12-bit ADC, anti-cross-conduction, deadtime, and UVLO protection are also included. Key Features Embeds STM32F0 MCU and 250 V / 600 V 3-phase BLDC DriverFully compatible with STM32 ecosystemExtended temperature range: -40 to +125 °CSmart shutdown (smartSD) and protection functions Additional Features Three-phase gate driversHigh voltage rail up to 250 VDriver current capability:STSPIN32F0251: 200/350 mA source/sink currentSTSPIN32F0252:1/0.85 A source/sink currentDriver current capability:STSPIN32F0601: 200/350 mA source/sink currentSTSPIN32F0602:1/0.85 A source/sink currentdV/dt transient immunity ±50 V/ns Read more: STMICROELECTRONICS STSPIN32F025X & STSPIN32F060X STM32 MCU ### [Password Box] Arduino One Touch Password Input (USB Keyboard Hack) Today is the world of internet social. We have many social platform Email, Facebook, Instagrams, Twitter, Instructables and etc.For security issue we should not use the same password for these platform and some platform enforce us to create password that difficult to remember. It is better to write it to your notebook but some people was boring to type their password (espcially me). https://youtu.be/RWe94BMoBXg Step 1: Explore Your Keyboard I used some old keyboard in this project. After disassemble we have two main parts, one is PCB and another is button pad. Step 2: Track All Key On PCB we found two groups of pin X and Y. After tracking all button wire from Xn to Yn we got Key mapping In this we use a-z, A-Z, 0-9 and some special characters. So, Y0-Y8 and YE on PCB are use. Step 3: Matrix Key Scan PC keyboard has more than a hundred keys. Matrix scan is used to reduce input output of processor. The image of oscilloscope shows X0 and X1 output signal. We can confirm that this keyboard is scan from X0 to X7. Assume that we need keyboard to send(press) key 'A' to PC, As you see in the key mapping table above, We need to wait X4 logic High, Then drive Y0 to High. Beware to drive Y0 High when other than X4 is High, Otherwise you will get other characters. Do it for other key in same step but difference Xn and Yn. Step 4: Add RFID for More Security This project I add RFID to protect our password box. Only person who has certain RFID card will allow to use the password box. I use RFID library from https://github.com/miguelbalboa/rfid Step 5: Combine All All hardware1x Arduino Mega25601x USB Keyboard (unused)1x RFID Module4x Switches2x LEDs1x Plastic Case Step 6: Coding I use Arduino IDE to programming this project. As you see the image after attach Password Box to your PC, The Password Box initialize peripheral hardware and red LED will indicates. Until certain card was scan by MFRC522 you will allow to use Password box to enter password to desire platform. Step 7: Using Password Box https://youtu.be/RWe94BMoBXg Source: [Password Box] Arduino One Touch Password Input (USB Keyboard Hack) ### Lane Tech PCL Amazon Alexa PC Boot and Heater start Initiate the activation of a computer and the operation of a space heater using either Amazon Alexa or the associated app, and subsequently employ a temperature sensor to control and maintain the heater's temperature. Story The Idea Located near a bay window in my basement, my desk contends with the unpredictable insulation and temperature characteristic of my antiquated house, resulting in a perpetually chilly environment. To counteract this, I've positioned a space heater right beside my workspace. Eager to enhance the management of my desk setup, encompassing my computer and the space heater, I embarked on a project. This undertaking aimed to achieve automation through the utilization of Amazon Alexa Echo Dots dispersed throughout my residence. Moreover, I aimed to enable remote activation via the Alexa app. My aspiration was to instruct Alexa about my presence at home, prompting her to initiate the automated sequence. To introduce an element of sophistication, I decided to integrate an additional component: a temperature sensor to regulate the heater's operation. The ultimate objective was the creation of a comprehensive automated control system for managing my desk setup upon my arrival. Temperature Sensor I initially began the process of configuring the temperature sensor, recognizing its pivotal role within the project. Employing the PietteTech library, I developed a test to assess the performance of the temperature sensor. You can locate the complete testing code for the sensor in the designated Code Section titled "DHT22 Temperature Sensor Testing." During this phase, I encountered a challenge wherein the sensor would sporadically yield implausible readings, such as a temperature of -2 degrees Celsius, especially when subjected to frequent checks. This occurrence prompted me to recognize the necessity of addressing this issue in my subsequent efforts. The approach I adopted involved maintaining a distinct value that underwent updates exclusively upon obtaining a valid measurement. if(currentTime - prevTime > 30000){ int result = DHT.acquireAndWait(2000); serverTemp = DHT.getFahrenheit(); if(serverTemp>0){ accurateTemp = serverTemp; } Particle.publish("servertemperature", String::format("%.1f", serverTemp)); Particle.publish("accuratetemperature", String::format("%.1f", accurateTemp)); prevTime = currentTime; } IFTTT Amazon Alexa Triggers Subsequently, I proceeded to establish a connection between my Amazon Alexa and a Webhook post request service, enabling interaction with the Particle Argon. After careful consideration, I opted for IFTTT as my platform of choice. I integrated my Amazon account with IFTTT and configured the necessary applets to facilitate this connection. For establishing the IFTTT integrations, I leveraged the Particle cloud and employed Spark.FunctionParticle.Publish. This enabled me to invoke functions by utilizing a Particle token. I then coupled the Web hook post request with the IFTTT triggers, seamlessly integrating them with the functions coded in my project. Wake PCOn Lan Subsequently, my focus shifted to devising a means of remotely initiating my PC. While I was aware of the potential offered by Wake On Lan features, adapting them to function within the Particle environment posed a challenge. Fortunately, I discovered a relevant project that provided valuable insights and a starting point for my endeavor. By carefully scrutinizing the code, I streamlined it to extract only the indispensable functions for my purposes. This adapted code is responsible for taking a raw MAC address as input, converting it into bytes, and then dispatching wake packets to the designated PC via the specified MAC address. For a comprehensive look at the testing code, please refer to the dedicated Code Section titled "Wake On Lan Testing." Additional observations: For the purpose of experimentation, I deployed Homebrew on a distinct computer. This allowed me to install the wakeonlan command and assess its capabilities independently of the Particle Environment. In addition, I undertook adjustments within my BIOS and system settings to ensure the proper functioning of Wake On Lan. These three steps were executed in accordance with the guidelines provided by the manufacturer of my motherboard: 1. Disabled the "EUP 2013" setting in the BIOS Power Management menu. 2. Enabled the "Resume By PCI or PCI-E Device" option within the Wake Up Event Setup. 3. Accessed the "Network adapters" section in Windows device manager, navigated to the "Power Management" tab, and selected the checkboxes for "[Allow this device to wake the computer]." Heater Functionality Initially, I conceived the notion of managing the heater through a smart outlet or relay, intending to regulate the outlet power through Alexa integration. Regrettably, this approach proved impractical due to my heater's reliance on a digital, rather than manual, power switch. Consequently, simply interrupting and restoring the outlet power wouldn't effectively toggle the heater on and off. Given this constraint, I pivoted towards an alternative solution: employing infrared signals to manipulate the heater. This adjustment stemmed from the heater's provision of an IR LED remote for control. This facilitated the replication of the necessary signals, affording me the means to transmit them as required. Once the decision was made to utilize infrared communications, I established a setup to experiment with both receiving and transmitting IR signals. For testing purposes, I employed a remote that is compatible with Arduino. Utilizing the mentioned remote alongside my IR send and receive nodes, I achieved the successful replication of the received IR signal. IR transmissions adhere to particular encoding parameters, often shared and readily applicable for signal reproduction. The NEC encoding, the most prevalent, was employed by this specific remote. Comprehensive testing code can be located in the Code Section under "IR Transmit Testing," "IR Receive Testing," and "IR Transmit and Receive Testing." However, complications arose when attempting to duplicate signals from my personal remote. Replicating these signals posed a significantly greater challenge. It wasn't feasible to merely designate an NEC code and assign a straightforward hex value for transmission. The hex value transmission relies on knowledge of the encoding type. Following extensive research, it became evident that I needed to transmit the raw signals directly from the remote, without any simplification, given the absence of publicly available encoding specifications for Lasko company remotes. This was in contrast to the remotes of Lasko heaters, which lacked identifiable encoding and necessitated a distinct approach. Upon investigating further, my suspicions were confirmed when I encountered a different model of a Lasko heater remote upstairs in my residence, also employing an unfamiliar encoding. Consequently, I proceeded to meticulously record the distinct raw signals emitted by the remote, governing all the essential heater functions. I reconnected the temperature sensor and gathered all my IR components onto a single breadboard in order to conduct testing. Heater Temperature Interaction Because my heater has two distinct settings, I employ the temperature sensor to assess whether the heater should be activated when I start up my PC, specifically when the temperature is below 72 degrees. int wakeHost(String param) { String MACaddress = "00:d8:61:aa:73:7a"; Particle.publish("test","got to wake host"); char szMacAddress[80]; MACaddress.toCharArray(szMacAddress,80); Particle.publish("test", szMacAddress); if(accurateTemp < 72.0){ deskStart = TRUE; } checkHIGHTemp = TRUE; return wake(szMacAddress); } Additionally, the sensor monitors the temperature to detect instances of excessive heat (above 67 degrees), prompting a switch to the low mode. Final Product Code // This #include statement was automatically added by the Particle IDE. #include #define DHTTYPE DHT22 #define DHTPIN D2 PietteTech_DHT DHT(DHTPIN, DHTTYPE); double serverTemp; double serverHumidity; void setup() { Particle.variable("serverTemp", &serverTemp, DOUBLE); Particle.variable("serverHumidity", &serverHumidity, DOUBLE); } void loop() { int result = DHT.acquireAndWait(2000); serverTemp = DHT.getFahrenheit(); serverHumidity = DHT.getHumidity(); Particle.publish("temperature", String::format("%.1f", serverTemp)); if (serverTemp > 0){ Particle.publish("temperature", String::format("%.1f", serverTemp)); } else{ Particle.publish("temperature", "error"); } delay(5000); }   ### A DIY UV SANITIZER FOR YOUR SMARTPHONE BotFactory Inc writes: “Pandemic,” it’s a scary word to hear. Especially when it’s accompanied by panic-buying of canned goods, pasta, and the disappearance of most disinfecting products from stores. As soon as various media outlets started filling up their news cycles with stories about the coronavirus, alcohol, hand sanitizer, and other disinfectants flew off the shelves. Panic-buying left the most vulnerable without essential goods needed to protect themselves, with little recourse available. Facing such a bleak scenario, one such person turned to their son, Md, a BotFactory applications engineer for help. “Hey son, when you’re done removing the viruses from my computer, can you remove the viruses from my phone too?” Asked Md’s father. “Sure dad, gimme a few minutes, this will take a little time since we don’t have any disinfectant left,” responded Md. Both of them looked at each other quizzically. Then Md was struck with a brilliant idea; a bright idea, if you will. Ultraviolet light, in particular UVC light, is a shortwave ultraviolet light which can kill germs. Md thought to himself, “This would be a great way to clean items without any disinfectants.” The added benefit to using UV light instead of the highly sought-after cleaners, was that there was no need to go to the store or to lessen the availability of such products for others.  Electronics from Home Md has a number of tools at home that would make him the envy of many engineers during the COVID-19 lockdown: a 3D printer, an adjustable DC power supply, a soldering station, and a BotFactory SV2 desktop PCB printer. Utilizing their HomeLabs allows hardware and applications engineers like Md to prototype and assemble Printed Circuit Boards (PCBs) automatically while at home. Employing the tools he had close at hand, he was able to turn his idea into an actual device in record time to keep his things germ-free. Read more: A DIY UV SANITIZER FOR YOUR SMARTPHONE ### General Purpose Relay Timer Story Throughout my years of experience, I've created numerous timers and encountered a plethora of mobile apps. However, when I found myself in need of a straightforward solution to seamlessly automate the on-off cycle of a circuit I was actively developing, none of the available options proved to be the right fit. Consequently, I took it upon myself to construct what is now known as this relay timer. Demonstration Operation Control over the timer is achieved through a set of five buttons. Within the Menu mode, when the timer is not in operation, the Stop and Start buttons facilitate navigation through the subsequent adjustable parameters. OFF Format - Shown as "OF F" - Determines whether the displayed OFF time is presented in hours and minutes or in minutes and seconds. Toggle between two choices, "HHnn" or "nnSS," using the Up/Down buttons OFF Time (left two digits flashing) - Displayed as "OF t" - Represents the OFF time in hours or minutes based on the selected OFF format. Adjust the left two digits using the Up/Down buttons. OFF Time (right two digits flashing) - Displayed as "OF t" - Represents the OFF time in minutes or seconds based on the chosen OFF format. Set the right two digits using the Up/Down buttons. On format - Indicated as "ON F" - Determines whether the displayed ON time is presented in hours and minutes or in minutes and seconds. Toggle between two options, "HHnn" or "nnSS," using the Up/Down buttons. On time (left two digits flashing) - Displayed as "ON t" - Represents the ON time in hours or minutes based on the selected ON format. Adjust the left two digits using the Up/Down buttons. On time (right two digits flashing) - Displayed as "ON t" - Represents the ON time in minutes or seconds based on the chosen ON format. Set the right two digits using the Up/Down buttons. Loop - Shown as "LOOP" - Determines whether the sequence, once started, plays once or is repeated continuously. Switch between two options, "ON" or "OFF," using the Up/Down buttons. When in Menu mode and the display indicates "PLAY," activating the Play button initiates the timer. If no OFF time or ON time is configured, the lower line will display "Err" and revert to Menu mode. Upon setting the OFF time, ON time, or both, the timer will commence. The buttons fulfill the following roles: Stop button - Temporarily halts the countdown. Start button - Resumes the countdown from a paused state. Play button - Interrupts the countdown, reverting to Menu mode when paused. Additionally, the relay will deactivate. In the absence of looping, once the sequence concludes, the system will automatically transition into pause mode, displaying "dONE" on the upper screen. Simultaneously, the relay will deactivate. 3D printing The necessary STL files for 3D printing are provided. You can choose to either 3D print them on your own if you have access to a 3D printer, or you can opt to have them printed at a commercial 3D printing service. The suggested Slicer configuration is outlined below: "Case - Bottom.stl" - 0.2 layer height, no supports "Case - Front.stl" - 0.2 layer height, no supports "Button_Tops.stl" - 0.1 layer height, no supports, switch to contrasting color at start of layer 54 "Spacers.stl" - 0.1 layer height, no supports Enlarge the holes for the four PCB mounts using a 2.5mm drill bit and then thread them using a 3mm tap. Schematic The timer employs an ATtiny1614 microprocessor in conjunction with a MAX7219 8-digit LED driver IC. The Start/Stop/Up/Down buttons are linked to a voltage divider, allowing them to share a solitary analog pin on the microprocessor. The DPDT relay, an Omron G6H-2F, was obtained from a Rocky Electronics sale. The displays are 0.4-inch 4-Digit 7-Segment Clock displays procured from Ali Express. PCB The PCB layout was tailored to accommodate components readily available in my workshop. The board incorporates a blend of through-hole components and Surface Mount Devices (SMD). The Eagle files have been included for those interested in having the board professionally manufactured, or you can choose to follow my approach and create it independently. I utilized the Toner method for my own fabrication. Assembly - Step 1 Commence by incorporating the Surface Mount Devices (SMD) components. Personally, I prefer utilizing solder paste over solder from a reel when soldering SMD components, finding it to be more convenient. For the reflow process beneath the SMD components, I employed my SMD Reflow Hot Plate. If your board is single-sided, remember to include the required links. Assembly - Step 2 Integrate a 3-pin straight male header onto the copper side of the board. This header serves the dual purpose of programming the ATtiny1614 and serving as the power connector. To prevent inadvertent errors, apply a touch of red paint to the +5V pin, ensuring the battery connector is not inserted incorrectly. Incorporate a straight 6-pin male header onto the copper side of the board. This is where the wires connecting to the terminal blocks will be connected. On the component side, attach the two 7-segment displays, four 6x6mm tactile switches with 8mm shafts, a 12x12mm tactile switch with a round button top, and the passive buzzer. When affixing the 7-segment displays, be sure to include the 3D printed spacers underneath them. This ensures they are positioned at the correct height before soldering them into place. Assembly - Step 3 Insert the Stop/Start and Up/Down button tops into their designated apertures, then secure the PCB to the front of the enclosure utilizing four 6mm M3 screws. Confirm the functionality of the buttons. In case the switches are hindered from operating smoothly, you might need to disassemble the PCB and carefully file away any obstructions. Assembly - Step 4 Attach right-angle male pin headers to the straight male pin headers that were affixed in Step 2; otherwise, the Dupont female connectors may not have sufficient clearance over the battery and charger board. Assembly - Step 5 As per the MAX7219 datasheet, it requires a minimum supply voltage of 4.5V. Since this project utilizes a single 3.7V Li-Po battery, I incorporated a charger equipped with a boost circuit. These modules can be sourced from Ali-Express. Simply search for "USB 18650 Lithium Li-ion Battery Charger Module Boost 3.7V to 5V 9V 12V Adjustable DC-DC Step Up Boost Module." These modules are usually priced around $1 each. After connecting the battery wires and supply wires to the charger/boost module, securely affix the module to the base using hot glue. To facilitate connections, two 3-way screw terminal connectors are affixed to the exterior of the case and linked to the relay outputs through wire holes. Be sure to drill suitable holes in the case to accommodate the terminal blocks you intend to use. Programming Differing from the previous ATtiny series like the ATtiny85, the ATtiny1614 utilizes the RESET pin for CPU programming. To program this microcontroller, an UPDI programmer is required. I constructed one by utilizing an Arduino Nano. Comprehensive construction guidelines can be accessed at "Create Your Own UPDI Programmer." This resource also encompasses instructions for integrating the mega Tiny Core boards into your Integrated Development Environment (IDE). After the board has been added to the IDE, choose it from the Tools menu. Choose the ATtiny1614 board in your IDE. Select the appropriate settings for Board, chip, clock speed, COM port (the Arduino Nano is connected to), and the programmer. Make sure to set the Programmer to jtag2updi (megaTinyCore). Open the sketch and proceed to upload it to the ATtiny1614. Code /*************************************************************************** * Relay Timer * by John Bradnam * * 2022-12-01 jbrad2089@gmail.com * - Created base code for ATtiny1614 */ /** * ATTiny1614 Pins mapped to Ardunio Pins * * +--------+ * VCC + 1 14 + GND * (SS) 0 PA4 + 2 13 + PA3 10 (SCK) * 1 PA5 + 3 12 + PA2 9 (MISO) * (DAC) 2 PA6 + 4 11 + PA1 8 (MOSI) * 3 PA7 + 5 10 + PA0 11 (UPDI) * (RXD) 4 PB3 + 6 9 + PB0 7 (SCL) * (TXD) 5 PB2 + 7 8 + PB1 6 (SDA) * +--------+ */ #ifdef __AVR_ATtiny1614__ #include #else #include #endif #include #include "Display.h" #include "Button.h" #define MAX7219_DATA 2 //PA6 #define MAX7219_CLK 0 //PA4 #define MAX7219_LOAD 1 //PA5 #define SW_START 5 //PB2 #define SWITCHES 8 //PA1 #define RELAY 9 //PA2 #define SPEAKER 4 //PB3 #define BUZZER_PORT PORTB #define BUZZER_PIN PIN3_bm //Button definitions enum buttonEnum { BTN_NONE, BTN_STOP, BTN_START, BTN_DOWN, BTN_UP, BTN_BIG }; //void stopButtonPressed(void); //void startButtonPressed(void); void downButtonPressed(void); void upButtonPressed(void); Button* startButton; Button* stopButton; Button* downButton; Button* upButton; Button* bigButton; //Menu definitions enum menuEnum { TIMER, OFF_FMT, OFF_MSB, OFF_LSB, ON_FMT, ON_MSB, ON_LSB, LOOP }; enum formatEnum { HH_MM, MM_SS }; enum loopEnum { OFF, ON, DONE }; String menuText[] = { "", "OFF ", "OFF ", "ON ", "ON ", "LOOP" }; String formatText[] = { "hhnn", "nnss" }; String loopText[] = { "ON ", "OFF " }; #define SETUP_FLASH_TIME 200 #define TIMER_FLASH_TIME 500 bool flashState = false; bool flashTime = false; bool flashColon = false; unsigned long pauseDelay = 0; bool inMenu = true; menuEnum menuSelect = TIMER; bool forceMenuUpdate = true; //EEPROM handling #define EEPROM_ADDRESS 0 #define EEPROM_MAGIC 0x0DAD0BAD typedef struct { uint32_t magic; formatEnum offFormat; int offMsb; int offLsb; formatEnum onFormat; int onMsb; int onLsb; loopEnum timerLoop; } EEPROM_DATA; volatile EEPROM_DATA ee; //Current EEPROM settings volatile loopEnum timerState = OFF; volatile int timerHours = 0; volatile int timerMinutes = 0; volatile int timerSeconds = 0; volatile bool timerPaused = false; volatile bool timerChanged = false; volatile bool timerRelayChange = false; bool relayIsOn = false; //------------------------------------------------------------------------- //Initialise Hardware void setup() { readEepromData(); pinMode(SW_START, INPUT_PULLUP); pinMode(SWITCHES, INPUT); pinMode(RELAY, OUTPUT); digitalWrite(RELAY, LOW); relayIsOn = false; setupDisplay(MAX7219_DATA,MAX7219_CLK,MAX7219_LOAD); //Initialise buttons startButton = new Button(BTN_START, SWITCHES, 570, 669, false); startButton->Repeat(startButtonPressed); stopButton = new Button(BTN_STOP, SWITCHES, 670, 750, false); stopButton->Repeat(stopButtonPressed); downButton = new Button(BTN_DOWN, SWITCHES, 0, 100, false); downButton->Repeat(downButtonPressed); upButton = new Button(BTN_UP, SWITCHES, 460, 569, false); upButton->Repeat(upButtonPressed); bigButton = new Button(BTN_BIG, SW_START); // Initialize RTC while (RTC.STATUS > 0); // Wait until registers synchronized RTC.PER = 1023; // Set period 1 second RTC.CLKSEL = RTC_CLKSEL_INT32K_gc; // 32.768kHz Internal Oscillator RTC.INTCTRL = RTC_OVF_bm; // Enable overflow interrupt RTC.CTRLA = RTC_PRESCALER_DIV32_gc | RTC_RTCEN_bm;// Prescaler /32 and enable timerPaused = true; //Stop timer timerChanged = true; //Force repaint inMenu = true; //Menu mode pauseDelay = millis() + SETUP_FLASH_TIME; //Used to flash active setting //Enable interrupts sei(); } //------------------------------------------------------------------------- // Handle main loop void loop() { //No need to test buttons, callback routines will be invoked if pressed startButton->Pressed(); stopButton->Pressed(); upButton->Pressed(); downButton->Pressed(); if (inMenu) { if (millis() > pauseDelay) { flashColon = !flashColon; pauseDelay = millis() + SETUP_FLASH_TIME; forceMenuUpdate = true; } if (forceMenuUpdate) { displayMenu(); } if (menuSelect == TIMER && bigButton->Pressed()) { if (ee.offMsb != 0 || ee.offLsb != 0) { writeEepromData(); timerState = OFF; timerChanged = true; if (ee.offFormat == HH_MM) { timerSeconds = 0; timerMinutes = ee.offLsb; timerHours = ee.offMsb; } else { timerSeconds = ee.offLsb; timerMinutes = ee.offMsb; timerHours = 0; } inMenu = false; timerPaused = false; timerRelayChange = true; } else if (ee.onMsb != 0 || ee.onLsb != 0) { writeEepromData(); timerState = ON; timerChanged = true; if (ee.onFormat == HH_MM) { timerSeconds = 0; timerMinutes = ee.onLsb; timerHours = ee.onMsb; } else { timerSeconds = ee.onLsb; timerMinutes = ee.onMsb; timerHours = 0; } inMenu = false; timerPaused = false; timerRelayChange = true; } else { displayString("Err ", false, true); } } } else { //Handle coundown processTimer(); if ((timerPaused || timerState == DONE) && bigButton->Pressed()) { timerPaused = true; //Stop timer timerChanged = true; //Force repaint inMenu = true; //Menu mode timerRelayChange = true; //Force relay change pauseDelay = millis() + SETUP_FLASH_TIME; //Used to flash active setting } } if (timerRelayChange) { bool on = (!inMenu && (timerState == ON)); if (relayIsOn != on) { digitalWrite(RELAY, (on) ? HIGH : LOW); relayIsOn = on; beepRelay(); } timerRelayChange = false; } delay(100); } //------------------------------------------------------------------------- // In timer mode void processTimer() { if (timerChanged || millis() > pauseDelay) { if (timerPaused) { flashState = !flashState; flashTime = !flashTime; } else { flashState = true; flashTime = true; } flashColon = !flashColon; pauseDelay = millis() + TIMER_FLASH_TIME; displayString((timerState == OFF) ? "OFF " : (timerState == ON) ? "ON " : "dONE", true, flashState); if ((timerState == OFF && ee.offFormat == HH_MM) || (timerState == ON && ee.onFormat == HH_MM)) { displayDigits(timerHours, false, true, false, flashColon, flashTime); displayDigits(timerMinutes, false, false, true, false, flashTime); } else { displayDigits(timerMinutes, false, true, false, flashColon, flashTime); displayDigits(timerSeconds, false, false, true, false, flashTime); } timerChanged = false; } } //--------------------------------------------------------------- // Countdown the timer. // This is invoked by RTC ISR every second void countDownTimer() { bool testAgain; if ((timerState == OFF && ee.offFormat == HH_MM) || (timerState == ON && ee.onFormat == HH_MM)) { //HH-MM format if (timerSeconds > 0) { timerSeconds--; } else if (timerMinutes > 0) { timerSeconds = 59; timerMinutes--; timerChanged = true; } else if (timerHours > 0) { timerSeconds = 59; timerMinutes = 59; timerHours--; timerChanged = true; } testAgain = true; while (testAgain) { testAgain = false; if (timerSeconds == 0 && timerMinutes == 0 && timerHours == 0) { if (timerState == OFF) { timerState = ON; timerSeconds = 0; timerMinutes = ee.onLsb; timerHours = ee.onMsb; timerChanged = true; timerRelayChange = true; testAgain = true; } else if (ee.timerLoop == ON) { timerState = OFF; timerSeconds = 0; timerMinutes = ee.offLsb; timerHours = ee.offMsb; timerChanged = true; timerRelayChange = true; testAgain = true; } else { timerState = DONE; timerRelayChange = true; stopButtonPressed(); } } } } else { //MM-SS format if (timerSeconds > 0) { timerSeconds--; timerChanged = true; } else if (timerMinutes > 0) { timerSeconds = 59; timerMinutes--; timerChanged = true; } testAgain = true; while (testAgain) { testAgain = false; if (timerSeconds == 0 && timerMinutes == 0 && timerHours == 0) { if (timerState == OFF) { timerState = ON; timerSeconds = ee.onLsb; timerMinutes = ee.onMsb; timerHours = 0; timerChanged = true; timerRelayChange = true; testAgain = true; } else if (ee.timerLoop == ON) { timerState = OFF; timerSeconds = ee.offLsb; timerMinutes = ee.offMsb; timerHours = 0; timerChanged = true; timerRelayChange = true; testAgain = true; } else { timerState = DONE; timerRelayChange = true; stopButtonPressed(); } } } } } //--------------------------------------------------------------- // RTC Interrupt Handler ISR(RTC_CNT_vect) { if (!timerPaused) { countDownTimer(); } RTC.INTFLAGS = RTC_OVF_bm; // Reset overflow interrupt } //------------------------------------------------------------------------- // Callback for when START button is pressed void startButtonPressed() { if (inMenu) { beepDigit(); menuSelect = (menuSelect == LOOP) ? TIMER : (menuEnum)((int)menuSelect + 1); forceMenuUpdate = true; } else if (timerPaused && timerState != DONE) { timerChanged = true; timerPaused = false; } } //------------------------------------------------------------------------- // Callback for when STOP button is pressed void stopButtonPressed() { if (inMenu) { beepDigit(); menuSelect = (menuSelect == TIMER) ? LOOP : (menuEnum)((int)menuSelect - 1); forceMenuUpdate = true; } else if (!timerPaused) { timerChanged = true; timerPaused = true; flashState = true; flashTime = true; flashColon = true; } } //------------------------------------------------------------------------- // Callback for when + button is pressed void upButtonPressed() { if (inMenu) { forceMenuUpdate = true; switch (menuSelect) { case OFF_FMT: ee.offFormat = (ee.offFormat == HH_MM) ? MM_SS : HH_MM; break; case OFF_MSB: ee.offMsb = min(ee.offMsb + 1, 99); break; case OFF_LSB: ee.offLsb = min(ee.offLsb + 1, 59); break; case ON_FMT: ee.onFormat = (ee.onFormat == HH_MM) ? MM_SS : HH_MM; break; case ON_MSB: ee.onMsb = min(ee.onMsb + 1, 99); break; case ON_LSB: ee.onLsb = min(ee.onLsb + 1, 59); break; case LOOP: ee.timerLoop = (ee.timerLoop == ON) ? OFF : ON; break; default: forceMenuUpdate = false; break; } if (forceMenuUpdate) { beepDigit(); flashColon = true; displayMenu(); } } } //------------------------------------------------------------------------- // Callback for when - button is pressed void downButtonPressed() { if (inMenu) { forceMenuUpdate = true; switch (menuSelect) { case OFF_FMT: ee.offFormat = (ee.offFormat == HH_MM) ? MM_SS : HH_MM; break; case OFF_MSB: ee.offMsb = max(ee.offMsb - 1, 0); break; case OFF_LSB: ee.offLsb = max(ee.offLsb - 1, 0); break; case ON_FMT: ee.onFormat = (ee.onFormat == HH_MM) ? MM_SS : HH_MM; break; case ON_MSB: ee.onMsb = max(ee.onMsb - 1, 0); break; case ON_LSB: ee.onLsb = max(ee.onLsb - 1, 0); break; case LOOP: ee.timerLoop = (ee.timerLoop == ON) ? OFF : ON; break; default: forceMenuUpdate = false; break; } if (forceMenuUpdate) { beepDigit(); flashColon = true; displayMenu(); } } } //------------------------------------------------------------------------- // Display the current menu void displayMenu() { switch (menuSelect) { case TIMER: displayString("PLAY", true, true); displayString(" ", false, true); break; case OFF_FMT: displayFormat("OF F", ee.offFormat); break; case OFF_MSB: displayTime("OF t", ee.offMsb, ee.offLsb, ee.offFormat, true); break; case OFF_LSB: displayTime("OF t", ee.offLsb, ee.offMsb, ee.offFormat, false); break; case ON_FMT: displayFormat("ON F", ee.onFormat); break; case ON_MSB: displayTime("ON t", ee.onMsb, ee.onLsb, ee.onFormat, true); break; case ON_LSB: displayTime("ON t", ee.onLsb, ee.onMsb, ee.onFormat, false); break; case LOOP: displayLoop(ee.timerLoop); break; } forceMenuUpdate = false; } //------------------------------------------------------------------------- // Display the time format // s - String to display on top line // fmt - Format void displayFormat(String s, formatEnum fmt) { displayString(s, true, true); displayString((fmt == HH_MM) ? "hhnn" : "nnSS", false, flashColon); } //------------------------------------------------------------------------- // Display the time format // s - String to display on top line // dyn - Dynamic variable to set // sta - Static variable to show // fmt - Format // left - true if adjusting left digit void displayTime(String s, int dyn, int sta, formatEnum fmt, bool left) { displayString(s, true, true); if (left) { displayDigits(dyn, false, true, true, flashColon, flashColon); displayDigits(sta, false, false, true, false, true); } else { displayDigits(sta, false, true, true, flashColon, true); displayDigits(dyn, false, false, true, false, flashColon); } } //------------------------------------------------------------------------- // Display the time format void displayLoop(loopEnum fmt) { displayString("LOOP", true, true); displayString((fmt == ON) ? "ON " : "OFF ", false, flashColon); } //--------------------------------------------------------------- //Write the EepromData structure to EEPROM void writeEepromData() { //This function uses EEPROM.update() to perform the write, so does not rewrites the value if it didn't change. #ifdef __AVR_ATtiny1614__ eeprom_update_block (( void *) &ee , ( void *) EEPROM_ADDRESS, sizeof(ee)); #else EEPROM.put(EEPROM_ADDRESS,ee); #endif } //--------------------------------------------------------------- //Read the EepromData structure from EEPROM, initialise if necessary void readEepromData() { //Eprom #ifdef __AVR_ATtiny1614__ eeprom_read_block (( void *) &ee , ( const void *) EEPROM_ADDRESS, sizeof(ee)); #else EEPROM.get(EEPROM_ADDRESS,ee); #endif #ifndef RESET_EEPROM if (ee.magic != EEPROM_MAGIC) #endif { ee.magic = EEPROM_MAGIC; ee.offFormat = MM_SS; ee.offMsb = 0; ee.offLsb = 0; ee.onFormat = MM_SS; ee.onMsb = 0; ee.onLsb = 0; ee.timerLoop = OFF; writeEepromData(); } } //----------------------------------------------------------------------------------- //Turn on and off buzzer quickly void beepDigit() { //PB3 #define BUZZER_PORT PORTB #define BUZZER_PIN PIN3_bm BUZZER_PORT.OUTSET = BUZZER_PIN; // turn on buzzer delay(5); BUZZER_PORT.OUTCLR = BUZZER_PIN; // turn off the buzzer } //----------------------------------------------------------------------------------- //Turn on and off buzzer quickly void beepRelay() { BUZZER_PORT.OUTSET = BUZZER_PIN; // turn on buzzer delay(20); BUZZER_PORT.OUTCLR = BUZZER_PIN; // turn off the buzzer }   ### ARROW ELECTRONICS LAUNCHES MULTI-PURPOSE IOT EDGE NODE AND GATEWAY Arrow Electronics, Inc. and Shiratech have announced the launch of IoT Box, a multi-purpose IoT edge node and gateway solution that enables sensors and actuators to be connected directly to the cloud. IoT Box was developed by Arrow and Shiratech in conjunction with STMicroelectronics (ST). Potential uses for the product include air quality monitoring, safe city/smart city, voice-sensing, home appliance, smart edge node, and industrial gateway applications. At the heart of IoT Box is Stinger96, a single board gateway based on the 96Boards IoT Edition specification, which is coupled with a proprietary mezzanine board to provide multiple wireless connectivity and sensor options. IoT Box is battery-powered, simplifying deployment in areas where mains power may be inaccessible or costly to access, and runs Linux Yocto. Stinger96 is designed around ST’s STM32MP157 microprocessor based on dual Arm® Cortex®-A7 cores and an Arm Cortex-M4 core. The board supports LTE Cat-M1, NB-IoT and EGPRS wireless connectivity with maximum data rates of up to 375/300 kbps uplink and downlink, respectively.   It features global frequency bands, GPS and ultra-low-power consumption. Hardware connectivity includes micro USB, micro SD and micro SIM. The Stinger96 board is available separately for users who wish to develop their own gateways. Read more: ARROW ELECTRONICS LAUNCHES MULTI-PURPOSE IOT EDGE NODE AND GATEWAY ### A DIY ELECTRONIC LOAD FOR DC-DC CONVERTER CHARACTERIZATION The heart of the system is an Atmel ATmega328P AVR microcontroller with 32kB of Flash and 2k of RAM running at a whopping 16MHz. It interfaces an I2C 12bit DAC (the MCP47FEB21A1) and the LTC2992 dual power monitor chip. The USB serial interface uses the MCP2221A bridge. The display is a classic 16×2 LCD. On the analog part, 10mΩ and 0.2Ω shunt resistors are used, coupled with two W9NK90Z N-ch power MOSFETS. The heatsink was salvaged from an old graphics card. Attached are a 10k NTC and a generic fan (12v @ 200mA, 80mm). Current regulation is achieved through the help of a MCP6H02 opamp, and a carefully designed feedback network which guarantees the specified rise time with little to no overshoot. The layout was done using the Eagle software (v9.5.2). Gerbers, Eagle project files, top and bottom views are available on the pcb folder. PCBs were printed using JLCPCB service. The schematic is available in a pdf and Eagle .sch format as well. Several user-definable bi-color status LEDs are included, such as Load ON/OFF, TX & RX, acquisition blink, as well as a power LED. Read more: A DIY ELECTRONIC LOAD FOR DC-DC CONVERTER CHARACTERIZATION ### MASS PRODUCTION 3D PRINTING HACK CHAT We’ll take a wild guess and say that right now, within arm’s length of wherever you’re reading this, there’s something that was produced by injection molding. Look around; it’s there someplace, and whatever it is, thousands or perhaps millions of other identical artifacts were produced along with it, all by squeezing hot plastic into intricately machined metal tools. It’s not much of an overstatement to say that, for good or for ill, the world is made from injection-molded plastic. But not every product can support the often considerable up-front costs associated with injection molding. The tooling needed is often remarkably complicated and correspondingly expensive, and running the machines that actually do the molding is expensive and highly specialized. Unless you’re committed to making a lot of parts, injection molding might just be out of your league. But does that mean that medium-sized runs of parts are out of luck? Not at all! Gabe Bentz, founder and CEO of Slant 3D, is passionate about filling the manufacturing void where injection molding is prohibitive, either by virtue of start-up costs or because the part design is just not possible to manufacture. His massive print farms are busy day in and day out cranking out parts for customers that otherwise couldn’t be made. So if you’ve ever wondered what it takes to run a print farm, and what kinds of design considerations make a part a candidate for mass production by 3D printing, drop by the chat and we’ll see what he has to tell us. Source: MASS PRODUCTION 3D PRINTING HACK CHAT ### Remote control of a multi-light chandelier with Arduino Story: It all began with a seemingly simple intention – replacing the bulbs in the chandelier adorning my bedroom. As you can observe in the accompanying image, the chandelier boasts an elegant design. Yet, a minor predicament emerged. To begin with, the fixture comprises a total of 15 illuminations and was initially crafted to accommodate G4 2-pin halogen bulbs. These petite culprits had an appearance akin to this: These bulbs likely ranged from 15 to 20 watts each, offering no option for partial individual control within the chandelier. The only choice available was to either switch them all on simultaneously or turn them all off. Consequently, the chandelier's operation amounted to a staggering power consumption of 225 to 300 watts. Adding to the predicament, the G4 halogen bulbs exhibited considerable unreliability, often failing within a span of mere months. Consequently, only a meager 7 to 8 bulbs remained operational at any given time. However, matters took a turn for the better with the widespread adoption of LED technology. The bulbs pictured below performed the same task but with significantly reduced costs and energy consumption. Each of these new bulbs consumes a mere 2-3 watts while providing a comparable level of illumination. Moreover, they are reputed to be considerably more dependable – at least in theory. However, the reality proved somewhat different. Surprisingly, I found myself replacing these bulbs nearly as frequently as their halogen predecessors. The reasons behind this phenomenon remain uncertain. It's possible that an issue with my installation was causing the bulbs to emit a faint glow even when switched off during nighttime hours. For a more in-depth exploration of this intriguing occurrence, you can delve into this informative article. Additionally, sourcing warm light bulbs of this specific size for 220 volts posed a challenge. I found myself investing considerable time perusing Amazon in search of reasonably priced replacements. Eventually, my efforts paid off when I stumbled upon a promising deal – G4 LED bulbs, featuring 2 pins and emitting a warm light. Without delay, I placed an order for 30 units, only to realize later that they were actually intended for 12 volts, not the 220-volt setting I needed. Despite this mishap, they did offer an appealing aesthetic. Upon linking them to a laboratory power supply, the readings consistently indicated 0.1 amp at 12 volts, translating to 1.2 watts per bulb. This calculation led to a total power consumption of 18 watts for all 15 lights – an impressively efficient outcome! Consequently, I arrived at the decision that an adapter facilitating the conversion from 220 volts to 12 volts was in order. My choice was guided by the requirement for a continuous output of approximately 1.5 amps, motivating me to acquire one of these adapters. Upon removing the chandelier from the ceiling and inserting all the bulbs, the outcome was nothing short of ideal. The illumination emitted was consistently warm and unwavering, and the adapter capably managed the power demand of all 15 lights without a hitch. However, a rather perplexing obstacle surfaced – concealing the adapter behind the ceiling proved to be an insurmountable challenge, despite its relatively modest size. An unintended hiccup, indeed. In a determined attempt to salvage the situation, I embarked on disassembling the adapter, holding onto the glimmer of hope that the electronic board could be extracted and integrated within the chandelier itself. Regrettably, this endeavor revealed that the board's dimensions remained excessive for such integration. Frustration mingled with determination, leading me to a decision: I would painstakingly resolder the adapter onto a smaller prototype board, carefully tailored to snugly fit the chandelier's confines. The subsequent phase proved far from straightforward – re-soldering the SMD components presented an arduous undertaking, a process I would strongly advise against attempting, unless you're a seasoned expert. Looking on the bright side, I stumbled upon a circuit diagram that closely resembled the adapter's configuration, providing me with a newfound understanding of these intricate components. Now, you might be wondering – where does Arduino fit into this narrative? Rest assured, the Arduino element is about to make its entrance. I invite you to stay with me as we journey onward. Before delving into the Arduino-related details, I couldn't contain my elation as I witnessed the fruit of several weekends' labor – my meticulously crafted circular adapter seamlessly springing to life. In that very instant, an idea ignited within me. With a 12-volt supply firmly established, a sense of creative opportunity beckoned for my chandelier. The stage was set, with a compact circular compartment positioned just above the larger one I had dedicated to the adapter. The once-vacant space seemed tailor-made for the presence of an Arduino Nano. And now, the moment calls for an exhilarating introduction. Enthusiasts and spectators, let's give a warm round of applause to the Arduino Magic Lamp project. With the invaluable assistance of the Arduino IR remote, this project empowers you to: Ladies and gentlemen, brace yourselves for the unveiling of the sensational Arduino Magic Lamp project. Equipped with the remarkable Arduino IR remote, this project bestows upon you the power to: 1. Seamlessly toggle individual or all chandelier bulbs on and off, or opt for an engaging running light display. 2. Effortlessly shift the lights' pattern in a two-way motion, invoke inversions, or indulge in the mesmerizing running light effect. 3. Securely preserve your preferred light configuration within the realm of non-volatile memory. 4. Automate the chandelier's activation or deactivation in response to the ambient illumination level of your space. Furthermore, you can customize the illumination threshold that triggers the chandelier's illumination using the same IR remote. This threshold value is seamlessly stored within the non-volatile memory. As a humorous aside, while I jest, I regret to inform you that the project does not include the capability to fetch beer from the nearest supermarket. (Please note: This is a jest and not an actual feature of the project.) Displayed below is the circuit diagram for the lamp: The depicted diagram showcases a design of utmost simplicity, devoid of any need for elusive components. With my chandelier encompassing a total of 15 bulbs, I opted to amalgamate them into distinct switching groups, designated as SG1-5, each accommodating three bulbs – a choice made to maintain straightforwardness. For secure and dependable switching via Arduino's digital output, a cascade of transistors, T1.1-1.2, has been orchestrated. While T1.2 has the potential for installation on a heatsink, my specific setup rendered this step redundant. Given that the open-state current it handles is a mere 0.1 Amp multiplied by 3, amounting to 0.3 Amps or 0.018 watts for the active transistor, the task proved effortless for the D882 transistor. It possesses a capacity to manage up to 1 watt of dissipation sans any cooling mechanism. In my scenario, the Arduino digital outputs, D2-D6, orchestrated the switching process. Should the need arise, this number can be conveniently augmented to 10 with slight amendments to the Arduino sketch. Suffice it to say, this expansion comfortably accommodates the demands of most residential chandeliers. The sketch for this project is below. #include #include const uint8_t POWER_BIT = 0xF; const uint16_t POWER = 0x45; // Power button (requires 3-sec long press for activation) const uint16_t KEY_0 = 0x16; // 1 light const uint16_t KEY_1 = 0x0C; // 101 light combination const uint16_t KEY_2 = 0x18; // 10101 const uint16_t KEY_3 = 0x5E; // 11110 const uint16_t KEY_4 = 0x08; // 11111 (all on) const uint16_t KEY_5 = 0x1C; // intro increasing right-to-left till all on state const uint16_t KEY_6 = 0x5A; // increasing left-to-righ till all on state const uint16_t KEY_7 = 0x42; // increasing to center till all on state const uint16_t KEY_8 = 0x52; // increasing from center till all on state const uint16_t KEY_9 = 0x4A; // running light then all on const uint16_t KEY_UP = 0x09; // shift up const uint16_t KEY_DOWN = 0x07; // shift down const uint16_t KEY_VUP = 0x46; // adding 1 light const uint16_t KEY_VDOWN = 0x15; // removing 1 light const uint16_t KEY_ST_REPT = 0x0D; // store config of lights in non-volatile memory const uint16_t KEY_EQ = 0x19; // invert lights const uint16_t KEY_FF = 0x43; // circular shift up (running light effect) const uint16_t KEY_FB = 0x44; // circular shift down const uint16_t KEY_PP = 0x40; // circular shift pause/play const uint16_t KEY_FUNC = 0x47; // func key for setting max/min amb light const uint16_t VENDORID = 0xFF00; // not used const uint16_t ADDRESS = 0x0000; // address of the device const uint16_t ALL_ON = 0x801F; // all on const uint16_t ALL_OFF = 0x8000; // all off uint16_t command = 0x0; uint16_t prev_command = 0x0; uint16_t prev2 = 0x0; const uint8_t MAX_COUNT = 0xF; const uint8_t LONG_PRESS = 3; // number of cycles a button need to be pressed to recognize long press const int SAVED_STATE_ADDR = 0; uint8_t com_count = 0; uint8_t cycle = 0; const int RECV_PIN = 10; // Arduino pin where the IR receiver is connected const int FEEDB_PIN = 12; // Arduino pin where the IR feedback LED is connected IRrecv irrecv(RECV_PIN); const int STARTPIN = 2; const int MAXPINS = 5; const int MIDPIN = ceil(MAXPINS/2); uint16_t state = ALL_ON; // Bitfield for storing current state of the Magic Lamp. const uint16_t DEFAULT_MAX_AMBLIGHT = 0xFFFF; // default max ambient light (always on) const int MAX_DISP = 0xA; // max disp const int SAVED_MAXALGHT_ADDR = sizeof(uint16_t); // address to save max const int SAVED_MINALGHT_ADDR = 2*sizeof(uint16_t); // address to save min uint16_t max_amblight = DEFAULT_MAX_AMBLIGHT; // maximum amblight threshold uint16_t min_amblight = 0x0; // minimmum amblight threshold uint16_t light_readings[MAX_COUNT]; // stack of last amb light readings void setup(){ for(int i=0; i> 1; bitWrite(state, MAXPINS-1, buf); } state = ALL_OFF + lowByte(state); } bool isplayable(uint16_t command) { return (command == KEY_FF) || (command == KEY_FB); } uint16_t get_run_avg(uint16_t light) { long total=0; for(int i=0; i1) { if(!isOn) switchon(); else switchoff(); } break; case KEY_0: state = 0x8001; break; case KEY_1: state = 0x8005; break; case KEY_2: state = 0x8015; break; case KEY_3: state = 0x800F; break; case KEY_4: state = 0x801F; break; case KEY_5: case KEY_6: case KEY_7: case KEY_8: case KEY_9: state = ALL_OFF; cycle = 0; break; case KEY_FF: case KEY_FB: break; case KEY_EQ: if(isOn && (onCount()= 0; i--) if(bitRead(state,i)) { bitWrite(state,i,LOW); if((lowByte(state) & 0x1F) == 0) bitWrite(state, POWER_BIT, LOW); break; } break; case KEY_ST_REPT: if(isOn && com_count > LONG_PRESS) { // Long press, store current state EEPROM.put(SAVED_STATE_ADDR, state); com_count = 0; blink(3, 200); // Serial.println("State stored!"); } if(!isOn) { // restore state from NVR EEPROM.get(SAVED_STATE_ADDR, state); if(!bitRead(state, POWER_BIT)) state = ALL_ON; } break; default: // Serial.println("Not supported"); break; } } irrecv.resume(); } else { com_count = 0; } if(bitRead(state, POWER_BIT)) { switch(prev_command) { case KEY_5: if(cycle < MAXPINS ) bitWrite(state, cycle, HIGH); else prev_command = 0; break; case KEY_6: if(cycle < MAXPINS ) bitWrite(state, MAXPINS-cycle-1, HIGH); else prev_command = 0; break; case KEY_7: if(cycle < MIDPIN + 1 ) { bitWrite(state, MIDPIN + cycle, HIGH); bitWrite(state, MIDPIN - cycle, HIGH); } else prev_command = 0; break; case KEY_8: if(cycle < MIDPIN + 1) { bitWrite(state, cycle, HIGH); bitWrite(state, MAXPINS - cycle-1, HIGH); } else prev_command = 0; break; case KEY_9: if(cycle < MAXPINS ) { state = ALL_OFF; bitWrite(state, cycle, HIGH); } else{ state = ALL_ON; prev_command = 0; } break; case KEY_FF: if(onCount() max_amblight) && (disp < MAX_DISP)) { switchoff(); } if((!bitRead(state,POWER_BIT)) && (light < min_amblight) && (disp < MAX_DISP)) { switchon(); } // Serial.println(state, HEX); // Write state to pins for(int i=0; i MAX_COUNT || !bitRead(state,POWER_BIT)) cycle = 0; else cycle++; if(!bitRead(state,POWER_BIT)) digitalWrite(FEEDB_PIN, HIGH); } The operation is largely self-evident – during each cycle, Arduino evaluates the incoming IR commands and activates the appropriate lights as required. It's worth noting that you might need to tailor the sketch to match your particular remote, as I utilized the resources at my disposal: The potential to employ a universal remote is within reach, or you can customize the key codes directly within the Arduino sketch. To unlock the special features enabling automatic chandelier activation or deactivation in response to ambient illumination, initiate the sequence by pressing FUNC/STOP, followed by a numeric key (a 3-time blink of the feedback LED confirms activation). The permissible numeric keys for this purpose are outlined below: 1. FUNC/STOP + 0 - Disables all forms of automatic on/off based on ambient light conditions. 2. FUNC/STOP + 1 - Captures and stores the existing ambient light level within the non-volatile memory. Subsequently, if the ambient light surpasses this recorded value, the chandelier will autonomously deactivate. 3. FUNC/STOP + 4 - Deactivates the automatic shutdown function based on the stored ambient value. 4. FUNC/STOP + 3 - Gauges and records the present ambient light level into the non-volatile memory. If the ambient light descends below this saved threshold, the chandelier will automatically activate. 5. FUNC/STOP + 6 - Disables the automatic power-up feature. CAUTION: The power-up and shutdown functionalities are experimental in nature and their efficacy may vary based on your surroundings and the placement of the light-dependent resistor (LDR). Should the outcomes not align with your expectations, you can initiate a reset by pressing FUNC/STOP + 0 and recommence the process. And there you have it! Embrace the experience. If this project resonates with you, please consider bestowing it a star or extending a donation – your support would be greatly appreciated :) ### OFF-GRID RADIO ALSO REPAIRABLE OFF-GRID Low-power radios, often referred to in the amateur radio community as QRP radios, have experienced a resurgence in popularity lately. Blame it on certain parts of the hobby become more popular, like Parks on the Air (POTA) or Summits on the Air (SOTA). These are events where a radio operator operates off-grid at remote parks or mountaintops. These QRP rigs are a practical and portable way to make contacts. You would think that a five- or ten-watt rig running on batteries would be simple. Surprisingly, they can be enormously complex and expensive. That’s why [Stephen] built the RFBitBanger, a QRP radio designed to not only be usable off-grid but to be built and maintained off-grid as well. The radio accomplishes this goal by being built out of as many standard off-the-shelf components as possible. It eschews modern surface-mount components in favor of the much more accessible through-hole parts, including the ATMEGA328P at the center of the build. A PCB design is also available, but it can be built on perf board nearly as easily. The radio supports any mode a QRP operator might use, including CW, SSB, RTTY, and a new mode designed explicitly for this radio called SCAMP which is a low bandwidth, low SNR digital mode built into the Arduino-based firmware. It’s a single-band radio, but any band between 20 and 80 meters can be selected with pluggable filters. As far as bomb-proof radios go, we can’t imagine a better way to live out an apocalypse than with a radio like this. As long as there’s a well-stocked parts drawer around, this radio could theoretically reach around the world without worrying about warranty claims, expensive parts, or even a company going out of business or not stocking parts for old radios anymore. There’s also more information about this build at the Open Research Institute for those interested. And, if you’re wondering how useful any radio could be using only five watts of transmitter power, take a look at this in-depth look at QRP radio operation. Source: OFF-GRID RADIO ALSO REPAIRABLE OFF-GRID ### FIRST 008004 MLCC WITH 0.1-ΜF CAPACITANCE Murata Electronics today announced the availability of the GRM011R60J104M, the world’s first multi-layer ceramic capacitor (MLCC) that features a maximum capacitance of 0.1µF in a 008004 (0.25×0.125mm) package. The solution also delivers a capacitance tolerance of ±20 percent, usage temperature range of -55°C to 85°C, and rated voltage of 6.3Vdc. By using proprietary ceramic and electrode material atomization and homogenization technology, Murata achieved a mounting surface area approximately half the size and a volume (LxWxH) approximately 80 percent smaller than conventional products in a 01005 package. Additionally, the GRM011R60J104M has nearly 10 times the capacity of similarly-sized products. The demand for smaller and higher density electronic circuitry is growing exponentially as 5G smartphones and devices such as wearables become more widespread, multifunctional, and compact. For example, higher end smartphones alone are generally equipped with 800 to 1,000 components. Read more: FIRST 008004 MLCC WITH 0.1-ΜF CAPACITANCE ### M5STACK ATOM ECHO – THE MINIATURE PROGRAMMABLE SMART SPEAKER M5Stack ATOM ECHO is a tiny programmable smart speaker. Its design is based on the M5ATOM series of products. The slim design has a dimension of 24×24 and is 17mm in height. Its premium finish gives it a professional look and makes it easy to carry anywhere. M5Stack ATOM ECHO can be programmed to be voice-controlled, which means that when it is powered on, the program is uploaded. You can simply ask for things like music, news, information, and more. Input your voice through the microphone of M5Stack ATOM ECHO, and output the text in your device using text to speech APIs. It could also be programmed to control compatible smart devices in your home with just the sound of your voice. For best results, you can program it to access AWS and other cloud platforms. The speaker has an integrated RGB LED light (SK6812), which can visually display the connection status. As a smart speaker, it can control the ATOM series. You can connect devices through the grove interface. Pins G21/G25 can be used for general-purpose I/O, they do not support I2C and UART however. Screw holes on the back are convenient for users to affix the device in place. Product Features Based on ESP32, Support A2DP, BLE 4.0IEEE 802.11b/g/nBuilt-in microphone and speakerRGB LED status display indication Read more: M5STACK ATOM ECHO – THE MINIATURE PROGRAMMABLE SMART SPEAKER ### LINUX, RUNNING ON NOT A LOT There are many possible answers to the question of what the lowest-powered hardware on which Linux could run might be, but it’s usually a pre-requisite for a Linux-capable platform to have a memory management unit, or MMU. That’s not the whole story though, because there are microcontroller-focused variants of the kernel which don’t require an MMU, including one for the Xtensa cores found on many Espressif chips. It’s this that [Naveen] is using to produce a computer which may not be the Linux computer with the lowest processor power, but could be the one consuming the least electrical power.       The result is definitely not a Linux powerhouse, but with its Arduino-sourced ESP32 board stacked on an UNO and I2C keyboard and display, it’s an extremely lightweight device. The question remains, though, is it more than a curiosity, and to what can it do? The chief advantage it has over its competitors such as the Raspberry Pi Zero comes in low power consumption, but can its cut-down Linux offer as much as a full-fat version? We are guessing that some commenters below will know the answer. If you’re curious about the Xtensa version of Linux, it can be found here, Source: LINUX, RUNNING ON NOT A LOT ### 2023 CYBERDECK CONTEST: A TODDLER’S CYBERDECK [Josh] has a child and what do children like more than stuffing random things into their mouths? Pushing buttons, twiddling knobs, and yanking things of course! So [Josh] did what any self-respecting hacker would do and built his little man a custom cyberdeck. The build follows the usual route of some electronics wedged into a pelican-style waterproof case — which is a good choice for this particular owner — a repurposed all-in-one LCD video player in the lid and a bunch of switches in the base. The player is apparently a V100-base SBC the likes of which are used in shops for those annoying looping promotional videos, but it doesn’t really matter if all it’s doing is being a focus point. There is no connection from the base to the ‘display’ but that doesn’t matter here. The base is the fun part, with lots of old-school toggle switches and rotary knobs to play with and a load of LEDs to flash in mysterious ways. The guts of this are controlled via an Arduino Mega 2560, with copious amounts of hot glue on display in true hacker style. On the coding side of things, [Josh] used ChatGPT to produce the code from his prompting and Wokwi  to simulate it before deployment to the hardware. Source: 2023 CYBERDECK CONTEST: A TODDLER’S CYBERDECK ### Utilizing the W5300 TOE Shield with Arduino IDE and STM32 Nucleo-F429ZI: A Comprehensive Guide Narrative 0. Preface This guide is dedicated to instructing you on the utilization of the W5300 TOE Shield in tandem with the Arduino IDE, particularly when paired with the STM32 Nucleo-F429ZI board. Within this document, we shall furnish a comprehensive, step-by-step tutorial encompassing the configuration of the Arduino IDE, establishment of hardware connections, and validation of Ethernet functionality. Additionally, we will demonstrate the process of linking the W5300 TOE Shield to the Bee botte cloud platform, empowering you to seamlessly transmit and receive data across global boundaries. The W5300 TOE shield serves as a hardware module, tailored for employment with Arduino-compatible boards, designed to deliver network connectivity. This specialized chip streamlines the intricacies of TCP/IP communication, thereby facilitating swift and efficient data exchange over Ethernet channels. On a parallel note, Beebotte stands as a cloud-centric platform offering real-time data management and communication solutions for interconnected devices and applications. Its capabilities empower developers to construct and manage IoT applications adept at aggregating, processing, and responding to data sourced from sensors, actuators, and other interconnected devices. 1. Element In order to employ the W5300 TOE Shield within the Arduino IDE environment, it necessitates the utilization of the STM Nucleo F429ZI board. Compatibility with other boards is currently pending. Physical Components W5300 TOE Shield STM32 Nucleo-F429ZI Board LED Software Arduino IDE Beebotte Cloud 2. Utilizing the W5300 TOE Shield in Arduino IDE 2.1. Setting Up the Arduino IDE 1) Incorporate Libraries Download the  Wiznet/W5300-TOE-Arduino repository from here. 2) Integrate Libraries Download this repository Wiznet/W5300-TOE-Arduino. Copy the Ethernet and FMC folders from the repository, and then paste them into the designated directory on your computer:C: C:\\Users_YOUR_NAME_\\AppData\\Local\\Arduino15\\libraries 3) Install board manager nstall "STM32 MCU based boards" in the Board Manager of the Arduino IDE. 2.2 Verification Although not mandatory, this step offers an option to verify the proper functioning of Ethernet. You have the flexibility to bypass this stage if desired. 1) Connect hardware Assemble the W5300 TOE Shield with the Nucleo board. Establish a connection between the Nucleo board and your PC using a 5-pin cable, and subsequently link the W5300 TOE Shield to an Ethernet cable. 2) Upload Navigate to Tools > Board and select "Nucleo-144" from the list of board options Subsequently, navigate to the section labeled "Board part number" and opt for "Nucleo-F429ZI" from the available choices. After following the preceding instructions, you'll discover Nucleo-144 examples within the Arduino IDE's "Examples" section. To validate the proper functionality of Ethernet, we will proceed by loading the basic Chat Server example and conducting a test. Presently, access the Tools menu and proceed to the Port section. Choose the port linked to the board, and to conclude, initiate the upload of the file. 3) Test in Terminal program To validate the connection, you can employ the Hercules terminal program. Launch Hercules and navigate to the TCP Client tab. Here, input the designated IP address and port number. Successful establishment of the connection should result in the display of an echo message within Hercules upon sending a message. Furthermore, you can observe the transmitted message in the serial monitor as well. 3. Connect to Cloud 3.1. Create dashboard Upon establishing a connection with Beebotte, proceed to click the "Create New" button, which will direct you to the channel creation page. Here, configure the board name along with the resource's name and type that you intend to utilize, subsequently generating the channel. Following the channel's creation, you have the ability to access and verify the associated token. Be sure to copy and store this token for future reference and application. Once the dashboard has been established, proceed to incorporate an ON/OFF widget. Designate the resource of this widget to correspond with the LED feature of the Nucleo-F429ZI board. 3.2. Connect LED Establish a connection between the LED and the W5300 TOE Shield by attaching the positive (+) terminal of the LED to the D13 pin, and connecting the negative (-) terminal to the ground pin. For additional details, consult the Arduino pin map provided by the W5300-TOE-Shield. 3.3. Upload file Adjust the LED pin designation to 13, and substitute the token with the copied token value obtained earlier. Furthermore, replace the channel name within the code snippet with the name of the channel you established. #define LEDPIN 13 // Pin which is connected to LED. #define TOKEN "token_jw9p00M4f7b7pqxP" // Set your channel token here #define CHANNEL "NucleoF429ZI" // Set your channel name #define LED_RESOURCE "led" The preceding code initially employed the Beebotte MQTT Domain name; however, due to DNS issues, it was reconfigured to establish an IP-based connection. You are required to update all the values, with the exception of g_target_ip, to align with your specific network configuration. byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; byte g_target_ip[] = {54, 221, 205, 80}; IPAddress ip(192, xxx, xxx, xxx); IPAddress myDns(xxx, xxx, xxx, xxx); IPAddress gateway(xxx, xxx, xxx, xxx); IPAddress subnet(xxx, xxx, xxx, xxx); Upon successfully uploading the code onto the board, you gain the ability to manage the LED status through cloud-based control. A video demonstrating this functionality is provided below. By interacting with the widget, you can observe the LED toggling between the on and off states. #include #include #include #include #include "HardwareSerial.h" #define LEDPIN 13 // Pin which is connected to LED. //#define BBT "54.221.205.80" // Domain name of Beebotte MQTT service #define TOKEN "token_xxxxxxxxx" // Set your channel token here #define CHANNEL "NucleoF429ZI" // Replace with your device name #define LED_RESOURCE "led" // Enter a MAC address of your shield // It might be printed on a sticker on the shield byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; byte g_target_ip[] = {54, 221, 205, 80}; IPAddress ip(000, 000, 000, 000); IPAddress myDns(000, 000, 000, 000); IPAddress gateway(000, 000, 000, 000); IPAddress subnet(000, 000, 000, 000); EthernetClient ethClient; PubSubClient client(ethClient); // to track delay since last reconnection long lastReconnectAttempt = 0; const char chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; char id[17]; const char* generateID() { randomSeed(analogRead(0)); int i = 0; for (i = 0; i < sizeof(id) - 1; i++) { id[i] = chars[random(sizeof(chars))]; } id[sizeof(id) - 1] = '\0'; return id; } // will be called every time a message is received void onMessage(char* topic, byte* payload, unsigned int length) { // decode the JSON payload StaticJsonDocument<256> doc; // Test if parsing succeeded auto error = deserializeJson(doc, payload); if (error) { Serial.print(F("deserializeJson() failed with code ")); Serial.println(error.c_str()); return; } // led resource is a boolean read it accordingly bool data = doc["data"]; // Print the received value to serial monitor for debugging Serial.print("Received message of length "); Serial.print(length); Serial.println(); Serial.print("data "); Serial.print(data); Serial.println(); // Set the led pin to high or low if (data == 0) { digitalWrite(LEDPIN, LOW); } else if (data == 1) { digitalWrite(LEDPIN, HIGH); } // digitalWrite(LEDPIN, data ? HIGH : LOW); } // reconnects to Beebotte MQTT server boolean reconnect() { if (client.connect(generateID(), TOKEN, "")) { char topic[64]; sprintf(topic, "%s/%s", CHANNEL, LED_RESOURCE); client.subscribe(topic); Serial.println("Connected to Beebotte MQTT"); } return client.connected(); } void setup() { pinMode(LEDPIN, OUTPUT); client.setServer(g_target_ip, 1883); client.setServer(BBT, 1883); // Set the on message callback // onMesage function will be called // every time the client received a message client.setCallback(onMessage); // Open serial communications and wait for port to open: Serial3.setRx(PC11); Serial3.setTx(PC10); delay(50); Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // Ethernet.init(17); // start the Ethernet connection: if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); // try to congifure using static IP address instead of DHCP: // Feel free to change this according to your network settings // IPAddress ip(192, 168, 56, 177); Ethernet.begin(mac, ip, myDns, gateway, subnet); } // give the Ethernet shield a second to initialize: delay(1000); Serial.println("connecting..."); lastReconnectAttempt = 0; } void loop() { if (!client.connected()) { // Serial.println("NOT CONNECTED");/ long now = millis(); if (now - lastReconnectAttempt > 5000) { lastReconnectAttempt = now; // Attempt to reconnect if (reconnect()) { lastReconnectAttempt = 0; } } } else { // Client connected // Serial.println("CONNECTED");/ client.loop(); } }   ### HACKADAY PRIZE 2023: UNIVERSAL TENSILE TESTING MACHINE Material testing is important in big industry, where manufacturers must be able to trust the properties of the raw materials they’re using. The rest of us generally take a supplier’s word for it that they’re giving us what we’ve paid for. However, you could always take on material testing yourself with the Universal Tensile Testing Machine from [Xieshi Zhang]. Unlike a six-figure industrial machine, this build is much more affordable, costing on the order of $300 to build. It uses an Arduino to read a tensile strain gauge, and is capable of applying up to a kilonewton of force. To achieve this, it uses a NEMA 17 stepper motor driving a lead screw to apply tensile strain or compression to the specimen under test.  The test fixture is assembled from 3D-printed components, and built on top of a piece of aluminium extrusion. Fundamentally, it’s a smaller version of a machine most engineering undergraduates will see in a materials lab experiment. It could be highly useful for anyone wanting to experiment with 3D printed structures; it would be more than capable of testing various filaments and infill types for their tensile and compression performance. Video after the break. Source: HACKADAY PRIZE 2023: UNIVERSAL TENSILE TESTING MACHINE ### ESP32 BURNINATOR IS A TINY LASER ENGRAVER As the name implies, a linear stepper is linear a variation of the rotary stepper motor design, radially cut and laid out flat. It is similar to the rotary version in operation and performance, and it typically runs as an open-loop system with the ability to provide high resolution at high speeds and accelerations. As a way of experimenting with a few linear stepper motors from Aliexpress, Mike-Rankin recently decided to build a laser engraver which he called the ESP32 Burninator. The device, whose name was inspired by Mike’s long time fandom of the homestarrunnerdotcom videos, at its core comprises of an ESP32,  two linear stepper motors, and a DVD burning laser diode. Mike developed a custom board for the project, designing his own ESP32 board with the components arranged in a way that suits all the other elements of the project.  While the stepper motors lacked the level of strength that could make them useful for cutting or drawing, they have just enough strength to serve as the arm that is used to move the DVD burning laser diode, and also serve as the base on top of which the paper to be engraved on was placed. For focussing the laser, a tiny adjustable lens from the popular laser diodes used in several Arduino projects was savaged by pulling out the visible diode component and replacing it with the DVD diode. Read more: ESP32 BURNINATOR IS A TINY LASER ENGRAVER ### HACKADAY PRIZE 2023: PAROL6 – A GPL DESKTOP ROBOTIC ARM Parol 6 is a 3D-printed six-axis robot arm created by [Petar Crnjak] as a combination of the principles from a few previous projects. Aside from a pneumatic gripper, each axis is driven by a stepper motor, with at least a few of these axes being driven through a metal planetary gearbox for extra precision and torque. From what we can glean from the work-in-progress documentation, there are some belt drives on four of the relevant axes and a mix of NEMA17 format steppers driving either 20:1 or 10:1 reduction boxes. There appears to be a mix of inductive sensors and traditional microswitches used, but it’s not so easy to work out where these are placed. The controller PCB is a custom design based around the STM32F446 microcontroller, with modular drop-in boards for driving the motors, using the Trinamic TMC2209 for super smooth and quiet motion. The KiCAD project seems to be missing at the moment, with only gerbers and BoM for reference, but we expect that to appear at some point. There are some RS485 drivers on there, which is a sensible addition to providing an isolated interface if correctly implemented. There isn’t much detail on the electronics yet, but it all looks pretty standard fayre. The software stack looks like Arduino with a smattering of STM324xx HAL being used directly. The standard AccelStepper library is used, which is a good choice as it’s quite mature. From the video logs in the project page, the robot looks complete, with some pretty good repeatability numbers, but we would like to see some data on absolute positioning accuracy as well, that said it’s a great project with an active Discord behind it, so let’s see how this develops. Source: HACKADAY PRIZE 2023: PAROL6 – A GPL DESKTOP ROBOTIC ARM ### LOW RES ARDUINO THERMAL CAMERA Do you know how you see those cheap telescopes at the department store? The box has beautiful pictures that probably came from the Hubble. What you will see is somewhat different. You have to carefully look at [upir’s] Arduino thermal camera project because it intersperses pictures of what you expect an 8×8 sensor will produce with images produced by a much better camera. The actual project — watch the video below — is undoubtedly neat. An inexpensive 8×8 IR sensor and an 8X8 LED panel join to form a crude but usable thermal camera.   He leverages several ready-made libraries and walks through how and why he chose them and how he had to modify them. We enjoyed the demo of plotting HSV values to the LED array instead of the usual RGB values. Given canned code to read the sensor and drive the LEDs, the rest is easy. Of course, like the dime-store telescope, you aren’t going to get amazing results. On the other hand, you probably have everything you need except the $20 sensor sitting around doing nothing anyway. At around the ten-minute mark, he shows the same sensor in a commercial module that interpolates a higher resolution to an LCD. Still crude, so he also gives a quick review of a commercial camera that plugs into your phone. (You can ignore the video from here on if the stealth advertising bugs you.) We’ve actually looked at that camera before. We’ve also looked at some of the competition. While any of those will beat the 8×8 Arduino camera, they’ll cost more and won’t give you the satisfaction of building it, either. Source: LOW RES ARDUINO THERMAL CAMERA ### NEW SMT PCB CONNECTORS TO TRANSMIT SIGNALS OR POWER ACROSS PC BOARDS New, Low Profile, SMT PCB Edge Connectors from Keystone. New Hyde Park, NY, A new series of SMT PC Board Connectors designed to transmit signals or power across PC Boards are the latest connectivity devices available from Keystone Electronics Corp. Quickly and easily set-up, these space-saving SMT connectors have a horizontal orientation mak¬ing them uniquely suitable as parallel board-to-board or board-to-component alternative options for power or signal transferring. These new connectors are designed to provide ideal low profile circuit linkage and minimal footprint for high-density, high current PCB packages on power and aluminum backplanes. All PCB soldering applications, including reflow, may be utilized. Manufactured from Phosphor Bronze with Gold Plate, Connectors are available in a Male (pin), Cat. # 6100 (bulk) or Cat. # 6100TR (tape and reel) and a Female (socket) Cat. # 6102 (bulk) or Cat. # 6102TR (tape and reel). The female sockets are equipped with side guides for additional reinforcement to minimize PCB movement when installed. All tape and reel parts are packaged per ANSI/EIA-481 standard for compatibility with most vacuum and mechanical pick and place assembly systems. Delivery is from stock for all Keystone connectors via the company’s global distribution network and online. Read more: NEW SMT PCB CONNECTORS TO TRANSMIT SIGNALS OR POWER ACROSS PC BOARDS ### Build a solar panel Sun tracker using Arduino In the realm of renewable energy, a groundbreaking device known as Mysoltrk is a fantastic project powered by Arduino designed to track the sun’s position, optimizing solar panel performance and maximizing energy production. The tracker is robust, cost-effective, and sturdy enough to withstand outdoor conditions, making it an ideal solution for those seeking to harness the power of the sun. Mysoltrk stands out from other solar trackers due to its unique design and functionality. It does not rely on Wi-Fi or GPS, a strategic decision made to keep costs low. Instead, it employs low-cost linear actuators, 3D printed with a mechanism to lock the shaft. These actuators are powered by an N20 6 volt 30 RPM geared motor, ensuring efficient and reliable operation. The tracker’s ability to detect the sun’s position is facilitated by four photo-resistors housed inside a printed viewfinder. This ingenious system enables the solar array to be steered towards the sun, ensuring equal sensor values and optimal energy capture. Mysoltrk solar panel Sun tracker Mysoltrk operates using a set of two straightforward, yet sturdy actuators, each one constructed around a 6V 30RPM geared DC motor. This motor facilitates the rotation of a threaded rod, which in turn shifts an M3 nut forwards or backwards. By positioning these components on a shared plane and linking them at their peak with a ball joint, a well-structured triangular system is formed that capably adjusts the panel along three axes. At the heart of Mysoltrk is an Arduino Nano, chosen for its low power consumption, affordability, and ease of modification. A L298N h-bridge drives the motors, while a shunt replaces limit switches to further reduce costs. The device also incorporates a voltage divider to read the power coming off the panel and prevent circuit browning out when moving the actuators. Mysoltrk’s design is not just about functionality, but also about practicality. The device is compact, making it suitable for balconies or small gardens. It is 3D printed, waterproof, and requires minimal hardware, keeping costs low. The tracker is self-tracking, eliminating the need for GPS or WiFi. The device is capable of charging smartphones, power banks, or external cameras in small spaces, thanks to its high energy production. The solar panel is designed with three support points for sturdiness and wind resistance. It can be moved to capture the sun during peak energy times, with two additional support points realized with actuators. These can be placed on the base or hooked to the pole that supports the panel. 2023 Hackaday Prize Green Hacks challenge Mysoltrk’s innovative design and functionality earned it a place as a finalist in the 2023 Hackaday Prize Green Hacks challenge. This recognition underscores the potential of this device to revolutionize the way we harness solar energy, making renewable energy more accessible and efficient. Celebrating a decade of technological creativity and innovation, the Hackaday Prize transcends beyond a competition. For the last ten years, it has ignited the minds of the open source hardware community and stimulated the electronics industry, pushing boundaries and prompting creative solutions to dire global issues. By merging the inventiveness of this global community of engineers, designers, scientists, and hackers with the urgency of these inherent challenges, the Hackaday Prize has been at the forefront of generating designs that truly make a difference. Marking this year as its 10-year milestone, the Hackaday Prize evolves by instigating an intriguing set of challenges. However, these aren’t entirely new grounds for its tenacious community. Instead, these tasks are a call back to some of the most resonating themes that the open source community has successfully addressed over the last decade. Through the years, the Hackaday Prize challenges have evolved as our world changes. Tackling everything from climate change and sustainability to technological applications that benefit vulnerable populations, the competition has been a beacon for disruptive, transformative technology. The global open-source community has consistently risen to these challenges, demonstrating not only their technical prowess but also their commitment to affecting meaningful change. This a  landmark year, is not only recognizing the community’s past triumphs but also encouraging them to build upon their previous work. The challenges provide an avenue for the participants to not only showcase their skills but to probe deeper, using the benefit of hindsight and pooled knowledge, to come up with pioneering solutions that can impact the world. More than just a contest rewarding innovation and creativity, the Hackaday Prize is a celebration of an open-source community dedicated to the betterment of our world. This 10-year milestone embraces the tenacity, the ingenuity, and the spirit of this collective of engineers, designers, scientists, and hackers from around the globe. Together, they set their sights on the challenges that lay ahead, ready to champion the powerful themes of their past and eager to create the technologies of the future. The success and growth of the community over the last decade show no sign of abating, and the community and Hackaday eagerly look forward to the phenomenal accomplishments the next ten years will bring. Source: Build a solar panel Sun tracker using Arduino ### STUFFING A 32-PIN CHIP INTO A 28-PIN SOCKET What’s the difference between a 64k ROM in a 28-pin DIP and a 128k ROM in a 32-pin DIP? Aside from the obvious answers of “64k” and “four pins,” it turns out that these two chips have a lot in common, enough so that it only takes a little bodging to make them interchangeable — more or less. For a variety of reasons revealed in the video below, [Anders Nielsen] use the SST39SF010, a Flash ROM in a 32-pin DIP, in place of the old standby W27C512, an EEPROM in a 28-pin DIP. To deal with those pesky extra pins on the Flash ROM, [Anders] dug into the data sheets and found that thanks to JEDEC standards, almost everything about the pinouts of the two chips is identical. The only real difference is the location of Vcc, plus the presence of a 16th address bus line on the more capacious Flash ROM. Willing to sacrifice the upper half of the Flash chip’s capacity, [Anders] set about bodging the 32-pin chip to work in a 28-pin socket. The mods include a jumper from pin 32 to pin 30 on the Flash chip, which puts Vcc in the right place, and adding a couple of pull-up resistors for write-enable and A16. Easy enough changes, but unfortunately, [Anders] chose a Flash ROM with heavily oxidized pins, leading to some cold solder joints and intermittent problems while testing. There’s also the fact that not all boards have room for overhanging pins, a problem solved by adding a socket to create a little vertical clearance. We found this to be a neat little hack, one that should make it a bit easier to use the wrong chip for the job. If you want to see where [Anders] is using these chips, check out his 6502 in an Arduino footprint or the bring-up of an old XT motherboard. Source: STUFFING A 32-PIN CHIP INTO A 28-PIN SOCKET ### GRBLHAL CNC CONTROLLER BASED ON RP2040 PICO [Phil Barrett] designed a new CNC controller breakout board called the PicoCNC which uses the Raspberry Pi Pico RP2040 module and grblHAL. It packs a bunch of features typical of these controllers, and if you use the Pico W, you get WiFi connectivity along with USB. And if you don’t want connectivity, you can execute G-code directly from a micro SD card. The board is available in kit form, and schematics are posted on the GitHub repository above. Some of the features include four axes of motion, spindle control, limit switches, relay drivers, expansion headers, and opto-isolation. This isn’t [Phil]’s first controller board. He also designed the grblHAL-based Teensy CNC controller breakout board, a step up from the usual Arduino-based modules at the time and boasting Ethernet support as well. According to the grblHAL site, nine different processors are now supported. There are well over a dozen CNC controller breakout boards listed as well. And don’t forget [bdring]’s 6-Pack grbl-ESP32 controller, a modular breakout board we covered a few years back. So pick your favorite board or roll your own and get moving. Source: GRBLHAL CNC CONTROLLER BASED ON RP2040 PICO ### Low-cost thermal camera built using Arduino In the realm of DIY electronics, the Arduino UNO has emerged as a versatile platform for a myriad of projects. One such innovative project is the creation of a low-cost thermal camera, as demonstrated by Vaclav Krejci, also known as “upir” on YouTube. Krejci’s tutorial video guides viewers on how to construct an infrared camera using an Arduino UNO, an infrared sensor AMG8833, and an 8×8 RGB LED display from SunFounder. Thermal cameras are invaluable tools for detecting heat that is invisible to the naked eye. They find utility in a wide range of applications, from identifying excessive heat in custom PCB components to detecting uneven heating in car exhaust headers. Krejci’s design, while affordable, offers an 8×8 resolution, which is the maximum output of the AMG8833 infrared sensor array. DIY Arduino thermal camera While the resolution may seem low compared to digital camera standards, it is more than sufficient for the simple tasks that a thermal camera can perform. The device functions akin to a non-contact thermometer, displaying 64 points of heat detection. This allows it to identify hot IC chips and large thermal currents with ease. Infrared sensor module To replicate Krejci’s design, you need an Arduino UNO Rev3 board, an AMG8833 infrared sensor module, and an 8×8 RGB LED matrix. The device collects 64 values from the infrared sensor and uses them to set the hue of each pixel in the LED matrix. The Colorduino library, which allows pixel colors to be set using the HSV (hue, saturation, value) model, simplifies the process of adjusting the color by changing the hue of each pixel. The AMG8833 infrared camera sensor, a compact and streamlined 8×8 infrared thermal sensor array, truly stands out in the realm of thermal imaging. Once hooked up to your microcontroller, be it a Raspberry Pi or any other compatible device in this case an Arduino microcontroller, it delivers 64 distinct infrared temperature data points using I2C. Its user-friendly, simple design makes integration a breeze. Notably, the AMG8833 surpasses its predecessor, the AMG8831, in terms of performance. The sensor communicates exclusively via I2C and features an adjustable interrupt pin. This can be set to activate when the temperature of any single pixel exceeds or falls short of your predefined threshold. Detecting human presence Capable of detecting human presence from an impressive distance of up to 7 meters (or approximately 23 feet), the AMG8833 is an ideal choice for constructing your own human detector or compact camera. Remarkable results have been accomplished using this cutting-edge sensor, in combination with either compatible I2C communication devices or Raspberry Pi. Thanks to the image processing capabilities of the SciPy python library on the Pi, we are able to impose an 8×8 grid and yield truly impressive results if you go down the Pi route. Whichever platform takes your fancy the end result is an LED display that presents a heat map, with cool areas depicted in blue and hot areas in red. Despite the low resolution, each pixel boasts impressive precision. In the second part of the video, Krejci further demonstrates how to achieve a much larger resolution of infrared images by using the InfiRay P2 Pro infrared camera. This tutorial offers a cost-effective solution for those seeking to build their own thermal camera. The project not only showcases the versatility of the Arduino UNO but also the potential of low-cost DIY electronics in creating useful tools. Jump over to GitHub to download the source code to create your very own Arduino infrared camera without breaking the bank. Source: Low-cost thermal camera built using Arduino While the resolution may seem low compared to digital camera standards, it is more than sufficient for the simple tasks that a thermal camera can perform. The device functions akin to a non-contact thermometer, displaying 64 points of heat detection. This allows it to identify hot IC chips and large thermal currents with ease. Infrared sensor module To replicate Krejci’s design, you need an Arduino UNO Rev3 board, an AMG8833 infrared sensor module, and an 8×8 RGB LED matrix. The device collects 64 values from the infrared sensor and uses them to set the hue of each pixel in the LED matrix. The Colorduino library, which allows pixel colors to be set using the HSV (hue, saturation, value) model, simplifies the process of adjusting the color by changing the hue of each pixel. The AMG8833 infrared camera sensor, a compact and streamlined 8×8 infrared thermal sensor array, truly stands out in the realm of thermal imaging. Once hooked up to your microcontroller, be it a Raspberry Pi or any other compatible device in this case an Arduino microcontroller, it delivers 64 distinct infrared temperature data points using I2C. Its user-friendly, simple design makes integration a breeze. Notably, the AMG8833 surpasses its predecessor, the AMG8831, in terms of performance. The sensor communicates exclusively via I2C and features an adjustable interrupt pin. This can be set to activate when the temperature of any single pixel exceeds or falls short of your predefined threshold. Detecting human presence Capable of detecting human presence from an impressive distance of up to 7 meters (or approximately 23 feet), the AMG8833 is an ideal choice for constructing your own human detector or compact camera. Remarkable results have been accomplished using this cutting-edge sensor, in combination with either compatible I2C communication devices or Raspberry Pi. Thanks to the image processing capabilities of the SciPy python library on the Pi, we are able to impose an 8×8 grid and yield truly impressive results if you go down the Pi route. Whichever platform takes your fancy the end result is an LED display that presents a heat map, with cool areas depicted in blue and hot areas in red. Despite the low resolution, each pixel boasts impressive precision. In the second part of the video, Krejci further demonstrates how to achieve a much larger resolution of infrared images by using the InfiRay P2 Pro infrared camera. This tutorial offers a cost-effective solution for those seeking to build their own thermal camera. The project not only showcases the versatility of the Arduino UNO but also the potential of low-cost DIY electronics in creating useful tools. Jump over to GitHub to download the source code to create your very own Arduino infrared camera without breaking the bank. While the resolution may seem low compared to digital camera standards, it is more than sufficient for the simple tasks that a thermal camera can perform. The device functions akin to a non-contact thermometer, displaying 64 points of heat detection. This allows it to identify hot IC chips and large thermal currents with ease. Infrared sensor module To replicate Krejci’s design, you need an Arduino UNO Rev3 board, an AMG8833 infrared sensor module, and an 8×8 RGB LED matrix. The device collects 64 values from the infrared sensor and uses them to set the hue of each pixel in the LED matrix. The Colorduino library, which allows pixel colors to be set using the HSV (hue, saturation, value) model, simplifies the process of adjusting the color by changing the hue of each pixel. The AMG8833 infrared camera sensor, a compact and streamlined 8×8 infrared thermal sensor array, truly stands out in the realm of thermal imaging. Once hooked up to your microcontroller, be it a Raspberry Pi or any other compatible device in this case an Arduino microcontroller, it delivers 64 distinct infrared temperature data points using I2C. Its user-friendly, simple design makes integration a breeze. Notably, the AMG8833 surpasses its predecessor, the AMG8831, in terms of performance. The sensor communicates exclusively via I2C and features an adjustable interrupt pin. This can be set to activate when the temperature of any single pixel exceeds or falls short of your predefined threshold. Detecting human presence Capable of detecting human presence from an impressive distance of up to 7 meters (or approximately 23 feet), the AMG8833 is an ideal choice for constructing your own human detector or compact camera. Remarkable results have been accomplished using this cutting-edge sensor, in combination with either compatible I2C communication devices or Raspberry Pi. Thanks to the image processing capabilities of the SciPy python library on the Pi, we are able to impose an 8×8 grid and yield truly impressive results if you go down the Pi route. Whichever platform takes your fancy the end result is an LED display that presents a heat map, with cool areas depicted in blue and hot areas in red. Despite the low resolution, each pixel boasts impressive precision. In the second part of the video, Krejci further demonstrates how to achieve a much larger resolution of infrared images by using the InfiRay P2 Pro infrared camera. This tutorial offers a cost-effective solution for those seeking to build their own thermal camera. The project not only showcases the versatility of the Arduino UNO but also the potential of low-cost DIY electronics in creating useful tools. Jump over to GitHub to download the source code to create your very own Arduino infrared camera without breaking the bank. While the resolution may seem low compared to digital camera standards, it is more than sufficient for the simple tasks that a thermal camera can perform. The device functions akin to a non-contact thermometer, displaying 64 points of heat detection. This allows it to identify hot IC chips and large thermal currents with ease. Infrared sensor module To replicate Krejci’s design, you need an Arduino UNO Rev3 board, an AMG8833 infrared sensor module, and an 8×8 RGB LED matrix. The device collects 64 values from the infrared sensor and uses them to set the hue of each pixel in the LED matrix. The Colorduino library, which allows pixel colors to be set using the HSV (hue, saturation, value) model, simplifies the process of adjusting the color by changing the hue of each pixel. The AMG8833 infrared camera sensor, a compact and streamlined 8×8 infrared thermal sensor array, truly stands out in the realm of thermal imaging. Once hooked up to your microcontroller, be it a Raspberry Pi or any other compatible device in this case an Arduino microcontroller, it delivers 64 distinct infrared temperature data points using I2C. Its user-friendly, simple design makes integration a breeze. Notably, the AMG8833 surpasses its predecessor, the AMG8831, in terms of performance. The sensor communicates exclusively via I2C and features an adjustable interrupt pin. This can be set to activate when the temperature of any single pixel exceeds or falls short of your predefined threshold. Detecting human presence Capable of detecting human presence from an impressive distance of up to 7 meters (or approximately 23 feet), the AMG8833 is an ideal choice for constructing your own human detector or compact camera. Remarkable results have been accomplished using this cutting-edge sensor, in combination with either compatible I2C communication devices or Raspberry Pi. Thanks to the image processing capabilities of the SciPy python library on the Pi, we are able to impose an 8×8 grid and yield truly impressive results if you go down the Pi route. Whichever platform takes your fancy the end result is an LED display that presents a heat map, with cool areas depicted in blue and hot areas in red. Despite the low resolution, each pixel boasts impressive precision. In the second part of the video, Krejci further demonstrates how to achieve a much larger resolution of infrared images by using the InfiRay P2 Pro infrared camera. This tutorial offers a cost-effective solution for those seeking to build their own thermal camera. The project not only showcases the versatility of the Arduino UNO but also the potential of low-cost DIY electronics in creating useful tools. Jump over to GitHub to download the source code to create your very own Arduino infrared camera without breaking the bank. While the resolution may seem low compared to digital camera standards, it is more than sufficient for the simple tasks that a thermal camera can perform. The device functions akin to a non-contact thermometer, displaying 64 points of heat detection. This allows it to identify hot IC chips and large thermal currents with ease. Infrared sensor module To replicate Krejci’s design, you need an Arduino UNO Rev3 board, an AMG8833 infrared sensor module, and an 8×8 RGB LED matrix. The device collects 64 values from the infrared sensor and uses them to set the hue of each pixel in the LED matrix. The Colorduino library, which allows pixel colors to be set using the HSV (hue, saturation, value) model, simplifies the process of adjusting the color by changing the hue of each pixel. The AMG8833 infrared camera sensor, a compact and streamlined 8×8 infrared thermal sensor array, truly stands out in the realm of thermal imaging. Once hooked up to your microcontroller, be it a Raspberry Pi or any other compatible device in this case an Arduino microcontroller, it delivers 64 distinct infrared temperature data points using I2C. Its user-friendly, simple design makes integration a breeze. Notably, the AMG8833 surpasses its predecessor, the AMG8831, in terms of performance. The sensor communicates exclusively via I2C and features an adjustable interrupt pin. This can be set to activate when the temperature of any single pixel exceeds or falls short of your predefined threshold. Detecting human presence Capable of detecting human presence from an impressive distance of up to 7 meters (or approximately 23 feet), the AMG8833 is an ideal choice for constructing your own human detector or compact camera. Remarkable results have been accomplished using this cutting-edge sensor, in combination with either compatible I2C communication devices or Raspberry Pi. Thanks to the image processing capabilities of the SciPy python library on the Pi, we are able to impose an 8×8 grid and yield truly impressive results if you go down the Pi route. Whichever platform takes your fancy the end result is an LED display that presents a heat map, with cool areas depicted in blue and hot areas in red. Despite the low resolution, each pixel boasts impressive precision. In the second part of the video, Krejci further demonstrates how to achieve a much larger resolution of infrared images by using the InfiRay P2 Pro infrared camera. This tutorial offers a cost-effective solution for those seeking to build their own thermal camera. The project not only showcases the versatility of the Arduino UNO but also the potential of low-cost DIY electronics in creating useful tools. Jump over to GitHub to download the source code to create your very own Arduino infrared camera without breaking the bank. ### LASER ENGRAVER USES ALL OF THE DVD DRIVE For the last ten to fifteen years, optical drives have been fading out of existence. There’s little reason to have them around anymore unless you are serious about archiving data or unconvinced that streaming platforms will always be around. While there are some niche uses for them still, we’re seeing more and more get repurposed for parts and other projects like this tabletop laser engraver. The build starts with a couple optical drives, both of which are dismantled. One of the shells is saved to use as a base for the engraver, and two support structures are made out of particle board and acrylic to hold the laser and the Y axis mechanism. Both axes are made from the carriages of the disassembled hard drives, with the X axis set into the base to move the work piece. A high-output laser module is fitted to the Y axis with a heat sink, and an Arduino and a pair of A4988 motor controllers are added to the mix to turn incoming G-code into two-dimensional movement. We’ve actually seen a commercial laser engraver built around the same concept, but the DIY approach is certainly appealing if you’ve got some optical drives collecting dust. Otherwise you could use them to build a scanning laser microscope. Source: LASER ENGRAVER USES ALL OF THE DVD DRIVE ### 0.39-INCH SILICON-BASED OLED MICRO DISPLAY HAS 1024 * 768PX RESOLUTION adt-oled.com has released the XGA039 microdisplay which is a 0.39-inch silicon-based OLED microdisplay, with SXGA (1024 * 768) pixels resolution, high brightness (mono green screen brightness greater than 15,000 nits) and low power consumption. The detailed specifications are listed below: About ADT Optoelectronics Technology Co., Ltd. Shenzhen ADT Optoelectronics Technology Co., Ltd. is a technology enterprise specializing in R&D, production and sales of new flat panel display devices and their application systems. The main team members of the company have been engaged in the design, development, production, and sales of microdisplay applications for a long time. They have a rich and comprehensive industry experience, which guarantees that we can provide professional and high-quality services for our customers. It is our pleasure  to introduce and to recommend you our Guozhao silicon-based OLED microdisplay Guozhao silicon-based OLED microdisplay is a very good series of technologies and processes and is one of the few powerful silicon-based OLED microdisplay suppliers in the industry. We would like to recommend you GA061 (0.61” ) and OLPO0.39 (0.39” ) Color Silicon-based OLED Microdisplay as an attachment .  Read more: 0.39-INCH SILICON-BASED OLED MICRO DISPLAY HAS 1024 * 768PX RESOLUTION ### Recommended Approach to Programming and Hardware Development: C++ and Arduino Framework Story Rapid Overview of the Seed Studio Grove Kit Frequently, people inquire about the optimal approach to delve into programming and hardware development. The response consistently points to the C++ language and, notably, the Arduino framework. While the software aspect is well-defined, what about the hardware dimension? The solution lies in the Seed Studio Grove Kit. This comprehensive kit offers an avenue to enter the realm of Arduino programming, enabling the creation of intricate projects that harness advanced sensors and streamline connectivity with diverse hardware components, all adhering to the Grove standard. This approach safeguards against potential short circuits and mitigates the risk of hardware component damage. Within this assessment, we shall establish the Arduino environment and employ the Mega Demo to showcase the board's full array of functions. Simply adhere to the provided instructions and embark on a coding journey filled with satisfaction. The Hardware Crafted upon a superior-grade PCB, the kit boasts remarkable build quality. Each sensor and component interfaces with the board through an Arduino-based microcontroller. This design ensures that, within the code, one can effortlessly access the sensors and actuators without necessitating any physical connections, thanks to the comprehensive integration facilitated by the fundamental PCB. In this context, there exists the option to detach individual components for potential reuse in personalized projects. However, I recommend refraining from detaching components from the PCB initially, and instead, commence code testing using the default PCB. The components are as follows: 1. Grove - LED: Simple 2. Grove - Buzzer: Piezo Buzzer 3. Grove - OLED Display 0.96": 128x64 dot resolution High brightness, self-smission and high contrast ratio 4. Grove - Button: Momentary Push Btton 5. Grove - Rotary Potentiometer: Adjustable Potentiometer 6. Grove - Light: Detects surrounding light intensity 7. Grove - Sound: Detects surrounding sound intensity 8. Grove - Temp%Humi Sensor: Detects surrounding temperature and humidity values 9. Grove - Air Pressure Sensor: Detect surrounding atmospheric pressure 10. Grove - 3 Axis Accelerator: Detects object acceleration 11. Seeeduino Lotus: Arduino Compatible Board with Grove Ports Ports: 1. LED || Digital || D4 2. Buzzer || Digital || D5 3. OLED || I2C || I2C, 0x78 (default) 4. Button || Digital || D6 5. Potentiometer || Analog || A0 6. Light || Analog || A6 7. Sound || Analog || A2 8. Temp & Humi || Digital || D3 9. Air Pressure || I2C || I2C, 0x77 (default) / 0x76 (optional) 10. Accelerator || I2C || I2C, 0x19 (default) A. The Software 1. Install the driver First af all you need the USB driver comunication. Download the driver in accord with your OS by using this link https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers 2. Install the Arduino IDE Retrieve and install the latest iteration of the Arduino IDE by accessing this provided link.https://www.arduino.cc/en/software 3. Upload the cod 3.1 Launch the Arduino IDE on your personal computer. Navigate to Tools -> Board -> Arduino AVR Boards -> Arduino Uno to appropriately designate the desired Development Board Model. Opt for Arduino Uno as the chosen board. 3.2 Access Tools -> Port to designate the accurate Port (which corresponds to the Serial Port identified in the Device Manager during the prior step). In this instance, COM11 is the designated option. For those using Mac OS, the designation should be /dev/cu.SLAB_USBtoUART. 3.3 Duplicate and insert the subsequent code snippet into the Arduino IDE. // Projectg code for Seeed Studio January 2022 // The LED will turn on for one second and then turn off for half second int ledPin = 4; //declare the pin for the led void setup() { pinMode(ledPin, OUTPUT); //define the pin 4 as an output } void loop() { digitalWrite(ledPin, HIGH); //switch ON the PIN number 4 so the Led connect delay(500); //delay for 500 millisecond digitalWrite(ledPin, LOW); //switch OFF the PIN number 4 delay(500); // delay for 500 millisecond } B. The Hardware 1. Seeeduino Lotus 2. Grove LED 3. Grove Cable (If Broken out) The full MEGA demo Utilize this demonstration to showcase the complete array of features within the kit and explore the comprehensive management of its components. The detailed guide can be found at the following link: https://github.com/jpralves/grove-beginner-kit-for-arduino 1. Install the u8g2 library on the Arduino IDE The initial approach we will examine involves the library manager, accessible by going to Sketch > Include Library > Manage Libraries. From this point, we have the capability to search for frequently employed libraries and allow the IDE to handle their automatic download and installation. In our scenario, we will install a U8g2 library to facilitate the connection between our Arduino and a U8g2 device. To initiate this, begin by searching for "U8g2" within the upper-right box and patiently await the appearance of results in the window. Choose the library and proceed by clicking the "Install" button. As the installation transpires, you will observe changes in the lower progress bar, accompanied by status messages like "Downloading". 2.Download the Grovebk4a Mega Demo Following the successful installation of the library, acquire the Grovebk4aMegaDemo authored by Joao Alves at jpralves@gmail.com. The most recent iterations can be accessed from both https://jpralves.net and https://github.com/jpralves/grove-beginner-kit-for-arduino. Within this compilation, you'll encounter an array of 10 distinct demonstrations: logoShow.ino coupled with buzzerShow.ino: A fusion of the OLED display module and the buzzer module. cubeShow.ino: Presents a 3D rotating cube through the OLED display module. microShow.ino: Offers three distinct displays of an audio spectrum analyzer using the Grove microphone module. tempShow.ino: Exhibits temperature and humidity readings via the DHT11 module. pressureShow.ino: Displays pressure and temperature readings using the BMP280 module. aceleShow.ino: Depicts x, y, z accelerations employing the LIS3DHTR module. lightShow.ino: Showcases values from the light sensor module. trimShow.ino: Utilizes a gauge to display the value of the trimmer module. The selection of demos can be alternated by pressing the button on the Grove Kit. A brief examination of the code snippets within the grovebk4a-mega-demo.ino file has the potential to alter the various demonstration scenarios. oid loop() { if (digitalRead(buttonPin) == HIGH) { while (digitalRead(buttonPin) == HIGH) delay(10); stateMode = (stateMode + 1) % (sizeof(funcShow)/sizeof(funcShow[0])); } funcShow[stateMode](); } &logoShow, &cubeShow, µShow1, µShow2, µShow3, &tempShow, &pressureShow, &aceleShow, &lightShow, &trimShow Meteo Station Project Within this undertaking, the board retrieves temperature and humidity data from the DHT sensor, subsequently showcasing the outcomes on the OLED display. The utilization of the U8g2 library is mandatory, and it's imperative to include all the files from the provided zip package. To begin, download the zip package from this tutorial, extract its contents, and open them within the Arduino IDE. Proceed to upload the code and observe the outcomes. This exclusively represents the annotated "main" code segment. // Include all the library #include #include "DHT.h" // declare the pins and setup the components const byte dhtPin = 3; DHT dht(dhtPin, DHT11); U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R2, /* reset=*/U8X8_PIN_NONE); // setup the serial for the debug and the OLED display void setup() { Serial.begin(115200); //setup the serial port u8g2.begin(); //setup the oled } // start the loop void loop() { const int col = 20; int humid = dht.readHumidity(); //read the humidity int temp = dht.readTemperature(); //read the temperature u8g2.firstPage(); do { u8g2.setFont(u8g2_font_t0_16b_mr); u8g2.setCursor(col, 16); u8g2.print(F("temp: ")); u8g2.print(temp); u8g2.print(F("C")); u8g2.setCursor(col, 48); u8g2.print(F("humid: ")); u8g2.print(humid); u8g2.print(F("%")); u8g2.drawLine(10, 0, 10, 64); } while(u8g2.nextPage()); } Extra contents about the main board The "deep dive" on Seeed Studio Lotus Cortex-M0+ Fully compatible with Arduino UNO ARM® Cortex®-M0+ 32bit 48MHz microcontroller(SAMD21) 12 on-board Grove connectors 14 Digital I/O Pins (10 PWM outputs) 6 Analog Inputs Support Power Path Management Support micro-usb or Li-Po battery powered 2A maximum charging current Suitable for low power design Notable Details Regarding UART, Battery, and Serial Functionality Grove UART: Offers 3 hardware UART ports, including 1 dedicated Grove UART. The TX-RX pins are available in the header, alongside the multiplexed function pin SCKSDO in the SWD port. Serial Port: The Serial interface corresponds to the Grove UART, while Serial1 corresponds to the RX-TX connection in the header region. Li-Po Header: Seeduino Lotus Cortex-M0+ provides the flexibility to be powered by either a USB connection or a Li-Po battery. Furthermore, the board facilitates Li-Po battery charging. When simultaneously powered through USB and the Li-Po battery, the battery will undergo charging, signaled by the flashing CHR LED. Upon the battery reaching full charge, the CHR LED ceases to flash.   ### Introduction to the Arduino Project: An Open Source Experimental Aircraft PFD Manual The Open Cockpit Arduino 4.3 Version 1.0 Beta The Arduino project is a PFD (Primary Flight Display) for experimental aircraft, built on Arduino's open-source platform. Its purpose extends to both educational and experimental contexts. Further enhancements are anticipated, aiming to provide an affordable backup instrument for experimental aircraft. This guide outlines the assembly process and software details for the 1.0 beta version. The image depicted above illustrates the second iteration of Airduino, featuring the Yost Labs AHRS system and powered by a 9-volt battery. Current Release Status: The project is currently in its Beta Release phase. While you're encouraged to explore and experiment with it, please note that it hasn't yet attained the level of reliability required for public use. Cautions and Disclaimers: Flying an aircraft inherently carries risks, and these risks are further magnified when piloting an experimental aircraft. The complexity grows when dealing with experimental avionics on such an aircraft. The experimental PFD detailed in this guide is decidedly experimental. It should solely be employed in flyable aircraft for the purpose of advancing its development or as a contingency in case primary systems malfunction. In either scenario, conventional non-experimental redundant systems must be integrated into any aircraft hosting an Airduino. These systems should be considered more dependable than the Airduino. In instances where conflicting information arises between the Airduino and the alternative systems, precedence should be given to the other systems for accuracy, considering the Airduino as less reliable. The Airduino remains in the experimental phase and must not find a place in certified aircraft. Responsibility for the operation of any Airduino device rests solely upon the operator. Under no circumstances shall the creators of the Airduino assume any liability. License: This software is licensed under the BSD 3 Clause license as follows: You are allowed to redistribute and use this in both source and binary forms, whether modified or unmodified, as long as you adhere to the following conditions: When redistributing source code, you must preserve the original copyright notice, maintain this set of conditions, and include the subsequent disclaimer. When redistributing the software in binary form, it is essential to replicate the initial copyright notice, uphold this set of conditions, and incorporate the subsequent disclaimer within the accompanying documentation or other related materials. Utilization of the names of the copyright holder or its contributors to endorse or advertise products originating from this software requires explicit written authorization in advance. The COPYRIGHT HOLDERS AND CONTRIBUTORS provide this SOFTWARE "AS IS," and hereby disclaim any express or implied warranties, including but not limited to warranties of merchantability and fitness for a particular purpose. Under no circumstances shall the COPYRIGHT HOLDER OR CONTRIBUTORS be liable for any direct, indirect, incidental, special, exemplary, or consequential damages, including but not limited to procurement of substitute goods or services, loss of use, data, or profits, or business interruption. This holds true regardless of the cause, whether contractual, strict liability, or tort (including negligence or any other theory of liability), arising from the utilization of this SOFTWARE. Even if alerted to the potential for such damages, the user acknowledges the risk and use of this SOFTWARE. Hardware Assembly: Electrical Schematic Case Parts: Step 1: Adhere Case Components 1, 3, and 6 to Each Other The case was divided into multiple segments during printing to reduce the reliance on supports and mitigate resultant uneven surfaces. Ideally, ABS plastic would have been the printing material of choice. Assembling these segments involves the use of ABS glue. It is advisable to opt for a versatile plumbing adhesive that encompasses ABS. The Oatley cement featured in the subsequent image has proven highly effective for this purpose. Parts before gluing Parts before gluing note cut Tee fitting Parts after gluing   Utilize the adhesive to connect the case components as described earlier. Initiate the process by eliminating the support material from the Pitot and Static port openings, demonstrated below. We've found that using a step drill is effective in refining the plastic surface before applying the glue. Following this, trim two ends from Tee-piece 6. These trimmed ends require meticulous sanding for proper insertion into the pitot and static port openings. Once they fit snugly within the openings, they are prepared for the adhesive bonding step. Take care not to make them excessively loose, as this may lead to improper sealing. Applying too much pressure during the press fit could result in delamination of the case layers. Preparing Case for Hose Fittings Sanding Hose Fittings to go in Case Proceed by adhering piece 3 onto piece 1, following the visual references provided in the photographs and diagrams. The plumbing adhesive tends to cure rapidly. Step 2: Attach wires to the BMP-280 sensors The Adafruit BMP280 sensors come equipped with integrated logic level shifting. Identical sensors are employed for both the Pitot and the Static functionalities. The sole distinction lies in an extra jumper wire connecting GND and SDO on the Static Sensor. This jumper modifies the I2C address on the chip, enabling independent querying by the Arduino for each sensor. When employing the jumper wires outlined in the materials list, detach the ends from each wire required. Proceed to solder the Red, Green, Yellow, and Black wires onto their respective sensors, following the indicated configuration. Front of Static chip View of Actual Chips and Wires Front of Pitot Chip Take note that the wires are soldered onto the pads positioned at the rear of the chips. This arrangement permits the chips to be affixed within the pressure compartments located within the case. Step 3: Install the Pitot/Static Boards in their Compartments Both the Pitot and Static BMP-280 sensors need to be enclosed within sealed compartments to effectively detect pitot and static pressure while on the aircraft. These measurements are crucial for calculating airspeed, vertical speed, and altitude. As the instrument's capabilities expand, these readings will play a vital role in various other calculations. To commence, initiate the process by drilling the eight wire holes (four for each chamber) using a small drill bit slightly larger than the wires. These holes have been designed into the printed case, though their size may not be precisely suitable. Thread all four wires from the BMP-280 boards through the designated holes in the specified sequence. Keep in mind that the Pitot board includes an additional jumper. Ensuring the accurate alignment of chips with their respective compartments is essential. Finally, carefully fasten the breakout boards onto the designated pads, following the depicted configuration. Silicone sealant Silicone sealant and chamber lid Once the breakout boards are securely fastened, employ silicone sealant to effectively seal the wire connections on the rear side of the case. Begin by pulling the wires to a single side, applying sealant, and then repeating the process in the opposite direction. Although the pressure differentials across the case are minimal, achieving an airtight seal is crucial. Subsequent to sealing the wires, you can further utilize the same silicone sealant along with screws to seal the lid of the pressure chamber (Piece 4 in the initial diagram) onto the top. Apply a generous amount of sealant, erring on the side of caution. However, be cautious not to overapply sealant to the extent that it might obstruct the pressure sensors on the breakout boards beneath. Any potential leaks in this area can be exceptionally challenging to diagnose, yet they can impede the dependable operation of the pitot-static system. Step 4: Wire up the Power Switch and Multi-Select Knob Start by installing the multi-select knob and power switch onto the front of the case (Piece 2). It's probable that you'll need to adjust the hole sizes in the printed case to accommodate these components. We discovered that a step drill proved effective for this purpose. We opted to solder wires onto the power switch while it was positioned within the case, while we performed the soldering for the multi-selector outside the case. Elaboration on the power switch is unnecessary, as a red wire connecting it to the V-in pin's rear pad on the Arduino suffices. The opposite side will extend out from the case, serving as a connection to a 6-12 volt input voltage. The multi-selector presents a slightly more intricate design. It incorporates a rotary encoder alongside a momentary NO pushbutton switch. Connecting to the common pin is a ground line, while three data lines are directed back to the Arduino. For the ground line, we opted for black, utilizing it to lower the data pins on the Arduino. The black wire is connected to the central pin of the encoder side (which has 3 pins) and then linked to either of the pushbutton side's pins (which has 2 pins). We omitted the use of heat shrink on the ground wires. The remaining wires were fastened according to the provided illustration, with heat shrink tubing applied to safeguard against any potential signal shorts to ground. All four wires are directed to the solder pads on the rear side of the Arduino, corresponding to the appropriate pins. Step 5 – Wire in the Logic Level Shifter and the ARHS Board The Yost Labs ARHS board functions on a 3.3-volt voltage, whereas the Arduino MEGA operates at 5 volts. Consequently, employing a logic level shifter is imperative to prevent potential board damage. Our objective is to situate the AHRS board in a magnetically neutral site, like a wingtip, through remote mounting. For the transmission of high-speed serial data between the Arduino and AHRS, it is advisable to utilize shielded twisted pair wire. Furthermore, it is strongly recommended to incorporate a suitable disconnect plug. While we have not specified a particular plug, we suggest considering a high-quality aviation or automotive-style connector. The logic level converter is equipped with two channels, yet only one will be put into use. Specifically, we've designated orange and brown wires for UART serial communication. These data wires are soldered to establish a connection between the High Voltage side of the breakout board and the Arduino. Additionally, a black ground wire is employed between the board and the Arduino. This ground wire is further extended to the ground on the LV side of the breakout board (not depicted, located behind the board), continuing onward to the disconnect plug (also not shown). All wires connected to the Arduino are secured to the rear solder pads. The Arduino board is equipped with an integrated 3.3 Volt power supply, which will serve to energize the AHRS. A gray wire has been employed to establish a connection between the LV side of the board and the 3V3 pin located on the rear of the Arduino. Subsequently, this wire extends onwards to the disconnect plug (unillustrated). Given that our demo board was not intended for installation in an actual aircraft, we forwent the use of a twisted wire pair or a high-grade disconnect mechanism. Instead, we utilized simple male/female wire ends for our disconnection setup. This arrangement sufficed for our experimental purposes, yet it falls considerably short when employed in any form of testing apparatus. To ensure comprehensive functionality, it's advisable to consider incorporating a protective housing for the AHRS board. Additionally, it might be prudent to include an extra disconnect plug at this end as an added measure. Step 6: Putting it all together. Now, it's the appropriate juncture to assemble all the components. The image above presents the current configuration, featuring the power wire linked to a 9-volt battery connector. Your setup might vary in appearance based on your selected voltage source.   Combine the two yellow wires from the Pitot and Static breakouts into a single yellow wire, which then connects to the indicated pin on the Arduino. Repeat this process for the two green, two red, and two black wires. Refer to the illustration below. Pay attention to the heat shrink tubing used to cover the soldered connections. Download and Installation: Numerous steps within this section are contingent upon your computer's operating system. While the following instructions pertain to a Windows-based system, the same procedures can be carried out on a Linux or Mac computer by referring to instructions available on Arduino forums. This process was effective as of April 2019. Should any changes have occurred on the website or software, kindly refer to the updated instructions provided on the respective platform. 1. Acquire the Arduino IDE by downloading and installing it on your computer. Navigate to Arduino.cc, access the software section, and choose the "Downloads" option. Choose the suitable version of the Arduino IDE (Integrated Development Environment). Proceed to click on the chosen version, which should initiate the download process. Launch the file and grant it permission to install on your computer. The default settings should be suitable. You might need to provide the program with authorization to install multiple files and drivers. Please wait until the IDE completes the installation process. 2. Incorporate the four essential libraries into Arduino. Open the Arduino IDE. Retrieve the four zip files from the Arduino_Libraries directory on GitHub. Ensure you are aware of the storage location on your computer where you save these files. Keep them in their zipped format without extracting them. Return to the Arduino IDE, navigate to "Sketch," then proceed to "Include Library," and finally select "Add .Zip Library." This action will prompt a window to appear, allowing you to browse to the location where you stored the four libraries. Choose one of the libraries, and the software should proceed to install it for you. The image below demonstrates the appearance of a successful installation on my computer. Repeat the process outlined in steps "F" and "G" until all four libraries have been successfully installed. 3. Launch the Airduino program within your Arduino IDE. Obtain the Airduino code from GitHub and make a note of the location where you save it. Unlike before, you should unzip the downloaded file this time. Within the Arduino IDE, select "File" followed by "Open." Navigate to the directory where you extracted the folder in the previous step, and open the relevant file. If the process is successful, you should observe the following: Change the board type to "MEGA 2560," which corresponds to the specific board utilized in the Airduino. Access the "Tools" menu, proceed to "Board," and then choose "Arduino/Genuino Mega or Mega 2560." (Please be aware that if you've employed a MEGA 2560 board from a different brand, you might need to select an alternative board setting.) Ultimately, verify your setup by clicking on the Check Mark icon located in the upper left corner of the program interface (as illustrated in the image above within the green box). If your installation is accurate, you will observe text appearing within the lower black box. This process may require a brief duration, but you should receive the following output: 4. Transfer the program to the Airduino unit that you have constructed. Choose the suitable port from the "Tools" menu, specifically the "Port" option highlighted in red below. Select the "Upload" button indicated in green below. The program compilation, similar to previous instances, will require some time before proceeding to upload it onto the board. Upon successful execution, you will witness a display resembling the example provided below. Your Airduino unit will momentarily power off and subsequently restart, presenting the lower screen. Kindly observe that agreeing to the disclaimer is necessary to proceed. Rotate the multi-select knob and press "I agree." If you encounter difficulty while selecting the "I agree" option, it might be necessary to adjust the setting for "#define ECPD 2 // number of encoder clicks per detent. Probably 1, 2, or 4," as explained in the upcoming section. Additionally, please take note that if either of the static port BMP 280 sensors or the Yost Labs AHRS sensor is not detected, they will appear in red. This situation typically indicates a wiring error. 5. Set up the software configuration using the provided define statements explained in the following section. Once you've adjusted the software configuration within the Arduino IDE, you will be required to perform another software upload, as described in section 4. Software Configuration: In keeping with standard Arduino practices, the initial code section employs define statements to specify the desired options. Modify the numeric values associated with each option accordingly. For true/false settings, input "true" or "false" in lowercase letters. If the term is recognized, the color will change as depicted below next to "SpeedSlider." 1. Utilize #define MaxVertSpeed to set the upper and lower limits of the displayed VSI (Vertical Speed Indicator) scale. You are free to choose any desired numerical value. The example provided illustrates 1000 below on the left and 4000 displayed both above and below on the right. 2. Assign #define BLine as 74 to designate the position of the blue line on the airspeed indicator. If a blue line is not required, use 0. 3. Use #define MaxSpeed to set the upper limit displayed on the gauge. Opt for a value slightly                  higher than your red line. For instance, 160 and 250 are shown below. 4. Set #define SpeedTics to determine the spacing between numbers on the speed slider. While any     value can be selected, it's advisable to choose a sensible figure. The default is 20, with 50 also being      a recommended option. 5. Utilize #define BottomWhiteArc to specify the lower boundary of the white arc. 6. Set #define TopWhiteArc to determine the upper limit of the white arc. 7. Employ #define BottomGreenArc to designate the lower extent of the green arc. 8. Employ #define TopGreenArc to establish the upper limit of the green arc and the lower limit of the yellow arc. 9. Utilize #define RedLine to specify the upper limit of the yellow arc and define the red line. 10. Adjust #define HeadingNum as either true or false to display the heading within a black box at the center of the Directional Gyro strip. 11. Modify #define CenterDisplayType to 3, offering a choice between different display options: 1 presents yellow lines with the horizon, 2 maintains level yellow lines, and 3 combines both features. 12. Adjust #define dynamicsky as either true or false. Enabling true results in display color changes based on pitch, while selecting false maintains a static display color. 13. Set #define dynamicground as either true or false. Enabling true causes display color changes based on pitch, while choosing false maintains a static display color. Sensor Calibration: This screen allows you to reset the ARHS chip to its current position. Presently, it doesn't retain the newly set zero position once the power is turned off, although this feature will be incorporated in the future. To access this screen, power off the unit, then hold down the selector knob while turning on the power. As soon as this screen emerges, release the knob. To navigate the cursor to "Zero AHRS and Save," rotate the knob in that direction for several turns. Subsequently, press the select knob to execute the zeroing process. ### STATION P1 GEEK MINI PC Station P1 Geek Mini PC is equipped with an all-aluminum alloy case and can be used immediately when powered on. It possesses Firefly Geek Entertainment System — Station OS on which the Desktop and Media modes can be switched randomly to finish daily office work or play games for fun. It can be easily updated to various systems like Android, Ubuntu and Phoenix OS, satisfying geeks’ needs of operating multiple systems freely. Portable Mini PC As a hand-held device, it is small and portable enough to put in the pocket. You can carry it everywhere to work at any time. Geek Entertainment System It supports Firefly Geek Entertainment System — Station OS. The system has both Desktop and Media modes that support the seamless switching among study, entertainment, and office work. Rich Interfaces It possesses rich expansion interfaces including HDMI2.0 (up to 4K@60Hz), Type-C (DP1.2 video output + USB3.0), USB2.0, USB3.0 and gigabit Ethernet, etc. Read more: STATION P1 GEEK MINI PC ### OMNIVISION UNVEILS AUTOMOTIVE WAFER-LEVEL CAMERA MODULE OmniVision Technologies announced the OVM9284 CameraCubeChip module. According to the company, it is the world’s first automotive-grade, wafer-level camera. The OVM9284 is built on OmniVision’s OmniPixel3-GS global-shutter pixel architecture, which provides quantum efficiency at the 940nm wavelength for high quality driver images in near or total darkness. The integrated OmniVision image sensor has a 3 micron pixel and a 1/4″ optical format, along with 1280 x 800 resolution. This 1 megapixel (MP) module has a compact size of 6.5 x 6.5mm to provide driver monitoring system (DMS) designers with flexibility on placement within the cabin while remaining hidden from view. According to the company, it has the lowest power consumption among automotive camera modules, which enables it to run continuously in tight spaces and at low temperatures for maximum image quality. All CameraCubeChip modules are reflowable. This means they can be mounted to a printed circuit board simultaneously with other components using automated surface-mount assembly equipment. A virtual demo and Q&A for the OVM9284 will be available at AutoSensONLINE’s virtual demo sessions, on Friday, June 12th at 10:40am (Eastern). Read more: OMNIVISION UNVEILS AUTOMOTIVE WAFER-LEVEL CAMERA MODULE ### Basic knowledge of Zynq FPGA Table of contents 1 What is the Zynq? 2 Design Flow of Zynq 3 PS (ARM) 4 How do I use Zynq? 5 Pros of Zynq What is the Zynq? The all-programmable Zynq-7000 SoC processor The next-generation all-programmablesystem-on-a-chip from Xilinx, called Zynq, combines the hardware and software programmability of an FPGA and a processor. System performance, adaptability, and scalability are all excellent. High-end embedded applications like video surveillance, automobile driver assistance, and factory automation are designed to require the processing power and computing performance. It is a SOC (System on Chip) chip, a system on a chip, and it has both an ARM CPU and a conventional FPGA. The AXI bus, PS (on the ARM side) and PL (on the FPGA side) serve as the interface for communication between FPGA and ARM. The PS side interface can be extended to the PL side using emio. RFSoC, or more properly, Zynq®Ultra- Scale+ RFSoC, is based on Xilinx's prior family, the Zynq UltraScale+ MPSoC. Zynq is an APSoC, which means that developers can use the FPGA, or field-programmable gate array, technology included in it in addition to integrating the majority, if not all, of a computer's components into a single chip. FPGAs are often stand-alone devices that are used to create the hardware for future application-specific integrated circuits (ASICs) or prototype custom system chips. As a result, while referring to Zynq, the term "system" in APSoC refers to the system of two separate processors (Dual-core ARM Cortex-A9 Processors) and FPGA technology. The best of both worlds can be accessed by developers who have access to both processor and FPGA functions. Design Flow of Zynq There are several design flow phases that are similar to those of a standard FPGA for the Zynq architecture. Specifying the system's needs and specifications is the initial step. The individual tasks (functions) are then assigned to implementation in either PL or PS during the system design stage, a process known as task partitioning. This phase is critical because it determines which activities or functions will be implemented using hardware or software, depending on the most appropriate technology. The creation and testing of the hardware and software should come next. To achieve the design criteria, it is necessary to determine the functional blocks that must be present in the PL, as well as to put them together as IPs and connect them in the proper ways. Similarly, the software activity entails writing code for the PS. As a result, system integration and testing are necessary to finish the design. PL (FPGA) The logic of digital integrated circuits produced in the early days were fixed. To change its logical function, one must change the connections between the internal unit circuits, which are fixed during the IC production process. Integrated circuits that allow users to modify their own internal connections: Programmable Logic Device (PLD). The internal circuit structure of PLD can be set by writing programming data. The programming data written to the PLD can also be erased and rewritten. Commonly used programmable logic devices:CPLD: Complex Programmable Logic Device (CPLD), FPGA: Field Programmable Gate Array (FPGA). The essence of the difference: the circuit structure is different.CPLD: Array of sum-or-sum logic based on "product terms. FPGA: CLB array based on "Look Up Table" (LUT) PS (ARM) 3.1 PS 1.Central Interconnect: Terminal interconnect, responsible for managing and directing the communication between AXI interfaces. 2.I/O: Interface with the outside world, connected to the outside world through MIO. 54 3.Memory Interfaces: Memory interfaces, static (lower left) or dynamic (right) memory interfaces. Clock Generation: Clock generation module, generate the clock frequency required by each internal module. 5.Reset: reset module PL terminal (the following part) 6.EMIO: Expansion IO, by connecting to the PL IO for expansion. 7.XADC: PL inside the hard core, to achieve digital-to-analog conversion. 8.DMA: PL to PS direct memory access. 9.IRQ: interrupt request, PL side can generate interrupts to pass to the PS interrupt controller. 10.Config AES/SHA: FPGA configuration interface. the PL part is actually configured by the PS. the PS starts configuring the PL first. 11.AXI interface: including ACP, High-Performance Ports Programmable Logic, General-Purpose Ports.   3.2 APU 1.FPU and NEON Engine: FPU floating point unit, NEON single instruction multi-data engine. Massive parallel computing acceleration. 2.MMU: storage management unit, physical address to virtual address mapping. 3.I-Cache, D-Cache: Instruction Cache and Data Cache. one level of Cache. 4.512KB L2 Cache: L2 Cache, shared by two processors. 5.OCM: on chip memory, on-chip memory 6.DMA: direct memory range, data transfer 7.GIC: interrupt controller 3.3 AXI How do I use Zynq? Compared to ASICs, ASSPs are less dangerous and may reach the market sooner. However, because it is a standard product, it has little design freedom. To achieve a fair trade-off, developers frequently choose to use a 2-chip system that combines an FPGA with an ASIC or ASSP. However, using two chips presents a completely new set of difficulties for programmers. Zynq is distinctive in that it offers a solution for every issue mentioned above and does it successfully in a single chip, making it the first of its type. It gives FPGA hardware programmers access to the same resources that software programmers often have (such as Python programming languages, operating systems, drivers, etc.). Without having to change the architecture of their applications, software developers can use Zynq to adapt and expand the functionality of their programs onto their hardware. Due to Zynq's FPGA capacity to expand the peripheral capabilities of the dual ARM A9 processors, the same hardware design can be applied twice. Developers just need to change the elements of their design that must change with each iteration. Pros of Zynq Pros of Zynq Quick Time to Market Zynq provides developers with a significant productivity edge. Programmable logic's adaptability enables manufacturers to create customized products without going through the time-consuming and expensive process of creating an ASIC. If specs change, designers can quickly alter the device both before the product is released and while it is being used.   Cost and Power Savings Zynq has the ability to combine features from several components into a single chip while still performing the intended function. Up to 40% in cost reductions may result from this. Zynq's versatility enables users to use a single chip for a variety of products. Improvements in System Performance The integration of the bandwidth between the processing system and programmable logic is what distinguishes Zynq from other alternatives. This bandwidth is several orders of magnitude greater than what a 2-chip system would be able to provide. As a result, accelerators with up to a 10x increase in performance can be made to offload processing-intensive jobs. Interactive Systems Programming Zynq is a significant advancement in SoC-level integration. It combines, in a single device, the capabilities and power characteristics of an ASIC, the adaptability of an FPGA, and the programming simplicity connected to microprocessors. Compared to a 2-chip solution, Zynq is more dependable and secure because it is a fully integrated system.   ### Objective of the Experiment: Arduino Microcontrollers Applications with Switches and Sensors I. Objective The main goal of this experiment is to familiarize oneself with the utilization of the Arduino microcontrollers for monitoring switches and sensors. Additionally, the objective is to trigger devices like LEDs or a speaker based on specific sensor output values. II. List of Needed Components The following components are necessary for conducting this experiment:  Two 1 kΩ resistors • One 100 kΩ potentiometer • One Arduino Uno • One USB cable III. Background The Arduino is a versatile microcontroller board with the capability to read switches and sensors and control various devices like lights, speakers, motors, and more. Microcontrollers find applications in a wide range of devices such as cars, cell phones, cameras, appliances, printers, etc. One of their many functionalities includes monitoring sensors and triggering an output device based on specific conditions. For instance, in a motion-controlled light setup, a microcontroller might activate a light when motion is detected by a motion sensor and then turn it off after a set period. Microcontrollers are commonly used to oversee sensors and manage motors or actuators in robots, quadcopters, and similar applications. On the Arduino website (www.arduino.cc), you can find comprehensive information about the Arduino Uno and its programming procedures. If you wish to download the free Arduino software, simply click on the "Software" section. For technical specifications concerning the Arduino Uno board, navigate to "Products," then "Arduino," and click on "Uno." To enhance your understanding of Arduino programming, you can explore the "Learning" and "Reference" sections. Additionally, you'll find tutorials, a forum, a collection of Arduino projects, and more. It's important to note that no prior programming experience is required to successfully complete this lab. IV. Prelab Assignment  What does the Arduino command “pinMode” do? What does the Arduino command “digitalWrite” do?  What does the Arduino command “digitalRead” do?  What does the Arduino command “analogRead” do? V. Procedure Part 1: Arduino Set Up In this section of the experiment, we will utilize a pre-existing sketch to create a blinking effect for an LED. To program the Arduino microcontroller, we'll employ the free Arduino software, a text editor that enables us to write programs referred to as sketches (refer to Figure 1). Begin by connecting the Arduino board to the computer using the USB cable. Once connected, open the Arduino software. Within the software, you'll find several example sketches provided. To access the "Blink" example sketch, click on File, then go to Examples, 01.Basics, and select Blink. The Blink sketch will then open in a new Arduino window. Set up the software for the Arduino Uno board by following these steps: 1. Click on Tools, then select Board, and choose Arduino/Genuino Uno. 2. Click on Tools again, then select Port, and choose the port labeled as "Arduino/Genuino Uno." 3. In case you don't see any ports with the label "Arduino/Genuino Uno," attempt unplugging the Arduino from the computer and then plug it back in. To execute the sketch, click on the Upload Button (refer to Figure 1). This action will initiate the compilation, upload, and execution of the sketch. Upon completion, the LED located near pin 13 should exhibit a repeating pattern of turning on for 1 second, followed by turning off for 1 second. If you encounter an error message like "Problem uploading to board," you can resolve it by selecting another port. Simply click on Tools, then Port, and choose a different port from the list. Part 2: Blink Sketch Now, let's explore the Blink sketch and customize it to blink in a pattern of your preference. While the Arduino board is programmed using the C++ computer language, the Arduino software incorporates various features that allow you to create sketches without requiring an in-depth knowledge of C++. The text located at the beginning of the Blink sketch serves as a comment. Comments are utilized to document the sketch, providing insights for individuals who read or edit it. However, it's important to note that comments are ignored by the Arduino software during the compilation process. Two methods exist to designate text as a comment. Firstly, if a line contains the characters "//", everything following it is considered a comment. Secondly, any text enclosed between "/*" and "*/" is treated as a comment. The "setup" function is responsible for initializing the sketch. This function is executed only once, either when the Arduino board is powered up for the first time or when it is reset using the reset button. The Arduino Uno offers 14 general-purpose input/output (I/O) pins, which can be configured as either inputs or outputs. Pin 13 is connected to an LED on the Arduino board. To set pin 13 as an output, the command "pinMode(LED_BUILTIN, OUTPUT)" is used. This works because the Arduino software assigns the value 13 to LED_BUILTIN. By replacing LED_BUILTIN with any other pin number, you can set any pin as an output. Similarly, to set a pin as an input, replace OUTPUT with INPUT. Remember to include a semicolon ";" after each command, and the commands within a function are enclosed in curly brackets "{ }". Once the "setup" function finishes its execution, the "loop" function is continuously called by the Arduino until either the board is powered down or reset. Within this sketch, the command "digitalWrite(LED_BUILTIN, HIGH)" is used to set Pin 13 to a HIGH state, resulting in the pin outputting +5V and turning on the LED. You can set any pin to a HIGH state by replacing LED_BUILTIN with the respective pin number. The "delay(1000)" command introduces a pause of 1000 milliseconds (1 second). Subsequently, the command "digitalWrite(LED_BUILTIN, LOW)" sets Pin 13 to 0V, turning off the LED. After another 1000 milliseconds pause, the "loop" function is invoked again, repeating the entire process. Part 3: Blink LEDs Build the circuit as depicted in Figure 2. Ensure that the center connector (Pin 2) of the potentiometer is connected to Arduino Pin A0, as illustrated in Figures 3 and 4. Regarding the Debounced Pushbutton, it is internally connected to ground, so there is no need to make that connection manually. Additionally, please be aware that the Arduino pin labeled as "5V" serves as a power supply specifically generated on the Arduino board for this experiment. Do not connect the bench supply or the Proto-board supply to the Arduino; instead, utilize the provided power supply on the board. To ensure proper functionality of the Debounce Pushbutton circuit, make sure to power on the Proto-board. Within the Logic Indicator section on the Proto-board, locate a switch labeled "5V/+V" and set it to the "5V" position. Additionally, there is another switch labeled "TTL/CMOS"; set this switch to "TTL." Verify the functionality of your circuit by utilizing the Digital Multimeter (DMM) to measure the voltage connected to Arduino Pin 2. When the button is not pressed, the measured voltage should be 0V, and when the button is pressed, it should read 5V. Similarly, the voltage connected to Arduino Pin A0 should fluctuate between 0V and 5V as you turn the knob on the potentiometer. It is crucial to remember that Arduino input pins must never be connected to a voltage higher than 5V or lower than 0V, as doing so could potentially harm the Arduino board. Create a backup of the Blink sketch by selecting File and then Save As, and save it to your P: drive. Afterward, customize the sketch to make the four Logic Indicator LEDs blink in a pattern according to your preference. Once you've made the modifications, save the updated sketch to your P: drive. Part 4: Read a Digital Input In this section, we will explore an example sketch that demonstrates reading a digital input. This sketch can be adapted to monitor various sensors, including motion detectors, which provide a digital output. To access the example sketch named "DigitalReadSerial," click on File, go to Examples, select 01.Basics, and then choose DigitalReadSerial. To execute the sketch, compile, upload, and run it by clicking on the Upload button. Afterward, click on the Serial Monitor button (refer to Figure 1). The sketch is expected to print "0" to the Serial Monitor when the button is not pressed and "1" when the button is pressed. Now, let's take a closer look at the DigitalReadSerial sketch. The line "int pushButton = 2" establishes a variable named "pushButton" with a value of 2. This variable is of type "int," allowing it to store only integer values. Since this variable is defined outside of any function, it is considered global, making it accessible from any function within the sketch. The purpose of this variable is to store the input pin number to which the pushbutton switch is connected. Within the "setup" function, the command "Serial.begin(9600)" is employed to establish a serial connection (transmitting data one bit at a time) with the computer at a rate of 9600 bits per second. This command is essential for printing out any values in the sketch. The "pinMode(pushButton, INPUT)" command initializes Pin 2 as an input. It's worth noting that when the Arduino powers up, the I/O pins are automatically set as inputs, making this particular command technically unnecessary. Within the "loop" function, the line "int buttonState = digitalRead(pushButton)" establishes an integer variable named "buttonState." Variables defined inside a function are private to that function, making them only accessible to other commands within the same function. The "digitalRead" function is used to read the value from Pin 2, and the outcome is stored in the variable "buttonState." When the voltage on the input pin is close to 5V, the "digitalRead" function returns the value 1; otherwise, it returns 0. The "Serial.println(buttonState)" command is used to display the value of the variable "buttonState" on the Serial Monitor. The "delay(1)" command introduces a 1 millisecond delay. The "loop" function is continuously called until the power is turned off or the Arduino is reset. Make a duplicate of the DigitalReadSerial sketch and save it to your P: drive by selecting File and then Save As. Let's enhance the sketch to perform different actions based on whether the switch is pressed or not. Add the following lines within the "loop" function after the "digitalRead" line: [Instructions to add new lines here]. if (buttonState == 0) // if switch is not pressed (note there are two equal signs) { digitalWrite(13, LOW); // turn LED off } else { digitalWrite(13, HIGH); // turn LED on } Test the aforementioned modification. Observe that the LED connected to Pin 13 should be off when the switch is not pressed and on when the switch is pressed. Now, further modify the sketch to make the LEDs blink in two different patterns based on whether the switch is pressed or not. After making these modifications, save your updated sketch to your P: drive. Checkpoint 1:Demonstrate your sketch to the instructor art 5: Read an Analog Input In this section, we will explore a sketch that reads an analog input voltage from a potentiometer. This sketch can also be adapted to monitor various sensors, such as an RTD or photosensor, which provide analog outputs. To access the example sketch named "AnalogReadSerial," click on File, go to Examples, select 01.Basics, and then choose AnalogReadSerial. Click on the Upload button, and then click on the Serial Monitor button (refer to Figure 1). While adjusting the potentiometer knob, observe the voltage Vi in Figure 2, which should vary between 0 and 5V. The printed values on the Serial Monitor will also fluctuate accordingly. Determine the relationship between the voltage Vi and the values displayed in the Serial Monitor. The Analog ReadSerial sketch initializes the serial connection to the computer at 9600 bits per second within the "setup" function. In the "loop" function, the sketch employs the analogRead command to read the analog voltage from pin A0, thereby converting it into an integer. This integer value is stored in the variable "sensor Value," which is then printed to the Serial Monitor, followed by a 1 mS delay. Create a duplicate of the Analog Read Serial sketch and save it to your P: drive by selecting File and then Save As. Next, modify the sketch to convert the value returned from the analog Read function into volts and print out the voltage value. To store the value in volts, you will require an additional variable capable of storing floating-point numbers, so instead of using "int," use "float" as the variable type. Additionally, when calculating the voltage, ensure that you instruct the Arduino to use floating-point arithmetic by employing constants with decimal points (e.g., 5.0 and 1023.0) instead of integer values (5 and 1023). Run your sketch and record both the voltage Vi and the voltage computed by your program (see Table 1). Finally, compute the percentage error. Save your modified sketch to your P: drive. Part 6: Making Tones In this section, we will create a new sketch to produce tones with a speaker. To begin, open a new sketch by clicking on File and then New. Afterward, manually type or copy and paste the following sketch into the Arduino software. /* * Generate Tones */ int speakerPin = 3; // pin connected to the speaker void setup() { // put your setup code here, to run once: pinMode(speakerPin, OUTPUT); // set speakerPin to output } void loop() { // put your main code here, to run repeatedly: int i; // loop counter int frequency = 500; // frequency in Hz int duration = 250; // duration in mS int shortDelay = 500; // short delay time in mS for (i = 0; i < 3; i++) { // generate tone tone(speakerPin, frequency, duration); delay(shortDelay); // short delay } delay(5000); // long delay } Execute the sketch and if the tones are too quiet, replace the 1 kΩ resistor in series with the speaker with a 150 Ω resistor. However, ensure that you do not decrease the resistance below 150Ω as it may damage the Arduino. The tone function requires three arguments: the pin number connected to the speaker, the frequency of the tone in Hz, and the duration of the tone in milliseconds. The "for" command, also known as a for loop, repeats the tone and delay functions three times. The for loop consists of three commands enclosed in parentheses. The first command, "i = 0," is executed only once at the beginning of the loop to initialize the loop counter. The second command, "i < 3," serves as a test, and if the condition is true, the statements within the parentheses are executed. Then, the third command, "i++," increments the value of the loop counter by 1 in this case. This process continues until the test condition becomes false, after which the sketch proceeds to the commands following the loop. As a result, the "for" command is equivalent to the following commands: i = 0; // initialize counter variable (this command is executed only once) i < 3; // this test is true, so do the loop commands tone(speakerPin, frequency, duration); // generate tone delay(delayTime); // delay i++; // increment loop counter, so now i equals 1 i < 3; // this test is true, so do the loop commands tone(speakerPin, frequency, duration); // generate tone delay(delayTime); // delay i++; // increment loop counter, so now i equals 2 i < 3; // this test is true, so do the loop commands tone(speakerPin, frequency, duration); // generate tone delay(delayTime); // delay i++; // increment loop counter, so now i equals 3 i < 3; // this test is now false, so skip down to the commands after the loop Establish a connection between the oscilloscope and Arduino Pin 3 to measure the period of the generated tones. Draw a sketch of the oscilloscope display and label the period, as well as the maximum and minimum voltages. Next, calculate the fundamental frequency and the percentage error in comparison to the frequency specified in the "tone" command. Afterward, customize the sketch to play tones according to your preferences. Once the modifications are complete, save your updated sketch. Part 7: Explore Develop a sketch that monitors a switch, potentiometer, or sensor, and utilize the input from these components to activate LEDs and/or the speaker in various ways. VI. Conclusion In this lab, we have explored the capabilities of Arduino, which is a versatile microcontroller board. Arduino allows us to interact with various components, such as switches, potentiometers, and sensors, enabling us to control LEDs, speakers, motors, and more. Arduino is programmed using the Arduino software, which lets us write sketches to define the behavior of our projects. The board has both digital and analog input/output pins, with analog voltages represented using a range from 0 to 5 volts. Additionally, we have learned how to read analog voltages from sensors using the analogRead function and to output audio tones and signals through the speaker using the tone function. With Arduino's flexibility and wide range of applications, it serves as a valuable tool for creating diverse electronic projects and automation tasks. Checkpoint 2:Present your conclusion and showcase the sketch you created in Part 7 to the instructor.   ### SC2012 – HIGH VOLTAGE, PRECISION, BIDIRECTIONAL CURRENT SENSE AMPLIFIER The TSC2010, TSC2011 and TSC2012 are precision bidirectional current sense amplifiers. They can sense the current thanks to a shunt resistor over a wide range of common-mode voltages, from – 20 to + 70 V, whatever the supply voltage is. They are available with an amplifier gain of 20V/V for TSC2010, 60 V/V for TSC2011 and 100 V/V for TSC2012. They are able to sense very low drop voltages as low as 10 mV full scale minimizing the measurement error. The TSC2010, TSC2011 and TSC2012 can also be used in other functions such as: precision current measurement, overcurrent protection, current monitoring, and feedback loops. This device fully operates over the broad supply voltage range from 2.7 to 5.5 V and over the industrial temperature range from -40 to 125 °C. Features Wide common mode voltage: – 20 to 70 VOffset voltage: ± 200 µV max2.7 to 5.5 V supply voltageDifferent gain availableTSC2010: 20 V/V Read more: SC2012 – HIGH VOLTAGE, PRECISION, BIDIRECTIONAL CURRENT SENSE AMPLIFIER ### RS PRO RSDM3045X BENCH DIGITAL MULTIMETER RS PRO RSDM3045X Digital Multimeter with 4 digits readings resolution (RSCAL) Introducing the RSDM3045X digital multimeter from RS PRO, a highly reliable digital multimeter designed with 4 (66000 count) digits readings resolution and dual-display, ideal for high-precision, multifunction and automatic measurement. This multimeter features a clear and precise 4.3″ TFT-LCD display and user-friendly interface, providing an excellent user experience. The interface includes as standard: USB device, USB host, LAN. This durable electrical tester includes true-RMS AC Voltage and AC Current measurement features, with a 1GB Nand flash size for mass storage configuration files and data files. Also included is a built-in cold terminal compensation for thermocouple, offering a versatile meter for use in a wide range of applications. Features And Benefits Real 4 digits readings resolution (66000 count)Up to 150 rdgs/s measurement speedTrue-RMS AC Voltage and AC Current measuring1Gb Nand flash size, Mass storage configuration files and data filesBuilt-in cold terminal compensation for thermocoupleEasy, convenient and flexible any sensor measurement control software: Ultra SensorStandard interface: USB Device, USB Host, LANSupport remote control via commands and compatible with commands of main stream multimetersBuilt-in help system for enhanced user experience and troubleshootingFile management (support for U-disc and local storage) Application Digital Multimeters are a type of measurement device used to test and measure a range of electrical properties such as voltage (volts), current (amps) and resistance (ohms). Using a digital output readout, the digital multimeter is connected to a device and measures typically the voltage and any resistances, giving you an output you can measure. Read more: RS PRO RSDM3045X BENCH DIGITAL MULTIMETER ### Control your home heating remotely with Arduino Cloud If you are interested in learning how to connect to your home heating system for remote monitoring and control. You might be interested to know the Arduino team has recently published an  great article on their official blog.  Providing more information  on the fascinating world of remote home heating control, specifically using the Arduino Cloud, Honeywell Evohome, and Node-RED. The Honeywell Evohome system, a smart home monitoring system, is a game-changer in optimizing daily tasks, energy usage, and cost-effective living. Unlike traditional thermostats that focus on a single temperature setting for the entire house, the Evohome system offers individual room-by-room temperature control. This innovative feature allows users to customize heating schedules for each room, enhancing comfort and offering significant cost savings. Setting up your home monitoring and remote connection system using Arduino Cloud. Get your Honeywell getconnected credentials Create the Device and Thing in the Arduino Cloud Install Node-RED in a machine and import the Node-RED flow Create the Arduino Cloud dashboard Test everything and enjoy! Honeywell Evohome The Evohome system is designed to adapt quickly to changing conditions. It achieves this through the use of multiple wireless radiator controllers and a central hub, ensuring accurate temperature maintenance. The integration of cloud technology takes this system to the next level. The Arduino Cloud, an all-in-one IoT platform, simplifies the process of connecting all devices to the internet for easy remote control. This cloud integration allows remote access and control of devices, making it easier than ever to manage your home’s heating system. Node-RED Node-RED, an open-source automation tool, acts as a middleware between different smart systems. This tool enables seamless integration and communication between devices and services. Node-RED allows the creation of sophisticated automation flows that trigger actions based on specific events or data received from different sources. The Arduino Cloud and Node-RED can be integrated to control and monitor the Honeywell Evohome system. The Arduino Cloud dashboard allows monitoring of temperature evolution and set points in all home zones, and control of the heating system.  Arduino cloud The integration of smart home monitoring systems with cloud platforms and flexible integration capabilities of tools like Node-RED optimizes temperature, enhances comfort, and significantly reduces energy consumption. This convergence of technology empowers users to take control of their heating system, leading to a more comfortable, efficient, and sustainable home. In conclusion, the Arduino team’s article provides a comprehensive guide on how to control your home heating system remotely using the Arduino Cloud, Honeywell Evohome, and Node-RED. This is a testament to the power of technology in creating a more comfortable, efficient, and sustainable living environment. Source: Control your home heating remotely with Arduino Cloud ### BLINKENLIGHTS TO BOOTLOADER: A GUIDE TO STM32 DEVELOPMENT While things like the Arduino platform certainly opened up the gates of microcontroller programming to a much wider audience, it can also be limiting in some ways. The Arduino IDE, for example, abstracts away plenty of the underlying machinations of the hardware, and the vast amount of libraries can contribute to this effect as well. It’s not a problem if you just need a project to get up and running, in fact, that’s one of its greatest strengths. But for understanding the underlying hardware we’d recommend taking a look at something like this video series on the STM32 platform. The series comes to us from [Francis Stokes] of Low Byte Productions who has produced eighteen videos for working with the STM32 Cortex-M4 microcontroller. The videos start by getting a developer environment up and blinking LEDs, and then move on to using peripherals for more complex tasks. The project then moves on to more advanced topics and divides into two parts, the development of an application and also a bootloader. The bootloader begins relatively simply, and then goes on to get more and more features built into it. It eventually can validate and update firmware, and includes cryptographic signing (although [Francis] notes that you probably shouldn’t use this feature for production). One of the primary goals for [Francis], apart from the actual coding and development, was to liven up a subject matter that is often seen as dry, which we think was accomplished quite well. A number of future videos are planned as well. But, if you’re not convinced that the STM32 platform is the correct choice for you, we did publish a feature a while back outlining a few other choices that might provide some other options to consider. Source: BLINKENLIGHTS TO BOOTLOADER: A GUIDE TO STM32 DEVELOPMENT   ### AMPHENOL ADVANCED SENSORS TELAIRE CHIPCAP 2-SIP HUMIDITY AND TEMPERATURE SENSORS Heilind Electronics, a leading distributor of electronic components worldwide and an authorized distributor for Amphenol Advanced Sensors, is now stocking the manufacturer’s ChipCap 2-SIP humidity and temperature sensor. ChipCap 2-SIP offers all the features and benefits of the ChipCap 2 in a Single In-Line Package (SIP) with ready installed V-Core capacitor for easy and convenient application. The product offers the most advanced and cost-effective humidity and temperature sensing solution, ideal for virtually any type of application. It uses an I2C interface and features alarm functions for control at minimum or maximum humidity. It is also RoHS-compliant and lead-free. Individually calibrated and tested, ChipCap2 performs at plus/minus two percent from 20 to 80 percent RH (plus/minus three percent over entire humidity range), and is ready to use without further calibration or temperature compensation. Not only does this solution feature low current consumption, precision and accuracy, but it also allows for better air circulation and response time. ChipCap 2-SIP sensors are the ideal sensing solution for applications requiring high reliability, high accuracy and cost-effectiveness. Read more: AMPHENOL ADVANCED SENSORS TELAIRE CHIPCAP 2-SIP HUMIDITY AND TEMPERATURE SENSORS ### Making Sounds with Arduino The limited funding and job opportunities in the humanities field make it challenging for emerging scholars to pursue additional knowledge. As scholars must acquire extensive knowledge within their respective disciplines, they must also create coherent projects within an academic context. This situation creates difficulties for educators to learn and develop technology-related curriculum. However, there is a positive aspect to incorporating technology in the classroom. Humanist teachers can explore intellectually stimulating digital pursuits and engage with students in writing classes who are interested in technological projects. Scholar David Rieder questions the predominant ranking of practices like close reading in the English discipline. In his project "Suasive Iterations: Rhetoric, Writing, and Physical Computing" (2017), Rieder argues that combining personal computing and rhetoric can create a shared space, moving away from outdated close reading practices that overlook the potential of technology. Rieder suggests that technology can enhance a close reading experience rather than replacing it, and denying students access to the digital world isolates their academic work. While I, as a developing literary scholar, value close reading for critical thinking, I am intrigued by some of Rieder's ideas and contemplate implementing them in the classroom. I believe it is essential for students and scholars to be open to his concepts. By integrating Rieder's theoretical ideas into classroom practices, we can find parallels between technology troubleshooting and essay writing, benefiting students struggling with conventional writing norms. Moreover, introducing personal computing in a writing classroom opens up opportunities for students to create impressive projects. Utilizing personal computing in the classroom setting can teach students valuable skills such as research, revision, and editing, even in hands-on projects rather than traditional textual work. Learning Objectives The primary goals of this project are to encourage students to rethink the writing process. In introductory rhetoric courses, many students come from diverse academic backgrounds and take rhetoric to fulfill their program's core requirements. For students with STEM backgrounds, this lesson serves as an opportunity to recognize the connection between digital scholarship and the convergence of humanities and technology. The lesson is particularly beneficial for those who prefer a hands-on and technical approach to learning. By bridging the gap between different learning styles, this project demonstrates to writers from non-humanities disciplines that they can approach writing with problem-solving in mind. Moreover, it highlights the value of writing within their chosen fields of study or areas of professional expertise. In summary, the key objectives of this project include: 1. Familiarize students with the fundamentals of Arduino software. 2. Demonstrate the interplay between hands-on learning and writing, showcasing how they complement each other. 3. Encourage students to explore diverse applications of research, writing, and revision beyond the classroom setting. Assignment Length Students are expected to dedicate one to two class periods to work on this project. Additionally, a small portion of time outside of class should be allocated to complete a group writing assessment and engage in self-reflection. Required Material The necessary materials for this project include an Arduino Uno Kit, a computer, and the required software. Skills Necessary Instructors are required to possess a certain level of proficiency in Arduino software. Access and Adaptability This lesson emerged from Dr. Casey Boyle's graduate seminar on "Accessible Rhetorics," where both students and the instructor explored the concept of accessibility in and beyond the classroom. In the book "Restricted Access: Media, Disability, and the Politics of Participation," Elizabeth Ellcessor discusses how various professionals collaborate to transform communication and media technologies to enable access for individuals with disabilities. This work is typically carried out in fields such as rehabilitation, special education, and engineering, falling under the category of "assistive technologies." The main goal of these research and design projects is to modify technology's material and encoded forms to facilitate its use by people with disabilities (90). When expertise from different fields, as highlighted by Ellcessor, converges, it can lead to the development of innovative assistive projects. By introducing access-based disability scholarship in a humanities-based classroom, students from diverse professional backgrounds can be empowered to explore how tools like Arduino Uno software can be utilized to create assistive technology solutions. Assignment Description This assignment will take place after students have completed some formal writing assignments, providing a refreshing break in the writing process to allow for reflection on research, writing, and revision. Students will work in pairs or small groups, and each group will be given an Arduino Uno Starter kit to make one of the kit's piezo buzzers emit sound. Some groups may complete this task relatively quickly, so more advanced groups will have the opportunity to work on lighting up the light sensors or modifying the Arduino code to create different sound patterns. Instructor Preparation Familiarize with Arduino fundamentals. Develop written assignment guidelines. Identify parallels between writing and hands-on procedures. Student Preparation View the instructional video. Refresh knowledge on Arduino Uno fundamentals. Be ready to discuss the writing process. In-Class or Assignment Instructions Collaborate as a group to devise a strategy for activating the piezo buzzer. Watch the instructional video both before and during the class session. Participate in creating a concise written report. Skills Workshop In groups of three or four, students will have access to the DWRL's Arduino Uno starter kit. They can utilize the Arduino software either on their personal computers or on the lab computers. Additionally, I will provide a PDF document titled "Getting Started with Arduino" by Massimo Banzi, the cofounder of Arduino, which will serve as a resource guide detailing the kit's contents. This part of the lesson will be conducted as a preparatory activity at home before the class session. Students will conduct a quick inventory to understand the purpose of each component in the kit, gaining a general idea of their functionalities. Moreover, they will watch an instructional video to learn how to utilize Arduino Uno computing devices along with the computer programming software. Assessment Suggestions Instructors have the flexibility to decide the scope of this assignment, which can either be a small standalone task or part of a larger, ongoing project exploring digital humanities and technology in writing classrooms. Students will collaborate to create a group write-up detailing their experience with using the Arduino. This report should include technical information about the computing components and software code. They should briefly describe how they divided the work to make the piezo buzzer emit sound. The report should outline each member's contributions, as well as the group's successes and challenges during the process. Additionally, students should reflect on how the tinkering process relates to research, writing, and revision. In separate reflective statements, students should address the challenges they encountered during the writing process and compare their experiences working with Arduinos to traditional essay writing, discussing whether it was more comfortable or challenging. The instructor's evaluation will not focus on whether the students successfully made a sound with the Arduino buzzer but rather on their ability to assess their accomplishments and setbacks in the process. The most critical aspect of evaluation lies in their thoughtful engagement and analysis of analogous features between the writing and tinkering processes, which will be at the core of the assignment's rubric. ### Controlling DC Motors and Servo Motors with Arduino and Processing GUI The workshop demonstrates how to control motors using Arduino and Processing In today's workshop, participants will learn how to control two types of motors, namely DC motors and servo motors, using the Arduino board. The workshop will make use of firmata and a Processing to Arduino link, and a straightforward user interface will be created in Processing to manage the motors connected to the Arduino board. The implementation will involve utilizing the Processing controlP5 library to create a user-friendly GUI. (1) The first step is to install the Processing controlP5 library. Download the library at http://www.sojamo.de/libraries/controlP5/ and follow the installation instructions: http://www.sojamo.de/libraries/controlP5/#installation Begin creating a basic Processing sketch that employs three sliders to produce colors within the RGB color system. import controlP5.*; ControlP5 controlP5; int slider_RED = 200; int slider_GREEN = 200; int slider_BLUE = 200; void setup() { size(400,400); controlP5 = new ControlP5(this); controlP5.addSlider("slider_RED",0,255,slider_RED,20,10,255,20); controlP5.addSlider("slider_GREEN",0,255,slider_GREEN,20,40,255,20); controlP5.addSlider("slider_BLUE",0,255,slider_BLUE,20,70,255,20); /* Check controlP5's javadocs to learn more about the arguments of the "addSlider" method: addSlider(java.lang.String theName, float theMin, float theMax, float theDefaultValue, int theX, int theY, int theW, int theH) See: http://www.sojamo.de/libraries/controlP5/reference/index.html You can get the slider's value directly by referencing its name. */ } void draw() { background(slider_RED, slider_GREEN, slider_BLUE); } In the examples folder of the controlP5 library, you will discover numerous other illustrations demonstrating the extensive capabilities of this GUI library. However, for today's purposes, we will only require a straightforward slider to control our motors. (2) Establishing a connection between the Arduino and a servo motor A servo motor possesses a unique characteristic that sets it apart from regular DC motors. Unlike DC motors, it does not allow continuous rotation of its output shaft; instead, it enables rapid and precise movement to specific output angles, usually within a range of 0 to 180 degrees. To achieve this, it requires a precisely pulsed input signal. For a more comprehensive understanding of servo motors, you can find a concise and informative discussion on the topic at the Seattle Robotics Society's resource: http://www.seattlerobotics.org/guide/servos.html Here is their graphical representation, demonstrating the correlation between the input pulse and the rotation angle of the output shaft: Due to the presence of a gearbox that efficiently transfers power and speed from the motor to the output shaft, servo motors are generally known for their substantial power capabilities. Interestingly, with minor adjustments, a servo can be hacked and repurposed as a cost-effective continuous rotation gearbox motor. For step-by-step guidance on how to perform this modification, you can refer to the tutorial provided by the Seattle Robotics Society:http://www.seattlerobotics.org/guide/servohack.html Here is a useful link for purchasing affordable DC gearbox motors, which can be a more economical option compared to modifying a servo:http://www.solarbotics.com/motors_accessories/gear_motors/ 2a) Perform a test on your servo motor. Setup the servo and upload the code from the following example:http://arduino.cc/en/Tutorial/Sweep (2a) Perform a test on your servo motor Setup the servo and upload the code from the following example: http://arduino.cc/en/Tutorial/Sweep Servo motor power requirements Unlike DC motors, which have varying power requirements, a servo motor typically operates within a voltage range of 4.5 to 6VDC. When powering the servo from a supply with less than +5V, it is essential to insert a 1kOhm resistor between the I/O line and the servo's control line. If you intend to use the same power supply for both the Arduino and the servo, ensure that it can deliver a current of at least 1000mA. Particularly when controlling multiple servos, an external power supply becomes necessary as servos can be quite demanding in terms of power consumption. In case you are using separate power supplies for the Arduino and the servo, remember to connect their ground (GND) lines together. Given that the power supply commonly used in this class provides 9V @ 1000mA, we must devise a method to transform the 9V into 5V to effectively power the servo. To accomplish this task, the 7805 voltage regulator IC comes into play as it serves the purpose of converting the voltage accurately. Below is a Fritzing sketch that demonstrates the proper connection of the servo to an Arduino board: Alternatively, you have the option to utilize the Arduino's built-in voltage regulator to obtain the 5VDC power required for the servo from the Arduino's 5V output. However, it is essential to be cautious with larger servos as they can draw more current and potentially cause overheating and damage to the smaller onboard voltage regulator. 2b) Processing to Servo With the Arduino circuit set up, we can now proceed to control the rotation angle of the servo using a slider in Processing. To enable communication between Processing and Arduino, we will use firmata, and the servo library will handle the servo control on the Arduino board. Simply upload the Servo firmata onto your Arduino board by navigating to Arduino's menu, then selecting File > Examples > Firmata > Servo Firmata. After completing the necessary code modifications, proceed to upload the code to your Arduino board. In Processing type in the following: import processing.serial.*; import cc.arduino.*; import controlP5.*; ControlP5 controlP5; Arduino arduino; int servoAngle = 90; void setup() { size(400,400); println(Arduino.list()); arduino = new Arduino(this, Arduino.list()[0], 57600); for (int i = 0; i <= 13; i++) arduino.pinMode(i, Arduino.OUTPUT); controlP5 = new ControlP5(this); controlP5.addSlider("servoAngle",0,180,servoAngle,20,10,180,20); } void draw() { arduino.analogWrite(9, servoAngle); //delay(15); } If Processing doesn't pique your interest for controlling servo movements, but you prefer using only the Arduino and electronic circuitry, this example utilizing the Arduino servo library could be of interest to you.http://arduino.cc/en/Tutorial/Knob (3) DC motor control - simple DC motors and servo motors require different control methods. For basic DC motor control, you can use a power transistor like the TIP120, controlled by one of the Arduino's PWM pins. Because DC motors consume a significant amount of power, it is not advisable to power them directly through the Arduino's PWM pin. In many instances, an external power supply should be employed with the Arduino to provide the required voltage and current for the motor. This example demonstrates a straightforward approach to control a DC motor, allowing you to adjust its speed but not change its direction of rotation (forward/backward). Here's how the circuit setup appears: In the context of the breadboard, this would appear as follows: Ensure that your Arduino board is powered using an external power supply with this configuration! Arduino code for this project: upload the SimpleAnalogFirmata example – File > Examples > Firmata > SimpleAnalogFirmata Processing code is implemented to enable motor speed control through a GUI slider: import processing.serial.*; import cc.arduino.*; import controlP5.*; ControlP5 controlP5; Arduino arduino; Winkler, Arduino motor control, p. 6 int DC_speed = 150; // 0-255 void setup() { size(400,400); println(Arduino.list()); arduino = new Arduino(this, Arduino.list()[0], 57600); for (int i = 0; i <= 13; i++) arduino.pinMode(i, Arduino.OUTPUT); controlP5 = new ControlP5(this); controlP5.addSlider("DC_speed",0,255,DC_speed,20,10,255,20); } void draw() { arduino.analogWrite(9, DC_speed); } (4) DC motor control – SN754410 Although a bit more intricate, this method offers the advantage of controlling both the direction and speed of the motor. The SN754410 integrated circuit (IC) proves to be practical as it enables you to manage the DC motor's speed and direction using just one PWM output and two digital outputs from your Arduino board. For more comprehensive instructions on employing the SN754410 motor driver IC with a microcontroller, refer to pages 255 to 260 in O’Sullivan and Igoe’s book "Physical Computing." Additionally, provided below is a circuit diagram illustrating how to interface the SN754410 with the Arduino board. Furthermore, here is an image depicting how this setup should appear on your breadboard: Before proceeding, ensure that you have uploaded the standard Firmata code onto your Arduino board. This will be essential for the processing code to function correctly. import processing.serial.*; import cc.arduino.*; import controlP5.*; ControlP5 controlP5; Arduino arduino; int DC_speed = 150; // 0-255 int direction = 1; // 0: backward, 1: forward void setup() { size(400,400); println(Arduino.list()); arduino = new Arduino(this, Arduino.list()[0], 57600); for (int i = 0; i <= 13; i++) arduino.pinMode(i, Arduino.OUTPUT); // pin3: PWM, pin 6: 1A, pin 7: 2A (see SN754410 datasheet) controlP5 = new ControlP5(this); controlP5.addSlider("DC_speed",0,255,DC_speed,20,10,255,20); Radio r = controlP5.addRadio("radio",20,50); //r.deactivateAll(); // use deactiveAll to NOT make the first radio button active. r.add("forward",0); r.add("backward",1); } void draw() { arduino.analogWrite(3, DC_speed); if (direction == 1) { // run in one direction, i.e. forward arduino.digitalWrite(6, 1); arduino.digitalWrite(7, 0); } else { // run in the opposite direction, i.e. backward arduino.digitalWrite(6, 0); arduino.digitalWrite(7, 1); } } void radio(int theID) { switch(theID) { case(0): direction = 1; // forward break; case(1): direction = 0; // backward break;    } } For those intrigued by the kinetic and mechanical aspects of motor output, I recommend reading pages 271 to 283 in O’Sullivan and Igoe’s book "Physical Computing," where you can find in-depth information on "Basic Mechanics." Engaging with LEGO Technic pieces offers an excellent opportunity to explore kinetic systems and Arduino-controlled motors. To get started, I recommend checking out these helpful tutorials: [provide links or resource names here]. http://www.clear.rice.edu/elec201/Book/legos.html http://sariel.pl/2009/09/gears-tutorial/ http://neuron.eng.wayne.edu/LEGO.../lego_building_tutorial.pdf   ### DELO INTRODUCES A NEW ADHESIVE FOR POWER SEMICONDUCTORS DELO has developed a new electronic adhesive that is both thermally conductive and electrically insulating and shows good strength even after standardized humidity tests with subsequent reflow cycles. DELO MONOPOX TC2270 ensures fast heat transfer and long-term reliable operation of semiconductors in power electronics. A common reason for the failure of power semiconductors is the heat development in the often very small components, as there is usually no efficient heat dissipation. Adhesives not only ensure a permanent bond but also dissipate heat and provide electrical insulation. The new electronic adhesive from DELO is a one-component, heat-curing epoxy resin. Due to its ceramic filler aluminum nitride it provides very high thermal conductivity of 1.7 W/(m∙K) (measured by the criteria of ASTM D5470). This is comparable with silver-filled isotropic conductive adhesives (ICA), which have a thermal conductivity of ~1.5-2.0 W/(m∙K). One advantage of DELO MONOPOX TC2270 over ICA is that it also provides electrical insulation. The adhesive thus ensures both reliable heat dissipation and electrical insulation of assemblies. Using the new electronic adhesive additionally allows proportionate component costs to be reduced. Read more: DELO INTRODUCES A NEW ADHESIVE FOR POWER SEMICONDUCTORS ### TINY FIDI BOARD FOR SUPER-FAST PROTOTYPING WITH CIRCUITPYTHON As Adafruit’s CircuitPython becomes increasingly popular as one of the basics for rapid microcontroller-based prototyping and development, several development boards are beginning to show up on the makers’ space to help fast track project prototype and production. One of such is the recent open-source CircuitPython development board by Omzlo called FIDI. “FIDI is a small development board running Adafruit’s CircuitPython, featuring 6 terminal block connectors and a qwiic connector, designed for fast prototyping. It runs on the ATSAMD21 microcontroller, a 32-it ARM Cortex M0+ clocked at 480 MHz, as found on many popular Arduino-compatible boards”, says the open-source hardware designer The tiny FIDI board is a derivative of the earlier released SERPENTE by Arthuro182, also aimed at rapid prototyping and producing quick projects. The two boards have quite a number of features in common but FIDI features 3.5mm terminal blocks, JST connectors, and a Micro USB connector that enhances its connectivity. FIDI is however fully compatible with the SERPENTE, even though there is no affiliation between the two designers. The board measures 25.4mm by 22mm (about 1 x 0.86 inch) and has other technical features which include: ATSAMD21E18A 32-bit Arm Cortex M0+ running at 48 MHz, fast enough for prototyping and simple applications.256 KB flash memory and 32KB RAM6x highly customizable GPIOs, that can be configured as 12C, SPI, UART, PWM, analog and digital I/O or a combination thereofMicro USB connection to PCRGB LED (user-controlled)3.3V logic level and power Read more: TINY FIDI BOARD FOR SUPER-FAST PROTOTYPING WITH CIRCUITPYTHON ### Biomedical Device Introduction and Overview Biomedical engineering, a highly interdisciplinary field within STEM, offers opportunities for engineering and computer science students to engage in its endeavors. It involves the application of biology and engineering principles to create novel devices aimed at enhancing healthcare and medical options. Prominent examples of biomedical devices encompass artificial organs, prosthetics, wearables, and surgical robots. The field of biomedical engineering has already made a significant impact by saving and enhancing numerous lives. Your objective is to contribute to this progress by developing one such device. Your group has been assigned the task of creating either a prosthetic or a wearable device that can significantly enhance the user's quality of life. To be considered a functional prototype, the prosthetic or wearable you develop must fulfill certain fundamental requirements. Example Projects Specifications Your team's objective is to design a biomedical device utilizing the provided materials. Additionally, you are required to develop an Arduino program that will govern the device's functions, sensors, and movements. It is necessary to present a cost estimate for the components used in the device. All modifications made to the original design must be thoroughly documented and explained. This includes technical design drawings, along with cost estimates. Any revisions made to the Arduino program must also be recorded and justified. The biomedical device must demonstrate consistent and effective performance in a predetermined set of tasks. You can choose from the Device Choices list provided for the biomedical device options. Furthermore, the device must meet the following requirements: 1. Operate independently and possess its own power source. 2. Comprise a unified and self-contained structure without any loose or dangling components. 3. Capable of autonomously executing all designated tasks. 4. Control all outputs through sensor or electrical inputs. 5. Consult the BMD Sensors Guide for assistance in utilizing common BMD sensors. 6. Incorporate at least one machining technique. 7. Exclude the use of a breadboard in the final device. 8. Ensure complete autonomy of the device without any alterations or switches during the Benchmarking and Commissioning stages. Refer to the course syllabus for specific submission deadlines. Device Choices You are required to select one option for your project from the following two choices: Option 1: Prosthetic Option Develop an artificial limb, a wearable piece of technology designed to effectively replace a missing body part. The artificial limb must incorporate features that emulate a hand, a wrist, and an elbow. However, only two of these features need to be fully functional. To be considered functional, a feature must successfully complete the following tasks: - The hand should be capable of grasping a shopping bag handle and lifting a 1-pound weight. - The elbow must exhibit vertical movement of at least 90 degrees. - The wrist should be capable of rotating at least 180 degrees. Option 2: Wearable Option Create a wearable device, a technology worn on the human body that provides valuable health or fitness information to the user. This device must be capable of performing at least two of the following functions: - Measure and display UV intensity data, providing information on safe exposure duration before it becomes harmful. - Measure and display temperature data, indicating the safe exposure duration before it becomes harmful. - Monitor and display heart rate, issuing warnings when irregularities are detected. - Measure and display gas data in the surrounding area, issuing warnings if the air quality is hazardous. - Display the current date and time. For a comprehensive list of available materials accessible to all BMD groups, please refer to the provided "Available materials" resource. Machining Methods The following machining methods will be considered for Benchmarking, Commissioning, and Extra Credit. Currently, EG1004 offers 3D printing as the primary method, while other machining techniques are available through the MakerSpace. To utilize the MakerSpace machines, you are required to complete the MakerSpace Safety Orientation and sign up for a training session (training times can be viewed here). It's important to note that some of these methods may require additional materials that may not be accessible to all groups. 1. 3D Printing (plastics): This additive machining method is suitable for creating small and intricately designed 3D objects. While EG1004 provides access to basic 3D printing resources, the MakerSpace offers a wider range of filament types and build plate dimensions. Additional information can be found in the online MakerSpace 3D Printing Training (NYU Login is required). 2. Laser Cutting (wood or acrylic): Laser cutting is a subtractive machining method ideal for precise cutting and engraving of 2D figures. It is particularly useful for efficient production of boxes. Further details can be found in the online MakerSpace Laser Cutting Training. 3. CNC Milling (wood, plastics, and soft metals): CNC milling is a subtractive machining technique suitable for cutting and etching 2D or 3D shapes from various materials. The MakerSpace provides access to CNC milling machines. Comprehensive information is available in the online MakerSpace Othermill CNC Training. 4. Woodwork (hand and power saws available in the MakerSpace): The MakerSpace offers a variety of power tools for woodworking purposes. These tools can be utilized for shaping and cutting wood. Detailed guidelines can be found in the online MakerSpace Power Tools Training. Please refer to the appropriate training resources and comply with the necessary safety measures when utilizing these machining methods. Microsoft Project To effectively manage your project timeline, you are required to create a project schedule using Microsoft Project. To familiarize yourself with Microsoft Project, access the Microsoft Project Student Guide. The schedule should encompass all project-related tasks from the project's commencement to its submission. Here is a guide on how to transfer a file. Ensure that your Microsoft Project schedule includes the following elements: 1. Minimum of 20 tasks (excluding Milestones): Incorporate a comprehensive list of tasks required for the project, excluding milestones. 2. Clearly indicated milestones: Clearly identify milestones within the project plan, assigning them a duration of zero days. 3. Assignment of responsible individuals: Each task should be assigned to the person responsible for its completion. Include the names of the resources associated with each task. 4. Inclusion of Gantt chart: Utilize the "Copy Picture" function to incorporate the project plan's Gantt chart into your presentations. Avoid taking a screenshot. 5. Display of Gantt chart alongside task list: Present both the Gantt chart and the list of tasks, ensuring they fit on a single slide. 6. Progress line on the Gantt chart: Clearly depict a progress line on the Gantt chart to indicate the project's progress. 7. Clear status indication during the presentation: Explicitly state whether the project is on-time, behind schedule, or ahead of schedule during the presentation. For assistance in planning the project and scheduling costs, refer to the manual page titled "Planning Project Scheduling & Costs." By following these guidelines and utilizing Microsoft Project effectively, you can create a comprehensive project schedule that will aid in managing your project's timeline. Drawings As part of the Milestone presentations and Benchmark assessments, you will need to produce a CAD model of your device. You have the flexibility to utilize any CAD software of your choice. Fusion 360 is recommended as it is both used and taught in EG1004 labs and other SLDPs. You can download Fusion 360 for free using your NYU email. While other CAD software such as SolidWorks, Inventor, and Rhino are allowed, EG1004 does not provide resources for obtaining or learning those programs. Using your selected CAD software, you are required to create four drawings of the device: front, top, most detailed side, and isometric views. Each drawing should incorporate sensors and motors as part of the design. It is essential to document each revision made to the design. All changes should be thoroughly presented during the Milestone presentations. This ensures that the evolution of the design is well-documented and can be effectively communicated to assessors. Figure 1: Example of BMD Drawing Diagrams As part of the Milestones, presentations, and Benchmark assessments, you will need to generate both a circuit diagram and a schematic diagram of your device. These diagrams provide visual representations of your circuit and its components. A circuit diagram presents a realistic depiction of your circuit, illustrating the physical layout of the wires and how they are interconnected with the components. This diagram, represented as Figure 2, allows for a clear understanding of the physical connections within the circuit. On the other hand, a schematic diagram focuses on the functional aspects and plans of your circuit, without concerning itself with the physical arrangement of the wires. This diagram, shown as Figure 3, provides an overview of the circuit's logical structure and helps in comprehending the circuit's functionality. Both the circuit diagram and the schematic diagram are crucial in effectively communicating the design and operation of your device during the assessment process. Figure 2: Circuit Diagram Example Figure 3: Schematic Diagram Example EG1004 suggests using Tinkercad and Fritzing as circuitry modeling software to fulfill the requirements of creating circuit and schematic diagrams. Tinkercad is a free, web-based software that offers a user-friendly interface for constructing circuit diagrams. It provides a wide range of common electrical components, making it particularly suitable for simpler circuit designs. On the other hand, Fritzing is a free circuitry software that offers an extensive library of electrical components, making it useful for constructing circuit and schematic diagrams, especially for projects involving more complex electrical components. By referring to the Virtual Circuit Simulation Guide, you can access a comprehensive guide on using both Tinkercad and Fritzing. This guide will assist you in effectively utilizing these software tools to create accurate and detailed circuit and schematic diagrams for your project. Cost Estimate You are required to prepare a cost estimate that outlines the expenses for each component and the labor required for constructing the design. Use a clear and organized tabulation format in Microsoft Excel to present this cost information. Ensure that the materials used in the construction of your device are solely from EG1004's inventory. If you wish to incorporate other parts, obtain prior permission from your faculty member. Your responsibility includes researching and estimating the cost of all components involved in the design's construction. To aid in calculating the cost, you can refer to the Planning Project Scheduling & Costs page for assistance. Your Microsoft Excel spreadsheet should adhere to the following specifications for the cost estimate: 1. Labor cost breakdown with hours and rates: Clearly outline the labor hours required for construction along with the corresponding rates. 2. Consolidate low-cost pieces: For items with lower costs like wires, tape, and servo motors, group them together for concise representation. 3. Itemize high-cost pieces: For components that are relatively expensive, such as Arduino boards, sensors, 3D printing filament, acrylic, and wood, list them separately to provide detailed information. 4. Clearly display the total cost: The total cost of the project should be visibly shown in the bottom right corner of the spreadsheet. By presenting your cost estimate in an organized manner, you can effectively demonstrate the expenses involved in the construction of your design, including both materials and labor. Engineering Notebook During the course of your project, it is crucial to maintain a comprehensive record of all the work accomplished, along with future plans and objectives. This record is known as the Engineering Notebook. To fulfill the requirements for the Benchmark assessment, you will need to present your Engineering Notebook to the Open Lab TA conducting the assessment. For the Final Submission, the notebook should be in a Word Document format (DOC or DOCX) and must receive approval from an Open Lab TA. You can refer to the Keeping an Engineering Notebook page for a guide on how to write and organize your notebook. This guide provides an overview of the expectations and the recommended frequency for logging entries in your notebook. By maintaining a well-structured Engineering Notebook, you can effectively document your progress, plans, and goals throughout the project's duration, ensuring that you are well-prepared for both the Benchmark assessment and the Final Submission. Extra Tasks You have the opportunity to earn extra credit by completing up to two of the following tasks of your choice: 1. Accomplishing an additional Device Task. 2. Finishing Benchmark A, Benchmark B, or Submission ahead of schedule. 3. Integrating an extra sensor into the device. - Each sensor should be implemented in a way that results in a measurable enhancement of the device's performance. 4. Incorporating a display or touchscreen component into the design. 5. Developing a website or smartphone application that can interact with the device. - The application must have the capability to interface with the device seamlessly. 6. Proposing your own task: - If you have a unique idea for a task not listed above, you can present it to your Recitation TA and professor for approval before Benchmark B. - Creativity and innovation are highly appreciated, and original designs may receive extra credit at the discretion of your Recitation professor. - Specific point values for extra credit tasks can be found in the EG1004 Grading Policy. By completing these additional tasks, you have the opportunity to showcase your skills, innovation, and dedication, potentially earning extra credit to enhance your overall project evaluation. Milestones, Benchmarks, and Deliverables During the course of your project, you will need to provide regular progress updates known as Milestones. These Milestones involve a set of deliverables, which can include written submissions, presentations, and demonstrations. These deliverables are essential to track and showcase the advancement of your project. Furthermore, you will also be expected to meet specific benchmarks assigned to your project. Submitting reports and deliverables aligned with these benchmarks contributes to the continuous progress and comprehensive development of your project. To assist you with the 3D printing aspect of your project, you can refer to the Prototyping Guide, which contains valuable information on the requirements and guidelines for utilizing 3D printing resources effectively. This guide will aid in ensuring that your 3D printing tasks align with the project's objectives and expectations. Preliminary Design Investigation The Preliminary Design Investigation (PDI) plays a crucial role in establishing the foundation for your project. It involves detailing your project concept, sources of inspiration, and set objectives. The PDI should encompass the following components: 1. Cover Page 2. Project Overview 3. Goals & Objectives 4. Design & Approach 5. Cost Estimate 6. Project Schedule 7. Relevant Pictures You can find an example PDI template at the provided link. The PDI is expected to be submitted by Benchmark A and can be reviewed and approved by any Open Lab TA. Ensure that all the items listed above are included in your submission. To access the PDI Rubric for evaluation criteria, use the link provided. By thoroughly completing the PDI, you set the groundwork for a well-organized and informed project, providing a clear understanding of your project idea, objectives, and planned approach. Milestone 1 For Milestone 1, your task is to present a condensed version of your Preliminary Design Investigation, avoiding mere replication of the report in presentation format. Focus on conveying the essential points in a concise and lucid manner, maintaining a similar section formatting as in the report. Emphasize outlining your project goals and demonstrating the feasibility of your project. This entails: Milestone 1 Deliverables: For Milestone 1, your presentation should include the following key elements: 1. Project Description: Provide a concise overview of your project, outlining its purpose and objectives. 2. Design Approach: Explain the methodology and approach you plan to adopt to achieve your project goals. 3. Mission Statement: Present a clear and definitive mission statement that encapsulates the core purpose and vision of your project. 4. Preliminary CAD Drawing of Device: Include an initial Computer-Aided Design (CAD) drawing of your device, giving a visual representation of its planned structure. 5. Cost Estimate: Provide an estimation of the project's expenses, outlining the costs of components and labor. 6. Microsoft Project Schedule: Present a detailed schedule created using Microsoft Project, showcasing the timeline for various project tasks and milestones. 7. Progress Update: Offer a current status update on the project, highlighting any significant advancements made so far. Important Note: At this stage, you are required to choose your project goal from the Device Choices list. Once you make this decision, you cannot change your device choice after the specified deadline. Benchmark Assessment A Benchmark assessments are crucial evaluations that assess the progress of your project. Benchmark Assessment A must be completed by the end of Model Shop Session II, and adhering to the deadline is important as there are penalties for late submission. For further details on grading policies, please refer to the EG1004 Grading Policy. To successfully pass Benchmark A, your design must fulfill the following requirements: 1. Preliminary Design Investigation: Present a comprehensive Preliminary Design Investigation that outlines your project idea, goals, and approach. 2. Develop Initial CAD Model: Create your first design or concept for the hardware appearance of your device. Note that simple shapes and boxes will not be considered as an initial design. 3. One Working Sensor with Completed Wiring: Integrate one operational sensor into your design, with all wiring properly connected. Ensure that the Arduino code displays accurate data with appropriate units. 4. Submit .STL and .gcode Files of Team Logo: Provide both .STL and .gcode files of your team logo through the 3D Printing Submission portal on the EG website. 5. Prototyping and 3D Printing: Comply with the 3D printing requirements and guidelines outlined in the Prototyping Guide. You can find the protolab schedule in the same guide. 6. Updated Engineering Notebook: Keep your Engineering Notebook up to date with all the progress and activities related to the project. By meeting these requirements, you can successfully pass Benchmark Assessment A and demonstrate substantial progress in your project's development. Milestone 2 Milestone 2 will be a project progress update. You must explain all changes and developments made thus far, particularly in regards to Benchmark A. Include whether or not you were able to complete your Benchmark A requirements, and if not, explain why. Also, highlight any changes you plan on making to your design or project, in general. Your Milestone 2 presentation must include: Milestone 2 Deliverables: Project description Design changes since Milestone 1 Design approach Mission statement CAD drawings: top, front, most detailed side, isometric Circuit diagram Flowchart of code Cost estimate (previous and current). What changes were made? Microsoft Project schedule (previous and current). What changes were made? Click here to access the guide on how to transfer a file Progress update: current state of the project (time, budget, etc.) Benchmark Assessment B Benchmark Assessment B is a crucial evaluation that must be completed by the end of Model Shop Session III. Timely completion is essential, as there are penalties for late submission, as outlined in the EG1004 Grading Policy. To successfully pass Benchmark Assessment B, you are required to fulfill the following tasks: 1. Updated CAD Model: Showcase the modifications between your initial design and the new design. Provide clear visuals and explanations. 2. Machining Method Utilization: Utilize one of the accepted Machining Methods to manufacture the frame or body of your device. While the device does not need to be fully assembled, the individual pieces must be manufactured. For instance, you should laser cut all the individual pieces but not yet glue them together, or 3D print a claw and arm for your prosthetic without attaching them. Ensure you can explain how these pieces will be assembled and function. 3. Receive Soldering Training from EG: In-person students should receive training at Open Lab, while remote students should complete the MakerSpace Soldering Training and demonstrate their understanding through a completed quiz with a score of at least 80%. 4. Prosthetic Only: Control at least one motor using sensors, with the motors mimicking how they will function in the device (same direction, speed, angle, etc.). You should be able to explain how these motors will work to accomplish the required device tasks. 5. Wearable Only: Ensure that the device can complete at least one of the required tasks, and that data/warnings are not solely displayed on the Serial Monitor. 6. Approved .STL and .gcode Files of the Team Logo: Submit approved .STL and .gcode files of your team logo through the 3D Printing Submission portal on the EG website. Incorporate these tasks into your project to successfully pass Benchmark Assessment B. Remember to update your Engineering Notebook to reflect the progress and activities related to your project. The Prototyping Guide contains essential information on 3D printing requirements and guidelines, and you can find the protolab schedule there as well. ### FORCE FEEDBACK STEERING WHEEL MADE FROM POWER DRILL When it comes to controllers for racing games, there is perhaps no better option than a force feedback steering wheel. With a built-in motor to push against the wheel at exactly the right times, they can realistically mimic the behavior of a steering wheel from a real car. The only major downside is cost, with controllers often reaching many hundreds of dollars. [Jason] thought it shouldn’t be that hard to build one from a few spare parts though and went about building this prototype force feedback steering wheel for himself. Sourcing the motor for the steering wheel wasn’t as straightforward as he thought originally. The first place he looked was an old printer, but the DC motor he scavenged from it didn’t have enough torque to make the controller behave realistically, so he turned to a high-torque motor from a battery-powered impact driver. This also has the benefit of coming along with a planetary gearbox as well, keeping the size down, as well as including its own high-current circuitry. The printer turned out to not be a total loss either, as the encoder from the printer was used to send position data about the steering wheel back to the racing game. Controlling the device is an Arduino, which performs double duty sending controller information from the steering wheel as well as receiving force feedback instructions from the game to drive the motor in the steering wheel. After 3D printing a case for it and strapping it to a work bench, the initial tests proved to be promising. [Jason] can feel the motor from the power drill pushing against the steering wheel at the appropriate time. However there are some issues to work out with the prototype as the coupling mechanism between the motor and steering wheel isn’t strong enough to resist skipping and is likely to eventually break. We look forward to future videos when these issues are ironed out, but in the meantime we’d recommend taking a look at this force feedback mouse for other ways of making video game experiences more immersive. Source: FORCE FEEDBACK STEERING WHEEL MADE FROM POWER DRILL ### Arduino Cloud receives ISO 27001 security certification Arduino, the renowned provider of hardware, software, and digital services, has announced that its Arduino Cloud services have now achieved ISO/IEC 27001:2013 (ISO 27001) certification. This significant milestone underscores Arduino’s commitment to integrating security as a fundamental part of its development lifecycle. ISO 27001 is a globally recognized standard that outlines a framework for establishing, implementing, maintaining, and continually improving an Information Security Management System (ISMS). The standard stipulates the requirements for managing information security risks and safeguarding sensitive information within an organization. ISO 27001 adopts a systematic and risk-based approach to ensure the confidentiality, integrity, and availability of information assets. “ISO/IEC 27001 is the world’s best-known standard for information security management systems (ISMS). It defines requirements an ISMS must meet. The ISO/IEC 27001 standard provides companies of any size and from all sectors of activity with guidance for establishing, implementing, maintaining and continually improving an information security management system. Conformity with ISO/IEC 27001 means that an organization or business has put in place a system to manage risks related to the security of data owned or handled by the company, and that this system respects all the best practices and principles enshrined in this International Standard.” Arduino Cloud security certification Arduino’s CIO, Stefano Visconti, expressed his satisfaction with the achievement, stating, “This certification and the review from an external auditor are helping us to ensure that our internal security processes are robust and complete, fully aligned with the ISO27001 standard, so that we can offer secure and reliable services in Arduino Cloud.” The certification was awarded by DNV, a global quality assurance and risk management company. Massimo Alvaro, Italy Managing Director for Business Assurance at DNV, praised Arduino Cloud for its proactive approach to managing and protecting their information assets and mitigating security events. He said, “We are all experiencing the crucial importance of information security, and we can only be pleased to give the ISO 27001 certification to Arduino Cloud.” Arduino’s compliance with ISO 27001 is a testament to its commitment to maintaining the highest possible security posture for Arduino Cloud services. This ensures the best possible protection from cybersecurity risks for Arduino Cloud users. The certification is a significant step forward in Arduino’s ongoing efforts to provide secure and reliable services to its customers. In conclusion, the ISO 27001 certification of Arduino Cloud is a clear demonstration of Arduino’s dedication to information security and risk management. It is a significant achievement that will undoubtedly enhance the trust and confidence of Arduino Cloud users in the security of the services provided. Source: Arduino Cloud receives ISO 27001 security certification ### Experiment Objective: Utilizing Arduino Microcontroller for Switches, Sensors, LEDs, and Speaker Control I. Experiment Objective The main goal of this experiment is to gain proficiency in using the Arduino microcontroller to observe switches and sensors and to trigger devices like LEDs or a speaker based on specific sensor output values. II. Required Components List This experiment will necessitate the following components: • Two 1 kΩ resistors • One 100 kΩ potentiometer • One Arduino Uno • One USB cable III. Introduction The Arduino is a versatile microcontroller board capable of reading switches and sensors while controlling various devices such as lights, speakers, motors, and more. Microcontrollers find applications in a wide range of devices like cars, cell phones, cameras, appliances, and printers. One of their significant uses is monitoring sensors and triggering output devices based on specific conditions. For instance, in a motion-controlled light, a microcontroller can turn on the light when a motion detector detects movement and turn it off after a set duration. Moreover, microcontrollers play a crucial role in monitoring sensors and controlling actuators, enabling functionalities in robots, quadcopters, and other devices. IV. Pre-laboratory Assignment 1. What does the Arduino command “pinMode” do? 2. What does the Arduino command “digitalWrite” do? 3. What does the Arduino command “digitalRead” do? 4. What does the Arduino command “analogRead” do? V. Experimental Procedure Part 1: Arduino Set Up In this section of the experiment, we will utilize a pre-existing sketch to make an LED blink on and off. The Arduino microcontroller is programmed through the use of Arduino software, a text editor that enables you to write programs known as sketches (refer to Figure 1). To begin, connect the Arduino board to your computer using the USB cable. Next, launch the Arduino software. Within the Arduino software, you will find various example sketches. Open the "Blink" example sketch by clicking on File, Examples, 01.Basics, Blink. This action will open the Blink sketch in a new Arduino window. To set up the Arduino Uno board in the software, go to the "Tools" menu and select "Board." From the options, choose "Arduino/Genuino Uno." Additionally, click on "Tools," then select "Port," and choose the port labeled as "Arduino/Genuino Uno." In case you do not see any ports labeled as such, try disconnecting and reconnecting the Arduino from the computer. Press the "Upload" button (refer to Figure 1) to compile, upload, and execute the sketch. Once the process is finished, you should observe the LED near pin 13 blinking on for 1 second and then off for 1 second in a repetitive pattern. If you encounter an error like "Problem uploading to board," go to the "Tools" menu, choose "Port," and select a different port to resolve the issue. Part 2: Blink Sketch Now, let's analyze the Blink sketch and customize it to blink in a pattern of your preference. The Arduino board is programmed using the C++ computer language, but the Arduino software provides various features that allow you to write sketches without needing an in-depth understanding of C++. The introductory text in the Blink sketch serves as a comment. Comments are utilized to document the sketch for those who read or modify it, but they are disregarded by the Arduino software. There are two ways to denote text as a comment. If a line contains the characters "//", anything after those characters is treated as a comment. Additionally, any text enclosed between "/*" and "*/" is considered a comment. The "setup" function is responsible for initializing the sketch. It runs only once when the Arduino board is powered up for the first time or when the reset button is pressed. The Arduino Uno is equipped with 14 general-purpose input/output (I/O) pins that can be configured as either inputs or outputs. Pin 13 on the Arduino board is connected to an LED, and the command "pinMode(LED_BUILTIN, OUTPUT)" configures pin 13 as an output because the value of LED_BUILTIN is set to 13 by the Arduino software. Any pin can be set as an output by replacing LED_BUILTIN with the corresponding pin number. Similarly, any pin can be set as an input by replacing OUTPUT with INPUT. It's important to include a semicolon ";" after each command, and the commands inside a function are enclosed within curly brackets "{ }". Once the "setup" function is completed, the "loop" function is executed repeatedly until the Arduino is powered down or reset. In this sketch, the command "digitalWrite(LED_BUILTIN, HIGH)" is used to set Pin 13 to HIGH, resulting in the output of +5V and turning on the LED. By replacing LED_BUILTIN with the desired pin number, any pin can be set to HIGH. The "delay(1000)" command introduces a 1000 ms (or 1-second) pause. Following that, the "digitalWrite(LED_BUILTIN, LOW)" command sets Pin 13 to 0V, switching off the LED. After another 1000 ms pause, the "loop" function is called again, and the process repeats. Part 3: Blink LEDs Create the circuit as depicted in Figure 2. Ensure that you connect the central connector (Pin 2) of the potentiometer to Arduino Pin A0, as illustrated in Figures 3 and 4. The Debounced Pushbutton is internally connected to ground, so there's no need to make that connection manually. Be aware that the Arduino pin labeled as 5V is a power supply generated on the Arduino board specifically for this experiment. Therefore, refrain from connecting the bench supply or Proto-board supply to the Arduino. Ensure that the power to the Proto-board is switched on, as the Debounce Pushbutton circuit will not function without power. On the Proto-board, locate the Logic Indicator section and find the switch labeled 5V/+V. Set this switch to 5V. Additionally, there is another switch labeled TTL/CMOS; set this switch to TTL. To test your circuit, use a Digital Multimeter (DMM) to measure the voltage at Arduino Pin 2. When the button is not pressed, it should read 0V, and when the button is pressed, it should read 5V. Similarly, the voltage at Arduino Pin A0 should vary between 0V and 5V as you adjust the knob on the potentiometer. It is essential to avoid connecting voltages greater than 5V or less than 0V to the Arduino input pins, as this could potentially damage the Arduino board. Create a duplicate of the Blink sketch and save it in your P: drive by selecting File, Save As. Then proceed to customize the sketch to make the four Logic Indicator LEDs blink in a pattern of your preference. Remember to save your modified sketch to your P: drive. Part 4: Read a Digital Input In this section, we will explore an example sketch that deals with reading a digital input. This sketch can be adapted to monitor various sensors, including motion detectors, with digital outputs. To access the example sketch, click on File, Examples, 01.Basics, DigitalReadSerial. Compile, upload, and run the sketch by selecting the Upload button. Next, click on the Serial Monitor button (see Figure 1). The Serial Monitor should display "0" when the button is not pressed and "1" when the button is pressed. Now, let's take a closer look at the DigitalReadSerial sketch. The line "int pushButton = 2" declares a variable named "pushButton" and assigns it the value 2. This variable is of type "int," which means it can only hold integer values. Since this variable is defined outside of any function, it is considered global, allowing it to be used in various functions. The main purpose of this variable is to store the number of the input pin to which the pushbutton switch is connected. Within the "setup" function, the line "Serial.begin(9600)" is used to initialize a serial connection with the computer, enabling data transfer at a rate of 9600 bits per second. This command is required for the sketch to print out any values to the computer. Additionally, the command "pinMode(pushButton, INPUT)" sets Pin 2 as an input. However, it's worth noting that when the Arduino is powered up, it automatically sets the I/O pins to inputs, making this command optional in this specific case. Within the "loop" function, the line "int buttonState = digitalRead(pushButton)" creates an integer variable called buttonState. In this case, since the variable is defined inside the "loop" function, it is considered private and can only be accessed by other commands within the same function. The "digitalRead" function is then used to read the value from Pin 2 and store the result in the buttonState variable. When the voltage on the input pin is close to 5V, the "digitalRead" function returns the value 1, otherwise, it returns 0. The line "Serial.println(buttonState)" is responsible for printing the value stored in the variable buttonState to the Serial Monitor. The "delay(1)" command introduces a 1 mS (millisecond) delay before the "loop" function repeats again. This continuous repetition of the "loop" function continues as long as the power is on, or until the Arduino is reset. Make a duplicate of the DigitalReadSerial sketch and save it in your P: drive. To do this, click on File, and then choose Save As. After the "digitalRead" line inside the "loop" function, add the following lines to modify the sketch's behavior based on whether the switch is pressed or not. if (buttonState == 0) // if switch is not pressed (note there are two equal signs) { digitalWrite(13, LOW); // turn LED off } else { digitalWrite(13, HIGH); // turn LED on } Test the changes you made in the sketch. When the switch is not pressed, the LED connected to Pin 13 should remain off, and when the switch is pressed, the LED should turn on. Update the sketch to make the LEDs blink in two distinct patterns based on whether the switch is pressed or not. After making the modifications, save the updated sketch to your P: drive. Checkpoint 1: Showcase your modified sketch to the instructor for evaluation and feedback. Part 5: Read an Analog Input In this section, we will explore a sketch that reads an analog input voltage from a potentiometer. This sketch can also be adapted to monitor other sensors, like an RTD or photosensor, that provide analog output. To access the example sketch, click on File, Examples, 01.Basics, AnalogReadSerial. Click on the Upload button and then open the Serial Monitor by clicking on its button (see Figure 1). As you turn the potentiometer knob, the voltage (Vi) in Figure 2 should vary between 0 and 5V, and the printed values in the Serial Monitor should also change accordingly. Observe the relationship between the voltage (Vi) and the values displayed in the Serial Monitor. In the AnalogReadSerial sketch, the "setup" function initializes the serial connection to the computer at a rate of 9600 bits per second. In the "loop" function, the sketch uses the analogRead command to read the analog voltage from pin A0, converting the voltage to an integer. This integer value is stored in the variable sensorValue. The sketch then prints the value of sensorValue to the Serial Monitor, followed by a 1 mS delay. Save a copy of the AnalogReadSerial sketch in your P: drive by clicking on File, Save As. Then, modify the sketch to convert the value returned from the analogRead function to volts and print out the value in volts. To store the value in volts, you will need an additional variable capable of holding floating-point numbers, so use type "float" instead of "int." Additionally, when computing the voltage, instruct the Arduino to use floating-point arithmetic by using constants with decimal points, such as 5.0 and 1023.0, instead of 5 and 1023. Run your sketch and record both the voltage Vi and the voltage computed by your program (see Table 1). Finally, calculate the percent error. Save your modified sketch to your P: drive. Part 6: Making Tones In this part of the experiment, we will create a new sketch to generate tones with a speaker. To begin, click on File, then New in the Arduino software. Next, type or paste the following sketch into the Arduino software editor. /* * Generate Tones */ int speakerPin = 3; // pin connected to the speaker void setup() { // put your setup code here, to run once: pinMode(speakerPin, OUTPUT); // set speakerPin to output } void loop() { // put your main code here, to run repeatedly: int i; // loop counter int frequency = 500; // frequency in Hz int duration = 250; // duration in mS int shortDelay = 500; // short delay time in mS for (i = 0; i < 3; i++) { // generate tone tone(speakerPin, frequency, duration); delay(shortDelay); // short delay } delay(5000); // long delay } Execute the sketch. If the tones produced by the speaker are too faint, you can replace the 1 kΩ resistor that is in series with the speaker with a 150 Ω resistor. However, it is crucial not to reduce the resistance below 150 Ω, as doing so may harm the Arduino. The tone function takes three arguments: the first argument is the pin number connected to the speaker, the second argument is the frequency of the tone in Hertz (Hz), and the third argument is the duration of the tone in milliseconds (mS). The "for" command, also known as a for loop, repeats the tone and delay functions three times. The for command consists of three statements inside parentheses. The first statement "i = 0" is executed only once at the beginning of the loop, serving as the initialization of the loop counter. The second statement "i < 3" is a test, and if it evaluates to true, the enclosed statements are executed. After that, the third statement "i++" increments the loop counter by 1 in each iteration. This process continues until the test fails, and then the sketch proceeds to the commands following the loop. Hence, the "for" command can be interpreted as a condensed version of the following commands: i = 0; // initialize counter variable (this command is executed only once) i < 3; // this test is true, so do the loop commands tone(speakerPin, frequency, duration); // generate tone delay(delayTime); // delay i++; // increment loop counter, so now i equals 1 i < 3; // this test is true, so do the loop commands tone(speakerPin, frequency, duration); // generate tone delay(delayTime); // delay i++; // increment loop counter, so now i equals 2 i < 3; // this test is true, so do the loop commands tone(speakerPin, frequency, duration); // generate tone delay(delayTime); // delay i++; // increment loop counter, so now i equals 3 i < 3; // this test is now false, so skip down to the commands after the loop Connect the oscilloscope probe to Arduino Pin 3 and measure the period of the tones produced by the speaker. Draw a sketch of the oscilloscope display, and indicate the period, maximum voltage, and minimum voltage on the sketch. Next, calculate the fundamental frequency of the tone and determine the percent error by comparing it to the frequency specified in the "tone" command. Revise the sketch to produce tones according to your preference. Once you make the desired changes, save the modified sketch. Part 7: Explore Create a sketch to monitor the input from a switch, potentiometer, or sensor, and utilize that input to control the behavior of LEDs and/or the speaker in some manner. VI. Conclusion Throughout this lab, I have gained valuable knowledge about the Arduino microcontroller. An Arduino is a versatile microcontroller board that can be programmed to interact with switches, sensors, and various devices like LEDs and speakers. It serves as the brain of numerous electronic projects and finds applications in a wide range of tasks, such as home automation, robotics, sensor monitoring, and prototyping. In terms of analog voltage representation, the Arduino converts the analog signal from sensors or potentiometers into discrete digital values using its built-in analog-to-digital converter (ADC). This conversion process helps the Arduino process and manipulate analog data, making it a valuable tool for projects that involve continuous and variable signals. Checkpoint 2: Show your conclusion and demonstrate your sketch from Part 7 to the instructor. ### Gameduino Snake – Final Project For my physical computing class, I created a project utilizing the SparkFun Redboard. I've named it the Gameduino Snake, as it's essentially a compact handheld gadget that enables users to enjoy a game of snake on an LED matrix. The game incorporates a basic 8×8 LED matrix, capable of displaying both the game itself and the score once the game ends. Adjacent to the LED matrix, there's a triple-axis accelerometer attached to the breadboard. This accelerometer detects the movement of the entire game board, allowing the snake to move in the direction corresponding to the tilt of the device. For instance, tilting it forward causes the snake to move upwards. Additionally, an Ethernet shield is integrated into the Arduino, enabling players to share their scores via Twitter once they complete a game. Furthermore, the Gameduino includes three distinct buttons. The blue button functions as a power button, initiating the game by placing the snake and target on the LED matrix. The green button serves as a reset button, primarily used after the player encounters a game over, resetting the game and returning to the initial blank start screen. Lastly, the red button is used to send a Tweet containing the player's score, which is stored in the RedBoard's EEPROM memory upon game over. To prevent duplicate Tweets, the red button also includes the number of seconds elapsed since the last reset. It's important to note that the Tweet button must be pressed on the main screen prior to starting the game, in other words, it needs to be reset in advance. Please excuse the difficulty in playing the game while filming simultaneously, making it appear more challenging than it actually is. Additionally, I apologize for the poor visibility of the computer screen in the video. It displays "Snake Score," followed by my score of 3, and then "Time Since the Last Reset" along with the time, which was 14 seconds. When I started brainstorming ideas for my final project at the beginning of the term, I knew I wanted to create a game. After conducting some research online, I came across someone who had recreated Super Mario Bros. using an LED matrix and Arduino. This inspired me to utilize the LED matrix to develop a game on the Arduino. However, considering my limited coding skills as a beginner, I realized I would have to create a simpler game than Super Mario Bros. After careful consideration, I decided to make the game Snake, as I believed it would be easier to code and implement. I also had the idea to incorporate an Ethernet shield into the circuit, allowing players to share their scores on Twitter once the game ended. Additionally, I thought it would be interesting to include a GPS module to include the time and date in the tweets. However, after working on my intermediate project, I realized that the GPS module consumed a significant amount of memory. Considering the constraints of my final project, I had to exclude that feature. Initially, I had planned to control the snake using four push buttons. However, my teacher suggested using the accelerometer to make the project more engaging and physical. I decided to take the advice and implemented the accelerometer, which turned out to be a fun and unique way to play the game. Furthermore, I had intended to include a Piezo buzzer to add a musical tune to the game. Unfortunately, I couldn't find a suitable method to integrate it properly. The only way I knew to code music with the Piezo was by using delays, but incorporating the buzzer during gameplay would render the game unplayable. If I used it for the game over display, it would play the tune, show the display, play the tune again, and so on, never showing them simultaneously. Although I might have eventually found a solution, I decided to prioritize time constraints and omit the buzzer, as it didn't significantly enhance the overall experience. While developing this project, I encountered several challenges along the way. One of the initial major issues I faced was getting the snake to move correctly. Initially, I had programmed the RedBoard to disregard the specific x and y values captured by the accelerometer and instead focused solely on the accelerometer's orientation. After adapting a code I found online, the game worked fine and the snake moved as intended. However, this meant that the player had to tilt the board significantly for the snake to respond. Although it functioned, it wasn't the optimal setup for proper gameplay. Realizing this limitation, I decided to experiment with the values and modify the code so that it would consider the position and move the snake accordingly when the x and y values exceeded certain thresholds. This adjustment proved successful, and overall, the game ran smoothly, especially after receiving guidance from my instructor to ensure continuous movement of the snake. However, I encountered another small issue that impacted the game's enjoyment and playability. When the device was tilted at a diagonal angle, particularly in the lower right direction, it caused the snake to move diagonally. This was a disruptive glitch in the game's functionality. To address this problem, I collaborated with my professor and devised a solution. Essentially, I identified the values when the accelerometer was in a flat position and established that as the baseline reference point. I then determined a threshold around that point. If the relevant values exceeded that threshold, the snake would move in the corresponding tilted direction. This adjustment rectified the issue and ensured smooth movement of the snake while avoiding unintended diagonal movements caused by the diagonal tilt. I encountered a few additional issues during the project development. Initially, I had planned for the blue button to serve both as the power button and the reset button. However, I faced coding challenges while trying to implement this functionality. Realizing that I had an extra push button available, I decided to connect it separately to serve as the reset button, simplifying the process. The Tweet function also presented some difficulties. Initially, I had set it up to allow sending tweets from the game over screen, but it only worked at a specific moment. To resolve this issue, I modified the approach by having the RedBoard store the score in the EEPROM memory and enabling it to send the tweet from the start screen instead. It took some time to determine what additional information to include in the tweet to avoid duplicate messages. After experimenting with various setups, I eventually included the number of seconds elapsed since the last reset. Furthermore, I encountered a problem where the game occasionally crashed when using a 9-volt battery. It would run the game smoothly but freeze when displaying the game over screen. Although the issue seemed to be resolved during testing while writing this, I prefer connecting the device to a computer for power to avoid this potential glitch. It could be due to the battery being low on power or insufficient to support all the game features. Additionally, I discovered that using the battery made playing the game challenging due to its weight. The battery hanging off the side required more forceful tilting to register accelerometer and snake movements. Adjusting the thresholds in the code or attaching the battery to the bottom of the board might potentially address this issue, but it's difficult to determine the exact solution. I'm still unsure why the crashes occurred frequently during previous tests. If you're interested in building your own version of the Gameduino, below are the necessary parts, along with the corresponding schematic, sketch, and code. Parts: - 1 SparkFun Redboard/Arduino Uno - 1 MMA8452Q Triple-Axis Accelerometer - 1 8×8 Bi-Color LED Matrix with I2C backpack (can be a single color if desired, and the I2C backpack is optional but requires different code) - 3 Push Buttons - 2 10K Ohm Resistors - 2 330 Ohm Resistors - 1 Arduino Ethernet Shield - Several Wires Optional: - 9-volt battery - Battery holder You can view the schematic and sketch by referring to the resources provided below: [Link to schematic] [Link to sketch/code] Please note that the provided resources will contain detailed information on the connections and programming required to assemble the Gameduino. To connect the buttons, the power button, and the Tweet button, you need to supply 5 volts to one side of each button. From the other side, connect a 10K resistor to ground. This configuration ensures that when the button is pressed and the voltage is low, the current flows to the ground, completing the circuit. Additionally, connect a wire from that side of the button to the desired digital pins on the Redboard. In the case of my project, I used pin 7 for the power button and pin 6 for the Tweet button. For the reset button, simply connect one end of the button to the reset pin on the Redboard, and the other end directly to ground. This setup works because the reset pin triggers a reset when it receives a low or LOW reading, which is achieved by connecting it to ground. When the button is not pressed, the reset pin reads a normal reading, and when it's pressed, it receives a reading from ground (0 volts or LOW), resulting in a game reset without the need to press the reset button on the Redboard. As for the LED matrix, if you have an Adafruit I2C backpack attached to it, the connection is straightforward. Supply 5 volts to the pin with a plus sign (+) on the matrix to power it. Connect the pin with a minus sign (-) to ground to provide a path for the current to flow. Since the matrix backpack utilizes I2C communication, you'll also need to connect the SDA and SCL pins on the backpack to the corresponding pins on the Redboard. You can use the designated SDA and SCL pins on the Redboard, or alternatively, the A4 and A5 pins can serve the same purpose. In my project, I used A4 for SDA and A5 for SCL, utilizing the analog pins for this function. Lastly, to connect the triple-axis accelerometer, supply 3.3 volts to the pin labeled 3.3 on the accelerometer. Connect a wire from the ground pin on the accelerometer to the ground, completing the circuit and allowing the current to flow. Since the accelerometer also uses I2C communication, connect the SDA pin on the accelerometer to the SDA or A4 pin on the Redboard, passing it through a 330 Ohm resistor. Similarly, connect the SCL pin on the accelerometer to the SCL or A5 pin on the Redboard, also passing it through a 330 Ohm resistor. Final_Project Gameduino Code The code contains comments that explain the functionality in detail. In summary, the Redboard sets up its values, and if it detects a press of the blue button, it proceeds to draw both the target and the snake based on the information obtained from the setup function. The program then continuously monitors two conditions: whether the snake is within the playing area and whether it has collided with itself. If both conditions are true, a function is called to detect the position of the accelerometer and adjust the snake's movement accordingly. However, if either condition is false, the game over function is triggered. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 void moveSnake() { // this function will move the snake according to the accelerometer   if (accel.available()) {     accel.read(); //this will read the values of the accelerometer     Serial.print("x: ");     Serial.print(accel.cx, 3);     Serial.print("\t");     Serial.print("y: ");     Serial.print(accel.cy, 3);     Serial.print("\t");     Serial.print("z: ");     Serial.print(accel.cz, 3);     Serial.print("\t");     Serial.println(prevDirection);     float restingX = 0; //the accelerometer at rest     float restingY = 0;     float threshold = 0.350; //how much it should be tilted to move the snake.     Serial.println(accel.cy - restingY);     Serial.println(accel.cx - restingX);     Serial.println(abs(accel.cx - restingX));     if (((accel.cy - restingY) > threshold) && (abs(accel.cx - restingX) < threshold)) { //if the accelerometer is tilted left       Serial.println("Left");       snakeY[0] = snakeY[0] + 1; // the snake will move to the left.       prevDirection = 1;     }     if (((accel.cy - restingY) < -threshold) && (abs(accel.cx - restingX) < threshold)) { //if the accelerometer is tilted right       Serial.println("Right");       snakeY[0] = snakeY[0] - 1; // snake will move to the right       prevDirection = 2;     }     if (((accel.cx - restingX) > threshold) && (abs(accel.cy - restingY) < threshold)) { //if the accelerometer is tilted up       Serial.println("Up");       snakeX[0] = snakeX[0] - 1; // the snake will move up       prevDirection = 3;     }     if (((accel.cx - restingX) < -threshold) && (abs(accel.cy - restingY) < threshold)) { //if the accelerometer is tilted down       Serial.println("Down");       snakeX[0] = snakeX[0] + 1; // it will move the snake down       prevDirection = 4;     }     if ((-threshold < accel.cx) && (accel.cx < threshold) && (-threshold < accel.cy) && (accel.cy < threshold)) {       if (prevDirection == 1) {         snakeY[0] = snakeY[0] + 1;       }       if (prevDirection == 2) {         snakeY[0] = snakeY[0] - 1;       }       if (prevDirection == 3) {         snakeX[0] = snakeX[0] - 1;       }       if (prevDirection == 4) {         snakeX[0] = snakeX[0] + 1;       }     }   } } This function starts by initializing the values that our x and y should have when the accelerometer and board are held flat. We then define a threshold to detect tilting and movement. For example, if we want to move left, we check if our y value (acting as a horizontal axis) minus our resting value is greater than the threshold. Additionally, to prevent the diagonal movement glitch I encountered during my second coding attempt, we need to ensure that the absolute value of the current x reading minus the resting x is less than the threshold. Essentially, we need to ensure that the x value falls between the threshold and the negative threshold, so that two directions cannot be read simultaneously. In this case, since we set the resting values as zero, we could directly use the accel.cx and accel.cy values instead of subtracting the resting value. However, subtracting the resting value allows for easy adjustment of the neutral position if needed in the future. The same principle applies to the other three directions. For each direction, we save the direction it was moving in to a variable. This ensures that, in order to maintain a sufficient level of challenge, the snake continues moving in the last known direction until the accelerometer returns to a flat state and is tilted again. Furthermore, during the snake's presence within the game arena, as it moves without colliding with itself, the game will continuously track the positions of both the snake and the target to determine whether the player achieves a score. 1 2 3 4 5 6 7 8 9 10 11 12 13 if ((snakeX[0] == targetX) && (snakeY[0] == targetY)) { //this will read if the snake is on the target   snakeLength++; //if it is it will gain a length of one   score++; // and the score will increase by one   Serial.print("Score: "); // the score will then be written on the serial monitor   Serial.println(score);   if (snakeLength < maxSnake) { // if the snake is less than the maxium length     makeTarget(); //then we will make a new target to go after   }   else {     targetX = targetY = -1; //if it is not less than the max, then we will not     //make any more targets   } } The following code snippet verifies whether the snake's head, represented by snakeX[0] and snakeY[0], occupies the same coordinates as the target. If this condition evaluates to false, the target remains in its current position, and the snake maintains its existing length. However, if the condition is true, the snake extends by one pixel, and the score increases by one point. Subsequently, the code checks the length of the snake. If it is less than the predetermined maximum length (set as 64 in my code, corresponding to the entire LED matrix), a function is called to generate a new target for the snake to pursue. If the snake's length surpasses the maximum limit, the generation of new targets ceases. Modifying the maximum snake length is as simple as adjusting the variable "maxSnake" in the code. Although I am content with the outcome of the Gameduino, there remain several possible enhancements and modifications. Firstly, as mentioned earlier, it exhibits different behavior when connected to a battery, and determining the cause of this discrepancy—whether it lies in the code, hardware, or is simply due to the added weight of the battery—would be beneficial. Another significant improvement would involve integrating a Wi-Fi shield into the setup, enabling users to post tweets without the need for an Ethernet cable, particularly useful if the battery-related issues are resolved. Additionally, expanding the device's capabilities to include other games such as Breakout or Super Mario Bros, as previously suggested, would be advantageous. Furthermore, with an Arduino board featuring a larger memory capacity, it might be possible to accommodate multiple games simultaneously. Such an upgrade would also permit the incorporation of the originally planned GPS module. Several other improvements could enhance the device, such as including the game duration in the tweet instead of solely displaying the time since the last reset. Moreover, by eliminating delays in the code controlling the Piezo buzzer, it could be seamlessly integrated into the overall setup, adding a delightful auditory element. ### SUB-MINIATURE RUBIDIUM OSCILLATOR OFFERS 1,000X BETTER STABILITY As demand grows, precision and reliability in Global Navigation Satellite Systems (GNSS) is critical. With 5G networks on the rise, small, high-performing atomic clocks are becoming increasingly essential. Suntsu’s newest oscillator comes in a dimension of 50.8mm x 50.8mm that uses an all new physics package enabling unprecedented miniaturization in a rubidium clock. Perfect support for applications in military communication equipment, base stations, test equipment, synthesizers, and digital switching. This miniature oscillator, the SRO10S-10.000M, delivers a frequency accuracy of ±5E10-11 regardless of temperature fluctuations when the supply voltage ranges from 12VDC to 18VDC. Its power consumption maxes out at 6 Watts and has faster warm-up times at a variety of temperatures. These parameters are ideal for applications that require high performance, low power consumption, and small package sizes. Specs Include: Frequency at 10MHzSub-miniature size of 50.8mm x 50.8mmFrequency accuracy of ±05ppbAging per day of ±005ppbSupply voltage ranges between 12VDC – 18VDC Read more: SUB-MINIATURE RUBIDIUM OSCILLATOR OFFERS 1,000X BETTER STABILITY ### RF REMOTE MADE EASY The 433 MHz spectrum is a little bit of an oddball.Outside of the US, it’s an open playground for devices that adhere to the power restrictions and other guidelines about best practices. IoT devices operate here, as well as security systems and, of course, remote controls. And, using a few off-the-shelf parts [hesam.moshiri] shows us how to take advantage of this piece of spectrum by designing and building a programmable and versatile 4-channel 433 MHz remote control. Built around an ATmega8 microcontroller, making it easy to work with Arduino sketches, and with a 2×8 character LCD for ease-of-use when not connected to a computer, the wireless switching device can store up to 80 remote control codes in its EEPROM memory. This was one of the harder parts for [hesam] to sort out, but using structures to store the data for the codes eventually solved the problems. A simple GUI makes using it with whatever remote happens to be on hand fairly straightforward, including the ability to record codes from existing remotes on the fly and also to associate those codes with specific actions. Schematics and a bill of materials are available on the project’s page, making this fairly accessible to those looking to add some wireless connectivity to a project, home automation system, or IoT device. It’s mainly set up as a switching device, but with some modifications could be put to work doing more complex tasks. The 433 MHz spectrum is an exciting place to be, too, and things like setting up entire security systems using it are not too far removed from a switching device like this. [Editor’s note: As many mentioned in the comments, 433 MHz is a licensed ham band in the USA (ITU Region 2), so you can’t use it without a license. (Get one, it’s easy.)  In the USA, the equivalent band is at 315 MHz, which is why garage door remotes usually come with a 315/433 choice. Either way, check your local laws before you transmit.] Source: RF REMOTE MADE EASY ### DSP Shield The objective of the DSP Shield project is to enhance the accessibility of Digital Signal Processing (DSP) concepts and applications, particularly by introducing DSP as a teaching tool for signal education at the undergraduate level or even earlier. The project aims to bridge the gap between DSP being predominantly practiced at the graduate level and creating opportunities for students to engage with DSP concepts earlier in their academic journey. Figure 1: DSP Shield and Arduino. The DSP Shield project is a part of the broader initiative called 'Lab In A Box' which aims to transform the traditional electronics lab from being confined to university basements to a portable solution that students can carry with them. In this context, the DSP Shield serves as a versatile platform for developing various DSP-based instruments. Its educational applications encompass functions like filters and spectrum analyzers, which can be utilized for teaching purposes. Additionally, it opens up possibilities for hobbyist applications such as guitar pedals and vocoders. As part of the Lab In A Box project, the DSP Shield can also be leveraged to create instrumentation tools like function generators, oscilloscopes, and network analyzers. These tools enable students to characterize and troubleshoot their constructed circuits, eliminating the need for access to expensive laboratory equipment. Figure 2: Chart showing DSP Shield modes. The board is designed to operate in one of three main modes: 1. Simple "Shield" Mode: In this mode, a pre-programmed binary is stored on the DSP Shield, which is physically stacked on top of the Arduino. The Arduino executes a library that allows it to control the binary on the DSP, enabling predetermined signal processing applications. For instance, it can apply filters to audio captured from the onboard audio codec using a given set of coefficients. Figure 3: DSP Shield in "Shield" or "Co-Processor" mode uses the USB port on the Arduino. 2. Co-processor Mode. In another mode, the user has the flexibility to create their own DSP program by utilizing the Energia API, which is also stacked on top of the Arduino. The Energia API provides Arduino-style function calls and code, along with a user-friendly signal processing library. Communication between the Arduino and the DSP is facilitated by a pre-existing high-level messaging protocol. The code is uploaded to the DSP through the Arduino's USB port, utilizing the shared serial bus. 3. Standalone Mode In the standalone DSP development board mode, the user can continue to write code as mentioned earlier, but the Arduino is no longer required. The DSP serves as the sole processor and can be programmed through its dedicated micro-USB port. Energia can still be utilized just as before, but Code Composer Studio is an alternative option for programming the DSP. Figure 4: DSP Shield in "Standalone" mode uses the USB port on the FTDI module, found near the OLED display. DSP Shield as an Arduino Shield (Shield Mode) As previously mentioned, the DSP Shield offers the functionality of a traditional Arduino Shield when used in "Shield Mode". In this mode, the DSP Shield can be employed for various purposes such as signal generation, FIR filtering, IIR filtering, FFT/Spectral Analysis, and more. These functionalities can be achieved by sending commands to the DSP Shield from an Arduino sketch. It's important to note that this mode differs from directly programming the DSP Shield using Energia, as described in the subsequent section. Figure 5: Block Diagram of Shield Mode Application Signal Chain (Image taken from "The Lab-in-a-box Project: An Arduino Compatible Signals And Electronics Teaching System"). During Shield Mode, the DSP Shield operates with a pre-compiled application and is controlled by a sketch running on a connected Arduino through the SPI bus and the corresponding DSP Shield libraries. These libraries provide access to a set of pre-designed signal processing functions that are implemented by the Shield Mode Application. To utilize the DSP Shield in shield mode, follow these steps: Copy the 'bootimg.bin' file for the DSP-Shield-Mode Application to the root directory of the micro-SD card on the DSP Shield using a PC. Subsequently, reset the DSP Shield to initiate the application. Once it is running, you can control it through SPI communication from an Arduino by employing two libraries: the mailbox library and the DSP Shield Library. The DSP Shield library's manual is included within the library itself, but it can also be accessed here. DSP Shield Hardware Description The DSP Shield is a single-board DSP module designed in the form factor of an Arduino Shield. It is built around the TI TMS320C5517 DSP Core and incorporates several valuable peripherals such as an SD card adapter, OLED display, Audio Codec, and I2C GPIO expanders. These expanders enable the DSP to emulate the GPIO headers typically found on an Arduino board. Figure 7: DSP Shield high level block diagram. The DSP Shield board incorporates several key hardware components, including: - TI TMS320C5517 (200MHz) Digital Signal Processor - TI TLV320AIC3204IRGBR Stereo Audio Codec with separate stereo input and output connectors, supporting sample rates up to 96ksps - Micro SD Card Connector - USB 2.0 interface for communication with the C5517 DSP - OLED display with a resolution of 96x16 pixels - Arduino-compatible header connectors - Compatibility with Energia software IDE and API for the Arduino interface - Embedded USB XDS100-V2 JTAG emulator with a secondary serial port - JTAG compatibility with TI Code Composer Studio software IDE - Secondary serial port compatibility with Energia software IDE and API - 40-pin DSP Expansion Connector - 3 user-controlled LEDs - 4 user-readable DIP switches - 1 hardware reset push button switch - Flexible power sourcing options Communicating With the DSP Shield Serial (UART) The DSP Shield features a Serial port that allows communication with a PC, but it can also be reconfigured for various purposes, including communication with the Arduino. In standalone mode, when the shield is programmed using Energia (as described earlier), the serial port is connected to the USB port on the FTDI XDS-100 chip located next to the OLED display. However, in shield mode, the DSP and Arduino share a Serial bus, and the serial output is visible on the same terminal as the Arduino when it is stacked with the DSP Shield. SPI The DSP Shield is equipped with an SPI bus that enables communication with the Arduino. This bus can be programmed directly, similar to how it is done on Arduino, but it can also be interfaced using the 'Mailbox' library (accessible here). The 'Mailbox' library facilitates bidirectional communication between the DSP Shield and the Arduino. However, it's important to note that the DSP Shield can only function as an SPI master, while the Arduino must be configured as an SPI slave on this bus. I2C Bus and GPIO The DSP Shield features an onboard I2C bus, which facilitates communication with the onboard peripherals such as the GPIO expander chips connected to the Arduino-compatible headers. It is possible to connect the I2C buses of the DSP Shield and Arduino, enabling the Arduino to communicate with the DSP or directly control the peripherals on the DSP Shield, including the Audio Codec and OLED Display. However, it is strongly recommended that only experts attempt to connect these two I2C spaces. It is important for all users who write code for the DSP Shield itself (using Energia or Code Composer Studio) to review the brief App. Note DSP-01, which provides crucial information about the behavior of the GPIO and I2C subsystems. OLED Display The OLED display on the DSP Shield can be controlled using high-level print statements, similar to serial communication. This allows users to send status information and display messages to the user on the OLED display. Software Description and Downloads As mentioned earlier, the DSP Shield is provided with a precompiled binary that enables it to function as an Arduino shield and receive commands from the Arduino to activate fixed function DSP blocks. You can download the binary and its corresponding source code here. To compile this application, you will need the DSP Mailbox library, which can be found here. Additionally, the Arduino libraries required for communication with the DSP Shield can be accessed here and here. Figure 8: DSP Shield software in Energia In terms of the Co-processor or Standalone modes, the DSP Shield is compatible with Energia, an Arduino-compatible open-source platform primarily designed to support Texas Instruments' range of microcontrollers, including DSPs. However, please note that the current version of Energia available at energia.nu does not provide support for the DSP Shield. The plan is to add support for the DSP Shield to the main branch of Energia before December 2014, and this page will be updated accordingly. To facilitate a user-friendly experience, a robust, Arduino-like interface has been developed for the DSP Shield. This interface allows users to develop and teach a wide range of DSP algorithms efficiently. Software Documentation The DSP Shield API is structured to resemble the familiar conventions of the Arduino IDE as closely as possible. This includes using C++ style dot notation for hardware interfaces (e.g., AudioC.begin()) and standard function calls like "digitalWrite(pin)" and "digitalRead(pin)" (refer to App. Note DSP-01 for guidance on utilizing the DSP Shield's onboard GPIO). The complete software reference manual for the DSP Shield, which has been generated with Doxygen and incorporates comments contributed by Stanford student Maisy Wiseman, is available here: DSP Shield API Reference Manual. Additional Software Documentation The DSP Shield API within Energia was developed by integrating various TI libraries and compilers. Below is a partial list of documents pertaining to these tools. While users operating the DSP Shield in shield mode typically won't need to consult these documents, and even most users in standalone mode may not require them, having these reference materials available can be beneficial. Programming The Board The DSP Shield can be programmed using a serial bootloader, similar to contemporary microcontrollers. The user application is stored on the non-volatile microSD card present on the DSP Shield since the DSP core itself lacks on-chip flash memory. Consequently, programming the DSP Shield can be accomplished indirectly by copying the binary file generated by Energia onto the SD card using a PC. Energia itself generates a binary file in the sketch directory when the verify or upload button is clicked to compile the program. ### Project Idea: Morse Code Decoder with Interactive Input Options Arduino My goal for this assignment is to create a Morse code decoder, which can prove highly beneficial for socially distant interactions with friends. The decoder will offer two input options for Morse code: (1) manual clicking of a button to illuminate the LED light, and (2) detecting flashes from an external source, such as a Morse Code app on a phone. This will enable users to practice their Morse code skills and translate Morse code without having to learn it explicitly. To accomplish this, I will require an LED, a button, and a photoresistor (light sensor). The button's purpose is to activate the LED, while the photoresistor will detect when the LED is turned on. By analyzing the duration of the LED's illumination, I can interpret it as a dot or a dash, which together form Morse code representing letters or numbers. As a beginner with the Arduino kit, I lacked confidence in coding the components and creating a suitable circuit. Consequently, I sought guidance from the Arduino website to understand how to utilize the button and the photoresistor effectively. The website provided step-by-step instructions for assembling the circuit with each component and furnished the corresponding code for circuit testing. By combining the insights from both sources, I successfully devised the circuit for my Morse code decoder. Step 1: Constructing the Circuit for the Button and LED. The components required for this project include an Arduino Uno, a push button, an LED, resistors, jumper wires, and a breadboard. The website discussed the LED's unpredictable behavior when the button is not pressed, as the circuit behaves as an open circuit in that state. Specifically, the pin to which the button is connected becomes a floating pin, resulting in a sequence of random 1s and 0s being generated. To address this issue, they introduced an external pull-down or pull-up resistor. This addition ensures that when the button is not pressed, a low or high state is achieved, respectively. Pull down resistor Pull up resistor I opted for the pull-down approach. When the button is pressed, it will be in a HIGH state because the current flows from the 3.3V pin of the Arduino to pin 2 of the Arduino through the button. However, when the button is not pressed, it will be in a LOW state because pin 2 will be connected to the ground through the 10k resistor. To set up the circuit, link the 3.3V (instead of 5V to accommodate the photoresistor) from the Arduino to one end of the button. Connect the other side of the button to Pin 2 on the Arduino and connect it to the ground through a 10k ohm resistor. Establish a connection from Pin 13 of the Arduino to the anode of the LED (longer leg), and then connect the cathode of the LED (shorter leg) to the ground (GND) through a 330 ohm resistor (the resistor's value determines the brightness of the LED). Download the code and open it in the Arduino software. The code is designed to turn on the LED when the button state is high, and vice versa. To account for the rapid changes in the button state, a delay is incorporated, ensuring that the button's output effect can be observed effectively. Establish a connection between the Arduino Uno and the laptop using the USB cable. Then, upload the code to the Arduino Uno in order to run the program. LED state when the button is not pressed Pressing the button to turn on the LED Step 2: Integrating the Photoresistor into the Circuit The photoresistor's resistivity varies based on the amount of light it receives, with lower resistance for higher light intensity. It consists of cadmium sulfide tape, which acts as a semiconductor. When photons strike the tape, electrons can pass through the semiconductor, resulting in decreased resistance. On the website, they discussed how to measure the analog value using the photoresistor by utilizing the analogRead() function. This function converts the input voltage range of 0 to 5 volts into a digital value ranging from 0 to 1023 through the microcontroller's analog-to-digital converter (ADC) circuit. The formula used to calculate the measured voltage (Vout) is Vout = Vin * (R2 / (R1 + R2)), where Vin is 5V, R2 is 10k ohm, and R1 represents the photoresistor value. In darkness, R1 ranges from 1M ohm, in daylight (10 lumen) it is 10k ohm, and in bright light or sunlight (>100 lumen) it is less than 1k ohm. Consequently, when the LED is activated, Vout will increase. Link one side of the photoresistor to the 5V pin on the Arduino Uno, and connect the other side of the photoresistor to both a 10k ohms resistor and an analog pin A0. Join the remaining side of the 10k ohms resistor to the ground (GND). Initially, I faced some confusion while attempting to integrate the photoresistor circuit with my button/LED circuit. The process involved changing the pin connections for each wire, and I struggled to identify which wire belonged to which circuit. After three attempts at reconstructing the circuit, I eventually managed to get it right. Through experimentation, I discovered that under normal conditions with room light, the analog value was approximately 600. However, when I turned on the LED, the analog value increased to around 900. Therefore, I set 700 as the threshold point to determine whether the LED is on or off. By measuring the duration that the analog value stays above 700, I can differentiate between a dot and a dash in Morse code. Step 3: Implementing the Morse Code Translator in Code As this is my first experience coding with Arduino, I was uncertain about the language's syntax. To gain a better understanding, I reviewed a website that used Arduino to create a Morse code translator. The provided code took input directly from the button state (without the LED or photoresistor). Feeling a bit apprehensive about writing code, I attempted to modify the code to accept input from the photoresistor. However, after spending hours debugging, I couldn't get the code to function properly with my circuit. In my attempt to adapt the code, I modified all the variables to correspond to the input from the photoresistor (analog value) within the void loop. However, when I executed the code, the analog value stopped displaying as the code got stuck in the while loop, with the analog value consistently below 700 amps. The issue arose because I couldn't turn on the LED, as the code for activating the LED with the button was placed before the while loop. 2. To address the button/LED issue, I first focused on understanding the code flow responsible for measuring the duration the light remains on. Instead of the LED, I used the flashlight function from my phone to illuminate the photoresistor and verify the functionality of the code. To gain insights into the code flow, I added print statements for 'here' statements, analog values, and pres_time (time the light remains on). Building upon the previous code, I decided to use the analogRead function directly, avoiding the need to store the value in a variable before its usage. This change enabled the while loop to access the most up-to-date analog value. As a result, the code is no longer stuck in the while loop, and the analog value is continuously updated whenever there's a change in light intensity. 3. Afterward, I streamlined the output display to only show the pres_len value and whether it's converted to a dot or a dash. To test the code's functionality, I used a morse code app to flash the light and represent the letter "H" (dot dot dot dot). The output demonstrated that the code effectively converts the duration the light is on into either a dot or a dash. However, I noticed an issue with the pres_len value for the first morse code. It appears to be too large, resulting in the morse code being converted to a dash instead of a dot. This discrepancy arises because the pres_time is recorded the moment I execute the code, as the first while loop is skipped (analog value initially remains below 700 as no light is on). 4. To address the issue, I introduced an additional while loop before the label function to wait until the analog value is below 700, effectively holding the code until a light signal is detected. I then incorporated the line "pres_time = millis()" to start recording the time when the first light signal occurs. Additionally, I included "light_on" and "light_off" statements to monitor when the pres_time (timestamp for when light is on) and rel_time (timestamp for when light is off) are recorded. To keep track of the values for pres_time, rel_time, and time_len, I printed them out. However, upon reviewing the output, it became evident that the code did not record for the first signal. Since I was still struggling to grasp the logic behind the existing code, I opted to create a completely different void loop to receive input from the photoresistor. Additionally, I introduced supporting functions while retaining the original function responsible for converting morse code to the corresponding letters, just as the website had done. To streamline the process, I decided to write a pseudocode first before diving into the actual code implementation. This approach helped me plan the structure and logic of the new code more efficiently. Pseudocode: The code utilizes a while loop to remain idle until a light signal is detected. After detecting the light signal, the code records the timestamp and stores it in the time_on variable. While the light signal is active, the code enters another while loop and remains idle. After the light signal turns off, the code records the timestamp and stores it in the time_off variable. Calculate the time length by subtracting the timestamp of when the light turned on from the timestamp of when it turned off. Transform the time length into a dot or a dash representation. During the period when the light is off, calculate its duration. If the light remains off for more than 750ms, it indicates the end of the morse code sequence, leading to an exit from the while loop for converting the morse code into a letter. I incorporated several print statements to indicate when the light is turned on/off and display the corresponding timestamps. Additionally, I included the time_len and the morse code (dot or dash) to verify if the time difference is reasonable and if the conversion is accurate. With these modifications, the new code successfully addresses the issue where the first signal was not recorded. I created a custom function called "pressbutton" and integrated it into the two while loops. This allowed me to simulate pressing the button while the code is waiting for changes in the analog value. Additionally, I included print statements to display the button state (1 for pressed and 0 for not pressed) and the letter translated from the morse code. To test the functionality, I pressed the button to input the morse code for the letter "A" (dot dash). As observed in the output, the button was pressed briefly (two 1s), followed by a period of no button press (three 0s), and then pressed again for a longer duration (eight 1s). After a brief delay to confirm the end of the morse code, the code successfully converted the morse code to the corresponding letter "A" and displayed it in the output. My code: My attempt at learning to make morse code: Challenges Initially, I had the idea of creating a project where LEDs would synchronize with a song's tune. I came across a code online that allowed the LEDs to flash based on an MP3 file of any chosen song. The steps on the website seemed comprehensive and straightforward, leading me to select this project. However, when I set up the circuit, I encountered difficulties in running the code. The website suggested using a different software called Processing to code for the Arduino Uno. My main challenge was locating the specific folders that were required to import the Arduino libraries into Processing.After successfully importing the libraries, I encountered errors indicating that certain libraries were still missing, such as ddf.minim. My research revealed that the website utilized an older version (2.0) of Processing, where these libraries were already integrated. In an attempt to resolve the issue, I downloaded various libraries and organized them in the appropriate folders for the newest version (4.0) of Processing. Unfortunately, the code continued to encounter problems and wouldn't run successfully.In an effort to overcome the obstacles, I decided to revert to the oldest version (2.2) of Processing that I could find, hoping for compatibility. However, even with this version, the code remained incompatible. Faced with these challenges, I had to abandon the project and look for an alternative one to pursue. After settling on the idea of creating a Morse Code Decoder, I encountered difficulties in constructing the circuit, especially when incorporating the photoresistor. I found myself constantly mixing up the pins and wires during this process. Due to the continuous changes and debugging in the code, the Arduino Uno was running for extended periods, causing it to overheat and fail to upload the code at times. To prevent this issue, I had to reset the Arduino Uno periodically. It took me quite some time and effort to understand the code from the website and debug it to make it work with my circuit. Although I encountered challenges, the code provided on the website was still valuable as it introduced me to useful built-in functions like millis() and label, which I could utilize in my own code.   Missing libraries Fail to upload to Arduino Uno Improvements Create a decoder capable of handling numeric inputs as well. The decoder should incorporate a mechanism to consider the duration of the light being off, enabling it to distinguish between letters and words. For example, if the light is off for 250ms, it signifies the same letter; if it's off for 500ms, it represents the next letter in the same word; and if it's off for 750ms, it indicates the next letter in the next word. Presently, the decoder displays all the letters together without any spacing, making it difficult to differentiate between different words. What I learned This assignment proved to be a challenging and somewhat nerve-wracking experience, making my Halloween weekend quite eventful. However, as I persisted and successfully got the code to work, it turned out to be a highly enjoyable and rewarding endeavor. Through this project, I gained more confidence in my coding and electrical circuit skills, merging the knowledge from my coding and circuit classes into a practical Arduino application. Applying the theories I learned to create this Morse Code Decoder was a delightful experience. The Arduino Website played a crucial role in guiding me, especially with understanding how to utilize different components effectively. Discovering the 'label' function was a game-changer as it allowed me to loop back to specific points in my code, simplifying the process and avoiding unnecessary complexity. Moreover, encountering the erratic behavior of the LED without the pull-up or pull-down resistor was an eye-opener. It was surprising to witness how such a small component could impact the overall functionality of the circuit. All in all, despite the initial challenges, completing this project has been a valuable learning journey that has deepened my understanding and appreciation for Arduino projects. Considering my experience with the photoresistor, I see a practical application for Arduino in my daily life. I'm interested in connecting the Arduino Uno board to the light in my room to create an automated system. This setup would enable the light to turn on automatically when it gets dark, enhancing convenience and eliminating the need for manual operation. To further enhance energy efficiency, I plan to incorporate a Passive Infra-Red (PIR) sensor into the system. This PIR sensor will detect the movement of objects that emit infrared (IR) light, particularly human bodies. By integrating this feature, the light will only activate when the PIR sensor detects motion, preventing unnecessary energy consumption when the room is unoccupied. Overall, I believe these implementations will not only streamline the lighting control in my room but also contribute to energy conservation and a more efficient living environment.   ### A USABLE ARDUINO DEBUGGING TOOL For as popular as the Arduino platform is, it’s not without its problems. Among those is the fact that most practical debugging is often done by placing various print statements throughout the code and watching for them in the serial monitor. There’s not really a great way of placing breakpoints or stepping through code, either. But this project, known as eye2see, hopes to change that by using the i2c bus found in most Arduinos to provide a more robust set of debugging tools. The eye2see software is set up to run on an Arduino or other compatible microcontroller, called the “probe”, which is connected to the i2c bus on another Arduino whose code needs to be debugged. Code running on this Arduino, which is part of the eye2see library, allows it to send debugging information to the eye2see probe. With a screen, the probe can act as a much more powerful debugger than would otherwise typically be available, being able to keep track of variables in the main program, setting up breakpoints, and outputting various messages on its screen. The tool is not without its downsides, though. The library that needs to run on the host Arduino slows down the original program significantly. But for more complex programs, the tradeoff with powerful debugging tools may be worth it until these pieces of code can be removed and the program allowed to run unencumbered. If you’d like to skip needing to use a second Arduino, we’ve seen some other tools available for debugging Arduino code that can run straight from a connected PC instead. Source: A USABLE ARDUINO DEBUGGING TOOL ### VACUUM CHAMBER GETS AUTOMATION [Nick Poole] does a lot of custom work with vacuum tubes — so much so that he builds his own vacuum tubes of various shapes, sizes, and functions right on his own workbench. While the theory of vacuum tubes is pretty straightforward, at least to those of us who haven’t only been exposed to semiconductors, producing them requires some specialized equipment. A simple vacuum won’t get you all the way there, and the complexity of the setup that’s needed certainly calls for some automation. The vacuum system that [Nick] uses involves three sections separated by high-vacuum valves in order to achieve the pressures required for vacuum tube construction. There’s a rough vacuum section driven by one pump, a high vacuum section driven by a second pump, and a third section called the evac port where the tube is connected. Each second must be prepared properly before the next section can be engaged or disengaged. An Arduino Pro is tasked with all of this, chosen for its large amount of ADC inputs for the instrumentation monitoring the pressures in each section, as well as the digital I/O to control the valves and switches on the system. The control system is built into a 19-inch equipment rack with custom faceplates which outline the operation of the vacuum system. A set of addressable LEDs provide the status of the various parts of the system, and mechanical keyboard switches are used to control everything, including one which functions as an emergency stop. The automation provided by the Arduino reduces the chances for any mistakes to be caused by human error, allows the human operator to focus on other tasks like forming the glass, and can also react much faster to any potentially damaging situations such as the high-pressure pump being exposed to atmospheric pressure. As you can probably tell, [Nick] is pretty passionate about this stuff — last year he gave a talk at the Hackaday Supercon that went over all the intricacies of building one’s own vacuum tubes. Source: VACUUM CHAMBER GETS AUTOMATION ### OLED DISPLAY LETS VINTAGE PC ENGAGE TURBO MODE IN STYLE Back in the 486 days, it was common to see a “Turbo” button on the front panel of many PCs, which was used to toggle between the CPU’s maximum speed and a slower clock rate that was sometimes necessary for compatibility with older software. Usually an LED would light up to show you were running at this higher speed, or if your machine was very fancy, it might even have a numerical display that would show the current CPU frequency. [Joshua Woehlke] wanted to add a similar display to his 486, but figured that with modern technology, he could do something a bit more interesting. Especially when he realized that the spot on his case where the two-digit LED display would have originally been mounted was the perfect size to hold a common 0.96″ SSD1306 OLED. From there it was just a matter of wiring it up to an Arduino and writing some code to display different graphics depending on the computer’s current CPU speed. Just like the frequency indicators of yore, the Arduino doesn’t actually measure the CPU’s frequency, it’s simply reading the state of the Turbo LED on the front panel. When the LED is off the Arduino shows an image of a i8088 CPU on the screen to indicate the computer is running in compatibility mode, and when the LED is on, the screen shows the Cyrix Cx486 DX2 logo. When the button hasn’t been pressed in awhile, the display defaults to a star field screensaver. Regular readers may recall we recently covered a similar project that used an Arduino to add a little flair to an era appropriate seven-segment LED display. We’d say there’s still a good deal of romanticism about computers having a big “TURBO” button you can smash whenever you feel the need for speed. Source: OLED DISPLAY LETS VINTAGE PC ENGAGE TURBO MODE IN STYLE ### Extra inputs for Arduino with a keyboard The Arduino is perhaps the coolest thing on earth. There are many types, the Uno, the Mega, the Pro, the Pro Mini, etc. etc. But one thing that often can be a problem is that you only have a limited number of inputs and outputs. There are many solutions for that, ranging from multiplexers to port expanders. But one thing that gives you up to 171 extra inputs is to use an old keyboard. And that is that this instructable is going to be about. (The image it an example of things that can be used with this. As you can see, I only put up switches and relays. What's because the keyboard controller only can handle non-time sensitive digital inputs.) What you need Major Components in Project What do you need? First, an Arduino. Second, an old Keyboard what still works. And that’s pretty much all. 1. An Arduino. 2. An old  PS2 keyboard. It will work with a USB keyboard, but will be extra work and will not be covered here. (You only need the controller PCB) 3. A PS2 jack. Optional, you can also cut the cable. 4. Some buttons or relays and some wires to connect the buttons to the controller PCB with. 5. The Arduino IDE . There are enough tutorials on how to install it spread around the WWW. 6. The PS2Keyboard library. See further down on how to install it. 7. A good idea to use this with. Please note what the keyboard in the image is not the one I used. I have already demounted my keyboard long ago. Installing the library: 1. Go to this page and click on PS2Keyboard.zip. A window will now come up asking what you what you want to do with the file. Click on open. 2. You will now have an explorer window (on windows. I can't help you with other operating systems). Click on Extract all Files up to the left. Enter arduinoInstallPath /libraries (arduinoInstallPath is the place there you installed the Arduino IDE) and then click on Extract. 3. Go to arduinoInstallPath/ libraries/PS2Keyboard and delete the file "PS2Keyboard.cpp.o". 4. Done. After you now have all software installed it's time connect the Arduino with the Keyboard. In this instructable I will cut the connector of from the cable, but if you later want it to be easily plugged into something it can be a good idea to use the connector. 1. Open up the Keyboard. You can throw away anything except the controller PCB and the cable. 2. Use a Dremel or a sandpaper and make the small black pads on the controller PCB shiny by polishing them. 3. Solder wires to the polished pads. This can be hard, and you may need some practice, but it will work after some time. In the photo you can see two of the wires soldered to my controller PCB. as you can see, one of the pads in the right group was damaged as I tried if it would be easier to drill holes into the PCB for soldering the wires. 4. Then all wires are soldered. You can connect the PS2 cable to you Arduino. Use this schematic here for that. To find what cable goes to what Arduino contact, it can be useful to have something to check if there is a connection, the schematic and this . 5. Done! If you want to find out what two pins are connected to what letter, use the code attached to check. Create a map somewhere on your computer, name it "keyboard_to_serial" and add the attached .pde file into that map. Open the Arduino IDE and open up the file. Upload it and then open the serial monitor. If you now connect pads of the PCB, the key what would have been pressed is shown.   For more detail: Extra inputs for Arduino with a keyboard ### Analyzing The Arduino Developer Community Paraphrased: "Arduino creates open source hardware and software, specifically focusing on microcontrollers, for educational and prototyping endeavors. Those familiar with me are aware of my passion for exploring Arduinos and Raspberry Pi. While I don't aspire to be an electrical engineer, I'm primarily drawn to the coding and artistic aspects. However, the tangible experience of constructing something and the gratification of witnessing your code in action are truly invaluable. Arduino offers a platform called the Arduino Project Hub, where developers can showcase their code and designs. Users can engage through comments and show their appreciation for the projects." I've always felt a bit hesitant to share my projects on the official Arduino Project Hub, so I prefer leaving the code on GitHub and discussing my favorite projects elsewhere. The projects featured on the Arduino hub appear to be meticulously crafted and receive substantial attention in terms of views and respects (similar to likes). Moreover, they are often authored by experienced creators who have amassed a significant following. To enhance my web-scraping abilities, I developed a program that extracted data from every project listed on the hub. I then aimed to analyze the collected data in order to identify any patterns that could potentially predict a project's success. I defined success as the ratio of 'respects' received by a project to the total number of views it garnered. Additionally, I retrieved the 'tags' associated with each project. The Project I utilized Scrapy, a user-friendly web scraping framework, to extract data from the entire website. Scrapy proves to be particularly suitable for straightforward websites like this one. Initially, I identified the HTML tags associated with the specific elements I aimed to extract from each project page. These tags are known as xpaths within Scrapy. By instructing Scrapy to retrieve similar xpaths (which might not be identical, hence the usefulness of regular expressions), I could scrape the desired information from every project page. The Chrome developer tools made it effortless to locate the xpaths of the elements I needed, and thanks to the intuitive page-numbering system implemented on the site, I could easily access all project pages in a sequential manner. Check out the code repo. As an enjoyable endeavor, I developed a basic linear regression model to explore the potential influence of a creator's number of followers on the respect-to-view ratio received by their projects. To make the process interactive, I created a Shiny app that guides users through the steps of conducting a multiple linear regression analysis. from data exploration, to feature selection using variance inflation factor analysis (to help reduce multicolinearity), and prediction using the model you just built. Upon analyzing the data, I discovered a limited correlation between the respect-to-view ratio of a project and the creator's status, although veteran creators did attract more views. Feel free to explore the Shiny app yourself. While there are other machine learning techniques we could explore beyond regression, based on the data exploration stage, my expectations for finding a significant relationship are not particularly high. Given these findings, I might reconsider posting some of my projects on the hub after all! It appears that the community is quite receptive to newcomers, as I couldn't reject the null hypothesis that there is no correlation between a developer's experience and the respect ratio of their project. ### MEET THE BREADBOARD COMPATIBLE MCP4901 DAC BASED BREAKOUT BOARD US-based technology Product development company, Earth People Technology, recently announced the launch of a DAC (digital to analog converter) breakout board that is based on the popular eight-bit MCP4901 DAC Chip. The new breakout board, in line with the nature of the products developed by the company, comes with breadboard compatibility which makes it easy to use for prototyping and DIY applications. Speaking on the features, the company announcement mentioned that the board was designed to suit applications involving development boards like the Arduino family of boards. In their words – “This DAC board features the MCP4091 eight-bit Digital to Analog chip. It is designed to fit into a breadboard and connect to an Arduino board.” The MCP4091 DAC on which the board is based generates analog voltages from the ground to its voltage reference (VREF) — which can be adjusted to a value between the applied VCC and ground using an on-board potentiometer. The DAC takes digital inputs and converts them to an analog value between 0-255 with 0 being ground and 255 being VREF. Describing the features of the breakout board, the announcement mentioned that – “The device includes double-buffered registers, allowing synchronous updates of the DAC output using the LDAC pin,” and also “incorporate a Power-on Reset (POR) circuit to ensure reliable power-up”.  It also features “a resistive string architecture, with its inherent advantages of low Differential Non-Linearity (DNL) error and fast settling time”, and ” is specified over the extended temperature range (+125°C).” Read more: MEET THE BREADBOARD COMPATIBLE MCP4901 DAC BASED BREAKOUT BOARD ### Introduction to Arduino: A Versatile Physical Computing Platform Arduino Interfacing Introduction to Arduino: Arduino serves as a medium for engaging with the physical world through sensors. It constitutes an open-source physical computing platform centered around a straightforward and affordable micro-controller board, accompanied by a development environment tailored for writing software compatible with the board. As an open-source electronics prototyping platform, Arduino facilitates the creation of interactive objects that respond to inputs from diverse switches or sensors while managing outputs like LED lights, motors, and other physical elements. Arduino projects can either function as stand-alone entities or seamlessly communicate with software running on your computer. To power the Arduino micro-controller, one can utilize either the USB cord or batteries, providing flexibility in its applications.  Microcrontroller The Arduino microcontroller is equipped with 6 analog input ports and 13 digital ports, which can function as either inputs or outputs. It encompasses several key components, including a microprocessor, RAM, flash memory, a clock (oscillator), and an A/D (analog to digital) converter. All these components are integrated into a compact chip, serving as the core of the Arduino board. For instance, the widely used ATmega328 chip boasts 2 kB of RAM, 32 kB of programmable Flash memory, a 20 MHz oscillator clock, and 32 pins. Remarkably, this microcontroller is remarkably cost-effective, with a price of less than USD 1.50, particularly when purchased in high volume. Arduino offers a diverse range of boards, each with its unique configuration. These boards come equipped with USB connectivity, built-in LEDs, power jack connections, and distinct pins designated for both inputs and outputs. Moreover, users have the option to enhance the board's capabilities by utilizing shields, which enable additional functionalities such as wifi connectivity, GPS support, stepper motor control, and more. Arduino finds extensive use in prototyping and serves as a fundamental component in numerous Kickstarter projects. In recent times, its application has expanded to include educational and teaching projects as well (Esposito et al., 2015).  First Arduino Program Typically, the initial program to run is the "Blink" program, designed to make an LED flash at a specified rate. The simplest version of this program utilizes one of the LEDs integrated directly into the Arduino UNO board, specifically controlled via pin 13. To begin, establish a connection between the Arduino board and the computer using the USB cable. Next, launch the Arduino software and compile the "Blink" program. It is crucial to choose the correct "Serial Port" for communication. This can be done by navigating to the "Tools" menu, selecting "Serial Port," and then choosing the appropriate "USB" port (refer to Fig.@ for guidance). Additionally, you may need to set the Board type, also found in the "Tools" menu. Once the setup is complete, you can transfer the program to the Arduino board by clicking the "right arrow" button located at the top left of the program (see Fig.@ for reference). Choose the USB port from the available Serial Ports options, as this informs the Arduino program where to send the compiled program.  Serial Communication The Arduino features a built-in library that facilitates serial communication with a computer. This allows the Arduino board to send messages back to the computer. To initialize the serial communication, the command "Serial.begin(9600);" is used in the setup() function. Sending numerical data or text to the computer can be achieved using the command "Serial.println(voltage);," where 'voltage' represents the measured voltage, for instance. It is essential to use the correct quotation marks when sending text, as the compiler is particular about it. Moreover, in the Arduino C script, each line must be terminated with a semicolon.  Sensors and Physics Arduino projects encompass two fundamental aspects. Firstly, the engineering aspect involves integrating sensors, such as the temperature sensor, and processing the electrical signals according to the manufacturer's specifications. This part focuses on the technical implementation and functionality of the sensors. Secondly, the physics aspect delves into testing the limits of the sensors and seeking answers to various questions, such as the sensor's resolution, response time, and specific heat. The objective here is to calibrate and evaluate the sensor's accuracy. To achieve this, each question is approached with a hypothesis, and a strategic plan for testing is developed. Through this process, quantitative assessments of the sensor properties are obtained, enabling comparisons with published specifications and the generation of additional findings.  Bot A bot like SparkFun's RedBot operates as a robotic platform that relies on sensors to control its movement. The Arduino microcontroller processes the sensor inputs and issues commands to the motor. The bot is equipped with two gear motors, each capable of producing approximately 0.078Nm of torque, which enable the motion of the 3-wheel vehicle. By adjusting the speed of these motors, the bot's steering can be controlled effectively. To navigate its environment, the bot employs sensors. One such sensor is the line follower, which measures the amount of reflected infrared light and detects changes from dark to light on the surface. Proper mounting of this sensor is critical, with a recommended distance of about 3mm from the surface. It comes with three connecting wires - GND, VCC, and OUT - which are connected to the 5V potential difference from the Arduino. Furthermore, the bot features an accelerometer, which is responsible for detecting any impacts with other objects or sudden vibrations, aiding in its ability to avoid obstacles and follow a designated path. Facilitating a more straightforward programming experience, the RedBot is complemented by the readily available RedBot library, complete with comprehensive documentation. The library incorporates three classes of objects, enhancing the versatility and functionality of the RedBot platform. RedBotAccel RedBotMotor RedBotSensor After successfully including the library using "#include ", you gain access to its functions. You can utilize functions like "drive(int speed)", "stop()", "brake()", "leftDrive(int speed)", and "rightDrive(int speed)", where 'speed' is an integer ranging from -255 to 255. By inputting a negative value, you can prompt the motor to move in reverse. #include // This line "includes" the RedBot library into your sketch. // Provides special objects, methods, and functions for the RedBot. RedBotMotors motors; // Instantiate the motor control object. This only needs // to be done once. void setup() { motors.drive(255); // Turn on Left and right motors at full speed forward. delay(2000); // Waits for 2 seconds motors.stop(); // Stops both motors delay(5000); // pivot -- spinning both motors CCW causes the RedBot to turn to the right motors.rightMotor(-100); // Turn CCW at motorPower of 100 motors.leftMotor(-100); // Turn CCW at motorPower of 100 delay(500); // for 500 ms. motors.brake(); // brake() motors delay(500); // for 500 ms. } void loop() { } In addition to its functions, the library encompasses various examples, including BasicTest, DriveForward, and LineFollowing_IRSensors. Below is a snippet from the LineFollowing Sensors example: #include RedBotSensor IRSensor1 = RedBotSensor(A3); // initialize a sensor object on A3 RedBotSensor IRSensor2 = RedBotSensor(A6); // initialize a sensor object on A6 RedBotSensor IRSensor3 = RedBotSensor(A7); // initialize a sensor object on A7 void setup() { Serial.begin(9600); Serial.println("Welcome to experiment 6!"); Serial.println("------------------------"); } void loop() { Serial.print("IR Sensor Readings: "); Serial.print(IRSensor1.read()); Serial.print("\t"); // tab character Serial.print(IRSensor2.read()); Serial.print("\t"); // tab character Serial.print(IRSensor3.read()); Serial.println(); delay(100); }  Light Emitting Diodes Light-emitting diodes, commonly known as LEDs, operate based on two semiconductors with distinct properties. One of the semiconductors is p-type, while the other is n-type. The charge carriers in the p-type material are known as holes, while in the n-type material, they are electrons. Each semiconductor possesses a characteristic band gap, which represents the forbidden energy region for electrons. When a p-n junction is formed, current flows effortlessly in one direction but is blocked in the opposite direction. At this junction, electrons and holes tend to recombine, resulting in the emission of light. As a consequence of the junction's asymmetry, the LED possesses a cathode and anode, or a positive and negative leg. Hence, the orientation in which the LED is connected becomes significant. One of the legs is longer (anode) and represents the positive end. The applied voltage for light emission varies depending on the wavelength of the emitted light. Typical values can range from around 1.8V for red light to approximately 3.3V for blue light. If the voltage applied is too low, recombination will not occur adequately, resulting in no light emission. On the other hand, if the voltage is too high, it can damage the LED. Unlike ohmic resistors, where the current increases linearly with voltage, in semiconductors, the current increases exponentially with voltage. Therefore, applying even a slightly higher voltage can lead to a significant current surge that may quickly damage the narrow gap in the LED. The current-voltage behavior of a diode, including an LED, can usually be represented by the following equation:                                       I(V)=I0(exp[qV/kBT]−1) The current-voltage behavior of a diode, including an LED, can be described using the following equation, where kB represents the Boltzmann constant, T denotes the temperature, and q represents the charge of the carrier. Since the Arduino board typically supplies 5V, a direct connection to the red LED is not possible as it requires a reduced voltage. To achieve this, a resistor is added to the circuit. When connected, part of the voltage drop will occur across the resistor. For instance, when connecting a red LED, a resistor with a voltage drop of 3.2V is selected, so that the remaining 1.8V voltage drop occurs across the LED. ### Arduino Cybersecurity: 5 Tips To Keep In Mind The start of a new Arduino project is always exciting, and there is a huge amount that you will need to consider. These days, you need to consider cybersecurity as this is a growing issue that organizations of all sizes and in all industries face. When it comes to Arduino, the use of Internet of Things (IoT) devices creates vulnerabilities that you need to consider. Therefore, you need to develop strong security measures and follow cybersecurity best practices at each stage of your Arduino project. When you know you have strong protection in place, you can focus your attention on completing the project without having to worry about cybercriminals. 1- Use Multi-Factor Authentication When you have a team working on a project, you need to make sure that you have strong authentication measures in place, as this is often how criminals cause damage. This will involve using strong, random passwords that are changed on a regular basis. Still, you should also be using multi-factor authentication as a way to increase security and prevent hackers from gaining access. 2- Complete Updates ASAP When it comes to software, libraries, and firmware, it is important that you complete updates when they become available. These updates will usually contain security patches, which will provide protection against the latest threats and fix any security issues. Even if these updates will stop you from working on the project, they should be completed as soon as possible. 3- Use Cloud Infrastructure Entitlement Management When using a cloud environment for your Arduino project, you must ensure that you have strong cloud security in place. This should include cloud infrastructure entitlement management (CIEM), which helps protect against hackers and cyber attacks arising from excessive permissions. CIEM gives you the ability to manage and control permissions so that your team only has access to what they need for their work. This will help to minimize attack surfaces and improve the overall security of your Arduino project. You will want to make sure that you get a CIEM solution from trusted cloud security experts, such as Sailpoint. 4- Use Data Encryption If your Arduino projects involve the use of any kind of sensitive data, it is vital that you protect this data. One of the best ways to do this is with data encryption, which will keep important information secure on a device or when being transmitted.  5- Learn About The Latest Threats It is also important to keep up with the latest cybercrime trends, emerging threats, and cybersecurity best practices. Cybercrime is growing and evolving at all times, so you need to make sure that you know how to protect your projects and strengthen cybersecurity to stay safe against the latest emerging threats. It is vital that you consider cybersecurity when planning any Arduino project. Security vulnerabilities and issues are becoming more prevalent with Arduino projects, so cybersecurity needs to be a priority so that you can protect yourself against threats and focus on the development of your project. ### Easy Electronics Organization using Arduino Like many other electronic enthusiasts I need to have a constant supply of materials in order for us to keep building, hacking, or just playing around with electronics. However as probably any of us have come to realize we need a lot of space and storage to hold every thing. Enter the world of stack-able containers. I got one from Ikea, a "Helmer." its simple metal design fits in with my rooms decor and it had just the right amount of space. In this instructable I will show you how I actually organized my electronics "collection." Dont forget to visit the site! http://www.wix.com/SimpleCircuits/Simple-Circuits Components Here I used some "Really Useful Boxes" (that's actually their name) from staples and they let me tell you they are a life saver! You simply pack them full with stuff of the same kind, and then put them in the drawer, they are also easily stack-able! there is no limit to what you can put in them !(unless its too big of course!). Mine are all labled with what the name of the components that are in side, thus each component is very easy to locate. The Arduino Drawer Or what ever micro controller you use. I prefer Arduino for all my projects so that's why I labeled the drawer "Arduino." I even though the micro controller is technically a component I find it easier to have all of its stuff (cords, programming cable, shields, etc.) in one area for easy access. The decision is totally up to you. Random Parts Bin We all have one of these some place...mine is right under the Arduino bin. Basically anything you haven't organized yet (circuit boards from consumer electronics, plastic bits, handy little things, etc) all go in here. There is not organizational code for me here, but if you want to still keep things fairly organized go ahead! Ideas Bin Here is where you can keep all your plans, schematics, drawings, or quick notes. I keep this bin simple by just leaving my "Projects Note Book" which contains everything I have ever built or imagined.   Major Components in ProjectWe all need these of any task at had we often face. I Would suggest you keep it simple. Here is a list of suggested tools to keep in this drawer… -Soldering Iron -Solder -Soldering Paste Flux -Extra Hands tool -Bread board -Jumper wires -Multi-meter and or battery tester -Assorted Small Screw Drivers or a few big ones -Needle Nose Pliers -Wire Strippers -Ruler -Super Glue For more detail: Easy Electronics Organization using Arduino ### STMICROELECTRONICS EXPANDS PORTFOLIO OF FLIGHTSENSE TOF RANGING SENSORS STMicroelectronics announced the release of the VL53L3CX, a capability expansion of the company’s FlightSense ToF ranging sensors, with a patented histogram algorithm. The new sensor measures object ranges from 2.5cm to 3m, remaining unaffected by color or reflectance. The histogram algorithm increases cover-glass crosstalk immunity and allow real-time smudge compensation preventing external contamination from adversely affecting the ranging accuracy for a number of applications. Further, the VL53L3CX has increased linearity, increasing short-distance measurement accuracy. This enhances wall tracking, cliff detection, and obstacle avoidance in equipment. ToF sensing help to heighten the perperformance of application by allowing for more accurate occupancy detection in building-automation and lighting controllers, smarter proximity sensing in IoT endpoints, more convenient auto-wakeup in portable devices, and more robust user detection in automatic sanitary equipment. Read more: STMICROELECTRONICS EXPANDS PORTFOLIO OF FLIGHTSENSE TOF RANGING SENSORS ### A Planar 2-DOF Haptic Device for Exploring Gravitational Fields For our project, we built a planar, 2 degree-of-freedom haptic device for educational use. The design is based on a 5-bar mechanism. We wanted to build a device that would have the versatility to teach various concepts, but would still be relatively affordable (as the goal is implementation in classrooms). For this reason, we designed a device without a graphical display, that instead uses physical slides that can be changed by hand in order to demonstrate different haptic environments. The core learning objective of our device was to teach about potential fields, such as gravitational or electrical fields. However, it is important to note that the device is adaptable to virtually any planar task (such as navigating mazes or drawing mathematical functions). After building the device, a group of 50 high school students and several high school teachers tested it and responded positively as to its potential for classroom teaching. On this page... (hide) Introduction Background Methods Mechanical Design and System Analysis Mechatronic Design and Control Educational Demonstration Results Future Work Acknowledgements Files References Checkpoint 1 Checkpoint 2 Checkpoint 3 Introduction The objective was to create a device that would allow students to feel gravitational or electrical fields. Since this concept directly relates to force, it is a logical use of haptics. No sensory substitution or training is needed; the user directly experiences real forces. Additionally, gravitational forces naturally result in orbital motions which can be easily observed by the free motion of the end-effector. Williams et al. [1] discussed how haptic devices are especially well suited to the teaching of high school physics, owing to the importance of force in physical systems. He begins by noting that at the time of publication (2002), haptic systems for education were virtually non-existent. This study provides encouraging results for our proposed project, including student feedback, of which the overwhelming majority asserted that the experience was effective in accomplishing educational goals. Wies et al. [2] developed a device and environment for displaying electric fields, though they only used one charge with a uniform charge density sphere. This paper explicitly shows the utility of a haptic device in teaching a force-field type environment. Background Many 2-DOF devices have been built before, but predominately with different design criteria from out project. The first design option that we dismissed was a serial linkage. With a serial linkage, sequential links must carry the motor to actuate the next link, or a complicated cabling solution must be used. In our case, we desired to be able to give the system initial conditions and watch the resulting orbit of the end-effector. If the device was carrying large amounts of mass externally, then the inertia of these masses would cause the device motion to be largely governed by the device dynamics rather than the virtual dynamics. Additionally, we desired a system with symmetric linkages so that users would not be distracted by the asymmetry of the device when observing free motion of the end-effector. For this reason, we ruled out a design similar to the MIT Manus [3]. In their paper, Campion and Hayward [4] introduce a 2-DOF, direct drive device called a pantograph. This design is essentially a 5-bar mechanism with one bar grounded. Motors actuate two base bars, and the user places his or her fingers at the intersection of the free bars. Methods Mechanical Design and System Analysis We began by adapting the design of the pantograph from Campion and Hayward [4]. Figure 1. Diagram of the pantograph, Campion, 2011. The device developed in the paper is relatively small, having a workspace of about 60mm x 110 mm. For our application, we wanted users to be able to explore a workspace the size of a standard 8.5” x 11” sheet of paper (216mm x 279mm). First, we used the inverse kinematics of the device to design a linkage capable of reaching the entire workspace. The grounded link is 10cm and the moving links are 25cm each. The linkage is shown at the four extremes. Figure 2. Linkage at extremes of workspace. Next, we evaluated the Jacobian at each point in the workspace to ensure the device is well conditioned. Our design has maximum condition number 3.4, which is relatively small, and is comparable to that from the original design in the literature. Figure 3. Condition number of the Jacobian over the workspace. Furthermore, to ensure a compelling haptic sensation, we wished to maximize the displayable forces at the end-effector. The workspace was discretized into 100 points. At each point, we determined the maximum force that could be displayed in 20 evenly spaced directions, based on the motor stall torque. We then took the smallest of these maximum directional forces at each point and plotted them over the workspace. Using only direct drive (no mechanical advantage) of Maxon RE25 motors, we obtained the following plot: Figure 4. Maximum displayable force in an arbitrary direction over the workspace (direct drive). For most of the workspace, the maximum displayable force that we could guarantee in an arbitrary direction was <0.4N, which was considered too small to be compelling. In light of this, we opted to drive the links with a capstan. Using the a capstan ratio of 11.15, we obtained the following maximum force plot: Figure 5. Maximum displayable force in an arbitrary direction over the workspace (with capstan). Here, the device is capable of displaying 3 to 4 N in an arbitrary direction over the entire workspace, which is considered more than sufficient for our purposes. We fully modeled our design in SolidWorks. All links and base pieces are laser-cut acrylic, while the capstan pulley on the motor shaft is 3D printed (similar to ABS). Figure 6. Isometric view of device. The user holds the end-effector shaft, which moves over the flat surface. After construction, we decided that we needed to support the end-effector with a caster ball in order to prevent the links from bending while supporting the weight of a user's hand. Both links are driven with capstan drives, which were re-purposed from the haptic paddles. This is advantageous to those who may already be in possession of haptic paddles. If someone possesses a haptic paddle, he/she could create our device with only some acrylic and a few bearings. Figure 7. Detail view of capstan. Figure 8. Isometric View of the laser cut and assembled device. Mechatronic Design and Control We used an Arduino Uno for computation and control. From the haptics class, we also had an Ardumoto motor shield. However, we were concerned with overheating this board if running at stall torque on both of our motor simultaneously. For this reason, we ordered a Pololu Dual VNH5019 Motor Driver Shield. However, this motor shield was designed to use Pin 2 (one of only 2 interrupt pins) as a motor direction pin. We initially tried implementation with the default configuration, but quick motions of the motor shaft resulted in missing encoder ticks and a drift of our device position estimate, because one of the encoders was not wired with an interrupt pin. Because of this, we used the Pololu Motor Shield library to change the default pin assignment. Though this vacated pin 2 on the Arduino board for the encoders, we still had the problem that the motor shield was hardwired to accept its motor direction command on the second pin. For this reason, we did not directly stack the shield on the Arduino; we instead used a breadboard to route wires between the Arduino, the Pololu motor shield, and our Ardumoto board that was holding our encoder wiring. This allowed us to use whatever pins we wanted to drive the motor driver board rather than being forced to use corresponding pins on the motor driver board and the Arduino. Figure 9. Pololu Motor Driver Shield, Arduino Uno, and Ardumoto board from left to right. The Pololu Motor Driver Shield requires a motor command output between -400 and 400. Our code determines a needed force at the end-effector which is directly related to motor torque, and thus, motor current. Because this motor driver is voltage-commanded, our next step was to calibrate the voltage command to a to a current. We commanded several voltages, locked the motor shaft, and measured the current. The following plots show the result of the calibration.   For more detail: A Planar 2-DOF Haptic Device for Exploring Gravitational Fields ### X-Track - Wireless music visualization and tracker X-Track is a prototype wireless device which connects you to the music, by providing entertainment with its bright beat-synched LEDs and tracking your moves so that you can later learn how much you enjoyed the night, and which parts were especially moving you. Remote wireless visualizations fully synced to the beat: * Supporting dynamic control of song playback. ** You can adjust tempo and the visual will always be on the correct beat, and you can even scratch !! * DJ software automatically analyses song bpm (beats per minute), aligns the beats with the song, and send the high-resolution beat phase messages to external control application. * The external application on PC broadcasts beat time information to all gadgets in the scene. Live crowd tracking: *  By making use of the additional sensors (accelerometer), each gadget sends crowd information back to the main PC for logging and any other purposes. Small form-factor: * The gadget prototype comes in a small package (11x9x3cm). Great for hand-held interaction or wearing around your neck. Future makes can come in smaller form factors to have a less constraint on your fun. Support for multiple remote gadgets: * You can have a a high number of synced displays in a single room, and you can gather sensor data from all (the number of devices is limited by the bandwidth of radio communication. Each device sends sensor readings back to the main computer. The practical limit for efficient data acquisition is not yet studied.) This instructable was made as part of the final project requirement in the CS graduate course "Tangible Interactive Computing" at the University of Maryland, College Park taught by Professor Jon Froehlich. The course focused on exploring the materiality of interactive computing and, in the words of Hiroshii Ishii, sought to "seamlessly couple the dual worlds of bits and atoms." Please see http://cmsc838f-f12.wikispaces.com/ for more details. Step 1: Hardware & Wiring Info Arduino FIO * http://arduino.cc/en/Main/ArduinoBoardFio * https://www.sparkfun.com/products/10116 ($25) Microcontroller: ATmega328P Clock Speed: 8 MHz Operating Voltage: 3.3V Input Voltage: 3.35 -12 V Pro's: * Includes an Xbee socket already (saves $10) * Polymer Lithium Ion Batteries from sparkfun provide 3.3V, no step-up component (3.7 to 5V) needed (saves $6) *  Includes battery charger using USB port (saves 10-15$) Con's: You'll need a 3.v to 5.v stepper for the display (costs 5$) No direct programming interface available. You need to use FTDI cables/breakout boards. The longest dimension is slightly bigger than the LED matrix LED Matrix - Serial Interface - Red/Green/Blue (The Visuals) * https://www.sparkfun.com/products/760 ($59.95) * Communicates through SPI serial input protocol * Runs on 5V (if you don't raise up the voltage from 3.3 to 5V, you get very pale colors, and an unstable refresh rate) * Current: 120mA (typical) 275mA (max) * Dimension: 2.38x2.38"x0.78'' Wiring: (Using SPI Interface) * VCC(5V)<->5V * GND<->GND * MOSI<->PIN11 * CS<->PIN10 * SCLK<->PIN13 Triple Axis Accelerometer Breakout - ADXL335 * https://www.sparkfun.com/products/9269 * "Low noise and power consumption (320uA)" * Sensing range: +/-3g. * Power in between 1.8-3.6V * Bandwidth: 50Hz Wiring: * 5V/GND : as usual * X<->Analog Pin 0, Y<->Analog Pin 1, Z<->Analog Pin 2   Fo more detail:  X-Track - Wireless music visualization and tracker ### Make a Musical Bench using Arduino The Musical Bench is an exhibit which makes music when people touch, kiss, or hold hands. It uses a micro-controller to detect changes in resistance, via the copper armrests, and plays high or low notes depending on how much current flows through you and a friend. This exhibit is the result of messing around with many different ways of using the human body to complete an electrical circuit. The original Exploratorium exhibit runs on a prototype board, but for this instructables we’ve used an Arduino instead. This makes it possible for you to build it into a bench, a drinking fountain, or something that we haven’t thought of yet. You can also use this as a personal tool for playfully investigating electricity, conductivity, and capacitance. Have fun and happy tinkering! Step 1: Materials Collect these parts: Arduino USB (any type will work) Sparkfun Musical Instrument Shield Arduino Stackable Header Kit Two 1k Ohm resistors One 39k Ohm resistor (you can use a 47k resistor from this set if you can't find a 39k) One 0.1 uF capacitor Solid core wire (red, black, and white) Stranded wire Two Touch Pads (you can use scraps of copper or brass, copper pipes, or other conductive objects) DC power supply 9-12V Speakers or headphones with ⅛" stereo jack Tools: Soldering iron (we like this one from Weller) Solder Wire stripper Wire cutter Safety goggles A computer loaded with arduino software If you are new to Arduino Programming here are some helpful links: How to program an Arduino http://arduino.cc/en/Main/Software What an Arduino is http://arduino.cc/en/Main/ArduinoBoardUno How to choose an Arduino https://www.sparkfun.com/arduino_guide If you're familiar with schematics Here are two schematics that should help most experienced arduinio/electronics people figure out how we're making. One is a drawing of the connections done with Fritzing, and the other is an electronics schematics of the sensor interface. Step 2: Solder the headers The musical Arduino shield is capable of generating sounds, but first we'll need to set it up so it can take inputs from the physical world and communicate them with the main Arduino board. The first step is to solder on the headers that connect it to the main board. Insert the pins of the headers into the round holes along the side of the Shield. Make sure pins are down and pointing away from the side of the shield with the components on it. Flip the shield over. Solder each pin to the round hole. Take care to keep the pins straight, these will go into the corresponding sockets of the Arduino board. Step 3: Add your resistors Orient your shield so that you're looking at the side with the components on it, and the text "Sparkfun.com" is right side up. Place the three resistors next to each other in the center of the prototype area of the Musical Instrument Shield. Place the 39k resistor on the left—we'll call this R1. Place one of the 1k resistors in the middle (R2), and the last 1k resistor (R3) on the right, nearest the audio jack. It helps to spread the legs with two spaces in the middle so that the resistors can lay flat. Flip the board over. Solder each leg into place. Don't snip the ends yet. Cross over the legs of R1 and R2 on the side closest to the audio jack and solder them together. Step 4: Add your capacitor Flip the shield over again. Place the capacitor (C1) above the resistors, just on top of R2 and R3. Flip the shield to the back, and solder C1 down. Solder a leg of C1 to the adjacent end of R2. Solder the other leg of C1 to the adjacent end of R3. Step 5: Add the red wire Now you will add three wires to the board. To keep them easily identifiable we've used red, white, and black but the color of the wire doesn't matter. Cut a piece of solid core wire (we used the red one) about 2” long and strip both ends. Insert one end into board right next to C1 and directly above R1. Flip over the board and solder that end into place. Bend down the leg of R1 (the side not connected to R2) and solder it to the red wire. Flip the board back to the front and insert the other end into the header socket labeled “AREF” (it is on the bottom left side of the shield). Step 6: Add the black wire Cut a piece of solid core wire (we use black) about 2" long and strip both ends about 3/8". Insert one end into the board just above the C1/R3 junction. Flip the board over and and solder the end into place. Make a soldered connected to the adjacent C1/R3 junction. Flip the board back to the front side and insert the other end of the wire into the header socket labeled "GND" (right above "AREF"). Step 7: Add the white wire Cut a piece of solid core wire (we use white) about 3" long and strip both ends about 3/8". Insert one into the board just above the c1/R2 junction (just to the left of the black wire) Flip the board over and solder the end of the wire in place. Make a soldered connection to the adjacent C1/R2 junction. Flip the board over and Insert the other end of the wire into the header socket labeled "A0" (on the middle right side of the shield). Step 8: Connect the wires for the touch pads Cut two pieces of the stranded wire as long as you will need to reach from the shield to where you want the touch pads to go. Strip back 1/4" on one and insert just below R3. Flip the board over. Solder the wire in place and make a soldered connection to the leg of R3. Go back to the front of the board. Strip back 1/4" on the other wire and insert just below R2. Flip the board over. Solder the wire in place and make a soldered connection to the R1/R2 junction.   For more detail: Make a Musical Bench using Arduino ### Upcoming Arduino Site Maintenance UPDATE 22 feb 17.00 CET: All of Arduino web services are back up and running again. Thanks for your patience while we upgraded our system! ************ As you may have noticed we’ve been witnessing several problems with our website since last Sunday 3 a.m. CET. In the next hours we’re starting working on some major maintenance to the Arduino website:  tomorrow Thursday 21st of February, around 3 p.m. CET until Friday 22nd of February 2013 same time. We’ll then be on hand  to resolve any issues that arise after we re-enable the site, but please be aware that further outages may occur as we fine-tune server features. After the site is back, please let us know if you encounter any problems using it.   For more detail: Upcoming Arduino Site Maintenance ### Portable Haptics System Hardware Mobile Phone There is a wide selection of mobile phones on the market. For our development, we chose Nokia 6210 Navigator due to its ability to run Java, accompanied by Bluetooth communication, and its small form factor. The phone mainly acts as a remote control for setting up the microcontroller. It provides the ability to adjust the trial condition configurations and let the microcontroller knows how the sensors and actuators are connected, eliminating the need for uploading a separate piece of code on microcontroller. It also acts as a visual feedback device for the user as well since it can display important gait parameters in real-time. Microcontroller We selected an Arduino Mega as our development microcontroller due to its large numbers of analog input pins, digital I/O pins, UARTs, and its complete development form factor. This provides us with fast development time for our first testing device. For more information on microcontroller selection, please see Microcontroller Table We also used a stackable prototyping shield board to prototype our customized C2 Tactor (vibration motor) driver circuit. C2 Tactor C2 Tactor is a special kind of vibration motors. It requires a 250 Hz sine wave drive circuit. Its magnitude of vibration corresponds to the amplitude of the sine wave. Since we cannot use a typical PWM signal on microcontroller to drive the tactors, we have implemented an adjustable voltage regulator with digital potentiometer to drive these tactors. See circuit diagrams. Pager Motor Another option for vibration motor is a pager motor. This kind of motor can be driven directly from the PWM signal. These have been used in our Haptics for Gait Retraining Pager Motors. Flexi Force Flexi Force is used as simple foot switch. However, it has the potential to do an accurate force measurement with some calibrations. Single-Axis Angle Measurement Unit This sensor is based on low-friction linear potentiometer. We used it to measure an angle such as trunk sway.   For more detail: Portable Haptics System Hardware ### Rohm claims to have smallest transistor package ROHM Semiconductor Ultra Compact MOSFETs & Bipolar Transistors have the smallest transistor package on the market which is optimized for thin, compact portable devices. The VML0806 case type measures just 0.8mm×0.6mm, with a height of only 0.36mm. As portable devices, such as smartphones and digital cameras get smaller and more sophisticated, thinner, more compact components are required. Until now, problems related to internal element miniaturization, bonding stability, package process accuracy, and surface mount technology limit the smallest conventional transistors to the 1006 size (1.0mm×0.6mm, t=0.37mm). ROHM was able to overcome these challenges by utilizing a smaller element and high-precision package process technology, resulting in an unprecedentedly compact form factor. Features     Industry-small size minimizes mounting area     Compared to the smallest conventional small-signal transistor     available (1212 size: 1.2mm×1.2mm, t=0.50mm), mounting area is  reduced 67% and thickness 28%     Bottom-terminal design supports high-density mounting     Reduced MOSFET ON resistance     Low ON resistance (2.6Ω)is enabled in an ultra-compact   form     factor Rohm Semiconductor says it has developed the smallest transistor package on the market. The VML0806 measures just 0.8mm x 0.6mm, with a height of only 0.36mm. With current miniaturisation, bonding stability, package process accuracy, and surface mount technology, the smallest conventional transistors are the 1006 size (1.0mm x 0.6mm x 0.37mm). Rohm says it has overcome these challenges by using a smaller element and high-precision package process technology. Rohm will initially offer this new package for small-signal mosfets. Future implementations will include bipolar and digital transistors. For more read: Rohm claims to have smallest transistor package ### 5W Stereo Audio Amplifier Project Based On BA5406 Description 5W Stereo Audio Amplifier project based on BA5406 IC which is  suitable for application like stereo radio cassette player, stereo components systems etc. The Heart of the project, BA5406 is a dual OTL monolithic power IC with two built-in, high output speaker amplifier circuits. High output of 5W×2 can be produced when VCC=12 V and RL=3Ω, and 2.8 W×2 when VCC=9V and RL=3Ω. The BA5406, which uses a high allowable power dissipation package, has a simple heat-sink design. Specifications: Good low voltage characteristics (Operation from Vcc=5 V) Ripple filter (6pin) also can be used as muting pin (Make 6pin GND potential) Small thermal resistance package and simple heat-sink design Power supply 5 to 12 VDC Output - 5 W + 5W, 3 Ω Input resistance - 100 KΩ   For more detail:5W Stereo Audio Amplifier Project Based On BA5406 ### Robo-Mobile - A Homemade Bluetooth Robot using arduino Background This robot is one I built to learn. Before this project I did get my feet wet with a few small scale Arduino projects like an ultrasonic robot, (that would move backwards until it was a certain distance away from the wall,) and I did get to play with a few of the shields designed for the Arduino, but I had never built a full scale project with this microchip, or really, any microchip. I knew if I was going to continue on this journey of being a hobbyist I would have to fully understand the Arduino inside out. I wanted a project that would accomplish my goal, (or just get closer to my goal of fully understanding the Arduino,) and one that would be useful or fun to play with after completion! The project that would help me do just that was the Robo-Mobile. Overview The Robo-Mobile consists of two parts: a chassis and a robotic arm. The arm was designed to be able to pick up items, move them, and drop them in specific places. It was also designed to have a solid range of motion and should be able to move objects with reasonable weight. This arm would then be mounted on a chassis that can then move around like a car. Since the chassis was easier to make, I will be starting this Instructable with the chassis, and I will move to the robotic arm afterwards. This robot was built purely from scratch. (Okay, maybe not the motors, or the Arduino, or the wheels, etc. But no kits or pre-built robot arms or chassis are used in this robot.) Contests There are many contests that I have entered this Instructable in. One contest I really have hopes up for is the Full Spectrum Laser Contest. I know that there are over 1000 entries and that I am really late, but if you like my Instructable please give me a vote. If I were to win the 3d printer or laser cutter I could greatly improve my robots and other projects.Thanks in advance! Step 1: Choices There were many choices I made throughout the process of building this robot. But in this Instructable I am going to put the bigger and more important choices I made together, right here at the beginning. Remote vs. AI Every robot has to have some way it is controlled, the robot can be computer controlled through some kind of AI loop program, or the robot can be remote controlled, making movements based on user inputs! While making the Ultrasonic robot, (the other project I made with Arduino,) I chose to make an AI loop robot. I knew this time I would have to explore the realm of the remote control to improve my Arduino skills further. (AI loop robots are in fact harder to perfect because they need the ability to react to the outside without a user telling them what to do at every given time. But because I hadn't already made a remote controlled robot I thought it be interesting if I tried something new. Plus remote controlled robots are more fun to play with after the completion of the project!) Communication After deciding that this was going to be a remote controlled robot I needed a way to tell it what to do. I needed a way of communication. For communication, there were a few options. The first one being the old school wired communication. This would have been the easiest method to implement, but wired communication is "Old School," technology is moving forward and wireless has become a must have for new devices. (Ex. Wireless charging, Cell Phones, Wireless Keyboards and Mice, etc.) Wired communication would also constrain the robot's range, not allowing it to move without a wire "tail". The method I chose to use was the well known wireless communication called Bluetooth. I know that remote controlled cars usually use radio frequency and now that I'm looking back at this project I think using radio frequency instead of Bluetooth might have been a better idea for this specific project. But going back to the goal I had in mind, I went with Bluetooth for experience! I felt that other projects I would make in the future with an Arduino would be controlled using smartphones and other Bluetooth devices so I chose to use Bluetooth for this project! (The downside is lag. If I ever made a v2 I would explore with radio signals instead.) Controller Now for the controller. I knew I was going with Bluetooth. But making a controller work was a entire different story. Since my robot is really two parts, the chassis and the arm, I chose to split up my controllers too. For the chassis, I used a simple android app to control the movement of the robot. The android app was written by myself using MIT's App Inventor. (I will go into more detail in one of the next steps.) For the arm, I used a dummy robot arm that the real arm would mimic. When I move one of the joints on the dummy arm, the real arm on the robot would mimic the same position. This method has many benefits which include, ease of implementation and ease of use. If the controller was also a button based android app that moved a single motor one at a time, moving the arm to a specific posture would have been a pain. The only downside of this method was the need to build a 2nd arm which isn't really that bad considering after building one all you need to do is build a copy. Material Before I cut the first piece of my chassis. I had to choose the material my robot would be made out of. As you may have seen from the pictures above that I chose to make mine out of plywood! I know that there are other materials out there that may suit this project much better, but I chose to use wood because I was confident working in wood! I knew how to operate wood fairly well being able to use the basic power tools suiting my needs. (Basic power tools I use include a Drill Press, a Miter Saw, a Jigsaw and a Dremel rotary tool. These tools were the tools I used to make my project but substituting the drill press out for a drill or a hand saw for the other power saws are perfectly reasonable.) Time to start building! Step 2: BOM (Bill of Materials) There were many components in this robot, much more than my old ultrasonic robot had. The list I have is here: Electronics 3x Arduino Unos - one is used to control the arm, one is used to control the car, one used as the dummy arm control board sending signal to the Arduino controlling the arm. (Had one and picked up two more from my local electronics store.) 1x Bluefruit EZ-Link Shield - Buying a specific Bluetooth shield wasn't really necessary but to ease into the Bluetooth I bought this for ease of use. Using breakouts like HC-05 is perfectly fine. (You will see that I did buy HC-05s for the arm and dummy arm because this shield can't run as master and only as slave. Needs soldering.) 1x Adafruit Motor/Stepper/Servo Shield for Arduino v2 - Be sure to get the v2 edition because this shield can run motors up at 1.2 A each. (This is a great shield for the Arduino, needs soldering though.) 1x Adafruit 16-Channel 12-bit PWM/Servo Shield - This kit wasn't really necessary it just made life a little bit easier. Driving the servos for the arm could have worked with just the Arduino. (Needs soldering.) 2x ProtoScrewShields - They are both used to make my own shield for the HC-05 and other circuits that weren't included in the other shields. (Picked up from my local electronics store. This shield isn't made for Arduino Uno R3 but instead an older model, even though it is missing a few pins it worked in this project.) 4x Header Kits - Used to stack shields, I personally used 4 sets because the Adafruit shield kits didn't come with stackable headers. (1 set for Bluefruit, 1 set for Motor, 1 set for 16 channel, 1 set for spacing out shields to plug servos in.) 8x Flip switches - Used to turn on and off the different electronics. (I used 8 of them but it depends on the wiring.) 2x HC-05 - A Bluetooth breakout I used to connect my dummy arm with the arm. 4x Solar Servos - I bought two D772, one D227, and D653. These had the most torque I could find at a reasonable price. 1x Electro-Holding Magnet - This is used as the "Picker" in this project. 4x Feedback Servos - I bought three standard sized feedback servos and one mini servo but they essentially do the same thing. Wire - A various different kinds of wires were used in this project. Some wires used were specific servo extension wires for organization purposes, but most wires were just "Regular Wire." 4x Battery Packs - I used two 4 AA battery packs, one 6 AA battery pack, and one 8 AA battery pack. Batteries - There were many batteries used in this build. I specifically used 22 AA batteries and three 3 9v batteries. The 9vs were used to power my Arduinos when the AAs were used to power the motors and Electro-Holding Magnet. 4x Pololu 298:1 Micro Metal Gearmotor MP - These are the main motors for the chassis. 7x 9v Battery Snaps - These are used to connect the battery packs I bought to the circuits. 3x Arduino DC plugs - These are the basic power connectors for the Arduino. Male and Female Headers - Different from the kits these are used to connect breakouts to my self designed circuits. Resistors - There are a few different resistors used in this project, they are all used in the self designed circuits. 1x TIP Darlington Transistor - This is used to control the only "High Powered" component in this build, the holding magnet. (The model # might not be the same. I used a NTE 261 which is essentially the same.) 1x Rectifier Diode 1N4001 - Also used to control the holding magnet. (Model # of the equivalent diode I picked up from local electronic store was the NTE116.) Other Parts 2x Pololu Micro Metal Gearmotor Bracket Pair - These are used to mount the motors onto the chassis. 2x Pololu Wheel 60x8mm Pair - These are the wheels of the chassis. These wheels are small but fit the robot well. Larger wheels could also work. WOOD - If the body is made out of wood. I used some scraps I had laying around but basically they wood I used were about 1/4 inch plywood and 1 inch plywood. Electrical tape - This is a must have to keep the electronics insulated. Double sided tape - Used only to tape a box to raise the dummy arm platform. Box - Not entirely needed, but it is a simple way to raise the dummy arm platform for easier use. Fender Washers/Ball bearings - These were only used as my counter weight for the robot arm. Something had to be used here so I used ball bearings and fender washers from a previous project. Variety of different screws, bolts, nuts, and washers - These are used to connect one of the parts of the robot to another. 9x Ball Caster Wheels - These are used to make a smooth base for the robot arms. I picked these up from my local hardware store and they were a perfect height for my motor. If they aren't the right height using washers to raise them works too. (More info in the step.) I used 5/8'' Roller Ball Bearings. Step 3: The Chassis Size When I started this project I knew I wanted a small but stable robot. My criteria was pretty straight forward, it should be a large enough to fit my electronics, but not too big and heavy that my micro gearmotors wouldn't have enough torque to drive it. I decided to go with a 20 cm x 20 cm platform. Once I finished cutting out the piece of plywood, I marked holes for the brackets and drilled them out. After a little toying around with a screwdriver and the nuts, I mounted my gearmotors onto the chassis. I wasn't able to hold back the temptation of attaching the wheels so I put them on to get a look for the robot! Shield As I said before, the chassis of the robot is the easiest part of the project, so after mounting on the motors, there was nothing left to do but to mount the electronics and get this robot moving! I pulled out my dusty Arduino (which hasn't been touched since the last project) and the new Adafruit Motor Shield v2 which was still just a bag of parts. Adafruit Arduino shields are great! They are easy to use and little to no troubleshooting required. The only downside of Adafruit shields is the need to solder them. I can say that I am proficient at soldering and this really wasn't a problem for me. The only tricky part were the pins/headers that were a little closer together, but I got pretty good at this after soldering four of these Adafruit shields. (Note: Adafruit shields don't come with stackable headers. These are bought separately.) I am not going to show each and ever step of the Adafruit shield assembling since they have a great step by step guide on their website doing just that. Wiring Once the shield is finished it is time to put it to use. I drilled in some holes in the front and the back of the chassis to bring the wires from the motors to the shield. I then hooked up my motors, each to a port on the terminal blocks using some wire I had lying around. (Sorry I don't have the gauge of the wire I used.) Once the motors were hooked up, I hooked up the battery pack using a 9v battery snap. Once the wiring was ready, I plugged my Arduino into my computer and uploaded a slightly modified example sketch that came with the v2 shield. I modified it to drive 4 motors and adjusted the pattern of the automated loop to test kind of movement. (Forwards: All motors driving forward. Backwards: All motors driving backwards. Turn/rotate right: right side motors move backwards as the left side motors move forward. Turn/rotate left: left side motors move backwards as right side motors move forward.) Testing Once the sketch finishes uploading it is time to power up the Arduino's power supply, and let the chassis run. During the forward section of the loop make sure that all motors are moving in the same direction. It is always good to elevate the chassis off the ground or hold it up in the air during first run since if the leads of the motors are backwards/flipped, the motor will spin the other way making the chassis lock up when motors move in all different directions. As I mentioned above, if motors are backwards just flip the leads on one of the motors or on the motor shield. After making sure the forward function works properly make sure you mark the direction forward is since the chassis is square and we have no way of identification. Also, don't forget to check the direction of left and right turn, make sure they are doing the correct action. Bluetooth After being able to move the robot autonomously, it was time to hook up my communication method. I knew it was Bluetooth because of the choices I made in the beginning, so I bought an Arduino Bluetooth shield. The shield I used for Bluetooth was the Adafruit Bluefruit Shield. This shield was by far the simplest Bluetooth solutions for Arduino. Even though the shield comes as a kit like the motor shield, it doesn't need any AT commands or any of the hard calibrating to use this shield. All you need to do is just boot it up and connect with a Bluetooth device. (Later on, for the robot arm, I will be using the HC-05 because this shield wasn't able to be use as a master, the controller.) So after the soldering and assembling was finished, I plugged my shield right on top of my motor shield which was on my Arduino, I am really starting to stack shields. Finally, I plug my Arduino back into the computer to upload a new sketch, one that includes the Bluetooth shield's set up code found from the Adafruit resources. Now it is time to make this chassis - remote controlled. Step 4: App Inventor: Intro How Bluetooth works with Arduino Bluetooth for the Arduino is basically a wireless serial port. If you don't know what a serial port is, it's basically a place where commands can be sent through to control your Arduino if it is programmed for the commands you give it. Usually this is achieved by connecting the USB to the computer and sending the data from a window on the screen to the Arduino. But now that the Bluetooth shield is connected, there isn't a need for the USB cable. Commands can now be sent from a connected Bluetooth device to the Arduino. This is exactly the function we will use to make our remote. For us, we are first going to make it so that the android phone can be "paired" or connected with the Bluefruit. After pairing it is then connected and able to send commands through the serial port. This is going to be useful because our app is going to send the Arduino a command or in this case an easy # or value when a button is pressed in the app. Once sent to the Arduino, the Arduino takes the value and matches it with a command, once it knows its command it executes it. This is how the app will control the Arduino and therefore the chassis. To make programming this app as easy as possible to make I used a tool called App Inventor. This tool now owned by MIT, originally owned by Google, was the easiest way to make a quick android app for my robot. App Inventor is a tool that uses blocks as its programming language. (A lot like Scratch.) You drag blocks and connect them to make a logic chunk that is the programming of the app. I will quickly go over the layout of App Inventor. App Inventor consist of two different kinds of views, block view, and the designer view. The block view shows the logic and programming. The designer view shows the look and feel of the app. App Inventor isn't very up to date on designer and has the old Android 2.x look, and not all the functionalities are available, but for our purpose it is a quick and dirty solution. The way I made my app starts with the designer blocks. There are three essential blocks for this app: a Listpicker, a Button, and a BluetoothClient. These are the essential blocks of the app and are a must have to insure app works. Each of the blocks are explained below. Listpicker - On the designer screen the listpicker will look exactly like a button but this button is different. This block allows you to pick a choice from a list. In the app this component/block will be assigned the list of all the Bluetooth addresses know to the phone and will be used to pair the phone with the Arduino. To ensure connection, every time the app is opened the Bluetooth address should be connected again. Button - This component is the main input of the android app. It is the way the app knows when to send a signal/value to the Arduino and which signal to send. If a button is labeled "Forward," the button should send a value to the Arduino through Bluetooth that the Arduino will interpret as a forward command. The app should have many buttons, each one sending a different value to the Arduino, and the Arduino will interpret the commands differently based on the value received. BluetoothClient - This is the main component that will make the app "Bluetoothed." It will give many functions/blocks that can then be connected to other blocks like the button and the listpicker to make the app work. Other useful designer blocks: Labels - These are pretty self explanatory. They can be dynamic and change, or just stay as a static label on the screen. Arrangements - These are basically the dividers. Without the arrangements, the components are all organized one underneath the other. With arrangements, components can be arranged almost any way. Step 5: App Inventor: Designer View Designer View The first thing to do is to is to get the designer components all laid out onto the screen. There are five buttons that are needed. Forward, Backwards, Right Turn, Left Turn, and Stop. Since the app I designed was really not going to be used on a phone but instead a 7 inch tablet. I wanted to be able to stop the robot with both my right and left hands, so I put two stop buttons one on each side to come to a total of 6 buttons. I then put my ListPicker or really the going to be Pair button right in the center with a dynamic label that would signify that the device was connected. (The label doesn't check if the device got disconnected though.) I did use the arrangements to make my screen as pretty as possible. After dropping the buttons on screen, I used the toolbar on the right side to configure the text displayed on the button. I made all the buttons' labels the function they are used for. (Ex. Forward Button labeled Forward; Backwards Button labeled Backwards; Listpicker labeled Pair etc) There were two more non visible components that I added to the app one of them was obviously the BluetoothClient but the other one I added was the Notifier. The notifier allows you to display messages. I added this component because I wanted to be able to display a message telling the user to turn on Bluetooth on their device. These are the components that I used to make this app. Now time for the Block view programming. Step 6: App Inventor: Block View "BeforePicking" Block View Near the top right corner of the screen you will find two buttons one that says "Designer" one that says "Blocks." Click on the "Blocks" button to move to the block screen. On the blocks screen you will have a left toolbar, and a blank screen. The left toolbar will be the place where you drag blocks out of, the right blank side allows you to place your blocks and build. To build our app we need at least three "chunks." The first chunk is the the before the listpicking, the second is after the listpicking, and the third is the button that will send signal to the robot. Since I had 6 buttons I will have 8 chunks. If you don't care about the logic behind the app you can just skip the the pictures and copy what I did. For people that want the explanation for each and every block here it is: Explanation for: "BeforePicking" First you have to drag out the "when ____. BeforePicking" block from the listpicker. This block allows the app to initiate what list the listpicker will pick from. In the "do" part of the block drag in "set____.Elements to" block. This is the block that will assign the list the picking will be chosen from. Notice how there is a small notch at the end of this block, this is the place where the list will be put in. Without anything in the notch basically nothing will be assigned to the elements and it will be empty. But we want something assigned to the listpicker. Specifically we want the list of Bluetooth addresses. To do this go into your Bluetooth_Client and drag out the ''___.AdressAndNames" block. As I said before, this is the list the listpicker will be assigned. This is the end of the necessary parts of the app, but to make the app work. The next few blocks I use will be to remind the user to turn on Bluetooth if they haven't already. This is just made by putting an "If, then" block after the setting of the listpicker. In the "if" notch I will put a "Not" block from the logic part of the toolbar and in that notch I will place the block "__.Enabled" from the Bluetooth client. This part of the code basically states: If Bluetooth isn't enabled. The next part in the then section we put the "call___.ShowAlert notice" from the Notice block and in the notice notch I will place a text block stating "Please enable your Bluetooth in settings." The translation of the blocks to plain English is here: When the listpicker is initiated, set the list of Bluetooth addresses to be the list the picker chooses from; also if Bluetooth isn't enabled show a message stating so. You can see exactly what this chunk does.   For more detail: Robo-Mobile - A Homemade Bluetooth Robot using arduino ### Wearable soundscape from Canada I’m reblogging from Core77 this interesting wearable project because I’d like to highlight the using of Arduino Lilypad board: Bio Circuit stems from our concern for ethical design and the creation of media-based interactions that reveal human interdependence with the environment. With each beat of the heart, Bio Circuit connects the wearer with the inner workings of their body. It was created at Emily Carr University by Industrial Design student Dana Ramler, and MAA student Holly Schmidt and provides a form of bio feedback using data from the wearer’s heart rate to determine what “sounds” they hear through the speaker embedded in the collar of the garment. Here’s the schematic of technology:   For more detail: Wearable soundscape from Canada ### Knockdown Warning Indicator (Redux) This week I continued developing a device that warns of the potential of a knockdown – the process by which an over-canvassed sailing ship is lain over on her beam-ends during a squall.  The potential for sinking at this point is high, especially if there are hatches open on the leeward side, so it is an event to be avoided.  As the reading of squall curves (from vessel stability booklets) is a skill rarely practiced these days, such a device has merit.  A squall curve diagram generally indicates the maximum angle of heel recommended for a given wind velocity, and the potential for gusts.  The 210’ tall ship Concordia sank in 2010 in such an event. At a basic level, assuming a prevailing wind of 25 knots (beaufort force 6), this device will measure heel (inclination) and indicate the level of gust that would present a knockdown risk based on that angle of heel, by flashing a LED for either 60 knots, 45 knots or 30 knots. I based the design around an accelerometer, with the plan being to trial more than one.  The sort we have in stock is a single axis, but Lindy had an ADXL335, 3-axis (one of the new ones, and it was around this that I designed the circuit.  With three axis inputs, and three LED outputs, I needed to use the ATMega88 – new for me.   Data sheets for ADXL335 and ATMega88. Excellent resources for using the ADXL335:   http://www.electronicsblog.net/simple-angle-meter-using-adxl335-accelerometer-arduino/ http://www.evilmadscientist.com/2009/basics-updated-using-an-accelerometer-with-an-avr-microcontroller/ http://www.evilmadscientist.com/2007/using-an-adxl330-accelerometer-with-an-avr-microcontroller/   Here’s my schematic. I designed the circuit so that the accelerometer resided on a separate board with three passive lo-pass filters that would connect to the main board via a 2x3 pin arrangement.  I set the board up this way so that I could experiment with several accelerometers, hoping to ultimately build my own using a flexure. The ADXL335 has resistors built in resistors so technically I don’t need the ones in the above diagram, and they are zero ohm.  I included them on the advice of a former technical director at RIM who said she always made provision for them, so she could tweak the filter later if necessary.  Used a 3.3V Voltage Regulator to adjust from the 5V that is supplied via USB.   Board took code, after fiddling with the make file (AT Mega 328p – I was missing the p).  Unfortunately there was a puff of smoke from the voltage regulator when I plugged the accelerometer board in.  I’m suspecting my cable. Not sure whether the Accelerometer is still functional.   The embedded code has the LEDs flashing on a loop with a delay.   For more detail: Knockdown Warning Indicator (Redux) ### Microsemi very low power RF chip for patient monitors The ZL70250 ultra-low-power radio frequency (RF) transceiver provides a wireless link in applications where power consumption is of primary importance. The transceiver’s ultra low-power requirements allow battery miniaturization or the use of energy-harvesting methods, enabling devices with an extremely small form factor. The availability of the transceiver in a CSP form factor combined with the extremely low number of external components also contributes in minimizing the application footprint. The ultra low-power device operates in unlicensed frequency bands between 795 and 965 MHz and offers a data rate of 186 kbit/s to support voice communication. For data communication, the ZL70250 supports extremely low power consumption in packet-based networks.  The device includes the RF transceiver as well as a Media Access Controller (MAC) that performs most link support functions including Received Signal Strength Indication (RSSI), Clear Channel Assessment (CCA), sniff, preamble and sync, packetization, and whitening. The device uses standard interfaces, enabling easy integration with a standard microcontroller or Digital Signal Processor (DSP). Ultra-Low-Power Transceiver for Short-Range Wireless Applications Ultra low transmit and receive current of less than 2 mA enables extremely long battery life, very small battery size, or energy harvesting Low supply voltage of 1.2 V to 1.8 V further reduces power consumption Operates between 795 and 965 MHz (915-MHz ISM band in North America; 868-MHz SRD band in Europe) High data rate (186 kbit/s raw) allows short data bursts and supports bidirectional voice communication Very few external components (only crystal and bias resistor required) and a CSP package enable end-devices with very small footprint Standard interfaces: SPIbus master for packet data and two-wire for status and control Integrated MAC performs all link layer basic functions, enabling simple and low-power controller functions  Applications Battery-powered wireless sensor network Applications relying on energy harvesting Wireless communication with very long battery life Voice communication Remote control Microsemi has introduced a very low power RF transceiver for short-range wireless applications which draws only 2mA of current when transmiting and receiving data. The radio operates in unlicensed frequency bands between 795MHz and 965MHz and will supprt a data rate of 186kbit/s. The ZL70250 radio transceiver is designed to operate from supply voltage (1.1V to 1.9V). “Lead customers have reported outstanding power saving capabilities when using compact coin cell batteries with 1.4V and 1.5V supply,” said Mauricio Peres, director of business development of Microsemi’s ultra low power (ULP) group. The device has a 2mm x 3mm die size and can be integrated into a single chip scale package (CSP) with the exception of a bias resistor and a supply decoupling capacitor. One application for the radio transceiver is in patient monitors. According to the supplier, wireless technology in the medical industry has limitations to battery life when transporting multiple vital sign streams to a display instrument.   For more read: Microsemi very low power RF chip for patient monitors ### BQ25100 – 250-mA Single Cell Li-Ion Battery Charger Description The bq2510x series of devices are highly integrated Li-Ion and Li-Pol linear chargers targeted at space-limited portable applications. The high input voltage range with input overvoltage protection supports low-cost unregulated adapters. The bq2510x has a single power output that charges the battery. A system load can be placed in parallel with the battery as long as the average system load does not keep the battery from charging fully during the 10 hour safety timer. The battery is charged in three phases: conditioning, constant current and constant voltage. In all charge phases, an internal control loop monitors the IC junction temperature and reduces the charge current if an internal temperature threshold is exceeded. The charger power stage and charge current sense functions are fully integrated. The charger function has high accuracy current and voltage regulation loops and charge termination. The pre-charge current and termination current threshold are programmed via an external resistor on the bq2510x. The fast charge current value is also programmable via an external resistor. Features Charging 1% Charge Voltage Accuracy 10% Charge Current Accuracy Supports Applications for Very Low Charge Currents - 10 mA to 250 mA Supports minimum 1-mA Charge Termination Current Ultra Low Battery Output Leakage Current - Maximum 75 nA Adjustable Termination and Precharge Threshold High voltage Chemistry Support: 4.35 V with bq25100H/01H, 4.30 V with bq25100A   For more detail: BQ25100 – 250-mA Single Cell Li-Ion Battery Charger ### Bitcoin Price Ticker (almost) from scratch using Arduino as ISP Hello everyone! I decided to create this tutorial on how to make a Bitcoin Price Ticker. Well, this is only a prototype and I will make a smaller edition with a more pleasant design and some other features at a later time. However, this serves as a nice proof of concept and hopefully it will give you some ideas for your own improvements. This Bitcoin Price Ticker will show the price of Bitcoins in 3 different currencies (USD, EUR & GBP), and it will update the price every minute. I fetch the price from http://coindesk.com every minute which provides an average price based on multiple markets. I will show you how to make this entirely from scatch(well almost), building your own arduino replica with an ATmega328 microcontroller to control everything, and wrapping it all in a nice casing. The only thing we won't make ourselves is the Adafruit CC3000. I have tried to explain all the steps as detailed as possible, without forcing you to spend hours reading. However, feel free to ask in case you have any questions or concerns. Feel free to visit my blog/website for more projects and other things: http://www.cavaleri.dk Have fun with this project! (I sure did) Step 1: Gather materials Obviously you will need a couple of things for this instructable. I will go ahead and list out the things you need, apart from the obvious work tools (soldering iron, solder, cutter bar etc). Stuff you need: ATmega328P-PU (The ATmega328-PU will also work, but is a little more complicated. It will be a lot easier if you find it bootloaded with Arduino, but it is not a requirement) 5x 10k Ohm resistors 220 Ohm resistor 7805 Voltage Regulator 5V 2x 10uF capacitors 2x 22pF capacitors 16 MHz crystal LCD display 16x2 9V battery connector 4 switches (buttons) (I used tact switches) Wire (and quite a lot of it) Plastic box Prototyping board 120x80mm (I used 1½ in total) Adafruit CC3000 Breakout. You can get all of the above except the CC3000 from Tayda Electronics http://www.taydaelectronics.com The CC3000 can be found on Adafruits website http://adafruit.com but I got mine off of Ebay. Price: Adafruit CC3000 ~$40 Everything else: $20 Total: ~$60 Step 2: Breadboard testing I suggest you to build everything on a breadboard first using your Arduino (I used the Arduino UNO). Then you will be able to test if the code works, and that you are able to connect to your WIFI (if you entered the wrong credentials etc.). These images will show you how to set it up using the CC3000 shield, but it will work with the breakout as well. Simply follow the directions below to know which pin goes where. Adafruit CC3000 As you see in the image I used a CC3000 shield I had laying around, but you will be able to use the breakout as well. If you are using the breakout your pins should look like this: IRQ -> Arduino 3 VBEN -> Arduino 5 CS -> Arduino 10 MOSI -> Arduino 11 MISO -> Arduino 12 CLK -> Arduino 13 Vin -> power GND - > Ground LCD Display On to the display. I have numbered the pins on the display from 1-16 and from the bottom up. Have a look at the image as well, in case you want to confirm the setup. As you can see on the image, I have not added any female pin headers on my CC3000 shield, which makes it a little difficult to connect the wires. Try bending the end of the wires a little to make a hook, if you are facing the same problem - it worked perfectly for me. Just make sure they do not connect underneath the shield. LCD 1 -> Ground LCD 2 -> Power LCD 3 -> Ground (Or you can add it to a potentiometer, which connects to power and ground. This is to alter the contrast of the screen. I however got the best result connecting it directly to ground.) LCD 4 -> Arduino 8 LCD 5 -> Ground LCD 6 -> Arduino 7 LCD 11 -> Arduino 6 LCD 12 -> Arduino 4 LCD 13 -> Arduino 9 LCD 14 -> Arduino 2 LCD 15 -> Power through a 220 Ohm resistor LCD 16 -> Ground Switches Lastly you add your switches/buttons over the center-rail of the breadboard. Now connect one leg to power and the other to ground through a 10k Ohm resistor. The leg opposite of the resistor goes to the Arduino pins. I did not have enough space on my small breadboard, so I had to get creative and use wires with female pin headers to connect my 4th switch to the Arduino. I used the Analog pins because we are running low on Digital pins on the arduino. I used A0, A1, A2 & A4 but you can use any you like. Just remember to alter the sketch/code accordingly! Upload sketch All we need to now is upload the sketch. I have commented each section of the code but most is in Danish. However, it should be easy to understand from the code itself. I will change it to a English version when I get some spare time. Feel free to make any changes, and I would love to see what you did. It is a rather long piece of code and instead of copy pasting it, I have uploaded it here. You will need to change the details of your WIFI. The following lines need to be changed: #define WLAN_SSID “Network_name” #define WLAN_PASS “Passphrase” #define WLAN_SECURITY WLAN_SEC_WPA2 (Only change this if you are not using WPA2) The code/sketch is certainly not perfect but it really gets the job done. You are more than welcome to go ahead and make any improvements. For instance, I did not add any debouncing for the switches but only a small delay to prevent them from getting pressed multiple times on a single click. It worked perfectly for my switches but that would be a good place to start, especially if your buttons make connections even when you do not press them. Please upload your example and make a comment about it. I will definitely add any good improvements to this code. Once everything works as it should, go ahead and clear your breadboard to make room for the next step. Arduino code.txt9 KB Step 3: (optional) Bootload your ATmega328 If you do not have a ATmega328 with Arduino preloaded, you will need to program it manually. I found a very useful guide to bootload the ATmega328P-PU (you can also use the ATmega328-PU but it is slightly more complex), and I have summarized it here. Be sure to check the original tutorial in case you have any problems, if you are using the ATmega328-PU or if you are looking for a more detailed guide. http://www.instructables.com/id/Bootload-an-ATmega328/ For this step you will need: ATmega328P-PU (or ATmega328-PU) 2x 22pf capacitors 0.1 uf capacitor 16 MHz crystal 220 ohm resistor Wires Start by programming your Arduino as an ISP(In-System Programmer). Open the Arduino IDE and find the ArduinoISP sketch(Files->Examples->ArduinoISP). Make sure you’ve selected the UNO under the boards menu. Now go ahead and upload this sketch to your Arduino board.   For more detail: Bitcoin Price Ticker (almost) from scratch using Arduino as ISP ### Dive into the Internet-of-Things world with the new Arduino GSM Shield We are excited to announce that the new Arduino GSM Shield is ready to be shipped allowing Arduino boards (Uno, MEGA and Leonardo) to explore the wonders of adding a GPRS/GSM connection to interactive projects. We teamed up with Telefónica Digital to design a tool that is greatly simplifying the process of building Internet of Things applications based on the GSM mobile phone network and controlled through the internet anywhere there is mobile phone coverage. Every shield is equipped with a SIM card ready to be plugged in and used within a special worldwide data tariff especially created for the product by Telefónica but you can use any SIM from other providers. As you can see from the video above, the activation process is really simple and fast through the BlueVia website where you can login with your Arduino account and be online in minutes! Then you can easily implement features like - make/receive calls: plug a sound speaker at the connector at the bottom of your shield and you can get your board to play the sound while you make/receive voice calls. - send/receive SMS: when a sensor reaches a threshold your Arduino can text any number or remotely activate a device. If you want to hear more about the GSM Shield directly from David Cuartielles, have a look at this video:   For more detail: Dive into the Internet-of-Things world with the new Arduino GSM Shield ### MICROCHIP INTRODUCES NEW AVR DA MICROCONTROLLER FAMILY The AVR DA Family Incorporates Several New Safety Features Together With Integrated Peripheral Touch Controller As the Internet of Things (IoT) delivers greater connectivity for industrial and home applications and as connected vehicles enhance cabin and operational features, higher-performance microcontrollers are required for better real-time control as well as to enable enhanced human machine interface applications. Microchip has released its next generation AVR® DA family of microcontrollers (MCUs) – its first Functional Safety Ready AVR MCU family with Peripheral Touch Controller (PTC). With this AVR DA family of microcontrollers Microchip builds on our legacy of high performance and high code efficiency devices, now meeting new demand across multiple industries with advanced analog and core independent peripherals, and more capacitive touch channels over existing devices, said Greg Robinson, associate vice president of marketing, 8-bit microcontroller business unit. The technology spans applications from connected home security, building automation and sensor systems to automotive and industrial automation, enabling the designs of more robust, accurate and responsive applications. Microchip’s Functional Safety Ready designation is applied to devices that incorporate the latest safety features and are supported by safety manuals, Failure Modes, Effects, and Diagnostic Analysis (FMEDA) reports, and in some cases, diagnostic software – reducing the time and cost of certifying safety end applications.  Read more: MICROCHIP INTRODUCES NEW AVR DA MICROCONTROLLER FAMILY ### First Solo Experience with Arduino and Choosing a Simple Circuit with IR Remote and Sensor CHOOSING A DIRECTION For this assignment, I embarked on my inaugural solo experience with Arduino. After facing some challenges during the in-class tutorial, I felt apprehensive about dealing with the breadboard once more. Consequently, I made an early decision to work on a simpler circuit. While exploring the components of the Arduino kit, the IR remote and sensor piqued my interest. After conducting some online research, I stumbled upon a circuit and code that appeared to be quite straightforward. Code and wiring diagram for IR remote IR remote At the outset, I envisioned a setup where pressing a certain number on the remote would illuminate a specific combination of colored LEDs. To begin, I copied the provided code into the Arduino software for verification before proceeding with the actual circuit assembly. However, this required the installation and selection of an IRRemote library. Given multiple packages with the same name, I opted for the first one that appeared. After downloading the IR library, I attempted to verify the code but encountered an immediate error message. At this juncture, I encountered a recurring challenge throughout the assignment - my limited understanding of the coding language used in Arduino. The code provided was in C++, a language I hadn't had the opportunity to learn previously. Having only experience with MATLAB, I found the syntax used for Arduino coding unfamiliar, making it difficult for me to interpret the error message. To seek assistance, I approached one of my housemates, a Mechanical Engineer with Arduino experience. Unfortunately, he was unfamiliar with the IR remote/sensor library, so he couldn't identify the issue either. Given the complexity and time-consuming nature of troubleshooting the IR remote code, I made the decision to opt for a simpler sensor system instead. Switching Focus - Utilizing a Distance Sensor In search of a new project idea, I turned to YouTube. Spending approximately an hour, I watched various videos like "Arduino for Beginners" and "Easy Arduino Projects." I discovered that I found it much easier to learn through tutorial videos compared to reading instructions on the Arduino Project Hub posts. Among the common themes in beginner projects, the ultrasound sensor was frequently used for distance measurement. Narrowing my focus, I delved into researching ultrasound sensor distance measuring circuits, watching a few tutorial videos. While some tutorials utilized a digital display to show the distance, I stumbled upon one video that demonstrated how to output this data to the serial monitor in the Arduino software. The video clarified that the ultrasound sensor emits an ultrasound wave at a specific frequency, and by measuring the travel time of the reflected wave, the distance can be calculated. This process involves configuring the pulse duration while considering the speed of sound, which is approximately 340 m/s. To set up the fundamental distance measuring circuit, I followed the wiring diagram provided in the video. Having successfully set up the circuit, I proceeded to work on the coding part for the distance sensor. I made sure to connect the echo pin of the ultrasound sensor to the 10 pin on the Arduino board and the trig pin to the 9 pin, mindful of my previous mistake during the in-class tutorial where I had not specified the correct pins in the Arduino code. To prevent repeating that error, I took the time to comprehend the code provided in the video, rather than simply copy-pasting it as I did with the IR remote. The code commences by assigning the Trig and Echo pins on the board as 9 and 10, respectively. In the setup section, the Trig pin is defined as an output, while the Echo pin is set as an input. To display the sensor readings on the serial monitor, the code incorporates the serial function. Moving on to the loop section, the state (low or high) and duration of the ultrasound waves are configured, along with the distance calculation. The resulting output is then sent to the serial monitor using the serial print function. With the code successfully verified, I proceeded to upload it to my Arduino circuit. To check if the code worked correctly, I opened the serial monitor and placed my hand in front of the sensor. Fortunately, the serial monitor displayed the distance from my hand to the sensor in centimeters, confirming that it was functioning as intended. Moving forward - Exploring the Proximity Sensor To add my personal touch to the distance sensor circuit, I opted to incorporate the LED setup we learned during the in-class tutorial. My plan was to have a green light illuminate when an object is beyond a certain distance from the sensor, and a red light activate when the object is closer than that threshold. For this, I placed a red and green LED, each with a 330-ohm resistor, onto the breadboard. I connected the positive leg of each LED to digital pins 2 and 3 on the Arduino board. Now, my task was to develop the code that would illuminate the LEDs based on the readings from the distance sensor. Although the in-class example utilized temperature readings, I had to adapt that code for a different sensor. In the setup, I began by setting the pin modes of the LEDs to output. Next, I created an if loop that would set the green light output to high and the red light output to low when the distance reading exceeded 10 cm. Conversely, the else statement in the loop ensured the opposite would occur if an object came closer than 10 cm to the sensor. To add a dramatic effect, I connected a buzzer in series with the red light, so that when an object approached within 10 cm of the sensor, a sound would be emitted. With this, my proximity sensor was successfully assembled and programmed. CONCLUDING THOUGHTS Overall, this project turned out to be much more enjoyable than I initially anticipated. At first, I faced difficulties translating my vision for the proximity sensor into code, mainly due to my limited experience with the programming language. However, with persistence, trial and error, and seeking guidance from YouTube tutorials, I gradually improved my understanding of the syntax, which eventually led to the successful completion of my final product. Another challenge I encountered was effectively managing the breadboard. Ensuring that all components were properly grounded and connected to the Arduino board proved to be tricky. Additionally, my fine motor skills were not the best, making it challenging to insert sensors and wires firmly into the board without feeling like I might break something. Nevertheless, I took extra care to double-check my connections before plugging the Arduino into my laptop to avoid any potential short-circuits. In the end, overcoming these obstacles and witnessing my proximity sensor project come to life was immensely rewarding. The hands-on experience and problem-solving involved in this venture have boosted my confidence with Arduino and sparked my interest in further exploring and experimenting with electronics and coding projects. Additionally, despite having attended a few classes on circuits, this assignment marked my first hands-on experience in actually constructing one. Working with diagrams can sometimes lead to overlooking critical aspects of circuit design, such as the significance of grounding. I quickly realized that both the LEDs and the ultrasound sensor needed proper grounding for the circuit to function correctly. This practical application provided me with valuable insights into circuit design. Moreover, the assignment taught me the importance of adaptability during the design process. Initially, I had planned to work with the IR remote/sensor, as it seemed straightforward. However, when encountering code errors, I decided to pivot and instead made the LEDs responsive to the ultrasonic distance sensor. This flexibility allowed me to find a workable solution and achieve the desired outcome. As a result of this experience, I feel more confident in using the Arduino for future projects, especially when prototyping for group endeavors. The hands-on learning and problem-solving involved in this assignment have sparked my interest in further exploring and applying Arduino-based solutions in various scenarios. ### Passive Sensors - Detecting Light and Motion Equipment:  Arduino UNO microcomputer, PC with Arduino IDE installed, and a USB cable.                        CdS PhotoSensitive Resistor(s), 10K Ohm Resistor, and Parallax PIR Motion Sensor Passive sensors detect some physical phenomena and provide some amount of information about it that can be used for action or reaction.  If sensors are passive, they may have an advantage over active sensors in some situations.  Active sensors send out some kind of physical signal and read back some reaction to the signal from the environment.  Passive sensors do not.  However, the emission of a physical signal can be detected by an adversary such as an enemy in wartime.  For example, RADAR can detect incoming enemy aircraft, ships, or vehicles, but it is active because it has to send out a radio signal to work.  An enemy may use that radio signal as a homing beacon for a guided missile to destroy the RADAR antenna/installation.  A passive system is less vulnerable and the enemy may not even know that it is there. A photosensitive resistor (PSR) has a resistance value that depends on the amount of light striking its sensor surface.  When you connect a PSR in series with a standard fixed resistor between a voltage source and ground, the amount of current flowing and hence the voltage across the fixed resistor will change with the level of light.  This allows an Arduino program to detect the light level based on an analog input connected to the junction between the PSR and the fixed resistor. The Parallax Passive Infrared Motion Sensor (PIR) allows an Arduino program to detect motion.  Here is the data sheet for the Sensor:  555-28027-PIRSensor-v2.1.pdf.  Please note that the SW shown is for a different microprocessor and IDE so you can only follow the general outlines and/or design of the code provided there. Your assignment is to connect a PSR circuit and a PIR to the Arduino board.  Disconnect the Arduino board from the USB port.  Connect the appropriate devices and wires to the Arduino UNO via the breadboard.  NOTE: When you are adding, changing, or removing wiring on a prototype connected to the Arduino UNO board, always disconnect the power from the USB port and check your wiring carefully before reconnecting it to the USB port.  Otherwise, you may damage the Arduino board. If you have any doubts, show your wiring to the TA before reconnecting it to the USB port. Select a 10K resistor and a PSR from the parts provided.  Connect them in series between power and ground according to the following schematic diagram.  Connect the junction between the two resistors to the Arduino analog input pin A0. The PIR device requires +5V power and ground plus a signal line for one bit of data connected to digital pin 2 of the Arduino. Connect the PC to the Arduino UNO board using the USB cable. Open the Arduino.exe program.  Write the code for the sketch to read the analog input A0 value from the junction of the PSR and fixed resistor to display it on the monitor screen.  Also, read digital input 2 as HIGH or LOW value from the PIR device and use that value to control the LED on the board via pin 13. In the setup function for this sketch, you need to initialize the serial port for 9600 bps, setup the LED pin for OUTPUT, and setup the PIR pin for INPUT. For more detail: Passive Sensors - Detecting Light and Motion ### A visit to the Arduino factory on DomusWeb The entire manufacturing process (except for certain purchased components) [of Arduino boards] takes place in and around Strambino, Ivrea, in a context dominated by the small- and medium-sized companies that are typical of Italian industrial districts and of the “Made in Italy” phenomenon itself. Ivrea’s history is another interesting part of the picture. The city was intimately tied to the presence of Olivetti, a company with a legacy of incredible electronics know-how, and an entire generation of experts. In fact, the Interaction Design Institute was established in a former Olivetti building randomly covered with blue tiles — just like the Arduino boards.   For more detail: A visit to the Arduino factory on DomusWeb ### PICOSCOPE 6000E 4-CHANNEL 500MHZ MIXED-SIGNAL OSCILLOSCOPES The PicoScope 6000E 8-channel oscilloscope series has grown to include 4-channel versions, bringing very high-speed performance to the 4 or 8 analog channel, 16 digital channel oscilloscope world, with up to 5GSa/s real-time sampling and 4GSa deep memory Saelig Company, Inc. has introduced the 4-channel PicoScope 6000E Series 500MHz Oscilloscopes, which provide 8 to 12 bits of vertical resolution, and up to 5GSa/s sampling rate with 4GSa memory, allowing these scopes to display single-shot pulses with 200ps time resolution.  The three 4-channel models added to the existing 8-channel 6000 series are the PicoScope 6403E with 300MHz bandwidth and 8-bit A/D resolution, the PicoScope 6404E with 500MHz bandwidth and 8-bit A/D resolution, and the PicoScope 6424E with 8, 10, or 12 bits “FlexRes” resolution. The screen update rate is a remarkable 300,000 waveforms per second. All models can operate with an extra 4 bits of resolution with the enhanced vertical resolution software feature — a digital signal processing technique built into PicoScope 6. Additionally, these oscilloscopes offer 8 or 16 optional digital channels when using the plug-in TA369 MSO pods, enabling accurate time-correlation of analog and digital channels. All 6000E models include a 14-bit 200MS/s 50MHz arbitrary waveform generator (AWG). Its variable sample clock avoids the jitter on waveform edges seen with fixed-clock generators and allows generation of accurate frequencies down to 100μHz. AWG waveforms can be created or edited using the built-in editor, imported from oscilloscope traces, loaded from a spreadsheet or exported to a .csv file.  The SuperSpeed USB 3.0 interface and hardware acceleration ensure that the display is smooth and responsive even with long captures.  The free PicoScope 6 software includes decoders for over 20 serial protocols. Read more: PICOSCOPE 6000E 4-CHANNEL 500MHZ MIXED-SIGNAL OSCILLOSCOPES ### TI aims at audio with low-noise low-power op amps Description   The OPA1662 (dual) and OPA1664 (quad) series of bipolar-input operational amplifiers achieve a low 3.3 nV/√Hz noise density with an ultralow distortion of 0.00006% at 1 kHz. The OPA1662 and OPA1664 series of op amps offer rail-to-rail output swing to within 600 mV with 2-kΩ load, which increases headroom and maximizes dynamic range. These devices also have a high output drive capability of ±30 mA. These devices operate over a very wide supply range of ±1.5 V to ±18 V, or +3 V to +36 V, on only 1.5 mA of supply current per channel. The OPA1662 and OPA1664 op amps are unity-gain stable and provide excellent dynamic behavior over a wide range of load conditions. These devices also feature completely independent circuitry for lowest crosstalk and freedom from interactions between channels, even when overdriven or overloaded. The OPA1662 and OPA1664 are specified from –40°C to +85°C. Features Low Noise: 3.3 nV/√Hz at 1 kHz Low Distortion: 0.00006% at 1 kHz Low Quiescent Current: 1.5 mA per Channel Slew Rate: 17 V/µs Wide Gain Bandwidth: 22 MHz (G = +1) Unity Gain Stable Rail-to-Rail Output Wide Supply Range: ±1.5 V to ±18 V, or +3 V to +36 V Dual and Quad Versions Available Small Package Sizes: Dual: SO-8 and MSOP-8 Quad: SO-14 and TSSOP-14 Texas Instruments has introduced two bipolar input op amps for sound mixers and USB audio systems. Called OPA1662 (dual) and OPA1664 (quad), quiescent current is 1.5mA per channel with 3.3nV/?Hz noise density and 0.00006% total harmonic distortion plus noise at 1kHz. “These op amps are targeted at USB and FireWire audio systems, analogue and digital mixers, portable recording systems, and other applications that require the highest noise performance combined with low power consumption,” said the firm. Gain bandwidth is 22MHz, slew rate is 17V/µs, and the amps will operate from +/-1.5 to 18V dual rails or 3 to 36V single rail. “System designers can build an audio signal path by combining the OPA1662 or OPA1664 with the PCM1792A 24bit, 192kHz sampling, stereo audio DAC,” said TI. The 1622 comes in SO-8 and MSOP-8 packages, and 1664 in SO-14 and TSSOP-14.   For more read: TI aims at audio with low-noise low-power op amps ### Arduino Project Challenge: Exploring Sensor Readings and Component Control HW9 – Arduino The Task: In our Arduino project challenge, we were free to create anything of our liking, with the only requirement being that the circuit must either read a sensor or control an active component. During a class session, a practice example was demonstrated, involving a humidity sensor, LED, potentiometer, and LCD screen. This setup could sense the temperature and display it on the screen. Additionally, the assignment sheet included other exercises meant to enhance our familiarity and comfort with using the Arduino. List of Possible Ideas: In search of inspiration, I explored my room with no specific project idea in mind. During my stroll through the house, I noticed a night light and recalled that the Arduino package included a photocell. That sparked an idea—I could create a night light! Seemed simple enough. Despite having limited experience with Arduinos and C++, I decided to challenge myself a bit. I envisioned a night light that would gradually brighten as it got darker, offering more than just an on-off functionality. I set up the circuit with an LED and the photocell using circuit.io, replicating their layout and code, but unfortunately, it didn't work as expected. Struggling to figure out how to make it work, I eventually had to abandon the idea.   Night Light Code // RGB LED // The RGB LED will appear red, green, and blue first, then red, orange, yellow, green, blue, indigo, and purple. // Email:support@sunfounder.com // Website:www.sunfounder.com // 2015.5.7 /*************************************************************************/ const int redPin = 11; // R petal on RGB LED module connected to digital pin 11 const int greenPin = 10; // G petal on RGB LED module connected to digital pin 10 const int bluePin = 9; // B petal on RGB LED module connected to digital pin 9 /**************************************************************************/ void setup() { pinMode(redPin, OUTPUT); // sets the redPin to be an output pinMode(greenPin, OUTPUT); // sets the greenPin to be an output pinMode(bluePin, OUTPUT); // sets the bluePin to be an output } /***************************************************************************/ void loop() // run over and over again { // Basic colors: color(255, 0, 0); // turn the RGB LED red delay(1000); // delay for 1 second color(0, 255, 0); // turn the RGB LED green delay(1000); // delay for 1 second color(0, 0, 255); // turn the RGB LED blue delay(1000); // delay for 1 second // Example blended colors: color(255, 0, 252); // turn the RGB LED red delay(1000); // delay for 1 second color(237, 109, 0); // turn the RGB LED orange delay(1000); // delay for 1 second color(255, 215, 0); // turn the RGB LED yellow delay(1000); // delay for 1 second color(34, 139, 34); // turn the RGB LED green delay(1000); // delay for 1 second color(0, 112, 255); // turn the RGB LED blue delay(1000); // delay for 1 second color(0, 46, 90); // turn the RGB LED indigo delay(1000); // delay for 1 second color(128, 0, 128); // turn the RGB LED purple delay(1000); // delay for 1 second } /******************************************************/ void color (unsigned char red, unsigned char green, unsigned char blue)// the color generating function { analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); } /******************************************************/ //Controlling LED by potentiometer //Rotate the shaft of the potentiometer and you should see the luminance of the LED change. //Email:support@sunfounder.com //Website:www.sunfounder.com //2015.5.7 /******************************************/ const int analogPin = 0;//the analog input pin attach to const int ledPin = 8;//the led attach to int inputValue = 0;//variable to store the value coming from sensor int outputValue = 0;//variable to store the output value /******************************************/ Serial.begin(9600);//set the serial communication baudrate as 9600 } /******************************************/ void loop() { inputValue = analogRead(analogPin);//read the value from the potentiometer Serial.print(“Input: “); //print “Input” Serial.println(inputValue); //print inputValue outputValue = map(inputValue, 0, 1023, 0, 255); //Convert from 0-1023 proportional to the number of a number of from 0 to 255 Serial.print(“Output: “); //print “Output” Serial.println(outputValue); //print outputValue analogWrite(ledPin, outputValue); //turn the LED on depending on the output value delay(1000); } /*******************************************/ Instead, I opted to create a lighting system consisting of three different color LEDs, each controllable by separate buttons. Following the layout and codes I found on circuit.io, I successfully connected the buttons, and they worked as intended. However, I thought it would be even cooler if I could control all the lighting with just one button, so I decided to work on that aspect. Journey Towards the Final Product: To familiarize myself with lighting up the RGB LED, my initial step involved downloading a code from the Arduino community. This code was programmed to cycle through various colors, including blending different hues to create new ones. By analyzing the code, I grasped the concept of assigning values to the different colors, a crucial skill that would come in handy for my own project. Code for RGB LED cycling colors. //RGB LED //The RGB LED will appear red, green, and blue first, then red, orange, yellow, green, blue, indigo, and purple. //Email:support@sunfounder.com //Website:www.sunfounder.com //2015.5.7 /*************************************************************************/ const int redPin = 11; // R petal on RGB LED module connected to digital pin 11 const int greenPin = 10; // G petal on RGB LED module connected to digital pin 10 const int bluePin = 9; // B petal on RGB LED module connected to digital pin 9 /**************************************************************************/ void setup() { pinMode(redPin, OUTPUT); // sets the redPin to be an output pinMode(greenPin, OUTPUT); // sets the greenPin to be an output pinMode(bluePin, OUTPUT); // sets the bluePin to be an output } /***************************************************************************/ void loop() // run over and over again { // Basic colors: color(255, 0, 0); // turn the RGB LED red delay(1000); // delay for 1 second color(0,255, 0); // turn the RGB LED green delay(1000); // delay for 1 second color(0, 0, 255); // turn the RGB LED blue delay(1000); // delay for 1 second // Example blended colors: color(255,0,252); // turn the RGB LED red delay(1000); // delay for 1 second color(237,109,0); // turn the RGB LED orange delay(1000); // delay for 1 second color(255,215,0); // turn the RGB LED yellow delay(1000); // delay for 1 second color(34,139,34); // turn the RGB LED green delay(1000); // delay for 1 second color(0,112,255); // turn the RGB LED blue delay(1000); // delay for 1 second color(0,46,90); // turn the RGB LED indigo delay(1000); // delay for 1 second color(128,0,128); // turn the RGB LED purple delay(1000); // delay for 1 second } /******************************************************/ void color (unsigned char red, unsigned char green, unsigned char blue)// the color generating function { analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); } /******************************************************/ //Controlling led by potentiometer //Rotate the shaft of the potentiometer and you should see the luminance of the LED change. //Email:support@sunfounder.com //Website:www.sunfounder.com //2015.5.7 /******************************************/ const int analogPin = 0;//the analog input pin attach to const int ledPin = 8;//the led attach to int inputValue = 0;//variable to store the value coming from sensor int outputValue = 0;//variable to store the output value /******************************************/ Serial.begin(9600);//set the serial communication baudrate as 9600 } /******************************************/ void loop() { inputValue = analogRead(analogPin);//read the value from the potentiometer Serial.print(“Input: “); //print “Input” Serial.println(inputValue); //print inputValue outputValue = map(inputValue, 0, 1023, 0, 255); //Convert from 0-1023 proportional to the number of a number of from 0 to 255 Serial.print(“Output: “); //print “Output” Serial.println(outputValue); //print outputValue analogWrite(ledPin, outputValue); //turn the LED on depending on the output value delay(1000); } /*******************************************/ Applying the fundamental button principles I learned from the Arduino community page, I successfully established connections for 3 buttons to the same RGB LED. Each button, when pressed, illuminated the LED with one of the three colors. Interestingly, if multiple buttons were pressed simultaneously, the LED displayed a combination of the corresponding colors. RGB LED Hold for Colors Code // RGB LED // The RGB LED will appear red, green, and blue first, then red, orange, yellow, green, blue, indigo, and purple. // Email:support@sunfounder.com // Website:www.sunfounder.com // 2015.5.7 /*************************************************************************/ const int redLED = 11; // R petal on RGB LED module connected to digital pin 11 const int greenLED = 10; // G petal on RGB LED module connected to digital pin 10 const int blueLED = 9; // B petal on RGB LED module connected to digital pin 9 /**************************************************************************/ // constants won’t change. They’re used here to set pin numbers: const int redbuttonPin = 2; // the number of the RED pushbutton pin const int greenbuttonPin = 4; const int bluebuttonPin = 7; // variables will change: int redbuttonState = 0; // variable for reading the RED pushbutton status int greenbuttonState = 0; int bluebuttonState = 0; void setup() { pinMode(redLED, OUTPUT); // sets the redPin to be an output pinMode(greenLED, OUTPUT); // sets the greenPin to be an output pinMode(blueLED, OUTPUT); // sets the bluePin to be an output } /***************************************************************************/ void loop() { // read the state of the pushbutton value: redbuttonState = digitalRead(redbuttonPin); greenbuttonState = digitalRead(greenbuttonPin); bluebuttonState = digitalRead(bluebuttonPin); // check if the red pushbutton is pressed. If it is, the buttonState is HIGH: if (redbuttonState == HIGH) { // turn LED on: digitalWrite(redPin, HIGH); } else { // turn LED off: digitalWrite(redPin, LOW); } // check if the green pushbutton is pressed. If it is, the buttonState is HIGH: if (greenbuttonState == HIGH) { // turn LED on: digitalWrite(greenPin, HIGH); } else { // turn LED off: digitalWrite(greenPin, LOW); } // check if the green pushbutton is pressed. If it is, the buttonState is HIGH: if (bluebuttonState == HIGH) { // turn LED on: digitalWrite(bluePin, HIGH); } else { // turn LED off: digitalWrite(bluePin, LOW); } } /******************************************************/ void color (unsigned char red, unsigned char green, unsigned char blue)// the color generating function { analogWrite(redLED, red); analogWrite(greenLED, green); analogWrite(blueLED, blue); } /******************************************************/ I made the decision to enable each color to turn on and off with a single press of the buttons, rather than requiring the buttons to be held down. Drawing from my prior general Python knowledge, I conducted some syntax research and sought assistance from one of my housemates who is majoring in CS. Together, we wrote the necessary if loops to achieve this functionality. Consequently, the LED colors could still be mixed, but there was no longer a need to hold down multiple buttons to observe the combination. Unfortunately, the video demonstrating this version was accidentally deleted. Nevertheless, you can envision the previous video and understand that I can now remove my finger from the buttons while the lights remain on. I reconsidered my setup once more and felt that the previous iteration was not sufficient. I desired the ability to control the intensity of each color, contributing to the final overall hue. Then, I recalled the potentiometer used in the in-class project. It dawned on me that I could utilize it to independently adjust the intensity of each color. Initially, I planned to integrate the potentiometer in the circuit, connecting its output to each lead (red, green, and blue). However, I soon realized that this approach wouldn't work as intended since it would distribute the resistance equally to all the leads, adjusting all colors simultaneously rather than individually. To address this, I conducted research on the Arduino community page and learned how to use analog inputs to measure the resistance from the potentiometer and convert it into a corresponding value. This step proved to be quite time-consuming, from wiring all the components to writing the necessary code. By combining code from previous iterations with fresh ideas, I successfully created a system that permits individual adjustment of colors in the RGB LED. Holding down the corresponding button allows the amount of that specific color to be controlled using the potentiometer. Once the button is released, the LED maintains the adjusted amount. Wanting to enhance the system further, I decided to incorporate three individual indicator LEDs—one for each color (red, green, and blue). Consequently, when the corresponding button is pressed, the respective color indicator light illuminates, informing the user about the color they are currently adjusting. Final Arduino Project Code /*************************************************************************/ const int redLED = 11; // R petal on RGB LED module connected to digital pin 11 const int greenLED = 10; // G petal on RGB LED module connected to digital pin 10 const int blueLED = 9; // B petal on RGB LED module connected to digital pin 9 const int extraRed = 5; const int extraGreen = 6; const int extraBlue = 3; /**************************************************************************/ // constants won’t change. They’re used here to set pin numbers: const int redbuttonPin = 2; // the number of the RED pushbutton pin const int greenbuttonPin = 4; const int bluebuttonPin = 7; // variables will change: int redbuttonState = 0; // variable for reading the RED pushbutton status int greenbuttonState = 0; int bluebuttonState = 0; int potPin = A3; int potValue = 0; int redValue = 0; int greenValue = 0; int blueValue = 0; void setup() { pinMode(redLED, OUTPUT); // sets the redPin to be an output pinMode(greenLED, OUTPUT); // sets the greenPin to be an output pinMode(blueLED, OUTPUT); // sets the bluePin to be an output pinMode(extraRed, OUTPUT); // sets the extra red LED pin pinMode(extraGreen, OUTPUT); // green pinMode(extraBlue, OUTPUT); // blue } /***************************************************************************/ void loop() { if (digitalRead(redbuttonPin) == HIGH){ // checking if the red button is pressed digitalWrite(extraRed, HIGH); // turning on the extra red indicator LED redValue = (analogRead(potPin)/4); // sets the value of the red light to be equal to a fourth of the value of the potentiometer color(redValue, greenValue, blueValue); // sets the color of the RGB LED to be the other colors’ values and the new red value }else{ digitalWrite(extraRed, LOW); // turns off the extra red indicator LED when the button is released } if (digitalRead(greenbuttonPin) == HIGH){ digitalWrite(extraGreen, HIGH); greenValue = (analogRead(potPin)/4); color(redValue, greenValue, blueValue); }else{ digitalWrite(extraGreen, LOW); } if (digitalRead(bluebuttonPin) == HIGH){ digitalWrite(extraBlue, HIGH); blueValue = (analogRead(potPin)/4); color(redValue, greenValue, blueValue); }else{ digitalWrite(extraBlue, LOW); } } /******************************************************/ void color (unsigned char red, unsigned char green, unsigned char blue)// the color generating function { analogWrite(redLED, red); analogWrite(greenLED, green); analogWrite(blueLED, blue); } /******************************************************/ I made modifications to the placement of components in Circuit.io's schematic, but I maintained the overall wiring layout of the circuit. At this point, I attempted a few other ideas that proved to be time-consuming and ultimately unsuccessful. One of my attempts was to address the issue of the potentiometer having fixed values. For instance, if I turned the green all the way down, the potentiometer would be fully rotated clockwise. However, when I pressed the blue button, the program assumed I wanted blue completely turned off as well. To tackle this, I tried implementing a while loop with a leading code that considered the potentiometer's position as 0 before making any adjustments. The aim was to enable adjustments from the potentiometer's current position and only count the change in rotation while the button was held. While I believe the code was mostly correct, the hardware setup did not handle this well, resulting in mainly flashing lights when I ran this code. Due to the delicate nature of the potentiometer leads, pressing the button could cause one of the leads to lose contact intermittently. As a result, the code would interpret this as zero resistance and assume that the potentiometer was fully rotated clockwise. This caused the corresponding color to immediately jump to its brightest setting until I managed to wiggle the component back into place. To address this issue, I attempted to utilize a joystick. The idea was to assign the joystick to the x-direction, allowing me to push the stick up and down slowly to adjust a specific color when the corresponding button was held. The joystick could be handheld and attached with wires, and its click button would turn the LED on and off entirely, in addition to making adjustments. However, I found implementing this idea to be much more challenging than anticipated, and given the lateness of the hour, I decided to call it a day, fairly content with what I had accomplished. This assignment presented both moments of frustration and satisfaction. Given my limited experience in coding and working with Arduinos, I proceeded through the project at a slow pace. However, my background in Python and Raspberry Pi skills from ES2 came in handy and provided some assistance along the way. Through this project, I also gained valuable insights into C++ syntax and the general circuitry of various components used in Arduinos. While Circuit.io proved helpful in laying out the circuitry, it was less effective when it came to providing sample codes. It consistently defaulted to downloading new libraries rather than presenting regular coding examples. Thankfully, the Arduino community page proved to be an invaluable resource. There, I found answers to my questions and discovered sample code that served as a foundation for my project. Without the support of these resources, I wouldn't have been able to accomplish such a complex project with my current level of knowledge. The combination of perseverance and guidance from these sources allowed me to create something beyond what I initially thought possible. ### AOPEN CHROMEBOX MINI IS DESIGNED FOR DIGITAL SIGNAGE AND KIOSKS When most Chromeboxes nowadays are targetted towards consumer market and educational fields, AOPEN designed the smallest enterprise-ready Chromebox for digital signage, corporate, and kiosks. This device is designed to run 24/7 in tough conditions and can handle shocks and vibrations without any problem. The Rockchip RK3288 powered Chromebox Mini may perform sluggishly if used as a mini PC, but this should not be an issue for digital signage or kiosks. The Specifications Of The Chromebox Mini: Dimension: WxHxD: 146 x 93 x 24 mmWeight: 403gCPU:Rockchip RK3288CQuad-Core Cortex-A17turbo up to 1.8GHzMemory:Dual-Channel 4GB LPDDR3Memory down designGraphics: ARM Mali-T764 MP4 GPU clocked at 600 MHzLAN: Gigabit 10/100/1000 MbpsFront Panel I/O:USB 2.0 port support BC1.2 x 3Power Button with LED x 1Rear Panel I/O:Power switch x 1HDMI x 1Ethernet RJ45 x 1Audio Combo Jack x 1 (Line out/Line in)Antenna hole x 2Wide Voltage Range DC input DC 15~50V power inlet Jack x 1MTBF: 50,000hrsOperating Temperature: 0ºC ~ 40ºCStorage Temperature: -20ºC ~ 60ºCRelative Humidity: 90% (50ºC non-Condensing) Read more: AOPEN CHROMEBOX MINI IS DESIGNED FOR DIGITAL SIGNAGE AND KIOSKS ### Machine Design Using Arduino The assignment for this week is to automate the machine assembled two weeks ago. For this Roxanna milled the Arduino's shield for controlling the steppers, but Alejandro found that we haven't all the components for stuffing, specially the A3982 - stepper motor driver, so as was impossible to get it locally, I decided to design a new one using the L298 (Dual full bridge drive) because it has also the possibility to work with the Arduino Uno at the Fablab. The Eagle board design file is H-Bridge Then we stuffed the boards with through holes, with components got locally. Following we test the Switching PS, and connected to the H- bridge boards, connected the Arduino to the boards and to the computer. I also downloaded and installed all the needed software, and were ready to test; but we have to modify the software for controlling the new boards because they have more connections to the Arduino. The pictures below shows some activities realized, the first one shows the original board and the replacement boards. At this point we had to leave the machine to the other groups for disassembling and fulfill their assignment. Then I continued with electronics to move the motors. I couldn't use the Arduino because it was out of order, so I should try another design and worked with a PIC18F4550 microcontroller. I searched the web and found this schematic simulated in Proteus. It uses a Maxim's Max232 IC for communications with the PC, and 18F series PIC. I build the block diagram from the schematic. For more detail: Machine Design Using Arduino ### 486 GETS ANIMATED TURBO BUTTON THANKS TO ARDUINO There was a point in time, excruciatingly brief, in which desktop computers often had a large “TURBO” button on their front panel. Some even featured an LED display that would indicate the current CPU frequency, providing visual conformation that your machine had leaped to a blistering 66 MHz. The 486 that [someyob] is restoring had the Turbo button, but sadly there was just a simple LED to show whether or not it was engaged. But there was a window in the front panel where it seemed like a numerical display was intended to go, so they decided to wire up their own CPU indicator by sensing the state of the Turbo LED with an Arduino Pro Mini. Now to modern audiences, this might seem like cheating. After all, the Arduino isn’t actually measuring the CPU speed, nor is it directly controlling it (that’s still done by the original Turbo button wiring). But the truth is, even back in the day, the CPU frequency displays faked it — they just toggled between showing two predefined frequencies depending on the state of the button. The arrangement [someyob] has come up with does the same thing, except now there’s some extra processing power in the mix, so the display can show some slick animations as it switches between 33 and 66 Mhz. In the GitHub repository, [someyob] has provided the Arduino source code and schematics showing how the microcontroller was shoehorned into the existing front panel wiring without compromising its functionality. There’s even a brief video below that shows the display in operation. Like the idea but don’t have a 486 laying around? Don’t worry. We’ve seen a similar panel built for modern machines that  just doesn’t look the part, it actually manages to be functional. Source: 486 GETS ANIMATED TURBO BUTTON THANKS TO ARDUINO ### Something is rotten in Denmark (Bio-Hacks) Massimo and I had the chance to visit a Labitat makerspace in Copenhagen. I have to thank Martin Markus to let us in on a non-visit day and move underground, where the lab is. The main reason of our visit was getting in touch with the Bio-Hackers and Maker Community meeting there, get them involved in the Call of Makers for the upcoming European Maker Faire in Rome. We had a good time in talking with them about the strange situation we are witnessing here in Europe: many languages, many nations, one big movement of people tinkering around stuff. Get everybody to know about this event and the chance to meet and talk to each other is a massive task. But we are going to overcome it! The place is just super. I’ve been involved in the making of a makespaces in the last three years of my life, but I have no words in describing the feelings I had in witnessing the massive amount of contents that basement kept. No joke. I tried my best in recovering those objects, those feelings and this odd XXIst century knowledge in a pool set of Flickr, where I tried to describe and follow the different projects I’ve seen. For more detail: Something is rotten in Denmark (Bio-Hacks) ### MEET THE NEW GPD WIN MAX HANDHELD GAME CONSOLE RUNNING WIN10 Game consoles are usually smashing hits but the recently announced WIN Max Handheld Game Console from Shenzhen based GamePad Digital (GPD) took things to a new level on Indiegogo as it raised almost 1.4 million dollars in just 24 hours of the campaign launch. The new game console features the Intel i5-1035G7 Ice Lake processor which comes with a 10nm process, 15W TDP, 4 cores, 8 threads, and a 6MB L3 cache, was designed for AAA games like Fortnite and Assasins creed Odyssey. The console was designed as an upgrade to the GPD WIN 2 which was a great device but fell short in terms of its processor, which is not powerful enough to run the latest AAA gaming titles, and its mouse + keyboard control mode, which is deemed somewhat inconvenient for playing online games. All of this was improved upon in the GPD WIN Max, with a faster processor, more ergonomic setup of controls/keys, and a more durable enclosure made of LG-DOW 121H aviation-grade anti-shock ABS synthetic resin. To provide the kind of quality graphics that gamers appreciate, the new console, thanks to the processor, features the Intel’s 11th-generation Iris Plus Graphics 940 integrated graphics chip with lower power consumption, heat dissipation, and 3DMark 11 based performance that are nearly as good as the NVIDIA GeForce MX250. The WIN Max supports a host of communication protocols including Bluetooth 5.0 and WiFi 6 both of which are the latest versions of the standards. With Bluetooth 5.0, the WIN Max is able to connect to up to 7 Bluetooth devices simultaneously, with a transmission speed of up to 3MB/s, while with WiFi 6, WIN MAX brings a theoretical transmission speed and throughput that is 4 times higher than that of Wi-Fi 5, 2.4 times higher than that of current gigabit wired network, and 24 times higher than the 100M wired network.  Read more: MEET THE NEW GPD WIN MAX HANDHELD GAME CONSOLE RUNNING WIN10 ### Call for Arduino music at Gwendalyn Festival 2013 Are you a musician, music amateur, electronic bricoleur or maker who makes music by creating your own instruments and tools using Arduino? We are looking for your music tracks to be presented in a radio program entirely dedicated to (DIY) music made with Arduino based synths and instruments.The program is scheduled within the GwenFestival program, an international music and radio festival organized in Chiasso (TI, Switzerland) during April 2013. Gwenfestival is promoted by Radio Gwendalyn, an on-line independent radio located at Chiasso railway station (during the festival, from April 1st to April 30th, Radio Gwendalyn will use a FM frequency to transmit its music program). The program will be on air on saturday 13 and sunday 14 April, from 17.30 – 18.00. How to participate: Tracks  should include at least an instrument or synth made with Arduino and they will be selected according to few parameters: - quality of the sound design and music; - originality of the implemented solution; - originality of the process or production story. For more detail: Call for Arduino music at Gwendalyn Festival 2013 ### Redesigning the RA-02 Breakout board module Story The RA-02 Breakout module includes level converters The RA-02 Breakout Module is designed to be beginner-friendly and compatible with breadboards. Many of them may possess one or more RA-02 Breakout modules. For those who do, they are undoubtedly aware of the challenges associated with using this specific breakout module. The RA-02 module is an excellent piece of equipment, especially when integrated into a custom PCB that considers all its intricacies. However, using the RA-02 breakout module in its current form factor poses several unique challenges. If these challenges are unfamiliar to you, they can lead to frustrating moments or even permanent damage to the module. What do these challenges entail? 1)The module utilizes Semtech's SX1278 chip and operates at 3V. However, its IO pins are NOT compatible with 5V, despite appearing to function temporarily when supplied with 5V. This misconception has led many individuals, particularly on YouTube, to mistakenly believe that sending 5V logic signals to the module is safe. So far, I haven't come across any YouTube videos advising viewers to use a resistor divider or logic converter at the very least. Unfortunately, there seems to be a lack of awareness about this issue, and even those who are aware of it tend to remain silent about it. The datasheet actually specifies the use of logic converters. 2)Incorporating logic converters involves introducing extra wiring, which can complicate a breadboard-based project. 3)You need to connect a total of 4 ground pins. Failing to connect all of them can lead to various issues, ranging from overheating to complete failure. This conclusion is based on my personal experience while researching this project. 4)Due to its lack of breadboarding compatibility, the current breakout module creates a messy setup with wires going everywhere, leading to unstable connections and other issues. Essentially, something akin to the image depicted below: The image showcases my setup featuring an existing RA-02 Breakout Module, an 8-channel Logic converter, and an Arduino Uno clone, all interconnected with numerous wires to enable this configuration. It certainly involves a substantial amount of wiring. Here is my proposed solution: In my designs, I frequently utilize the BSS138 N-MOS Mosfet and 10k resistors for logic conversion on various LoRa PCBs. This solution is cost-effective and dependable, but it does require a significant amount of PCB space. For instance, to implement level conversion for all of the RA-02's GPIO and IO pins, it would necessitate using 11 Mosfets and 22 10k resistors. I frequently encounter the issue of dealing with numerous unnecessary wires, some of which even fail right after prototyping. To address this problem, I've created a few specialized PCB solutions, which have helped to some extent. However, relying solely on dedicated PCBs is not always the most ideal approach. After considering the advantages of using a dedicated Logic Converter IC and Mosfet-based converters to achieve compatibility with breadboards, I found the idea promising. Consequently, I proceeded to design the following solution: The breakout board module is designed to be breadboard compatible and features clearly marked pins to distinguish between the 3V and 5V sides of the module. Module Testing: Employing a 5V device For my initial test, I opted to use an Arduino Uno Clone, as it is commonly available to most Makers and students. Specifically, I utilized Cytron's Maker Uno platform, which comes with additional features like diagnostic LEDs, making prototyping significantly more convenient. As evident from the setup, we only need to connect to the 5V logic side of the module, along with providing 3V and 5V power and ground connections to the module. For this test, I utilized Sandeep Mistry's LoRa Library, along with the Arduino IDE, to create a quick test sketch. The connections are established as follows: RA-02 Module -> Maker Uno MISO -> D12 MOSI -> D11 SCK -> D13 NSS -> D10 RST -> D9 DIO0 -> D2 OE -> D8 Now, let's delve into some crucial sections to gain a comprehensive understanding of how to effectively utilize the module: Pin Declaration #include // include libraries #include // I used Sandeep Mistry's LoRa Library, as it is easy to use and understand const int csPin = 10; // LoRa radio chip select const int resetPin = 9; // LoRa radio reset const int irqPin = 2; // change for your board; must be a hardware interrupt pin const int OEPin = 8; // Output Enable Pin, to enable the Logic Converter Within the Setup function, some additional tasks need to be performed, especially because our Maker Uno (or your Arduino Uno) operates at 5V. void setup() { Serial.begin(115200); // initiate serial communication pinMode(OEPin, OUTPUT); // Set up the OE pin as an output digitalWrite(OEPin, HIGH); // Pull it High to enable the logic converter while (!Serial); Serial.println("LoRa Duplex - Set spreading factor"); // override the default CS, reset, and IRQ pins (optional) LoRa.setPins(csPin, resetPin, irqPin); // set CS, reset, IRQ pin if (!LoRa.begin(433E6)) { // initialize ratio at 433 MHz Serial.println("LoRa init failed. Check your connections."); while (true); // if failed, do nothing } LoRa.setSpreadingFactor(8); // ranges from 6-12, default 7 see API docs Serial.println("LoRa init succeeded."); } A comparison between the standard RA-02 Breakout module and one of my custom "Arduino-type PCBs". As observed, a significant number of wires are required to establish the connections in this setup. Additionally, it's essential to mention that there are only 8 level converters on this ATMEGA328P PCB. To utilize all of the RA-02's GPIO, an external logic converter must be added as well. Using a 3v Device: For my second test, I opted for a more adventurous approach by attempting to use the new Raspberry Pi Pico (RP2040 Microprocessor). I have several Pico boards lying around but haven't explored them much because I'm not fond of using MicroPython or CircuitPython, and the Arduino Core for the RP2040 is relatively new. To simplify things, I chose to work with a development board that offers useful diagnostic features. Additionally, I'll also conduct a test using an original Pi Pico board to make it accessible to a wider audience. Once again, I employed Sandeep Mistry's LoRa Library and utilized the exact same Arduino sketch used in the Maker Uno test. However, I had to modify the pin numbers because the RP2040 utilizes different pins for its SPI interface. Maker Nano RP2040 RA-02 Breakout Module NSS 17 MOSI 19 MISO 16 SCK 18 RST 9 DIO0 8 In this scenario, there is no need for the OE pin since the RP2040 is a native 3V device. Consequently, the level converter can remain disabled, with its pins in tri-state (high impedance) mode. Upon examining the code, it closely resembles the Maker Uno's code, with the only difference being the alteration required in the Pin declarations. #include const int csPin = 17; // LoRa radio chip select const int resetPin = 9; // LoRa radio reset const int irqPin = 8; // change for your board; must be a hardware interrupt pin byte msgCount = 0; // count of outgoing messages int interval = 2000; // interval between sends long lastSendTime = 0; // time of last packet send // Note that SPI has different names on the RP2040, and it has 2 SPI ports. We used port 0 // CIPO (Miso) is on pin 16 // COPI (Mosi) is on pin 19 // SCK is on pin 18 // CE/SS is on pin 17, as already declared above To simplify matters, I avoided using a breadboard for this setup. To simplify the process and avoid using a breadboard, I opted to conduct the Original Pi Pico test using the Maker Pi Pico PCB. This PCB functions as a comprehensive breakout module, equipped with detailed pin numbers and diagnostic LEDs. While it utilizes a native Pi Pico, directly soldered to the PCB through castellated holes, it is not a true standalone Pico. Nevertheless, using this setup for the test ensures that the pins are labeled exactly the same as on the original Pico, making my work more convenient. The code used for the Maker Nano RP2040 works flawlessly, requiring no modifications. Given the length of this post, I've chosen not to include my tests of the ESP-12E (NodeMCU) or ESP32 development boards. Rest assured, they also performed as expected. Schematics Code #include // include libraries #include const int csPin = 10; // LoRa radio chip select const int resetPin = 9; // LoRa radio reset const int irqPin = 2; // change for your board; must be a hardware interrupt pin const int OEPin = 8; // Output Enable Pin byte msgCount = 0; // count of outgoing messages int interval = 2000; // interval between sends long lastSendTime = 0; // time of last packet send void setup() { Serial.begin(115200); // initialize serial pinMode(OEPin,OUTPUT); digitalWrite(OEPin,HIGH); while (!Serial); Serial.println("LoRa Duplex - Set spreading factor"); // override the default CS, reset, and IRQ pins (optional) LoRa.setPins(csPin, resetPin, irqPin); // set CS, reset, IRQ pin if (!LoRa.begin(433E6)) { // initialize ratio at 915 MHz Serial.println("LoRa init failed. Check your connections."); while (true); // if failed, do nothing } LoRa.setSpreadingFactor(8); // ranges from 6-12,default 7 see API docs Serial.println("LoRa init succeeded."); } void loop() { if (millis() - lastSendTime > interval) { String message = "Testing Arduino and RA-02 breakout "; // send a message message += msgCount; sendMessage(message); Serial.println("Sending " + message); lastSendTime = millis(); // timestamp the message interval = random(2000) + 1000; // 2-3 seconds msgCount++; } // parse for a packet, and call onReceive with the result: onReceive(LoRa.parsePacket()); } void sendMessage(String outgoing) { LoRa.beginPacket(); // start packet LoRa.print(outgoing); // add payload LoRa.endPacket(); // finish packet and send it msgCount++; // increment message ID } void onReceive(int packetSize) { if (packetSize == 0) return; // if there's no packet, return // read packet header bytes: String incoming = ""; while (LoRa.available()) { incoming += (char)LoRa.read(); } Serial.println("Message: " + incoming); Serial.println("RSSI: " + String(LoRa.packetRssi())); Serial.println("Snr: " + String(LoRa.packetSnr())); Serial.println(); ### Ultrasonic sensor HC-SR04 arduino project with code Many times, when parking our cars in the garage, we accidentally scratch them against the walls or cause damage due to a lack of visibility regarding the remaining distance between the car and the wall. To address this issue, we can create a straightforward electronic project using Arduino and an ultrasonic sensor. This project aims to measure the distance between the car and the wall, providing assistance in parking the car precisely in the garage without causing any damage. The project involves utilizing the HC-SR04 ultrasonic sensor with Arduino and includes the necessary code for implementation. Electronic components needed : The components required for this project include: - HC-SR04 ultrasonic module - 7 LEDs - 7 resistors (220 Ohm) - Electrical wires - Arduino UNO - Breadboard These components are necessary to build and implement the project successfully. circuit diagram Arduino programming code : // ultrasonic sensor Pins const int trig = 10; const int echo = 11; // led Pins variables const int LED1 = 2; const int LED2 = 3; const int LED3 = 4; const int LED4 = 5; const int LED5 = 6; const int LED6 = 7; const int LED7 = 8; int duration = 0; int distance = 0; // By www.andprof.com void setup() { // ultrasonic sensor pinMode(trig , OUTPUT); pinMode(echo , INPUT); // led pinMode(LED1 , OUTPUT); pinMode(LED2 , OUTPUT); pinMode(LED3 , OUTPUT); pinMode(LED4 , OUTPUT); pinMode(LED5 , OUTPUT); pinMode(LED6 , OUTPUT); pinMode(LED7 , OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(trig , HIGH); delayMicroseconds(1000); digitalWrite(trig , LOW); duration = pulseIn(echo , HIGH); distance = (duration/2) / 28.5 ; Serial.println(distance); if ( distance <= 5 ) { digitalWrite(LED1, HIGH); } else { digitalWrite(LED1, LOW); } if ( distance <= 7 ) { digitalWrite(LED2, HIGH); } else { digitalWrite(LED2, LOW); } if ( distance <= 10 ) { digitalWrite(LED3, HIGH); } else { digitalWrite(LED3, LOW); } if ( distance <= 15 ) { digitalWrite(LED4, HIGH); } else { digitalWrite(LED4, LOW); } if ( distance <= 17 ) { digitalWrite(LED5, HIGH); } else { digitalWrite(LED5, LOW); } if ( distance <= 20 ) { digitalWrite(LED6, HIGH); } else { digitalWrite(LED6, LOW); } if ( distance <= 25 ) { digitalWrite(LED7, HIGH); } else { digitalWrite(LED7, LOW); } } Explainer video : ### ENABLING AI ON THE EDGE WITH IWAVE’S CORAZON-AI Edge devices have found their way into smart surveillance, autonomous driving, robotics, and medical imaging. With a growing requirement for making decisions on the edge and data privacy concerns, there is a requirement for intelligent devices capable of making real-time decisions. The Edge AI devices are expected to run complex neural networks and deep learning algorithms while maintaining low latency, power efficiency, and accuracy. iWave’s Corazon-AI built on Xilinx Zynq® UltraScale+™ MPSoC is designed to overcome these challenges. The rugged and innovative FPGA-based AI Inference engine with a Pico -ITX form factor (100mm x 72mm) is coupled with multiple connectivity options while supporting multiple cameras. The EdgeAI solution provides interfaces to connect 8 IP cameras, multiple USB cameras, and SDI Camera. These options provide the ability to capture multi-angle high-resolution video frames that are proactively processed by the in-built AI Inference engine. The solution also supports a wide range of high-speed connectivity options such as Dual Gigabit Ethernet, 802.11 ac Wi-Fi, BT 5.0, 3G/4G/5G support via an M.2 expansion slot, Dual CAN and USB3.0. There is also a provision for extended storage for an MSATA / NVMe SSD via an M.2 expansion slot. The suite of connectivity help customers towards various use cases based on the on-premise architecture and requirement. The EdgeAI Solution is built around a highly adaptive MPSoC that features a heterogeneous Arm® + FPGA architecture providing customers the advantage of using the processor cores as a regular SoC for high-level management functionalities such as system boot, peripherals management, Read more: ENABLING AI ON THE EDGE WITH IWAVE’S CORAZON-AI ### Tracking Cat Eyes via Kinect using Arduino This instructable was made as part of the CS graduate course "Tangible Interactive Computing" at the University of Maryland, College Park taught by Professor Jon Froehlich. The course focused on exploring the materiality of interactive computing and, in the words of MIT Professor Hiroshii Ishii, sought to "seamlessly couple the dual worlds of bits and atoms. Please visit http://cmsc838f-s14.wikispaces.com/ for more details. This project involved the use of Microsoft Kinect and servo motors. Although a simple idea, you are guaranteed to get some reactions! As you probably guessed from the title, the general idea behind this project was to use a Kinect to track movement, and then use output from the Kinect to make cat eyes follow people as they walk by. Shopping List Creepy Poster (we suggest a cat poster) 2x 1 1/2" Wooden Balls Paint 2x Standard Servo TowerPro SG-5010 Motors 8xAA Batteries (battery case optional) Arduino Uno IC Breadboard Microsoft Kinect Hot Glue Gun Step 1: Select a Poster and cut out Eyeholes Go out to the store and find your favorite poster/painting. For aesthetic reasons, I recommend finding one that already has eyes printed on it. It will be easier to trace and cut out. Step 2: Paint Eyeballs Find some spherical object that will represent eyeballs. Anything round will work. It is important to use round balls that are bigger than the cut out eye holes. Otherwise, the eyeballs will not fill the hole and viewers will see behind the poster. For my poster, 1 1/2" wooden balls were sufficient. These can be found at most local craft shops. Grab some paint while you're there and paint on eyeballs. For maximum impact, the paint color and and pupil shape should match the figure before the eye holes were cut out. This will help the eyes blend into the poster and seem realistic. Step 3: Mount Eyeballs onto Servo Motors Once the eyeballs are dry, mount each eye on a servo. For a temporary solution that won't ruin the motors, I recommend mounting them onto a motor horn first (included in the Adafruit motor kit linked above) via hot glue gun. Then attach the horn to the motor. Be sure the servos are in their normal state before gluing the eyeballs on the horn. When mounted, the eyeballs should be oriented such that they can rotate 90 degrees in either direction. Step 4: Mount Motors on back of Poster To mount the motors on the back of the poster, find some material that will act as a platform. It should be light enough to hang on the back of the poster, yet sturdy enough to withstand the weight of the motors and prevent any unwanted shifting during motor operation. Something as simple as leftover styrofoam is sufficient. Again, I recommend using a hot glue gun (see picture in previous step for a closeup of mounting the motors). Step 5: Circuit Setup Now for the fun part! Since we need to power two servos at the SAME time, we cannot rely on power from an Arduino alone. An external power source is required for the motors. Each servo is rated to work at 4.8V - 6V. Therefore, a 12V power source (an 8 AA battery pack works well) for the motors should be fine. If the motors were controlled one at a time, you could easily run both off of the Arduino. IMPORTANT NOTE: Although the Arduino will be run on a different power source from the motors, it must still share a common ground (see circuit diagram).   For more detail: Tracking Cat Eyes via Kinect using Arduino ### What is SIP trunking and how can it help your business? Are you searching for an efficient and cost-effective way to boost key aspects of your business's daily operations? If so, look no further than SIP (session initiation protocol) trunking technology; an innovative and cost-efficient telecommunications solution that has transformed how businesses communicate, helping them remain competitive in today's digital environment. Taking advantage of SIP trunking allows companies to reduce costs while simultaneously improving communication performance throughout their organization, which may benefit you and your organization immensely! Read on for more information about what SIP trunking can offer your organization. Definition and advantages of SIP trunking SIP trunking has revolutionized how people communicate. This innovative technology enables voice and data transmission via the internet, therefore dispensing with traditional phone lines altogether. Businesses can leverage SIP trunking to experience numerous advantages, including cost savings and enhanced communication capabilities. Calls can be made or received anywhere that has internet connectivity, anytime! SIP trunking also allows businesses to maintain uninterrupted communication with both their customers and employees and its flexible scalability enables businesses to add or delete lines according to their needs. These advantages make it a compelling solution for improving communication systems while keeping costs under control. Understanding how SIP trunking works Although its technical name might sound intimidating, SIP trunking provides businesses of any size direct access to an Internet telephone service provider while significantly cutting telecommunication expenses. It also maintains excellent voice quality and reliability, which is an indispensable asset in keeping ahead of competitors! With its help, companies can streamline communication systems while welcoming the future of telephone communication in offices and businesses. Selecting a SIP provider who meets all of your needs Selecting a SIP vendor may seem daunting at first, as there are so many options on the market that make it hard to differentiate between those offering quality services and those who do not. Finding an appropriate partner that aligns with your investment goals, risk preferences, and financial budget is of utmost importance. Therefore, research should always precede making a decision: look for vendors with strong market reputations, transparent information delivery channels, and flexible investment solutions that match up well and can help achieve your investment goals more successfully. Take your time to evaluate each of them carefully until you find one that meets your financial needs, while still helping achieve your investment goals. Optimizing Performance Maximizing SIP trunking performance can be tricky and requires following best practices to ensure the technology operates as efficiently as possible. One of the key practices in SIP trunking is having sufficient bandwidth to operate smoothly without any lag or latency issues, while also possessing a solid network infrastructure with reliable switches, routers, and firewalls to guarantee quality communication. Additionally, having a disaster recovery plan in place is crucial to ensure communication continues uninterrupted in case of an outage. By following these best practices for SIP trunking deployment, businesses can maximize their performance and reap all their advantages. Conclusion SIP trunking is an innovative technology that's revolutionizing how businesses communicate today, with cost savings and improved communication capabilities helping businesses remain cost-efficient in today's business landscape. If you're seeking an efficient way to increase communication while simultaneously cutting costs, SIP trunking could be just what's needed. Just by understanding its workings, selecting vendors who understand it well, and following best practices for optimizing performance, you will reap its many rewards. So, start exploring SIP trunking today and see your business thrive! ### AllPixel – USB Interface For All Your LED Needs Control of up to 680 pixels on any of the popular LED strips from any device with a USB port! One controller to rule them all! Stretch Goals! $15,000: More Supported Chipsets - In addition to the currently supported chipsets, we will add 4 more! APA102 APA104 LPD1886 P9813 (Total Control Lighting) $30,000: Multi-Board Support in the BiblioPixel Library! Seamless support for multiple AllPixel boards connected to the same computer. Control multiple separate displays as if they were one! Introduction Working with addressable LED strips, we’ve found that the extra components required to communicate with and power them complicate designs and limit the options for how they can be used. Each chipset requires its own special protocol and supporting hardware components. This is where the AllPixel comes in. Think of it as a video card for your LED strips. The AllPixel is a small (2.7" x 0.9"), device that provides easy USB control of all the major programmable LED strips. It is compatible with Linux, Mac, and Windows platforms, and capable of driving up to 680 LEDs at high frame rates. The following chipsets are currently supported: LPD8806 WS2801 WS2812 (NeoPixel) WS2811 (400 kHz) TM1809/TM1804 TM1803 UCS1903 SM16716   For more detail: AllPixel – USB Interface For All Your LED Needs ### SOLAR INTEGRATED ULP FEATHER NEEDS NO BATTERIES Long battery-life and Low power consumption are usually top on the list of requirements for most hardware devices these days, as the weariness of having to constantly charge a device continues to have significant effect on customers’ choice. Asides from consumer applications, another reason fueling this demand is the growth in the deployment of IoT devices, most of which are designed for “deploy and forget” applications where changing batteries is impractical. Several approaches to this currently include wireless charging, longer-lasting but more expensive batteries, and energy harvesting. Energy harvesting is expected to play a big role in our future but most of the solutions at the moment still require battery backup and are not able to provide power in a reliable manner. Leading the way into that future, at least for makers, Jake Wachlin recently shared a project he has been working on; the light-powered, Ultra-Low Power, Feather MCU board. The board which runs the ATSAML21 MCU, a low power variant of the SAM D21 used in the Adafruit feather Mo board, comes with two KXOB25 monocrystalline solar cells that provide 4.46V/5.5mA and serve as the primary source of power to the board. The ATSAML21 is based on the Cortex mo+  running at 48MHz with 256kB Flash, and 32kB RAM. Read more: SOLAR INTEGRATED ULP FEATHER NEEDS NO BATTERIES ### Build Simon Game Using Arduino High Level Description: For part 3 of the lab, our group decided to build a “Simon” game. Our game setup uses 3 buttons and 4 LEDs. Each button corresponds to one LED and the 4th LED is used to indicate an error. The game starts with the Arduino flashing one of the 3 lights, chosen randomly. The user must then press the button corresponding to that light. If the user’s input is correct,  the Arduino extends the pattern by one and the user must then match that extended pattern. If the user’s input is incorrect, the error light goes off and the user loses the game. This process repeats until the pattern reaches length 7, in which case the user wins the game. Our game is mounted a paper plate for support and uses origami balloons to diffuse light from the leds. Here is a video of the game in action: High Level Design Process: We began with brainstorming. Our initial ideas included interactive and non-interactive designs. These ideas included pre-set light display patterns (Morse code or musical patterns), diffusers using various translucent paper and plastic covers, and a binary counter. We decided to first make the binary counter, as we thought it would be both technically and visually interesting. We also would have the opportunity to use our origami balloon/lantern diffusers which we thought were pretty cool. The binary counter consisted of two buttons (an increment and a decrement) as well four LEDs to display a 4 bit number. With those four LEDs, we could count from 0 to fifteen, and display a fun pattern on overflow or underflow. We began by sketching our design and drawing the circuitry. Here are our initial brainstorming sketches: We then assembled our circuit and wrote the code to power our binary counter (technical details given below). In the end we built this: After completing the binary counter though, we considered our design choices and thought about what we could do to make our circuit better. After making modifications and iterating through different design choices, we decided that what our circuit was lacking was an interesting method of interacting with the counter.  We liked how the binary counter was interactive; however, it was limited to single presses doing the same thing every time. With this in mind, we considered various ways of expanding on our counter, such as using the counter to select and play one of 16 different pre-set light patterns (which could be Morse code messages or other interesting displays) or to play a game. In the end we decided to create the Simon game described above. Initial design decisions for Simon included how to organize the user interface and how many lights and buttons to include. We decided to use a paper plate as the body of our game as it was easy to manipulate but also gave sufficient support. We initially planned to make the game with 4 lights and 4 buttons, but reduced those numbers to 3 as we continued in the design process and faced limitations due to the availability of resources and bulkiness of alligator clips. Once the basic layout of the game was implemented, we made gameplay decisions like how long to wait between flashes of light and how long the pattern should be for the user to win. We made these decisions by playing the game ourselves, and by having other people play our game. We also had to work out bugs such as a single button press being registered twice. After trying our game with different parameters, we arrived at our final design. Technical Documentation / Technical Design Choices: There were 2 main circuit components that we used to power our game: LEDs and buttons (these were used with resistors, as needed). In the first 2 parts of the lab, we became familiar with using LEDs. Helpful information about using LEDs with Arduinos is found at http://arduino.cc/en/Tutorial/blink. LEDs are implemented by creating a connection between an Arduino pin and ground. (Image from arduino.cc/en/tutorial/blink) We then looked up how to use buttons with Arduino at http://arduino.cc/en/tutorial/button. To use a button, we needed to provide a path from ground to 5v (with a resistor) as well as a path to an input pin to sense when the button is closed.   For more detail: Simon Game Using Arduino ### BEHOLD A GALLERY OF SONY’S PS VR2 PROTOTYPES Every finished product stands at the end of a long line of prototypes, and Sony have recently shared an interview and images of their PlayStation VR2 prototypes. Many of the prototypes focus on a specific functionality, and readers who are not familiar with building things might find it a bit wild to see just how big and ungainly un-optimized hardware can be. The images are definitely the best part of that link, but the interview has a few interesting bits. For example, one prototype was optimized for evaluating and testing camera placement with a high degree of accuracy, and it hardly looks like a VR headset at all. The controllers on the other hand seem to have gone though more iterations based on the ergonomics and physical layout of controls. The VR2 controllers integrate the adaptive triggers from the PlayStation 5, which are of a genuinely clever design capable of variable resistance as well as an active force feedback effect that’s not quite like anything that’s come before. There’s a lot of work that goes into developing something like a VR headset, as we see here and we’ve seen with Facebook’s (now Meta) VR research prototypes. But even when one can leverage pre-made modules as much as possible and doesn’t need to start entirely from scratch, making a VR headset remains a whole heap of work. Source: BEHOLD A GALLERY OF SONY’S PS VR2 PROTOTYPES ### OLD STYLE 1802 COMPUTER HAS MMU When you think of an MMU — a memory management unit — you probably think of a modern 32-bit computer. But [Jeff Truck] has a surprise. His new RCA 1802 computer has bank switching, allowing the plucky little processor to address 256K of RAM. This isn’t just the usual bank-switching design, either. The machine has several unique features. For example, an Arduino onboard can control the CPU so that you can remotely control the bus. It does not, apparently, stand in for any of the microprocessor support chips. It also doesn’t add additional memory or control its access. The 256K of memory is under the control of the MMU board. This board generates two extra address bits by snooping the executing instruction and figures out what register is involved in any memory access. Memory in the MMU stores a table that lets you set different memory pages for each register. This works even if the register is not explicit and also for the machine’s DMA and instruction fetch cycles. If you know about the RCA “standard call and return technique,” which also needed a little patching for the MMU. [Jeff] covers that at the end of the video below. This is a very simple version of a modern MMU and is an impressive trick for a 50-something-year-old CPU. We were surprised to hear — no offense to [Jeff] — that the design worked the first time. Impressive! There’s also some 3D printing and other tips to pick up along the way. But we were super impressed with the MMU. You might never have to do this yourself (although you could), but you can still marvel that it can be done at all. We have a soft spot for the 1802s, real or emulated. The original ELF was great, but 256K is a lot better than the original 256 bytes! Source: OLD STYLE 1802 COMPUTER HAS MMU ### Silicon Labs offers crystal-less USB-I2S bridge Silicon Labs' CP2114 device is the industry’s first crystal-less USB-to-I²S audio bridge, designed to support a wide range of codecs and DACs in USB-based audio applications. The CP2114 simplifies the process of transferring audio data from USB to I²S without any code development, speeding time to market for USB audio accessories such as USB speakers, USB headphones, and USB music boxes, as well as VoIP systems. Available in a small-footprint, cost-effective 5 mm x 5 mm package, the CP2114 is ideal for space-constrained portable audio applications. Features USB crystal-less operation: eliminates the need for external crystal and associated components, reducing BOM cost and design complexity Supports a wide range of codecs and audio DACs Small-footprint package Applications USB speakers/headphones/headsets Point-of-sale terminals Navigation systems Music boxes VoIP phones Silicon Laboratories has introduced a crystal-less USB-to-I2S audio bridge designed to support a range of codecs and digital-to-analogue converters (DACs) used in USB-based audio applications. USB-to-I²S audio data transfer also requires sophisticated clock synchronization, which poses complex development challenges. The CP2114 audio bridge integrates a USB 2.0 full-speed function controller, a USB transceiver, crystal-less oscillator, one-time programmable ROM, UART, IIC and I2S interface into a single chip. The device also requires no external memory when combined with a codec or DAC. The CP2114 audio bridge supports multiple mainstream DACs and codecs from Wolfson Microelectronics, Cirrus Logic and Texas Instruments, giving customers the flexibility to implement their own preferred audio chipset solution. Silicon Labs offers evaluation kits pre-populated with these popular DAC and codec platforms to further speed design time. For more read: Silicon Labs offers crystal-less USB-I2S bridge ### Our Personal Favourite Arduino Projects for you to Try in 2023 In the realm of do-it-yourself (DIY) electronics and robotics projects, Arduino stands as a prominent open-source microcontroller platform. It boasts a user-friendly nature and enjoys a vast community of users who actively contribute their projects and provide assistance to fellow enthusiasts. Throughout the year 2022, we embarked on numerous remarkable ventures involving Arduino, ESPs (such as the ESP8266 or ESP32), ARM microcontrollers, and Raspberry Pi. Here is a list of the top 10 Arduino projects that you can build: 1. Animatronic Eye with Arduino A mechanical apparatus known as an animatronic eye has been developed to imitate the visual attributes and movements of an actual human eye. Our circuit, powered by Arduino, has been constructed to cater to a wide range of applications, including robotics, entertainment endeavors, and educational initiatives. These animatronic eyes can be programmed to execute specific instructions or manipulated manually through the utilization of sensors and controls. Here is a list of the necessary components required for constructing an animatronic eye. Components Required to Build the 3D Printed Animatronic Eye Six SG90 Servo Motor Screws M2, M3, and M4 Arduino UNO Jumper Cables Breadboard Pinheadder PLA Filament and 3D Printer For further information build instruction and code do check out the project  How to Build a 3D Printed Animatronic Eye with Arduino. 2. Arduino Based Resistor Reel Cutting Machine The Arduino-based resistor reel cutting machine is a device designed for the purpose of cutting resistor strips from a reel of resistor material. These strips are utilized in various electronic circuits and devices. Manual cutting of these strips from the reel can be time-consuming and prone to errors. However, the Arduino-based machine automates this process, ensuring precise and efficient cutting of the resistor strips. Materials Required to Build a Resistor Reel Cutting Machine Mechanical Components Electronic Components Aluminum Extrusion Profile 20x40 6T Slot Smooth Shaft Rod 8mm Diameter Threaded Rod 8mm Diameter Nema17 motor Coupling for 8mm soft shaft Flanged Ball Bearing 8mm bore – 2pcs Pillow Block Mount 8mm bore – 2pcs Cast Corner Bracket for 2020 Aluminum Extrusion – 4pcs Sliding T nut for 2020 Aluminum Extrusion – 20 pcs M4 6mm Socket Screws for T nut – 20 pcs Timing Belt for pulley. Nema17 Stepper Motor MG90S Servo Motor with Metal Gear Arduino Nano 16x2 LCD Screen A4988 Stepper Motor Driver module MOC7811 opto-coupler sensor 12V 2A DC adapter Push buttons 50V 100uf electrolytic capacitor Connecting Wires and perf board For further information build instruction and code do check out the project Arduino Based Resistor Reel Cutting Machine. 3. DIY Arduino Bluetooth Car Controlled by Mobile Application The Arduino Bluetooth car, controlled through a mobile application, presents an enjoyable and engaging project where you can use your smartphone to maneuver a small car. This undertaking necessitates fundamental understanding of Arduino programming and the capacity to establish a connection between an Arduino board and a Bluetooth module. Components & Tools Required to Build Wireless Arduino Bluetooth Robot To construct a DIY Arduino Bluetooth car controlled by a mobile application, the following components are necessary: - Arduino UNO: 1 unit - HC05 Module: 1 unit - L298N Motor driver: 1 unit - NeoPixel LED: as required - Lithium-ion 18650 battery with protection circuit: 1 unit - BO Motors with wheels: 4 units - Perfboard (big): 1 unit - Perfboard (small): 1 unit - Toggle switch: 1 unit - DC female jack: 1 unit - Relimate connector pair: 1 unit - Male Bergstrip: 1 unit - Female Bergstrip: 2 units - Single Strand Wires of various colors: as required - Sunboard of medium thickness: as required - Paper Cutter, Hot Glue, Feviquick, Ruler, Marker, Wirecutter, Screwdriver For more detailed instructions and the code, I recommend consulting the project titled "DIY Arduino Bluetooth Car Controlled by Mobile Application. 4. POV Display with WS2812B Neopixel LEDs A Point of View (POV) display is a display mechanism that presents a message or image that seemingly hovers in midair. By utilizing an Arduino and basic electronic components, it is possible to construct such a display. In this tutorial, we have successfully assembled a POV Display using WS2812B LEDs. Components Required to Build Arduino Based POV Display To create a POV display using WS2812B Neopixel LEDs and an ESP8266-01, you will need the following components: - ESP8266-01: 1 unit - WS2812B RGB LEDs: as required - 3.7V 400mA Lithium Battery: 1 unit - 12V DC Motor: 1 unit - Perfboard: 1 unit - Wires: as required - Connectors: as required - Two-Component Adhesive: as required - A 12V battery (to power the motor) For detailed instructions on how to build the POV display and access the code, I recommend referring to the project titled "How not to Build a POV Display Using WS2812B Neopixel LEDs and ESP8266. 5. IoT Based Compact Soil Moisture Monitoring Device A compact soil moisture monitoring device based on the Internet of Things (IoT) is specifically designed to gauge the moisture levels in soil by employing sensors. The collected data is then transmitted through an IoT network to a remote location. These devices find extensive application in agriculture, aiding farmers in optimizing irrigation schedules, as well as in landscaping to ensure ideal moisture levels for plants. Some compact soil moisture monitoring devices may include supplementary features like temperature and pH sensors, providing further insights into soil conditions. Components Required to Build Arduino Based POV Display To create a low-power IoT-based compact soil moisture monitoring device, you will require the following components: - ESP8266-01: 1 unit - WS2812B RGB LEDs: as required - 3.7V 400mA Lithium Battery: 1 unit - 12V DC Motor: 1 unit - Perfboard: 1 unit - Wires: as required - Connectors: as required - Two-Component Adhesive: as required - A 12V battery (to power the motor) For comprehensive instructions on how to construct the device and access the necessary code, I recommend referring to the project titled Low Power IoT Based Compact Soil Moisture Monitoring Device. 6. Motorized Camera Slider using Arduino A motorized camera slider is a mechanism designed to enable horizontal movement of a camera along a track, typically employed to capture seamless, panning shots. When an Arduino microcontroller is employed to control such a slider, it becomes a motorized camera slider using Arduino. The Arduino microcontroller acts as a programmable small computer, allowing for precise control over various electronic components and devices in the slider system. To construct an Arduino-based motorized camera slider, you will need the following components: - Arduino Nano: 1 unit - Motor Driver (A4988/DRV8825/TMC2209): 2 units - OLED display 128x64: 1 unit - Rotary encoder module HW-040: 1 unit - NEMA N17 Stepper motor: 2 units - Limit Switch 3 Pin SPDT: 2 units - On/Off Switch: 1 unit - DC socket 5521: 1 unit - Aluminum Profile 2040 V slot: 50cm - M5 Aluminium spacer 5mm bore 6mm length: 3 units For a complete list of components, you can refer to the Circuit Digest website. For detailed instructions on how to build the motorized camera slider and access the relevant code, I recommend checking out the project titled "DIY Motorized Camera Slider using Arduino and Stepper Motors for Video Shooting. 7. DIY Handheld Retro Gaming Console using ESP32 A portable retro gaming console powered by an ESP32 is a handheld device that offers the ability to play nostalgic video games while on the move. The ESP32, being a microcontroller with built-in WiFi and Bluetooth features, is an ideal platform for constructing wireless and portable gaming devices. To build a handheld retro gaming console using an ESP32, you will need the following components: - ESP32 Wrover Kit with 16MB flash: 1 unit - Waveshare 2" 320x240 IPS display module with ST7789V driver: 1 unit - TP4056 module with protection: 1 unit - AO3401 SMD P-Channel MOSFET: 1 unit - SD Card Slot: 1 unit - SMD Slide switch 1P2T: 1 unit - 3.5mm Audio Jack SMD PJ-327-A: 1 unit - 3.7V Lipo battery: 1 unit - 2Pin JST XH battery connector: 1 unit - 6x6x6mm tactile switches: 10 units - 3mm LED: 1 unit - 3.3V Active buzzer: 1 unit - 100k Resistor: 2 units - 10k Resistor: 7 units - 1k Resistor: 1 unit For detailed instructions on how to build the handheld retro gaming console and access the necessary code, I recommend referring to the project titled "DIY Handheld Retro Gaming Console using ESP32. 8. Touch Capacitive Based PCB Light Panel In this tutorial, we have constructed a Touch Capacitive PCB utilizing an ATMega328P IC, specifically designed to govern the NeoPixel LED strip. Our PCB incorporates several features, including music-reactive mode, random animation mode, and RGB controlling mode. Components Required to build the Front Panel PCB To assemble a Touch Capacitive PCB for controlling a NeoPixel LED strip, the following components are required: - ATMega328P IC (DIP Package) - SMD Resistors (1 Mega Ohm, 0805) x 9 - SMD Resistor (1K, 0805) x 1 - Piezoelectric Buzzer - SMD 78M05 IC - SMD Electrolytic Capacitor (10uF, 16V, 4x45mm) x 2 - SMD Capacitor (22pF, 0805) x 11 - Crystal Oscillator (16 MHz) For comprehensive instructions on the build process and access to the relevant code, I recommend referring to the project titled "Design and Build a Touch Capacitive Based PCB Light Panel to Control NeoPixel LED Strip. 9. Power Consumption Monitoring Device using ESP32 A power consumption monitoring device built with an ESP32 is designed to measure and monitor the power usage of electrical appliances or systems. This device utilizes an ESP32 microcontroller, which is equipped with WiFi and Bluetooth capabilities, to transmit the collected power consumption data to a remote location. To construct a smart power consumption meter, the following components are needed: - ESP32 WROOM 32D Module - HI LINK 5V 3W SMPS - 0.96" 128X64 I2C LED - ZMPT101B Voltage Sensor - ACS712 Current Sensor - 220V AC 3 Pin Socket (MALE) - 220V AC 3 Pin Socket (FEMALE) - 3D Printed Casing For detailed instructions on the assembly process and access to the necessary code, I recommend checking out the project titled "Power Consumption Monitoring Device. 10. DIY Ultrasonic Mist Maker using ESP8266 and Arduino An ESP8266-based ultrasonic mist maker is a device that utilizes high-frequency sound waves to generate a fine mist. It is controlled by an ESP8266 microcontroller, which possesses WiFi and Bluetooth functionalities. This type of device is commonly employed to introduce moisture into the air, such as in a greenhouse or to enhance room humidity levels. To construct an Arduino-based mist maker, the following components are needed: - ESP8266 - ESP01 Module - USB to TTL Converter Module - Ultrasonic Humidifier Module - WSB2812 IC (5 units) - TP4056 Module - 3.7V 700mAh Li-Po Battery - LDR (Light Dependent Resistor) - IRF540N MOSFET For detailed instructions on how to build the mist maker and access the necessary code, I recommend referring to the project titled "DIY Ultrasonic Mist Maker. ### APOLLO S10 SOM Terasic’s Apollo S10 SOM for scalable FPGA prototyping and HPC solutions which provide up to 90x performance increase over CPUs for critical workloads. Terasic’s Apollo S10 system on module (SOM) is designed for modular and scalable high-performance FPGA prototyping and high-performance computing (HPC) solutions. The Apollo S10 SOM packs unbeatable performance and energy efficiency into a tiny form factor. It provides up to 90x performance increase over CPUs for critical workloads such as simulation acceleration, molecular dynamics, and machine learning. Apollo S10 SOM takes advantage of the latest Intel® Stratix® 10 SoC with 2800 K logic elements to obtain speed and power breakthrough (with up to 70% lower power). Combining several high-end hardware interfaces, such as high-capacity and high-bandwidth DDR4 SDRAM (up to 32 GB), on-board USB-Blaster™ II, and FMC/FMC+ connectors for I/O expansion, the board delivers more than 2x the performance of previous-generation development kits. Features Apollo S10 module boardStratix 10 SX FPGA with 2800 K logic elementsCore speed grade: -2Transceiver speed grade: -1On-board USB-Blaster II for programming Stratix 10 and EPCQ/microSD™ card for booting deviceTwo independent banks of DDR4 on-board memory with error correction code (ECC), up to 16 GB at 1066 MHz for each bankFMC+ and FMC connectors for interface expansionSupport 336 FPGA I/O34 high speed transceiversSupport USB 2.0 OTG, USB to UART, and Gigabit PHY interface for HPS communication Read more: APOLLO S10 SOM ### DARPA circuit smashes electronic speed record Getting into the Guinness Book of World Records isn't just about who can eat the most hotdogs or fly a paper airplane the highest. Sometimes it involves technological breakthroughs with huge potential. Guinness has handed DARPA’s Terahertz Electronics program the award for the fastest solid-state amplifier integrated circuit. Developed by Northrop Grumman, the Terahertz Monolithic Integrated Circuit (TMIC) is a ten-stage common-source amplifier that cranks speeds of one terahertz (1012 Hz), or one trillion cycles per second. DARPA argues that the current state of electronics must move beyond speeds of 300 gigahertz and wavelengths of less than a millimeter if it is to meet the needs of the next generation of imaging, radar, spectroscopy, and communications technology. It’s all a matter of gain – a measurement of the ability of an electrical circuit to increase the power of a signal between the input and the output, measured in logarithmic decibel (dB) units. The TMIC is based on work done by DARPA's HiFIVE, SWIFT and TFAST programs and is capable of speeds 150 billion cycles faster than the previous record set in 2012 of 850 gigahertz. It has power gains that are several orders of magnitude greater than previous circuits with a gain of nine decibels at 1.0 terahertz (THz) and 10 decibels at 1.03 THz. In comparison, a smartphone can only manage 2 GHz. "Gains of six decibels or more start to move this research from the laboratory bench to practical applications — nine decibels of gain is unheard of at terahertz frequencies" says Dev Palmer, DARPA program manager. "This opens up new possibilities for building terahertz radio circuits."   For more detail: DARPA circuit smashes electronic speed record ### ANDROID BASED ROBOTICS While the field of robotics is continuously expanding at a remarkable rate and better performing robots are created every year, robotics still remains out of reach for many students and researchers. The main reasons for this difficulty are the high complexity of the hardware and software of robots, and their typically high cost. We believe that the computing power, sensing capabilities and intuitive programming interfaces of modern smartphones afford an inexpensive yet highly capable robotic platform. Smartphone based robots are becoming increasingly popular, with many exciting applications emerging in both academia and industry. As a case in point, we provide a detailed description of a simple robotic platform based on this approach.   I. INTRODUCTION   A. Existing Robotic Platforms for Education and Research A large number of robotic platforms are available for research and education (see Table 1 for a non-exhaustive list). Robotic platforms such as the Lego Mindstorms EV3 , Mobsya Thymio II , IRobot Create , VEX, TETRIX, Surveyor (SRV-1) and Bioloid (see rows 1-6 of Table 1) are simple and inexpensive enough to be used in education and robotic research. These platforms come in kits or preassembled and can be used by educators, and students to program behaviors. However, these platforms have difficulties working outdoors on uneven terrain, and usually do not have powerful onboard computers and a large suite of sensors. Robots such as the Khepera, Koala and Pioneer (see rows 7-10 of Table 1) are very popular in the research community. While they are more capable than the above platforms, the base models are also more expensive and additional equipment, such as onboard computers, cameras and sensors, drastically increase the total cost. Humanoid robots such as the NAO and the DARwIn-OP are also becoming more affordable and they are now used for research and education. Kits provided by competitions, such as the FIRST Robotics Competition and other robotic platforms provide enough modularity and flexibility to be used for education and research although they do not use onboard computers, sensors and cameras of the same caliber as recent smartphones, although more recent robots like the Lego Mindstorms EV3 and the Thymio II allow a certain degree of interaction with smartphones. Robotic platform Price IRobot Create $130 Thymio II $190 VEX Robotics (VEX IQ; VEX) $250; $400 Lego Mindstorms EV3 $350 Robotics (Bioloid; DARwIn-OP) $350; $12,000 TETRIX $380 Surveyor (SRV-1) $495 K-Team Corporation (K-Junior; Kilobot; Khepera; Koala) $800; $1,200 (for 10); $3,200; $8,400 Adept MobileRobots (AmigoBot; Pioneer DX; Pioneer AT) $1,695; $4,000; $6,495 Scout (Dr Robot) $8,750 Aldebaran Robotics (NAO) $15,600 Table 1. Popular robotic platforms used for education and research. Prices are shown for the base models/kits. A new and exciting alternative to these platforms is to build a robotic platform with a smartphone acting as an onboard computer, as well as a sensing and interacting device. The computational power of handheld devices, such as mobile phones and tablets, increases every year at a remarkable rate. Even though smartphones have compact form factors, they are currently equipped with powerful quad-core processors and graphical processing units, video cameras, location providers (GPS, Wi-Fi, Cell-ID), long lasting batteries, and a multitude of sensors such as acceleration and orientation sensors. They also have an impressive suite of communication options (Bluetooth, Wi-Fi, Wi-Fi Direct, 3G, 4G), are powered by small long-lasting batteries, run modern operating systems (OS), and are reasonably priced. For software development, smartphone OS’s provide a Software Development Kit (SDK) that enables programmers to readily create applications. Programmers often share their applications with the community enabling rapid prototyping and development. For these reasons, we believe that smarthphones are promising candidates for onboard computing and sensing in autonomous robots. B. Smartphone Based Robots and Vehicles A growing interest in having smartphones interacting with peripheral devices such as motors, servos and sensors led to the recent creation of electronic interface boards that can be purchased online or built at a small cost. These boards serve as communication bridges between Android™ smartphones and external devices. The two main boards available to the public are the IOIO ($30-$39.95) and the Arduino ADK Rev3 (€49.00 ~$65.96), although other boards exist (e.g. Amarino, Microbridge, PropBridge). An increasing number of projects realized by hobbyists, students or teachers, which utilize these electronic boards, are available online (see Table 2). A significant number of these projects involve remote-controlled (R/C) cars, or other four wheeled based robots, controlled by Android phones via IOIO or Arduino boards. Most of them involve remote controlled functionalities, occasionally with video, sensory and location feedback to another phone or a computer.   Robot/Project Name Cost Cellbots Robots Everywhere Collection of IOIO based projects IOIO based sailing boat IOIO based search and rescue robot Android based Soccer Robot Collection of Arduino based projects The Android Car ( see below) $30 to $300 (estimations) unknown $100 to $400 (estimations) $1200 (phone included) unknown unknown $200 to $700 (estimations) $200 NASA - MIT SPHERES NASA PhoneSats MIT DragonBot GEORGIA TECH project Brain-controlled robot Visual obstacle avoidance Android Based Robotic Platform (see below) unknown $3500-$7000 (phone included) $1000 (phone included) unknown unknown unknown $350 Romo Botiful Wheelphone Shimi Double Albert iRiver Kibot $149 S299 S215 (+45$ for docking station) S200 S2499 unknown $40 (+ $30/month 2 years KT) Table 2. Smartphone based robotic projects: hobbyists/students and/or open source (top), research (middle), commercial (bottom). Both The Android Car and the Android Based Robotic Platform were completed at the Cognitive Anteater Robotics Laboratory, University of California Irvine. For example, a group of hobbyists (Cellbots team) developed open source platforms for Android phones that can be used to control different robotic platforms such as the IRobot Create, Lego Mindstorms, VEX Pro, and Arduino based Truckbot or Tankbot. A group of high school students also built sailboats controlled by Android phones via IOIO boards. These examples show that existing robots can be used as bases, and Android phones as onboard computers. A company called Robots Everywhere develops Open Source control software for Android based robots. A team participated to the RoboCup Search and Rescue Junior competition with an impressive little robot built using an Android phone and a IOIO (rescue robot). Interestingly, some of these projects emerge from developing countries, where the use of Smartphone based robots is attractive due to their low cost and high computational power. For example, a group in Thailand created Android based robots using IOIOs that are fast and can play soccer with ping-pong balls (Android based Soccer Robot). Our group has built a remote controlled vehicle, named The Android Car, using a R/C car, an Android phone, a phone holder and IOIO. The vehicle can be controlled over Wi-Fi and stream video and sensory information back to a computer (see Table 2 and video below). As will be described later, we are using an upgraded version of this platform for teaching and for research in computational neuroscience. For source code, click here. Smartphone robots and applications are becoming increasingly prevalent in research projects (see Table 2). Scientists at NASA and MIT built free-flying satellites called SPHERES that are self-contained with power, propulsion, computing and navigation equipment. These devices were tested in the International Space Station and were equipped with Android phones. More recently, NASA launched three nanosatellites in orbit around Earth called NASA PhoneSats. These satellites used smartphones as control systems and a UHF radio beacon to transmit data and images to the ground. The smartphones monitored the cameras, accelerometers, magnetometers, and gyroscopes, which were onboard the satellites. In the field of human-robot interaction, researchers at MIT built a robot companion equipped with a smartphone named DragonBot. This cloud-connected robot utilizes the smartphone for motor control, 3D animation, image streaming, data capture, and is used to study human/robot interaction and potentially help kids learn. It has five physical degrees of freedom and an animated face that can display a wide range of emotional expressions. Other smartphone based robots have been developed to help remote users to communicate with each other through the robotic interface, which utilizes facial expressions and body gestures [1]. Researchers at Georgia Tech are working on a musical robotic swarm composed of cell-phone based robots that can communicate with humans and with each other and coordinate their movement in order to explore real time algorithmic musical composition and performance [2] (musical swarm). Android phones have also been used successfully with the LEGO Mindstorms NXT for robotics/software engineering classes [3]. An Android based robot was also used for brain-computer interface (BCI) research where the brain activity of a subject controlled a robot over the internet. The robot was composed of a Lego Mindstorms NXT 2.0 and an Android phone which sent video feedback to the subjects [4]. Finally, Thomas used an HTC Android phone mounted on a iRobot Create to compute optic flow with OpenCV. The robot was able to perform visual obstacle avoidance for safe navigation. Smartphone based robots are finding their way into commercial applications (see Table 2). For example, Romo is a small robot using an iPhone as an onboard computer. It can be trained to perform face tracking, controlled using another iOS device over Wi-Fi, or over Internet for telepresence. A simple SDK is also provided to users in order to create their own apps. Similarly, Botiful is a small telepresence robot built for Android phones. Wheelphone is also a small robot that can be used for telepresence. It can also avoid obstacles and cliffs, and find a docking station on its own to recharge its battery. The Wheel phone is compatible with both Android phones and iPhones, and the software is open source and uses ROS and OpenCV libraries. Shimi is a robotic musical companion that reacts to songs played by a smartphone when connected to it. Kibot and Albert are robotic companions that can play with children and help them learn. Although not based on an Android phone, Double is a tall telepresence robot using an iPad as a computing and interacting device. These different companion or telepresence robots are an interesting market. However, they are not modular and not really suitable for many education or research purposes.   II. ANDROID BASED ROBOTIC PLATFORM Similar to the examples discussed above and in Table 2, our group has developed a smartphone robot platform for hobbyists, students and researchers. We believe our platform provides flexibility over other available options making it attractive to a wide range of enthusiasts. In this section and the next, we describe the components of the platform and instructions on how to construct a smartphone robot. The robot is constructed from an Android phone, IOIO board, which is connected via Bluetooth or USB, a R/C vehicle and additional sensors and actuators. The robot takes advantage of the sensors on the phone (e.g., camera, accelerometers, GPS), as well as additional sensors external to the phone (e.g. IR sensors, Hall Effect Sensors) via the IOIO. The Android phone interacts with actuators, such as speed controllers or pan/tilt units, via the IOIO board. Our Android Robotic Platform is an inexpensive do-it-yourself (DIY) smartphone based robotic platform using off-the-shelf components and open source software libraries that could easily be built by students, hobbyists or researchers, but still perform complex computations and tasks. Our goal was to minimize both expenses and time spent on building robots, allowing users to focus on more fundamental research and robotic problems. The platform also had to be modular and flexible enough to support different sensors and actuators that could be incorporated and relocated very easily. Furthermore, the platform had to be able to traverse a wide range of indoor and outdoor terrains. We believe that three main off-the-shelf components can be used in order to fulfill these requirements: 1) A smartphone running the Android operating system used as onboard computers and sensing devices; 2) an electronic board (e.g. IOIO, Arduino ADK) used to interact with peripheral devices such as servos, motors and sensors not included in the phone; 3) a R/C vehicle, or inexpensive robotic base. Due to the variability in complexity of these components, the total cost to build such a robotic platform can change, especially depending on the phone and vehicle used. Figure 6. Diagram showing the main components of the Android based robotic platform and their interactions. The robotic platform gets sensory input from the phone’s internal sensors, as well as external sensors via the IOIO board. The Android phone sends commands to the robot’s actuators via the IOIO board. The Android phone interacts with the IOIO board through a USB cable or a Bluetooth connection. In the following sections, we will describe a robotic platform that can be built for approximately $350 (excluding the phone). The main difference, compared with other smartphone based robots, is that our platform is more modular, and can be used outdoors on uneven terrain. A. COMPONENTS 1) Android phone Hardware An important advantage of using a smartphone for an onboard computer is that the size of a robot can be kept relatively small, yet still have great features. Its cost can also be minimal since the phone itself can handle computation, sensing and battery power. Many different phones are now available on the market. Before purchasing an Android phone to be used as an onboard computer for a robot, one has to consider the uses and needs of that particular robot. A hobbyist or student may consider using an older less expensive phone. For example, the HTC Google Nexus One can be found unlocked for less than $200, and is a suitable onboard computer. This phone has a 1 GHz Qualcomm Scorpion CPU, 512MB of RAM memory, a microSD card reader (supports up to 32 GB), and a 1400 mAh Li-ion battery. It can provide a number of sensory inputs such as a capacitive touch screen, a 3-axis accelerometer, a digital compass, a satellite navigation system (aGPS), a proximity sensor, an ambient light sensor, push buttons, a trackball and a 5.0 megapixel rear camera with a LED flash. For connectivity, it includes a 3.5mm TRRS audio connector, and hardware supporting Bluetooth 2.1, micro USB 2.0, Wi-Fi IEEE 802.11b/g/n, 2G/3G networks. A researcher may desire more features and computational power. In this case, a recent phone such as the Samsung Galaxy S3 might be considered. This phone can be found unlocked for around $400, has a 1.4 GHz quad-core Cortex-A9 CPU, 1-2GB of RAM, a microSD card reader (supports up to 64 GB), and a 2,100 mAh Li-ion battery. For sensing, it has a multi-touch capacitive touchscreen, 3 push buttons, satellite navigation systems (aGPS, GLONASS), a barometer, a gyroscope, an accelerometer, a digital compass, an 8.0 megapixel rear camera with a LED flash, and a 1.9 megapixel front camera. For connectivity, it includes a 3.5mm TRRS audio connector, and hardware supporting Bluetooth 4.0, Wi-Fi (802.11 a/b/g/n), Wi-Fi Direct, 2G/3G networks, Micro-USB, NFC, and DLNA. Software The Android operating system is open source and Linux-based. Programmers can develop software for Android in Java using the SDK or in native language (C/C++) using the native development kit (NDK) . It is also possible for developers to modify the Linux kernel if needed. Implementation of an Android application can be achieved using the Eclipse IDE with the Android Development Tools (ADT) plug-in. Using this SDK, the developer has easy access to different functionalities of an Android phone such as graphical interfaces, multi-threading, networking, data storage, multimedia, sensors, location provider, speech-to-text, text-to-speech, and more. Since Android phones can connect to the Internet, cloud based applications can also be used when high performance computing is needed. In the field of robotics, this feature can allow the development of cloud based robotics applications. When developing an application that is CPU-intensive but doesn’t allocate much memory, an alternative programming option is to use the Android NDK. With the NDK, a programmer can create an Android Java application that interacts with native code (C/C++) using the Java Native Interface (JNI). Programming in C/C++ on an Android platform can result in an increase of performance, but also increases complexity. The NDK also enables usage of existing C/C++ libraries.   For more detail: ANDROID BASED ROBOTICS     ### A cicada warning system with Arduino This spring, patches of the East Coast will turn buzzy and crunchy because of … bugs.  Periodical cicadas (or Magicicadas) usually live underground but after 13 or 17 years, they emerge synchronously and in tremendous numbers to look for a mate.  Radiolab launched a campaign to predict their arrival with a bit of DIY science and using an Arduino UNO. You can follow the instructions of the  simple tutorial on how to monitor soil temperature until it reaches 64° F (17,7 C°) — when the cicadas should start to emerge.   For more detail: A cicada warning system with Arduino ### TinyLoadr AVR Programmer Using Arduino finally finished the next version of my TinyLoadr AVR programming Shield – and it’s not a shield. It’s a standalone USB programmer, so you no longer have to have an extra Arduino laying around. The best part? It’s the same price as the shield was! Read more to find out more about it, or visit my Tindie store to grab one for yourself! Features at a glance Open source. Supports a wide range of AVRs (see list below) USB connector 16MHz clock source for all supported AVRs One 28-pin ZIF socket A Blink LED to test your microcontrollers 10 and 6-pin ICSP headers for programming target boards Can power target boards with 5V M3 (3.2mm) size mounting holes Easy to use for both beginners and advanced users Easy to use with both Arduino IDE and avrdude What microcontrollers are supported? The following DIP microcontrollers are supported in the ZIF socket: ATtiny11 ATtiny12 ATtiny13 ATtiny15 ATtiny24 ATtiny25 ATtiny44 ATtiny45 ATtiny84 ATtiny85 ATtiny2313 ATtiny4313 ATmega8 ATmega48 ATmega88 ATmega168 ATmega328P On target boards, any microcontroller that avrdude supports is supported, though Arduino cores may not exist for all of them. Any pin-compatible AVRs will also work (that is, one with the same pinout). The programmer may not work with microcontrollers with more than 64K of flash (e.g, ATmega1281/1280/2561/2560). It’s pretty easy to use The TinyLoadr AVR Programmer was designed to be very simple to use. When programming a microcontroller with the ZIF socket, you simply set the “uC Select” jumper to the appropriate microcontroller, and insert the microcontroller as shown in the photos. For programming with the ICSP headers, just attach your ICSP ribbon cable to the programmer and your target board and you’re ready to roll. What changed, and why? 2 years ago I designed my first PCB – an Arduino shield that made it easier for me to program ATMega and ATtiny microcontrollers with my Arduino. I called it the ArduinoISP Shield (later renamed to the TinyLoadr Shield to avoid any issue using the Arduino name). After building my own, I still had 9 PCBs left. I decided to order parts to build them and sell them on Tindie. I did, and people loved them. Over the next 2 years, I designed through 4 variations of the shield, adding new features and making it look nicer. Well, I’ve done it again, and I really hope people will like it.   For more detail: TinyLoadr AVR Programmer Using Arduino ### Espruino Pico: JavaScript on a USB Stick Control Electronics quickly and easily with a USB key that runs JavaScript Stretch Goals Features added for the Stretch Goals won't just be added to the Espruino Pico, but to the original Espruino Board as well! What is Espruino Pico? It’s a tiny microcontroller board that runs JavaScript, making it easier than ever to control electronics in the real world. Espruino Pico has everything you need pre-installed. It can be used from virtually any device with a USB port so you can get started in seconds. Why is it special? This is the first time you’ve been able to get a scripting language in such a small package, and it opens a whole world of possibilities. Rather than just writing code, deploying it to a board and hoping it works, you can now interact with the hardware directly - querying and changing voltage levels and interacting with external components until you get everything just as you want it. This is all made possible by the Espruino firmware, which is so compact that it can fit inside a single chip - reducing power consumption, cost, and size. An Espruino Pico board can run for over 10 years on a single AA-sized 3v lithium cell! What’s it like to use? Check out the video below - you can be writing your first code in just a minute or two! But I don’t know electronics! No problem! Digital Electronics isn’t like Analog Electronics. There are no high voltages, no complex calculations, and no scary arrangements of components. Most modern digital components need just a few wires to work, which can be connected straight to the Espruino Pico. We’ve documented all the common components - with instructions on how to wire them up and the software you need to use them - it’s almost as easy as Lego! What can I use it for? Anything and everything! Have a look at the video below to see just how easy it is to make things with Espruino Pico:   For more detail: Espruino Pico: JavaScript on a USB Stick ### Wolfson designs first matched MEMS microphones Wolfson Microelectronics has today unveiled the WM7121 and WM7132, Wolfson’s first high performance top and bottom port silicon analogue micro-electro-mechanical systems microphones with matching frequency responses, designed to deliver outstanding audio quality to a wide range of consumer electronics applications. High Definition video is now expected as standard in most portable consumer electronic devices, and with 70% of under-18 year olds capturing video on their mobile phones every week (according to data sourced from a GSM Arena online survey), the need for High Definition Audio to match the HD Video in their devices has never been greater. With a high signal-to-noise ratio of 65dB, ultra-low distortion and matching responses across the frequency band from 10Hz to 20kHz, the WM7121 and the WM7132 deliver superior HD Audio quality and highly authentic audio recordings for a wide variety of portable applications including mobile phones, Bluetooth headsets, navigation devices, gaming consoles and both digital still and digital video cameras. As well their matching frequency responses, the WM7121 and WM7132 microphones also feature matching phase responses and matching sensitivity, making them ideal for stereo recording and much easier for designers to integrate into their systems. Both devices are also available with market-leading sensitivity tolerance of ±1dB. Eadaoin Doherty, Wolfson’s Product Line Manager for MEMS Microphones, said: “The WM7121 and WM7132 are among the first microphones in the industry to offer matching frequency responses. This feature, as well as their matching phase responses and sensitivity, ensures that these microphones are easy to integrate and result in truly authentic audio recordings and crystal-clear audio playback.” The WM7121 and WM7132 both incorporate Wolfson’s proprietary CMOS / MEMS membrane technology, offering high reliability and high performance in a miniature, low profile package. Both parts are designed to withstand the high temperatures associated with automated flow solder assembly processes, which can often damage conventional microphones, making them ideal for high volume manufacturing. The WM7121 top port package and WM7132 bottom port package are both available for sampling now. Wolfson Microelectronics has introduced its first top and bottom port silicon analogue micro-electro-mechanical systems (MEMS) microphone pair with matching frequency responses. The Scottish chip supplier is responding to what it sees as a growing demand in the consumer market for high definition audio to match the HD video in mobile devices. The MEMS microphones have a signal-to-noise ratio (SNR) of 65dB with distortion and matching responses across the frequency band from 10Hz to 20kHz. As well their matching frequency responses, the WM7121 and WM7132 microphones also feature matching phase responses and matching sensitivity, making them ideal for stereo recording and much easier for designers to integrate into their systems.  Both devices are also available with market-leading sensitivity tolerance of ±1dB. “Matching frequency responses, as well as their matching phase responses and sensitivity, ensures that these microphones are easy to integrate and result in truly authentic audio recordings and crystal-clear audio playback,” said Eadaoin Doherty, Wolfson’s product line manager for MEMS microphones.   For more read: Wolfson designs first matched MEMS microphones       ### Bird Feeder Monitor using Arduino This is a project to monitor the number of birds that visit my bird feeder, as well as record the amount of time spent feeding. I used an Arduino Yún and a capacitive touch sensor, Adafruit CAP1188, to detect and record the birds feeding. On a routine basis, the accumulated data is sent to a Google Docs spreadsheet to record the number and time spent by the birds visiting the feeder. Data is only transmitted during a set period of time prior to sunrise and after sunset. Step 1: Step 1: Parts These are a list of the parts that I used to assemble my project. You could use a variety of project boxes to create your project, but these are the items I had on hand at the time. 1 6x3x2" Project Enclosure 1 3x2x1" Project Enclosure 1 roll 1/4" Copper Foil Tape 1 CAP1188 8-Key Capacitive Touch Sensor 1 Arduino Yun 1 micro-SD card 2 DB-9 male connectors 2 DB-9 female connectors 1 Bird Feeder (CedarWorks Plastic Hopper Bird Feeder) 1 Tail Light connector from automotive supply store Step 2: Step 2: Wiring The Arduino Yun and the CAP1188 are wired to provide a hard reset of sensor at startup. There are other capacitive touch sensors available with either one, five or eight sensors. I chose eight because my bird feeder has six sides. Wiring: CAP1188 SDA == Yún Digital 2 CAP1188 SCK == Yún Digital 3 CAP1188 RST == Yún Digital 9 CAP1188 VIN == Yún 3.3V or 5V CAP1188 GND == Yún GND CAP1188 C1-C8 == Connect to wires on each perch Power for the Arduino was provided externally, by running a wire underground from my garage, and up through the pipe used as the bird feeder stand. The wire was connected to a 5-VDC power supply in the garage. This project should work with batteries, but I didn't want the hassle of changing batteries on a routine basis. I constructed a 16" long cable with DB-9 connectors on both ends to connect the Project Box with the Arduino Yun and the box containing the CAP1188. The capacitive sensor needs to be located as close to the perches as possible. Step 3: Step 3: Installing Python Packages and Scripts The CAP1188 requires that you download and install the libraries for this sensor. The library can be found at the following site: https://github.com/adafruit/Adafruit_CAP1188_Library/archive/master.zip Instructions for installing the library and examples are located in a README.txt file within the zip container. This program monitors the sunrise & sunset for your specific location, and begins counting and timing at a specified time before sunrise and for an equal amount of time after sunset. Before and after that time, no data is sent to your spreadsheet. This project uses a python script to read the sunrise and sunset information from Yahoo! weather each evening or at startup get these times. The following python library needs to downloaded and installed on the Arduino Yún. python-weather-api pywapi - https://code.google.com/p/python-weather-api/ Instructions for installing this library is located at the above website. Python Scripts The location ID in the 'getastonomy.py' python script needs to be modified to include your location. It is currently configured for Missouri City, Texas. One way to find your ID is to go to the following website: http://www.intellicast.com/ Enter your location, and your location ID will appear as part of the URL address. Replace the USTX0905 in the line of the script with your location ID. result = pywapi.get_weather_from_yahoo('USTX0905','imperial') This will allow the script to fetch the sunrise and sunset for your location. Instructions for modifying 'sendgdocs.py' are located in Step 6. Once both scripts have been modified you must move them onto the micro-SD card directory '/mnt/sda1/' of the Arduino Yun. Bird_Feeder_Monitor.ino8 KB sendgdocs.py1 KB getastronomy.py1 KB Step 4: Step 4: Wiring the Bird Feeder Each of the perches on the feeder was covered with 1/4" wide self adhesive copper foil tape. A small hole was drilled through the tape and perch, and a wire was soldered to the foil tape and routed beneath the feeder. Note: With the bird feeder shown above, I recommend a gap between the ends of each foil stripe of 1 1/4" - 1 1/2". I discovered that the larger birds, such as grackles and doves, are capable of touching two foil strips at the same time if they are placed to close together. A block of wood was shaped and glued to the bottom of the feeder to provide a level area to mount the Project Box containing the CAP1188. Velcro tape was applied to the Project Box as well as the wooden block to provide a means of attaching. In order to refill the bird feeder, I unplug the power inside the garage. Next, I disconnect the DB-9 connector from the Project Box attached to the bottom of the feeder, which allows me to lift the feeder off the pipe with the Project Box still connected to the bottom. Once the feeder has been refilled, I place it back on the pipe stand; connect the DB-9 cable; and plug in the power. Step 5: Step 5: Creating a Google Doc Form In order to send data a Google Docs spreadsheet, you must first create a Form with all of the required fields. In my example, I have six 'cnt' fields and six 'time' fields that are integer input. For example, the fields are named 'cnt1', 'time1', 'cnt2', 'time2', etc. Once your finished with the Form, you click "View live form" to see the finished form. While viewing the Form, right click the page and select "View page source". Search and find all of the HTML "input" fields in the source code. Make a note of the name for each of the fields you entered on the form. This information is needed to create your Scenario in PushingBox.   For more detail: Bird Feeder Monitor using Arduino ### 5x5x5 LED Cube - Orientation Independent 3D Display Introduction   Our project, in one sentence, is an orientation independent 3D LED display. We were inspired by various videos on youtube of similar cubes but also by the idea of creating an interactive 3-dimensional display. We built a 5x5x5 LED cube display and controller board which interfaced the cube to a Mega32 microcontroller. We can display a wide range of low resolution 3D images or animations on our cube and we use an accelerometer to detect the horizontal or vertical orientation of the cube and adjust the display so that it remains upright even if we turn the cube sideways. The cube was used to display a message ("ECE476 FINAL PROJECT DEMO") and display a little light show animation.   High Level Design   We received inspiration for our design when we saw one of the many videos on youtube of 3D LED cubes. We thought the idea of a 3D display was interesting yet challenging given the budgetary and time constraints and we also thought we could take the idea one step further (this extra step ended up being the orientation adjustment using an accelerometer). One of the main considerations when first designing our cube was deciding how large to make it. Obviously more LED's would give better resolution and allow us to display some more interesting images but at the same time we were limited by how large of a cube we could fabricate in the given time and even more so by how many LED's we could reasonably control given the limited number of port pins and the limited processing power of the Mega32. We eventually settled on a 5x5x5 cube as a reasonable trade off between size and practicality, however, we do invite future groups, and others interested, to attempt to build a bigger cube given similar time and budget constraints (we suggest 8x8x8 since it gives you a nice round 512 LED's).     The next major consideration was how we would control all of the LED's. A 5x5x5 cube made for 125 LED's which was far more LED's than ports on the Mega32. We originally developed a method of controlling each LED individually that is much like the method used in common LED drivers. The method involved sending a serial bit stream that represented the state of each LED into a 125 bit serial-in parallel-out shift register. After shifting in the state of each of the 125 LED's we would then latch the value of each bit using 125 flip flops and drive each LED off of the output of a flip flop. This method required only 3 ports pins (one for the serial bit stream, one to clock the shift register, and one to clock the flip flops) and was very fast since we could clock the shift register at upwards of 1 MHz and theoretically update all the LED's in a couple hundred microseconds. Theoretically this method seemed very fast, however, practically this method was extremely inefficient. The main problem with controlling each LED individually was that to do so we would need to run at least 1 wire to each and every LED. This problem quickly got out of hand; at the bottom of the cube we would have at least 6 wires running off of each of the 25 columns. All of these wires would have made for an aethstetically unpleasing cube and present the question of how we would route all these wires together and fit them into the base of the cube. We realized we would need to wire the LED's together in a way that we could address them individually without having to run a separate wire to each one. This was a tricky problem since a typical addressing scheme such as selecting a column, then a row, then a level would have the undesirable side effect of lighting more LED's than we wanted. After some thought and search, we finally found this website which gave us a great method of how to do it. The tutorial showed us that we could in fact address LED's one at a time without having to run a ton of wires. To do so we would connect all of the up and down columns of LED's to the same positive terminal (25 columns total, with 5 LED's each) and then connect all of the horizontal levels to the same 'ground' (5 levels with 25 LED's each). To select a single LED we would apply 5V to the column in which the LED is located and then ground the level that it is on. This way using only 25 control lines for the columns and 5 control lines for the grounds we could select each LED individually. However, this still results in the previous problem of lightning extraneous LED's accidentally if we try to light more than 1 LED at a time. As illustrated in Figure 3, if we wanted to light just the first LED in the top level (back left corner) and the last LED on the bottom level (front right corner) we would set the 1st and 25th columns high and then ground the top and bottom levels. However, if we do this, instead of just having 2 LED's lit we would have 4 (top and bottom of back corner and top and bottom of front corner). To get around this we only try to light LED's in one column at a time. To display images that have LED's from multiple columns lit we cycle through each column at a fast rate (about 62.5Hz) to make it appear as though more than one column of LED's is on at the same time.     Program/Hardware Design   Hardware Description There was a lot of circuitry that had to be constructed in order to realize this project. First, we had to build the LED cube itself which actually turned out to be a much more difficult task then we first anticipated due to the shear number of LED's. We built each horizontal 5x5 plane individually by laying the LED's flat on top of wire and soldering all the negative terminals of the LED's onto the wire and leaving the positive terminal hanging. This essentially connected all the negative terminals of the LED's in the same level to the same ground plane. We then had to carefully solder the 5 horizontal planes together by first mounting them on the side of a cardboard box and taping them into place in a upright position and then soldering 1 wire to connect all the LED's in a vertical column together for each of the 25 columns. In addition to building the LED cube itself we also had to design and build our own custom LED driver circuit. This circuit had to take inputs from a limited number of microcontroller pins and decode them into something that could control the cube. If we had simply taken the input of each column and each ground level directly from a microcontroller pin this would have taken 30 pins which would have taken up most of the 32 port pins of the Mega32 microcontroller. This would have been alright for our final application (which only needed two extra pins for the accelerometer input) but would make it hard for future projects to utilize our design. Instead, we decided to come up with a clever way to decrease the bus size and simplify the interface between the driver and the microcontroller.We created a decoding circuit (Figure 1) that could control 24 columns using only 5 pins. The remaining 25th column and the 5 ground levels were controlled directly from the microcontroller; this resulted in using a total of only 11 pins to control the entire cube.     The first two bits of the 5 control lines feed into the first decoder (inst37). This decoder acts as a control that can select to enable any one, and only one, of the other 3 decoders. There is also a fourth option in which none of the output decoders are enabled which we use as a way to turn off all the LED's in the cube. The remaining 3 control lines feed into the 3 output decoders (inst34, inst35, and inst36). The outputs of these decoders feed directly to the columns; since only one output of any given decoder is high at a time, and only 1 of the output decoders is enabled at any given time, it is only possible to turn on 1 column at a time. This is highly favorable because, as shown in Figure 3, attempting to drive more than one column high at a time results in the unwanted lighting of additional LED's. Basically using this decoding scheme we can select any of the first 24 columns simply by sending the binary number of the column (the top two bits being a control for the master decoder and the bottom three being the input to the selected decoder). After completing the design of the digital circuit we were ready to connect it to our LED cube, however, before we did, we realized a glaring problem. The output from each pin of each decoder was to drive an entire column of LED's. This meant driving as many as 5 LED's in parallel, each drawing around 40 mA of current (Figure 4), for a total of 200 mA of current, however, the maximum current output of the decoder chips was rated at only 25 mA which would not be enough to drive even 1 LED, let alone all 5. Additionally, the port pins of the microcontroller were originally going to serve as the ground plane for all the LED's but we realized that they could in no way sink the amount of current that we needed to sink. To account for this we had to design a LED driver circuit which still used the outputs of the decoders and the microcontroller to control each column and the ground planes but drove the LED's through an external power and ground.     To control the LED's using the outputs of the decoders we used 25 pMOS transistors as high side switches and 5 nMOS transistors as low side switches (Figure 2). The pMOS transistors use the output of the decoder circuit as a sort of enable and supply the LED's with 5V when they are turned on. However, since pMOS transistors turn on with a low gate to source voltage, and the decoders we used were active high, we had to feed the output of the decoders through inverters before we connected them to the transistors. In a similar way the MCU ports are used to control nMOS transistors that connect the LED's to ground, however, since the control comes directly from a port pin there is no need for inverters here. Another problem that we encountered involved the amount of current that we could drive. The power now comes directly from a 5V regulator that is rated to supply at least an amp of current, which was more than enough, but the pMOS transistors that we used are only rated to supply 160 mA of continuous current. This meant that we would still have trouble driving all 5 of the LED's at the same time since each of the 5 LED's would try to draw 40 mA of current for a total of 200 mA. In order to get around this we employed a trick in the software that, instead of turning on all 5 LED's at the same time, would turn on the bottom 3 LED's first and then turn on the top 2 LED's.   For more detail: 5x5x5 LED Cube - Orientation Independent 3D Display Introduction Our project, in one sentence, is an orientation independent 3D LED display. We were inspired by various videos on youtube of similar cubes but also by the idea of creating an interactive 3-dimensional display. We built a 5x5x5 LED cube display and controller board which interfaced the cube to a Mega32 microcontroller. We can display a wide range of low resolution 3D images or animations on our cube and we use an accelerometer to detect the horizontal or vertical orientation of the cube and adjust the display so that it remains upright even if we turn the cube sideways. The cube was used to display a message ("ECE476 FINAL PROJECT DEMO") and display a little light show animation. High Level Design We received inspiration for our design when we saw one of the many videos on youtube of 3D LED cubes. We thought the idea of a 3D display was interesting yet challenging given the budgetary and time constraints and we also thought we could take the idea one step further (this extra step ended up being the orientation adjustment using an accelerometer). One of the main considerations when first designing our cube was deciding how large to make it. Obviously more LED's would give better resolution and allow us to display some more interesting images but at the same time we were limited by how large of a cube we could fabricate in the given time and even more so by how many LED's we could reasonably control given the limited number of port pins and the limited processing power of the Mega32. We eventually settled on a 5x5x5 cube as a reasonable trade off between size and practicality, however, we do invite future groups, and others interested, to attempt to build a bigger cube given similar time and budget constraints (we suggest 8x8x8 since it gives you a nice round 512 LED's). The next major consideration was how we would control all of the LED's. A 5x5x5 cube made for 125 LED's which was far more LED's than ports on the Mega32. We originally developed a method of controlling each LED individually that is much like the method used in common LED drivers. The method involved sending a serial bit stream that represented the state of each LED into a 125 bit serial-in parallel-out shift register. After shifting in the state of each of the 125 LED's we would then latch the value of each bit using 125 flip flops and drive each LED off of the output of a flip flop. This method required only 3 ports pins (one for the serial bit stream, one to clock the shift register, and one to clock the flip flops) and was very fast since we could clock the shift register at upwards of 1 MHz and theoretically update all the LED's in a couple hundred microseconds. Theoretically this method seemed very fast, however, practically this method was extremely inefficient. The main problem with controlling each LED individually was that to do so we would need to run at least 1 wire to each and every LED. This problem quickly got out of hand; at the bottom of the cube we would have at least 6 wires running off of each of the 25 columns. All of these wires would have made for an aethstetically unpleasing cube and present the question of how we would route all these wires together and fit them into the base of the cube. We realized we would need to wire the LED's together in a way that we could address them individually without having to run a separate wire to each one. This was a tricky problem since a typical addressing scheme such as selecting a column, then a row, then a level would have the undesirable side effect of lighting more LED's than we wanted. After some thought and search, we finally found this website which gave us a great method of how to do it. The tutorial showed us that we could in fact address LED's one at a time without having to run a ton of wires. To do so we would connect all of the up and down columns of LED's to the same positive terminal (25 columns total, with 5 LED's each) and then connect all of the horizontal levels to the same 'ground' (5 levels with 25 LED's each). To select a single LED we would apply 5V to the column in which the LED is located and then ground the level that it is on. This way using only 25 control lines for the columns and 5 control lines for the grounds we could select each LED individually. However, this still results in the previous problem of lightning extraneous LED's accidentally if we try to light more than 1 LED at a time. As illustrated in Figure 3, if we wanted to light just the first LED in the top level (back left corner) and the last LED on the bottom level (front right corner) we would set the 1st and 25th columns high and then ground the top and bottom levels. However, if we do this, instead of just having 2 LED's lit we would have 4 (top and bottom of back corner and top and bottom of front corner). To get around this we only try to light LED's in one column at a time. To display images that have LED's from multiple columns lit we cycle through each column at a fast rate (about 62.5Hz) to make it appear as though more than one column of LED's is on at the same time. Program/Hardware Design Hardware Description There was a lot of circuitry that had to be constructed in order to realize this project. First, we had to build the LED cube itself which actually turned out to be a much more difficult task then we first anticipated due to the shear number of LED's. We built each horizontal 5x5 plane individually by laying the LED's flat on top of wire and soldering all the negative terminals of the LED's onto the wire and leaving the positive terminal hanging. This essentially connected all the negative terminals of the LED's in the same level to the same ground plane. We then had to carefully solder the 5 horizontal planes together by first mounting them on the side of a cardboard box and taping them into place in a upright position and then soldering 1 wire to connect all the LED's in a vertical column together for each of the 25 columns. In addition to building the LED cube itself we also had to design and build our own custom LED driver circuit. This circuit had to take inputs from a limited number of microcontroller pins and decode them into something that could control the cube. If we had simply taken the input of each column and each ground level directly from a microcontroller pin this would have taken 30 pins which would have taken up most of the 32 port pins of the Mega32 microcontroller. This would have been alright for our final application (which only needed two extra pins for the accelerometer input) but would make it hard for future projects to utilize our design. Instead, we decided to come up with a clever way to decrease the bus size and simplify the interface between the driver and the microcontroller.We created a decoding circuit (Figure 1) that could control 24 columns using only 5 pins. The remaining 25th column and the 5 ground levels were controlled directly from the microcontroller; this resulted in using a total of only 11 pins to control the entire cube. The first two bits of the 5 control lines feed into the first decoder (inst37). This decoder acts as a control that can select to enable any one, and only one, of the other 3 decoders. There is also a fourth option in which none of the output decoders are enabled which we use as a way to turn off all the LED's in the cube. The remaining 3 control lines feed into the 3 output decoders (inst34, inst35, and inst36). The outputs of these decoders feed directly to the columns; since only one output of any given decoder is high at a time, and only 1 of the output decoders is enabled at any given time, it is only possible to turn on 1 column at a time. This is highly favorable because, as shown in Figure 3, attempting to drive more than one column high at a time results in the unwanted lighting of additional LED's. Basically using this decoding scheme we can select any of the first 24 columns simply by sending the binary number of the column (the top two bits being a control for the master decoder and the bottom three being the input to the selected decoder). After completing the design of the digital circuit we were ready to connect it to our LED cube, however, before we did, we realized a glaring problem. The output from each pin of each decoder was to drive an entire column of LED's. This meant driving as many as 5 LED's in parallel, each drawing around 40 mA of current (Figure 4), for a total of 200 mA of current, however, the maximum current output of the decoder chips was rated at only 25 mA which would not be enough to drive even 1 LED, let alone all 5. Additionally, the port pins of the microcontroller were originally going to serve as the ground plane for all the LED's but we realized that they could in no way sink the amount of current that we needed to sink. To account for this we had to design a LED driver circuit which still used the outputs of the decoders and the microcontroller to control each column and the ground planes but drove the LED's through an external power and ground. To control the LED's using the outputs of the decoders we used 25 pMOS transistors as high side switches and 5 nMOS transistors as low side switches (Figure 2). The pMOS transistors use the output of the decoder circuit as a sort of enable and supply the LED's with 5V when they are turned on. However, since pMOS transistors turn on with a low gate to source voltage, and the decoders we used were active high, we had to feed the output of the decoders through inverters before we connected them to the transistors. In a similar way the MCU ports are used to control nMOS transistors that connect the LED's to ground, however, since the control comes directly from a port pin there is no need for inverters here. Another problem that we encountered involved the amount of current that we could drive. The power now comes directly from a 5V regulator that is rated to supply at least an amp of current, which was more than enough, but the pMOS transistors that we used are only rated to supply 160 mA of continuous current. This meant that we would still have trouble driving all 5 of the LED's at the same time since each of the 5 LED's would try to draw 40 mA of current for a total of 200 mA. In order to get around this we employed a trick in the software that, instead of turning on all 5 LED's at the same time, would turn on the bottom 3 LED's first and then turn on the top 2 LED's. ### Arduino, open-design and Makerfaire at the Design Week in Milan If you happen to come to Milano this week the city is hosting a lot of events  organized in different locations for the 6-day Salone del Mobile dedicated mainly to furniture design but offering a lot of other initiatives taking place around 4 main areas like: the fair, Zona Tortona, VenturaLambrate and Brera. In the last couple of years some events related to the makers’ culture have started to pop-up during the Salone and we have something coming up too! Officine Arduino will be at Salone Satellite  (created in 1998 for the express purpose of bringing together  young designers under 35  and this 15th edition is putting the focus to ‘Design Technology’) with an installation called La Bottega Digitale where workshops, meetings and exhibition of 5 projects will show to visitors the digital-fabrication approach to design. Here you can check the agenda and book your participation. This is one of the new projects you’ll find when visiting us at the fair, it’s called Spruzzo, an open source sprouter based on shared knowledge: Right near Zona Tortona also we co-organized with some friends We Make Open-Design, an event all focused on open-design. It’s going to exhibit 6 projects which have codes and schemes released on the web, made mostly with digital fabrication techniques , just like OpenMirror by DigitalHabits. (3 of the projects will be presented during Popupmakers Speciale Salone )   For more detail: Arduino, open-design and Makerfaire at the Design Week in Milan ### Introducing CT-UNO, Cytron version of Arduino UNO Yes, this is Cytron version of Arduino UNO, we called it CT-UNO!!! Since 3 years ago, we started using Arduino and today we use a lot of Arduinos, particularly Arduino UNO. For tutorial, shield development, test jig, internal projects and many more. We’re keep looking for the simplest, most stable version. We love the FTDI (USB to UART chip) on Arduino Duemilanove, and like the program loading of optiboot on UNO, so we combine both features and added some improvements into CT-UNO. It is compatible with Arduino UNO from Arduino IDE and Shield point of view. The CT-UNO combines the simplicity of the UNO’s Optiboot bootloader (which load program faster), the stability of the FTDI and the R3 shield compatibility of the latest Arduino UNO R3. Besides, we know many are using Android phone which comes with USB micro-B cable (power bank also require micro-B to charge), therefore, to lower down the cost needed for customer to get started, we populate the USB micro-B socket for USB connection! Program can be loaded from Arduino UNO by utilizing your Android phone USB cable. Select “Arduino UNO” from the board and choose the correct COM port, you are ready to upload the code CT-UNO has all the amazing features Arduino UNO offer. 14 Digital I/O pins with 6 PWM pins, 6 Analog inputs, UART, SPI, external interrupts, not to forget the I2C too. The SDA, SCL and IOREF pins which being broken out on UNO R3 are on CT-UNO too. We has also populated the ISP header pins (SPI and power). With this, CT-UNO will be compatible with all Arduino UNO’s shield.   For more detail: Introducing CT-UNO, Cytron version of Arduino UNO ### Arduino goes to Shenzhen: the Hollywood of hardware products Last week-end we just had a good time at the Maker Faire of Shenzhen, hosted in the wonderful OCT District. We were invited by Eric Pan from Seeedstudio (thanks Eric for the good time!). The Maker Faire has been a priceless experience to get in touch with the chinese maker community, as well as networking with different Chinese and Chinese-based maker companies creating interesting contents & products. We finally inaugurated our very first official Weibo account, and shared chinese materials about Arduino. You could come and play with the Esplora as well as code your very own interface, Thanks to our friend Federico Musto and Anna Kao for the help. and Maling and Terry who volunteered for us in the booth giving Arduino goodies and pins to a ton of interested chinese makers and curious. Zack Smith, working now in the HAXLR8R, joined us for some help to test his chinese language. There has been many speeches and presentations (as well as an Arduino workshop held by Guo Haoyun, the chinese translator of Getting Started With Arduino), and all of a sudden I understood I have to learn chinese (!). The guys of Haxlr8r showed us their cool creations: Haxlr8r is a startup incubator taking cool ideas and startups from around the world and helping them developing and fine tuning their own product (solve all the puzzles in developing a project, 3 to 6 month) for production here in China. They are based closed to the world famous SEG Electronics Market, widely portrayed from Bunnie Wang in this post and from Evil Mad Scientist here.   For more detail: Arduino goes to Shenzhen: the Hollywood of hardware products ### Talking Arduino Heart Rate Monitor My partner and I wanted to make heart rate monitor that does more than simply measure a user's heart rate. Our heart rate monitor talks! Each button gives a verbal description of its functionality and makes the measurements visible on the screen. This monitor will save the last four readings, display them, average them, and also offer some inspirational quotes! Step 1: What you need Arduino Uno Pulse Sensor Adafruit Wave Shield (Must be soldered by user. This is what makes the device speak!) Adafruit RBG LCD Shield Standard speakers Custom Shield (helpful for mounting multiple shields to the Arduino) USB Cable SD card (8GB is a LOT of space... Even 2GB will do. Make sure to purchase the real SD brand. Fakes are out there.) Step 2: Connecting components to the custom shield Custom shield The custom shield was built as a lab exercise for our class. This shield is mounted on top of the Arduino and gives you access to unused pins (or pins that can be shared) on the Arduino--enabling your to mount multiple shields or devices at once. Adafruit also sells a shield that should work just fine as a substitute. The custom shield was used for the following: Power the Pulse Sensor. This will require 3 pins: 5V, ground, and analog pin 2. Power the RGB LCD shield. This will require 4 pins: 5V, ground, and analog pins 4 and 5. Provide space to mount the Wave Shield. Pulse Sensor The sensor requires some set up depending on how you choose to use it. We insulated the back of the pulse sensor with hot glue. Here is a video that guides you through the set-up (video). All of the wires on it go the the screw terminal on the custom shield. The screw terminal gives access to 4 pins on the Arduino: 5V, ground, analog 2, and a digital pin (which we will ignore). The red wire on the Pulse Sensor goes to 5V, the black wire to ground, and the purple wire goes to analog 2. RGB LCD Shield The shield itself requires no set-up. You will need 4 wires that connect to the shield's 5V, ground, analog 4 and analog 5. We highly recommend soldering the 4 wires directly onto the LCD shield to stabilize the device if placing in a container later. These wires will connect to the Arduino's respective pins, which for us were accessed by the custom shield. Wave Shield Mount the wave shield on top of the custom shield and now we're ready to code! Step 3: Using the Wave Shield Download the WaveHC Library from Adafruit. Format the SD card The wave shield library only reads files in FAT format (both FAT16 and FAT32). Some SD cards come formatted with FAT (mine did) and one way to test this is by running an example code that checks for the format of the card. A program that formats SD cards You will need an SD card reader to transfer files from your computer to the SD card. Most laptops come with SD slots (Macbook Pros do!). Else you will need to purchase one. Add sound files to the SD card The files must be .wav files We decided to use AT&T's Text-to-Speech website to generate voice files. These files already come formatted in .wav. Suggestion: You can play with voice using Audacity. (Lower the pitch and add some echo for a Darth Vader voice!) Connect the Speaker to the audio jack. You can also solder the speakers to the audio output on the shield. For more detail: Talking Arduino Heart Rate Monitor ### Creating A SoundBox Using Arduino Ideas and Sketches Squat Coach – Detects the depth of your squats and assesses your form. Flex sensor is positioned to run up the back of knee joint Etch-A-Sketch – Arduino version of Etch-A-Sketch game. Users control stylus with 2 rotational potentiometers  Adaptive Lighting – LED changes brightness depending on lighting of room. Photo cells connected to LED vary brightness of light emission based on surrounding light SoundBox – Musical instrument with a simple interface for intuitive interaction and immediate results. Users can control amplitude with FSR (force sensing resistor) and pitch with slider We decided to choose idea #4. While we liked our other ideas, we felt creating a SoundBox would be the most feasible and rewarding endeavor. Project Description We built a musical instrument, called the “SoundBox”. The “SoundBox” allows users to create notes by applying pressure to a force sensing resistor. The amount of pressure applied determines the volume of the note and users can control the pitch of each note they create with a SoftPot Membrane Potentiometer (slider). When users create notes, a python program reads the incoming signals from the USB port (which the Arduino is speaking to). Our python program then feeds these signals to ChucK, an audio programming language, which then creates the sounds you hear. We are definitely pleased with the result of our project. The intuitive and simple nature of the “SoundBox” interface allows any user to create a variety of sounds and patterns. Thus, in giving the gift of music (albeit limited) to users, we feel that our project is successful. One thing we could certainly improve is the limited functionality of our “SoundBox”. For example, we could add a switch to the Arduino which would enable users to toggle through ChucK instruments (as of now the default instrument is the mandolin). Furthermore, we could add multiple sliders to enable users to play multiple notes at once. What’s more, we could speak to any MIDI receiving Audio Software, such as Ableton Live or Logic (which have extensive sound libraries), to fashion sounds out of user input. As such, there is definitely a lot of room for improvement in our design, which would seriously enhance the functionality of the “SoundBox”.   For more detail: Creating A SoundBox Using Arduino ### Digital I/O with Arduino Boards Readings in Physical Computing Ch 6. pgs 87-136 (this week and next week) Ch 7: Serial Communication [137-143; 149-150; 153-161] Before the lab You should have already successfully installed the Arduino environment on your laptop, built the LED circuit, and successfully load/run the “blink” program to make the LED blink. Congratulations! In lab exercise Objective In this lab, we explore some of the digital features of the Arduino Board. Specifically, we’ll be looking at: Pulse Width Modulation (PWM) which “fakes” analog behavior using digital signals Serial communication with the laptop allowing for greater design flexibility In exploring these features, we will use Arduino to not just blink a single LED, but to control and fade several LEDs at once. Activity Part 1: From blinking to fading 1. Start with the LED circuit you built for the “Blinking LED” Assignment. For that assignment, we used pin 13 to control the LED and make it blink. Ardiuno has several pins marked PWM which support Pulse Width Modulation. The example code uses Pin 9, so simply move the controlling wire from Pin 13 to Pin 9. 2. Load the example code from the Arduino Sketchbook (File‐>Examples‐>Analog‐>Fading). Load this onto the Arduino and watch the LED Fade. Part 2: Fading 3 LEDs 3. Extend your circuit so that it includes 3 LEDs according to the diagrams below. Notice Pins 9, 10, and 11 are all marked PWM. 4. The following code dims the 3 LEDs according to a pattern. For your convenience, a copy of the code can be downloaded here (DimmingLEDs.txt). Look at the code and make sure you know what each line does. For more detail: Digital I/O with Arduino Boards ### Why we're different, by Bob Dobkin “We’re not like other semiconductor companies,” says Bob Dobkin, co-founder and CTO of Linear Technology, “for the most part we have a unique set of products because we combine circuit design, silicon design and testing.” Dobkin is an analogue legend having designed the industry’s first three-terminal adjustable voltage regulator, the first bipolar low-dropout regulator and has designed a couple of dozen circuits which each pulled in over $100 million revenues. 31 years after starting Linear Tech he’s still designing circuits. “I’ve spent my working life doing what I like,” says Dobkin, “I’m an artist and I paint silicon.” “Most of the engineers at Linear like working on linear circuits, they like what they’re doing,” adds Dobkin, “making linear circuits is like putting a puzzle together. If I retired from Linear I’d want to go and make circuits.”   “We don’t make a new product unless it’s going to be creative,” says Dobkin, “we don’t want to make a product which is already out there. We’ve got to be significantly better and interesting.” One thing that makes LTC different is having control over every part of the process which produces a linear circuit. “We make over 90% of our own wafers and can match the process to the circuit design,” adds Dobkin, “we have hundreds of different processes to make different products. We test and trim all our products.” That allows LTC to make products which have unique capabilities like huge temperature graduations on different parts of the chip or very low voltage driving very high performance which can’t be matched by competitors. Dobkin gives a for instance. “We had an 80V regulator. TI decided to copy it. They came out with a data sheet. Later they changed it from 80V to 60V. We interviewed the guy who had got the job of trying to copy the regulator. He said it was more trouble trying o copy the regulator than starting from scratch.” “We’re very careful to keep our customers happy; we’re very strongly attached o our customers,” says Dobkin, “we want to have a personal relationship with our customers. Customers can call in and get to talk to the design engineers. 30% of our products come from interactions between LTC engineers and customers.” “Most of the design engineers have been here for 15-20 years,” says Dobkin, “they always get calls asking them to leave Linear – but they don’t. Even the junior engineers don’t want to leave.” “Our people are very important. They share in the profit right from the start. ‘You make me rich, I’ll make you rich’. Dobkin doesn’t see much in the way of start-ups and, of them that do exist, “None have their own fab,” he says, “most of the new start-ups are in RF which takes a lot of people. I don’t see a company starting now doing the same things we do.”     For more read: Why we're different, by Bob Dobkin   ### Melexis motor driver has on chip EEPROM MLX83203 General Description The MLX83203 pre-driver is designed to drive high-current N-type FET 3-phase motor control applications. A combination of bootstrap and charge pump enables driving 6 NFETs, with gate charges up to 400nC/NFET with a minimum of device self-heating. The IC reset level below 4.5V allows for low-voltage operation. Each of the 6 external FETs can be controlled directly via the 6 digital inputs. Alternatively the 6 external FETs can be controlled via 3 digital inputs by applying an internal dead time. The built-in EEPROM allows extensive configurability of the pre-driver without the need for external resistors and SPI interface programming. This reduces the package pin count to only 32. All output voltages are monitored for failure conditions. The microcontroller is informed of the failure condition via a fast serial interface. The device comprises a current shunt amplifier, with a high gain bandwidth (GBW), offering a fast settling time with low noise. This makes the pre-drivers ideal for precise torque control applications like e.g. electrical power steering and brake by wire. For applications requiring lower current, see also the pin compatible MLX83202 pre-driver. For DC applications the MLX83100 pre-driver can be used. For sensorless BLDC applications see also our integrated BLDC controllers MLX80251 and MLX81200, MLX81205, ... MLX83203 Features and Benefits Optional charge pump for low supply voltage operation Alternative charge pump configuration provides NFET reverse polarity drive Compatible with 3V and 5V microcontrollers Converts 6 (or 3) PWM inputs from a micro-controller to drive 6 external N-FETs High side NFET driver with bootstraps and trickle charge pump for 100% PWM operation Low offset, low drift, fast current sense amplifier Fault interrupt & feedback to microcontroller Under & overvoltage protection Overtemperature protection VDS & VGS external FET monitoring Very small footprint: QFN32 5x5mm (25mm2) Extensive configurability in EEPROM - Programmable dead time: 0 to 6us - Programmable gain: 8 to 48 - Hardware protection settings (auto-shutdown) - Diagnostics settings (VDS level, masking time, ...) - Charge pump configuration Automotive qualified: -Wide supply voltage operating range: [4.5, 28]V -45V load dump -2000Hrs HTOL 150C -Sleep mode with low quiescent current (<30uA) Three phase brush-less DC (BLDC) motor applications are the design targets for a pre-driver IC from Melexis which uses EEPROM memory and combined bootstrap and charge pump blocks. The MLX83203 pre-driver is designed for small size and is offered in a standard, QFN32 5×5 package. The IC drives six 250nC NFETS up to 25kHz, while keeping 10V gate voltage down to 7V battery voltage. For fail safe torque control applications, the pre-driver features diagnostics and a low noise amplifier. Rather than configuring the pre-driver by applying external resistors, 6 bytes of on-chip EEPROM offer configuration options while minimising pin count. The operating voltage range from 4.5V to 28V, plus bootstrap topology complemented with a charge pump stage, allows the power stage to be operated via standard level NFETs without loss of performance during stop/start conditions, as well as enabling control even during engine cranking. The charge pump can be configured for applying a high side NFET reverse polarity protection. In sleep mode the IC consumes less than 30µA standby current.  A 10MHz gain bandwidth product (GBW) delivers shunt amplifier settling times of less than 1µs for fast current feedback. Its gain can be programmed in a wide range from 8 up to 48, and the input range can be configured from fully symmetric to full scale. For more read: Melexis motor driver has on chip EEPROM ### The Creepy Doll using Arduino Here at Mikamai, we often organise events and hackathons. After the last hackathon, someone left an old doll, and it was kinda creepy... so why not make it even creepier? I decided to put two red LEDs instead of the eyes, and a vibration sensor to turn on the LEDs when you shake the doll. Everything is powered by an AtTiny85 and a single CR2032 battery. Step 1: Materials and tools Materials: a doll an Arduino (Diecimila, Uno, Leonardo or Yún are ok) AtTiny85 8 Pin DIP Socket two 3mm red LEDs a stripboard a tilt sensor CR2032 battery holder CR2032 battery Tools: A sharp cutter Hot glue gun A soldering iron and solder Needle and thread, to sew it back optional - a Dremel to drill the eyes Step 2: Prototyping and testing the circuit Using the AtTiny 85 is a great choice for those who are familiar with Arduino, because you have the possibility to use the Arduino IDE to program it. This means that you can prototype the circuit with Arduino before deploying it to the AtTiny. So I wrote this code, and I built a simple testing circuit with Arduino.

#import

int led = 0; // LEDs pin int button = 2; // Tilt sensor pin int brightness = 0; // how bright the LED is int fadeAmount = 5; // how many points to fade the LED by int storedVal = 0; // used to save the tilt sensor state

void setup() { pinMode(button, INPUT_PULLUP); // initialize the button pin a pullup input, so I don't have to use an external pullup resistor. pinMode(led, OUTPUT); // initialize the digital pin as an output. }

void loop() {

int sensorVal = digitalRead(2); // Read the sensor state

if (sensorVal != storedVal) { //if the sensor value has changed, blink the eyes storedVal = sensorVal; // store the sensor state fadeEyes(); // call the eyes led fade function } else { digitalWrite(led, LOW); // otherwise, turn the led off }

delay(10); // a small delay for debouncing the sensor }

void fadeEyes() {

for (int i = 0; i < 768; i++) { //cycle 3 times analogWrite(led, brightness); // set the brightness of led pin: if (brightness == 255) { // at maximum brightness, wait 5 seconds delay(5000); } // change the brightness for next time through the loop: brightness = brightness + fadeAmount;

// reverse the direction of the fading at the ends of the fade: if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount; }

// wait for 30 milliseconds to see the dimming effect delay(100);

}

digitalWrite(led, LOW); }

The code is pretty simple: it waits for a changement in the tilt sensor state, and when it happens, it starts a little loop fading the leds brightness When the code works on Arduino, you are ready to deploy it on your AtTiny85 Step 3: Moving to AtTiny85 Programming an AtTiny with an Arduno can be tricky, but fear not! I made a very simple tutorial on how to do that with the latest Arduino IDE and Arduino Uno/diecimila or Arduino Leonardo/Yun. Just follow these steps, and you can easily use this sketch on the AtTiny85 Step 4: Testing the AtTiny85 based circuit Now we can move the programmed AtTiny on a new breadboard, following this scheme There is no resistor on the LED because I'm using a 3.3V coin battery. The circuit should start working as soon as you plug the battry: when the tilt sensor is shook, the LED fades :)   For more detail: The Creepy Doll using Arduino ### Arduino real-time alerts for your IoT projects with Arduino Cloud If you are building Internet of Things (IoT) projects, the ability to receive real-time alerts is a game-changer. Arduino, a prominent player in the IoT space, has introduced a new feature to its cloud platform that allows users to set up triggers and notifications. This feature is designed to enhance the efficiency of IoT projects by providing immediate alerts based on specific conditions. Triggers and notifications are two key components of Arduino’s latest feature. A trigger is a condition that, when met, initiates an action. For instance, if a temperature sensor in an IoT project detects a temperature above a certain threshold, it could trigger an alert. Notifications, on the other hand, are the alerts or messages that are sent out when a trigger condition is met. These could be in the form of an email, a text message, or a push notification on a mobile device. Arduino real-time alerts To set up triggers and notifications in Arduino Cloud, you need to follow a few simple steps. Access the Arduino Cloud dashboard: Log into your Arduino account and navigate to the Arduino Cloud dashboard. Select your IoT device: From the list of your IoT devices, select the one for which you want to set up a trigger and notification. Create a new trigger: Click on the ‘New Trigger’ button and define the condition that will initiate the trigger. This could be a specific value or a range of values that a sensor on your IoT device should detect. Set up a notification: Once the trigger is defined, you can set up a notification. This involves specifying the type of alert (email, text, or push notification) and the recipient of the alert. Real-time alerts in IoT projects are crucial for several reasons. They allow for immediate action in response to changes detected by IoT devices. For instance, if a temperature sensor in a greenhouse detects a temperature drop below a certain level, a real-time alert could trigger the heating system to turn on, thereby preventing damage to the plants. Moreover, real-time alerts can also be used for monitoring purposes. For example, if an IoT device is tracking the energy consumption of a building, a sudden spike in energy use could trigger an alert. This would enable the building manager to investigate and address the issue promptly. Arduino’s introduction of real-time alerts for IoT projects is a significant step forward in the IoT landscape. It not only enhances the functionality of IoT devices but also makes them more user-friendly. By providing users with the ability to set up triggers and notifications, Arduino is empowering them to have more control over their IoT devices. This feature allows users to customize their devices to suit their specific needs and preferences. Furthermore, the use of real-time alerts can lead to more efficient and effective management of IoT devices. By receiving immediate alerts when certain conditions are met, users can take timely action to address issues or make adjustments as needed. Arduino’s real-time alerts for IoT projects offer a powerful tool for enhancing the efficiency and effectiveness of IoT devices. By providing immediate alerts based on specific conditions, this feature allows users to take prompt action, thereby improving the management and performance of their IoT projects. Source: Arduino real-time alerts for your IoT projects with Arduino Cloud ### IoT based health monitoring system | Arduino Project An Arduino and a generic ESP8266 are utilized in an Internet of Things (IoT) patient health monitoring system. The project's concept involves gathering and transmitting the health information of patients. Project description The term "IoT-based patient health monitoring system" refers to a broad category of medical devices that possess internet connectivity and are capable of measuring various health parameters of a patient who is connected to the device. These parameters may include heartbeat, body temperature, blood pressure, ECG, steps taken, and more. The equipment has the capability to record, transmit, and generate alerts in the event of any sudden changes in the patient's health. This definition encompasses a wide range of devices, ranging from smartwatches, fitness trackers, and smartphones to sophisticated and costly hospital equipment that can connect to the internet. The purpose of an IoT-based health monitoring system is to facilitate remote monitoring of patients by healthcare professionals when the patient and the experts are located in different places. For instance, a patient can stay at home and continue with their daily activities while a doctor remotely monitors their health. Based on the received data, the healthcare expert can prescribe the most suitable treatment or take immediate action in case of an emergency. Code #include "ThingSpeak.h" #include //------- WI-FI details ----------// char ssid[] = "XXXXXXXXXXX"; // SSID here char pass[] = "YYYYYYYYYYY"; // Passowrd here //--------------------------------// //----------- Channel details ----------------// unsigned long Channel_ID = 123456; // Channel ID const char * myWriteAPIKey = "ABCDEFG1234"; //Your write API key //-------------------------------------------// const int Field_Number_1 = 1; const int Field_Number_2 = 2; String value = ""; int value_1 = 0, value_2 = 0; int x, y; WiFiClient client; void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); ThingSpeak.begin(client); internet(); } void loop() { internet(); if (Serial.available() > 0) { delay(100); while (Serial.available() > 0) { value = Serial.readString(); if (value[0] == '*') { if (value[5] == '#') { value_1 = ((value[1] - 0x30) * 10 + (value[2] - 0x30)); value_2 = ((value[3] - 0x30) * 10 + (value[4] - 0x30)); } else if (value[6] == '#') { value_1 = ((value[1] - 0x30) * 100 + (value[2] - 0x30) * 10 + (value[3] - 0x30)); value_2 = ((value[4] - 0x30) * 10 + (value[5] - 0x30)); } } } } upload(); } void internet() { if (WiFi.status() != WL_CONNECTED) { while (WiFi.status() != WL_CONNECTED) { WiFi.begin(ssid, pass); delay(5000); } } } void upload() { ThingSpeak.writeField(Channel_ID, Field_Number_1, value_1, myWriteAPIKey); delay(15000); ThingSpeak.writeField(Channel_ID, Field_Number_2, value_2, myWriteAPIKey); delay(15000); value = ""; } Code for Arduino #include #include #include #include #define USE_ARDUINO_INTERRUPTS true #include SoftwareSerial esp(10, 11); LiquidCrystal lcd(7, 6, 5, 4, 3, 2); #define ONE_WIRE_BUS 9 #define TEMPERATURE_PRECISION 12 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress tempDeviceAddress; int numberOfDevices, temp, buzzer = 8; const int PulseWire = A0; int myBPM, Threshold = 550; PulseSensorPlayground pulseSensor; unsigned long previousMillis = 0; const long interval = 5000; void setup() { lcd.begin(16, 2); Serial.begin(9600); esp.begin(115200); sensors.begin(); numberOfDevices = sensors.getDeviceCount(); pulseSensor.analogInput(PulseWire); pulseSensor.setThreshold(Threshold); pulseSensor.begin(); pinMode(buzzer, OUTPUT); digitalWrite(buzzer, HIGH); lcd.setCursor(0, 0); lcd.print(" IoT Patient"); lcd.setCursor(0, 1); lcd.print(" Monitor System"); delay(1500); digitalWrite(buzzer, LOW); lcd.clear(); } void loop() { myBPM = pulseSensor.getBeatsPerMinute(); if (pulseSensor.sawStartOfBeat()) { beep(); lcd.setCursor(0, 1); lcd.print("HEART:"); lcd.print(myBPM); lcd.setCursor(9, 1); lcd.print(" BPM"); delay(20); } sensors.requestTemperatures(); for (int i = 0; i < numberOfDevices; i++) { if (sensors.getAddress(tempDeviceAddress, i)) { temp = printTemperature(tempDeviceAddress); lcd.setCursor(0, 0); lcd.print("BODY:"); lcd.print(temp); lcd.print(" *C"); } } upload(); } int printTemperature(DeviceAddress deviceAddress) { int tempC = sensors.getTempC(deviceAddress); return tempC; } void beep() { digitalWrite(buzzer, HIGH); delay(150); digitalWrite(buzzer, LOW); } void upload() { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; esp.print('*'); esp.print(myBPM); esp.print(temp); esp.println('#'); } } ### Beat Feet: set your beats and effects with gestures using Arduino One of the teams participating to the MIT Media Labs Design Innovation workshop at PESIT Bangalore last January built something called  Beat Feet using Arduino Uno: We designed a system which will allow musicians, guitarists and keyboardists to set the beats according to the music they play, without getting up from their place or even without lifting their hands off the instrument! Yes, simply by tapping foot at a constant rate. Don’t believe it? Beat Feet allows musicians to add drum and guitar effects  using only feet gestures and wearable sensors. Check the details of the project on this website and watch the video below to see it in action!   For more detail: Beat Feet: set your beats and effects with gestures using Arduino ### ARDUINO SOLAR CHARGE CONTROLLER ( Version 2.0) One year ago, I began building my own solar system to provide power for my village house.Initially I made a LM317 based charge controller and an Energy meter for monitoring the system.Finally I made PWM charge controller.In April-2014 I posted my PWM solar charge controller designs on the web,it became very popular. Lots of people all over the world have built their own. So many students have made it for their college project by taking help from me.I got several mails every day from people with questions regarding hardware and software modification for different rated solar panel and battery. A very large percentage of the emails are regarding the modification of charge controller for a 12Volt solar system. You can see my old version charge controller here To solve this problem I made this new version charge controller so that any one can use it without changing the hardware and software. I combine both the energy meter and charge controller in this design. Why I need a 3D printer ? You can see in each of my project, I worked hard to make a good enclosure.After spending so much time the outcome is not so exciting.I think I can make a good enclosure by a 3D printer.But the problem is that I am residing in a place where there is no access to 3D printer. It is expensive also which is not affordable by me.So I participate in 3 competitions to get it.If I will won a 3D printer then I will make my project better and better in future.Now I am tryiing to learn 123D which may helps to work in 3D printer. So I request you please vote for me. Thanks in advance Specification of version-2 charge controller : 1.Charge controller as well energy meter 2. Automatic Battery Voltage Selection (6V/12V) 3.PWM charging algorithm with auto charge set point according to the battery voltage 4.LED indication for the state of charge and load status 5. 20x4 character LCD display for displaying voltages,current,power,energy and temperature. 6.Lightning protection 7.Reverse current flow protection 8.Short Circuit and Over load protection 9. Temperature Compensation for Charging Electrical specifications : 1.Rated Voltage= 6v /12V 2.Maximum current = 10A 3.Maximum load current =10A 4.Open Circuit Voltage = 8-11V for 6V system /15 -25V for 12V system Step 1: Parts and Tools Required : Parts: 1.Arduino Nano ( eBay) 2.P-MOSFET (IRF 9540 x2 ) 3.Power diode (MBR 2045 for 10A and IN5402 for 2A) 4.Voltage Regulator (LM7805) 5.Temperature Sensor(LM35) 6.Current Sensor (ACS712) 7.TVS diode (P6KE36CA) 8.Transistors ( 2N3904 or 2N2222) 9.Resistors( 100k x 2, 20k x 2,10k x 2,1k x 2, 330ohm x 5) 10.Ceramic Capacitors (0.1uF x 2) 11.Electrolytic Capacitors ( 100uF and 10uF) 12. 20x4 I2C LCD (eBay) 13.RGB LED (ebay) 14.Bi Color LED 15.Jumper Wires/Wires(eBay) 16.Header Pins (Male,Female and right angle) 17.Heat Sink (eBay) 18.Fuse Holder and fuses (eBay) 19.Push Button 20.Perforated Board (eBay) 21.Project Enclosure 22.Screw terminals ( 3x 2pin and 1x6 pin) 23.Nuts/Screws/Bolts 24.Plastic Base Tools : 1.Soldering Iron 2.Wire Cutter and Stripper 3.Screw Driver 4.Drill 5.Dremel 6.Glue Gun 7.Hobby Knife Step 2: How The Charge Controller Works : The heart of of the charge controller is Arduino nano board.The arduino MCU senses the solar panel and battery voltages.According to this voltages it decides how to charge the battery and control the load. The amount of charging current is determined by difference between battery voltage and charge set point voltages. The controller uses two stages charging algorithm.According to the charging algorithm it gives a fixed frequency PWM signal to the solar panel side p-MOSFET. The frequency of PWM signal is 490.20Hz(default frequency for pin-3). The duty cycle 0-100% is adjusted by the error signal. The controller gives HIGH or LOW command to the load side p-MOSFET according to the dusk/dawn and battery voltage. The full schematic is attached bellow. charge controller version -2.pdf18 KB Step 3: Main functions of solar charge controller: The charge controller is designed by taking care of the following points. 1.Prevent Battery Overcharge: To limit the energy supplied to the battery by the solar panel when the battery becomes fully charged.This is implemented in charge_cycle() of my code. 2.Prevent Battery Over discharge: To disconnect the battery from electrical loads when the battery reaches low state of charge.This is implemented in load_control() of my code. 3.Provide Load Control Functions: To automatically connect and disconnect an electrical load at a specified time. The load will ON when sunset and OFF when sunrise.This is implemented in load_control() of my code. 4.Monitoring Power and Energy : To monitor the load power and energy and display it. 5.Protect from abnormal Condition: To protect the circuit from different abnormal situation like lightening,over voltage,over current and short circuit etc. 6.Indicating and Displaying: To indicate and display the various parameters 7.Serial Communication: To print various parameters in serial monitor Step 4: Sensing Voltages,Current and temperature : 1.Voltage Sensor: The voltage sensors are used to sense the voltage of solar panel and battery.It is implemented by using two voltage divider circuits.It consists of two resistors R1=100k and R2=20k for sensing the solar panel voltage ans similarly R3=100k and R4=20k for battery voltage.The out put from the R1and R2 is connected to arduino analog pin A0 and out put from the R3 and R4 is connected to arduino analog pin A1. 2.Current Sensor : The current sensor is used for measuring the load current.later this current is used to calculate the load power and energy.I used a hole effect current sensor (ACS712-20A) 3.Temperature Sensor : The temperature sensor is used to sense the room temperature. I used LM35 temperature sensor which is rated for −55°C to +150°C Range. Why Temperature monitoring is Required ? The battery’s chemical reactions change with temperature.As the battery gets warmer, the gassing increases. As the battery gets colder,it becomes more resistant to charging. Depending on how much the battery temperature varies, it is important to adjust the charging for temperature changes.So it is important to adjust charging to account for the temperature effects. The temperature sensor will measure the battery temperature, and the Solar Charge Controller uses this input to adjust the charge set point as required.The compensation value is - 5mv /degC/cell for lead acid type batteries.(–30mV/ºC for 12V and 15mV/ºC for 6V battery).The negative sign of temperature compensation indicates,increase in temperature require a reduction in charge set point. For more details on Understanding and Optimizing Battery Temperature Compensation Step 5: Sensors Callibration Voltage Sensors : 5V = ADC count 1024 1 ADC count = (5/1024)Volt= 0.0048828Volt Vout=Vin*R2/(R1+R2) Vin = Vout*(R1+R2)/R2 R1=100 and R2=20 Vin= ADC count*0.00488*(120/20) Volt Current Sensor: As per seller information for ACS 712 current sensor Sensitivity is = 100mV / A =0.100V/A No test current through the output voltage is VCC / 2= 2.5 ADC count= 1024/5*Vin and Vin=2.5+0.100*I (where I=current) ADC count= 204.8(2.5+0.1*I) =512+20.48*I => 20.48*I = (ADC count-512) => I =(ADC count/20.48)- 512/20.48 Current (I) =0.04882*ADC -25 Temperature Sensor : As per data sheet of LM35 Sensitivity=10 mV/°C Temp in deg C =(5/1024)*ADC count*100 Note : The sensors are calibrated by assuming the arduino Vcc= 5V reference.But in practical it is not 5V always.So there may be chance of getting wrong value from the actual value.It can be solved by following way. Measure the voltage between arduino 5V and GND by a multimeter.Use this voltage instead of 5V for Vcc in your code.Hit and try to edit this value until it matches the actual value. Example: I got 4.47V instead of 5V.So the change should be 4.47/1024=0.0043652 instead of 0.0048828. For more detail: ARDUINO SOLAR CHARGE CONTROLLER ( Version 2.0) ### SHAKE, RATTLE, ROLL, WITH YOUR OWN SEISMOGRAPH We always love to see projects where you can build your own lab equipment so [CompactDIY’s] homemade seismograph caught our eye. The design uses an Arduino with an accelerometer and builds on one of their earlier projects. You can see a video of the device below. The principle is simple. A hobby servo controls a pen and a stepper motor rolls paper, creating a makeshift strip recorder. Its software uses the Visuino system, which is a flowchart-like system, but it outputs Arduino code. Honestly, we would probably have just plotted the data on a PC, but there’s a certain charm to the strip recorder and the idea would work for other types of data recording projects, too. We thought if you rearranged the stepper motor and cut a paper disk out, you could also have a circular chart recorder easily, which wouldn’t need to friction transport the paper. A clock motor would make it even less dependent on software, too. If this project interests you, try a Raspberry shake, which isn’t as delicious as it sounds. Or, keep an eye on the entire globe, if you prefer. Source: SHAKE, RATTLE, ROLL, WITH YOUR OWN SEISMOGRAPH ### UP XTREME: POWERING INTELLIGENT SURVEILLANCE SOLUTIONS Many developers and users of security solutions are looking for ways to get more out of their surveillance systems by deploying intelligent edge computing platforms. UP Xtreme, from AAEON’s UP Board division, is being deployed along with technology from partners including Intel®, Milestone and SAIMOS® to bring Smart Surveillance to these customers with the UP Xtreme Smart Surveillance kit. With the ever-increasing importance of on-site security, surveillance cameras are installed virtually everywhere, recording footage passively. Smart surveillance takes things to the next level by adding intelligent processing of data that’s already being gathered to analyze traffic with heatmaps, monitor areas with virtual fences, or reacting to data in other ways to allow for automated control or alerting staff on premises. UP Xtreme Smart Surveillance provides all the technology needed to power these applications in one box, working as an AI-enabled NVR solution to proactively monitor video streams supporting up to 32 cameras simultaneously (Intel® Core™ i7 model with Milestone XProtect® Express+). Working with technology partners Intel, Milestone, and SAIMOS, AAEON’s UP team is deploying the UP Xtreme Smart Surveillance solution to overcome the challenges present in traditional security camera systems. UP Xtreme Smart Surveillance works by integrating video management software (VMS) from Milestone with video analytic software from SAIMOS, then adding a deep learning AI edge inference through the Intel® Distribution of OpenVINO™ toolkit, to provide a total package solution that saves deployment time and cost for end users, as well as overcoming challenges such as storage issues. The AI inference is also accelerated with two Intel® Movidius® Myriad™ X VPUs, helping provide even more power alongside the 8th Generation Intel® Core™ processor that comes with the UP Xtreme system. Read more: UP XTREME: POW-ERING INTELLIGENT SURVEILLANCE SOLUTIONS ### Google Search Engine Introduced in Our Site Hello Developers! Happy to introduce that we have embedded Google Custom Search Engine into our Arduino Site. Now you can search with better options to get your related project. e.g. https://duino4projects.com/?s=arduino+simulator Stay tuned and contact us for any problem in our Site.   Thanks ### Tesla Truck: A Mobile-Maker Space for the Masses! Hey Indigogo- We're a group of engineers, educators, and published researchers. Over the last year, we've helped high schoolers and middle schoolers in New York City bring to life previously abstract concepts like algebra, capacitance in a circuit, and gravity. We wanted them to take this abstract material and turn it into something that they could interact with and form lasting attitudes about. We did this by helping them apply what they had learned to build projects like robots, quadcopters, water purifiers, hovercrafts, and more. However, we quickly realized that in a world being propelled by technology and engineering, a lot of schools and communities across the country lacked the necessary resources to keep up. With budget cuts and dwindling space and resources becoming common place, achieving a means of sustaining hands-on learning and making are harder and harder to come by.   For more detail: Tesla Truck: A Mobile-Maker Space for the Masses! ### MODERN SOFTWARE BRINGS BACK THE TIMEX DATALINK As much as some people on the Internet might like to think — no, Apple did not come up with the idea of the smart watch. Even if you ignore the calculator watches that we imagine a full 60% of Hackaday readers wore at one time or another in their lives, the Timex Datalink was already syncing with computers and pulling down the user’s list of appointments back in 1994 by decoding the pulses of light produced by a CRT monitor. Hey, it sounded like a good idea at the time. Unfortunately, this idea hasn’t aged well. The technique doesn’t work on more modern displays, and naturally the companion software to generate the flashing patterns was written for Windows 3.1. But thanks to the reverse engineering efforts of [Synthead], you can now sync any version of the Timex Datalink to your computer using nothing more complex than the onboard LED of the Teensy LC or Raspberry Pi Pico. There’s actually several different projects working together to make this happen. In place of a CRT, there was an official “Timex Datalink Notebook Adapter” back in the day that was designed to be used on laptops and featured a single blinking LED. That’s what [Synthead] has recreated with timex-datalink-arduino, allowing a microcontroller to stand in for this gadget and featuring 100% backwards compatibility with the original Datalink software. But since you’re probably not rocking Windows 3.1 anymore, having access to that software is far from a given. That’s why [Synthead] also created timex_datalink_client, which is a Ruby library that lets you generate data fit for upload into the Timex Datalink. At the time of this writing there doesn’t seem to be a friendly user interface (graphical or otherwise) for this software, but it’s easy enough to feed data into it using plain-text configuration files. Helpfully [Synthead] provides screenshots of information loaded into the original software, followed by a config file example that accomplishes the same thing. It looks like writing some glue code that pulls your schedule from whatever service you fancy and formats it for the Datalink client should be relatively simple. Appointment data is loaded from a text file. We’ve previously seen projects that got the Timex Datalink synced without the need for a CRT, but they still required the original software. To our knowledge, this is the first complete implementation of the Datalink protocol that doesn’t rely on any original hardware or software. Expect eBay prices to go up accordingly. Source: MODERN SOFTWARE BRINGS BACK THE TIMEX DATALINK ### New Arduino Lab Editor features for MicroPython The passionate development team at Arduino has always been committed to empowering developers, and in this mission, they have unveiled their latest tools when using Arduino and MicroPython. Aimed at developers who use Arduino boards and third-party ones, these tools have been released under the umbrella of Arduino Labs, with an ‘experimental’ tag that alludes to the innovative spirit of the developers. The Arduino Lab Editor for MicroPython and its associated tools are a step towards making development easier and more accessible. Whether you are a novice programmer or an experienced developer, these tools aim to simplify your journey with MicroPython on Arduino. To ease the process of flashing the MicroPython firmware image on Arduino boards, the Arduino Lab Installer for MicroPython has been introduced. This tool reduces the technical hurdles and streamlines the process, enabling developers to utilize MicroPython more efficiently. Arduino Lab Editor for MicroPython The Arduino Lab Editor for MicroPython Version 0.8 is now available and within this new release, there’s a lot to look forward to: An enhanced user interface for more intuitive navigation A superior file management system that now supports subfolders Highly stable file-system operations for a seamless save, upload, download, and run processes An easy-to-manage library and modules, nestled in the ‘lib’ folder, maintaining a cleaner board storage The new features help reduce development time, allowing users to focus more on their core tasks and less on operational issues. In its endeavor to further support developers, Arduino has created an initial list of MicroPython packages, beneficial for learning and experimenting with this language. Aptly named as Arduino MicroPython Package Index, this list promises to be a valuable resource for Arduino developers. As they explored existing packages, the team identified that several were available but did not always align with the latest MicroPython versions or certain target hardware. To address this, Arduino decided to maintain a curated list of useful packages. These packages are tested for compatibility with Arduino boards and with updated versions of official MicroPython. The good news doesn’t stop there. The development team is also planning to release tools to easily search, download, and install from this package index in the future. This will enhance the user experience, making package management an effortless task. Contribution to Arduino MicroPython Package Index Embodying the spirit of open-source collaboration, Arduino has opened the doors for anyone to contribute to the Arduino MicroPython Package Index. If you want to propose a package to be added, you simply have to follow the contribution guidelines published in the repository. The improved UI, better file management, the curated Arduino MicroPython Package Index, and the upcoming tools for easy package management promise to take the development experience to a new level. Indeed, Arduino’s ongoing commitment to improvement and user empowerment remains at the heart of these new tool releases. For more information on the Arduino Lab Editor for MicroPython jump over to the official Arduino website. What is MicroPython MicroPython is a lean and efficient implementation of the Python 3 programming language. It’s designed to be compatible with constrained environments and embedded systems, such as microcontrollers. The main idea behind MicroPython is that it allows you to write Python scripts that interact directly with hardware, providing a high-level and easy-to-use language for embedded systems programming. It was developed from scratch to incorporate all the Python 3.4 standard libraries, aiming to be as close as possible to standard Python to allow programmers to transfer their knowledge seamlessly from traditional computers to microcontrollers. Despite its compact nature, MicroPython still retains a comprehensive range of features from Python, including exceptions, modules, classes, closures, list comprehension, generators, and more. Also, it includes a subset of Python standard libraries and is optimized to run on microcontrollers, small embedded systems, and other systems with limited resources. One of the key features of MicroPython is the interactive REPL (Read-Eval-Print Loop) that allows developers to connect to the board and execute commands directly, speeding up the development process. This also enables real-time debugging and development, enhancing the overall experience for developers. MicroPython has been embraced by the maker community and has seen adoption in a variety of settings, from hobbyist projects to industrial applications. Its ability to run on minimal hardware and easy integration with sensors and actuators make it an attractive choice for IoT (Internet of Things) projects. Source: New Arduino Lab Editor features for MicroPython ### NRFSEC, FOR UNLOCKING ANY PROTECTED NRF51-SERIES SYSTEM-ON-CHIP FOR DEBUG Loren Browman, a security analyst recently published a guide to automated unlocking of Nordic Semiconductor’s nRF51-series systems-on-chips (SoCs) which claims to be protected, enabling a full memory dump or interactive debugging regardless of protection settings. In a blog piece for security firm Optiv, Loren Browman writes “Recently, while conducting an assessment for a product based on the nRF51822 System on Chip (SoC), I found my target’s debug interface was locked — standard stuff… Reading up on the nRF51 series SoCs revealed that this is how these chips are designed. It’s always possible to perform a full memory recovery/dump, even if read back protection is enabled.” He continue: “I wanted to build on what others have discovered, extending the attack to completely and automatically bypass the memory protection mechanism offered by these SoCs. Beyond reading memory, I also wanted to unlock the device to support interactive debug sessions with my target.” This resulted to nrfsec, which is an open source research security tool published under the GNU General Public License 3, used for unlocking and reading memory on nrf51 series SoCs from Nordic Semiconductor. Features of the nrfsec includes: Read all target memory, bypassing the Memory Protection Unit (MPU) settings with integrated read gadget searching.Automated unlock feature: read all program and UICR memory, erase all memory, patch UICR image, reflash target into unlocked state.Boot delay command flag for interacting with target prior to performing memory read, allowing for RAM dumps.All firmware images are saved for importing into your favorite disassembler. Read more: NRFSEC, FOR UNLOCKING ANY PROTECTED NRF51-SERIES SYSTEM-ON-CHIP FOR DEBUG ### Open Source Camera Quadcopter Introduction When our team was initially assigned the task of transforming this project from a cinematography quadcopter to a more practical sensor quadcopter, we made the decision to redesign the frame. This decision was not taken lightly, but it was concluded that one of the reasons the drone had been unable to fly thus far was due to the additional weight that only served to protect it in the event of a fall, assuming it managed to take off at all. The new frame would be significantly lighter while still maintaining sufficient structural integrity to withstand the forces exerted by various drone components. In order to minimize costs, we made an effort to salvage all electronics from previous iterations. Consequently, we also opted to remove the microcontroller and sensors from the drone in a manner that would allow the same sensor package and code to be used with any other drone equipped with a standard camera mounting knuckle system. This approach aligns with the principles of open source, as many consumer drones already possess such a mounting system, and acquiring a new drone is unnecessary for individuals who only require the sensor package. Thus, the project became divided into two main aspects: creating the drone itself and developing the sensor package. Objectives and Constraints A. Objectives The primary objective of this project is to develop a functional drone capable of flying, alongside the creation of a separate sensor package that can be integrated into this drone as well as other drones, enabling data collection and storage. The project emphasizes the utilization of open-source manufacturing practices and consumer-grade components. The following goals have been established: 1. Open-Source Part Files for Modification: - The parts have been designed using Onshape, a freely available CAD software. - The part files will be shared in the PARASOLID format, which is compatible with various CAD software, allowing for easy access and modification. 2. Open-Source Controller Hardware: - The flight controller chosen for this project is the MATEKSYS F405-miniTE, running iNAV. - This choice enables the community to utilize different styles of iNAV-supported flight controllers to cater to their specific needs and functionalities. 3. Arduino Nano for Sensor Control/Data Acquisition and Logging: - The Arduino Nano board is employed to manage sensor control, acquire data, and facilitate data logging. 4. 3D Printed Components: - The incorporation of 3D printed components enables cost-effective manufacturing of both new and existing parts. 5. Perform Basic Quadcopter Flight Maneuvers: - The drone is designed to execute fundamental quadcopter flight maneuvers. - It can be controlled using a handheld transmitter. - Ensuring safe takeoff and landing. - Offering precise and accurate controls during flight. 6. Sensor Package: - The sensor package is engineered to interface with various sensors. - It is capable of logging data effectively. B. Constraints To ensure accessibility for open source enthusiasts, the design of the project is subject to certain limitations, which are as follows: 1. Open-Source Tools for Frame Manufacturing: - The quadcopter frame will be manufactured using open-source tools. 2. 3D Printing as the Manufacturing Method: - The primary manufacturing approach for this project will be 3D printing. 3. Structural Resilience: - The quadcopter frame must possess the necessary strength and durability to withstand the forces experienced during flight. 4. Cost Limitation: - Any modifications or changes made to the previous designs should not exceed a budget of $100. 5. Time Frame: - The project is expected to be completed within a single semester timeframe. Drone Rework A. Frame Upon receiving the non-functional drone, our team's initial objective was to strip it down to its simplest form and then gradually rebuild it with the aim of achieving flight capability. To achieve this, we opted to discard the previous frame utilized by the previous project team and replace it with a lighter and more manageable alternative. To align with this objective, it was determined that employing flat arms fabricated from ABS (to enhance ductility) and printing the frame's center using PLA would be the most suitable approach. Figure 1 illustrates the design in Onshape, while Figure 2 showcases the printed frame with the electronics securely mounted. Figure 1: CAD of the new drone frame. The parts in pink are to be printed in PLA while those in black are to be printed out of ABS Figure 2: Printed frame with electronics mounted. The redesigned frame incorporates individual arms, allowing for easy replacement of any broken arm and reducing the required size of the 3D printer for replication purposes. By mounting the battery vertically, accessing the undercarriage becomes more convenient, and additional mounting points for sensors are made available. Furthermore, this configuration provides a consistent flat base for gyroscope calibration, as opposed to relying solely on the screws located at the bottom of the frame. Additionally, this new design facilitates the mounting of motor speed controllers (ESCs) on the arms, creating more space in the central area of the frame. This increased space is beneficial for accommodating the flight controller and vision system, which will be further discussed later on. B. Vision In the previous iteration of the drone, a Runcam hybrid camera with an integrated video logger was utilized. This camera system operated using a spare UART on the flight controller, enabling remote control over video recording. Unfortunately, during the electronic overhaul, the camera logger was damaged, resulting in the complete shearing off of one of the pads. While this camera system would have been compatible with the vision-related modifications, we opted for more cost-effective alternatives. While a video system is not an essential requirement for a drone focused on sensors and autonomous navigation, it significantly improves the user experience. Having access to metrics such as satellite count and error messages proves highly useful for troubleshooting purposes. Therefore, I would recommend incorporating a First Person View (FPV) camera, a video transmitter (VTX), and a video receiver (VRX). Analog video transmission is used in this setup, which is compatible with most analog VRX systems. While any VTX and camera combination can be used, I utilized a Caddx Ratel 2 camera and a Wolfwhoop Q3-S video transmitter. As for the VRX, I utilized my Skyzone 04X goggles, although there are also VRX systems available with A/V outputs that can be connected to monitors accepting A/V input. With this vision setup, real-time viewing of errors and data becomes possible, and adjustments can be made through the OSD settings in iNAV. C. Final Wiring Diagram Figure 3: Flight Controller and video transmitter wiring diagram. Only part of the wiring that is not pictured is the speed controllers each being put in parallel with the battery and connected to the PWM pins pictured above in gray. Final Comments on Drone Build To conduct indoor motor thrust testing, it was necessary to disable the GPS and magnetometer functionalities. It is important to note that arming a drone indoors, especially of this size, is not recommended practice due to safety concerns. If future project replicators wish to reinstate these functionalities, they would need to enable GPS on UART 5 and add the ICM42605 accelerometer, QMC5883 magnetometer, and SPL06 barometer options in the sensors and buses settings. Using 3D printed frames for drones is not as common as using carbon fiber frames. This is primarily because 3D printed frames tend to be heavier than carbon fiber frames and may not provide the same level of stability expected by the flight controller. There are open-source drone frames available, as well as services like CNCmadness that specialize in cutting carbon fiber for drone frames. Considering the weight issue and underpowered motors inherited by the current state of the drone, it is currently incapable of flying. For those intending to replicate this project, it would be advisable to consider using prebuilt drones or components specifically designed for this type of system. Additionally, the open-source RC control link ELRS (ExpressLRS) is highly recommended, as it has been extensively developed by the community and is regarded as one of the best and most user-friendly control links in the market. Most modern flight controllers can be flashed with iNAV firmware, and modern 4-in-1 speed controllers simplify the wiring process compared to using separate speed controllers and battery breakout boards. Upgrading to modern flight controllers and speed controllers can streamline the build process and support more powerful motors, which are necessary for effectively spinning a 10-inch propeller and adequately lifting a drone of this weight. The sensor logger has been designed to fit a standard knuckle system that is commonly included in many drones currently available in the market. It can be adapted to various platforms. The casing model is solidly printed, allowing for the drilling of holes to accommodate wires going in and out of the microcontroller. If water resistance is required without conformal coating the microcontroller, the holes can be sealed with silicone or hot glue. Depending on the specific use case, a multirotor may not be the ideal platform for the required sensors, and a more traditional plane design might be more suitable. This flexibility is the reason the sensor system was designed to be removable and attachable to any platform that fits a particular use case. Arduino Sensor Pack A. Setup Before uploading any code to an Arduino Nano, there are two prerequisites that must be fulfilled. The first requirement is to install the appropriate drivers, which will be discussed in the following instructions. The second step involves selecting the correct processor. Please choose the old bootloader option, as depicted in the figure provided below. Figure 4: Arduino IDE processor setting for our project’s microcontroller. To determine if the Arduino board in use is not genuine, please refer to the two images displayed below. Observe the contrasting shades of blue and the varying styles of the reset button. The first image portrays a generic microcontroller, in which case the drivers provided in Appendix A should be installed. Additionally, please note that in the Arduino, the SCA (Serial Clock Line) corresponds to pin A4, while the SCL (Serial Data Line) corresponds to pin A5. Figure 5: Genuine Arduino (top) and our microcontroller (bottom). This distinction is important to keep in mind so that users have the proper drivers to be able to connect to their unit. If an uploading error is given after these steps are taken, it is possible that the Arduino is fried. B. Sensors Openlog This is the data logger that writes all of the measurements to a micro-SD card. Figure 6: Openlog data logger Pinout for connectors Pin on sensor connector function top SCL 2nd to top SDA 2nd to bottom 3 V power bottom gnd SGP30 This is the air quality sensor. It measures CO2, Total Volatile Organic Compounds (TVOC), and alcohol density. Figure 7: SGP30 air quality sensor. Pinout for connector Pin on sensor connector function top SCL 2nd to top SDA 2nd to bottom 3 V power bottom gnd Sensirion This is our humidity sensor. Figure 8: Sensirion humidity sensor. Pinout for connector Pin on sensor connector function left SCL 2nd to left gnd 2nd to right 3 V power right SDA Lidar This is used to measure distances. Figure 9: Lidar sensor. Figure 10: Lidar sensor pinout Electrical/Mechanical Hardware Assembly Procedure The Arduino is integrated within a screw terminal, as depicted in the image below. The sensors, on the other hand, are equipped with connectors featuring bare wires at their ends, allowing for easy connection to the terminal. For specific pinout details, please refer to Section VI of the Arduino Sensor Pack documentation. Figure 11: Microcontroller breakout board. Final Comments on Microcontroller integration A significant portion of the semester for the Arduino sensor pack team was dedicated to inventory management and validation of the provided hardware. They meticulously examined the datasheets of all the sensors to ensure accurate pinouts. To validate certain sensors like the SGP30 and openlog, they referred to code that had been previously published online. As a result, it was confirmed that the SGP30 sensor still functions properly, while the openlog encountered issues. In future iterations of the Arduino sensor pack project, it would be advantageous for the team to solder jumper cables onto the sensors. This would allow for easier integration with breadboards, significantly expediting the troubleshooting process and potentially aiding in diagnosing any problems with the openlog sensor. Once the issue with the openlog is resolved, the team can explore options such as designing a custom PCB to establish connections between the Arduino and the sensors, or creating custom connectors to achieve the same objective. ### Instagram fan makes a DIY wooden photo-booth Photographer and Instructables user Alexander Morris created a giant Instagram inspired photo-booth and published all the steps to make one yourself. It’s the perfect solution to pimp-up your parties! What’s inside of the box? An Arduino DUE coded to start the photo-booth sequence once the big red button is pressed and some other stuff: You can start exploring the tutorial on Instructables and hopefully Alexander will soon share the code on github.   For more detail: Instagram fan makes a DIY wooden photo-booth ### Catchin' time using Arduino This tutorial will show you how to build an interactive toy for children. This toy wants to give a boost to children to move and play with friends at home or in a park, instead of watching TV and playing videogames. Catchin' time is a project developed during our thesis in Ecodesign at the Polytechnic of Turin. This modular toy can be used for jumping (when you connect the elements together to create a carpet) or for running (if you wear it on your back, e.g. Tag or other traditional children's games). How does it work? Each element has white LEDs, a little buzzer to generate a sound and a capacitive sensor made of conductive fabric. When children jump on it or hit it with hands to turn off LEDs, buzzer rings and a wireless signal is transmitted which activates LEDs on another element! Playing at home The carpet is made by the union of several modules where the child can jump responding to a light pulse. Our tutorial allows the creation of two modules: ModuleA, used to send data and ModuleB, used to receive data. Playing outside Single modules can be worn by children and allow them to play traditional games in a technological way. When the child is picked up by his friends, the module on his back beeps and LEDs turn off, until he is touched again by a teammate. It is possible to create many different games starting from our modules, you have only to make the toy, use your imagination and create new sketches! Do you prefer Italian instructions? Follow us on Facebook :) Step 1: SUPPLIES To realize each element you need: Electronics - 1 Lilypad USB Atmega32U4 Board (Sparkfun Electronics - Robot Italy) - 1 micro USB connector (NB. You can use your smartphone's cable) - 1 Lilypad Xbee Shield (Sparkfun Electronics - Robot Italy) - 1 Xbee 1mW Trace Antenna Series 1 (802.15.4) (Sparkfun Electronics - Robot Italy) - 1 serial USB UART converter (like this FuturaShop) - 5 Female Header pins (Sparkfun Electronics - Robot Italy) - 1 mini USB connector (NB. You can use your camera's cable) - 10 white Lilypad LEDs (Sparkfun Electronics - Robot Italy) - 1 Polymer Lithium Ion Battery 3.7V (1000mAh Sparkfun Electronics - 1400mAh Robot Italy) - 1 Lipo Charger Basic – mini USB - 1 Conductive Fabric – 30x33 cm Ripstop (Sparkfun Electronics - Robot Italy) - 1 Conductive Thread Bobbin – 10 m (Stainless Steel) (Sparkfun Electronics - Robot Italy) - Copper wires - 1 resistor 220 ohm - 1 resistor 2.2 Mohm - 16 mm Speaker (Robot Italy) Materials (you can use materials and tools you have at home, or you can buy them in a DIY store) - 2 or 4 felt pieces – 23x23 cm (colours and numbers of pieces depend on chosen pattern) - 2 strips of Anti-slip pad - 4x18cm - Velcro - Grey shock adsorber pad – 20x20x1cm - Blue shock adsorber pad – 20x20x0,3cm - 2 small plastic cups to protect electronics - Thermal paper for iron – 23x23 cm - 2 pieces of canvas - 20x20cm - PVC clear wrap - 25x56cm - 2 kid singlets or waistcoats Tools - Scissors and cutter - Leather Hole Punch (for belts) - Pyrograph - Soldering iron - Fabric and plastic glue - Sewing kit - Iron - Sewing machine - Alligator clips - Electrical tape Step 2: PREPARE THE MODULE - Take a paper sheet and cut out the mask of the grey pad of the module (link Mask) - Use the mask to cut the grey pad with a cutter. - Take two rigid plastic boxes (we used the packaging of chewing gum but it would be better to use a more rigid shell). Cut the boxes as tall as the thickness of the grey pad, these boxes will be used as cover for electronics. The circular cuts in the grey pad could have different diameters, depending on the chosen coverage. - Engrave the grey pad with a pyrograph to obtain the necessary space for the 16mm speaker. - Select the desired felt pattern (link fairy tale pattern - link pets patterns), draw it on a piece of felt (23x23 cm) and cut it out. Pierce the felt in the position you want to insert the LEDs with a belt punch. Mark this holes on a 20x20cm canvas, in this way you know where to sew the LEDs. - Compose the pattern on the reverse side, lay down the thermal paper (the shiny side of the paper facing the felt), cover it with a sheet of baking paper (to prevent the fabric from sticking to the iron) and do the ironing. - When the felt is cooled, you have to sew the corners of the felt in order to create a cover for the module (that measures 20x20x1,5cm). - Take the PVC clear wrap, cut it in 2 parts in order to obtain 2 rectangles 25x28cm, fold one end of the long side of 2cm and sew it with a zigzag, to obtain a resistant board. Reinforce also the other rectangle, join the two sheets sewing them with straight stitching on the three free sides and finish with a zigzag on the same sides. The obtained case should be able to contain 20x20cm module. - Turn the obtained package on the back and glue two strips of anti slip pad (4x18cm) and two strips of Velcro (to hang the module on the back of the child). NB. Use a glue suitable for plastics - In order to join the modules together, you have to cut out 8 Velcro rectangles 2x1cm: then paste 6 of them along the perimeter of the envelope and the remaining 2 inside the reinforced edge (to close the module). (link Velcro). NB. Use a glue suitable for plastics Take 2 singlets (or 2 waistcoats) you have at home, and glue 2 strips of Velcro on the back, so that children can hang the modules. Step 3: PREPARE ELECTRONICS LED - Take the canvas with the positions of LEDs, fix them with the glue and sew them in series with conductive thread; you have to leave a long thread at the end of the seam. Check with the Blink sketch (basic example of Arduino sketches) if LEDs are properly connected. Capacitive Sensor - Take the conductive fabric, cut it out so that it doesn’t touch the threads of LEDs and sew its hems on the canvas with NO conductive thread. Sew the centre of the conductive fabric with the conductive thread to allow the passage of the electricity.   For more detail: Catchin' time using Arduino   ### BRUTE FORCING A MOBILE’S PIN OVER USB WITH A $3 BOARD Mobile PINs are a lot like passwords in that there are a number of very common ones, and [Mobile Hacker] has a clever proof of concept that uses a tiny microcontroller development board to emulate a keyboard to test the 20 most common unlock PINs on an Android device. The project is based on research analyzing the security of 4- and 6-digit smartphone PINs which found some striking similarities between user-chosen unlock codes. While the research is a few years old, user behavior in terms of PIN choice has probably not changed much. The hardware is not much more than a Digispark board, a small ATtiny85-based board with built-in USB connector, and an adapter. In fact, it has a lot in common with the DIY Rubber Ducky except for being focused on doing a single job. Once connected to a mobile device, it performs a form of keystroke injection attack, automatically sending keyboard events to input the most common PINs with a delay between each attempt. Assuming the device accepts, trying all twenty codes takes about six minutes. Disabling OTG connections for a device is one way to prevent this kind of attack, and not configuring a common PIN like ‘1111’ or ‘1234’ is even better. You can see the brute forcing in action in the video, embedded below. Source: BRUTE FORCING A MOBILE’S PIN OVER USB WITH A $3 BOARD ### Sleep n' Tweet Step 1: The Sleep n' Tweet Now I am lucky enough to work at the greatest company in the world as a University of Waterloo, co-op student. It might not even be a company you’ve heard of yet. They’re named Upverter and we are trying to change the way people design, build, share and collaborate on electronics. My job (also the coolest job in the world) is to find interesting problems that either have been or could be solved with electronics. I showcase what we do at Upverter and what the community is building. And I not only publish and share my experiences but I also design the solutions to these problems and open source my experience, discoveries and my designs. I’m helping to build the core content of a community sharing electronics. Like I said, its a pretty cool job. So one day, here I am at work - doing the coolest job ever, when an email gets sent around the office about a twitter competition. And so I started thinking to myself... What is a problem that twitter and an Arduino can solve? But its even more than that - what REAL problem can I solve, that hasn’t been solved before, or at least hasn’t been open sourced, using twitter and Arduino? I’m gonna come back to this, but at just that very moment here I am deep in brainstorming thought and my co-worker Jaco starts boasting about what a great night sleep he got, how much he loves his Wakemate, yadda, yadda, yadda. WAIT! It kinda goes without saying, but sleep is very important. All of us need it and for the most part do it differently. Problem is technology still has a ways to go before we can detect exactly what is happening to someone while they sleep without ruining their sleep, or wiring them up like Frankenstien. For example if you go to a professional to analyse your sleep you will be covered in sensors like EEGs, EMGs or EOGs. The up side is they measure everything your body does while you sleep. . . But the down side is they are far from pleasant to wear to bed. Maybe there is something here I can make a little bit better... As a result of bad tech, Actigraphy has become the more common method of getting a bit of insight into how people sleep and its really the only option when it comes to personal sleep tracking. For Actigraphy there are no head or chest sensors but just a device worn around the wrist on the non-dominant hand. The device normally contains an accelerometer which is then used to determine what sleep state the user is in. All of this data is then synced to your mobile phone, which you can also then upload to their website to analyse your movements during the night. Worst case = a fuzzy wrist widgit, best case keep on going! We have 12 more months of money and we need to use it to the max! So now that I’ve bored you with the background - I can imagine you know what I’m gonna say next... Why not build my own? Anyone can go buy a WakeMate. But how many people have built their very own, designed in the cloud and open sourced to the world? Zero! Well, that’s not true... I guess its at least one now! haha. And for the haters - as for why to open source it? Because I believe that someday the innovation that becomes possible from me giving back to the community will affect my life in a positive way. Something that never would have been possible otherwise. And thus, the Sleep n’ Tweet was born. The Sleep n’ Tweet is basically just an Arduino with an Ethernet shield that keeps track of your vitals (movement + heart rate) as you sleep. I haven’t push it nearly as far as it could go, think of it more as a working prototype than a polished product - but the potential is huge! It could be used to track vitals at any time and tweet anything you want according to whatever filters you put on it. It could be manufactured to be very, very small. And it could also be stuck to just about anything to check for movement and IR or flow changes - but for now we’ll stick to sleep.   Step 2: How it works Overview So here I’m going to give you a rundown of how the device works and functions so you at least understand what you’re about to make. If you’re just keen on having your own you can skip this section, I won’t be hurt if you do. I’m going to go all engineering lab report here. In 3...2....1....GO! So this device uses the Arduino for its base. The Arduino knows and does all once we program it. It doesn’t know a thing until we do that. On top of the base is the Arduino Ethernet shield which lets the Arduino talk to all the internets out there. Thus allowing the Arduino to communicate with Twitter with a little bit of programming. Steming from the Arduino are two sensor circuits; the accelerometer and the IR heart rate sensor. We’ll get to those in a minute though.Arduino For this project I used the Arduino Uno and an Ethernet shield on top of this. You need to make sure that pins 12 and 13 (point to pins in picture) are open because these will be used for communications between the Arduino and the Ethernet shield. Which sucks because pins 12 and 13 are my favourite to use. I don’t know what it is about them just like the numbers, but that took me 30 minutes to find out. So I used pin 9 to control whether or not the Infrared LED and red LED are active and I used pin 8 to read whether or not there was a change in the IR photo transistor. Pins A0, A1 and A2 were used to take care of the accelerometer. For power, I connected the 5v pin to the heart rate circuit and connected the 3.3v pin to the accelerometer circuit. That is basically how I hooked up the brains of the device. Still plenty of pins open for other things, maybe a moisture sensor to see if you’re sweating buckets in your sleep. Or a pressure sensor to see if you’re crushing a limb for hours and hours every night. Heart Rate Sensor The heart rate sensor is comprised of an op amp connected to an IR LED and an IR photo transistor. In short, the design works by shinning an IR LED onto your finger and receiving some amount of light through the photo transistor. When your heart pumps blood, the volume of blood in your finger will change, and so will the amount of light picked up by the photo transistor. This value change will be pretty small so we’ll need to kick the change up a couple of notches with an op amp. The one I’ve set up should roughly multiply the signal by about 10 000 times. Now what we can do with this amplified signal is pump it into the Arduino and read the changes as ones and zeroes. I’ve also hooked up a LED between the Arduino and the op amp so you can directly view the signal going into the Arduino. What I’ve done is measured the time in between heart rates and after 5 beats, I take the average to compose a beats per minute. I also have filters in place in the program to rule out any unreasonable frequencies. For example, if the heart rate comes out to be 100ms between beats, I know this reading is false because the human heart cannot beat 600 times per minute. I made the valid range 30BPM to 250BPM. I found the IR sensor works on multiple parts of the body, but best on the finger. Accelerometer I used an accelerometer pre-assembled from Sparkfun called the ADXL335, but you can build your own which isn’t that hard.(The schematic is here ) The accelerometer is directly hooked up to the analog pins of the Arduino. Constant readings are given about it’s orientation and I basically I detect the changes in the orientation and log them as movements. I had to do a couple of things in the program to combat irregularities such as twitches. I take a time frame in which the number of movements read is compared to the number of non-movements read. Then, I also change the sensitivity. So if you move by 5 it will detect a positive movement. Basically, more movement equals a higher change in number. Put it all together and you have a way of reading someones heart rates and movements. Lets move on to what you actually have to get to build this bad boy. Step 4: Schematics embed code: To make these I used the Upverter EDA tool - which is a pretty new and different, so I’m going to spend a minute explaining it. You should really just check it out at upverter.com, but for lack of a better analogy its Google Docs vs. Microsoft Word. There is a lot less feature bloat, it runs in your web-browser, its collaborative, its open source hardware focused, and its the first tool ever that allows me to share my designs on the web without resorting to PDFs. I can actually take the designs I build in Upverter and embed them into other sites a’la YouTube - which is very, very cool. My friends can then play with my design, export a BOM, order the parts or even fork it and make their own changes, and then something cool is possible... What I’ve designed becomes a building block of future electronics rather than a dead end project in my basement. Now Upverter is far from finished, and there are a lot of features coming down the pipe, but its to the point where we have tons of users signing up, forking content, creating parts, and just generally designing cool electronics. You should really check it out, join up and help shape the future of electronics design. You can directly take a look at the schematic and edit it here:http://upverter.com/mkiss/1645/Sleep-n'-Tweet/. Step 5: The Build The parts list I’ve given you are the best combination I came across. I encourage you to try and find a better one, but this one worked well for me. It’s a relatively simple circuit to build. The only thing that takes some time is setting up the heart rate monitor. One thing I found that worked perfectly was I had 8 connections going to the Arduino; exactly the amount of cables in a cat5 Ethernet cable. It’s no surprise what someone sleeping does when 8 small wires are hooked up to them. They rip them to shreds in the middle of their sleep. So I hooked up a female connector to my circuit so I could hook up an Ethernet cable between the Arduino and the sensor unit. Make sure the cable is not a crossover cable. This will cause many terrible things to happen. I was reading the output from my accelerometer and was only getting zeros and was scared I fried company property and they beat us here. Turns out the cable I snagged was a crossover and it really messed with my head. I received a minor beating, but nothing too serious. If you want to make sure your IR LED is working properly grab a camera. The human eye is incapable of detecting IR light, but it will show up on any camera as a bright whitish purple.A couple of things I found were flattening the 1uF capacitors really lowered the profile of the device so I could get it into the plastic case I found. Without doing this the device will jab you when you sleep. I used a hack saw to trim the PCB down to a reasonable size so I could fit everything in the case and used some nice wiring to extend the reach of the IR sensor. I then soldered the components all together and that’s all there was to do. I hot glued the wires to the top of the PCB too so they wouldn’t break off. When I first had my boss sleep with it he mangled the wires and broke a few. So I lathered the hot glue on the connectors to Zak proof it. I was also fiddling around with the sensor when the wire snapped and it was a real pain to get it back on so I recommend gluing the top. Even though it doesn’t look the prettiest, it prevents a lot of pain, suffering and loss of time. For more detail: Sleep n' Tweet   ### Password access with arduino ~~ The complete kit for this tutorial is now for sale at www.razvantech.com   Get one! ~~ This instructable will show you how to make a pass-code lock system using the Arduino Mega board. Whenyou type the right code, an LED lights up an the servo moves to open a lock. What you will need: --->one Arduino Mega (the arduino uno or duemilianove does not have enough digital pins for this project) --->one LCD module --->one Keypad --->one Battery pack (or you can use the USB cable and PC power) --->one 10K Ohm potentiometer --->four 10K Ohm resistors ---> Breadboard ---> hookup wire --->one servo Step 1: Wire the LCD to the Arduino The LCD module has 16 pins. First of all, connect pins 1 and 16 of the LCD to the ground rail on the Breadboard Then connect pins 2 and 15 of the LCD to the +5v rail on the breadboard Now connect the ground rail(should be blue) of the breadboard to a ground pin on the Arduino; Connect the +5v rail of the breadboard(this one is red) to one of the +5v pins on the Arduino board. Now comes the contrast potentiometer which has to be connected to pin 3 of the LCD. The potentiometer will have 3 pins. Take the middle pin and connect it to pin 3 of the arduino with hookup wire. Connect the othere two pins one to +5v and the other to GND(ground). The order does not matter. Now let's do a test: power up the arduino. The LCD should light up. If it does then Great! If the LCD does not light up then turn off the power and check the wires. Never change, move, or take out wires from the circuit board when the Arduino is powered up. You may permanently damage the Arduino. If the light works rotate the potentiometer all the way to the right and all the way to the left until you see 2 rows of black squares. That's the contrast. Now take out the power and let's hook up the LCD to the Arduino with the signal wires so we can display something on it. Ready? Let's go! Connect the pins as follows: LCD Pin 4 --> Arduino Pin 2 LCD Pin 5 --> Arduino Pin 3 LCD Pin 6 --> Arduino Pin 4 LCD Pin 11 --> Arduino Pin 9 LCD Pin 12 --> Arduino Pin 10 LCD Pin 13 --> Arduino Pin 11 LCD Pin 14 --> Arduino Pin 12 And that should do it for the LCD circuit. A test code for the the LCD: temporary. #include // initialize the library with the numbers of the interface pins LiquidCrystal lcd(2,3,4,9,10,11,12); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("hello, world!"); } void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 1); // print the number of seconds since reset: lcd.print(millis()/1000); } Copy and paste it in an arduino environment window, make sure you have the board and serial port set correct and click UPLOAD after you plug in the usb with the arduino. You will see the TX and RX led's blinking, that means the code is going to the arduino. push the reset botton once on the arduino, tune the contrast, and you should see Hello World displayed. Congratulations! You've got the LCD working! :) Step 2: Wire the Keypad to the Arduino OK. Now that we're done with the LCD and we got it working, it's time to connect the keypad to the arduino. This can be a little tricky depending on what type of keyboard you are using. In my case, I used a 3x4 keypad that I had for some time. If you have a keyboard that is made especially for connecting to an arduino, then it's easy. You just look at the datasheet for it and it tells you exactly how to hook it up. If you have a keypad and you have no datasheet for it then hang on cause I was in the same situation. Mine had on the back a diagram that shows you which pins are connected together when you press a certain key. If you don't have that, you will have to use a multimeter and figure out which pins are connected together when you press each key. To do that, take your multimeter and set it on continuity(the diode symbol). Then put the test leads on pins 1 and 2 of the keypad. Now press every key until you get continuity. Take paper and a pen and write down the key(ex:1, 2, #) and the two pins(ex: 6[1;2]). Do so for every key until you get all of them figured out. Make a table: 1=1+5 2=1+6 3=1+7 4=2+5 5=2+6 6=2+7 7=3+5 8=3+6 9=3+7 *=4+5 0=4+6 #=4+7 That is what I got. Whatever you get, if you write down the keys in that order you will see the logic in it. From my table I can see that the row pins are 1,2,3,4; and the column pins are 5,6,7. Now plug the pins of the keypad in a breadboard and let's start connecting it. Connect the pins for rows 2 and 3( in my case pins 2 and 3) to +5v through 10K Ohm resistors. Do the same with the pins for column 1 and 3 pins( in my case pins 5 and 7). If you have an arduino mega, connect the keypad as follows: Keypad pin row1--> arduino pin 25 Keypad pin row2--> arduino pin 24 Keypad pin row3--> arduino pin 23 Keypad pin row4--> arduino pin 22 Keypad pin column1 --> arduino pin 28 Keypad pin column2 --> arduino pin 27 Keypad pin column3 --> arduino pin 26 (The arduino uno does not have enough digital pins so it does not fit this project.) That should do it for the keypad. :) we're one step closer to finish. Hang in there. :) Almost done. Step 3: Connecting the servo OK, the servo is very simple. It has 3 wires: Red, Yellow(or white or orange), and black. Connect the red wire to +5v, the black wire to GND, and the middle wire to digital pin 8. That's it for the servo. Step 4: Preparations for coding Before we put in the final code we have to make some modifications. https://docs.google.com/leaf?id=0B8GceIlOmvRoNWZmNWExYTMtYjVmNS00MzE5LWFlMWQtNDM3MTY1MTcyZTUx&hl=en_US G o to the link above and download the libraries: keypad and password. They are two files. take the files and put them in /Arduino/Libraries. if the download does not work for bizarre reasons, go to: http://arduino.cc/playground/uploads/Code/Keypad.zip http://arduino.cc/playground/uploads/Code/Password.zip   Read more: Password access with arduino ### SOLAR TRACKER ARDUINO PROJECT Overview: The solar tracking device is designed to ensure that a flat panel with a solar cell is constantly aligned with the movement of the sun across the sky. It utilizes two light dependent resistors (LDRs) positioned on opposite sides of a fin to measure the light levels. By comparing the readings from the LDRs, the Arduino can determine the side that receives more illumination and adjust the position of the servo connected to the panel accordingly. The servo will rotate the panel until the two detectors have equal light levels. This Arduino project is an excellent combination of sensors and servos, incorporating logic that can be fine-tuned, and it serves a practical purpose in the field of clean energy. Background: Solar panels are most effective at generating electricity when they receive direct sunlight perpendicular to their surface. A solar tracker is a device that adjusts the position of the panel to continuously face the sun, maximizing energy production. By rotating the panel along one or two axes (altitude and azimuth), the tracker ensures that the panel is always aligned with the sun's position in the sky. This is particularly important for concentrating or focusing collectors that require precise alignment with the sun to function optimally. The solar tracker described here is a single-axis mount designed to track the sun's movement from east to west. It features a rotating axis directed towards the North Star, known as an equatorial mount. This configuration allows the tracker to follow the sun's path with a single rotation. In the field of Earth science, it is observed that the sun moves across the sky at a rate of 15 degrees per hour due to the Earth's rotation. During winter, the days are shorter, and the sun rises south of east, sets south of west, and has a low noon angle. In contrast, summer days are longer, and the sun rises north of east, sets north of west, and has a higher noon angle. The peak noon angle for the sun on the equinox is 90 degrees minus the latitude. At the summer solstice, it is 23.38 degrees higher than the equinox angle, and at the winter solstice, it is 23.38 degrees lower. Research Connection: Scientists and engineers are trying to increase the efficiency of solar cells and decrease the expense. Trackers were considered practical when solar cells were very expensive. Now prices have come down so much that the emphasis is on large areas of fixed panels and on covering all available building surfaces with panels. Concentrating solar thermal collectors use hundreds of mirrors which rotate to reflect light to central power tower. Solar thermal trackers are still relevant because they have the potential to store energy with molten salts for several hours after sun down.  This helps deliver solar generated power in the evening when demand peaks. NGSS Standards: MS-PS3-3 Apply scientific principles to design, construct, and test a device that either minimizes or maximizes thermal energy transfer.* MS-ESS1-1 Develop and use a model of the Earth-sun-moon system to describe the cyclic patterns of lunar phases, eclipses of the sun and moon, and seasons. 4-PS3-4 Apply scientific ideas to design, test, and refine a device that converts energy from one form to another.* HS-PS3-3. Design, build, and refine a device that works within given constraints to convert one form of energy into another form of energy.* Materials: Arduino board, power supply, USB cable, 2 light dependent resistors (LDR) with the same resistance range Two 10K resistors Servo Cardboard, balsa, straight pins, wires, mounting screws Introduction To familiarize the students with the movement of the sun across the sky and its seasonal variations, review the concept of the sun's apparent motion throughout the day and throughout the year. Help them understand that since the Earth completes a full rotation of 360 degrees in 24 hours, the sun appears to move across the sky at a rate of 15 degrees per hour. Engage the students in a mathematical exercise to demonstrate this relationship. Next, encourage the students to develop design requirements for their solar tracking device. This may involve specifications such as the device rotating 15 degrees per hour to keep the solar panel aligned, adjusting both the altitude and azimuth angles, and resetting its position from the previous night in preparation for the next morning. By establishing these design requirements, the students can lay the foundation for creating their own functional solar tracking devices. Assembly Connect each light dependent resistor (LDR) to a power supply of 3 or 5 Volts and to Pin A0 for one LDR, and connect it to a 10K resistor that is connected to ground. Connect the other LDR to Pin A1 and also to a 10K resistor connected to ground. This setup forms a voltage splitter, which provides variable voltages to the analog inputs based on the amount of light detected by each sensor. To connect the servo, attach the brown wire to ground, the red wire to 5V, and the orange wire to digital pin 9. If you are doing this as a class activity, it's a good time to brainstorm a pseudo-code description of the program's functionality. The basic logic would involve checking if the value from the left LDR is greater than the value from the right LDR, in which case the servo should turn one way, and if it's the opposite, the servo should rotate the other way. It's important to introduce a tolerance factor to account for small differences and prevent jittering due to fluctuating sensor measurements. Convert the pseudo-code into actual code, starting with an example from the Arduino IDE library such as "Servo". Load the program onto the Arduino board and test it to ensure that the servo responds correctly to light variations detected by the LDRs. If troubleshooting is needed, you can use the "digital write" function to check sensor values and the if-then statement. Once you have confirmed the functionality on the breadboard, you can proceed to build the complete apparatus. Attach a piece of balsa to the servo mount arm using pins inserted through a hole into the end grain of the board. Mount the two LDRs on either side of the shading fin, which can be made from cardboard or balsa. Pass the leads of the LDRs through the appropriate holes for accessibility from the back. Connect thin, flexible wires to the LDRs to minimize resistance during rotation. Cut a box diagonally and mount the top part by pressing a pin into a balsa strut at the top, and secure the servo using a pin and struts at the bottom. Set the axis angle to match your latitude. To mount the Arduino, use small bolts to attach it to the side of the box, allowing for easy removal without causing damage. It is possible to wire this design using only the Arduino inputs without the need for a breadboard (insert the resistors into the A0 and A1 holes along with the LDR leads, and connect the resistors to ground). Finally, test your finished apparatus. Adjust the delay in the code to make the response faster, and modify the tolerance value to enhance stability when the optimal position is reached. Code Example //Single axis solar tracker program #include // loads the servo library Servo myservo;  // create servo object to control a servo int pos = 90;    // variable to store the servo position 0-180 int sensorPin = A0;    // select the input pin for the potentiometer int sensorPin2 = A1; int sensorValue = 0;  // variable to store the value coming from the sensor int sensorValue2 = 0; int diffval = 0; int errorval = 15; void setup() { myservo.attach(9);  // attaches the servo on pin 9 to the servo object //Serial.begin(9600); // uncomment if you need to measure outputs with the serial monitor. } void loop() { sensorValue = analogRead(sensorPin); sensorValue2 = analogRead(sensorPin2); diffval = sensorValue – sensorValue2; if (abs(diffval) > errorval) { if (diffval > 0) { pos = pos + 5; } else { pos = pos – 5; } myservo.write(pos); delay(100); } ### ELEKTOR ARTICLE: LED BOOSTER FOR MICROCONTROLLERS There’s many a time when you want to connect a white LED to a microcontroller operating from a 3 V supply voltage. Unfortunately, this doesn’t work and your nice white LED only lights up feebly or not at all. Why does it work perfectly with red and green LEDs, but not with white? A bit of data sheet research reveals the reason: white LEDs have a forward voltage of 3.2 V, so a 3 V supply is simply not enough to let them light up properly. The advice you often see in online forums is to use a boost converter to generate a higher voltage, along with a transistor switch to control the LED. For just a single LED, this seems like a lot of overhead. The good news is that there’s an easier way. And it only needs one inexpensive component: an inductor, which costs next to nothing.  Operating principle of a boost converter Take an inductor L (a coil) and connect one end to the input voltage UIN and the other end to a switch S tied to ground. When the switch S is closed, a gradually rising current flows through the inductor L, creating a magnetic field. When the switch S is opened a bit later the magnetic field collapses, generating an inductive voltage over the coil (Figure 2), the same as an ignition coil in a car. Read more: ELEKTOR ARTICLE: LED BOOSTER FOR MICROCONTROLLERS ### Make Your Pet Dishes Tweet Using Arduino You give your pets everything: Food, water, a home, toys, and love. Why not give them a twitter account? This project allows you to monitor your pets' eating habits and receive alerts when their supplies are low. It's also a cute, fun way to learn how to interact with the Arduino, Twitter, sensors, and Ethernet. Let's get started! Step 1: The Parts Here is the part list I used to make it work. Depending on your individual needs, you may substitute the scale, amplifier, or water sensor. An Arduino Uno (available at Adafruit here ) An Arduino Ethernet Shield (Also at Adafruit here ) A cheap digital kitchen or postal scale ($20 at Bed Bath and Beyond) for the strain gauge. An instrumentation amplifier to boost the strain gauge output. I used a $3 INA126PA from Jameco. A water level sensor. For ease of use, I chose the this one from Jameco. A prototyping board, prototyping shield, or ability to create circuit boards. A 5V USB power supply and USB A-B cable. Something to protect your kit from the pets. I used a cheap plastic storage bin. A couple resistors, some spare parts from around the house, and some creativity. There are alternatives to using the Ethernet shield posted by other entries to the Make it Tweet challenge. Check those out and see which method you like more. If you like their projects, vote for them!   Step 2: Science break: What is a strain gauge and amplifier? The strain gauge is a metal bar with a series of four resistors on it making a wheatstone bridge. As the bar flexes (and it flexes VERY little) the resistance over the bridge changes a tiny amount. An electronic device can detect that change and, after some math, return the amount of weight on the bar. The change is so miniscule that the Arduino cannot detect it by itself. That is why the INA126PA amplifier was used. The amp can detect the tiny changes and boost them to levels that the Arduino can read. In my code, it's obvious that I "cheated" at much of the math. Instead of trying to detect the actual number of grams present in the bowl, I simply captured the analog data from the amplifier and watched how it changed between an empty bowl and increments of weight up to a full bowl. At these levels, the readings reported a linear result from 587 to 599. While this is very low resolution, it's enough to report a relative percentage from "empty" to "full" using the map() function in the Arduino IDE. In this project, I used a metal tray "lid" from an IKEA storage bin and screwed it to the plastic base after removing the glass. This holds the bowls.   Step 3: The Water Sensor This particular water level sensor was a perfect choice. It has three wires that connect to each other based on where the float ball is. This provides exactly three states: white+black, white+red, and red+black. In this kit, I only used the "bottom" state and (with a resistor) used the same code as the "example Button" sketch in the Arduino IDE. If the ball falls down to the bottom point, two wires are connected (like a button) and it reports the change to the Arduino. I used pieces of an Erector set and a zip-tie to hook the sensor to the bowl.   Step 4: The Wiring There are four main components to this project: Arduino pins (labeled on the Arduino) Scale (Red, white, blue, and black are typical from these) The INA126PA (There's a notch near Pin 1 and then count up counterclockwise) The Water Meter (Red/white/black) Instead of providing a big schematic that takes a while to read, I'll just give a simple device-by-device wiring. The Amplifier and Water Sensor both have datasheets explaining each pin. See Step 1 for those links. Strain Gauge: (1) Red labeled E+ (to +5V) (2) White labeled V+ (to INA126PA pin 2) (3) Blue labeled V- (to INA125PA pin 3) (4) Black labeled E- (to ground) INA126PA (1) Resistor to 8 (to set sensitivity - I used 220 ohm) (2) V+ on INA126PA (3) V- on INA126PA (4) to ground (5) unused (6) Output (Arduino A0) (7) +5V from the Arduino (8) Resistor to 1 Water sensor Red: to +5V on the Arduino AND to a 10k resistor to ground. White: To Digital 3 on the Arduino Black: Unused. Step 5: Arduino + Twitter + Ethernet fun A neat character named Neocat made the Arduino Twitter Library. Instead of storing your user ID and password in Arduino code, it issues a token to use the Twitter API. This token can be revoked at any time which is good if you accidentally post your whole code WITH the token to somewhere. Yes. I did that. Oops. The difficulty I found is that it only accepts char[] arrays as tweets, so a character array must be declared then populated. Since my code generates Strings, I had to convert the String to a character array before passing it off to my Twitter function. Here's what I added to the example code to make it a function. The Serial.print lines are there just to help with debugging. I also initialized the variable at the top of the sketch with char msg[125]; // make a nice fat buffer (125 characters) for tweets   For more detail: Make your pet dishes tweet Using Arduino   ### BRINGING A BAOFENG INTO THE CYBERPUNK 2077 UNIVERSE You’ve got to love the aesthetics of dystopian cyberpunk video games, where all the technology looks like it’s cobbled together from cast-off bits of the old world’s remains. Kudos go to those who attempt to recreate these virtual props and bring them into the real world, but our highest praise goes to those who not only make a game-realistic version of a prop, but make it actually work. Take the Nokota Manufacturing radio from Cyberpunk 2077, for instance. [Taylor] took one look at that and knew it would be the perfect vessel for a Baofeng UV-5R, the dual-band transceiver that amateur radio operators love to hate. The idea is to strip the PCB out of a Baofeng — no worries, the things cost like $25 — and install it in a game-accurate 3D printed case. But this is far from just a case mod, since [Taylor]’s goal is to replace the radio’s original controls with something closer to what’s in the game. To that end, [Taylor] is spinning up an interface to the stock radio’s keypad using some 7400-series bilateral analog switches. Hooked to the keypad contacts and controlled by a Mini MEGA 2560 microcontroller, the interface is able to send macros that imitate the keypresses necessary to change frequencies and control the radio’s settings, plus display the results on the yellow OLED screen that seems a dead-ringer for the in-game display. The video below shows some early testing of the interface. While very much still a work in progress, we’ve been following [Taylor]’s project for a week or so and he’s really gaining some ground. We’ve encouraged him to enter this one in the Cyberdeck Challenge we’ve got going on now; it might not have much “deck” going for it, but it sure does have a lot of “cyber.” Source: BRINGING A BAOFENG INTO THE CYBERPUNK 2077 UNIVERSE ### Animatronic Green-Winged Macaw Papercraft Hello everybody! This macaw was part of a work of biology at the college of my daughter, who was attempting to educate people not to buy wild animals. This beautiful animal, natural tropical forests of South America, is highly coveted by smugglers. In captivity, unlikely to receive necessary care. I did this and the other animals as if they were being bred in captivity, reproducing their sorrow and ill-treatment with some simple changes in papercraft and pasting a bit crooked and crumpling the paper. However, if you make one, can portray the beauty of this animal simply by pasting the paper as the assembly instructions. Videos - Using R / C radio to determine the limits of the servo and test the skeleton: &amp;amp;amp;lt;br /&amp;amp;amp;gt; With arduino: &amp;amp;amp;lt;br /&amp;amp;amp;gt; Materials needed: - Papercraft download (free): http://cp.c-ij.com/en/contents/3157/green-winged-macaw/index.html - 16 sheets A4 - A clothes-peg - Tree of a 6 inch screws with nuts - A piece of copper wire about 20 cm - A standard servo and a mini servo - 2 servo extension cables - A piece of balsa wood (15 x 15 cm) * can also use thick cardboard - A piece of Styrofoam - a piece of velcro (10x 5 cm) - An Arduino - Welding, pieces of wire (I used a cable network), breadboard, glue, hot glue,  scissors, etc ... Step 1: Assembling papercraft : First, we print, cut and assemble the papercraft Assemble the following parts and book: Head - 1,2,3 and 4 Tail - 5.6 e1 Torso - 8 * Tail and torso together assembling the piece 9 and book Thighs - 10 and 11 Paws -  22, 25, 23 and 26 Wings - right, left and 16 12.13, 14.15 and 17 * Join the wings with the number 18 and book Step 2: Assembling the skeleton The basis of the macaw was made up half of a clothes peg, supported with two screws, as shown. Measure the distance between the feet and make holes with a drill. For each foot, cut two pieces of copper wire and weld nuts. The standard servomotor serves to raise the neck of the macaw and was attached to a piece of balsa wood, as figure and rod arm movement has taken place with the metal of the clothespin. The mini servo moves the head and was glued directly on the arm Step 3: Assembling Macaw Glue parts 10 and 11 in number 9, forming the thighs and enter parafuzos, screwing in the preacher and put his paws. Place the nails in pieces of copper and set with the help of hot glue. Servos were fixed upon the peg, getting a good balance.   For more detail: Animatronic Green-Winged Macaw Papercraft ### BROADCOM AFBR-S4N33C013 IS A SILICON PHOTO MULTIPLIER The Broadcom® AFBR-S4N33C013 is a single silicon photomultiplier (SiPM) used for ultra-sensitive precision measurement of single photons. The active area is 3.0 × 3.0 mm2. The high packing density of the single chips is achieved using through-silicon-via (TSV) technology and a chip-sized package (CSP). Larger areas can be covered by tiling multiple AFBR-S4N33C013 CSPs almost without any edge losses. The protective layer is made by a glass highly transparent down to UV wavelengths, resulting in a broad response in the visible light spectrum with high sensitivity towards blue- and near-UV region of the light spectrum. The AFBR-S4N33C013 SiPM is best suited for the detection of low-level pulsed light sources, especially for the detection of Cherenkov- or scintillation light from the most common organic (plastic) and inorganic scintillator materials (for example, LSO, LYSO, BGO, NaI, CsI, BaF, LaBr). This product is lead-free and compliant with RoHS. Key Features High PDE of more than 54% at 420 nmChip-sized package (CSP)Excellent SPTR and CRTExcellent uniformity of breakdown voltage, 180 mV (3 sigma) Additional Features Excellent uniformity of gainWith TSV technology (4-side tileable), with high fill factorsSize 3.14 × 3.14 mm2Cell pitch 30 × 30 μm2A highly transparent glass protection layer Read more: BROADCOM AFBR-S4N33C013 IS A SILICON PHOTO MULTIPLIER ### USB Mouse Made Out Of A Wii Nunchuck This instructable will describe how to convert a Nintendo Wii Nunchuck controller into a USB 2-button mouse using a Teensy USB.  The Teensy USB is a very user-friendly development board that can be programmed in an Arduino environment. The Teensy USB development board and necessary software are available at www.pjrc.com Check out the final product in action! <br /> http://www.youtube.com/watch?v=YBNEImY_uzQ Step 1: Materials This is what you'll need: Components: -  Nintendo Wii Nunchuck Controller, available at various retailers -  Teensy 2.0 USB Development Board, available at www.pjrc.com -  USB cable, available at www.pjrc.com -  Breadboard (for prototyping), available at www.sparkfun.com -  22 Gauge Wire, available at www.sparkfun.com -  Solder, available at www.sparkfun.com Aside from the components listed above, you should have access to various tools such as a soldering iron and ancillary hand tools. Additionally, you should have basic soldering skill and working knowledge of the Arduino environment before embarking on this journey. Step 2: Nunchuck disassembly Remove the two screws on the underside of the Nunchuck controller using a tri-wing screwdriver and un-clip the top shell of the Nunchuck to expose the electronics. Remove the electronics and un-clip the two hooks of the white molded plastic part at the center to access the electrical connectors of the x and y-axis potentiometers. Remove the flexible membrane to access the electrical connectors of the C and Z buttons. The middle connection (red wire) is the Z button and top connection (black wire) is the C button. Step 3: Prototyping on Breadboard As good practice you should always prototype your project on a breadboard. The Teensy 2.0 comes with optional header pins making prototyping a breeze. Connect the Teensy controller to the inputs of the Nunchuck controller in the following manner: Teensy              Nunchuck GND                  Ground (each potentiometer and buttons) +5V                    5 Volts (each potentiometer) F0                      X-axis potentiometer output F4                      Y-axis potentiometer output D2                     C button D3                     Z button Once you've connected everything per the table above, you're ready to program. In addition to putting the attached code into the Arduino window, make sure the settings are correct for this project. The board should be identified as "Teensy 2.0" and the USB Type "Keyboard + Mouse". Upload the code and press the reset button on the Teensy. Play around with the joystick and both buttons to confirm everything is working the way it should. A simple mistake would be to mix up the X and Y directions or the C and Z buttons, but that can be easily fixed by swapping the connections on the breadboard (another good reason you should always prototype everything). teensy_mouse_clean.pde1 KB For more detail: USB Mouse Made Out Of A Wii Nunchuck ### Reddit Controller, USB Upvote/Downvote button Not too long ago I saw the “Awesome Button” video on the Make Magazine podcast. In the video Matt Richardson shows how you can take a Teensy development board and turn it into a simple USB keyboard. In his example everytime a button is pressed a synonym for the word “awesome” is sent to the computer. While this is a pretty neat project the idea of creating a simplified keyboard out of a few buttons is what stuck with me. This lead me to start creating my “Reddit Upvote/Downvote button”. Reddit is a website that has in the past few months taken over my life. Not unlike Digg it aggregates all the best stuff on the internet and makes it easy to consume. The way posts are sorted or brought to the front page on Reddit has to do with the number of Upvotes and Downvotes a post gets over time. Now while these voting options are usually toggled by clicking arrow icons on the webpage they can also be controlled using keystrokes after installing the Reddit Enhancement Suite. After I found this, all the stars aligned for my project. Step 1: Makerbotting a project box I started by sketching out a basic design enclosure and making some measurements for the parts I planned on including. The Teensy development board really is teensy so my project box ended up being pretty tiny. In the gallery below you can see the evolution of the project box. I started off with a pretty large box and scaled down to just big enough to fit what I needed. It’s pretty amazing to be able to print a box that fits your exact project dimensions in about 30 minutes. I also printed up and down arrows, the upvote arrow using red plastic and downvote colored blue with a Sharpie. As usual I’ve uploaded my most recent model to Thingiverse as STLs and Sketchup files. These can be downloaded and printed in the comfort of your own home (assuming you own a 3D printer of course). Step 2: Circuit design and Teensy programming Programming the keyboard functions on the Teensy is surprisingly simple. There are great instructions on the Teensy development board page for sending keystrokes to your computer and because the board identifies itself as a USB keyboard it works when plugged into a PC or Mac with no additional software! One note: to use the USB keyboard mode you must use the “Teensyduino” software which allows you to program the Teensy using the Arduino programming language and IDE rather than the native Teensy language. I’ve included the code in full at the bottom of the post, but to give a brief overview, when the upvote button is pressed the key combination “CTRL + SHIFT + A” is sent to the computer over USB, likewise if downvote is pressed “CTRL + SHIFT + Z” is sent to the computer. I defined these keystrokes in the Reddit Enhancement Suite manually because they seemed like a key combination that wouldn’t conflict with other programs (default is “a” and “z”).   For more detail: Reddit Controller, USB Upvote/Downvote button ### Make A Electric Turtle Robot Using Arduino Be sure to check out my new instructable , the 'little Tank'! Really nice tracked design complete with cut files! update: I've had so much response on this instructable, thanks to all. If you end up making one, please let me know! I'd love to put your work on my website! New new update - The Electric Turtle is going to the 2011 Makers Faire in New York with the LMR (lets Make Robots) exhibit!!! 5" robotic platform, setup for Picaxe or Arduino with sonar ranging mast. This one currently does obstacle avoidance. 90 degree radian etched into the top plate to make turn calibration far easier. Many battery configurations possible, including lipo (with a regulator) - the deck is spaced to accommodate a large range of power sources. Designed and made in response to the poorly made/designed commercial offerings - this thing uses I-Beam construction - you can stand on it. Nice platform to pickup and run with, applicable to many configurations and adaptable to multiple purposes.   Offset ranging mast is provided with cutouts for the ping (what I had on hand), but I put placement holes for several popular models on there as well - tried to make it as universal as possible. Standard IR sensors should fit if you choose to go that route. Motor configuration is for a Tamiya 70097 motor/gearbox combo - placement holes are in the chassis for either the high or low ratio build configuration of the gearbox. Wheels are Tamiya 70145's. Capability to use standard servo or micro servo with adapter plate (included). Here are laser cut parts kits if you'd rather not cut your own - Lets make robots! is an excellent resource for DIY robotics as well.   Step 1: Cut your parts electric_turtle_7251306.cdr455 KB electric_turtle_7251306.dxf696 KB electric_turtle.bas1 KB Step 2: Gather your materials To complete this instructable, you'll need:1. laser cut parts 2. qty 4 1.25" #6-32 screws (hardware store) 3. qty 2 .75" #4-40 screws (hardware store) 4. qty 4 2" #6-32 screws (hardware store) 5. qty 4 .5" #4-40 screws (hardware store) 6. qty 1 servo (standard or micro, standard recommended) and hardware pack that comes with the servo 7. qty 1 sonar or IR (PING used, others may be substituted) 8. qty 1 pair of Tamiya 70145 tires 9. qty1 Tamiya 70097 motor/gearbox 10. qty 1 Arduino, Picaxe or other microcontroller - this instructable uses the Picaxe 28x1 11. Wires, connectors, heat shrink If you'd like to keep the soldering to a minimum, just use male-male servo extensions for all of the hookups. This will limit your soldering to the 2 connections on each motor. The motors can also be connected with crimp connectors to eliminate all soldering, but I advise a hard soldered connection to the motors in any case. Soldering iron, multimeter, screwdrivers, etc... Standard disclaimer about not cutting your fingers off or sticking a hot iron in your nose.. Step 3: Wiring diagram / code for Picaxe This is the wiring diagram for use with the Picaxe, ping sonar, Tamiya 70097 motor / gearbox and the electric_turtle.bas code. Attached file as PDF for easier viewing.This diagram will work with the code as is, no changes to the code necessary. File is located below, electric_turtle.bas wiring1.pdf1 MB electric_turtle.bas1 KB   Step 4: Assemble your robot! This step is the most fun!Start with the sonar mast. You'll need 1 .75" screw, 2 .5" screws, 2 spacers and 3 nuts. Step 5: Servo / upper deck Attach servo to upper deck. You'll need 2 .5" screws and nuts. Step 6: Carrier Board / microcontroller Attach your microcontroller (Picaxe pictured) to your carrier board. You'll need .75" screws + nuts and 4 spacers. Step 7: Lower deck / servo risers / motor Attach the motor, risers and wheels as a unit to the lower deck. Use the screws and nuts that came with your motor for this step. Also install the fore / aft anti-tip screws and nuts at this time. Use 2 .5" screws + nuts.   For more detail: Electric Turtle Robot   ### LED Microcontroller Debug Module When it comes to debugging a microcontroller circuit, there aren't a lot of simple options.  Since a microcontroller circuit might have multiple things going on at the same time, measuring voltages with a DMM isn't an option.  Using an computerized In-Circuit-Debugger solution is expensive and elaborate, and time-consuming to set up.   People often resort to connecting banks of LEDs to the circuit, but this also takes time and if wired incorrectly, might mislead you about the issues you are trying to solve. Enter the Microcontroller Debug Module (MDM).  It is a device which simply transplants the microcontroller (MCU) to a separate unit, away from the breadboard.  It is connected by a 40-pin ribbon cable to a small PCB which takes the place of the MCU on the breadboard, transposing each pin directly.  No circuit modifications are required for the operation of the MDM.  On the module are 74LS541 8-bit Line Driver ICs which drives indicator LEDs for each of the 8 bits on each of the data ports on the MCU.  This chip delivers current for the LEDs without affecting the pin of the MCU itself.  The pin and the breadboard circuit have no idea the chip is there. My microcontrollers of choice are PIC18 family 28 and 40 pin PICs which I have designed this unit to be pin-compatible for.  Your unit can be designed for Arduino Atmel chips or any MCU you wish to use. This Instructable is mostly intended to inspire ideas and some circuit pieces to help you develop a MDM for your own favorite family of MCU. Also Please note the schematic and board layout are regarding Revision 0.3, it is far more advanced and has numerous corrections/features added to it, compared to Rev 0.1, which is photographed. Step 1: Schematic Design The schematic is large but fairly simple and can be broken down into some smaller parts. J2 is the 40-pin PIC socket, which connects pin-for-pin to the 40-pin IDE connector J8 is the 28-pin PIC socket, which will rest in between the 40-pin socket J3-J6 are arranged to form a 20x2 IDE cable connection for connecting the MDM to the PIC substitute board J7 is a header for running the MDM in a stand-alone configuration without power from the breadboard circuit Each port has a 74LS541 connected to it which buffers and supplies current for 16 LEDs.  A red LED has its cathode connected to the output pin and its anode ultimately connected to a +5V rail, and a green LED has its anode connected to the same output pin with its cathode connected to ground.  The result is that when the PIC pin goes high, the corresponding 74LS541 pin does the same.  When the pin is high the red LED has +5V on both sides of it, and thus will not light, but the green LED has +5V of potential on it now, and will light.  When the pin is low then the red LED now has +5V of potential across it, and the green LED has GND on both sides of it and will not light.  If the pin is rapidly switching from high to low, it will appear as if both LEDs are illuminated.  Both LEDs would appear lit only in the event that the MCU pin is rapidly changing states, or if the 74LM541 has been disabled. DSW1 is a DIP switch bank that allows the user to disable or enable the LED output ports if they so wish to.  It will reduce the brightness of the port LEDs if you are not using that port for anything, or if the port is being used as an analog input port.  When the pin is Tri-state then both LEDs will light up at 50% brightness.  Due to limitations of the 74LS541, when the MCU pin is displaying tri-state, it will display as high.  The only time that the output of the 74LS541 will go tri-state is when the enable/disable switch for that chip is enabled. An oscillator is included on the board, and I recommend it be used because the crystal should be as close to the MCU as possible, and it is not a good idea for it to have to go through a ribbon cable to get there.  It might also cause unwanted noise in the rest of the circuit and could affect ADC readings. an ICSP header is included on the board, and can be enabled/disabled from the MCU pins with SW1. Please press the "i" symbol at the top corner of each image to view it in full, readable resolution.  Thank you. Step 2: Parts List Additional Parts information is available in the attached .xls file.Parts List: MDM PCB - 1 Piece MCU Substitution PCB - 1 Piece 74LS541 Tri-state buffer/line driver - 4 Pieces 5988170107F 0805 SMT LED GREEN 2V 20mA - 32 Pieces 5988110107F 0805 SMT LED RED 2.1V 20mA - 32 Pieces MC0805S8F330JT5E 0805 330 ohm SMT resistor- 64 Pieces CRG0402J10K/10 0805 10k ohm SMT resistor - 6 Pieces 08051C103KAT2A 0805 10nF SMT capacitor - 5 Pieces MC0805B104M160CT 0805 100nF SMT capacitor - 1 Piece MCDS04 4 position SPST DIP - 1 Piece 1N4148-TAP 1N4148 diode - 1 Piece 1n4148W 1B4148 diode SOD-123 - 2 Pieces MC9A12-4034 20x2 IDE connector - 2 Pieces MCLSS22 DPDT slide switch - 1 Piece M22-2512005 5 Pin header (row of 20) - 1 Piece MJTP1230 Reset pushbutton - 1 Piece 4840-6004-CP 40 Pin IC socket 0.6" - 1 Piece 1-390261-9 28 pin IC socket 0.3" - 1 Piece BG095-03-A-N-D Socket for crystal - 1 Piece MC0805N180J500CT 18pF Capacitor for crystal - 2 Pieces SPC19951 40 PIN IDE Cable - 1 Piece MC34739 20 Pin header for Sub PCB - 2 Pieces PIC_DEBUG_MODULE-BOM_rev_0.3.xls36 KB   Step 3: PCB Layout I wanted to make my unit as small as possible so I squeezed it as much as I could, using SMT components, into a board that is about 3.5" by 2.5".  It would be difficult, but not impossible, to make it smaller still.  I am happy with the size however. I used the Proteus software package to develop my drawings and layouts.  Eagle or another software package will work just as well. If you want to develop your MDM using through-hole components you might have a difficult time making it a manageable size, and might have some further difficulty if you want to use a single-side PCB.  I have my PCBs done by a company called Seeed Studio for relatively cheap, since this kind of production is virtually impossible to do at home. This board would make a great SMT soldering practice project.  The 0805 package size isn't bad once you read some various techniques on the internet and test them out, and pick the one that works for you.  Also a good hot iron with an appropriately small tip is important, and liquid flux makes life easier too. Step 4: Completed Unit in Action Once assembled the unit is ready to go.  It can be used as a stand-alone device to test code, or inserted into a breadboard or PCB using the MCU substitution board.  It gives an unparalleled visual connection to the circuit to allow you to develop code and debug issues at lightning speeds. The image of the MDM operating below is running a test program on the PIC which puts each pin of each port high one by one.  Port D and port P in the picture are disabled by the DIP switches, you can see that both LEDs are on and are dimmer than the LEDs on ports A and C below. A great idea would be to develop a standard Arduino with this kind of circuit integrated right on the board! I am always open to suggestions about how to make this better, or what other features it could benefit from.  Pleas feel free to send me a message or post a comment.  Thanks very much for reading. Source : LED Microcontroller Debug Module ### Wise Clock 3 - Arduino-based geeky alarm clock Wise Clock 3 is an open-source, highly hackable geeky clock that shows a lot more than the time. Its main function is to display user-editable quotations retrieved from an SD card (like those used in photo cameras). In addition, Wise Clock 3 can show the time in "Pong" mode or "Pacman" mode. It can also display the date, including the day of the week and the temperature. Another catchy function is to show a personalized message (e.g. "Happy birthday"). Wise Clock 3 can be also used as an alarm clock, as a scoreboard or as a countdown timer. To see the other features, please check out the "User manual", the last step of this instructable. Updated Sep 5, 2011 Convert Wise Clock 3 to Night and day clock as described here. The clock is shown in action here: Some technical details: - based on ATmega644P microcontroller; - open source, published, software and hardware; - user-programmable through a 6-pin FTDI cable (or breakout); - uses extremely accurate (+/- 2 minutes per year), temperature-compensated, real time clock chip DS3231; - multi-color (red, green, orange) display with 32x16 LEDs; - compatible and programmable with the Arduino IDE. Wise Clock 3 can be purchased as a complete kit, here . Step 1: The Wise Clock 3 kit - parts list The complete Wise Clock 3 kit includes (as shown in the photo 1): - a set of electronic components (see list below) and the PCB; - the 3216 bi-color LED display from Sure Electronics; - a pair of laser-cut transparent or smoky plexiglass plates; - a set of hardware parts (standoffs, nuts, screws, washers). Photo 2 shows the electronic components of the kit. They are: - PCB; - ATmega644P controller with Arduino bootloader (also programmed with the latest version of the software); - DS3231 real-time-clock (pre-soldered to the board); - SD card socket (pre-soldered to the board); - 40-pin socket for the controller; - 16MHz crystal and 2 capacitors 22pF; - CR1220 backup battery for RTC; - holder for the coin battery; - miniB USB connector; - 3V3 voltage regulator; - piezoelectric buzzer; - 9 resistors 10K; - 3 resistors 4K7; - resistor 100 ohms (optional); - blue LED (optional) - power indicator; - 4 right-angle micro push buttons; - 6-pin right-angle male header (FTDI connector); - 2 x 16-pin female headers (display connectors); - 3 decoupling capacitors 100nF. Step 2: Hardware - schematic and board Images of the schematic and the board are shown below. The Eagle files can be downloaded from here: schematic , board . The Wise Clock 3 board was designed to plug directly into the 3216 bi-color 3mm LED display from Sure Electronics . Therefore, there is no need for cables/wires when  connecting the board to the display. Note: The Wise Clock 3 board can connect and drive more than one display, as shown and explained here . The PCB has a small prototyping area that can be used to add components for future expansions, like photo resistor for automatic light dimming of the display, infrared receiver to control the clock remotely, tilt switch etc. Of course, all these new sensors will have to be supported in the software as well. The clock function is performed by the on-board RTC (real-time-clock) chip DS3231. This is far superior to (and more expensive than) DS1307, since it has a deviation of only +/-2 minutes per year, at most. The accurate time is kept even when the clock is not powered, due to the on-board backup battery. Step 3: Soldering Wise Clock 3 components The Wise Clock 3 PCB comes with the SD card socket and the RTC chip already soldered, and looks like in photo 1. To assemble the board, follow this process: 1. Place and solder the miniB USB connector; actually, since this connector is only used for power, only the two extreme pins (1 and 4) must be soldered; the middle two can be left untouched. Make sure the connector is solidly anchored to the board through the 4 lateral holding pads; there will be lots of mechanical tension when the power cable is plugged/unplugged. 2. Solder the 100 ohm resistor (brown black brown), indicated on the PCB as R14, then the LED, paying attention to its orientation. The shorter pin, the cathode, goes into the left (as you look at the PCB as in photo 2 below) hole. At this point, by plugging in the power cable, the LED should light up (photo 3). 3. Solder resistors R5, R6, and R7, all 4K7 (yellow purple black brown brown), as shown in photo 4. 4. Solder the rest of the resistors, all 10K, as shown in photo 5 below. Note that there are 9 resistors of 10K value (brown black orange): R1, R2, R3, R4, R9, R10, R11, R12, R13. 5. Solder the 40-pin socket, then the battery holder and the 4 buttons, as shown in photo 6. 6. Solder the 3 decoupling capacitors (100nF, labeled "104"): C3, C5, C8. Then continue with soldering the two smaller ones C1, C2 (both 22pF), as shown in photo 7. 7. Insert the crystal (the small, metallic, oval cylinder, with 2 pins, labelled "16.000" on its top) in its position on the left side of the microcontroller socket, indicated by an oval (see the above image). Orientation is not important for the crystal. Then insert the 3V3 voltage regulator (black, 3-pinned, semi-cylindric part labeled "L78L33ACZ") as indicated on the silkscreen by the half-cylinder on the right side of the microcontroller socket (its orientation is very important), then solder in place. Next solder the 6-pin male header, and then the piezoelectric buzzer (its orientation is not important). Look at the last picture (photo 9) of the final assembled board before soldering, to make sure you have these parts placed correctly. 8. (Photo 8) Insert the two 16-pin female headers on the back of the board (opposite to the parts side) and solder them on the top (parts) side. To get the best alignment possible on these headers, insert the 16-pin headers into their sockets (in the display), then solder the board on top. (This is similar to the way the male headers are soldered on an Arduino-shield.) 9. It is time to add now the preprogrammed ATmega644P microcontroller. Before inserting it in the socket, slightly bend both sets of its pins on a table, so that they become parallel. Position the chip carefully on top of the socket, paying attention to its orientation: pin 1, marked with an arrow (triangle), must be close to the upper side of the board. Push the chip firmly into the socket. Next insert the coin battery in the battery holder. The assembled board should look like in the last picture (photo 9) below Step 4: Mechanical assembly - attach display and enclosure The Wise Clock 3 PCB was designed to be plugged directly into the 3216 3mm LED display from Sure Electronics. But it can be also used with the 5mm version of the display, by using the provided 16-wire ribbon cable. To plug the board into the display, gently push the board into the connectors, after you properly aligned them (photo 3). Next step is to attach the simple enclosure, which is made of a pair of plexiglass plates, either 3mm smoky or 4mm clear, with the dimensions shown in photo 4. The DXF file, used for laser-cutting, is available for download here . The 2 plates are directly attached to the display, with the standoffs in the four corners. (The board fits snugly between the display and the back plate and does not need any other attachment or screw.) The longer standoffs go in the back of the display, and are screwed into the shorter standoffs placed in the front of the display. Note that the 4 washers provided are to be placed on the back of the display, between the standoffs and the display's board, essentially extending the longer standoffs.   For more detail: Wise Clock 3 - Arduino-based geeky alarm clock ### Make A Giant Leaf Planetarium Using Arduino Have you ever wanted a mini-planetarium for your room? Well now you can! This instructable will help you create a fairly portable planetarium leaf that you can put over a bed, a couch, or anywhere else in your house. All you need is an IKEA leaf canopy , some fiber optics, power LEDs, conductive thread, and a lilypad Arduino. Also, this leaf is HUGE. Step 1: List of Materials Unfortunately you can't order these leaves  from IKEA online. You have to actually go to IKEA. I suggest calling your local IKEA first and seeing if they have some (they almost always do). Otherwise, ebay occasionally has some. They cost about $15. In addition you'll need: 1) Lilypad Arduino : $20 2) >400 feet of 1mm fiber optic filament : $60-$70 3) Conductive Thread : $33/spindle, but you could get a smaller amount for $9 4) Six Power LEDs: Anywhere from $5-$10 each. Check on ebay if you want to buy bulk. Luxeon  LEDs are nice, but the ones I used are discontinued. Check up on your forward voltage depending on what voltage you run your lilypad (which has no current regulator). I ran mine on 3.7V and my LEDs had a forward voltage of 3.4V, so I didn't need a resistor (the lilypad can handle 40mA safely). 5) Battery / 3.7V Wall Adapter: I used these tiny li-pos  ($12) with a usb charger  ($10). It runs the leaf for 4-5 hours per charge. You can also by a wall adapter and use that to power your Arduino (just cut the chord and attach your power and ground lines or else get a coaxial converter). If you get a 5V wall adapter  ($6) add some resistors to your LEDs (like 40 Ohms. 100 Ohms to be extra safe with whatever LEDs you buy). 6) Green Fabric: Cheap at craft stores. You won't even need a square yard. 7) Velcro: Cheap at craft stores. 8) Small Clear Beads: Cheap at craft stores. 9) Hot Glue: Cheap at craft stores. 10) Sewing Needle and Scissors: Cheap at craft stores. 11) Green Gaff Tape: Cheap at craft stores. 12) Blue Painter's Tape: Cheap at stores. 13) Single Stranded Wire: Cheap 14) Electrical Tape: Cheap 15) Fine grained file or sandpaper: Cheap 16) Heat-Shrink big enough to hold ten 1mm fibers: Cheap 16) Solder and Soldering Iron: Expensive but hopefully you can access one! Remember to check ebay/online for cheaper prices!   Step 2: Light Base Hopefully you've already put together your leaf (it's fun and fast!) but now you need to make your lighting base. First cut out a piece of green fabric (13"x6") Next, sew your Arduino with conductive thread to one side. Make LED buttons to sew on to the fabric. This can be done by taking single stranded wires, stripping them, taking the naked wire and making loops. Solder the loops to the terminals of the LED. You can see the LED buttons in the fabric. Double check to make sure your power and grounds match up! You can make resistor buttons in a similar manner. Just take their leads, and swirl them into loops, and add a glob of solder. Also, be sure to use terminals 3, 5, 6, 9, 10, 11 on the lilypad (you need them in order for the code to PWM). It doesn't matter which lilypad version you have, use those terminals. Note: When sewing, make sure you go through each terminal/connector (whether it be a lilypad or LED) a lot (more than 3 times). You want to make sure they're well-connected and robust. You should also sew your velcro now (I did this later and regretted it). Take velcro strips and sew them onto the long ends of the fabric. If the velcro catchs on the cloth/thread, put a piece of blue painter's tape over it to prevent snagging. Load this code onto your Arduino. When you're done, you're lilypad should be able to twinkle your LEDs. You can also check if it twinkles with alligator clips too (like in the video). Step 3: Cut Fiber Optic Filaments Note: DO NOT USE ELECTRICAL TAPE FOR THE FILAMENTS. USE BLUE PAINTER'S TAPE. The electrical tape leaves black residue. I did this when I took my pictures, so they are a little misleading. Sorry! This was how I cut the pieces: 100" for 24 pieces 90" for 12 pieces 60" for 12 pieces 50" for 12 pieces Arrange the short, medium, and long pieces into bundles of 2. Then take about 5 of these bundles (of varying length!) and put them in some heat-shrink and make them into one big bundle of 10. If you melt the 10 fiber optics together (not with tape on them), it helps carry the light. You should end up with six bundles of 10 fibers. If your fiber optic bundle is good, it should be transparent and carry light. (You can check for this without LEDs as long as your environment is bright) Step 4: Attaching Bundles to LEDs THIS IS THE WORST PART. To be honest, you could probably buy plastic booties , but I just used electrical and gaff tape instead. Essentially, take a fiber optic fiber bundle and hold it over the LED. Make sure it lights up well. Add gaff tape to each bundle and attach it to the LED and fabric (use gaff first, it sticks well to fabric, especially cotton). Go over it with some electrical tape to cover the light, and them some gaff again to make it green. Do this for all the bundles. For more detail: Make A Giant Leaf Planetarium Using Arduino   ### Floppy drawbot Stuart and I wanted to design a project that would be a good introduction to upcycling electronics, robotics, arduino, art with maths/code. We came up with a drawing robot based on an old floppy drive. Bigups! jam jar collective full circle artsbristol.hackspace.org.ukAshish Derhgawen for this article http://www.codeproject.com/KB/system/floppystepper.aspxMore floppy drive info: http://www.interfacebus.com/PC_Floppy_Drive_PinOut.html   Step 1: Take apart the floppy   We need to get at the insides, so take off the lid and have a look inside. We need to remove the loading tray which can often be lifted out when it's in the eject position. Others have a latch or springs that need to be released. Have a look and work out what works for your drive!   Remove the top of the read/write head and put the screws back in so you don't lose them! Also, now is a good time to make the drive think that a floppy is loaded (otherwise it won't spin up the platter). So use some bluetack or glue down one of the microswitches on the left hand side. You could also bypass one by removing one and soldering a wire between the contacts. Keep hold of all the small screws and springs because they'll be useful in other projects!   Step 2: Wire up the floppy ControlCheck the "floppy drive A pin out" table on this page . We're interested in:   10: 0=motor enable drive 0 (when at 0v the motor will be spinning) 14: 0=drive select 0 (so that step and direction commands go to drive0) 18: direction (which direction to move the stepper) 20: step (pulse this to make a step) Note that all the odd pins are ground. Wire up the floppy cable like this: floppy pin 14 -> floppy pin 13 (this selects drive 0 as we tie it low by connecting to ground on pin 13)floppy pin 1 -> arduino ground (we need to connect the ground of the arduino and the ground of the floppy)floppy pin 10 -> arduino pin 4 (platter motor)floppy pin 18 -> arduino pin 3 (direction)floppy pin 20 -> arduino pin 6 (step) Power We also need to power the drive. I measured current draw and it peaked at 300mA. I did some research and it seems safe to power this from the 5v pin of the Arduino. USB has a maximum rating of 500mA for current draw and we're safely within that limit. If you have a floppy power cable then connect the Arduino ground to a black and Arduino 5v pin to the red cable. Otherwise you'll need to work out which is pin 1 (it might be marked on the drive) and then use the table floppy power connector to know which pins to connect where; pin1: 5v, pin2 or 3: ground. Turn on the power and check you get a light coming on somewhere at the front of the drive.   Step 3: Load up the software The fun part of the project is coming up with different software to make different shapes, but here is something to get you started:   https://github.com/mattvenn/arduinosketchbook/tree/master/floppyDrawBot Load it into your arduino Download the floppyDrawbot.pde and timer.pde files. Open floppyDrawbot.pde with the arduino editor and then add the timer.pde file like this: in the sketch menu, choose 'add file' choose the timer.pde file Then compile and transfer to the arduino. The drive should spin up and the arm start moving if it's all working! Have a look at the code to see what's going on - it's pretty straight forward. If it doesn't work Is the floppy powered up? They usually have an led that will be lit with power supplied. Is your wiring correct? If the platter isn't spinning, check the microswitches are properly pressed down.   Step 4: Enlarge the platter   Now that we've got the floppy drive under Arduino control, it's time to add drawing functionality!   The platter is a bit too small and uneven to draw on, so we boosted its size with a DVD. You need to find something tubular, about 3cm diameter and 2cm high. Put it in place and then check that the read/write arm can move fully in and out. If your tube is too big then you'll have to remove part of the lower read/write head. We did this with the dremel's grinding attachment. You want everything as central and level as possible so it's better to hold stuff in place and then glue it after.   Step 5: Add the drawing arm and pen holder   The read/write head's travel is only about 1.5 cm long, so we added a lever to get greater pen movement.   Drawing arm and pen holder We used the metal from the top of the floppy and a dremel with grinding attachment to cut out an arm. Look for a piece that has a hole for your pen to stick through. You might be able to avoid drilling a hole by being clever about your reuse! Then we held it in place with a spindle and sprung loaded it with one of the floppy's old springs. Extend the read/write head To give us more movement, we can extend the read/write head out with another small piece of metal. This screws on to the read/write head and has a bolt at the other end that connects with the drawing arm. By playing with the length of the metal and the position of the bolt you can make a lever that magnifies the movement of the read/write head so that the pen can cover more of the DVD's surface. Turn everything on and check that the pen can move a good distance over the radius of the DVD. You adjust things fairly easily just by bending the metal bits. Step 6: Draw!   Cut some paper circles using another CD as a template. Then load up some paper (we used tiny scraps of masking tape to hold down the disks of paper), insert a pen into your pen holder and make it go! Then start hacking the code and send us your best pictures! For more detail: Floppy drawbot ### Universal Gripper - Syringe Powered The “universal gripper” developed by researchers from Cornell University, the University of Chicago, and iRobot inspired me to create my own version. The YouTube video is quite impressive. The gripper can form around very asymmetrical and smooth shapes and still pick up the object. I gathered the materials below and decided to create a gripper of my own that could be incorporated into one of my robot designs. Adding a vacuum pump or a powerful air mover seemed difficult and probably unnecessary. So I started to think about vacuums. I remembered that when they were filming “An American Werewolf in London” that Rick Baker used hypodermic syringes hooked up in a line. When a really big syringe was compressed at the end of the line, the little ones popped up creating the appearance of a spinal column erupting below the skin of the creature’s back. I decided that the same idea might work with the “universal gripper.” In addition, I thought that using a funnel could work nicely for balloon support. Playing around with it, I thought that adding a pressure sensor inside of the funnel would allow the Arduino to apply suction when the balloon came into contact with the object to pick up. This lead me to Plusea and her instructables using velostat and flexible materials. Amazingly, it all seem to work. Follow these steps to see how I did it. You can probably see alterations that would improve the design Step 1: Materials Materials: Good quality latex balloon Aquarium plastic tubing 60 ml veterinarian syringe 11/64” brass tubing zip ties Bond 527 cement Conductive thread Needle Craft foam some #6 bolts and nuts 5 cm of U channel aluminum TowerPro servo MG995 flat stock aluminum an Arduino or other microprocessor Step 2: Prepare the Balloon I was worried that the latex balloon might have small pin-holes that would affect the rig’s ability to create a good vacuum. I decided to make a test. I inflated the two latex balloons I had purchased and put a clothespin on the bottom. The next morning I found that one balloon had deflated by half. The second balloon was still fully inflated, so I used it. I filled the balloon with coffee. I chose the cheapest and coarsest coffee in the store. I think that a coarser grind would provide more jagged edges for the coffee granules to lock onto each other when the vacuum is applied. I didn’t test it, so it remains s theory. I decided to only fill the balloon about ¾ full of coffee. When the vacuum is removed the coffee needs some room to become a flowing powder again. Next I used a craft pipe cutter to cut off about 5 centimeters of the brass pipe. You can get pipe cutters from hardware and craft stores. You could also use a Dremel tool or even a hacksaw. The aquarium tubing was pushed onto the brass tubing, and then the tubing was inserted into the balloon neck and locked on with zip ties. Step 3: Test One The first test used lung power. I found that I didn’t have to inhale all that much to create a good vacuum. The coffee became rigid, and I was successful in picking up a variety of objects. However, I found that the coffee grounds also came up through the tube. This did not taste very good! Step 4: Test Two I attached the aquarium air hose to the 60 ml syringe. I added a zip tie to keep it pretty airtight. Watch the video to see how this rig successfully picked up a variety of objects. I found that you did need to put a fair amount of pressure on the balloon so that it would form around the object and not just sit on top of it. &amp;amp;amp;amp;amp;lt;br&amp;amp;amp;amp;amp;gt; Step 5: Test Three The next step automates it. I added a funnel to give the balloon and tubing some structure. I took the small funnel I had and used a hacksaw to cut it off shorter. That way the balloon could hang freely, but have support when it was pressed against the object to be picked up. I decided to put a fabric pressure sensor in the funnel. That way the Arduino controlling the servo could sense when enough pressure was applied to the balloon. Plusea has a great Instructable describing how to create pressure and bend sensors. These sensors can be very sensitive and also very accurate in reading pressure or bending. I created mine out of craft foam from a local craft store. It is flexible, but has enough structure that it doesn’t collapse. You need some material that can be compressed, but won’t stay that way after the pressure is removed. Instead of sewing the edges together, I used Bond 527 multi-purpose cement. It is flexible and also adheres well to the foam. The conductive thread was sewn in in a criss-cross pattern as Plusea describes. The Velostat middle layer was cut smaller than the outer pieces so that the glue did not adhere to it and cause compression. Velostat is available from The EMF Safety Site. Conductive thread was left sticking out about an inch on both sides to allow connection to a wire running to the Arduino. &amp;amp;amp;amp;amp;lt;br&amp;amp;amp;amp;amp;gt; Step 6: Put it all together Build the Syringe Mechanism: I tested the syringe and found that I only needed to pull the plunger back to 30ml in order to get a good vacuum. So I used a hacksaw to cut off the barrel of the syringe. I also cut the plunger off about 3cm longer than the barrel. I drilled a hold in the servo arm and also through the plunger. A #6 bolt with washers and nuts holds the plunger pretty stable as the servo pulls it back and pushes it forward. I had some aluminum U channel and cut a piece about 20 cm long. I don’t know the technical name, but I had a plastic piece used to mount servos that I got in a box of servos from eBay. I attached the servo to the plastic mount and then bolted the mount to the U channel aluminum.   For more detail: Universal Gripper - Syringe Powered ### The Touch module - a robotic dog toy The idea was to invent an Arduino-based, robotic toy that my dog could interact and play with. One that could record scores, automatically deliver treats, and grow more advanced as the dog learns to play with it. I wanted to find a task to test my dog's intelligence, so I chose a simple system with three 'levers.' At first, as soon as the dog touches one of the levers, treats are delivered. Eventually the dog should begin to associate the action of pushing the levers with the rewarding stimulus, a tasty treat. Depending on your dog and what really gets him going, you can use light storebought treats, chopped up hot dogs, shredded chicken, or you can use this as a way to make mealtime more interesting for dogs with problems eating. At its most advanced, an LED lights up above one of the three levers and the dog must touch the correct lever in order to get a treat. It is designed to get more and more complex during a single playing event, and after every reset, the dog has to start over. A small counter would track his overall high-score of levers in-a-row, if he could ever actually hit two in-a-row... There are some pretty widely-accepted theories on the intelligence of dogs generally used to classify dogs. The theory identifies three types of intelligence: instinctive intelligence which describes the activities the dog was bred for, adaptive intelligence, a metric for problem-solving, and working intelligence, or the ability to learn from human interaction. I wanted to come up with a robot that could work with all three types of intelligence for some mental stimulation. Plus, tossing treats at Henry was getting a bit boring and we needed to spice it up. The larger scheme for the idea of robotic dog toys is to have a centralized treat-delivery system that wirelessly communicates with several toys of varying design, so this 'Touch' module with the levers could just be a single toy in a group. Before I get into the specifics, check out this video of my dog Henry, playing with the finished prototype, so you can get an idea of how it works. This is the current stage of Henry's interaction with the toy, and now I am working on him using the machine without me around. The last and most important advice is to SUPERVISE YOUR DOG and do not leave them unattended with any of the items in this instructable. It is not meant to be an autonomous robot that wakes up and plays with your dog, but a game with which you both interact. The fun part for me was teaching Henry how to play with it, watching him systematically improve at the game, only to completely forget everything the next day. The whole thing took about two months to complete and in the meantime I was able to spend some quality time with my dog and learn that he was pretty quick to pick up how to work the toy! Step 1: Training the Dog Training: The dog has to be very comfortable around the toy for it to have any success. At the stage before I added any electronics I handfed Henry his dinner over and under and the around the beams for a few nights. Yet he is completely motivated by food and after a few days he would be excited as soon as he saw the toy. So first I just worked with him on touching the levers: Since Henry already knew how to shake, I put the machine between us and tried to make him 'shake' my hand under the area of the scaffolding where the levers would go. Eventually I put my hand further and further back until he was slapping the postcards just by accident. Anytime his paw touched a postcard I gave him a tasty treat. I worked like that for a few nights and eventually just could tap the levers for him to 'touch' them. After a few times like that, all I had to do was hold the treat up and he would slap the levers. Check it out: You can watch Henry in the video to get a good idea of some of the challenges for this project. At one point he just double slaps two levers and leaves his paws resting on them while the Flex Sensors underneath are fully strained. So that's when I decided to separate the treat dispenser from the toy itself, so that after a tap on the levers the dog has to move a bit to collect the food. Eventually Henry graduated to the first level of difficulty on the game. That is where we are at now because he has some trouble grasping that he should push a certain lever under whichever light was on, so I am trying to think of a way to get him to learn how to do that. If you want to give a shot at making one yourself, there are detailed instructions and code. If you want to borrow some aspects of the module and creating something new, all I ask is that you keep it open-source! Step 2: Materials All of the design choices I made were based on what I had lying around, most if not all from SparkFun. I think there is enough information on all of these pieces available (in this instructable and hyperlinked throughout) so that a complete beginner could assemble a piece like this, with absolutely no prior robotics/electronics experience. The body of the toy is made with MakerBeam, a fantastic open-source t-slot hardware which is perfect for prototyping small designs like this. Of course an eventual improvement for a commercial robotic dog toy would be to use dog safe materials, or just plain larger materials for any dog bigger than my guy Henry. Nearly complete list of stuff: -- Three Flex Sensors (2.2") -- Super Bright LEDs - Red, Blue, and Green 10mm -- breadboards for testing -- Arduino MEGA 2560 (also tested with Arduino UNO which worked exactly the same) -- ArduMoto Shield -- Arduino ProtoShield -- Zevro Smartspace Cereal Dispenser --12 V DC geared motor  and coupling shaft -- MakerBeam kit -- lots of wire, jumper wire, resistors, etc. -- some postcards and electrical tape -- the hardware pictured above for clamping down the motor -- a dog... Step 3: Dog Treat Delivery System I have to give credit for the dog treat delivery idea to a guy Matt Newton at this site. He had the idea to use the Zevro cereal dispense with this particular motor connected. He also goes in a different direction that might be interesting for some people reading this instructable, an internet-enabled pet feeder. He talks about the problems with turning the rubber blade and how he decided to take the geared motor route, for high torque and low speed. His idea works perfectly and the slow turning of the blade enables you to deliver a nice little batch of treats at a time. He also designed and posted a design for a custom made coupling and shaft to connect the motor to the Zevro dry food dispenser, which I also made. But the similarities end after the type of motor and the Zevro, because I used the Arduino MEGA and the ArduMoto shield to run the motor. For the wood piece and hardware: I went to the local hardware store and purchased several pieces. The pictures included in this step pretty clearly illustrate what I did. I first bought a cheap wooden shelf and a saw and a few L-brackets to make a stand to connect the motor to. Then I found a 'mast clamp,' a piece to fix the motor to the board. You will have to find one that matches the size of the motor you buy. (I used a high torque gearbox motor for reasons discussed above). Once you make the coupling and shaft or find an alternate solution, you can screw everything together. For the motor and the Arduino setup/code: First, I followed this very detailed Sparkfun tutorial to test the ArduMoto shield. Once you have completed it, you should have a working idea of the sheild. At the time I had no screw terminals to connect to the ArduMoto so I just soldered two wires directly into the B terminal 3 and 4. Then I then connected those two wires by jumper cable to the 12 V 4 RPM DC motor. The order of the wires never matters because swapping them only changes direction of the motor, which can control through the ArduMoto shield. For the ArduMoto terminal B, the direction pin is hard-wired to Pin 13 and the pulse-width modulation pin is on Pin 11.   For more detail: The Touch module - a robotic dog toy ### Arduino Project Board The Arduino Project Board is basically a board to transer your ATMEGA168/328 to when you have completed your project and no longer need to use the Arduino as a development board. Simply transfer the programmed chip from the Arduino board to the Arduino project board and you are in business. Now your Arduino is no longer tied up in your finished project and you have a simple breakout board to work with independently of the Arduino. Here are some basic instructions for assembling it and getting started.   Step 1: Go get stuff: The complete Arduino Project Board Kit includes: (x1) Arduino Project Board PCB (or you can make your own with ProjectBoard.pcb) (x1) Bootloaded ATMEGA328 chip (x1) 28-pin socket (x1) 16 mhz crystal (x2) 22pF capacitors (x1) 0.1uF, 25V capacitor (x1) 10uF - 47uF, 25V capacitor (x1) 1K, 1/4 watt resistor (x1) tactile switch (x1) 7805 regulator (x1) 9V battery clip   Step 2: Resistor Solder the 1K resistor to R1 on the board. Don't forget to clip away the excess leads from the back side of the board.   Step 3: 0.1uF Capacitor Solder the 0.1uF capacitor to C4.   Step 4: 22pF Capacitors Solder the 22pF capacitors to C1 and C2 on the board.   Step 5: Switch it up Line up the switch with SW1. Then press it down until it "pops" in and becomes flush with the board. Solder it in place.   Step 6: Crystal Place the crystal atop XTL and solder it in place.   Step 7: Socket to me Put the socket atop the spot for the Arduino. Make certain that the notch cut into the end of the socket is located next to the 1K resistor. Solder all 28 pins in place.   Step 8: Electrolytic Capacitor Solder the electrolytic capacitor in the spot labeled C3. Don't forget to make sure the "-" stripe on the capacitor is opposite from the + label on the board.   Step 9: Regulate Add the LM7805 voltage regulator to the board in the spot labeled 7805. The metal plate on the back of the regulator should be on the side opposite of the capacitors.   Step 10: 9V Connector Solder the red wire from the 9V connector to the terminal on the board labeled 9V. Solder the black wire to the terminals labeled GND.   Step 11: Test LED (optional) I added a test LED to the board of this example to demonstrate it is working. I suggest that you don't do this if you don't have to and only add the parts you need for your project. Anyhow... in this example the LED is connected to Pin 12 (Digital Pin 6) and then to ground through a 220 ohm resistor.   Step 12: Program and transfer Program your chip and transfer it to the board. Here is the blink code for the LED example shown in Step 11: /* Standard Blink example set to Digital Pin 6 (ATMEGA328 pin 12) There is one long blink on startup before going into main routine This example code is in the public domain. */ void setup() { // initialize the digital pin as an output. // Pin 6 has an LED connected on most Arduino boards: pinMode(6, OUTPUT); digitalWrite(6, LOW); // startup routine for testing rest button delay(1000); // LED turns on for 5 seconds and waits for 3 digitalWrite(6, HIGH); delay(5000); digitalWrite(6, LOW); delay(3000); } void loop() { digitalWrite(6, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(6, LOW); // set the LED off delay(1000); // wait for a second } Step 13: Power! Plug in a 9V battery and it should be good to go.   For more detail: Arduino Project Board   ### Turn your Arduino Uno into an USB-HID-Mididevice While building an Arduino Uno based Midi-Controller for Ableton Live, I came across the HIDUINO project ( http://code.google.com/p/hiduino/ ). It allows you to turn your Arduino Uno (or any other device using an AVR-USB chipset like the 8u2) into a driverless HID/Midi device. It's much more comfortable than using a software based serial to midi converter which has to run in the background all time. The only downside is that you loose the ability to upload your sketches over USB while using the custom firmware. Therefore an ISP programmer is helpful! This is just a short Instructable describing how to set up your Arduino as an HID/Midi device with the help of an ISP programmer. More informations are avaliable under: http://code.google.com/p/hiduino/w/list Step 1: Gather your materials Things you need: - A compatible Arduino board. I'm using the Arduino Uno here. - An AVR-ISP programmer. The AVRISP mkII works great and is used here. - Software to use your ISP programmer; up and running. I'm using the AVR crosspack with avrdude on my MacBook Pro. - The HIDUINO software from here http://code.google.com/p/hiduino/downloads/list To get ready for the next steps you have to unpack the HIDUINO archive. In the unpacked file move to the folder "Arduino Libraries". Inside you will find another folder called "HIDUINO_MIDI_Lib". Move this folder into your Arduino - Libraries folder. The final result should look like this /Users/phil/Documents/Arduino/Libraries/HIDUINO_MIDI_Lib We haven't moddified the original USB firmware yet, so it's still intact and you can use it to flash an example sketch to your Arduino. Try the first sample from the HIDUINO archive. It's located under "Arduino Example Sketches" and really easy to understand. You don't have to do this yet, but it allows you to test your device immediately after reflashing the USB firmware. Step 2: Programming the new USB firmware Okay, the first thing we want to do is to reflash the Uno's 8u2 chip. Therefore we need to do the following: - Connect your ISP to your Arduino. (Be sure to connect it in the right way! The pinheader should be marked with a little white dot! It marks pin number one! On the ISP cable it's marked with a little arrow.) - We want to flash the following file: HIDUINO/CompiledFirmwares/HIDUINO_MIDI_Uno.hex - I'm using avrdude in a terminal window on my Mac. I used the following command  for an Arduino Uno and an AVRISP mkII: avrdude -p at90usb82 -F -P usb -c avrispmkii -U flash:w:HIDUINO_MIDI_Uno.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m - after 6-10 seconds the new firmware should be flashed successfully! Your device should show up in your system profiler now! If not just unplug it and replug it back again :) Then you can move on to the next step! :) - In case you want to restore the original frimware of the 8u2 you can find it in your Arduino application folder. On a Mac its located under: /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/firmwares/UNO-dfu_and_usbserial_combined.hex - Reflash it using avrdude an this command: avrdude -p at90usb82 -F -P usb -c avrispmkii -U flash:w:UNO-dfu_and_usbserial_combined.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m There are tons of instructables and tutorials on how to flash an AVR using avrdude. This is just a short sum up of paths and commands ;)   Forr more detail: Turn your Arduino Uno into an USB-HID-Mididevice ### Arduino Air Quality Sensor Summary The issue of poor air quality is a significant concern that impacts the well-being of numerous communities, particularly individuals with health conditions. The ability to measure air quality accurately is of utmost importance. In this module, you will have the opportunity to construct a basic air quality sensor using affordable and easily accessible components. Materials & Methods The hardware components required for this project include an Arduino Uno board or an equivalent model, such as the one available at https://www.sparkfun.com/products/12757. It is worth noting that we have used various inexpensive models from Amazon and SparkFun RedBoards, all of which have performed equally well as the traditional Arduino Uno. To power the board, you can utilize a USB cord connected to a phone charger, a phone external battery, or a computer. Alternatively, you can use a 9V battery connection with an adapter like the one found at https://www.amazon.com/IDS-Battery-Power-Cable-Arduino/dp/B072PTY1WM/ref=sr_1_7?ie=UTF8&qid=1525987560&sr=8-7&keywords=arduino+9v+battery+adapter&dpID=41m3xLRH-0L&preST=_SY300_QL70_&dpSrc=srch. The air quality sensor employed in this project is sourced from Plantower (http://www.plantower.com/en/). Our code is compatible with several models, including 1003, 3003, 5003, and 7003. However, please note that in the Arduino code, you will need to modify the variable "LENG" according to the specific model being used. The code contains detailed comments to guide you through this process. You can readily purchase these sensors from various sources. To simplify the process of connecting wires for 5V and ground, a breadboard and male-to-female jumpers are recommended. A breadboard provides a convenient platform for organizing and connecting the necessary wires, especially when utilizing all the optional components in this module. Alternatively, you can create your own multi-pronged wires for 5V and ground by soldering. You can find a variety of breadboards and jumpers on Amazon at the following links: - Breadboards: https://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=breadboard - Male-to-Female Jumpers: https://www.amazon.com/Foxnovo-Breadboard-Jumper-Wires-Female/dp/B00PBZMN7C/ref=sr_1_1?s=electronics&ie=UTF8&qid=1525989304&sr=1-1&keywords=female+to+male+jumpers&dpID=51is6kX6ZsL&preST=_SY300_QL70_&dpSrc=srch When it comes to visualizing particulate concentration, you have several options to choose from, depending on the level of involvement you desire. It is important to note that these low-cost air quality sensors provide a relative estimation of particulate matter (PM) concentration. To obtain accurate estimates, calibration of the sensor for the specific types of particles being observed is necessary. We have incorporated a 16-column by 2-row LCD screen with the I2C Arduino package for this project. The provided code will display various information such as the time elapsed since the Arduino was powered up, PM1.0, PM2.5, and PM10 concentrations. Numerous LCD screens are available in the market that can be used for this purpose. We have utilized one from Amazon, ensuring that it includes the necessary board requiring only 4 wires for connection. Please note that when selecting an LCD screen, ensure it is not just the screen itself but also includes the required board. Here is an example from Amazon: https://www.amazon.com/FICBOX-Serial-Backlight-Display-Arduino/dp/B071XP6PPT/ref=sr_1_5?ie=UTF8&qid=1525383666&sr=8-5&keywords=lcd+screen+arduino A microSD card reader is essential for recording data over extended periods, which can be later analyzed on a computer. You will also need a microSD card for storage. It is recommended to use a card with a capacity smaller than 32 GB and ensure that it is formatted as FAT16 or FAT32 (most cards come pre-formatted, but reformatting may be required for certain models). Here are links to examples of microSD card readers available on Amazon: - MicroSD Card Reader Adapter Module for Arduino: https://www.amazon.com/SenMod-Adapter-Reader-Module-Arduino/dp/B01JYNEX56/ref=sr_1_1_sspa?s=electronics&ie=UTF8&qid=1525987957&sr=1-1-spons&keywords=sd+card+reader+arduino&psc=1 - MicroSD Card (for storage): https://www.amazon.com/gp/product/B00MHZ70KO/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1 For monitoring the particulate concentrations, you can use the serial monitor in the Arduino sketch editor by connecting the Arduino to your computer via USB. To access the serial monitor, you can use the keyboard shortcut "Ctrl + Shift + M" or navigate to it through the "Tools" menu. Additionally, if you have Python installed on your computer, the Python script provided at the end of this module can be used to create real-time plots of air quality. Other Materials you May Want: Timekeeping: It is important to note the starting time for each sensor. The Arduino will record data with the first reading at t = 0, and it is crucial to know the corresponding time of day for accurate data analysis. GPS: If you wish to compare your readings to those taken at different locations, you may want to measure your precise location. You can access GPS data from various phone map or compass apps, or you can retrieve the location later by using Google Maps and clicking on the specific data collection locations. Weather Station: Temperature, pressure, and wind velocity in your area may be of interest, but keep in mind that this data can also be obtained from weather websites, although with potentially lower resolution. Wiring: The Arduino, sensor, LCD screen, and SD card reader should be interconnected according to the provided instructions. However, if you prefer to read data through a computer, you can omit the LCD screen or SD card reader. Please note that the wiring diagram depicted is applicable to all models except for the 7003; refer to the image of the 7003 sensor above for the appropriate wiring modifications specific to the AQ sensor. Wiring Table: Plantower (not 7003) Plantower (7003) Goes To Arduino SD Card Reader Goes To Arduino LCD I2C Screen Goes To Arduino 1 1 or 2 5 V CS 10 GND GND 2 3 or 4 GND SCK 13 VCC 5 V 3 10 3.3 V MOSI 11 SDA A4 4 8 4 MISO 12 SCL A5 5 9 3 VCC 5 V 6, 7, & 8 Others Not Used GND GND Code: Prior knowledge of Arduino is recommended, and it may be beneficial to begin with online Arduino examples if you are unfamiliar with them. You can find helpful resources at the Arduino website (https://www.arduino.cc/en/Guide/HomePage). The Arduino board must include the "LiquidCrystal I2C" library packages, which need to be installed in the Arduino sketch editor. It is a one-time setup process. In general, to install arduino packages: To begin, open the Arduino Sketch Editor. Then follow these steps: 1. Click on "Sketch" in the menu bar. 2. Go to "Include Library" and select "Manage Libraries". 3. In the search bar that appears, enter the name of the library you need. 4. Click on the desired library package and then click on the "Install" button. You can access the Arduino script that reads data from the sensor by following this link: https://drive.google.com/file/d/1N7KHkNi3ASCUrKJLTVSF3G6TRo1y5-8h/view?usp=sharing This code is also available at the end of this teaching module as an appendix. If you want to view the PM values measured by this script without using the LCD screen, you can upload the script to the Arduino board, open the Arduino Sketch Editor, and click on "Tools" followed by "Serial Monitor" (or use the keyboard shortcut "Ctrl + Shift + M"). If you wish to plot and view real-time particulate counts on your computer, we have provided a Python script for that purpose. If you haven't installed Python before, you can refer to our screencast instructions here: https://www.youtube.com/watch?v=qNzeETi2dMM. You can find the Python code at the end of this teaching module as an appendix, or you can access it through this link: [insert link]. Background for Teachers Air Quality Background: The World Health Organization has estimated that approximately 3.7 million deaths in 2012 were caused by ambient air pollution. Among the various air pollutants, fine particulate matter (PM2.5), which refers to particles with diameters smaller than 2.5 microns, has the most significant adverse health effects. In northern Utah, elevated levels of PM2.5 are a pressing issue, often surpassing national ambient air quality standards for extended periods, especially during winter. These episodes of poor air quality have severe implications for the health and well-being of the region's residents, leading to increased cases of asthma, juvenile arthritis, and mortality. Both government agencies, such as the Utah Division of Air Quality (DAQ), and citizens rely on air quality data from sparsely distributed monitoring stations for planning purposes and public communication. These stations are equipped with expensive, high-quality instruments that meet federal monitoring requirements. However, due to the sparse spatial distribution of these stations, they may not accurately represent the pollutant gradients within a city. In Salt Lake City, variations in elevation, land use, and other factors contribute to daily average PM2.5 concentrations at the neighborhood level that may not be adequately represented by the nearest state monitoring station. Furthermore, the government monitoring stations have limited temporal resolution, with only two stations in Salt Lake County providing hourly PM2.5 levels. This temporal gap is particularly concerning as studies suggest that even short-term increases in pollutant levels can elevate the incidence and severity of asthma and cardiac events. To address these spatial and temporal gaps in air quality monitoring, networks of low-cost air quality sensors can play a crucial role. These sensors can provide valuable information to air quality managers, healthcare providers, and the community, helping to better understand air quality and minimize exposure risks. However, many low-cost sensors lack independently gathered calibration data, quality assurance procedures, or descriptions of potential inaccuracies in their readings. Presenting unreliable or uncertain information from sensor networks can lead to unnecessary public concern or a false sense of security regarding pollution levels and associated health risks. The goals of this project include equipping each classroom with a low-cost air quality sensor and involving students in determining how well outdoor air quality measurements represent local conditions within and around their school. Additionally, students will assess the performance of the sensors over time. Regarding electronics background, a basic understanding of electronics is helpful but not necessary. The primary concern is ensuring that the wires are connected correctly. The Arduino board, depicted in the figure provided in the Materials section of this module, essentially functions as a miniature computer. It receives data from the air quality sensor, processes it to calculate particulate concentrations, and then presents the data to the user in the form of LCD characters, a file on the SD card, or real-time plotting on a computer. The air quality (AQ) sensor utilizes laser light scattering to measure particulate counts. These sensors work by detecting scattered light. The internal structure of one such sensor is illustrated in the accompanying figure. Although some models may have different air inlet configurations, they all operate by pulling air through a dark chamber containing a light detector and a laser beam. When laser light passes through clean air without particulate pollution, it typically follows a relatively straight path. This means that very little, if any, light would make a sharp 90° turn and reach the sensor. However, when the air contains particulate matter, the light can be reflected off the particles in random directions. This phenomenon can be observed by shining a laser through a cloud of smoke, for example, resulting in a visible line of scattered light traveling through the cloud. In contrast, if the air is clean, the laser beam may pass through the space without any noticeable effects. A helpful demonstration to introduce this concept in the module could involve using a laser pointer and a fog machine. By directing the laser beam through the fog, the scattered light will become visible, showcasing the impact of particulate matter. Another demonstration option is using a blue laser and comparing its interaction with tonic water (which contains quinine, a substance that scatters light) and regular water. The scattering of light by the quinine in the tonic water can help illustrate the effect of particulate matter on laser light. While the scattered light from the laser is random in direction, a portion of it will be scattered towards our sensor and detected. The amount of particulate matter in the air directly influences the likelihood of a light photon reaching the sensor, allowing us to quantify the level of particulate pollution. LCD Screen: This device is designed specifically for displaying real-time data. It requires a 5V power supply and a ground connection, along with two additional wires to transmit the data to be displayed. MicroSD Card Reader/Writer: This device also requires power and communication connections with the Arduino. The Arduino will create a file named "PM_Data.csv" on the SD card. This file is in CSV (comma-separated values) format, compatible with programs like Excel and other data analysis tools. If the file already exists, the Arduino will add new data to the existing file, appending it after the previous data. It is advisable to periodically delete the file to prevent the card from filling up. Each time the sensor system restarts, it generates a new random RunID and includes it as the header for each new data set in the CSV file. This approach compensates for the Arduino's inability to provide actual time or date information (as its clock resets at each restart). The user should match the RunID with a known start time and date. There are numerous potential research questions that students can explore using the air quality sensor. While students are encouraged to come up with their own creative research questions, here are a couple of examples to get them started: 1. Fireplaces: How does the type of fuel (wood vs. gas) affect particulate pollution levels? How far can the effects of a wood-burning fireplace be detected? 2. Clothes dryers: Can particulate matter be detected in the laundry room when the dryer is on compared to when it is off? Can it be detected near the dryer vent? If a dryer vent is clogged, can a significant amount of particulate matter enter the house? 3. Candles or incense: Are these significant health risks? How do they compare in terms of particulate pollution levels? If a candle is lit in one room, what impact does it have on particulate matter in other rooms? 4. Aerosols (hairspray, cleaners): Do these products generate significant particulates in the room where they are used? Are the particles different from those produced by a fire? (Note: Avoid spraying directly around the sensor to prevent coating the detector, which could affect its performance.) 5. Cleaning/dusting: Is there evidence that performing household chores can pose hazards to health? 6. Cooking: Does the type of food being cooked or the cooking method affect particulate pollution levels? 7. Soldering: What are the risks associated with soldering electronic components? How does ventilation impact particulate pollution levels? 8. Powders: Do activities like playing in a sandbox with materials such as flour or mixing cement generate significant particulate pollution? 9. Industrial sources: What are the particulate concentration levels near a gravel pit, incinerator, power plant, or restaurant? Does the type of restaurant (e.g., wood-fired pizza place vs. sandwich shop) make a difference? 10. Weather effects: How do factors such as wind, rain, and humidity affect readings from sources of particulate pollution? 11. Elevation: If the sensor is taken on a hike during a day with poor air quality, can evidence of the inversion layer be observed, and how quickly does the transition occur? Additionally, sending the sensor up on a tethered weather balloon can provide valuable data, but tracking elevation will require the use of a phone app. 12. Air quality events: What are the effects of fireworks used during local holidays? How does a forest fire occurring a couple of states away impact air quality? 13. Indoor vs. outdoor: What is the relationship between indoor and outdoor air quality? Does it vary based on the season or the age of the home? 14. Motor vehicles: What is the effect of living near a busy street compared to an isolated neighborhood? How far-reaching is the impact of school buses and parental drop-offs and pickups at schools? These are just a few examples, and there are countless other research questions that can be explored using the air quality sensor. Code //*Pins: //*Plantower Pin 1 5V to 5V on Arduino //*Plantower Pin 2 GND to GND on Arduino //*Plantower Pin 3 SET to 3.3V on Arduino (if 0 V it will put the sensor in a low-power standby) //*Plantower Pin 4 RX to Digital Pin 4 on Arduino (which will act as the transmitting pin on the Arduino sending data to the sensor's recieving pin 4) //*Plantower Pin 5 TX to Digital Pin 3 on Arduino (which will act as the recieving pin on the Arduino taking data from the sensor's transmitting pin 5) //*Plantower Pin 6 RESET does not need to be connected, if set to 0V the sensor will reset //*Plantower Pin 7 & 8 Not Connected //*I2C LCD Screen is optional; code will work without it //*I2C LCD Screen Gnd to Arduino Gnd on Arduino //*I2C LCD Screen Vcc to 5V on Arduino //*I2C LCD Screen SDA to Pin A5 on Arduino //*I2C LCD Screen SCL to Pin A4 on Arduino //*SD Card Reader is optional; code will work without it //*SD Card Reader Gnd to Arduino Gnd on Arduino //*SD Card Reader Vcc to 5V on Arduino //*SD Card Reader MISO to Pin 12 on Arduino //*SD Card Reader MOSI to Pin 11 on Arduino //*SD Card Reader SCK (CLOCK) to Pin 13 on Arduino //*SD Card Reader CS to Pin 10 on Arduino (may change for different card readers) //*The TX pin on the sensor connects to pin 11 on the Arduino // //*Plantower Reading Portion of Code altered from: Zuyang @ HUST, Date:March.25.2016 //****************************** #include //package allowing serial communication #include //include LiquidCrystal_I2C library if lc display is attached #include //needed for sd card reader communication LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display, NOTE: Some I2C LCDs will need the address changed from 0x27 to 0x3F //Define the length of the information beingretrieved from the sensor, this portion must change for different sensor models //#define LENG 31 //0x42 + 31 bytes equal to 32 bytes, Use for Model 1003, 5003 #define LENG 23 //0x42 + 21 bytes equal to 24 bytes, Use for Model 3003 #define TIME_BETWEEN_READINGS 1000 //number of milliseconds between readings from the sensor (should be more than once a second) const bool useplotter = false; //true if using arduino's built-in serial plotter, false otherwise. Use false is plotting with python const int chipSelect = 10;//pin for chip select (CS) on microsd card reader (reader is optional) unsigned char buf[LENG]; //Contains the information from the sensor unsigned short PM01=-1; //variable that will hold the PM1.0 value unsigned short PM25=-1; //variable that will hold the define PM2.5 value unsigned short PM10=-1; //variable that will hold the define PM10 value unsigned short PMavg=-1; //Average of all PM readings bool useSD=true; //goes false if there is an SD reader error unsigned short i=0; // just a counter bool gotitright=false; //true if the buffer length was right, to account for different plantower models String SD_String="";//where the string for the SD card data will be kept static unsigned long lastReadingTime=0; //variable to keep track of time (in ms) of last reading //NOTE if the sensor never connects appropriately, then it will read -1 concentration // Pin 3 will be the Arduino's RX (recieving pin) connected to the sensor's TX (Plantower Pin 5) // Pin 4 will be the Arduino's TX (transmitting pin) connected to the sensor's RX (Plantower Pin 4) SoftwareSerial PMSerial(3, 4); //initialize the serial connection, 3 & 4 are the digital pin numbers used on the arduino byte Char2p[8] = {//create a 2 with a point character 0b01100, 0b10010, 0b00010, 0b00100, 0b01000, 0b10000, 0b11110, 0b00001}; byte Char5[8] = {//create a smaller 5 characer 0b01111, 0b01000, 0b01000, 0b00110, 0b00001, 0b00001, 0b01110, 0b00000}; byte Char10[8] = { //create a 10 character 0b00000, 0b10111, 0b10101, 0b10101, 0b10101, 0b10101, 0b10111, 0b00000}; void setup() { PMSerial.begin(9600); //Serial communication with the sensor PMSerial.setTimeout(1500); //Time to wait for sensor to respond (should sample each second, at most) Serial.begin(9600); //Serial communication with a possible computer through the USB cable while (!Serial) {;} // wait for serial port to connect. Needed for native USB port only Serial.println("Starting LCD..."); lcd.init(); // initialize the lcd lcd.backlight(); //turn on the backlight lcd.setCursor(0,0); //place the cursor lcd.print("Starting!.."); //let the user know it's starting delay(500); Serial.println("LCD Initialized..."); if (!useplotter) {Serial.println("Initializing card."); } if (!SD.begin(chipSelect)) {if (!useplotter) {Serial.println("Card failed, or not present"); lcd.setCursor(0,0); lcd.print("Card NOT found.");}}//start talking to the SD card reader else {if (!useplotter) {Serial.println("Card initialized."); lcd.setCursor(0,0); lcd.print("Card detected.");}} File dataFile = SD.open("PM_Data.csv", FILE_WRITE); //Open a file named PM_Data.csv randomSeed(analogRead(0)+dataFile.size());//seed the random number generator with something a bit random... if (!useplotter) {Serial.print("File Size: ");Serial.println(dataFile.size());} SD_String="RunID: "+String(random(0,10))+String(random(0,10))+String(random(0,10))+String(random(0,10)); if (!useplotter) {Serial.print("Run ID: ");Serial.println(SD_String);} lcd.setCursor(0,1); //place the cursor lcd.print(SD_String); lcd.createChar(0, Char2p); // Sends the custom char to lcd lcd.createChar(1, Char5); // Sends the custom char to lcd lcd.createChar(2, Char10); // Sends the custom char to lcd if (dataFile) { //if the file opened correctly (SD reader attached) dataFile.println(SD_String);//print RunID in the file SD_String="t(s),PM1.0 (ug/m3),PM2.5 (ug/m3),PM10 (ug/m3)"; //header for csv file to be created on SD card dataFile.println(SD_String);//print the header in the file dataFile.close();//close the file } else { Serial.println("Error opening data file on SD card"); //alert user to error useSD=false;//stop trying to use the SD reader } delay(4000);//pause so user can get session ID if (!useplotter) {Serial.print("t(s)\t");Serial.print("PM1.0\t");Serial.print("PM2.5\t");Serial.print("PM10\t");Serial.println("PMavg");} //alert user to error } void loop() //This is what the Arduino will do over and over, while it has power { String SD_String = "";//data to be written to SD card if(PMSerial.find(0x42)){ //check if there is a serial connection to the sensor PMSerial.readBytes(buf,LENG); //read the information from the sensor and put it in the variable buf if(buf[0] == 0x4d){ //first read value if(checkValue(buf,LENG)){//check if some data of some length was recieved from the sensor PM01=transmitPM01(buf); //count PM1.0 value of the air detector module PM25=transmitPM2_5(buf);//count PM2.5 value of the air detector module PM10=transmitPM10(buf); //count PM10 value of the air detector module PMavg=(PM01+PM25+PM10)/3; //find the average PM count } } } if (millis() - lastReadingTime >=TIME_BETWEEN_READINGS) //Take a reading every TIME_BETWEEN_READINGS { if (useSD){ //SD reader still good SD_String = String(int(round(lastReadingTime/1000)))+","+String(PM01)+","+String(PM25)+","+String(PM10)+","; //data: time and the PM values File dataFile = SD.open("PM_Data.csv", FILE_WRITE); //open the file if (dataFile) { //if it opened correctly... dataFile.println(SD_String); //write the data to the file dataFile.close(); //close the file } else { Serial.println("Error opening data file on SD card"); //alert to possible error } } lastReadingTime = millis(); //update time of last reading if (!useplotter){Serial.print(int(round(lastReadingTime/1000)));Serial.print("\t");} Serial.print(PM01);Serial.print("\t"); Serial.print(PM25);Serial.print("\t"); Serial.print(PM10);Serial.print("\t"); Serial.print(PMavg);Serial.println(""); lcd.clear(); //clear the lcd lcd.setCursor(0,0); //print to the lcd lcd.print(" t: "); //time lcd.print(int(round(lastReadingTime/1000))); lcd.setCursor(8,0); //PM1.0 lcd.print(" 1: "); lcd.print(PM01); lcd.setCursor(0,1); //PM2.5 lcd.print((char)0); // 2. character lcd.print((char)1); // 5 character lcd.print(": "); lcd.print(PM25); lcd.setCursor(9,1); lcd.print((char)2); //10 character lcd.print(": "); lcd.print(PM10); } } char checkValue(unsigned char *thebuf, char leng) { char receiveflag=0; int receiveSum=0; for(int i=0; i<(leng-2); i++){ receiveSum=receiveSum+thebuf[i]; } receiveSum=receiveSum + 0x42; if(receiveSum == ((thebuf[leng-2]<<8)+thebuf[leng-1])) //check the serial data { receiveSum = 0; receiveflag = 1; } return receiveflag; } int transmitPM01(unsigned char *thebuf) { int PM01Val; PM01Val=((thebuf[3]<<8) + thebuf[4]); //count PM1.0 value of the air detector module return PM01Val; } //transmit PM Value to PC int transmitPM2_5(unsigned char *thebuf) { int PM2_5Val; PM2_5Val=((thebuf[5]<<8) + thebuf[6]);//count PM2.5 value of the air detector module return PM2_5Val; } //transmit PM Value to PC int transmitPM10(unsigned char *thebuf) { int PM10Val; PM10Val=((thebuf[7]<<8) + thebuf[8]); //count PM10 value of the air detector module return PM10Val; } Python # -*- coding: utf-8 -*- “”” Code to be used with an Arduino and Plantower sensor to measure air quality Arduino must have proper read code installed Written by Anthony (Tony) Butterfield, Department of Chemical Engineering University of Utah “”” import serial #Import Serial Library import numpy as np import matplotlib.pyplot as plt #plot library to show our data import matplotlib.patches as patches import time import csv #import the comma separated package arduinoSerialData = serial.Serial(‘com16’,9600) #Create Serial port object called arduinoSerialData AQnum=[] #vector of PM numbers AQcat=[] #list of categories t = [0] # the time vector icat=0 #the index of data categories keepchecking4newcats=True #see if it’s the first time cathering categories of PM data plt.close(“all”) #close all open plots fig, ax = plt.subplots() #open a new figure in which we will plot ax.grid() #display a grid on the plot plt.ion() #starts interactive plot mode, so we can have an animated plot ax.set_xlim(0, 100)#initial x limits ax.set_ylim(0, 100)#initial y limits plt.xlabel(‘time (sec)’, fontsize=14)#x axis label with size 14 font plt.ylabel(‘PM (‘+’$\mu$g’+’/$m^3$’+’)’, fontsize=14)#y-axis label with size 14 font ax.tick_params(labelsize=14)#ticks on axis set to size 14 font fig.canvas.draw()#draw the plot canvas plt.show(block=False) #keeps the plot from tying up the command window print(‘Starting…’) #forster healthy communication with your user ymax=-float(“inf”)#min and max y axis for plot ymin=float(“inf”) lines=[] #where we’ll keep our lines for our plots ymin=float(“inf”)#min and max for plot axis ymax=-float(“inf”) RectWidth=100 #width of rectangle for AQ index colors, should be big… AQclrs=np.array([[0,1,0,.2],[1,1,0,.2],[1,.5,0,.3],[1,0,0,.3],[.7,0,1,.3],[.7,0,.5,.2],[.4,0,.2,.3]]) #green,yellow,orange,red,purple,maroon AQlvls=[0,50,100,150,200,300,500,10000] #AQ index levels LnClr=[[0,1,1,.8],[0,.8,.8,.8],[0,.5,.5,.8],[0.3,0.3,0.3,.8]] #line colors i=0 PMrange=[] #the rectangles that show the AQ index colors for clr in AQclrs:#add color ranges for AQ index rec=ax.add_patch( patches.Rectangle( (0, AQlvls[i]), RectWidth, AQlvls[i+1]-AQlvls[i], fc=AQclrs[i,:] ) ) PMrange.append(rec) i+=1 tic = time.time() # get the starting time toc = 0 #will contain the time since initial tic AQData=np.zeros([5,]) #initialize the array of data while (1==1):#loop until the user hit ctrl-c toc = time.time() – tic; #measure the time try:#collect data until ctrl-c is used if (arduinoSerialData.inWaiting()>0): #board is ready to send info AQDataTxt = str(arduinoSerialData.readline()) #get the info from the board i1=AQDataTxt.index(‘\”) #find the first singl quote i2=AQDataTxt.index(‘\”,i1+1) #find the last singl quote AQDataTxt=AQDataTxt[i1+1:i2] #extract the string between the single quotes AQDataTxt=AQDataTxt.replace(‘\\r\\n’,”)#remove the return AQDataTxt=AQDataTxt.replace(‘\\x00’,”)#remove the NULL chars #print(AQDataTxt) AQDataSplit=AQDataTxt.split(‘\\t’) #split by the tab character if (len(AQDataSplit)==1): #no tabs, just print for user isdata=False #true only if it’s numerical data print(AQDataTxt) else: #has tab, then it’s part of a data table try: #see if it’s a string that would be an integer int(AQDataTxt[0]) #it can be made into an integer isdata=True #then it is data except ValueError: #if not then it’s the column header isdata=False AQcat=AQDataSplit icat=0 #counter for categories for cat in AQcat: print(‘{0:^10}’.format(cat),end=”) #print the headers if (icat>0): #avoid the time column when creating lines li, = ax.plot([0], [0], color=LnClr[icat-1]) #defines a line, li and makes clear we’ll be adding to it with the comma lines.append(li) #add a line to a vector of lines icat+=1 #incriment counter for categories print(”) #create a newline ax.legend(AQcat[1:-1]) #give a legend to the plot ncat=len(AQcat) #number of categories AQData=np.zeros([ncat,]) #initialize the array of data if (isdata): AQnums=[int(elem) for elem in AQDataSplit] #conver string numbers to integers for num in AQnums: #loop through the numbers print(‘{0:^10d}’.format(num),end=”) AQData=np.vstack([AQData,AQnums]) print(”) #a newline i=0 if (max(AQnums)>ymax): ymax=max(AQnums) if (min(AQnums)0): line.set_xdata(AQData[:,0]) #plot the new x data for this line line.set_ydata(AQData[:,i]) #plot the new y data for this line i+=1 plt.xlim( [0, toc] ) #adjust x-axis limit i=0 for clr in AQclrs: #change the width of AQ color squares PMrange[i].set_width(toc) i+=1 plt.ylim( [0, ymax] ) #adjust y-axis limit plt.draw() #draw the new plot plt.pause(0.1) #pause a bit so the plot can show except KeyboardInterrupt: #let us escape when we’re done, when ctrl-c pressed print(‘broke’) break #exit the while loop arduinoSerialData.close() #stop tying up the serial port # SAVE THE DATA f = open(‘PMdata.csv’, ‘wt’, newline=”)#open a file (this will overwrite every time) writer = csv.writer(f) writer.writerow( AQcat ) #write the header for dataRow in AQData: writer.writerow( dataRow.tolist()) #write the data f.close() ### Rave Rover - Mobile Dance Stage Rave Rover was designed and built to be a portable dance platform for parties, raves, and any other trouble we can get into! I will go into as much detail as I can explaining the entire build process, and where to find parts and other accessories. Be sure to check out more information, including party galleries on our website at www.raverover.com Step 1: Starting the Build Before doing any work on putting something together, I always like to sit down and think about the development and how something should go together. CAD is a great resource for this, so I designed most of the layout before spending any money. Step 2: Cutting Parts After designing and seeing how things were going to start to fit together, I decided it'd be a good idea to start cutting parts. Luckily at work, I have access to a 5 foot by 10 foot CNC router, where I'm able to cut any types of plastics up to 2" thick. From the CAD models, I was able to cut out the exact frame so that everything slides together and locks. I was also able to cut the top out of very thin ABS plastic sheet, which will give the 'rounded square' look once the LEDs are installed and lit up. The reason for using black plastic is to try to keep this project as light as possible, while at the same time not allowing any light to go between boxes. Step 3: Fitting the floor Once all of the floor pieces were cut out, assembly began of all the rails to check fitment and make sure enough pieces were cut.  There are three main sections, the center of the stage, plus the two pieces that fold up. Step 4: Getting LEDs ready After cutting all of the parts, it's time to assemble LED modules for the floor. These specific LED modules have three SMD5050 RGB leds per module, and they are able to be controlled over an SPI interface. This makes for being able to change any module to any color at any time, and allows the most control for some really cool displays! Step 5: Installing the LEDs Once all of the LED strips were set up (the matrix was 11 x 11, so we built 11 strands of 11 LED modules), it was ready to start installing the modules. Luckily, these modules have 3M double sided tape on the bottom, so positioning them were very easy, but we did come back with some hot glue to make sure they stuck to the bottom panel. The have to be wired all in series, so each row has to follow the row before it, and the 'flow' has to be correct, else you'll not be able to light up some of the LEDs. The way these LEDs work is by sending them a serial string of data, the first LED takes it's data off the top, and then sends the rest of the packet down the line, basically bit shifting the data stream. You can't individually address the LEDs, but knowing where they are in the data stream, you can change their data in the stream itself. Step 6: Adding the Frame Once the LED modules are all planted on the bottom panel, it's time to over lay the cut frames to set up the light 'boxes' or 'pixels'. The holes in the bottom panel (and top panel) allowed us to be able to screw the top and bottom overlays to the rails themselves, and make the entire structure much more solid and to keep it from sliding apart. You can see how the slots in the rails we cut out are perfect for running the wires between the boxes. Step 7: LED Color Check and Testing Once everything was wired and completely set up, it was time to power it up and check for colors and tracking. For driving the LEDs, we're using a simple Arduino by outputting data out of the SPI channel. Most of what you see is just random algorithms to make sure the colors are in working order and all of the pixels are working. The top piece is white translucent plastic, works as a great diffuse panel as one is needed! Step 8: Gathering More Materials Once happy with the LED floor itself, it was time to start gathering materials to build the drive train and frames for mounting all of the rest of the electronics. We picked up all of the aluminum (1x1x1/8" wall) tubing, and cut it up to the sizes that we needed for the frames. While doing this we also picked up all of the pneumatic components which I'll get into later in the build and explain WHY we need air cylinders on this project :) Step 9: Frame Building The goal behind the project this year was to be able to make the stage sit completely on the ground when 'in use'. The method to do that was to build essentially four frames. The main stage area frame was 28 x 44.5 inches, with a foldable wing on either side that were each 8.25" x 44.5". This allowed us to be able to drive through a standard 30" door opening once folded up. The drive system frame was built to fit inside the main stage frame, and by using drawer slides as linear rails, the entire stage could be lifted up or down and be allowed to be raised to drive around, and then lowered for stability for the dancers. The next few steps will show the construction of these aluminum frames. The original idea was to have all of the aluminum to be welded, but running out of time it was decided to use L brackets to bolt everything together. This seemed to be extremely strong and held together very well! Step 10: Getting frames to fit... Once all of the frames were built, it was time to get the two main frames sliding together, so the linear rails (drawer slides) and the pneumatics started going together. In the video you can see how hard it is to control the air, I am using a standard blow nozzle and just shooting air into the input to make sure the frames will move and not be locked together. In the final version, I fixed the flow by adding in a flow restrictor on the solenoid input, make going up and down very smooth. Step 11: Mounting Components Now that we have the frames built and the air cylinders working together, it's time to really get down to business and start trying to figure out how to shove: (2) Drive motors with 10" Wheels (From Electric Wheel chair) Custom 10" Subwoofer Box Amplifier for Subwoofer Car Radio for powering mids/highs and taking computer input Onboard PC (2) 12v 35Ah SLA Batteries Compressor Air buffer tank Electronics (Solenoid, drive speed controllers, Arduino, power switch, etc) Now if you remember, the Main Stage frame was 28 x 44.5 inches, this means that the drive train frame was smaller, around 25x42" where all of this stuff has to fit. What are we waiting for?! Lets get to it! We start installing by necessity. Obviously we need to drive around, so the motors and wheels get mounted first! Next is the batteries (can't forget those)..and then the next biggest item which was the subwoofer. For more detail: Rave Rover - Mobile Dance Stage ### UNO R4 WiFi support arrives on Arduino Cloud The official Arduino team has this week announced that support for its latest microcontroller the UNO R4 WiFi has now arrived in the Arduino Cloud. The integration of UNO R4 WiFi support in the Arduino Cloud is a significant development that offers makers enhanced features and seamless connectivity. Whether you’re a beginner or an expert, this development will undoubtedly open up new possibilities for your IoT projects. The Arduino Cloud UNO R4 WiFi support is a significant step forward, offering makers enhanced features and seamless connectivity. The UNO R4 WiFi board, a recent addition to the Arduino family, combines the popular UNO R3 form factor with built-in WiFi connectivity. This combination makes it an ideal choice for users at all levels of expertise, from novices to seasoned professionals, who are keen to delve into the world of innovation and Internet of Things (IoT) project creation. Connecting your UNO R4 WiFi to Arduino Cloud The process of connecting your UNO R4 WiFi board to the Arduino Cloud is straightforward, thanks to the user-friendly interface and intuitive workflows. Here’s a simple guide to get you started: Access the Arduino Cloud. You can do this by visiting the Arduino Cloud website. Connect your UNO R4 WiFi to your PC. This is the first step in setting up your device. Navigate to the Devices section and click on “Add Device.” The system will automatically detect your board. Follow the guided workflow to update the connectivity firmware. This is a crucial step to ensure compatibility between your UNO R4 WiFi board and the Arduino Cloud. Once the update is complete, your UNO R4 WiFi is ready to be managed from the Arduino Cloud. You can now start exploring the various features and capabilities of your device. UNO R4 WiFi The combination of UNO R4 WiFi and Arduino Cloud opens up a world of possibilities for makers. You can develop from anywhere using the web editor, share your sketches with colleagues and friends, create dashboards to monitor and control your devices remotely from a browser or your mobile phone, share information between multiple devices, or even integrate your devices with Alexa seamlessly. For those of you unfamiliar with the Arduino Cloud, it is an all-in-one intuitive IoT platform that supports a wide range of hardware. It is backed by the vibrant Arduino community and is designed to remove complexity, empowering users of all expertise levels to create, control, and share their projects from anywhere. The platform also allows users to create stunning dashboards to monitor and control their devices. If you’re looking to unleash the full potential of your UNO R4 WiFi board, signing up for Arduino Cloud is a great place to start. The platform is designed to bring your IoT projects to life quickly, offering a range of features and capabilities that will enhance your creativity and productivity. Source: UNO R4 WiFi support arrives on Arduino Cloud ### How to hack EEG toys with arduino i had heard a few years back about the ability of hooking up toy EEGs so you can interface them with your computer. I was reminded of this for a project i wanted to do for a class (instructable coming soon ;-)), and i also found a "Star Wars force trainer" on amazon for 30 bucks. Here is the simple step by step instructions on how to turn a force trainer into a working EEG you can see with your computer. special thanks to frontier nerds for the initial code and the hack of a similar toy. Step 1: What you'll need - Arduino, any kind will do - Star Wars Force Trainer toy - A computer running processing and the arduino development enviroment - solid core wire - basic soldering supplies Step 2: Modding the Force Trainer After you're done messing with the force trainer (its a pretty cool toy), open it up. You'll be looking for two spots, the ground and a pin labeled "t". make sure the solder doesn't get on any other pins and solder two wires, one from the ground and one from the t pin. Once that is done, drill a small hold in the force trainer case and feed the wires through. Step 3: Programming the arduino Next you want to program the arduino. This code will take the data from the force trainer and spit out some pretty numbers. We will go over what the numbers mean in a later step. Here is the code: Arduino Brain Library Install that library and load the serial out example, verify you are getting data from the serial monitor. Now you are ready to combine the arduino and the force trainer. Step 4: Hooking up to the arduino Next, its time to wire the arduino up to the force trainer. Take the wire from ground and wire it to GND on the ardunio, and take the "t" pin wire and plug it into pin 0 (or RX) I used some zip ties to keep the arduino attached to the top of the force trainer. For more detail: How to hack EEG toys with arduino ### Building a Portal Turret with motion controlled audio and lighting In this Instructable I'm going to show you how I went about building my very own life size talking Portal Turret from start to finish. This is a fairly in depth project that will cover every stage of construction and all the techniques I used along the way. Hopefully there will be a lot of information that you can pull out of this and use for all kinds of different projects. For those that are unfamiliar with Portal, It is a fantastic puzzle game made by a studio called Valve that requires you to use two portals to solve all kinds of different puzzles.  It is really a fantastic game.  The turret for which this instructable is about is one of only two characters you interact with in the entire game, the other being GLaDOS.  The central AI of the complex.  The Turrets are so adorably deadly that I had to have one of my own.  Since nobody makes them I had to build one myself.  A little bit more work but definitely worth the effort.  Lets get started. Materials and Tools used are broken down for each section. Step 1: To Scale Blueprints The very first step in the project was deciding how big I wanted to make the turret. I got in touch with someone at Valve and they told me that the turrets in the game stand 58 inches tall. Due to the nature of the design, I decided that making one this size would be prohibitively problematic and very expensive. I decided a more reasonable height to undertake was about 36 inches. This also seemed like a great size to display it once it was finished. This way it wouldn't take up an enormous amount of space in my place. I had a friend of mine, Tyler Garrison, who is a wiz with Illustrator whip me up a set of blueprints with a height of 38 inches to the top of the antennas.  I then printed them out to scale and pulled all the measurements I would need from them as I worked through the project.  My friend did an outstanding job adding in little extra details like the Aperture logo and other details on the blueprints.  These blueprints will also make a great poster to hang on the wall with the finished project. Step 2: Making the Masters - Body The most important thing about this project is keeping it as light as possible.  The best way to achieve this with the body and arm panels is to create molds and cast hollow pieces.  These durable shells will be perfect for the final turret.  The main body and arms will be hollow while all the pieces relating to the legs will be solid for strength. With the size decided, The first step was building the framework for the body.  My personal material of choice is MDF (medium density fiberboard) which can be picked up at any hardware store in 2x4 foot and 4x8 foot sheets.  This stuff is great because it has no grain and can be cut and sanded smooth with relative ease.  The dimensions for this were pulled straight from the blueprints and after an afternoons worth of work, I had skeleton frame work that looked like the body of a turret. The next step was to fill in the gaps with styrofoam.  I cut down and shaped the roughly 10 pieces to fit into there respective slots leaving about 1/8 inch for the material it would be covered with.  The styrofoam was then covered with one of my favorite materials.  Apoxie Sculpt   If you have never used this stuff, I highly recommend it.  It is a 2 part epoxy clay.  You mix equal parts A and B and have about 2-3 hours of working time.  You work it just like clay, even using water to smooth it out.  After 24 hours it is hard as a rock and can be sanded or carved.  I covered all of the curved surfaces of the body with an 1/8 sheet of clay and waited 24 hours for it to dry. A day or 2 later after the clay was fully cured, I sanded the surface as smooth as I could get it with my hand sander.  The secret when trying to get a very smooth surface is patience.  I spent many many hours sanding and refining to get the surface curves just right. Next up on the body was many many coats of primer with lots of sanding between each coat and spot putty to fill in any low spots that popped up. Slowly working my way to finer and finer grit sandpaper, I ended up with a glassy smooth finish. The final coat was wet sanding with 1000 grit and then the surface received a coat of wax.  Any wax will do.  I used turtle wax. Body ready for its mold. Materials used for this stage MDF (medium density fiberboard) wood glue styrofoam Apoxie Sculpt bondo primer wax Tools used for this stage Band saw belt sander hand sander Step 3: Making the Masters - Arm and Legs While I was making the body I was also working on the arm. Since I will be making a mold of this, only one master arm is required and I'll then cast it twice for the left and right side. The arm was built using a similar method to the body. I started out with a foam base and attached wooden plates for the 2 flat portions on the inner top and bottom sections. The outer surface was just covered with lots of Bondo and sanded to achieve the curved surface I needed. The inside of the arm was formed by creating a template of the arc and using it to form the Bondo while it was still malleable. The hold for the gun box was cut out with a Dremel. The entire arm then went through the same process as the body, and was primed and sanded until it was glassy smooth and ready for molding. The same general techniques were used for the remaining parts. The 4 leg pieces started as blocks of wood and were shaped appropriately the a belt sander and hand sander. I found carving these straight from wood was a much faster technique than starting from foam, coating them in resin, and refining the shapes. I only made one long leg piece to be cast 3 times, with the front two legs cut to the shorter length. I also made a single gun box to be cast twice. That covers all the main pieces I will need to make a full turret. By the time I had finished the body, arms, legs and gun box, I lost count of the number of cans of primer I had gone through. It was seriously a lot of primer. By this point my garage now has a nice thick layer of dust on absolutely everything! I'm really looking forward to having to clean it all up at the end of this project. Materials used for this stage MDF (medium density fiberboard) styrofoam Apoxie Sculpt bondo primer wax Tools used for this stage Band saw belt sander hand sander Step 4: Making the Molds - Body Most of the molding and casting materials I used for this came from Reynolds Advanced Materials. http://www.reynoldsam.com/ They are a great resource with a ton of great information on how to use their products.  I spent a ton of time on there website going through all of the different materials and learning as much as I could.  I was also fortunate enough to have one of their brick and mortar stores right here in town where I live.  Their staff was also really helpful in helping me with any remaining questions I had. Due to the size that these molds will need to be, I'll be using the hard shell mold technique.  This technique consists of an inner silicone liner covered with a hard exterior shell to help it maintain the proper shape.  There are a bunch of resources online for different techniques, if you interested in casting and mold making you should definitely check them out. I decided to go with Smooth-On Rebound 25 rubber for the molds with a Plasti-Paste shell.  Both of these are available at Reynolds in smaller trial sizes as well as a 1 gallon size. Since this mold will be split into two pieces, the first step was to create the division line for the first half of the mold. It actually worked out really nicely that a piece of foam core perfectly fits into the center groove of the body that exists as part of the design.  After adding some registration keys, you can use anything really, I used acorn nuts, and a clay dam around the perimeter, its time for rubber.  The clay damn will stop the rubber from just running right off the side of the foam core. The silicone comes in two parts that you mix equal volumes of to activate.  It was applied in layers to build up the proper thickness.  A thin initial coat was applied over the whole surface to make sure there weren't any air bubbles in the mold.  After this coat started to set, I applied a thicker second coat.  After this coat started to set I added in registration keys for the hard shell mold.  This will ensure that the rubber always fits properly into the hard shell and that there isn't any distortion of the shape.  For the third and final coat of silicone, I added a few drops of Thi-Vex II silicone thickener to thicken up the rubber allowing me to apply a thicker coat.  The thickener stops the rubber from flowing down and settling in the low spots. After the rubber had fully cured which takes about 6 hours,  The next step was to apply the hard shell.  The first thing to do was to move the clay damn out about 1 inch to make room for a hard shell rim.  The Plasti-Paste works similarly to the rubber.  It comes in two parts that need to be mixed together.  The Plasti-Paste is applied in a single step.  There is no need to do layers like the silicone.  After a few hours this is fully cured. Time to do the other half of the mold.  After removing the foam core, the second half is pretty much the same as the first so I'm not going to bother repeating the steps.  Once the two half were made, The last thing I did was to drill holes around the edge.  There are for bolts to close up the mold and make it easier to cast pieces. Materials used for this stage Foam core acorn nuts oil based clay Smooth-on Rebound 25 silicone rubber Thi-Vex II silicone thickener Smooth-on Plati-Paste Mold release agent Step 5: Making the Molds - Arm Panel and Gun Box This section is going to be much shorter since the arm uses the same exact techniques used on the main body.  The only big difference between this mold and the body is that the central seam of the arm is not flat.  I used a thick card stock for the curved part of the arm.  Everything else for the arm is the same. Since the gun box is square the mold for this will be really simple to make.  I first made an MDF box about 1/4 inch bigger then the gun box and molded the outside of the gun box.  After this set, I flipped it over and poured rubber into the back of the gun box to create an inner mold.  By doing this I can cast a thin walled box so I still have room for the electronics that need to go inside it. The last image shows where I cut out the holes necessary for the various electronic components to be installed. Materials used for this stage Foam core Acorn nuts oil based clay Smooth-on Rebound 25 silicone rubber Thi-Vex II silicone thickener Smooth-on Plati-Paste Mold release agent Step 6: Making the Molds - Legs On to the legs. Since all these pieces are much smaller, Using a block mold is going to be much quicker and easier to do. This will also use a minimal amount of extra rubber. These are poured in halves like the body to create two pieces for each mold.  After cutting the foam core down to shape to make a box around each piece, I decided where I wanted the seam from the mold to be and used the oil based clay to set up the first half of the mold.  You can see the clay under the long leg piece.  Then its as simple as just pouring in the rubber until it covers the entire surface.  Once its cured, you flip it over, remove the clay and pour the other half.  It is important to use a mold release agent to prevent the two halves of the mold from sticking together.  I forgot to do this on one piece and had to cut the thing back apart with an exact o blade. The holes you see in the picture of the open molds are spots for the connection point with the body and legs. From here on out, all the pieces that are created will be part of the final turret which is pretty exciting! Its time to start casting pieces. Materials used for this stage Foamcore oil based clay Smooth-on Rebound 25 silicone rubber Mold release agent Step 7: Casting: Body and Arms and Legs I decided to use Smooth-Cast 300 to cast all the pieces. My original plan was to use this ultra white plastic as the final surface of the turret, with only some clear coat added for extra shine. After some test casts I determined that wasn't really going to work for a few reasons. More on that later. With weight being such an important issue, all pieces relating to the body will be hollow, and all leg pieces solid for extra strength and support. I'll talk about the body and arm first. My goal with the hollow pieces was to create a shell that is roughly 1/8" thick. After doing a few tests with different ways to achieve this, I decided to slush cast each part of the mold separately and then merge the 2 halves to create a final cast. This helped to guarantee that there weren't any spots that were too thin. By doing it this way I can add a little extra plastic wherever it might be needed. I built up the thickness in layer for each half of the mold.  I made sure to not let the plastic fully cure between each coat so the layers would stick together.  The inner surfaces are not the prettiest thing to look at but it gets the job done.  The arm and the body are both done in this way. There is a step that isn't pictured but  is really important.  Before I merged the two halves of the body, I embedded a  solid block of wood in the bottom rear of the main body that got sealed in place with more liquid plastic. This way there is a nice solid block that I will be able to drill into to attach the legs. The rear seam was also reinforced with a much thicker layer of plastic for structural support. The two halves of the body and arm molds were then closed up and the bolts were tightened on the molds.  Through a small hole in the middle of each piece I poured a few more cups of liquid plastic and spun each piece along the seam to marry the two halves together.  I now have a solid hollow cast for the body and arms. Its definitely a little more work to do it this way, but the final pulls are lightweight and durable! The legs were much quicker to cast since they are solid.  No slush casting required.  I just filled up the molds, let the plastic cure and then removed the finished pieces.  In all there were 11 pieces that got cast for a single turret.  On to painting. Materials used for this stage Smoothcast 300 Plastic cups mixer sticks For more detail: Building a Portal Turret with motion controlled audio and lighting ### BUILDING A DIGITAL COMPASS WITH AN ARDUINO The magnetic compass has been a crucial navigational tool for around a thousand years or so, perhaps longer. While classical versions still work perfectly well, you can now get digital magnetometers that work in much the same way. [mircemk] decided to whip up a digital compass to demonstrate the value of these parts. The build uses a HMC5883L magnetometer. While this can detect magnetic fields in three axes, just one is necessary for building a device that operates akin to a traditional compass. The output of the device is read by an Arduino Nano, which is hooked up to a string of WS2812B LEDs and a small OLED display. The LEDs display the bearing of magnetic north, while the OLED screen shows the current angle between the compass’s arrow and magnetic north. https://youtu.be/4SRXFxqP2Fw It’s a tidy build that would be a great educational resource for teaching both electronics and navigational skills. We’ve seen similar projects before, like the hilarious Pizza Compass. Video after the break. Source: BUILDING A DIGITAL COMPASS WITH AN ARDUINO ### The joystick that changed a life and could help many more Robert Book is a tinkerer by nature and works at Silicon Valley Bank with Ian McCutcheon, a geek by nature. One day they were talking and Robert shared his big problem: his son Jerry, who suffers from Muscular Dystrophy, couldn’t use a keyboard anymore but loved to play computer games. Jerry could only be able to use a mouse with his right hand and very limited abilities in his left. After a chat they realized that if they put their heads together they could make something that might enable him to play the different computer games with more ease and enjoyment. Ian knew that Arduino Leonardo has a great capability, it can emulate a keyboard and a mouse and soon they came up with the first release of an augmented joystick making Jerry much happier.   For more detail: The joystick that changed a life and could help many more ### Pan/Tilt Motion System for Control Education Pan/Tilt Motion System for Control Education Ricardo G. Sanfelice, University of Arizona Project supported by Mathworks Website developed by Colin Lasharr, University of Arizona   Contents Introduction Instructions for Building the System Installation Instructions The Arduino Board Simulink Initial Parameter Identification System Identification for Zenith Component System Identification for Azimuth Component Running An Experiment Tracking and Error Data Resources Introduction The device is composed of a rotating base with an elevation arm to orient the attitude of energy collectors, which are modular. The base of the device is linked to a drive train that is powered by a small servo motor and provides the propulsion to orient the attitude of the device. The elevation arm is connected to another small servo motor which provides the propulsion to orient the altitude of the device. The system is composed of an Arduino control board that receives input from the Simulink controller in real time, and then sends output to the motors. There are two stepper motors which control the zenith and the azimuth angles. These motors position the base and arm of the device.   For more detail: Pan/Tilt Motion System for Control Education ### ENHANCE VR IMMERSION BY SHOEHORNING AN AMBILIGHT INTO A HEADSET Everyone wants a wider field of view in their VR headsets, but that’s not an easy nut to crack. [Statonwest] shows there’s a way to get at least some of the immersion benefits with a bit of simple hardware thanks to the VR Ambilight. A few years ago the Ambilight showed up as a way to spice up TV viewing by using an RGB strip mounted to the back of the TV. The RGB lighting would create a sort of ambient halo of color around the screen, but the kicker was that the colors were chosen to match what was happening on-screen, giving the impression that the screen content was spilling out into the surrounding area. It was a neat effect that spawned remakes and improvements, and one day someone got the idea to combine the concept with VR headsets. [Statonwest] added a tiny Ambilight to the Valve Index, making use of the spare USB port on the front of the device which is a nice piece of hacker-friendly design. The VR Ambilight puts the RGB lighting into the user’s peripheral vision, and just like the original Ambilight, the colors are chosen to match what’s happening at the edges of the on-screen content. It involves only an Arduino, some small RGB strips, and a piece of software. If you’re curious, it might make a good weekend PC VR project. You just might that stuff already hanging around in your parts bin. If you want to add a DIY Ambilight to your TV, that’s not too hard. The best ones will handle any video source. Source: RGB strip tucked behind a diffusor panel. ### NEXT-GENERATION AI PROCESSING SOLUTION FOR VIDEO ANALYTICS AT THE ‘EDGE Foxconn has combined its high-density, fan-less, and highly efficient edge computing solution, “BOXiedge™”, with Socionext’s high-efficiency parallel processor “SynQuacer™” SC2A11, and the Hailo-8™ deep learning processor. The new combination provides market-leading energy efficiency for standalone AI inference nodes, benefiting applications including smart cities, smart medical, smart retail, and industrial IoT. Robust Solution Processes More Than 20 Camera Streaming Inputs in Real Time In a global AI market forecasted by research firm IDC to approach $98.4 billion in revenue in 2023, this joint solution helps address the need for cost-effective multiprocessing capabilities required in video analytics, image classifications, and object segmentation. The robust, high-efficiency product is capable of processing and analyzing over 20 streaming camera input feeds in real-time, all at the edge. The result is a high-density, low-power, complete local VMS server, ensuring top performance for video analytics and privacy, including image classification, detection, pose estimation, and various other AI-powered applications – all in real time. “Our vision at Foxconn is to pave the way for next generation AI solutions,” said Gene Liu, VP of Semiconductor Subgroup at Foxconn Technology Group. “We are confident that this strategic collaboration with our long-standing partner, Socionext, alongside Hailo, will do more than that. We recognize the great potential in adopting AI solutions for a multitude of applications, such as tumor detection and robotic navigation. This is why we are proud to say that our edge computing solution combined with Hailo’s deep learning processor will create even better energy efficiency for standalone AI inference nodes to positively impact rapidly evolving sectors including smart cities, smart medical, smart retail, and industrial IoT.” Read more: NEXT-GENERATION AI PROCESSING SOLUTION FOR VIDEO ANALYTICS AT THE ‘EDGE ### Esplora is now available in the Arduino store The Arduino Esplora is a ready-to-use, easy-to-hold controller that lets you explore the infinitive possibilities you have in the world of sensor and actuators, without having to deal with breadboards, soldering or cable. There is no limit to the applications-amusing, educational, useful – you can program. You can even add a couple of extra sensor and actuators if you need them. Add a colour LCD module and you’ll be able to create original game on your very own open-source console!   For more detail: Esplora is now available in the Arduino store ### Hack the Nabaztag using Arduino This is a Nabaztag - Armenian, apparently, for "hare". It's an adorable bunny rabbit packed with sensors and communication devices.... and it's completely unusable. There's people who wrote some interesting software to hack it, and I applaud them: however, I could never actually get my Karotz (Nabaztag's third incarnation) through the arduous initialization. So, to gain full control over the Bunny, we'll have to do some hardware hacking. This Instructable takes you through the dissection of a "Nabaztag/tag" and the re-assembly of the basic bits - ears, buttons, and LEDs - with all the code you need to hack one yourself. It doesn't have to end there, though - once you've embedded your own microcontroller, you'll have the flexibility to add whatever functions and sensors you'd like. Step 1: Materials. A bunny. I use a Nabaztag/tag, but either the Nabaztag or Karotz will be fine for this, as we don't delve into the more complicated communications. A microcontroller. This is based on the Teensy 3.1, but virtually anything will do. In fact, if you're familiar with BeagleBoneBlacks or RasPi's and plan on doing advanced processing or communication (audio, bluetooth, wifi), use that, as it'll make your bunny way more powerful. LEDs. I used addressable LED strip (WS2811), but plain old LEDs will work fine if you just want them to turn on and off. H-Bridge and Breakout board. To control the motors, you need an H-Bridge chip. I use an SN754410 to control both motors. It's also good to get a breakout board for it so you don't have to solder directly to its pins. https://www.sparkfun.com/products/315 Headers and sockets. These are small and break into perfect-size pieces to fit into the existing plugs. https://www.sparkfun.com/products/116 Hacker's screwdriver set. The first set of screws you need to take out need a triangle screwdriver bit; the rest are all regular Phillips screws. I highly recommend this set as an excellent addition to your kit, if you don't have one already: http://www.ifixit.com/Store/Tools/54-Bit-Driver-K... Colored wire. We're going to be connecting lots of I/O devices, so colorful wire is highly recommended to keep track of everything. Resistors. 2 x 150 ohm 2 x 10K (or something within 5-20K range) USB Micro cable. Power/data to the Teensy. It's gonna be permanent, though, so make sure you don't mind sacrificing it for the project. Other tools/supplies: - Soldering kit - Electrical tape - Scissors/blade - Wire cutters/strippers - Cardboard - Heat shrink USB phone charger (Optional). If you want to make your little guy portable, get one of these "lipstick" batteries. You can find them at best buy and even some drug stores, but they're cheaper online: http://www.ianker.com/product/79AN3K-PKA Breadboard (Optional). If you like to test stuff out before hard-soldering anything, a prototyping board can be very handy. Line your Teensy with header pins and stick it in, then remove it when you're ready to build it. Software. To use my code, you need: - Arduino environment - Teensyduino driver - Adafruit Neopixel library Step 2: Dissection. Pop the magnetic ears off and undo the four triangle screws on Bunny's underside; the whole thing should slide open. All the I/O devices (except for the LEDs) are connected to the main board via quick-connect headers. Do NOT cut the wires: we'll be attaching our own headers later, so there's no sense in ruining the existing wires. Pry each one out of its plug; peel back the sticky gum that holds it in place with something pointy. Keep unplugging and unscrewing until you have all the parts disconnected from the main blue board. If you want a full step-by-step, there's one here: http://www.petertyser.com/2007/03/11/nabaztag-nab.... The next step also lists all the parts. Step 3: Parts. Here's what we're going to use: On/off button (on its head) Scroll wheel (yellow, on its butt) Ear motors (DC motors, which control the ears through a plastic gear box) Ear encoders (blue chips at ears that 'watch' gear teeth for positioning) There's some parts that you can use, but that I don't cover in this Instructable: Microphone (embedded in the black base ring) Speaker (on its back) Headphone jack Power jack (8V, 900mA, on the bottom of the black column) RFID reader (smaller blue chip mounted above main board) WiFi antenna (green board on its back, with the thin silver wire) And finally there's some stuff on the main board, which I don't think we can reuse: LEDs WiFi Bluetooth Step 4: INPUT: Head Button. We'll start with the easiest bit: the on/off button on top of the bunny's head. Find the white and grey wires trailing down the side. If you take some wire and tin the ends just a little bit, they'll be perfect for sticking into the connector. Grab your microcontroller and connect one wire to GND and one to a pin (it doesn't matter which). This one is a digital input pin, which means we're only looking to see if it's HIGH or LOW. Write your own code to test it, or use mine: https://github.com/agentcupcake/Nabaztag-Hack/blob... This script repeatedly checks to see whether the button is being pushed, and returns a 1 or 0 in the serial monitor. The signal is being 'debounced' - that is, accounting for any tremors in the analog signal. Step 5: INPUT: Scroll Wheel. The scroll wheel is a potentiometer: it measures voltage, which changes as we rub the 'wiper' up and down. This is an analog input, which the Teensy will convert into a number between 0 and 1023. Connect the: BROWN wire to GND ORANGE wire to PWR RED wire to an ANALOG PIN Write some code to read the potentiometer's values. They should be fairly steady as you "scroll" through them; for most purposes, you won't need any signal conditioning. https://github.com/agentcupcake/Nabaztag-Hack/blob... This script will return the scroll value to the Serial Monitor if the head button is held. Step 6: OUTPUT: LEDs. Since the Nabaztag's LEDs are embedded on the main board, we're going to have to build our own. First, decide what LEDs you want. You can use addressable strip to make shapes (a heart? a red nose?), or string a line of basic LEDs together, or connect several LEDs to different pins and leave them as spots, like the original. For mine, I used five pixels from an addressable strip, cut and wired to make a zig zag. The wires should connect to 5V PWR, GND, and an output pin. If you're using simple LEDs, use Arduino's "Blink" as an example for writing your code. See if you can get your lights to turn on when you press the head button. https://github.com/agentcupcake/Nabaztag-Hack/blob... In this script, you can click the head button to turn the LEDs ON or OFF. Use the scroll wheel to pick from one of 6 colors. Step 7: An enclosure for the LEDs. Note that the LEDs on the main board have the cone of black plastic around them. This is to prevent the light from filling the inside of the whole rabbit, giving you a nice round spot of light instead. To replicate this, take thin cardboard (such as from a cereal box, etc) or other stiff material, and cut a rectangle the shape of the original PCB. Include the holes so it can slide properly into place. Then, cut strips of cardboard about an inch wide and make walls to define the shape you want. It's easier to bend cardboard if you pass a blade along the fold line first. Tape them to the cardboard rectangle, then put the bunny back together to see how it looks through the white plastic. If the bunny's cover doesn't fit, trim the cardboard to fit the contours; if the light bleeds out around the edge, add electrical tape 'flaps' that can bend and create a seal along the edge. The first photo is my enclosure half-finished; the second is what it looks like inside the bunny. You can see how the walls define a nice, crisp edge, and where there is no wall, the light bleeds out.   For more detail: Hack the Nabaztag using Arduino ### Do-it-yourself PIN-diode counter Still under construction Sorry, only the green links are translated yet. Check this website soon for new translations. Why this webpage? Explanation (pdf-file) Traditional versus PIN Diode Geiger Counter A short intro (pdf-file) Do-it-yourself PIN-diode counter Intro to the basics (pdf-file) Complete do-it-yourself instructions The "Stuttgarter Geigerle" The most simple and cheapest solution: The "Mini-Geigerle" used with the PC-soundcard The "Stuttgarter Geigerle" for thru hole assembly Construction manual for the "Stuttgarter Geigerle" (thru hole assembly, soldering and housing) MS Excel Bill of material for thruhole assembly (Farnell/Reichelt, Germany Stand Juli 2012) DIY instructions for traditional Geiger-Muller tube geiger counters The "Geiger Classic" Other DIY instructions Improved radiation meter. Elektor Gamma-Photon Radiation Detector, Maxim Funkschau 1986: Radioaktivitätsmesser im Miniformat (a German article) Further infos on PIN-diode counter What does a PIN-diode counter really measure? Detection of alpha radiation with the PIN-diode counter Solar power for the "Stuttgarter Geigerle" Detection of weak radioactivity given the example of a potassium fizzy tablet Self-made alpha- beta- and gamma-sensitive radiation detectors on the basis of a low cost PIN-diode Comparison to an German army radiation dosemeter Comparison to a simple, commercial Geiger-Mueller counter Spectroscopy with the Mini-Geigerle Estimation of the effective body dose from the activity of radionuclides Effects of distance and shielding on alpha radiation measurements Radioctivity of cigarette ash Calibration of the „Stuttgarter Geigerle“ PIN-diode counter Measurements with the "Stuttgarter Geigerle" on regular granite building material Arduino The Tino Kit - now available for the interessted community The Radiation Detection Shield "Tino" for the Arduino - professional calibrated measurement of radioactivity with the Teviso radiation sensor The Tino Shield is a plug-on PCB stacked on an Arduino microcontroller board. With the Arduino it forms a real measurement instrument calibrated by Teviso, Switzerland, the manufacturer of the radiation sensor module. This shield is now available as kit for DIY assembly. Arduino programs for the Tino shield can be found on the download page. Description of the kit Ordering options, prices and shipment infos Radon Yes, it really works: You can measure the specific radon activity in a given air volume with a geiger counter. There are web pages that state the opposite. This graph shows the measurement result of radon exhalation in a chamber which was filled with a granite stone from Menzenschwand (Black Forest area) at time zero. After ten days the stone was removed carefully and the chamber was closed again continuing the measurement. Finally, after 18 days the chamber was opened completely and the detector was kept on running. The pile-up of radon activity with the half-life constant of 3.8 days is clearly visible followed by disintegration with the same time constant. Well, it was not a normal geiger counter that was used for this measurement. It was the "Radon-Geigerle", a modified version of the "Stuttgarter Geigerle" that was made sensitive to alpha radiation. However, the cost and effort was surprisingly small, it is only required to exchange the photodiodes. During further investigation it turned out that even regular granite building material exhales quite a lot of radon depending on the source of origin and the content of uranium. More in the follwing documents.   For more detail: Do-it-yourself PIN-diode counter ### A QUICK LOOK AT THE HILBERT TRANSFORM While the Fourier transform gets all the attention, there are other transforms that engineers and mathematicians use to transform signals from one form to another. Sometimes you use a transform to make a signal more amenable to analysis. Other times, you do it because you want to manipulate it, and the transform is easier to change than the original signal. [Electroagenda] explains the Hilbert transform, which is often used to generate single-sideband signals. The math behind the transformation is pretty hairy. However, if you understand the Fourier transformer, you can multiply the Fourier transform by -i sgn(ω), but that isn’t really going to help you much in a practical sense. If you don’t want to bog down in the math, skip immediately to section two of the post. That’s where it focuses more on the practical effect of the transform. You can think of the transform as a function that produces a 90 degree phase shift with a constant gain. For negative frequencies, the rotation is 90 degrees and for positive frequencies, the shift is negative. Section 3 shows how mixing a signal with its own Hilbert transform can produce single sideband signals. Typically, a signal is transformed, and the result is multiplied by j (the square root of negative one). When you mix this with the original signal, the negative parts cancel out, while the positive frequencies reinforce each other. If you prefer, you can subtract to get the opposite effect and, thus, the opposite sideband. There are practical concerns. You must approximate the Hilbert transform, and that will require a filter that has a delay. You’ll need an equalizing delay in the main signal so that the parts that mix together are from the same input time. It also means the phase isn’t as clean as you expect from the theoretical model. If you want to model it all in Matlab, you might find this post enjoyable. If you want a more ham radio take on the same material, check out [K6JCA’s] article on the topic, or watch [ZL2CTM’s] video on the topic below. https://youtu.be/M4OKr2Zpcj0 If you aren’t ready to swim on the deep end of the signal processing pool, maybe start with some spreadsheets. Once you have a good grip on how IQ can demodulate and modulate, you’ll have an easier time with the Hilbert transform. Source: A QUICK LOOK AT THE HILBERT TRANSFORM ### DIY Parking Sonsor using Arduino The last time I was home visiting my parents I noticed bumper imprints caused by my mother suburban on the stairs leading up from the garage. Their garage it turns out is just barely long enough to fit their gigantic vehicles. So I decided it would be nice to have some visual cue for parking. Out came the arduino and a sonar range finder from Radio Shack and the result was this tutorial. Hot glue the arduino to the bottom of the box and run the power supple to it Connect the 5V and Ground wires to the range finder. Connect the Pulse cable from the range finder to a “PWM” input on the arduino (this is necessary because we’ll be sending pulses through the same leed that we listen for a return on). I used digital pin 7 with PWM for the pulse connection. Test the tri color LED to find out which connectors make which colors. You will need to keep track of which wire creates which colors and connect them to three digital pins on the arduino. Keep track of the pin numbers. For instance, I connected to digital pins 11, 12 and 13 with red, green and blue respectively. Once you have everything connected we’ll start writing the program. After your finished with the programming and you’re sure it works, it’s a good idea to seal everything up in the box to make sure none of the wires get disconnected before you mount the sensor to your wall. Programming Luckily, Arduino already provides an example of how to use the pulse sonar sensor. Select the File -> Examples -> Sensors -> Ping example in the Arduino programming kit. Once open, select the code and copy it to a blank sketch. Save the new project under sketches I used the name “parking Example”. Now we have something to work with. Begin customizing the code. First, we are only going to be measuring inches, not cm so lets comment out the code snippet about halfway down that runs a function to calculate cm. Comment out: 1 //cm = microsecondsToCentimeters(duration); Next we don’t need to send sonar pings out at such a high interval. We only need to ping about every second because the car will (hopefully) be moving slowly into the garage. So at the bottom of the loop function set the delay to 1000: 1 delay(1000); Next we need to tell arduino which pins we’ll be using for our LED output. At the top where we have: const int pingPin = 7; We’ll add: 1 2 3 pinMode(13, OUTPUT); // blue pinMode(12, OUTPUT); // green pinMode(11, OUTPUT); // red Now that ardiuno has a setup for those pins, we’ll need to send a signal whenever we want that color to show. So After receiving the signal from our ping, we’ll compute the distance and if it falls within certain ranges we’ll show a specific color. I want the driver to see green until they get within 24 inches of the wall, at that point, I want the light to turn blue, signaling that they are getting closer. Then when they are within 6 inches of the wall, the red light should turn on, indicating to the driver that they should stop. Major Components in Project Arduino (I had a duemilanove available) Ultrasonic Range Finder Wire Small box 9V power supply (You can find old power supplies for cheap at thrift stores) Tri Color LED Hot Glue Gun Breadboard For more detail: DIY Parking Sonsor using Arduino ### Using Mozzi Library with 5 potentiometers using arduino Getting Started The goal of this project was to create filters and controls to that can manipulate sound that is being generated through an Arduino. Normally Arduino can only generate simple tones that are not useful if you are trying to achieve complex sounds and do sound manipulation. In order to do this project Mozzi library was used. This library helps Arduino to create complex sounds and also have real time input. Mozzi does all the job for you in the background with a non-blocking code that allows you to have multiple inputs at the same time.   What you need Arduino Mozzi Library 100K Potentiometes - x5 Male headers Female headers 1/8" Audio Jack Audio Cable Speaker What is an Arduino? Arduino is a tool for making computers that can sense and control more of the physical world than your desktop computer. It's an open-source physical computing platform based on a simple microcontroller board, and a development environment for writing software for the board. Arduino can be used to develop interactive objects, taking inputs from a variety of switches or sensors, and controlling a variety of lights, motors, and other physical outputs. Arduino projects can be stand-alone, or they can communicate with software running on your computer (e.g. Flash, Processing, MaxMSP.) The boards can be assembled by hand or purchased preassembled; the open-source IDE can be downloaded for free. For more information check out: http://arduino.cc/en/Guide/Introduction Step 1: Setting Up Mozzi Library What is Mozzi? Currently your Arduino can only beep like a microwave oven. Mozzi brings your Arduino to life by allowing it to produce much more complex and interesting growls, sweeps and chorusing atmospherics. These sounds can be quickly and easily constructed from familiar synthesis units like oscillators, delays, filters and envelopes. You can use Mozzi to generate algorithmic music for an installation or performance, or make interactive sonifications of sensors, on a small, modular and super cheap Arduino, without the need for additional shields, message passing or external synths. Check out Mozzi: http://sensorium.github.io/Mozzi/ Download Mozzi Library: http://sensorium.github.io/Mozzi/ Setting Up Once you download the Mozzi library, unzip the file and put it in your Arduino➞libraries folder. Quit Arduino (if open) and reopen it. You should now be able to see Mozzi in the list under Arduino➞Sketch➞Import Library and also under the examples. Step 2: Putting it together - 1 Potentiometers First get 5 pairs of 100K potentiometers. The middle output of the potentiometer is always the analog output. The other 2 outputs on the left and right are either power (5V) or ground. Solder your red, black and white wires on to the potentiometers. After get enough of male headers and solder them to the ends of each wire. This will make it easier to put it together on the Arduino afterwards. The reason that I did not solder the wires on a proto shield is to make it removable so it can be replaced with a different kind of input like sensors. Step 3: Putting it together - 2 Audio Get your Audio Jack and solder a white wire to one of the positive outputs and solder the black wire to the negative output. After solder male headers to each end of the wires, same as the ones we did for the potentiometers. To figure out the positive and negative outputs of the Audio Jack, check out these images: Audio Jack image 1 Audio Jack image 2 Female headers I created this part to have a terminal where I can connect all my power or my ground connections, but this is not the best way of doing it. I would recommend using an Arduino proto shield with a breadboard to connect everything together. If you would like to do it the quick and easy way I did it, then solder the bottom parts of the female headers together so they all connect with each other. After solder on male header to the bottom to connect it to the Arduino.   For more detail: Using Mozzi Library with 5 potentiometers using arduino ### SAM D21 CURIOSITY NANO EVALUATION KIT Microchip’s kit is a hardware platform designed to evaluate the SAMD21G17D microcontroller (MCU) Microchip’s DM320119 Curiosity Nano evaluation kit is a hardware platform designed to evaluate the SAMD21G17D MCU and supported by the MPLAB® X integrated development environment (IDE). The evaluation kit provides easy access to the features of the SAMD21G17D to integrate the device into a custom design. The Curiosity Nano series evaluation kits include an onboard Nano debugger requiring no external tools to program the SAMD21G17D device. The evaluation kit is compatible with the AC164162 Curiosity Nano baseboard which allows users to quickly scale and prototype their innovative designs using the SAMD21G17D MCU. The Curiosity Nano is an evaluation platform that provides a set of small boards with access to most of the MCU I/Os. The platform consists of a series of low pin-count MCU boards, which are integrated with the MPLAB X IDE to present relevant user guides, application notes, datasheets, and example codes. The platform features a Virtual COM port (CDC) for serial communication to a host PC and a data gateway interface (DGI) GPIO. The DM320119 Curiosity Nano evaluation kit is ideal for a variety of applications including industrial, medical, home automation, and IoT. Features SAMD21G17D MCUOne yellow user LEDAdjustable target voltage: Read more: SAM D21 CURIOSITY NANO EVALUATION KIT ### 99% PARTSPIRATION Thomas Edison once said that genius was 1% inspiration and 99% perspiration. That doesn’t leave much room for partspiration. I’m working on a top-secret project, and had to place a parts order on AliExpress with a minimum order quantity of five in order to get decent shipping times. No big deal, financially, and it’s always great to have spares as backup for the ones you fry. But as I started lighting up the little round smartwatch displays to put them through their paces, I started thinking of all sorts of ways that I could use something like this. I had no idea how easy to drive they were, or frankly, how good they looked in person. When you get a round display in your hands, you find that you need dial indicators everywhere. And then my son came by and said “Oh neat. I want one!” and started thinking up all sorts of gizmos that I could put them in. Two of them would make awesome eyes, and he’s been on a chameleon kick – the animal, you know. So we’re looking for chameleon eye animations online. And all of a sudden, I have more projects lined up than I have remaining screens. I’m calling this phenomenon “partspiration”. You know, when you figure out how to use something and then you see uses for it everywhere? Time to place another Ali order. GEARING UP FOR THE HACKADAY PRIZE And don’t forget, we just started the next round of the Hackaday Prize: Gearing Up. In this challenge round we want to see your best DIY tools, jigs, and workflow accelerators. Custom reflow plates, home-built power supplies, or even software tools – as long as it helps you get the job done, it has a place here. You’ve got until Aug. 8 to get your entry finished, but head on over to Hackaday.io and get started now. Source: 99% PARTSPIRATION ### Amazon Echo transformed into animatronic robot When it comes to voice assistant devices, the Amazon Echo, boasting the ever-ready Alexa, has won the hearts of millions worldwide with its impressive functionalities. However, let’s be honest, while these devices score high on practicality, they lack the flair and personality that would truly bring them to life. Well, there’s some good news for those who long to see their Alexa with a dash of character and physical animation – Workshop Nation has just made that dream a reality by transforming the Amazon Echo into an engaging animatronic robot. Amazon Echo transformation With the intrinsic functionality of Amazon Echo still very much intact, the genius behind Workshop Nation decided to take it a notch higher, crafting a body for the Alexa brain that wouldn’t be out of place in a vintage sci-fi movie. Made with a potpourri of both old and new parts, this invention offers a unique twist to the standard Alexa voice assistant device.But, how exactly was this feat achieved? Here’s a simplified explanation: An antique CRT TV was brought back to life, serving as an integral part of the robot. The robot was adorned with 3D-printed animatronic eyes, ingeniously crafted from a design by Will Cogley. These eyes, driven by servo motors, breathe life into the Alexa persona. The CRT display springs to life whenever Alexa speaks, with a voice waveform driven by the signal voltage onto one of the electron beam coils. New Amazon Echo Pop, Show 5, Buds and more Whats inside the Amazon Echo Dot and tap? Utilizing Alexa Underneath this robotic wizardry lies an Arduino Mega 2560 board. This board controls the animatronics while also keeping an eye on the Useful Sensors Person Sensor. This handy sensor ensures the animatronic eyes track any human presence in the area, making the robotic Alexa more interactive and engaging. https://youtu.be/bO-DWWFolPw But that’s not all. Thanks to the Arduino board, you can now circumvent the standard “Alexa” wake word. Want to personalize your robot? Go ahead. Call it anything you fancy and it will still respond to your queries. All of these intricacies are housed within a frame made from laser-cut clear acrylic and threaded rods, providing both stability and a distinctive aesthetic appeal. New Amazon Echo Link streams audio to your stereo Raspberry Pi smart speaker hat lets you change its name Animatronic robot If you’re thrilled by the possibility of bringing your voice assistant to life and you’re thinking, “How do I start?” rest assured it’s not as complicated as you might think. The technologies and components involved are widely available. You can learn more about Arduino boards from their official website, delve into the realm of animatronics with Will Cogley’s designs, and gather more about different sensors from Useful Sensors. Ultimately, this innovative adaptation of the Amazon Echo is not just about the gadget’s transformation, but the transformation of our relationship with technology. It’s a leap towards making our interaction with artificial intelligence more lifelike and engaging. For anyone keen to push the boundaries of AI possibilities, the animatronic Amazon Echo serves as an exciting and inspirational launch pad. Source: Amazon Echo transformed into animatronic robot ### Arduino Keypad Garage Door Opener My old keypad GDO gave up the ghost a while back so I decided I'd undertake a new Arduino based project.  I ordered a Velleman 12 key keypad from some supplier.  I don't remember who, but I did a quick search and found a bunch of people selling them for about $5 US so this is still a viable project. About the circuit The keypad has 13 connections.  One for each key and one common.  One side of each of the keypad switches goes to common and the other to one of the 12 key connections.  I elected to build a resistor network as seen in the enclosed schematic.  Click on the schematic to see a larger version that's actually readable or visit http://fayettedigital.com/images/GDO.png in a separate window or tab.  Thanks to Britton Kerin for the Arduino schematic symbol. There are 12 one K resistors in series.  This produces a voltage drop of about 0.42 volts across each resistor.  When a key is pressed the voltage at  one of the resistors is connected to the common connection on the keypad.  Since this then is connected to the analog input, we can measure the relative voltage.  I am driving this from a 12 volt dongle, hence the addition of the 5 volt regulator to provide power to the arduino.  The tag on the Arduino says UNO but I am using a Duemilianove for development.  The keypad has actually 14 connections, number 2 isn't connected.  I didn't find a symbol for a 13 pin connector to represent the keypad, so I used a 12 pin and a one pin connector.  Even though the schematic shows them as two parts, there is just one. R13, the 15K resistor is present to assure that when nothing is pressed the returned ADC value is near 5 volts.  Q1 is shown as a 2N2222 but any NPN silicon general purpose transistor will work.  The diode across the coil of the relay should be a Schottky device, but I've gotten away with using normal diodes like a 1N914 or 1N4148. The relay I'm using is a Radio Shack 275-0241 12VDC Relay.  Current draw is about 40 ma.  It's not shown on the schematic due to space constraints but the normally open contact and the common contact on the relay go to the opener.  My original opener connected the wires briefly to open/close the door so this device will do the same.  SW1 is the program switch.  When the switch is closed and the Arduino is reset the software is placed into program mode.  To return to normal mode open the switch and reset the Arduino.  In the pictures you won't see the switch.  There are two reasons. In this reroll of the project, I've substituted a jumper wire for the switch.  The other reason is that on version 1 of this project I rolled my own processor board and the switch is on it. For more detail: Arduino Keypad Garage Door Opener ### HARTING EUROPE, COMPONENT CARRIER NOW REPLACING FLEXIBLE PCBS Flexible circuit boards offer numerous advantages. However, the mechanical fixation of these circuit boards is highly complex. HARTING has developed a new solution based on 3D-MID technology that is capable of replacing flexible circuit boards. Thanks to component carriers, cost savings of up to two-thirds can be achieved. At the MID process, on the injection molded part a customized layout is applied. At the electronic assembly, the components are mounted on the desired surface. Flexible printed circuit boards made of thin polyimide films have established themselves in many product areas thanks to their application flexibility. Populating and assembling them, however, is decidedly more complex. This is where a newly developed component carrier from HARTING enters the picture. A standardized component carrier for electronic components By harnessing this all new HARTING development, electronic components can be fitted directly onto the component carrier, thereby replacing flexible circuit boards. The component carrier serves as a connecting element between the printed circuit board (PCB) and electronic components such as LEDs, ICs, photodiodes and sensors. Electronic components are mounted directly on the new component carrier in automated processes. The frequently complex processes involved in processing flexible circuit boards is dispensed with, thereby reducing costs by up to two-thirds. The populated component carriers are delivered in tape & reel. In their standard design, the carriers can be processed in automatic assembly systems, just like other SMD electronic components. Two different sizes are currently available and can accommodate electronic components of standard size SOIC-8 and smaller. Moreover, HARTING can also produce the carriers in customer-specific sizes. Read more: HARTING EUROPE, COMPONENT CARRIER NOW REPLACING FLEXIBLE PCBS ### Arduino Quilting Machine The Arduino Quilting Machine combines the mechanics of a sewing machine, CNC technology and Arduino as an operating system. The project is designed to translate a vector file from a computer into G-code and subsequently into Arduino language which then moves the machine. The project uses four stepper motors to control the x-axis, y-axis, the bobbin case, and the threading. The bed moves in x and y direction while the threading moves up and down. This project is currently a work in progress and still being developed and tested. Step 1: Block Diagram Step 2: Parts Step 3: Laser-cut 1. Most of the parts are from laser-cut. I modeled in Rhino first to see how it looks and then make this laser cut file. The file is for 3/8”, 1/8” and 1/4" plywood. 2. Glue all the same parts together to prepare for construction, for example, all the A1 together, and all the B2 together....etc. lasercut file.AI85 KB Step 4: Deconstructing the Mini Sewing Machine Instead of fabricating all mechanical parts of the sewing machine, I took the existing parts of a mini sewing machine and reassembled them for my Arduino Quilting Machine. The only custom parts are the shuttle hook cover, shuttle race, bobbin case and the entire needle bar. Step 5: Construction 1. Take out linear bearings, and place it in C1/C2 and E1/E2. 2. Place square nut into C3/C4 and D1/D2. 3. Glue C1/C2/C3/C4 on each corner of B1 ( This is the bed of the machine that moves X direction), and place B2 on top of B1. 4. Place one threaded rod and one linear shaft into C1/C2/C3/C4, and then put it aside. 5. Glue D1/D2 and E1/E2 on both sides of F1 (This is the bed of the machine that moves in the Y-axis), and place one threaded rod and one linear shaft into D1/D2 and E1/E2. 6. Glue a piece of P1 on top of A1/A2, I1 and J1, and then place A1/A2 at both ends of the linear shaft of the X-axis bed, and place I1 and J1 at both ends of the Y-axis bed. 7. Use the rest of P1 and some 1/4" screws to tighten both linear shafts. 8. Glue L1 to M1, and L2 to M2. Place two stepper motors on top of them. 9. Connect threaded rod to stepper motors with shaft couplers. Just one on each end of the two rods. 10. Place G1 at the end of threaded rod of X-axis bed, and H1 at the end of Y-axis bed. 11. Place and glue the entire Y-axis bed on Q1. 12. Place and glue the entire X-axis bed on the Y-axis bed.   For more detail: Arduino Quilting Machine ### The iPhone 6 Teardown Review Double the iPhone, double the teardown! With the iPhone 6 Plus laid out for inspection, we turn our attention to the smaller iPhone 6—though at 4.7", it's still a giant among iPhones. What was so big that Apple couldn't fit it into the familiar form factor? Let's shake it out onto the teardown table and find out! This year we're doing the iPhone 6 teardown in English, Français, Deutsch, Español, Italiano, Nederlands, Русский, and 中文. Gear up for more teardown! Follow us on Facebook, Instagram, or Twitter for the latest teardown news.   For more detail: The iPhone 6 Teardown Review ### Diy Xbox wireless controller adapter for Pc This instructable will go over the steps to connect a RF module from an RROD xbox to your computer so you can use a wireless controller with your computer. ******DISCLAIMER******* DONT TRY THIS IF YOU DONT HAVE ANY EXPERIENCE WITH ELECTRONICS/SOLDERING OR COMPUTERS IM NOT RESPONSIBLE IF YOU SCREW UP.... now that we've gotten that out of the way Step 1: Soldering .... First strip the usb cable, inside there will be a black wire, a red wire, a white wire, and a green wire. there will also be some shielding and a shield ground wire (usually not covered) these you can cut back to the plactic. strip about an 1/8th inch of plastic off each of the four wires. Next you will need to solder the diodes to gether in series ->-> and then solder the side with the line on it to pin 1 and the side without the line to the red wire in the usb cable **** make sure the diodes are the right way around before soldering**** Now you can solder the white wire to pin 2, the green wire to pin 3, and the black wire to pin 4 solder a piece of wire to each of pins 5-7 too, make sure they are long enough to connect to your arduin. Step 2: Code /* Arduino code to communicate with xbox 360 RF module. Original work by (yaywoop) / additional ideas from Alexander Martinez - modified by dilandou (www.dilandou.com, www.diru.org/wordpress) First sends LED initialisation code followed by LED startup animation code, then sleeps until a button press for sync command. RF module must be powered with 3.3V, two diodes in series with USB 5v will do. Connect the USB wires to a host computer, and the data and serial wires to Arduino. of course, make sure to have a common ground */ #include #define sync_pin 2 //power button repurposed for sync button (pin 5 on the module) #define data_pin 3 //data line (pin 6 on the module) #define clock_pin 4 //clock line (pin 7 on module) int led_cmd[10] =  {0,0,1,0,0,0,0,1,0,0}; //Activates/initialises the LEDs, leaving the center LED lit. int anim_cmd[10] = {0,0,1,0,0,0,0,1,0,1}; //Makes the startup animation on the ring of light. int sync_cmd[10] = {0,0,0,0,0,0,0,1,0,0}; //Initiates the sync process. volatile boolean sync_enable = 0; void sendData(int cmd_do[]) { pinMode(data_pin, OUTPUT); digitalWrite(data_pin, LOW);    //start sending data. int prev = 1; for(int i = 0; i < 10; i++){ while (prev == digitalRead(clock_pin)){} //detects change in clock prev = digitalRead(clock_pin); // should be after downward edge of clock, so send bit of data now digitalWrite(data_pin, cmd_do[i]); while (prev == digitalRead(clock_pin)){} //detects upward edge of clock prev = digitalRead(clock_pin); } digitalWrite(data_pin, HIGH); pinMode(data_pin, INPUT); } void initLEDs(){ sendData(led_cmd); delay(50); sendData(anim_cmd); delay(50); } void wakeUp(){ sync_enable = 1; } void sleepNow() { set_sleep_mode(SLEEP_MODE_PWR_DOWN); // set sleep mode sleep_enable(); //enable sleep bit attachInterrupt(0, wakeUp, LOW); sleep_mode(); sleep_disable(); //disable sleep bit detachInterrupt(0); // disables interrupt 0 on pin 2 } void setup() { Serial.begin(9600); pinMode(sync_pin, INPUT); digitalWrite(sync_pin,HIGH); pinMode(data_pin, INPUT); pinMode(clock_pin, INPUT); delay(2000); initLEDs(); //  sendData(sync_cmd); } void loop(){ Serial.println("Sleeping."); sleepNow(); delay(200); if(sync_enable==1) { Serial.println("Syncing."); sendData(sync_cmd); sync_enable = 0; } } or you can get it from here http://diru.org/wordpress/hacking/xbox-360-rf-module-arduino/ you will need to program your arduino with this code I did not come up with this code all credit for this code goes to dilandou and Alex Martinez Step 3: Software download this http://www.microsoft.com/hardware/en-us/d/xbox-360-wireless-controller-for-windows and install go to the install folder (Microsoft Xbox 360 Acessories) in your program files find Xusb21.inf this is the driver file for the software you will be modifying it so it will recognise your hardware open it with a text editor or a program like Notepad++ (recomended) find these headers [MSFT.NTx86.6.0], [MSFT.NTamd64.6.0], [MSFT.NTx86], and [MSFT.NTamd64]. you are going to replace the 5 lines of code under each of them the original code looks like this %XUSB21.DeviceName.Wired%=CC_Install, USB\Vid_045E&Pid_028E %XUSB21.DeviceName%=CC_Install, USB\Vid_045E&Pid_0719 %XUSB21.DeviceName.Wired%=CC_Install, USB\MS_COMP_XUSB10 %XUSB21.DeviceName%=CC_Install, USB\MS_COMP_XUSB20 %XUSB21.DeviceName.Jump%=CC_Install, USB\Vid_045E&Pid_028F what you will put in its place looks like this %XUSB21.DeviceName.Wired%=CC_Install, USB\Vid_045E&Pid_0291 %XUSB21.DeviceName%=CC_Install, USB\Vid_045E&Pid_0291 %XUSB21.DeviceName.Wired%=CC_Install, USB\UNKNOWN %XUSB21.DeviceName%=CC_Install, USB\UNKNOWN now save it (make sure you save as a .inf file or it wont work) now hook up the three extra wires on the RF module to the arduino if you havent already and plug the usb cable into your computer  it should light up but controllers wont sync yet change the Microsoft Xbox 360 Acessories folder so that it is no longer read only now open the device manager and find the unidentified usb device (the one with the yellow triangle) right click and select update drivers then in the update driver software window select browse my computer then let me pick from a list of drivers for my device then select show all then have disk finally navigate to the modified Xusb21.inf file and select it and install after you install the drivers the controller should sync with the RF Module just hit the power button which has been repurposed as a sync button and sync like you would to an xbox it should now work with any game that allows you to use a gamepa. Major Components in ProjectParts List: Arduino UNO – a wonderfull microcontroller board you can get it on ebay or at radioshack RF Module – from a broken xbox/ ebay Soldering Iron – mine is a cheap radio shack model Solder – also avalible at a local radio shack USB cable – scavenged from old electronics (i found it in my parts bin) 2 1N4001 diodes Wire cutters – for cutting wire…. Wire strippers – for stripping wire… pliers – for holding small things/ bending wire… Wire – i have bolth some 22 AWG wire from radioshack and some fancy 30 AWG Kynar wire (easily avalible on ebay) pretty much any wire will work as long as it is small enough to solder to the connectons on the RF shield   For more detail: Diy Xbox wireless controller adapter for Pc ### Make a digital "meow" from analog clock using arduino Is your analog clock just not doing enough stuff? Want to do digital things with an analog clock? This tutorial will show you how to make a Kit Cat Clock play a “meow” sound clip, at precise time intervals, using the Atmega 328P-PU via the Arduino Uno development board. In my example, the meow will occur hourly. This doesn't have to be a Kit-Cat clock either, this idea may work with other clocks that use a magnet motor. Assumptions (skip if you're already an expert in everything) The project encompasses many intermediate to advanced skills such as burning a bootloader and soldering of wires. Therefore, some requisite knowledge and skills are needed before proceeding. I will assume that you know how, or will at least be prepared to do the following: Burning a bootloader onto the Atmel328P-PU (unless yours already has one). Uploading “sketches” onto the Atmel328P-PU via Arduino Entering commands into a terminal emulator or command prompt (windows) Using a soldering iron to make connections between components. Possible usage of a drill or Dremel tool for trimming/cutting plastic parts, and boring holes. Materials Arduino Uno R3 x 1 Breadboard x 1 Jumper Wire (enough pieces) Resistors: 350 Ohm x 1 150 Ohm x 1 220 Ohm x 1 280 Ohm x 1 10K Ohm x 1 330 Ohm x 1 (optional if you want the LED while using Arduino on Breadboard Setup) Capacitors: 100 uF x 1 10 uF x 1 22 pF x 2 (may be optional) 16 Mhz Crystal Oscillator 0.5 Watt small speaker (approximately 50.8 mm diameter) x 1 7.5 Volt AC wall adapter (I used the Vtech brand found at Toys R Us) x 1 7805 Voltage regulator x 1 Soldering Iron and Solder Protoboard (or some other final project board that will be small enough to fit with the clock case) Super glue Heat shrink (optional) Hot Glue gun (optional) Takane Quartz Clock (assuming you need to replace the default one inside Kit Cat, as I did) Hall effect sensor x 1 I used the SS41 family of Hall effect sensors. These sensors are sensitive enough to detect the relatively weak magnetic field from the clock magnet motor. The specific one that I purchased may be found here Step 1: General Project Overview: An interesting aspect of this project is using analog devices (in this case an analog clock) to interact with the digital world of the Atmel 328P-PU. Arduino is probably one of the simplest ways to achieve this. I will be using the typical clock motor found inside the classic Kit Cat clocks to generate a digital pulse which will feed into the Atmel chip. The reason this will work is because the clock motor utilizes a permanent magnet, located within the proximity of a coil, to create the mechanical torque necessary to spin the clock hands. I will take advantage of this magnetic field by using a Hall Effect sensor to detect the magnetic flux from the clock motor. The sensor will output a digital HIGH whenever one of the poles from the magnet is facing the sensor, and then output a LOW when the opposite pole is near the sensor. This pole transition occurs every second, or has a frequency of 1 Hz and is the reason why this serves as an ideal motor for driving clock hands. Note: the sensor isn't actually touching the magnet, it's just very close to it. The pictures show how close I was required to place the sensor, in order to get readings. The pictures here show the inside of the actual clock and the magnet motor to the right side. The type of clock is called a "Takane Quartz" and they are pretty common in cheap analog clocks. Once we have a steady pulse coming from the sensor, all sorts of things can be done digitally, and really it's only limited to your imagination on what you can do. In this tutorial I will simply make a counter that counts the clock pulses (from the Hall sensor), and upon finishing the count, then plays a “meow” audio clip. The first step involves mounting the Hall sensor near enough to the magnet motor so that you can get a good reading. I had to place the sensor very close to my magnet motor to get an output. You can test the sensor by attaching something like an LED to the output pin of the sensor and then turn the clock on. If this works then the LED should blink every other second. This is because the output is only HIGH while one of the poles is facing the sensor (let's say the north pole as an example); when the opposite pole (south) is facing the sensor the output is LOW. After you have determined an appropriate location and distance to get your readings, you should then begin thinking about how to mount it there permanently. I chose to use super glue to hold the sensor in place. I also considered the location because of where the back casing would be. I had to cut out a small rectangular hole so the sensor pins would be accessible. You should determine what works best because although these clocks are nearly the same, sometimes the layout is slightly different inside, and the placement of the sensor may vary depending on the particular clock that you have. Step 2: Soldering wire to the input pins of sensor Now it's time to solder the pins to wire. The reason I did this was for two reasons: First you want to be able to test the sensor as you continue working, and also because you will need those wires when you connect them onto your breadboard and finally the protoboard. Note, using different colored wire may make it easier when you need to quickly identify the pins. That's what I did. Pinout configuration may be found at this site Step 3: Preparing the audio file If you already know how to convert a .WAV file to a C file, then you can skip or skim through this step. Now that the sensor is attached to the appropriate pins on the breadboard, you will need to upload the audio sketch onto the Atmel328P. But first, some modifications and “massaging” needs to be done first. This is where you could make some of your own modifications and I will go into some (but not all) of the detail regarding the use of Audacity and wav2c programs. You should go ahead and open the code that I've provided in your Arduino IDE. When you open the sketch in the Arduino IDE, the first tab is a slight alteration of the PCM audio sketch written by Michael Smith, the original may be found on the Arduino site: http://playground.arduino.cc/Code/PCMAudio Audacity is an audio editing program. It's very powerful and allows a .wav file to be exported as an 8-bit mono, unsigned .wav file. This is necessary to get the file size reduced and also to maximize the compatibility with the audio playback sketch. You may be able to work around different bit rates and sizes, but I haven't experimented with it. We will only be using the necessary features in Audacity to get the job done. Wav2c, as the name implies, can convert a .wav file to a C file. This is also necessary because the .wav file by itself is too large to fit in the memory of the 328P-PU. As of this writing you can download the source code directly from github. You may also be able to get compiled versions from other websites. Either way, you should use it or another similar program for the conversion process. https://github.com/olleolleolle/wav2c HallCounter_final.ino3 KB For more detail: Make a digital "meow" from analog clock using arduino ### DIY Telepresence Documentation This is the documentation page for the Spring 2012 DIY Telepresence project. Here you will find schematics, software, and guides for the robot. The goal of the project was to design a low-cost, easy to build telepresence robot. Some of the features include: Segway based mobility plane Robot arm Aluminum frame Two way-video conferencing using the WebRTC protocol Wifi enabled remote control of the robot HTML5 dynamically configurable web UI Robot Operating System (ROS) control with Arduino interface This project was undertaken between Fall 2011 to Spring 2012, and was developed by five team members: Daniel Kuo, Tri Nguyen, Dec Rachatasumrit, Michael Zhang, and William Zhong Contents 1 Final Design Report 2 Guides 2.1 Hardware 2.2 Software 3 Robot Electronics and Power System 3.1 Electrical Schematic Diagram 3.2 How to Power on the Electronics 4 Frame Construction 4.1 Height Adjustment 5 Robot Arm Final Design Report DIY Telepresence Robot Report Guides Hardware DIY Robot Electronics and Power System DIY Electrical Schematic Diagram DIY How to Power on the Electronics DIY Height Adjustment DIY Robot Arm and so on... Software DIY Telepresence Software Architecture DIY Telepresence HTML5 Design Robot Electronics and Power System Most of the electronics on the robot are powered off of the 12V lead-acid marine battery. Exceptions include the Segway and laptop, both of which contain seperate lithium-ion batteries. The electronics are controlled through a "Main Power Control" panel which distributes power to the robot subsystems: Inverter: Generates 120VAC power from the 12VDC battery. The 120VAC rail is used to power the monitor and laptop. Subsystem Power: Supplies power to a Mini-ATX PSU. This then provides a 5V rail for the webcam and flashlight/laser assemblies. Subsystem power is further distributed by the "Subsystem Power Control" panel on the robot shoulder. Robot Arm PSU1: Powers an Mini-ATX PSU which supplies 12V power to the worm-drive motor controller, and 5V power to the two elbow servos and shoulder servo. Robot Arm PSU2: Powers an Mini-ATX PSU which supplies 5V power to the two wrist servos and gripper. Note: The "Panel Lighting" switch on turns on/off the LEDs on the control panel, but otherwise does not affect circuit operation. Turning off the LEDs can extend the battery life. Note:The "Main Power" switch is a 25A circuit breaker, that will shut off in the event of a short circuit. Electrical Schematic Diagram The schematic diagram presents a high-level overview of the electrical interconnects for the robot. Green lines represent wires, while blue signifies a USB or VGA cable. The electronics are organized into four main systems: Inverter, Subsystem Power, Robot Arm PSU1, and Robot Arm PSU2. 12V power is distributed to each system through the main power control, which supplies power through a marine battery. The Inverter outputs 120VAC, and powers the monitor and laptop. The Subsystem Power supplies energy to an ATX PSU, which is then used to power servos for the camera and flashlight/laser assemblies. Robot Arm PSU1 and PSU2 supply power to the upper and lower arm servos respectively using individual ATX PSUs. DIY Telepresence Schematic Thumb.png The schematic was created using Eagle CAD software. The source files are available below. Schematic and library file download Note: The library file contains only symbols for the devices. No PCB footprints are provided. How to Power on the Electronics If mobility is required, the Segway base can be turned on by pushing the power button on the back. Due to the battery placement, it may be necessary to use tool to push the button (such as a screwdriver). The "Main Power Control" can be used to selectively power on the robots various subsystems. The power on sequence is listed below: The main power control panel located at the base of the robot Turn on the "Panel Lighting" switch. The "Main Batt." LEDs should illuminate. Flip the "Main Power" switch all the way towards the right. The "Main Power" LEDs will turn on. Apply power to the selected subsystems as needed by flipping the toggle switches for either "Inverter", "Subsystem Power", "Robot PSU 1", or "Robot PSU 2". The respective LEDs will turn on when power is applied. Note: The power button on the Inverter also needs to be pressed to enable 120V AC power. Note: The Subsystem Power, Robot PSU1, and Robot PSU2 are all connected to Mini-ATX PSUs. These will not power on until a 5 second delay has elapsed. The Subsystem Power Control is located on the robot shoulder. This is used to distribute 5V power to the webcam and flashlight/laser assemblies. The monitor can be easily be turned on by pulling the lower right corner of the monitor forward. Such that the on button is depressed by pressure against the aluminum U-channel. For more detail: DIY Telepresence Documentation ### Total Recall- Arduino Simon Says on steroids Total Recall is a Simon based game for the Arduino. Your basic Arduino Simon Game consists of 4 buttons, 4 LEDs, an Arduino, some code and maybe a speaker and sound effects. Total Recall takes things a step further by adding an LCD display and offering  1 and 2 player game modes. The 1 Player game is your basic Simon Game. I added 4 levels of difficulty to it by giving you options for how many rounds you want to play. Your then given a sequence of flashing lights to mimic. Each round adding an extra flash to the sequence. If you can complete the number of turns you win. The 2 Player game puts you head to head against a friend. The game starts with player one entering the first button into the sequence. The Sequence is then played back for player 2 to see. Then player 2 gets to mimic the sequence. If he gets it correct he gets the opportunity to add a button to the sequence. Then Player 1 gets the play back and tries to mimic the sequence. The game goes back and forth like this with the sequence getting increasingly longer till one player gets it wrong or you reach 99 turns in which case you've hit the max length of the sequence and the game is a draw. Materials Needed: Arduino (I used a Nove) Bread Board Jumper Wires/Ribbon cables Red, Yellow, Green and Blue LEDs 4x 100 Ohm Resistors 4x Push Buttons Small Speaker Hitachi HD44780 based 16x2 LCD 5K Potentiometer Step 1: Background After posting Arduino Simon Says i started getting ideas for ways to improve the game. Whenever possible i like to simplify my code to reduce the amount of memory it uses. One of the things that really eats up memory in an Arduino sketch is using the Serial interface. Since the eventual goal is to get this game onto its own PCB and make it an actual portable game linking it to a computer to track your progress wasn't going to be an option. Removing the Serial commands from the game dropped 2004 bytes from the compiled code. So to help me towards my goal of portability i decided to add an LCD display to the game. Then i started thinking how i could make the game play even better. And what better way to make a game more fun then to play it with a friend. So i would need to come up with a menu system allowing you to choose between the 2 game types. I also wanted to make the original Simon game more interesting as well. So i decided it would be good to give people the option of how many turns they could shoot for. Nothing like giving people a goal to shoot for to make things more interesting. Now a checklist of ideas was starting to come together. Add LCD display Create difficulty options for single player game create 2 player game All these ideas raised many questions. Step 2: Adding the LCD Before i did anything i wanted to clean up the mess of wires a bit on the project. So i created three ribbon cables about 12 inch long from an old 40 wire IDE cable. I split the cable into 3 six wire strips and soldered header pins to each end. On one end of each i clipped the headers down to individual pins and split the wires about 2 or 3 inches up. The joined ends sit neatly into the Arduino while the split ends give me the freedom to reach any components i need. When all connected only Digital I/O pins 0 and 1 are left with nothing connected. I've been meaning to this this for quite some time. Now i was ready to figure out where to connect my LCD. Considering most of my Digital I/O pins where taken i had to figure out where i was going to connect the LCD. I wanted to keep as many of the LCD wires as close together as possible. This makes it a bit easier to troubleshoot any problem. I also didn't want to move the LEDs and Buttons around. This would just add to the headach of updating the code. So i decided to place the LCD on the Analog In pins. The Analog Pins can be used as Digital I/O pins. The are designated as follows: Analog 0 = Digital 14 Analog 1 = Digital 15 Analog 2 = Digital 16 Analog 3 = Digital 17 Analog 4 = Digital 18 Analog 5 = Digital 19 I couldn't put all the LCD pins across the Analog pot cause i still need Analog pin 0 for randomization of the single player game. So the LCD is connected as follows: RS pin to D13 E pin to D12 D4 pin to D16 D5 pin to D17 D6 pin to D18 D7 pin to D19 V0 tied to a pot to control brightness Grd and R/W tied to ground Vcc to +5V You can refer back to the Arduino Simon Says Instructable concerning the setup of the rest of the hardware. The only change made was moving the speaker over to pin 6. I hope the Fritzing image helps to clear up any confusion there might be in the wiring. I went ahead and attached the Fritzing file if you need a better look at the diagram. You can also refer back to my Custom Large Font For 16x2 LCDs for more information about setting up a Hitachi HD44780 based 16x2 LCD on the Arduino. Total Recall.fzz29 KB Major Components in Project Arduino (I used a Nove) Bread Board Jumper Wires/Ribbon cables For more detail: Total Recall- Arduino Simon Says on steroids ### Voice Activated LED Lighting with Arduino This project is an extension to the Speech Recognition with Arduino by leandro4b (http://www.instructables.com/id/Speech-Recognition…). However, instead of using 3 separate colored LEDs, I used a multicolor 4-channel RGBW LED Emitter. I had the opportunity of working at LED Engin last summer, which is why I was able to use the high power 4-die RGBW emitter ( LZ4-20MD00) for my project. You can purchase their RGBW emitter from Mouser here. I also got a lens that is paired with the emitter. This allows the colors to blend better, but it is optional for this project The idea is simple: I want a voice activated LED program that allow me to change the color by modifying the amount of red, green, blue and/or white LED in the emitter. In addition to that, I wanted some preset functions where I can tell the light to "wake up", "go sleep" or display the colors of the rainbow in order. How this works: BitVoicer (voice recognition program) takes in a voice input, recognizes it and transfer that into a string. Every time it calls that particular string, the Arduino program will tell the LED what to do. For this project, I used: BitVoicer - downloaded from http://www.bitsophia.com/BitVoicer.aspx Arduino UNO 10W RGBW LED Emitter data sheet here: http://www.ledengin.com/files/products/LZ4/LZ4-00M... Power Resistors one 4 Ohm 2W resistor (http://www.digikey.com/product-search/en?vendor=0&…) two 2.7 Ohm 2W resistors (http://www.digikey.com/product-detail/en/PR0200020…) one 2.4 Ohm 2W resister (http://www.digikey.com/product-detail/en/PR0200020…) Heat sink for the Emitter- created from Aluminum Lens (optional) Breadboard and wires USB Microphone Step 1: Setting up LED Emitter and Heat Sink When I got the emitter in the mail, It had no wires on them. The nice thing about the LZ4-20MD00 is that the LED is mounted on top of the MCPCB, which allows us to solder wires onto the LED more easily. There are 8 pads on the MCPCB- the data sheet tells me which pad is for which wire. I actually had some challenges while soldering the wires onto the MCPCB because the MCPCB sucks the heat away, making it difficult for the soldering iron to heat up the pads. I then realized that the data sheet actually had tips for soldering. For this particular emitter from LED Engin, I had to heat the emitter up with a hot plate to 125-150 degrees C before soldering the wires on. Caution: different manufacturers have different procedures for attaching the wires- make sure you don't overheat the emitter. According to the data sheet (on pg. 7 and 15), these are the wires connected to each pad: Pad 1: White Anode + Pad 8: White Cathode - Pad 7: Red Anode + Pad 6: Red Cathode - Pad 5: Green Anode + Pad 4: Green Cathode - Pad 3: Blue Anode + Pad 2: Blue Cathode - I suggest that you use colored tape to indicate which wire is for which color so that you don't get confused later on. Since this is a high power LED, I needed a heat sink for the emitter so that the LED does not overheat. I made a simple heat sink out of aluminum and attached it to the LED Emitter using screws. Step 2: Hardware Wire the the Arduino and LEDs according to the diagram above. Depending on which 4-channel LED you get, you will need to get different power resistors for each channel. For my RGBW 4-channel emitter, I looked for the Electrical Characteristics on pg. 5 of the data sheet, then determined the power resisters I wanted using the information. I looked for the forward voltage and the typical voltage drop across each LED, then I used ohms law to determine the resistor that should go with each color. Note that you should use 2W power resistors because these are high power LEDs. For this LED Emitter, I am using: 4 Ohm 2W power resistor for red channel 2.7 Ohm 2W power resistor for white channel 2.7 Ohm 2W power resistor for blue channel 2.5 Ohm 2W power resistor for green channel I am also powering the LED using the 5V source from the Arduino. Step 3: Upload Codes and Files After downloading BitVoicer and Arduino, I wrote some codes for Arduino and created a new file for BitVoicer. I have included both files in the attachment of this instructable. (Note: you will not be able to open the vsc file unless you have BitVoicer installed). To start the program, first upload the Arduino code, and then press the start button in the BitVoicer file. LED is not responding to your voice? Check these things under Preferences (under File) for BitVoicer: Bits per Second is set to: 115200 Audio input is Computer's Default Microphone set the Port Name to the same port that is connected to the Arduino (named COM_) If still doesn't work, try these things under Preferences (under File) for BitVoicer: lower the Acceptable Confidence level make sure the Computer's Default Microphone is set to your external USB microphone. Look for the microphone setting on your computer. For more detail: Voice Activated LED Lighting with Arduino ### The Wondrous Weather Cube Using Arduino We created an Internet-enabled companion cube for your computer, which displays different kinds of information by glowing red or green. Depending on its orientation, and which labeled face is oriented upwards, our companion cube displays either stock readings of the NASDAQ or the outside temperature in Princeton. As the temperature or stock index changes, the Arduino inside the cube fetches updated data from the host computer it is connected to, and modulates the brightness of red and green LED arrays inside. We thought it would be a perfect match for the topic of the first lab, LED diffusors, and that it also makes a useful and elegant desktop accent. Ideation and Design We started by thinking about LED diffusers, and found that the most interesting applications for us related to using them to display or convey information. We then considered a number of physical interfaces, including a tree, a panel, and various geometric shapes. We settled on a cube because we expected users to want multiple sources of information from the cube, and we thought rotating the cube was a better interface than configuring it by computer, since it would make use of the different sides of the cube. Since we have some Arduino experience, adding Internet connectivity so the Arduino and computer could talk to each other followed rather naturally. Construction We found that there was scrap foam in many different places we looked – the upper levels of the E-Quad, the Architecture building, and Frist among others. We went with that, instead of making our cube out of paper, because foam seemed like an excellent prototyping material. It was easy to cut, already pre-formed into sheets, and most importantly fit together like a jigsaw puzzle, allowing us to assemble the foam simply by pushing metal leads into the joints. Eventually we would want to use a laser-cut enclosure for this kind of box. Concerns and Conclusions We would have preferred a better spectrum of colors from our cube, but we did not have enough tricolored LEDs to produce enough light to be visible through our cube. We ran into a number of problems because of the differences in brightness and voltage between red vs. green LEDs and indicator vs. lighting LEDs, but we managed to circumvent most of those because foam was such a great diffusing material and blocked little light. Finally, we observed that the Cube is sometimes slow to respond as we scrape data from the web, because of latency. So, we’d like to make it faster if possible. We think our companion cube is pretty and works well. If we had developed the cube further, it would have more applications — possibly one for each side of the cube, including email notifications, Facebook notifications, etc. — and it would use an orientation sensor rather than photoresistors on each side to figure out its orientation.   For more detail: The Wondrous Weather Cube Using Arduino ### Atomically thin Piezo Material Researchers at Columbia Engineering and the Georgia Institute of Technology have reportedly  made the first experimental observation of piezoelectricity and the piezotronic effect in an atomically thin material, molybdenum disulfide (MoS2).  The piezo effect is traditionally thought of as one property of hard crystalline quartz. Using this new material it would now be possible to manufacture electric generator and mechanosensation devices that are optically transparent, extremely light, flexible and elastic. “This material—just a single layer of atoms—could be made as a wearable device, perhaps integrated into clothing, to convert energy from your body movement to electricity and power wearable sensors or medical devices, or perhaps supply enough energy to charge your cell phone in your pocket,” says James Hone, professor of mechanical engineering at Columbia and co-leader of the research.   For more detail: Atomically thin Piezo Material ### Laser Pointer Switch using arduino This instructable will detail how to make a switch that uses an arduino to sample light. When the light sample reaches a threshold it will trigger a relay that can be used to turn on/off a small appliance (light, radio, fan, etc...) The parts for this instructable can be ordered as a kit: Jameco Kit http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_2209967_-1 Step 1: Review relay and prep wire unpackage the relay and stretch out the cable. this cable is used to activate the relay but will also be used to power the arduino. cut the wire in about two equal parts. the part with the white clip end will plug into the relay and be soldered into the arduino. the wire with the black clip end will be spliced into the usb cable to supply power to the arduino. this is also a good time to review the relay tutorial for safety information: http://www.dfrobot.com/wiki/index.php?title=Tutorial:_DFR0017_V2_Relay Step 2: Modify USB cable cut the USB cable about 6 inches from the end with the rectangle end.  strip the wires and you will find a red, black, green and white wire.  splice the red and black wires from the relay cable (with the black end) to the red and black wires of the USB cable.  solder the connections and tape the wires.  this new USB cable will be used to power the arduino. Step 3: Identify Arduino find the arduino in the kit of parts and familiarize yourself with the pin holes and orientation of the package. Step 4: Component Layout the components that are soldered onto the arduino need to be placed in specific places.  the right angle header goes into the right side of the arduino.  the photo cell needs to have one leg in the A5 hole and one leg int the Vcc hole.  the resister needs to have one leg in the GND hole and one leg in the A5 hole (with the photo cell) .  the wire from the relay (with the white end) needs to be soldered into the arduino also.  the green wire in the 5 hole, the black wire in the GND hole (with one leg of the resistor) and the red wire in the Vcc hole with one leg of the photo cell).  on some arduinos, the resistor leg and the photo cell leg will not fit in the same hole.  if this happens to you, you can put the resistor in from the back of the arduino and connect the photo cell leg to the resistor leg behind the arduino. Step 5: Solder Arduino for the holes that have a wire and a component leg in the same hole, make sure to put the wire in the hole first then push the component leg in.  after all the components are in the proper place, solder them. Step 6: Program Arduino connect your arduino to the FTDI device that you use to program it then upload this code to your arduino: //adjust the lTrigger number for your light values int lTrigger = 610; int photoPin = A5;  //define a pin for Photo cell int ledPin=5;     //define a pin for relay activator boolean bLatch = false; int lLaser = 0; void setup() { Serial.begin(9600);  //Begin serial communcation pinMode( photoPin, INPUT ); pinMode( ledPin, OUTPUT ); } void loop()  { lLaser = analogRead(photoPin); if (lLaser > lTrigger)   { bLatch = !bLatch; digitalWrite(ledPin,bLatch); delay(1000); } Serial.println(lLaser); //display photocell value to serial monitor. delay(10); //short delay for switch bounce } test your arduino with the serial monitor open to see the light reading values.  adjust the trigger value to a range that works best with your laser pointer. For more detail: Laser Pointer Switch using arduino ### FabECG: a simple electrocardiogram board Technologies for rudimentary physiological sensing are getting cheaper and easier to implement. Consider, for instance, these non-contact sensors from UCSD which can be used to take an EEG through hair or an ECG through a T-shirt! One can even make a simple oscilloscope to digitize, store and view the signal using only a Tiny45 micro-controller and a laptop: tiny45 oscilloscope Cool general-purpose commercial hardware in this category (from IMEC). And a nice book on ECG. This week Charles Fracchia and I made a simple electro-cardiogram board (see also Charles's documentation here) which should also be in principle capable of EEG and many other such differential voltage measurements on the skin, especially once digital post-processing of the signal is implemented. The system uses the soft fabric electrodes from the headband of the Zeo Mobile EEG headset. This required the sacrifice of one Zeo but in the future this should be easy to mimic using home-made fabric electrodes or other non-contact sensors. DISCLAIMER: We make no claims about the safety of the below techniques or about their appropriateness for any purpose. Use at your own risk and consult experts on electronics safety. We based the system on two references: Chipstein's EEG circuit and this EEG circuit from Charles Moyes and Mengxiang Jiang at Cornell. For digitizing the amplified ECG signal, we also borrowed this Arduino and Processing code from Chipstein and used this Matlab code modified from the Cornell team, in conjunction with this Arduino code for grabbing the samples. Circuit design Schematic: Single-sided PCB: Eagle Files: .zip Part list: .txt and don't forget the 3314 1M surface mount trimmer from Bourns for the PCB version. Following the same idea as the Chipstein and Cornell designs, the circuit uses an instrumentation amplifier (the AD620) to take the voltage difference between two spots on the body. A second amplifier (the CA3140) amplifies this differential signal. A potentiometer is used to siphon off current from the negative input of the second amplifier, and tuned to remove the DC offset resulting from the inevitable and unpredictable static voltage differences between any two spots on the body: unless removed, the DC offset causes the second amplifier to saturate its output at power or ground. Because we power the amplifiers using only the +5V and ground levels from an Arduino (or other micro-controller board), we need to split the supplies for the amplifiers, which require both a positive and a negative supply line. To do so, we use a voltage divider circuit to define a virtual ground at 5V/2 = 2.5V, and then use +5V and Arduino ground as the positive and negative supply lines, respectively. An electrode held at ground electrode is also placed on the body at a third location. Low and high pass filtering are performed in-between amplification steps and during the second amplification step, and then a bank of three low-pass filters follows after amplification to remove additional 60 Hz noise. Those interested in understanding the exact frequency response of the system should do a full calculation (e.g., using the Op Amp golden rules and the rules for frequency-dependent impedance of resistors and capacitors) or a Spice simulation, because the filters going into and through the second amplification stage cannot be treated simply as individual high and low pass filters in series. In addition to serving as the power source, the Arduino is also used to sample the amplified signal through one of its analog input ports and to shuttle the signal to a computer over serial. According to the data sheet: Gain = (49.9 kOhm / R_G) + 1 where R_G is the gain resistor. Therefore a 49.4 * (10^3)/22 = 2.2 kOhm R_G resistor leads to a gain in the first stage of amplification of around 23. The second amplifier should give an additional factor of around 1 megaOhm/(2.2 kOhm) = 455. The filtering may remove some frequency components. So the total gain is over 1e4, theoretically. In the below, we're usually measuring signals of around 1V, which is about 1000x higher than the millivolt-range signals characteristic of ECG, even after filtering, and even using the fabric electrodes. Single-sided PCB We added zero ohm resistors to allow one trace to hop over another and routed the circuit using Eagle software. We then milled the traces on a Roland MODELA mini mill using a 1/64 inch end-mill and a 1/32 inch end-mill to cut out the border of the board. To do so, we exported PNG files from Eagle at 2300 dpi resolution and the processed them and sent them to the MODELA using the Fab Modules software. The top layer was used for the traces and the dimension layer for the board boundary. For the board version we replaced the 6.8 pF feedback capacitor C1 with a 10 nF capacitor and the 25 kOhm resistors in the filter bank with 22 kOhm resistors, with no negative effect.   For more detail: FabECG: a simple electrocardiogram board ### OFFICIAL LAUNCH OF VARISCITE’S I.MX8X SYSTEM ON MODULE Variscite has re-launched its VAR-SOM-MX8X System on Module, based on the i.MX8X processor with the latest NXP’s qualified silicon for full production. The SoM expands Variscite’s VAR-SOM Pin2Pin product family and offers built-in safety features, highly integrated multimedia support, and efficient power/performance architecture. Variscite, a System on Module global market leader and NXP’s partner, has re-launched its VAR-SOM-MX8X, an i.MX8X-based System on Module, with the latest i.MX8X silicon version for full production. Variscite’s launch takes place along with NXP’s formal broad market launch, following NXP’s introduction of the new silicon version earlier this quarter as the qualified revision for production. The VAR-SOM-MX8X has already been launched by Variscite last year and was available to Variscite’s early-access customers, allowing them to leverage the i.MX8X technology for new developments much earlier than the broad market launch. The SoM expands the solutions range offered by the VAR-SOM Pin2Pin product family and provides a pin-compatible option to i.MX8, i.MX8M, i.MX8M Mini, i.MX8M Nano, i.MX6, i.MX6UL/ULL/ULZ and the upcoming i.MX8M Plus based modules. This extensive products family allows Variscite’s customers ultimate scalability, extended lifetime, and reduced development time, costs, and risk. Product key features: NXP iMX8X 1.2GHz Quad-Core Cortex-A35Real-time 264MHz Cortex-M4F co-processorUp to 4GB LPDDR4, 64GB eMMCIntegrated security and fail-safe features2D/3D graphics acceleration24-bit parallel LCD, LVDS/DSI4K H.265 Decode, 1080p H.264 Encode/DecodeHQ audio in/outCamera in: 1x MIPI-CSI2, 1x parallel CSI 8/10-bit2x GbE, 2x USB 3.0, PCI-EAnalog input, CAN/CAN-FD, UART, SPI, I2C, SD/MMC, touchCertified Wi-Fi 802.11 ac/a/b/g/n + BT4.2/BLETemperature range -40 to 85° COS: Linux, AndroidUp to 15 years longevity Read more: OFFICIAL LAUNCH OF VARISCITE’S I.MX8X SYSTEM ON MODULE ### Arduino controlled Rotary Stewart Platform This instructable is about building a Rotary Stewart Platform. It allows to position its moving platform in six degrees of freedom. This specific platform is designed to be able to position a DSLR or any other digital camera. This version of Stewart Platform uses instead of linear actuators just ordinary hobbyist servos for motion. Whole platform is controlled by an Arduino Uno, it computes all necessary equations to get the platform into right position and also controls servos. Video of movement of completed platform can be seen here. Quality is not very good, but camera with better picture was at the time of capture on the platform. It was set-up for random position every 4 seconds. Some informations about platform: weight of load can be up to 2Kg (platform tested with 1.5Kg with no observable problems during moves in whole range of movements), theoretically platform should be able to cope with even higher loads, but it wasn't tested with such load low power consumption - with load of 1kg was consumption of around 5W. very good fineness of moves - smallest possible move is around 1mm perfect ability to repeatedly achieve the same positions. good stability of platform even with big loads. All source files for platform (templates, Arduino source code, code for communication library can be found here. Price of platform mostly depends on the price of servos and of the Arduino board. Cutting of parts, all other needed parts cost at most 50$. Total price can be around 150$. IrDA and LCD with I2C interface were bought from ebay, they are very cheap (together around 10$) Parts of platform are cutted from acrylic, i used 4mm acrylic. Needed tools: drill screwdriver tools needed for soldering and creation of PCB for connecting external power supply measuring tools double sided tape In case of any questions, feel free to contact me. Step 1: Building moving platform We start by cutting parts from acrylic, here we will use templates from files platform_bot and platform_top. This platform is divided into two parts for better universality, just by changing top part of platform you can adapt it for various purposes. They are put together using screws placed in holes A1-A3. Dimensions are chosen with respect to size of ordinary DSLR. Platform can be changed to be smaller or bigger. At denoted places B1-B3 in bottom part of platform it is needed to drill holes which are used for anchoring of connecting rods. On third picture you can see proper way of doing that. These weird deformations in acrylic were caused by using CA glue to fix screws in acrylic. On top of the moving platform it is necessary to place a piece of rubber or foam and fix it there with double sided tape. It will prevent unwanted rotations and movements of camera on the platform. Length of connecting rods should be around 12cm and they should be bended as can be seen on picture of completed platform. This bend greatly improves range of movements. Length of rods should be chosen so that the angle between servo arms in horizontal position and the rod is around 70°.   For more detail: Arduino controlled Rotary Stewart Platform ### DC Motors Relays Using Arduino Let's get the math over right off the bat. There are a LOT of attempts to describe how Ohm's Law works, each one nerdier than the last. Here' one I like. Warning: SFWBN (safe for work but nerdy). V = voltage measured in volts - the difference in electrical potential. I = Current measured in Amps or Amperes - the rate of the flow of electrons. R = Resistance measured in Ohms (Ω) - opposition to the flow of the current. V = I * R I = V / R R = V / I It is good to know where "power" fits in also. Power, measured in watts, is the Current (Ampes) multiplied by the Voltage. Mostly you see this equation as W = V * I Sometimes you see this expressed as a confusing looking wheel. (coincidentally also the coolest tattoo ever) Oh, and sometimes Volts are expressed with and E instead of a V. They do this because they hate you. Example: a typical 100 Watt bulb - how many amps does it use? 100 watts / 120 volts = .83 amps DC motors part 1 - Relays Relays are a great way to separate your low voltage Arduino circuit from a much higher voltage circuits to run motors or lights. Relays are all over - cars, computers they are an electronics staple. Each kind will be wired differently and be able to handle different voltages. we have two different kinds (the black cube ones are more reliable) - they work about the same once you've determined the inputs. This circuit uses a transistor - there are two families of transistor this size, NPN or PNP. You can often swap out different ones from the same family and the circuit will still work fine, but you can't swap out a PNP for an NPN. Of course they look exactly the same so you have to use the i-tubes to figure out which is which. enjoy. The diagram does not include the motor circuit. You should be able to hear the actual relay switch turn on and off, but the real test it having it turn on a motor. The photograph does include the diode which helps keep the electricity flowing in the right direction and the relay working consistently. Diodes have a a correct orientation - in this case the white line on the diode goes towards the +5volt. Simple code for the relay. Requires the Arduino loaded with Firmata. import processing.serial.*; import cc.arduino.*; Arduino arduino; int transistorPin = 5; void setup() {   size(255, 255);   arduino = new Arduino(this, Arduino.list()[0], 57600);   arduino.pinMode(transistorPin, Arduino.OUTPUT); } void draw() {   if ( mousePressed == true) {     arduino.digitalWrite(transistorPin, Arduino.HIGH);   }   else {     arduino.digitalWrite(transistorPin, Arduino.LOW);   } } DC motors part 2 - Speed and Direction There's a small deviation from the diagram - the wire going into pin 4 should go in a PWM port for the analog example to work right - the examples below have it on pin 5. With an H-Bridge (or in our case with a Dual H Bridge) you can control a DC motor's sped and direction. This is awesome. In the diagram below the motor is running off a battery. You can use an external wall wart power supply if you want instead.   For more detail: DC motors Relays Usung Arduino ### NXP shrinks power transistor design for mobiles NXP has just released its new PMPB40SNA, a 60 V, 40 mΩ N-channel automotive MOSFET in a compact 2 x 2 mm DFN2020MD-6 (SOT1220) package. The DFN2020MD-6 is an industry first, featuring 100% wettable and therefore solderable flanks (side pads). This makes soldering and inspection much easier and is aligned with the automotive optical solder inspection requirements! It is the perfect space-saving solution, about a factor 7 smaller compared to SO-8 and at the same time, delivers robust automotive qualified high performance. PMPB40SNA is one of 80 recently released MOSFETs in leadless 2 x 2 mm single, dual and 1 x 0.6 mm single DFN packages. The portfolio contains P- and N-Channel types from 12 to 60 V with very low RDSON values, automotive qualified and ESD protected types. Learn more and order your samples today! Features and benefits 60 V, 40 mΩ single N-channel Trench MOSFET Small and leadless ultra thin SMD plastic package DFN2020MD-6: 2 x 2 x 0.65 mm Exposed drain pad for excellent thermal conduction leading to a power dissipation of 1.5 W Tin-plated, 100% "wettable flanks" for optical solder inspection AEC-Q101 qualified Key applications Relay driver High-speed line driver Low-side load switch Switching circuits NXP Semiconductors has introduced its first medium power transistors in a 2-mm x 2-mm 3-pin leadless DFN package. Targetted at general-purpose power-sensitive applications in mobile, automotive, industrial and household appliances, the DFN2020-3 (SOT1061) packaging can save up to 80% more space on the PCB compared to conventional SOT89 packages, while maintaining high electrical performance of up to 2A, according to the supplier. These miniature devices are designed for energy efficiency and low heat dissipation. When mounted on a 4-layer PCB, the thermal performance is designed to match that of  larger SMD packages and allows Ptot levels of up to 1.1 W in a tiny footprint. “With our latest miniaturized medium power transistor, we continue to drive the market in compact components and in high performance low VCEsat transistors,” said Joachim Stange, product manager, NXP Semiconductors. All NXP medium power transistors are automotive-qualified according to AEC-Q101. “In charging circuits of mobile devices and automotive electronics requiring smaller ICs, designers can now choose a medium power solution and not have to trade off PCB space for functionality. Simple applications such as interior car lighting which require only 1-2W can be powered by an ultra-compact medium power solution,” said Stange. The medium power transistors have a VCEO ranging from 20V to 80V.   For more read: NXP shrinks power transistor design for mobiles ### ATtiny85 POV Display using arduino The first time I saw a POV (Persistence Of Vision) display was on a show called FAQ on TV. The POV display consisted of an oscillating shaft with 6 LED's mounted on the end of the shaft. Since then I have always wanted to make one myself, I tried making one about 2 months ago with an oscillating shaft myself but I was not successful as the speed of the shaft was too low for the POV display to work. Now I decided to make the POV display with just a DC Motor instead of an oscillating shaft as they are much cheaper and easily available compared to the shafts. In this instructable I will show you how to make the POV Display yourself! This is a very simple project both on hardware and software (coding) areas. It costed me only about 5$ to make it from start to finish! So lets get started! Here is a video of it in action! Note: The brightening and dimming of the LEDs in the video is due to my crappy camera, in reality its consistent and quite bright. Step 1: Persistence Of Vision and how it works POV stands for Persistence Of VIsion. Persistence Of Vision is the phenomenon of the eye by which an image seen by our eye persists for about 0.04s during which any other images that we see are merged together with this image. This phenomenon is used in the POV Display as we turn the LEDs on and off in such a way that the different images overlap each other forming letters. For example: The formation of the letter E with 5 LEDs; 1 2 3 <- Time 1 1 1 <- Bulb 1 1 0 0 <- Bulb 2 1 1 1 <- Bulb 3 1 0 0 <- Bulb 4 1 1 1 <- Bulb 5 Each column represents the 5 LEDs we used to make the display. Each element in the row represents the state of the LED at that given time. So at t = 1 Bulb 1,2,3,4,5 are all on at t=2,3 Bulb 1,3,5 are on This way we can visually see the letter E formed by the LEDs but the time interval would be very small in milliseconds and not as given in the example. Due to the short time intervals and the ability of the LEDs to turn on and off very quickly we can see the letter E as all the 3 images merge. As the motor is spinning, as time passes the LEDs move from one position to the next so all these images are merged together. For more information on how this works have a look at these links: http://www.vision.org/visionmedia/article.aspx?id=... http://en.wikipedia.org/wiki/Persistence_of_vision Note: You can see in the above images how the 3 different pictures merge to form the letter E Here is an animated gif that shows the formation of the letter E :http://www.instructables.com/files/orig/FIZ/ZDS5/HW4OQXU8/FIZZDS5HW4OQXU8.gif Step 2: Materials and Tools required Materials : 1) 5 LEDs (Radioshack) (Ebay) 2) 3V Coin Cell (Radioshack)(Ebay) 3) Coin Cell Holder (Radioshack)(Ebay) 4) USB Header (a normal USB cord would do) 5) ATtiny85 (Ebay)(Atmel Sample) 6) DC Motor (Radioshack)(Ebay) 7) A Case/ Enclosure to keep the motor in 8) A piece of wood or cardboard for the LED bar 9) IC holder (Ebay) 10) Protoboard (Radioshack)(Ebay) 11) Jumper Cables (Radioshack)(Ebay) Materials for Programming the ATtiny85 chip : 1) Arduino Duemilanove/Uno/Mega 2) 10 Micro farad Capacitor (Radioshack) 3) USB cable for the Arduino 4) Breadboard (Radioshack)(Ebay) Tools : 1) Glue Gun 2) Soldering Iron 3) Leatherman tool (Optional) 4) Scissors Note: Buying the materials from ebay would be cheaper but the quality would be just as bad, whereas radioshack is a bit more expensive but its worth it all for the great quality. Step 3: Making the LED bar Cut out a piece of cardboard/wood in which you can mount 5 LEDs and attach it to the motor, this would be the rotating bar of the POV. Make 5 holes in the cardboard one next to the other in which the LEDs will fit in snug. Insert the LEDs and connect all the cathodes (-) together forming a common cathode leaving the anodes separately. Note : Diffused LEDs give the best results so its a good idea to diffuse the LEDs. You can do this by sanding the LEDs with sandpaper. Add a coin or some sort of counter weight on the other end of the LED bar for perfect rotation when the motor is added.   For more detail: ATtiny85 POV Display using arduino ### Making art Interactive Using Arduino Unfortunately, due to my need to reclaim my Arduino and breadboards, we don't have photographic documentation of our circuit. However, the structure of it was rather self-evident. Although we arranged the circuit in a such a way that we could program other functions, but we ultimately opted to keep the programming to a minimum to enable more of the focus to be placed upon the interaction with the phone, as opposed to the quality and function of the light. By position two ends of a wire on the handset and switch hook, we managed to both maintain and engage with the structure and function of the phone. Especially given the age of our group, the understanding of phones and their standard order (being on the hook) is very much engrained. We also used the lack of external light in the display space in order to conceptually explore questions of where one's focus lies when they are either engaging with a telephone of disconnected from it. The process We decided to make a small-scale version of our project and used cardboard to resemble the dome-like structure we wanted to recreate. We soldered 10 LEDS to jumper cables to extend the length of our workspace and to have the actual wiring outside of the dome and out of the user's view, fitting the LEDs into the perforations we'd made on the cardboard. We based the arrangement of the LEDs on an image of some constellations; which would be acting as the starry sky in the dome. Using a shift register, we based our code on one of the examples from the book and modified it to fit our project, which lights up a different constellation on each [delayed] blink. A major challenge We encountered many challenges along the way in the making of our prototype; the main one was figuring out how to solve the touch element of the project. The idea we had for it was to place a pillow with a conductive material (tin foil) underneath to activate the light. When we set out to make it, we couldn't figure out how to make it work; we attempted to put one of the LEDs' poles in contact with the tin foil while having the other pole attached to the breadboard. This was taking us too much time, so we decided to move on and concentrate on the rest of the code and the actual wiring. The [personal] outcome What made us happy with our iteration of our prototype was that we figured out the structure of our dome. We were also pleased with the hands-on experience we had while wiring and soldering the pieces, given our limited experience with a project of this sort. What we will plan to work on and change would be to determine our light source for the stars and possibly find out a way to get the "stars" to fade. We would like to resolve how to cover the wiring and make the project more visually appealing and overall figuring out how to incorporate the touch sensor to make the project more interactive.   For more detail: making art interactive Using Arduino ### Control Keyboard & Mouse Android app via Arduino This instructable will show you how to control your computer's keyboard and mouse with an Android app via bluetooth to an Arduino BACKGROUND Ever wanted to control your computer's mouse/keyboard functionality without having to actually sit in front of it? I do all the time. For instance, I often hook my laptop up to the TV in my living room to watch a show on Netflix. Well, roughly 20 minutes later, when the show is finished I have to get up, walk over to the laptop, click next episode, let it buffer for several seconds, click full screen mode, then walk back to the couch. This becomes a hassle when watching multiple episodes back-to-back... for several hours... burning through an entire season in one sitting. Okay, so maybe I'm just lazy and this doesn't exactly apply to you but this has been bugging me for awhile and that's what us makers do, we engineer solutions to our problems. (Regardless of how oddly specific those problems may be.) I'm sure many of you will find other uses for this project, like a custom video game controller with buttons that send specific keystrokes from your phone... Or perhaps something more practical. Either way, here's how you build it.... Before we start, familiarize yourself with the diagram describing the flow of communication. (I recommend clicking the "i" in the upper-left corner, then clicking the link to the original file, in order to view full size) Step 1: Materials | Hardware and Software Now that you understand how it works, let's get your materials ready.... HARDWARE - 1 x Arduino board (I'm using an Arduino UNO: http://arduino.cc/en/Main/arduinoBoardUno) - 1 x Android device (I'm using a Droid 2) - 1 x Bluetooth stick (I'm using BlueSMiRF Gold: http://www.sparkfun.com/products/10268) - 2 x USB cable (A to B to program Arduino; A to Micro-B to program Droid 2) - 1 x computer SOFTWARE - Arduino IDE (to program your Arduino board: http://arduino.cc/en/Main/Software) - Eclipse IDE (to write the Android app: http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/heliossr2) - Android SDK/ADT Plug-in for Eclipse (http://developer.android.com/sdk/index.html) - Processing IDE (to control your computer's keyboard/mouse at runtime: http://processing.org/download/) - Amarino and MeetAndroid Arduino library (to assist bluetooth communcation from Android to Arduino: http://www.amarino-toolkit.net/index.php/docs.html) Step 2: Installing The Software I'm not going to reinvent the wheel for installation guides. The links below are provided directly from the source. Installing Arduino: http://arduino.cc/en/Guide/HomePage Installing Processing: http://processing.org/learning/gettingstarted/ Installing Android SDK: http://developer.android.com/sdk/installing.html Installing ADT Plugin for Eclipse: http://developer.android.com/sdk/eclipse-adt.html#installing Never wrote a simple Android app before? I recommend becoming familiar with the environment first by following this following instructable: http://www.instructables.com/id/How-to-Write-a-Hello-World-app-for-Android/ Step 3: Wiring and Pairing the BlueSMiRF Hook up the BlueSMiRF Gold to your Arduino, directly or to a breadboard. (From BlueSMIRF to Arduino...) - Wire VCC to 5V. - Wire GND to GND. - Wire TX-0 to Digital pin 1 (RX). - Wire RX-1 to Digital pin 2 (TX). Once wired, hook up your Arduino to an external power source so we can set the baud rate. By external power source, I mean other than your computer. I was fortunate to have a USB wall charger adapter that came with my phone. Or there's a power jack mounted on the board. Or hook up a 9V battery: with a battery clip, wire positive to "Vin" on the Arduino and negative to ground (GND) on the Arduino. Once powered externally, you should see a blinking red LED on your BlueSMiRF. (This means it is powered but not yet connected to another bluetooth device.) Pair your BlueSMiRF device to your computer On Mac OS X... 1. Open Applications > System Preferences. Click on Bluetooth under "Internet and Wireless". 2. Make sure "On" and "Discoverable" are checked so that BlueSMiRF can find your computer. 3. Click the + sign to setup a new device. This will open Bluetooth Setup Assistant. 4. Bluetooth Setup Assistant will search for bluetooth devices nearby. You should see "FireFly" in the list. This is your BlueSMiRF. Select it and click Continue. 5. On the next screen click Passcode Options. It will pop a dialog box. Choose "Use a specific passcode" and enter 1234. Click OK. Click Continue. You device should now be paired. Click quit.   For more detail: Control Keyboard & Mouse Android app via Arduino ### Augmented Water using arduino The Augmented Water device helps you save water by turning red after one Liter. The device, built by @tamberg during a water hackathon, is made from an Arduino, a flow sensor and coloured LED pixels. Video https://www.flickr.com/photos/tamberg/14346321456/ (thanks kiilo) In case you want to build your own, read on... Material Arduino, e.g. http://www.adafruit.com/products/50 Ca. 7 Neopixels, http://www.adafruit.com/category/168 Flow sensor, http://www.adafruit.com/products/828 LiPo battery, e.g. http://www.adafruit.com/products/1578 LiPo charger, e.g. http://www.adafruit.com/products/1304 Jumper wires M-M, e.g. http://www.adafruit.com/products/153 Tube fitting the sensor Plastic test tube Some zip ties Tools Soldering iron Hot-glue gun Saw Step 1: Preparing and testing the Neopixel LEDs If you use Neopixels by the meter, cut off a piece of ~7 pixels and solder jumper wires as follows: Black wire to GND Yellow wire to DI Red wire to +5V Take care to solder them to the right end of the strip. Compare the little arrows printed on the strip with the picture. Read Adafruit's Neopixel best practices before connecting the pixels. Download and install Adafruit's Neopixel Arduino library from https://github.com/adafruit/Adafruit_NeoPixel Open File > Examples > Adafruit_NeopPixel > strandtest Change the number of pixels to fit your short strip. Upload the code to make sure the pixels work. (This code was the starting point of the hack.) Step 2: Testing the flow sensor (Image by Adafruit, CC BY-NC-SA) Download the flow meter example code from https://github.com/adafruit/Adafruit-Flow-Meter Connect the flow meter as indicated in the source code. Rename .pde to .ino, open it and upload the code to the Arduino. Testing works fine without water by blowing some air through the sensor. Step 3: Connecting and testing the hardware Download the Augmented Water source code from https://bitbucket.org/tamberg/waterhack/raw/tip/20... (Re-)connect the hardware as indicated in the source code: Red flow sensor wire to +5V Red Neopixel wire to +3.3V Black wires to common ground Yellow flow sensor wire to pin #3 Yellow Neopixel wire to pin #2 Upload the code to the Arduino and test it. Your lung volume is hopefully larger than 1 Liter. Use the serial monitor of the Arduino IDE to see numbers. (Note that the code is a simple mash-up of the previous examples.)   For more detail: Augmented Water using arduino ### Blind Maze Navigation using 2-DOF Haptic Joystick The domain of haptics has immense potential as a technology to assist visually-impaired individuals with their navigation of the physical world. In this project, we sought to develop a 2-DOF haptic joystick to provide force-feedback to a user as she attempts to navigate a maze - with no visual feedback whatsoever. The proof of concept we show here takes a given maze, and renders it as a 2D navigable virtual environment. Introduction We see many applications in the field of haptics to improving the quality of life for individuals with disabilities. In particular, the reliance of haptics of the sense of touch lends itself to aiding the visually-impaired. Consider the case of a wheelchair-bound individual with a visual impairment. Even with modern wheelchair technology, the burden of safe and effective navigation through the environment is entirely on the operator of the wheelchair. If the user is unable to see obstacles and visually sense a clear path, the assistive technology that the wheelchair provides is effectively useless. The 2-DOF haptic joystick is an attempt at remedying that problem. By coupling traditional joystick navigation with force-feedback, haptic joystick technology could allow visually-impaired, wheelchair-bound users to safely navigate their environments. Our project is half of the solution: not having the ability to generate real-time map information, our device is reliant on pre-determined "mazes" to simulate the notion of a navigable space. The next step would be using real-time environmental mapping (such as with the Kinect's depth sensor) to generate "mazes" on the fly, allowing the virtual environment to truly mimic the user's surroundings and provide useful haptic feedback. Background There exist many other haptic devices that allow for 2-DOF movement. For example, Jared and Sam created a planar 2-DOF device to emulate gravitational forces. All-purpose haptic feedback joysticks are also common, which often provide vibrational feedback during video games. Other special-purpose joysticks have also been created, for MRI applications, wheelchair navigation, and motor driving. A number of different implementation schemes are employed, both for sensors and actuators. Popular alternatives to our optical encoder sensing set-up include potentiometers and magneto-resistive (MR) sensors, as in Prof. Okamura's 1D Hapkit design. On the actuation front, gears and chain-drives are common alternatives to the rubber friction drive model we show here. Design Hardware For our device that would allow for both 2-DOF movement and force feedback, we designed a two-axis gimbal. We reused the transmission from the Hapkit (paddle and friction drive) to couple each axis with a motor. Motor positioning data was obtained with optical encoders in place of the Hapkit's MR sensors. The optical encoders are Maxon HEDS-5540 encoders, coupled with a 10-watt Maxon RE 25 motor (datasheet). Besides four 1/4-20' fasteners, the smaller parts (fasteners, bearings, shaft collars, etc) used were taken from the Hapkit parts list or found in the CHARM lab. All other parts besides the paddle were modeled in Solidworks, then laser cut from either 1/8'' acrylic or Duron in the Product Realization Lab. Acrylic was used for the gimbal and duron for the joystick's container. The frame was initially assembled using epoxy, but following an unfortunate incident where gravity got the better of the structure, hot glue usurped the favored spot. The joystick itself is a repurposed wooden chopstick (no longer sanitary) mounted to the top of the device with rubber bands and duct tape. The duct tape is flexible enough to allow the chopstick to move and rotate as a 2D pivot, while the rubber bands provide enough friction for the joystick to remain vertically anchored and consistently coupled with the gimbal. !!!# Electronics The joystick was powered by an Arduino Uno and the Arduino Motor Shield. The Uno reads and processes the motor encoder values, while the shield's built-in motor controller allows it to drive the two motors via PWM. In order to read both encoder values, each encoder had to communicate with the Arduino via a pin capable of performing software interrupts. The Arduino Uno only has two interrupt pins (2 and 3). Unfortunately, the Arduino Motor Shield is hard-wired to use pin 3 as Motor A's PWM input. This caused us a sufficient amount of trouble - we explored a number of options to resolve the issue, finally deciding on externally wiring the shield to the the Arduino instead of piggybacking the motor shield onto the board. Note that all the pins do not need to be connected from the shield to the Uno - only the pins specified below are necessary for function of both encoders and motors. A circuit diagram of the wiring we used is shown below: With this configuration, the Uno writes to pins 5 and 6 as the two motor's PWM pins instead of the default 3 and 10, reserving pins 2 and 3 as interrupt pins for the encoders. Software A map can be read from a text file, with an arbitrary number of rows and columns. Each character represents a 40px by 40px tile. 'X' denotes a solid wall in that tile, and any other character denotes navigable space. A sample map: ---xxxxxxxx x----xxxxxx x-xx--xxxxx x-------xxx xx-xxx---xx xx--xxxx--x xx-xxxxxx-x xxxxxxxxx-- The user's x, y position is initially set to (20, 20), in the middle of the first tile. The functionality we desired was for the physical position of the joystick to translate directly into the user's velocity. Since both axes of the joystick were coupled with the two motor shafts, reading the encoder values from both motors would allow us to determine the 2-axis displacement of the joystick. To interface with the encoders, we use 3 C header files used in the ME327 Haptics class (TimerOne.h, PinChangeInt,h, and Encoder.h). Using these external libraries allows us to abstract away the process of parsing data from the digital encoders, giving us the angular displacement of both motor shafts in degrees. These raw encoder values easily translated into the joystick's physical displacement, which is then converted into x and y velocities. If no collisions occur, the virtual (x, y) position of the user change accordingly.   For more detail: Blind Maze Navigation using 2-DOF Haptic Joystick ### TI intros its lowest noise octal 12-bit ADC Description   Using CMOS process technology and innovative circuit techniques, the ADS5294 is a low power 80MSPS 8-Channel ADC. Low power consumption, high SNR, low SFDR, and consistent overload recovery allow users to design high performance systems. The ADS5294 has a digital processing block that integrates several commonly used digital functions for improving system performance. It includes a digital filter module that has built-in decimation filters (with low-pass, high-pass and band-pass characteristics). The decimation rate is also programmable (by 2, by 4, or by 8). This makes it useful for narrow-band applications, where the filters can be used conveniently to improve SNR and knock-off harmonics, while at the same time reducing the output data rate. The device includes an averaging mode where two channels (or even four channels) can be averaged to improve SNR. Serial LVDS outputs reduce the number of interface lines and enable the highest system integration. The digital data from each channel ADC can be output over one or two wires of LVDS output lines depending on the ADC sampling rate. This 2-wire interface helps keep the serial data rate low, allowing low cost FPGA based receivers to be used even at high sample rate. The ADC resolution can be programmed to 12 bit or 14 bit through registers. A very unique feature is the programmable mapping module that allows flexible mapping between the input channels and the LVDS output pins. This helps greatly reduce the complexity of LVDS output routing and can potentially result in cheaper system boards by reducing the number of PCB layers. Features   Maximum Sample Rate: 80 MSPS/14-Bit High Signal-to-Noise Ratio 75.5-dBFS SNR at 5 MHz/80 MSPS 78.2-dBFS SNR at 5 MHz/80 MSPS and Decimation Filter Enabled 84-dBc SFDR at 5 MHz/80 MSPS Low Power Consumption 58mW/CH at 50 MSPS 77 mW/CH at 80 MSPS (2 LVDS Wire Per Channel) Digital Processing Block Programmable FIR Decimation Filter and Oversampling to Minimize Harmonic Interference Programmable IIR High Pass Filter to Minimize DC Offset Programmable Digital Gain: 0 dB to 12 dB 2- or 4-Channel Averaging Flexible Serialized LVDS Outputs: One or Two Wires of LVDS Output Lines per Channel Depending on ADC Sampling Rate Programmable Mapping Between ADC Input Channels and LVDS Output Pins-Eases Board Design Variety of Test Patterns to Verify Data Capture by FPGA/Receiver   Texas Instruments has introduced a low noise octal-channel, 14-bit analogue-to-digital converter (ADC) and a sampling frequency of up to 80MSPS. The ADS5294 has specified signal-to-noise ratio (SNR) of 75.5dBFS at 5MHz. Power consumption is 77mW per channel at 80MSPS. On-chip TI has included a digital processing block, a low-frequency noise suppression mode and programmable input-to-output mapping. Using the ADS5294, digital data can be output over one or two wires of LVDS pins per channel reducing the number of interface lines. This creates a two-wire interface which keeps the serial data rate low allowing designers to use low cost FPGAs. The ADS5294 is available in a 12mm x 12mm, 80-pin QFP package.   For more read: TI intros its lowest noise octal 12-bit ADC   ### Memwa – a C64 Emulated on a STM32 This project was made in the memory of my old computer that I played around with as a young boy. I have a lot to thank this machine for, among other things it made me understand what I wanted to do with my life. So in this project I created software and hardware to make it possible to play those wonderful games yet again. Hardware is really fun! I enjoy doing PCB designs for projects like these. This is why I decided to create a board for this project to see if I could produce something that would suffice to run the emulation good enough. The SID chip was the crown jewel for this board, no doubt about it   For more detail: Memwa – a C64 Emulated on a STM32 ### Temperature Displayed on 4 Digit 7 segment using Arduino In this project I’ll display the temperature in a 4 digit 7 segment display (common anode). The sensor is the cheapest you can find so actually the temperature changes pretty easily which makes the display to show always different temperatures. But the idea is to apply this code to other projects with 7 segment displays that I might do later. if you want to learn a bit more of 7 segment displays you can read more at this post I've made. This project is great to learn more about: Reading sensors (in this case temperature) 7 segment displays (4 digit 7 segment displays) 8 bit Shift Registers (74HC595) Pratice wiring and for more project and tips you can also check my website: http://randomnerdtutorials.com/ You can see this project working right now:   Step 2: Schematics I think it's a bit hard to follow the yellow connections with this schematic. So i recommend that you take a look at the 74HC595 pins and to the internal circuit diagram of the 4 digit 7 segment display (common anode). So how does the yellow connections were made? Basically  the pin 11 connects to the QA, the pin 7 to the QB and so one… Major Components in Project Parts Required 1x Arduino Uno 1x Temperature Sensor (I’m using the LM335Z) 1x 4 Digit 7 Segment Display (common anode) 1x 74HC595 8 Bit Shift Register 8x 220 Ohm Resistors 1x 4700 ohm Resistor 1x Breadboard (or  two) Jumper Cables For more detail: Temperature Displayed on 4 Digit 7 segment using Arduino ### Digitally Controlled 2.1 Channel Analog Audio Power Amplifier This article introduces high quality digitally controlled 2.1 channel analog audio power amplifier system. This project is mainly based on TDA7377 AF power amplifier and PIC18F452 8bit microcontroller. Basic technical features of this receiver are covered in table1. This unit is specifically design to work with PC sound cards, radio receivers and CD/DVD/Blue-Ray players. This system use commonly available electronic components and substitute components can also use. For maximum quality we recommended to use components from same manufacturer. For example some actual capacitor values and resistor values are slightly varied from manufacture to manufacturer, and this cause some minor unbalances in output of amplifiers. When soldering the PCB we suggested to soldering small components such as jumper wires, resistors first and moving to larger components at last. Also try to use IC sockets for all the DIP and TDA7377 ICs. In our prototype all the integrated circuits except 2 voltage regulators (IC5 - 7805 and IC6 - 7808) are connected to mainboard via IC sockets. All the controls, I/O and power terminals and display modules are connected to mainboard through wires, and for control and display lines we recommended to use suitable ribbon cables. For power and output wires 18-20 gauge multi-strand cables are recommended (these wires are commonly used for automotive wirings). In given PCB design 4 wires need to be installed for I2C bus and MCU STAND-BY lines. For this, standard Teflon coated 32-30 gauge wires are sufficient.   For more detail: Digitally Controlled 2.1 Channel Analog Audio Power Amplifier ### METCAL TO LAUNCH NEW GT ADJUSTABLE TEMPERATURE SOLDERING SYSTEMS Metcal announced plans to launch its new GT90 and GT120 Soldering Systems. The GT90 and GT120 offer market-leading performance due to their use of inductive heating technology and are Metcal’s first platforms with adjustable temperature offered to the market. The GT family of soldering systems are the only products in the market to offer the combination of inductive heating technology with adjustable temperature. This gives the GT systems a significant performance advantage with much faster time to temperature, thermal recovery and temperature stability during soldering over resistive heating systems offered by competitors in the same product category. The GT90 is a single port soldering station, utilizing a 90-watt power supply and best-in-class performance vs. competitive 75-120-watt systems. It is compatible with Ultrafine and Standard tips and is ideal as a cost-effective solution for single iron applications on the production line. The GT120 is a single port soldering station utilizing a 120-watt power supply and offers performance greater than competitive 150-200-watt systems and equivalent performance to much more expensive 250-watt systems.  The GT120 is compatible with Ultrafine, Standard and High Thermal Demand tips and can be used for any type of single iron soldering application. “With performance greater than anything offered in the market today, and the capability of handling the tiniest of components to the most demanding thermal load applications, the GT120 is the highest performing and most versatile soldering station available in the market today.  It is ideal for production soldering, R&D labs, applications with extremely high thermal loads and soldering under a microscope.” said Joshua Edberg, Director of Marketing for Metcal. Read more: METCAL TO LAUNCH NEW GT ADJUSTABLE TEMPERATURE SOLDERING SYSTEMS ### FOUR PORTS INTELLIGENT AND HIGH POWERED CHARGER USB CHARGER The more the electronic devices to charge, the more the multiple-port USB chargers to have, especially intelligent ones! Yes, charging multiple devices at the same time can be very tiring; from having to deal with the mess of the plenty of cables and adapters needed for the different devices to hunting for free wall sockets and then to the inconveniences faced when trying to charge on a journey. But with multi-port USB chargers, things have really become much easier and faster!! However, while it seems like some have been able to fully satisfy the needs of people, others have not. “The main reason the idea was brought to life is that I have never been satisfied with multi-port chargers. They are built with cheap components and lack functions that I believe are prerequisites for safe and smart charging. Many of them are told to deliver high power but when they are put to the feat, many of them fail in different aspects. Throttling the power outputs is most common, overheating or having very high voltage ripple are issues often found”, says Karoly Simon, Sweden-based designer of the Four4 multiple-port USB charger. The Four4 USB charger design offers safety functions including data integrity protection that protects devices from data intrusion and harmful spyware when used in public USB outlets. The charger also has an OLED display that shows important system information as well as charging performance for charging optimization. All the channels of the charger are independent and each optimizes charging current to be as high as possible. The Four4 is a perfect power supply for most SBCs too; its 3.2 power supply mode can satisfy the most power demanding board without disruption. Charger Specifications include: Input Voltage: 4.7 – 5.5VOutput voltage: 5.3VOutput current for each port: 8ADimension: 60 x 60 x 21 mm (2.4 x 2.4 x 0.83 inch)Weight: 60 grams Read more: FOUR PORTS INTELLIGENT AND HIGH POWERED CHARGER USB CHARGER ### QUETZAL-1 SATELLITE GOES OPEN SOURCE Back in 2020, students from Universidad Del Valle De Guatemala (UVG) pulled off a really impressive feat, designing and building a CubeSat that lasted a whopping 211 days in orbit. In addition to telemetry and radio equipment, it carried a black-and-white camera payload. But it turns out space is hard. The first pictures were solid black or white, with the automatic exposure process failing pretty badly. A pair of good pictures were taken by waiting until the satellite was passing over Guatemala during sunrise or sunset. A hung I2C bus led to battery drain, and the team tried a system reset to clear the hung state. Sadly the craft never came back to life after the reset, likely because of one of the Lithium-Ion battery cells failed completely in the low charge state. That was 2020, so why are we covering it now? Because the project just released a massive trove of open source design documents, the software that ran on the satellite and ground station, and all the captured telemetry from the flight. It’s the ultimate bootstrap for anyone else designing a CubeSat, and hopefully provides enough clues to avoid some of the same issues. Even though the mission had problems, it did achieve a lot of milestones, including the first picture of Earth taken by a Central American satellite. Even coming online and making radio contact from orbit to an earthbound station is quite a feat. The team is already looking forward to Quetzal-2, so stay tuned for more! And if you want the details on the Quetzal-1 design, and what went wrong with the electrical system, both PDF papers have been released. Seeing more open source in space is an encouraging development, and one that should continue to grow as the cost of payloads to orbit continues to fall. We’ve covered the UPSat satellite, the PyCubed framework, and even the RTL-SDR for listening to satellite radio traffic. Source: QUETZAL-1 SATELLITE GOES OPEN SOURCE ### ARDUINO-POWERED MISSILE SYSTEM USES ULTRASOUND TO AIM In the real world, missile systems use advanced radars, infrared sensors, and other hardware to track and prosecute their targets. [Raspduino Uno] on YouTube has instead used ultrasound for targeting for an altogether simpler desktop fire control solution. This fun build uses a common off-the-shelf USB “missile launcher” that fires foam darts. To supply targeting data for the launcher, an Arduino Uno uses an ultrasonic sensor pair mounted atop a servo. As the servo rotates, the returns from the ultrasonic sensor are plotted on a screen run by a Raspberry Pi. If an object is detected in the 180-degree field of view of the sweeping sensor, a missile is fired using the dart launcher. https://youtu.be/WJpT10yvP3s It’s a relatively simple build, but nonetheless would serve as a useful classroom demonstration of radar-like targeting techniques to a young audience. Real military hardware remains altogether more sophisticated. Video after the break. https://youtu.be/ahhb5EjHleY Source: ARDUINO-POWERED MISSILE SYSTEM USES ULTRASOUND TO AIM ### PRESENCE SENSOR LOCKS COMPUTER WHEN YOU STEP AWAY Having a computer that locks its screen after a few minutes of inactivity is always a good idea from a security standpoint, especially in offices where there is a lot of foot traffic. Even the five- or ten-minute activity timers that are set on most workstations aren’t really perfect solutions. While ideally in these situations we’d all be locking our screens manually when we get up, that doesn’t always happen. The only way to guarantee that this problem is solved is to use something like this automatic workstation locker. The project is based around the LD2410 presence sensor — a small 24 GHz radar module featuring onboard signal processing which simplifies the detection of objects and motion. [Enzo] paired one of these modules with a Seeed Studio XIAO nRF52840 development board to listen to the radar module and send the screen lock keyboard shortcut to the computer when it detects that the user has walked away from the machine. The only thing that [Enzo] wants to add is a blinking LED to let the user know when the device is about to timeout so that it doesn’t accidentally lock the machine when not needed. One of the parts of this build that is a little bit glossed over is the fact that plenty of microcontroller platforms can send keystrokes to a computer even if they’re not themselves a USB keyboard. Even the Arduino Uno can do this, so by now this feature is fairly platform-agnostic. Still, you can use this to your advantage if you have the opposite problem from [Enzo] and need your computer to stay logged in no matter what. Source: PRESENCE SENSOR LOCKS COMPUTER WHEN YOU STEP AWAY ### ALTRAN IMPROVES SOFTWARE QUALITY WITH MACHINE LEARNING New tool, ‘Code Defect AI,’ allows earlier discovery of bugs, minimizing the cost to fix them and speeding up the development cycle. Altran, the global leader in engineering and R&D services, today announced the release of a new tool available on GitHub that predicts the likelihood of bugs in source code created by developers early in the software development process. By applying machine learning (ML) to historical data, the tool – called “Code Defect AI” – identifies areas of the code that are potentially buggy and then suggests a set of tests to diagnose and fix the flaws, resulting in higher-quality software and faster development times. Bugs are a fact of life in software development. The later a defect is found in the development lifecycle, the higher the cost of fixing a bug. This bug-deployment-analysis-fix process is time consuming and costly. Code Defect AI allows earlier discovery of defects, minimizing the cost of fixing them and speeding the development cycle. “It’s well known that software developers are under constant pressure to release code fast without compromising on quality,” said Walid Negm, Group Chief Innovation Officer at Altran. “The reality however is that the software release cycle needs more than automation of assembly and delivery activities. It needs algorithms that can help make strategic judgments ‒ especially as code gets more complex. Code Defect AI does exactly that.” Code Defect AI relies on various ML techniques including random decision forests, support vector machines, multilayer perceptron (MLP) and logistic regression. Historical data is extracted, pre-processed and labelled to train the algorithm and curate a reliable decision model. Developers are given a confidence score that predicts whether the code is compliant or presents the risk of containing bugs. Code Defect AI supports integration with third-party analysis tools and can itself help identify bugs in a given program code. Additionally, the Code Defect AI tool allows developers to assess which features in the code have higher weightage in terms of bug prediction, i.e., if there are two features in the software that play a role in the assessment of a probable bug, which feature will take precedence. Read more: ALTRAN IMPROVES SOFTWARE QUALITY WITH MACHINE LEARNING ### DIY ROBOTIC ACTUATOR BUILT FOR WALKING ROBOTS [Aaed Musa] has built a variety of robots over the years, but found off-the-shelf servos to be underwhelming for his work. Thus, he set out to build a better actuator to support his goals of building a high-performance walking bot in future. [Aaed] decided to try and build a quasi-direct drive actuator, similar to those used in MIT’s agile mini Cheetah robot. It consists of a powerful brushless DC motor driving a 9:1 planetary gear reduction built with 3D printed parts, which provides high torque output. It’s designed to be run with an ODrive S1 motor controller with encoder feedback for precise control. The actuator weighs in at a total of 935 grams. It’s not cheap, with the bill of materials totaling just under $250. For your money, though, you get a responsive robotic actuator with a hefty holding torque of over 16 Nm, which [Aaed] demonstrates by having the actuator shake around some dumbells on a long lever arm. https://youtu.be/gxXatMr0LX4 Walking robots have exploded in popularity ever since Spot hit the scene. We’ve seen everything from complex builds to super-simple single-servo designs. Source: DIY ROBOTIC ACTUATOR BUILT FOR WALKING ROBOTS ### AN ESP IN YOUR MINI TV When miniature LCD TVs arrived on the market they were an object of desire, far from the reach of tech-obsessed youngsters. Now in the age of smartphones they’re a historical curiosity, but with the onward march of technology you can have one for not a lot. [Taylor Galbraith] shows us how, with an ESP32 and an LCD we rather like because of its CRT-like rounded corners. What he’s created is essentially a small media player, but perhaps what makes it of further interest is its migration from a mess of wires on a breadboard to a rather nice PCB. He’s not released the board files at the time of writing, but since the software can all be found in the GitHub repository linked above, we live in hope. On it are not only the ESP and the screen, but also a battery management board, an audio amplifier, and a small speaker. For now it’s a bare board, but we hope he’ll complete it with a neatly designed case for either a pocket player or a retro-styled mini TV. Until then you can see his progress in the videos below the break. https://youtu.be/qANaAK9TLwI If you’re after more ESP32 media player inspiration, this isn’t the first retro-themed media player we’ve brought you. https://youtu.be/0K-EbKkWLTA Source: AN ESP IN YOUR MINI TV ### AMS210 INDUSTRIAL-GRADE EMBEDDED PC FOR 9TH/8TH GEN INTEL® CORE PROCESSOR IBASE Technology Inc., a leading provider of industrial motherboard and rugged computing solutions, is pleased to announce its AMS210 high-performance embedded box PC. Designed for factory automation, machine vision, digital signage and a wide range of industrial IoT applications, the AMS210 can be outfitted with 9th/8th Gen Intel® Core™ processors, up to 32GB of DDR4 memory and two 2.5” disk drives with RAID 0/1. The AMS210 has a straightforward design with front I/O accessibility, including four USB 3.1, four USB 2.0, three DisplayPorts, and a serial port to connect to a diverse set of peripheral devices, as well as four Gigabit LAN ports to handle high bandwidth data processing requirements. Two flexible expansion slots supporting a combination of PCI-E(x16), PCI-E(x4) and PCI interface are also conveniently located at the front for easy access. To achieve operational reliability in harsh industrial environments, it features an operating temperature range from 0°C to 55°C and vibration endurance of up to 3 Grms (with SSD). Measuring 297.4(W) x 266.2(D) x 78.5(H) mm, the AMS210 is available in barebone or can be equipped with an Intel® Core™ i7-9700TE processor, 8GB RAM, and a 500GB SATA drive. It also supports an optional 24V power adaptor and two additional serial ports. For more information, please visit www.ibase.com.tw AMS210 FEATURES: 9th/8th Gen Intel® Core™ Processor (35W TDP)2x DDR4 SO-DIMM, Max. 32GB4x Gigabit LAN512k SRAM on board2x expansion slots Read more: AMS210 INDUSTRIAL-GRADE EMBEDDED PC FOR 9TH/8TH GEN INTEL® CORE PROCESSOR ### SMALL MULTI-BAND GNSS RECEIVER WITH 1-CM POSITION ACCURACY SkyTraq announced a 12- x 16-mm size PX1122R multi-band RTK receiver for centimeter-level accuracy GNSS positioning applications. The receiver works with all the four global navigation satellite systems using GPS L1/L2C, Galileo E1/E5b, GLONASS L1/L2, and Beidou B1I/B2I signals concurrently to maximize positioning availability even in difficult urban environments. Based on single-chip SoC design, PX1122R is currently the smallest size, lowest power, multi-band multi-GNSS RTK receiver module on the market. The PX1122R is designed to deliver reliable, centimeter-level accuracy positioning for precision guidance of emerging autonomous unmanned ground or aerial vehicle, Internet-of-Things precise positioning, and also the traditional land surveying and precision farming applications. The PX1122R has RTK initialization time under 10 seconds and maximum update rate of 10 Hz. Its twice update rate than peer provides in-time positioning information with faster response time and improved guidance performance for fast moving applications. Moving base RTK for GNSS precise heading is also supported. By using two PX1122R and two antennas with 1 meter separation, highly accurate 1-sigma heading accuracy of 0.13 degree can be obtained; such heading accuracy is immune to magnetic interference nor affected by receiver’s speed. Read more: SMALL MULTI-BAND GNSS RECEIVER WITH 1-CM POSITION ACCURACY ### SMART WIRELESS LAUNCHES A NEW SOM BASED ON SNAPDRAGON™ 660 SMART Wireless Computing® (part of SMART Global Holdings), a leading provider of Snapdragon™ embedded computing platforms and solutions, today announced a compact compute module in an LGA package, Inforce 6503. Inforce 6503 enables advanced visual computing, enhanced graphics, and on-device machine learning capabilities featuring the Qualcomm® Snapdragon™ 660 processor. The Inforce 6503 SoM powered by the Snapdragon 660 Octacore processor brings true-to-life colors and lifelike visuals coupled with AI-enabled user experiences. This computes module combines the heterogeneous computing capabilities of the Snapdragon™ SoCs with 2×2 802.11ac Wi-Fi with DBS, Bluetooth 5.x, haptics, a full-featured USB-C interface with UltraHD display capability and ample internal memory to make it a complete 4K encode/decode systems. With support for dual MIPI-CSI cameras, depth perception use-cases like proximity detection, semantic segmentation, autonomous driving, and facial recognition can be enabled with ease on systems built on these SoMs. The SoM comes in an ultra-small form factor of 40mm x 35mm in an LGA package and is light-weight. It is a perfect fit for rugged applications that requires sturdy mechanical fitment and a need for low vertical profiles. Target end-uses that can benefit from these capabilities include rugged connected displays, high-end industrial IoT, wearables, portable healthcare with advanced imaging requirements, and connected cameras’ domains. Optional SKUs support extended operating temperature range and EMI shielding for better RF noise protection, while also doubling up as a medium for heat spreading and dissipation to further improve performance. SMART wireless offers a reference carrier board design with this SoM to help create and optimize your products with the shortest turnaround time. Read more: SMART WIRELESS LAUNCHES A NEW SOM BASED ON SNAPDRAGON™ 660 ### NEW PASSWORDPUMP2.0 ENSURES YOU NEVER FORGET A PASSWORD Using the same password on different platforms can be a security risk, but remembering different passwords, used for different accounts, can be quite the task too especially with the need to infuse special characters and numbers, and the fact that you may not use some of the passwords regularly enough for them to become easy to remember.  To help keep track of all these, Dan Murphy has designed a USB- based device that is capable of storing up to 250 sets of credentials, that are encrypted with AES-256 encryption, which makes gaining access to the credentials nearly impossible. The new device called, PasswordPump 2.0, removes the need to store your credentials in the cloud or on a file where an attack could easily leave you exposed. It is based on the Adafruit ItsyBitsy M4 and includes; a pair of removable EEPROM chips, an I2C OLED display (128 x 32), and a rotary encoder, all stacked on a custom PCB. The credentials are stored on the first EEPROM chip and backed up on the secondary for added security. The device allows users to enter their credentials using several methods, including; the rotary encoder, the keyboard, via the serial terminal, or via the PasswordPump Python-based GUI, which was explicitly developed for this purpose. The PasswordPump 2.0 offers a myriad of features, which are as provided by Murphy: Store up to 250 sets of credentialsAuthenticate with a 15 character master passwordSearch for accountsData entry via rotary encoder or keyboard and serial monitor, or via client Python GUI running in Windows, Ubuntu, or MacOS.Send username and password as if typed in via keyboard. Can also send URL, old password and account name.Add account name, username, password (generated or not), URL, old passwordAccounts added in alphabetical orderEdit existing username, password, URL, style (inter-username/password character, Return or Tab), old password Read more: NEW PASSWORDPUMP2.0 ENSURES YOU NEVER FORGET A PASSWORD ### MEARM 3.0: THE POCKET-SIZED ROBOT ARM We all might dream of having an industrial robot arm at our disposal, complete with working controller that doesn’t need constant maintenance and replacement parts, and which is able to help us with other projects with only a minimum of coding or instruction. That’s a pipe dream for most of us, as without a large space, sufficient funding, or unlimited amounts of troubleshooting time we’ll almost always have to look for something smaller and simpler. Perhaps something even as small as this pocket-sized robotic arm. This isn’t actually the first time we’ve seen the MeArm; the small robot has been around since 2014 and has undergone a number of revisions and upgrades. Even this revision has been out for a little while now but this latest in the series is now available with a number of improvements over the older models. The assembly time required has been reduced from two hours to about 30 minutes and the hardware has even been fully open-sourced as well which allows virtually anyone with the prerequisite tools to build this tiny robot for whatever they happen to need it for, due to its very permissive licensing. https://youtu.be/eFOgFglWql4 The linked Instructable goes into every detail needed for building the robot as well as documenting all of the parts needed, although you will need access to some specialty tools to make a lot of them. We also featured a Friday Hack Chat about these robots back in 2018 that has some interesting details about these robots in it, and although this is a relatively small robot in the grand scheme of things it’s always possible to upgrade to something larger in the future. Source: MEARM 3.0: THE POCKET-SIZED ROBOT ARM ### SSG5000X SERIES 6GHZ RF ANALOG/VECTOR SIGNAL GENERATORS With powerful functions and wide frequency range, the SSG5000X vector signal generators offer excellent performance in phase noise, spectral purity, bandwidth, EVM, and output power, and suit a wide range of application fields Saelig Company, Inc. has introduced the Siglent SSG5000X RF Signal Generators which generate analog and vector signals over a frequency range of 9kHz to 4GHz/6GHz with a 0.001Hz frequency setting resolution. They offer excellent performance in phase noise, spectral purity, bandwidth, EVM, and output power. The internal IQ modulation generator and waveform playback function on the –V models make it easy to create even the most complex signal types. They also cover the most important RF band for digital wireless communications and include standard waveform files. The SSG5000X’s 5” color touch screen makes controlling the instrument fast and intuitive. It produces a maximum output power +26dBm (typ.) with phase noise of -120dBc/Hz @ 1GHz, 20kHz offset (typ.)  The ARB Mode can be used to play back digital communication waveform files, while the Custom Mode on the –V versions can generate IQ modulated signals, such as QAM, PSK, ASK, FSK, sample rate up to 120Msps.  Frequency sweeps can be performed in linear or logarithmic steps.  AM, FM, PM analog modulation can be accomplished with internal, external, or Int+Ext sources. Built-in digital communication waveform files such as 5G-NR,LTE, WCDMA, WLAN, BlueTooth, and CDMA  are also available.  The SSG5000X can add real-time AWGN to modulation signals when testing receiver performance, or quickly simulate noisy RF environments.  It supports multi-tone signal consisting of up to 20 sine wave frequencies. This is helpful for audio measurements, amplifier and receiver non-linear distortion tests, and ground and satellite communications tests. Flatness correction is often needed to compensate for transmission line losses or switching impedances. The SSG5000X supports flatness correction with an external power sensor (not included) and is compatible with the most popular USB power sensors on the market.  Standard interfaces include USB Host, USB Device (USB TMC), LAN (VXI-11, Socket, Telnet), GPIB (opt.) and PC control is available, even remotely via a web browser. The SSG5000X RF signal generator series provides an engineer with an output library of the most common protocol signals and the flexibility to create custom formats to test the limits of new designs. Read more: SSG5000X SERIES 6GHZ RF ANALOG/VECTOR SIGNAL GENERATORS ### STINGER96 – 96BOARDS IOT EDITION BASEBOARD Shiratech launches its NEW 96Boards IoT solution based on ST STM32MP157 MCU + QUECTEL BG9IoT6 NB-IOT modem. The Board is 96Boards IoT Edition Extended Compatible (IE extended). Full support for 96Boards IoT Edition (IE) Low Speed expansion connector. STM32MP157 Main Features CORE 32-bit dual-core Arm® Cortex®-A7Up to 650 MHz (Up to 4158 CoreMark®)L1 32 Kbyte I / 32 Kbyte D for each core256 Kbyte unified level 2 cacheArm® NEON™ and Arm® TrustZone®32-bit Arm® Cortex®-M4 with FPU/MPUUp to 200 MHz (Up to 673 CoreMark®) MEMORY External DDR memory – DDR3 – 256M X 32Bit708 Kbyte of internal SRAM: 256 KB of AXI SYSRAM + 384 KB of AHB SRAM + 64 KB of AHB SRAM in backup domain and 4 KB of SRAM in backup domainNAND Flash – SLC NAND Flash Parallel 1.8V 8Gbit 1G x 8Bit 63-Pin VFBGA SECURITY Secure boot, TrustZone® IPs, active tamper CONNECTIVITY On Board Camera DSMI 12Bit interfaceJTAG interface – ST LINK JTAG Interface1 x 10/100/1000 Ethernet based on KSZ9031RNX Microchip Phy2 x USB2 interfaces (One for External Connector, One for BG96 Modem)1 x Uart (Via FTDI & Micro USB interface)1 x SD interfaceFull 96 IOT LS connector Interface (1.8V interface)2 x UART2 x I2CGPIO Support A-L1 x SPI1 x PCM BG96 (NBIOT Modem) – Interface 2 x Control lines1 x USB Interface Read more: STINGER96 – 96BOARDS IOT EDITION BASEBOARD ### ELECTRONIC EARRINGS ARE PCB ART YOU CAN WEAR If there’s one area of the human anatomy we rarely try to draw the eye, it’s the ears. Nonetheless, [DIY GUY Chris] has developed some LED earrings that should do exactly that. The earrings are made using PCBs as the very body of the jewelry itself. The PCBs for each ear play host to eight WS2812 LEDs in a tiny 2020 form factor. The LEDs get their instructions from an ATtiny13-A AVR microcontroller, with some further supporting hardware to get everything playing happily together. Each earring runs off a single CR1220 coin cell, which sits on the obverse side of the earring to stay out of sight. The earrings are programmed with pogo pins to avoid the need for any bulky connectors. By virtue of the tiny addressable LEDs, the earrings are capable of displaying full RGB colors. [DIY GUY Chris] has programmed the earrings with simple color fades, as well  as some fancier chase animations as well. We’ve seen some great PCB jewelry before, too. Video after the break. Source: ELECTRONIC EARRINGS ARE PCB ART YOU CAN WEAR ### FPGA BREAKOUT BOARD FOR DIP PACKAGE SHENANIGANS FPGAs are supremely flexible and powerful devices. However, they usually come in QFP or BGA packages that are altogether difficult for hobbyists to play with. The DIP-FPGA breakout board aims to solve that problem by using a carrier PCB to put an advanced chip in a friendlier form factor. The board itself fits a DIP-20 form factor when soldered up with regular-pitch pin headers. It features a  MachXO2-1200HC FPGA from Lattice Semiconductor. That’s the same chip as used on similar the TinyFPGA A2. With 18 GPIO, a DIP-20 layout is just about enough pins to take care of business. It’s intended specifically for use on breadboards or via regular IC sockets. There’s also a six-pin programming port laid out on the board that you can use with pogo pins or header connectors as you desire. If you want to do some fancy signal stuff in an easy-to-prototype form factor, this could be the setup for you. If you want to buy one ready-made, they’re available on Tindie for the curious. In the meantime, consider whether this beefy FPGA Arduino concept could also propel your next project to greater heights. Source: FPGA BREAKOUT BOARD FOR DIP PACKAGE SHENANIGANS ### WHAT IS TURNKEY PCB ASSEMBLY? PCB Assembly is a process that requires knowledge not just of PCB components and assembly but also of printed circuit board design, PCB fabrication and a strong understanding of the final product. Circuit board assembly is just one piece of the puzzle to delivering the perfect product the first time – without rework or assembly errors. PCBGOGO’s printed circuit board assembly service is a leading turnkey solution for PCB fabrication and assembly under one roof specializing in small and medium volume PCB fabrication with fast lead-time and low minimum from 1pcs for PCBA. What Is Turnkey PCB Assembly? ‘Turnkey’ refers to a product or service that is ready for immediate use for the buyer and when applied to PCB assembly, this means that the supplier will handle all aspects of the PCB project. This includes the procurement of parts, components and the manufacturing of PCB. Turnkey PCB assembly uses an internet cloud-based software and PCB manufacturers to develop printed circuit boards quickly, efficiently and cost-effectively for small businesses. Essentially, a full turnkey solution allows you to have greater freedom to focus on designing PCBs whilst the supplier can handle the rest of the operations. Turnkey solutions offer an efficient and cost-effective way to assemble and test circuit boards for products. This also offers companies a way to receive printed circuit boards with the shortest lead times possible. Full turnkey PCB assembly includes services necessary to create your finished products, beyond PCBA. These include: PCB Prototypes High volume PCBABox buildInventory managementShipment to your end-user. Read more: WHAT IS TURNKEY PCB ASSEMBLY? ### DINGOQUADRUPED IS A CHEAP CANINE-LIKE ROBOT Robot humanoids are cool, but also a bit hard to make work as they only have two legs to stand on. Four-legged robots can be a bit more approachable. The Dingo Quadruped aims to be just such an open-source platform for teaching and experimentation purposes. The robot is based on the Stanford Pupper, a robot platform we’ve discussed previously. It bears a design not dissimilar from the popular Spot robot from Boston Dynamics. Where Spot costs tens of thousands of dollars, though, Dingo is far cheaper, intended for cheap production by students and researchers for less than $1,500. The robot weighs around 3 kg, and is approximately the size of a shoebox. Control over the robot is via a wireless game controller. Each leg uses three high-torque servo motors, which are elegantly placed to reduce the inertia of the leg itself. A Raspberry Pi runs the show, with an Arduino Nano also onboard for interfacing analog sensors or additional hardware. The chassis itself has a highly modular design, with a focus on making it easy to add additional hardware. If you want to get started experimenting with quadruped robots, the Dingo might just be the perfect platform for you. Video after the break. Source: DINGOQUADRUPED IS A CHEAP CANINE-LIKE ROBOT ### PUNCHED CARDS ARE IN THE CLOUD, WITH THIS ARDUINO Grizzled veterans of the computing industry will relate stories of submitting projects on stacks of punched cards, something those of us who stored their 8-bit works on audio cassettes could only imagine. But for those who fancy experimenting with the format it’s still possible to make a basic card reader using LEDs and light sensors, as [Nino Ivanov] has done using an Arduino Uno as the brains. And these aren’t just for show, each of his cards holds a LISP program that runs in a cloud service. The Uno does the job of reading, passing its data over its USB serial port to a tablet. On the tablet the serial data is piped to a cloud API to a LISP interpreter. It seems a needlessly complex way to run a factorial program and it’s certainly a little over the top, but on the other hand we love it as a glorious combination of the old and the new. With only 23 characters per card it’s quite an impressive feat to even fit a program on the format, perhaps writing code to fit on minimalist punched cards like this could become a programming challenge in its own right for a generation accustomed to mega-and gigabytes. If you fancy a go yourself, this isn’t the first punched card reader we’ve shown you. Source: PUNCHED CARDS ARE IN THE CLOUD, WITH THIS ARDUINO ### What is a rugged mini PC? What is a rugged mini PC? A rugged mini PC is a small, durable, lightweight, personal computer that has undergone stress testing or ruggedization for usage in extreme conditions and environments. They weigh significantly less than a full-sized rugged server or workstation and take up a lot less space, making them ideal for nooks, crannies, or other areas where leftover space could be utilized. Rugged mini PCs typically power military, commercial, and industrial applications, which often require the increased processing power, durability, reliability, and longevity that a rugged mini PC offers. Rugged mini PCs can function in all sorts of extreme conditions, including in areas where temperatures are severe or damage caused by vibrations and mechanical shock are a concern. In short, rugged mini PCs are durable, powerful, yet unimposing. As a small-form-factor PC, rugged mini PCs get the job done while staying out of the way. At the consumer level, mini PCs are usually reserved for tasks that don’t require a ton of processing power, such as web browsing, emailing, and word or spreadsheet processing. But in the rugged computing industry, a high-performance, heavy-duty, rugged mini PC allows programs or application to handle, and endure, a lot more. The Trenton Systems ION Rugged Mini PC is just one example of such a computer. How does a rugged mini PC work? Rugged mini PCs work like most other computers. They’re just smaller, fit for use in extreme conditions and environments, and generally have limited room for expansion. And just because a rugged mini PC is a lightweight, small-form-factor PC doesn't mean your program or application has to do without the features it requires. Typically, rugged mini PCs still come equipped with an internal hard disk drive (HDD) or solid-state drive (SSD), depending on the requests of the customer, as well as various combinations of LAN ports, VGA ports, DisplayPorts, HDMI ports, and USB ports, perfect for using any needed peripherals. In addition, rugged mini PCs also typically include the latest and greatest high-performance processors, including the latest Intel Core i3, i5, and i7 processors. Read more: What is a rugged mini PC? ### LET UGREEN ALL-IN-ONE 4-PORT 65W GAN FAST CHARGER SOLVE ALL YOUR WORRIES Highlights: Essential for Travel/Office/HomeOne charger solves all the troubles.No need to bring multiple charging adapters when travelling;No worries about the large size of the traditional multi-port charger, which is not convenient for carrying.Work easily, no longer need to equip each device with a different charger, make the desktop clean and tidy, and no longer worry about the cluttered power cord and the insufficient socket.Designed for your ideal life, spend a good time with your family, no longer dispute about who will charge first. Say goodbye to various chargers; Charge 50% within 30 min for iPhone X, the Ugreen 65W GaN PD Charger features fast charge for iPhone, iPad Pro 2020, Nintendo Switch Lite and AirPods at the same time. Intelligent power management delivers optimal charging power to fast charge your devices. Only one charger to meet all i-devices for Apple Fans; The 65W charger can charge MacBook Air 2020, iPad Pro, iPhone 11 Pro, AirPods Pro and iWatch etc. The Ugreen charger is able to charge almost every kinds of digital devices, and it supports nearly all Fast Charging Protocols, making sure your devices are charged with 3-times better efficiently. One charger for your work and casual life. To achieve all above, we applied the latest GaN semiconductor material to the charger, which allows power components to work under higher voltage and more frequent switches, hence to boost up the charging efficiency with even smaller design. Read more: LET UGREEN ALL-IN-ONE 4-PORT 65W GAN FAST CHARGER SOLVE ALL YOUR WORRIES ### EVAL-ADSMOKEKITZ SMOKE EVALUATION KIT Analog Devices’ EVAL-ADSMOKEKITZ smoke evaluation kit enables designers to get smoke detection solutions quickly ADI’s EVAL-ADSMOKEKITZ is an out of the box smoke evaluation kit for high accuracy, integrated, smoke detection monitoring. It provides users with all the necessary components to get up and running quickly with designing their custom smoke detection products, including the WaveTool graphical user interface (GUI). This GUI enables designers to drive smoke detection solutions to market quickly and unlock complex technology to those who are less experienced smoke designers. Kit Includes EVAL-ADPD188BIZ-S2: A complete integrated optical module with matching smoke chamber to support industry global regulations including UL217 ed 8. and UL 268 Ed. 7. It features a reduced footprint, lower power consumption, and increased safety. EVAL-CHAMBER: ADI designed matched smoke chamber comes with a reference design so users can create a more positive smoke detection device with greater verification results, straight out of the box. This enables designers that do not have technical expertise in the area of smoke design or the time to create and test their custom smoke chamber.EVAL-ADPDUCZ: Microcontroller board used to support the ADI EVAL-ADPD188BIZ-S2. Features Supports UL-217 edition 8/ UL-568 ed. 7, EN-54 GB and ISO standardsIncreased safety; reduced nuisance alarms using a dual-wavelength detectionGreater power performance/efficiency – 3x lower power dissipation, enabling smaller low-cost batteriesIntegrated optical module: optimized form factor (3.8 mm x 5 mm x 0.9 mm with 1 blue LED, 1 IR LED, and 2 photodiodes) Read more: EVAL-ADSMOKEKITZ SMOKE EVALUATION KIT ### Building IoT projects with ChatGPT and Arduino Cloud If you are interested in harnessing the awesome power of the new OpenAI ChatGPT artificial intelligence service taking the world by storm this year. You might be interested in a new article published by the Arduino team providing more information on how you can build Internet of Things IoT projects using the Arduino cloud and ChatGPT. In the project tutorial provided by the Arduino team over on the official Arduino Project Hub you will learn how to chat with ChatGPT using any Arduino board and Arduino IoT Cloud dashboards. The amalgamation of ChatGPT and the Arduino Cloud can lead to some intriguing possibilities for IoT applications. Arduino Cloud is a platform designed to streamline the process of developing, deploying, and managing IoT devices. When paired with ChatGPT’s natural language processing capabilities, it becomes possible to create intelligent devices that can comprehend and reply to natural language queries, thus enhancing user experience. Consider, for instance, a smart home system that could be controlled using voice commands or a chatbot offering instant technical support for IoT devices. These are just examples of the applications that can be developed with such an integration. For more information on the project and tutorial jump over to the official Project Hub by following the link below. All you need is an Arduino IoT Cloud compatible device such as an Arduino Nano RP2040 Connect, an Arduino MKR WiFi 1010 or any ESP32/ESP8266 device to get started. ChatGPT Arduino project “The project involves using an Arduino IoT Cloud compatible device, such as an Arduino Nano RP2040 Connect or any ESP32/ESP8266 device, as a middleware between the IoT Cloud and OpenAI’s GPT-3.5 language model. The device receives prompts (questions) from the IoT Cloud, sends them to the OpenAI API, receives and parses the replies, and sends them back to the IoT Cloud. “ “To get started, you need to create an OpenAI account, create an API key, and have enough credits. Then, you can create your device on the IoT Cloud, program it, and set up the dashboard on the IoT Cloud. The dashboard allows you to write questions (prompts) and receive ChatGPT’s replies. “ “In testing, there are two ways to interact with ChatGPT that can be used indistinctly: through the chat window or the question, response, send question mechanism. If an error is received, the error code and a description are provided. The project offers some final considerations, such as variable tweaking, defining the maximum number of tokens that ChatGPT will use in generating a response, and keeping in mind the limits on OpenAI API usage. “ Source: Building IoT projects with ChatGPT and Arduino Cloud ### MATH YOU CAN WEAR: FIBONACCI SPIRAL LED BADGE Fibonacci numbers are seen in the natural structures of various plants, such as the florets in sunflower heads, areoles on cacti stems, and scales in pine cones. [HackerBox] has developed a Fibonacci Spiral LED Badge to bring this natural phenomenon to your electronics. To position each of the 64 addressable LEDs within the PCB layout, [HackerBox] computed the polar (r,θ) coordinates in a spreadsheet according to the Vogel model and then converted them to rectangular (x,y) coordinates. A little more math translates the points “off origin” into the center of the PCB space and scale them out to keep the first two 5 mm LEDs from overlapping. Finally, the LED coordinates were pasted into the KiCad PCB design file. An RP2040 microcontroller controls the show, and a switch on the badge selects power between USB and three AA batteries and a DC/DC boost converter. The PCB also features two capacitive touch pads. [HackerBox] has published the KiCad files for the badge, and the CircuitPython firmware is shared with the project. If C/C++ is more your preference, the RP2040 MCU can also be programmed using the Arduino IDE. For more details on beautiful RGB lights, we’ve previously presented Everything You Might Have Missed About Addressable LEDs, and for more details on why they can be so fun to wear, check out our Hackaday Badgelife Documentary. (Editor’s note: HackerBox makes and sells kits, is run by Hackaday Contributor [Joseph Long] IRL.) Source: MATH YOU CAN WEAR: FIBONACCI SPIRAL LED BADGE ### STLINK-V3MODS EMBEDDED DEBUGGER AND PROGRAMMER STMicroelectronics’ small size debugging and programming probe is designed for STM32 microcontrollers STMicroelectronics’ STLINK-V3MODS is a small size debugging and programming probe for STM32 microcontrollers. The JTAG/SWD interfaces are used to communicate with any STM32 microcontroller located on an application board. The STLINK-V3MODS also provides a Virtual COM port interface enabling the host PC to communicate with the target microcontroller through one UART, and bridge interfaces (SPI, I²C, CAN, GPIOs) simplifying, for instance, the field programming through the bootloader. The STLINK-V3MODS is ready to be embedded in any application and can be directly soldered on the PCB motherboard. Features Modular probe with small size: approximately 15 mm x 30 mmDirect-to-PCB implementation by 2 x 16-pin 1.27 mm edge castellated vias, with all signals available in required minimum PCB surfaceSelf-powered through a USB connector (MicroB)USB 2.0 high-speed compatible interfaceDirect firmware update (DFU) supportJTAG / serial wire debugging (SWD) specific features:3 V to 3.6 V application voltage support and 5 V tolerant inputsJTAG communication supportSWD and serial wire viewer (SWV) communication supportVirtual COM port (VCP) specific features:3 V to 3.6 V application voltage support on the UART interface and 5 V tolerant inputsVCP frequency up to 15 MHz Read more: STLINK-V3MODS EMBEDDED DEBUGGER AND PROGRAMMER ### RA4W1 – 48MHZ BLUETOOTH® 5.0 LOW ENERGY SINGLE CHIP MCU FROM RA4 SERIES The Renesas RA4W1 is the first Bluetooth 5.0 Low Energy fully compliant with 2Mbit High-Throughput (HT) and Long Range (LR) support in a single chip MCU of Renesas RA4 product series for IoT applications that require a high-performance Arm® Cortex®-M4 core at a very attractive price point. The RA4W1 is built on a highly efficient low power process and is supported by an open and flexible ecosystem concept, called Flexible Software Package (FSP), using FreeRTOS as base. RA4W1 is geared towards IoT application requiring Security, large embedded RAM and low power consumption. Key Features 48MHz Arm® Cortex®-M4512kB Flash Memory and 96kB SRAM8kB DataFlash to store data as in EEPROM7x7mm QFN 56 pin package.Capacitive Touch Sensing UnitSegment LCD ControllerUSBFS 2.0 Full Speed (Host/Device) CAN 2.0BSCI (UART, Simple SPI, Simple I2C)SPI/ I2C Multimaster Interface2.4 GHz radio with Bluetooth 5.0 Low EnergyAdvertising Extension and Long Range supportSecure Crypto Engine (AES128 / 256, GHASH, TRNG) Benefits Full functionality of Bluetooth 5.0 Low Energy along with the high-performance processing and superior power efficiency.High Throughput and Long Range supportIntegrated Secure Crypto Engine with several cryptography accelerators and Key management.Large 96kB embedded SRAM suitable for handling communication stacks. Applications Security (Fire Detection, Burglar Detection, Panel control)Metering (Electricity, Automated Meter Reading)Industry (Robotics, Door Openers, Sewing Machines, Vending machines, UPS)Health and Wearables Body Sensors Read more: RA4W1 – 48MHZ BLUETOOTH® 5.0 LOW ENERGY SINGLE CHIP MCU FROM RA4 SERIES ### A SIMPLE MINIATURE DIGITAL STORAGE OSCILLOSCOPE POWERED BY AN STC MCU For makers and electronics engineers, the oscilloscope is one of the most important tools in the lab. It is a test instrument for visualizing and observing various signals usually as a two-dimensional plot of signals against time. Apart from being used to view and compare waveforms in the design and debugging of electronic systems, the oscilloscope is also very useful in determine voltage levels, frequencies, and other signal parameters as they change with time. However, most of the oscilloscopes available today are quite expensive, be it small or advanced. In a bid to make things easier, several projects are beginning to show up on how someone, with the right tools, can create cheap and compact oscilloscope that will do the job for hobby tasks. One of such is CreativeLau’s build that puts a tiny Digital Storage Oscilloscope within your reach. Following an earlier release on how to make an STC-powered function generator on his YouTube channel, maker Creative Lau has published another DIY guide, this time on how to easily build a simple miniature digital storage oscilloscope with a DIP-packaged STC8A8K64S4A12 microcontroller unit for basic engineering needs. “This is a simple oscilloscope made with STC MCU. You can use this Mini DSO to observe waveforms with a time interval of 100us – 500ms, the voltage range of 0-30V, and a draw mode of vector or dots” says Lau as he writes about his project.” Lau’s build goes hand in hand with the STC-powered function generator. It is simple, cheap, and easy to assemble. The only limit is that it is still unable to read voltages lower than zero; it’s readings automatically stop at zero no matter how low the voltage goes. Read more: A SIMPLE MINIATURE DIGITAL STORAGE OSCILLOSCOPE POWERED BY AN STC MCU ### NVIDIA® JETSON XAVIER™ NX DEVELOPER KIT The NVIDIA® Jetson Xavier™ NX Developer Kit brings supercomputer performance to the edge. It includes a power-efficient, compact Jetson Xavier NX module for AI edge devices. It benefits from new cloud-native support and accelerates the NVIDIA software stack in as little as 10 W with more than 10X the performance of its widely adopted predecessor, Jetson TX2. The capability to develop and test power-efficient, small form-factor solutions with accurate, multi-modal AI inference opens the door for new breakthrough products. Developers can now take advantage of cloud-native support, transforming the experience of developing and deploying AI software to edge devices. Pre-trained AI models from NVIDIA NGC, together with the NVIDIA Transfer Learning Toolkit, give a faster path to trained and optimized AI networks. Containerized deployment to Jetson devices also allows flexible and seamless updates. The developer kit is supported by the entire NVIDIA software stack, including accelerated SDKs and the latest NVIDIA tools for application development and optimization. When combined with the compact Jetson Xavier NX, this powerful stack helps you create innovative solutions for smart cities, retail, manufacturing, logistics, healthcare, agriculture, and more. Designed for ease of use and speed of deployment, Jetson is the most flexible platform to get to market and continuously update over the lifetime of a product. Features Compact size Jetson Xavier NX module powerful enough for advanced AI applications with low power consumptionSupports Entire NVIDIA Software Stack for application development and optimization Read more: NVIDIA® JETSON XAVIER™ NX DEVELOPER KIT ### DIY SILICON PHOTODIODE PARTICLE DETECTOR DIRECTLY FROM CERN Silicon detectors are widely used in particle and nuclear physics for measuring ionizing radiation. This Do-It-Yourself project allows making a low-cost particle detector from scratch using silicon photodiodes. It can distinguish different particle types (alpha particles and electrons) and measures their energy between 33 keV and 8 MeV. The detector must be shielded from light and is, therefore, best mounted inside your favorite candy tin box. The signal output can be directly connected with microphone or headset inputs of regular laptops and smartphones. The DIY particle detector is open source science hardware, released under the CERN open hardware license. Construction details and software for undertaking measurements can be found on the corresponding project website. The circuit board and electronic parts (~20 EUR) can be easily procured via kitspace, an open hardware design repository. Measurement of an old ceramic pendant For the measurement shown below, an old ceramic pendant from the Majolika ceramics manufacture in Karlsruhe, Germany, was put right below the silicon detector. The energy spectrum shows a lot of electrons from beta decays as well as two characteristic alpha energy lines in the 3 to 4 MeV range.By comparing this measurement with the energy spectrum from a small uranium stone (c.f. article, figure 9), it can be concluded that several higher energy alpha lines are missing. In particular, the two peaks of polonium isotopes on the very right are not present. This can be explained by the fact, that uranium-based ceramic paint, so-called uranium glaze, was typically produced from chemically purified uranium.  Read more: DIY SILICON PHOTODIODE PARTICLE DETECTOR DIRECTLY FROM CERN ### LATEST OLIMEX BOARD BRINGS 10-CHANNEL 32-BIT TO OSHW BUILDS If your project demands some high precision analog measurements, then here is a new Olimex BB-ADS1262 that can help get the job done easily; with up to 10 channels of 32-bit ADC conversion, the new BB-AD S1262 breakout board is considered a great add-on for microcontrollers. Before, system designers who needed a high-resolution analog-to-digital-converter have to sacrifice certain desired specifications like low noise, low offset drift, and several other integrated features. Things have however become easier as there are now ADCs that have helped to eliminate these trade-offs by providing a high resolution alongside fault-detection features, faster data rates, and wider temperature range, thereby maximizing performance. The new BB-ADS1262 from Olimex is built around the Texas Instrument ADS1262 ADC chip and offers up to 10 Channel low-noise low-drive 32-bit ADC on an Open-source hardware breakout board. “The BB-ADS1262 is a breakout board for the ADS1262 low-noise, low-drift 38.4 KSPS, delta-sigma ADCs with an integrated PGA (Programmable Gain Amplifier), reference, and internal faults monitors. Possible applications are sensor reading, small signals (ECG / EEG), weight scales, strain gauge sensors, thermocouples, and resistance temperature devices (RTDs).” says the Bulgarian open source specialist as he launches his new design. The 10 channel sigma-delta precise 32 bit ADC breakout board is fully open source according to the Open Source Hardware definition and licensed under the CERN – Open Hardware Licence Version 2.0; software is released under the GPL3 Licensee (including an Arduino demo code) while the documentation is under a CC BY SA 3.0. Designed for high accuracy and stability, the BB-ADS1262 breakout board has some key features worth taking note of, including; Up to 32-bit ADC conversion precisionData rates of 2.5 samples per second to up to 38,400 samples per secondAn offset drift of 1 nV / 0C and a gain drift of 0.5 ppm / 0CCMOS programmable gain amplifier plus Differential Input Read more:LATEST OLIMEX BOARD BRINGS 10-CHANNEL 32-BIT TO OSHW BUILDS ### SINGLE-ATOM TRANSISTOR ‘RECIPE’ SIMPLIFIES ATOMIC-SCALE FABRICATION Researchers at the National Institute of Standards and Technology (NIST) and the University of Maryland say they have developed a step-by-step recipe to produce single-atom transistors. by Rich Pell @ smart2zero.com Transistors consisting of only several-atom clusters or even single atoms, say the researchers, promise to become the building blocks of a new generation of computers with unparalleled memory and processing power, but are notoriously difficult to fabricate in quantity. Now, using the new instructions, the researchers have become only the second in the world to construct a single-atom transistor and the first to consistently fabricate a series of single electron transistors with atom-scale control over the devices’ geometry. The scientists demonstrated that they could precisely adjust the rate at which individual electrons flow through a physical gap or electrical barrier in their transistor. That strictly quantum phenomenon – known as quantum tunneling – only becomes important when gaps are extremely tiny, such as in the miniature transistors. Precise control over quantum tunneling is key, say the researchers, because it enables the transistors to become “entangled” or interlinked in a way only possible through quantum mechanics and opens new possibilities for creating quantum bits (qubits) that could be used in quantum computing. To fabricate single-atom and few-atom transistors, the researchers relied on a known technique in which a silicon chip is covered with a layer of hydrogen atoms, which readily bind to silicon. The fine tip of a scanning tunneling microscope then removed hydrogen atoms at selected sites. The remaining hydrogen acted as a barrier so that when the researchers directed phosphine gas (PH3) at the silicon surface, individual PH3 molecules attached only to the locations where the hydrogen had been removed (see video). Read more: SINGLE-ATOM TRANSISTOR ‘RECIPE’ SIMPLIFIES ATOMIC-SCALE FABRICATION ### ULTRA-COMPACT NEW AMPLICON DINRAIL PC DINrail-mountable Impact-P series are ultra-compact 4.7” x 2.2” x 3.8” Intel® ATOM™-based embedded PCs: low-current, 9-36V operation, fanless design, customizable, with long life cycle. Saelig Company, Inc. (www.saelig.com) announces what is probably the smallest industrial embedded PC in the marketplace, the Amplicon Impact-P Series. These rugged PCs feature the Intel® Apollo Lake ATOM™ E3900 generation processors, supported by high bandwidth DDR3L 1600MHz memory, in an ultra-compact (4.7” x 2.2” x 3.8”) housing that is milled out of solid aluminum.  This makes these units ideal for applications in harsh conditions where space and power is at a premium. The tiny Impact-P is a fanless, DINrail-mountable, low power embedded system, which has been designed to provide convenience and versatility, with a unique set of features that are unusual in an industrial PC of miniature size. Standard Specs Include: Intel Atom® x5-E3930 Dual Core Processor with 2M cache, 1.3GHz (1.8GHz), 6.5W 2GB DDR3L (max 8GB) LAN: 1 x Intel® 10/100/1000 network connection (supports PXE and WoL) 2 x 10/100/1000  POE+ LAN (IEEE 802.3at, up to 25.5W) with  64GB SSD storage.Expansion: 1 x Full-size Mini PCIe (PCIe/USB 2.0) 1 x M.2 B key 2242. (PCIe/USB 2.0/SATA 3.0)External Interfaces:  1 x DP++ 2 x USB 3.0 1 x RS232/422/485 1 x Intel® GbE RJ45 (I211AT) 2 x Isolated POE+ LAN (max 25.5W per port) The Impact-P’s specified operating temperature range is from -20degC to 70degC, with wide temperature RAM and SSD in the design.  The system can be fully customized, with selections that include +9 to 36VDC or POE powered, Dual POE+, multiple I/O configurations, custom branding, chassis color, etc. OS support includes Linux, Windows 10, and Windows 10 IoT. Read more: ULTRA-COMPACT NEW AMPLICON DINRAIL PC ### BATTERY BOT MAKES SURE CORDLESS TOOL PACKS ARE ALWAYS TOPPED UP There was a time not that long ago when every tool was cordless. But now, cordless power tools have proliferated to the point where the mere thought of using a plain old wrist-twisting screwdriver is enough to trigger a bout of sympathetic repetitive injury. And the only thing worse than that is to discover that the batteries for your tools are all dead. As [Lance] from the “Sparks and Code” channel freely admits, the fact that his impressive collection of batteries is always dead is entirely his fault, and that’s what inspired his automatic battery charging robot. The design is pretty clever; depleted batteries go into a hopper, under which is a 3D-printed sled. Batteries drop down into the sled, which runs the battery out from under the hopper to the charging station, which is just the guts of an old manual charger attached to a lead screw to adjust the height of the charging terminals for different size batteries. When the battery is charged, the sled pushes it a little further into an outfeed hopper before going back to get another battery from the infeed side. Of course, that all vastly understates the amount of work [Lance] had to put into this. He suffered through a lot of “integration hell” problems, like getting the charger properly connected to the Arduino running the automation. But with a lot of tweaking, he can now just dump in a bunch of depleted packs and let the battery bot handle everything. The video after the break shows all the gory details. Of course, there’s another completely different and much simpler solution to the dead battery problem. Source: BATTERY BOT MAKES SURE CORDLESS TOOL PACKS ARE ALWAYS TOPPED UP ### PILL DISPENSER TO KEEP YOU ON TRACK When forgetting to take medication on time can lead to a bad day or night, having a helper to keep you on track can greatly improve your life. [M. Bindhammer] faces this scenario every day, so he built his own robotic pill dispenser. The core of the project is a 3D printed dispensing drum with individual pockets for morning and evening medication. It is mounted directly to a 360° winch servo, normally used for RC sailboats, while a second conventional servo opens a small sliding door to drop the pills onto the dispensing tray. The tray integrates a sensitive touch sensor which can detect when [M] picks up the pills, without being triggered by the pills themselves. [M. Bindhammer] also included a small but loud speaker, connected to a speech synthesis module for audio reminders. The main controller is a Arduino Due with a custom breakout shield that also integrates a DS3231 real time clock. All the electronics are enclosed in a 80’s style humanoid robot-shaped body, with dispensing drum on its chest, and an OLED screen as it’s face. The end result is a very polished build, which should make [M. Bindhammer]’s life with bipolar disorder a little bit easier, and he hopes it might help others as well. For more medication related gadgets, take a peek at another pill dispenser and a 3D printed dosing spoon to replace an essential but discontinued commercial version. Source: PILL DISPENSER TO KEEP YOU ON TRACK ### IOT RAPID PROTOTYPING: 10MN FROM SENSOR TO DASHBOARD Seluxit has released IoT rapid prototyping kits based on it’s single-board computer, SLXPorcupine. If you have a smartphone, an internet connection and Seluxit’s IoT rapid-prototyping solution, then 10 minutes is all you need to create IoT prototypes that feel at home even in industrial settings. By julien happich @ eenewseurope.com Claiming your device is as seamless as scanning a QR code, and adding plug-and-play sensors can now be done by using a wizard and hitting a “deploy” button. SLX Porcupine is an industrial-grade, single-board computer with a Raspberry Pi compatible form factor,running Linux. That makes it possible to use hats and open-source code from the Raspberry Picommunity. SLX Porcupine automatically connects to Viasens by Seluxit; a cloud-based, secure IoT Infrastructure. Viasens has secure connectivity, over-the-air firmware update, and a configurable dashboard where you can see and analyse your data. Viasens also features data logging and extraction, reference code for your own iOS and Android native applications, as well as web interfaces. The SBC features a 4GB on-board flash and 512 MB RAM. It also has 3 additional 20-pin headers, featuring functionalities such as Modbus, CAN bus and up to 8 channels of 12 bit ADCs. It can handle the temperature range often required in an industrial setting, from -40 to +85°C. Secure boot effectively prevents tampering on the device. Read more: IOT RAPID PROTOTYPING: 10MN FROM SENSOR TO DASHBOARD ### OSD32MP1-BRK – A FLEXIBLE PROTOTYPING PLATFORM The OSD32MP1-BRK is a small flexible prototyping platform for the STM32MP1 based SiP, the OSD32MP15x.  At only 3in X 1.8in (75mm X 46mm), it provides easy access to the I/O of the STM32MP1 through a set of breadboard compatible headers.  The OSD32MP1-BRK allows developers to quickly build a proof of concept that more closely resembles their actual system without the need to build their own custom hardware. The OSD32MP1-BRK features the OSD32MP15x System in Package, a microSD slot, 32KHz crystal, a microUSB client port, and two 2×30 100 mill headers.  The headers give access to 106 I/O on the STM32MP1 integrated into the OSD32MP15x SiP.  It is uses a 4 Layer PCB with low cost design rules and has no back side components. Its minimal overhead and access to a wide range of I/O make the OSD32MP1-BRK the perfect platform for any designer looking for complete flexibility as they prototype their design. The OSD32MP1-BRK is designed and manufactured by Allied Component Works, LLC, a member of the Octavo Systems partner network. OSD32MP1-BRK Features Small Form FactorOnly 3in X 1.8in (75mm X 46mm)Access to 106 I/Otwo 2×30 100mil (2.54mm) HeadersMaximum flexibility to prototype designsBreadboard Compatible OSD32MP157C-512M-BAASTM32MP157C Dual Arm® Cortex® A7 + M4512MB DDR3 MemorySTPMIC1A Power ManagementEEPROMOscillatorPassivesµUSBSTLinkUARTµSD Card32KHz Crystal4 Layer DesignNo Back Side Components Read more: OSD32MP1-BRK – A FLEXIBLE PROTOTYPING PLATFORM ### PISKEY ATTO IS A TINY ARDUINO COMPATIBLE BOARD WITH USB Designed with makers in mind, this cost-effective Piskey Atto handles most of the issues developers face with some of the available development boards. We recently started creating DIY projects on our YouTube channel and we ran into a similar issue, time and again. Most of the sensors and modules that we commonly use are already very small in size but the Arduino compatible boards used to drive them were not so much. There are some development boards that are small in size but they all seem to have one issue or the other – either they do not have enough I/O pins, are not powerful enough, or lack native USB support which limits the overall capabilities. We designed Piksey Atto to take care of these issues while also making it cheap enough to leave in projects. says BitsNBlogs Electronics, as they tell the story behind the Piskey Atto. Smaller than a dollar coin, the Atto has everything you need for your projects: a built-in USB support that allows interaction with PCs, breadboard compatibility, and castellated holes that make it easier to be used with protoboard or soldered to your own baseboard. The Atto has some impressive specs which include: Microcontroller Unit: ATmega32U4 microcontroller running at 16 MHz, 2.5KB SRAM, 32 KB Flash memory and 1KB EEPROM11 digital I/O pins,4x analog inputs, 4x PWMBuilt-in micro USB port for programming and power @ 5VCommunication: USART/SPI/12CPower supply: 5VWeight: 1.3 gramsDimension: 12.70mm x 20.32 mm (0.5” x 0.8”)Works out of the box with Arduino IDE 1.0+ (Win/OSX/Linux) The Atto uses the same Atmega32U4 microcontroller chip found in the Arduino Leonardo and Arduino Micro so there is no need to install any board support packages as the board is compatible with all existing sketches and can work out of the box. Read more: PISKEY ATTO IS A TINY ARDUINO COMPATIBLE BOARD WITH USB ### NEW TQ PLATFORM BASED ON LAYERSCAPE DUAL CORTEX-A72 TECHNOLOGY The technology company TQ is expanding its product portfolio with a new platform based on the 64-bit Cortex®-A72 QorIQ® Layerscape® processor family LS1028A from NXP. The MBLS1028A-IND is particularly suitable for robust and industrial applications in the field of high-speed data communication and offers TSN support in combination with powerful graphics. The core of the platform, which is available both as a mainboard and as a complete device, is the TQMLS1028A module. For the TQMLS1028A, TQ relies on the NXP processor family Arm® Layerscape LS1028A. Based on this CPU, four different pin-compatible CPU variants are available depending on the required functionality. Alternatively to the two single-core variants (LS1017A and LS1018A), the dual-core variants (LS1027A and LS1028A) are available. The CPUs LS1017A and LS1027A have deactivated graphic functions. The integrated graphics of the LS1018A and LS1028A support displays up to 4K resolution with a powerful GPU. Combined with a clock rate of up to 1.3 GHz, the TQMLS1028A provides a comprehensive and scalable platform with low power dissipation. Four Gigabit Ethernet interfaces are available on the mainboard with compact dimensions of 160 x 100 mm for fast data communication, which are implemented via a TSN-capable Ethernet switch. Additionally, users can rely on two independent interfaces for Gigabit Ethernet. In addition to the Ethernet interfaces, the user has an M.2 SATA for connecting an SSD and a Mini PCIe slot with SIM card for expansion for wireless solutions such as LoRaWan, Sigfox, WiFi and mobile communication. In addition, two USB 3.0 interfaces and two galvanically isolated CAN interfaces are available. The embedded DisplayPort allows the connection of a monitor for a screen resolution of up to 4K. Read more: NEW TQ PLATFORM BASED ON LAYERSCAPE DUAL CORTEX-A72 TECHNOLOGY ### TQ-EMBEDDED PRESENTS NEW HIGH-SPEED MODULE WITH NXP’S LX2160A The technology company TQ presents the new embedded module TQMLX2160A based on the LX2160A CPU from NXP. The 64-bit QorIQ® Layerscape® processor family is particularly suitable for high-speed data communication. The first prototypes will be available from mid-June. The TQMLX2160A relies on the NXP processor family Arm® Layerscape LX2160A. Depending on the required functionality, there is a choice of three CPU variants with either 8, 12 or 16 Cortex-A72. The pin-compatible CPUs (LX2160AA, LX2120 and LX2080A) with a clock rate of up to 2.2 GHz differ only in the number of cores. For fast data communication, the compact dimensions of 126 x 78 mm integrate two interfaces for up to 100 Gigabit Ethernet. All 560 signal pins are available. In addition to 24x SerDes lanes with up to 25 GHz, which can be used as Ethernet, SATA and PCIe, the module has the following additional interfaces: up to 2x Gigabit Ethernet, 2x USB 3.0 2x CAN FD, up to 6x I²C, and 3x SPI. The design is equipped with a DDR4 SDRAM memory with up to 64 GB with ECC support and up to 64 GB eMMC. The soldered RAM memory withstands even harsh environmental conditions. In addition, a QSPI NOR flash with up to 512 MB is used. On the corresponding mainboard, users can use two 10 Gigabit Ethernet interfaces as well as one 100 Gigabit interface in addition to up to ten Gigabit interfaces. USB 3.0, CAN FD, SATA and PCIe interfaces are also available. Read more: TQ-EMBEDDED PRESENTS NEW HIGH-SPEED MODULE WITH NXP’S LX2160A ### E-CON SYSTEMS LAUNCHES 2MP MONOCHROME GLOBAL SHUTTER USB CAMERA e-con Systems’ new See3CAM_20CUG, 2MP, 3.0 µm global shutter USB 3.1 Gen 1 SuperSpeed Camera with NIR sensitivity. e-con Systems Inc., a leading embedded camera solution company, today announced the launch of See3CAM_20CUG, 2 MP Monochrome global shutter USB 3.1 Gen1 superspeed Camera. It is based on OmniVision’s OV2311 image sensor with 3 µm x 3 µm pixel with OmniPixel®3-GS technology. It has S-mount (M12) lens holder which allows customers to choose and use the lens according to their requirement. It is a Plug-and-Play camera (UVC compliant) for Windows and Linux. See3CAM_20CUG can capture images at very high frame rate (HFR) 2MP at 60fps, VGA at 180fps and QVGA at 280fps, which helps to minimize the distracting effects while capturing fast moving objects and produce much smoother images, with greater details in a scene. The High Near-Infrared Capabilities helps to produce exceptional image quality beyond visible light region. Both high frame rate and high NIR make it suitable for accurate eye tracking applications and smartly powering driver monitoring systems. Our See3CAM_20CUG camera brings out the advantages of global shutter high frame-rate image capture, excellent NIR sensitivity and ease-of-use USB UVC in a single package. This 2MP See3CAM_20CUG camera module will be an ideal camera for applications such as DMS, eye tracking and other tracking applications where NIR imaging and global shutter performance are the important drivers” said Mr. Ashok Babu, President of econ Systems Inc. Sample Application e-con Systems provides sample Windows applications, e-CAMView, and Linux application, QtCAM that uses the standard UVC protocol to access the camera controls. The e-CAMView, a DirectShow based image viewer application from e-con Systems enables controls such as Gain, Exposure, Saturation, Brightness, Contrast, and various other controls. QtCAM – Open source Linux camera software application enables capturing and viewing video from devices supported by Linux UVC driver and also works with any V4L2 compatible device Read more: E-CON SYSTEMS LAUNCHES 2MP MONOCHROME GLOBAL SHUTTER USB CAMERA ### Wiring Harness for the LCD Panel Assembly of the Female Connector Block The wiring harness has a male and female end. The gender of electrical and mechanical parts is described on this Wikipedia page. The header pins that are soldered into the circuit board for the LCD panel are plugged into the female end of the wiring harness. This web page describes how to fabricate the female end of the wiring harness. The entire assembly and test process is divided into the following steps. Soldering header pins to the LCD Panel Constructing the female connector block (This document) Fabricating the male connectors and finishing the harness Using the panel with an Arduino Return to the main page for the LCD panel assembly   Wire harness components Each team of two students will pick up a set of components shown in the following photograph. The number of crimp pins will be greater than the four in the photograph. The cable bundle has nine stranded wires, each with a different color of insulation. The wires are 22 AWG and approximately 40 cm (16 inches) long. The bundle is held together with a loosely cinched zip tie. Do not tighten the zip tie until the wiring harness is finished. You may need to adjust the wires so that the ends line up. Furthermore, tightening the zip tie before you finish will make the bundle stiffer, which will make it harder to adjust the orientation of individual wires as they are crimped. When the wire harness is finished, one end of the cable bundle will only have female crimp connectors, and the other end will only have male crimp connectors. Pay attention so that you do not mix the genders on the ends of the wires as you add crimp connectors. Of course, there is no initial difference between the end of the wires. The connector block has sixteen sockets for either male or female crimp connectors. We will only use twelve of the sixteen sockets. Only female crimp connectors will be used in the connector block, so we will refer to this as the female connector block. The small metal parts are the crimp connectors that are attached to the ends of the wire with the crimping tool. The following photo is a close-up view of the female and male crimp connectors. Each crimp connector has two sets of tabs: one for connecting to the stranded conductor in the wire, and another for grabbing the insulation as a strain relief. A small metal barb on one side of the connector locks the crimp connector to the connector block when the crimp connector is inserted into the block. Green and red jumper wire The green jumper wire is used to electrically connect three ground pins on the female end of the connector. The red jumper wire is used to connect two +5V power pins on the female end of the connector. Gently fold (do not bend) the green jump wire so that it forms a "U" shape, and cut the green wire in half. The following sketch shows how the red and green jumper wires are connected to the red and green wires in the cable bundle. The long, horizontal red and green wires are the 40 cm wires from the cable bundle. The red jumper cable connects two pins in the female connector block. The two green jumper cables connect three pins in the female connector block. Strip one end of the short red wire Make your first crimp with the short red jumper wire. This will allow you to practice with a length of wire that is easy to hold. If something goes wrong, you can cut the end and start again. Using the crimp connector as a reference, strip one end of the red jumper wire. The bare wire should be a little longer than the tabs closest to the curled end of the crimp connector. Compared to other applications, such as joining two wires, or attaching a wire to a screw terminal, this is a very short length of bare wire. Get ready to crimp The crimping operation will take two squeezes of the crimp tool handles. The first squeeze crimps one pair of tabs onto the bare electrical wire and starts the crimp on the strain relief tabs. The second squeeze secures the strain relief tabs. For these two squeezes, the tabs being crimped are in the black side of the crimp tool. The crimp connectors and wires are small. Holding everything in place takes a steady hand and some patience. It is easy to become frustrated. However, with a little practice, it becomes easier to make the crimp connections. Once you develop your technique, it is possible to make a crimp connection in 15 to 20 seconds, start-to-finish. Locate the pieces in the crimp tool Orient the crimp tool so that you are looking at it from the un-labeled side (no AWG indicator marks showing). The crimp tab surrounding the bare end of the wire should be above the black side of the jaws. The crimp tab surrounding the insulated end of the wire should be above the gray side of the jaws. Crimp the electrical connection Carefully close the jaws of the crimp tool by squeezing the handles. Monitor the orientation of the crimp connector and the alignment of the bare wire to the crimp tab. It is very easy for the wire and crimp tabs become misaligned. After the first crimp, release the handles of the tool and slide the wire and crimp connector so that the tabs for the strain relief are aligned with the black side of the crimping tool jaw. Squeeze the handle to crimp the strain relief. The finished crimp connection should look something like the following photo Set aside the red jumper wire with the newly crimped connector. Prepare the green jumper wire The next step is to join two wires with a single crimp connector. This is needed to connect the short jumpers to each other, and to the longer wires in the bundle. Strip one end of each of the two short green jumper wires. This strip should expose a longer section of bare wire — longer than the stripped section for the red jumper wire. As shown in the following sequence of photographs, the bare wire should be long enough to completely fill the space between both pairs of tabs on the crimp connector.   For more detail: Wiring Harness for the LCD Panel ### TQ PRODUCT LAUNCH OF CPU MODULES BASED ON NXP’S I.MX 8X ARM® CORTEX®-A35 With the official launch of the i.MX8 X Arm® Cortex®-A35 CPUs from NXP on May 14, 2020, the technology company TQ is bringing two modules based on the new core architecture into the market. As an NXP Early Access Partner for the i.MX8 X, TQ has already introduced the TQMa8Xx and TQMa8XxS modules, now they are available for customers. This product family offers three pin-compatible CPU variants with different graphics performance (multi-display) and number of cores. The CPU-integrated Cortex-M4 processor supports the required real-time functions. The NXP CPUs combine numerous functions with an attractive energy balance for a future-oriented module design. The new TQMa8Xx and TQMa8XxS modules are cores for applications in a wide range of areas: from medical devices, HMIs, industrial controllers and industrial Internet of Things (IIoT) to gateways, building automation, transport and robotics. With its size of only 55 x 44 mm, the TQMa8Xx allows users to access all interfaces directly on the module. The module is equipped with a DDR3L memory including ECC support. With the implemented ECC function, the module allows for certification for safety-relevant applications. In addition, a pin-compatible variant supports LPDDR4-SDRAM. The second module, the TQMa8XxS, complies with both the SMARC 2.0 as well as the SMARC 2.1 standard and measures 82 x 50 mm. Both modules are equipped with eMMC flash memory up to 64 GB and optionally with QSPI NOR flash with up to 256 MB. Read more: TQ PRODUCT LAUNCH OF CPU MODULES BASED ON NXP’S I.MX 8X ARM® CORTEX®-A35 ### Android Accessories Made Easy With Arduino The Android Open Accessory Protocol makes it possible for you to create custom Arduino-based accessories for your Android phone or tablet. Attend this session to learn how to get started, the hardware & software required and how Handbag makes development easier. Content will be useful whether you have previous Android or Arduino experience or neither.   ### Arduino TinyScreen TinyScreen is a tiny customizable display. Play games, get notifications from your phone and display useful information. TinyScreen is the new way to visualize your environment. With a beautiful color OLED display, TinyScreen is designed to be used to display information from the TinyDuino platform, which stack together like little electronic Lego's. With TinyScreen there are several default apps that will work right out of the box - like a Smart Watch app, a Video player app and a video game app.  You can use these default apps with NO PROGRAMMING AT ALL! SMART WATCH Create your own smart watch using TinyScreen.  The watch can be configured to use several different watch faces, and can use Bluetooth 4 (also known as Bluetooth Low Energy and Bluetooth Smart) to communicate with your smart phone (Android 4.3+ and iOS 7+). We have an open source app developed for both iPhone and Android that will allow you to configure the notifications that you can receive and display on the watch, like incoming phone calls, incoming texts, tweets and appointments. 3D printed enclosures are also available for the watch body that you can download and print yourself, and we'll also have different enclosures that you can purchase. PLAY GAMES Play games on your TinyScreen, either with the four buttons along the side of the screen, or with the new Joystick TinyShield.  This supports two analog joysticks.  Currently we have a Flappy Bird clone and asteroids, with many more games to come.  Plus with the open source software library, other Kickstarter backers can create games and share them on our website. WATCH VIDEOS Watch videos on your TinyScreen which can stream from an attached microSD card.  The videos can be any length, and a simple menu system that uses the TinyScreen buttons lets you navigate and select the video from the SD card. The video format is similar to an animated GIF and computer software is available to convert standard videos into this format.   For more detail: Arduino TinyScreen ### Bonus Tutorial: Arduino to vvvv, a Paper Touch Interface The hardware is easy and the code isn't hard, so let's start!! We are going to use an Arduino, draw (!!) our own interface on a piece of paper, and than we are going to use it to control a simple slide show inside vvvv. In this, rather long tutorial, I will be showing you how to receive Arduino messages inside vvvv, and use those to make a basic picture rotator. We will create a capacitive sensor for Arduino, using a pencil and a piece of paper. Once that is done we will modify the Arduino code so we can use the Serial communication (RS232) inside vvvv to receive the messages and convert them to a simple interface to control a basic picture rotating slide show. On the vvvv website, under the video tutorials, you can download a package that contains all the patches, code and circuits you will need to reproduce this project. ### SINGLE-ENDED, 2-CHANNEL GAN CLASS D AMPLIFIER – EVALUATION BOARD The EVAL_AUDAMP24 e-mode GaN HEMT-based evaluation board from Infineon Technologies is a 2-channel, 225W/ch (4Ω at ±43V) or 250 W/ch (8Ω at ±63V) half-bridge class D audio power amplifier for high-end Hi-Fi audio systems. This evaluation board demonstrates how to use the IGT40R070D1 E8220 CoolGaN™ gallium nitride transistor together with the MERUS™ IRS20957SPBF controller IC, implement protection circuits, and design an optimum PCB layout. Potential applications include Hi-Fi amplifiers, AV receivers, Home theater systems, Powered speakers, Musical instrument amplifiers, and other premium audio designs. The reference design provides all the required housekeeping power supplies for ease of use. The 2-channel design is scalable for power and the number of channels. The EVAL_AUDAMP24 features a two-channels self-oscillating type pwm modulator for the lowest component count, highest performance and robust design. This topology represents an analog version of a second-order sigma-delta modulation, having a class D switching stage inside the loop. The benefit of the sigma-delta modulation, in comparison to the carrier-signal based modulation, is that all the error in the audible frequency range is shifted to the inaudible upper-frequency range by nature of its operation. Also, sigma-delta modulation enables the designer to apply sufficient error correction. Read more: SINGLE-ENDED, 2-CHANNEL GAN CLASS D AMPLIFIER – EVALUATION BOARD ### NEW DC/DC CONVERTERS OFFER 50 PERCENT SMALLER FOOTPRINT Murata unveiled the MYWGC series from the MonoBK™ DC/DC converter family. The new point-of-load (POL) modules offer a 50-percent smaller footprint than competing solutions and set new standards in size, efficiency and performance. The highly integrated, multi-output DC/DC converters leverage Murata’s core technology advantages in power module development, advanced 3D integrated packaging and passive component expertise. The MonoBK™ MYWGC series are 4-channel DC/DC converters that integrate all passive components, including inductors, into a tiny form factor of 9.3 mm × 9.0 mm × 2.9 mm (L × W × H). The products feature an input voltage range of 2.8–5.5 V and programmable outputs of 0.4–3.58 V up to 3.0 amps. Most applications will require few external components. Due to the unique packaging process, the module has an outstanding thermal performance that can support a wide temperature range of –40 to +105 °C. Based on a fixed-frequency synchronous buck converter switching topology, this high-efficiency POL module features on/off control and power-good signal out. Read more: NEW DC/DC CONVERTERS OFFER 50 PERCENT SMALLER FOOTPRINT ### Huge Arduino Animatronic LED Eyeball using arduino I'm currently in the process of making a Halloween contraption that has a few components that are worth documenting. The Huge Arduino Animatronic LED Eyeball is one of them. Background Most animatronic eyeball projects that I found were more or less life-size. They were usually ping pong balls or dolls eyes or 3-D printed. I needed something bigger. I needed it to proportionally fit into a 2-ft diameter sphere. It didn't need it to be high fidelity, though it did need to look kind of cool (otherwise the kids would think it was lame). I wanted to keep open the ideas of a cyclops or a 2-eyed monster. It needed to be animated to appeal to kids. Illumination was optional. The project itself couldn't be expensive nor overly complicated. Finally, after Halloween was over, I wanted to be able to dismantle everything and reuse the parts for future projects. Step 1: Parts Eyeball Westinghouse 4in x 8in White Clip-On Shade (8149400), $3 Ladybug felt (1.5" black dots on red background) Spray on adhesive Eyeball Backing Craftsman Universal Joint, 1/4 in. Drive, $8 270 ohm resistor, x3 5mm RGB LED, common anode, x5 4mm Coroplast, ~9" square Foam board, ~5" square, $1 Various color wire, 26 awg TE Connectivity / AMP 640456-4 TE Connectivity / AMP 36438154 10lb picture hook, x2 Hot glue Electrical tape Sensors HC-SR04 Ultrasonic sensors, x2, $3 ea Ethernet cable, ~4ft TE Connectivity / AMP 36438154, x4 TE Connectivity / AMP 6404574, x2 Electrical tape Platform Simpson Strong-Tie tie plate TP37, $3 Everbilt aluminum angle 1" x 36" x 1/16" Hex bolt 5/16" x 1" and nut, x3 Bolt 1/4" or 5/16" x 1" or 1 1/2", x2; nut, x2; washer, x4 3/8" plywood, 8" x 6" 11/32" (dia) x .014" (thick) brass tube, $3 Movement TowardPro MG996R servo and arm, x2, $9 ea Music wire .047, $1 (can use a metal coat hanger) Large zip tie Heat shrink tube, large enough to fit over zip tie and servo arm, x2 Cyanoacrylate (aka CA or Super Glue) Rainbow loom bands Microcontroller Sparkfun RedBoard (their Arduino UNO clone), $9 on Arduino Day Half-size breadboard, $4 Velcro with adhesive backing Jumper wires Power battery packs, x2 There are only a few key items which make this project successful, IMHO. The first is the Westinghouse clip-on shade. It's the perfect size and shape, lightweight, translucent, hollow, and cheap. The second is the 1/4" socket wrench universal joint in conjunction with the 11/32" brass tube. I tried a RC universal joint but it way too floppy. The socket wrench universal joint has enough friction to create a tighter movement. It also has enough degrees of freedom for this project. The brass tube provides a very snug fit over the joint's male connector. Together they make a very nice rod and joint (more like tube and joint) system. The last item is the Coroplast. It is lightweight, rigid, and easy to cut. When cut perfectly to the inner dimension of the clip-on shade, it provides a very snug fit especially when pushed into the shade a bit. It won't rotate or accidentally fall out (at least it hasn't done so yet). And it can be popped in and out of the shade without it starting to fail. I originally had tried foam board but it started to bend and loose its rigidity. Thin plywood was my other choice, but it seemed to heavy. As for the rest of the parts, use whatever works for you. Step 2: The Eyeball This is the simplest part of this project. Just cut out a circle of the ladybug fabric around a black dot. Get a large enough area for a nice red iris. Place it on the clip-on shade and shape it until you like it. Lastly, tack it down onto the clip-on shade. For a very long time, I just used double-stick tape because I wasn't committed to using the felt. I was thinking about possibly having blue or green eyes or even snake eyes. Once my daughter decided red was it, I attached it with spray on adhesive which doesn't create glue lines or hard spots in the felt. Obviously you don't have to use ladybug fabric. That's just what I had laying around. You can use whatever you want - paper, paint, fabric, etc. Step 3: The Eyeball Backing Cutting the Backing Circle With a very sharp pencil or fine tip pen trace the clip-on shade onto the Coroplast. Find the center of the circle just traced and mark it. Cut exactly on the trace line. Put the circle up against the shade. It will be too big fit inside. Now, ever so slightly, trim down the circle until it fits snugly into the shade. At some point it'll be very difficult to pop out. Use an Exacto knife to pry out the Coroplast. Trim down the circle to the point where the entire circle fits into the shade and can be pushed in a few millimeters or so. Attaching the Universal Joint Verify that the center you marked is still your center. Adjust if needed. Draw a vertical and horizontal line from the center point. Use the Coroplast ribs as one of your lines. Then make sure the other line is exactly perpendicular to it. When attaching the universal joint to the Coroplast, the goal is to line up the joint's pivoting movement with the lines just drawn. Easiest way to do this is to put the universal joint face down on the center mark of the circle and pivot the other part of the joint up and down and then left and right making sure it looks true. Don't let the orientation of the joint's connector part guide you as they don't seem to be aligned to anything. Now create a reference mark on the joint and on the circle so it's easy to know how to place it down when gluing. Use a liberal amount of hot glue on the joint and on the circle. Place the joint down on the circle matching up the reference mark. Quickly test the up, down, left, right movements to see if the alignment is true, rotating the joint if it isn't. Work fast, the hot glue dries quick! After the glue fully dries, the brass rod can be attached so that it's easy to see how the eyeball will move. Servo Push Rod Attachments These are the things that the servo rod attaches to to move the eyeball around. I just used a J-style picture hook. Carefully straighten the top portion so that it looks like an L-bracket. Trim off the excess leaving some to be glued to the Coroplast. To position them, align them on the axial lines that were previously drawn and about 1/2" from the edge. The distance from the edge was arbitrary. Do what works for you. Illumination RGB LEDs are used to light the eyeball. If they are clear lens LEDs, diffuse them. Wire them in a series since there will only ever be one color at any given time. Because each LED has 4 leads, mount them LEDs on a foam board and wire half of the leads on one side of the board and the other half on the other side of the board. This helps prevent short circuits in as small space. Create leads to the unit about 1.5 ft long. At the end of the leads attach a 4-wire connector. Then attach this connector to it. I have no idea if these connectors are meant for this purpose. They are convenient and they plug into a breadboard nicely. Finally, make a hole in the Coroplast and feed the LED wires through so that it sticks out the back. Step 4: The Sensors The ultrasonic sensors are used to detect objects on the left and right hand sides of the eyeball. Only the horizontal servo benefits from these sensors, but I thought I'd have the eye randomly look up or down when looking left or right to give it some character. Basically all that this step is about is extending the pins on the ultrasonic sensor by 1.5ft to 2ft. Using the TE connectors make it easy to put on and take off the ultrasonic from the cable. Also, the connectors makes it easy to connect the cable on and off the breadboard. Lastly, using an Ethernet cable is nice because it has the sheath already keeping everything tidy. As always, use what works for you.   For more detail: Huge Arduino Animatronic LED Eyeball using arduino ### Brain-Computer Interface Introduction Our goal was to build a brain-computer interface using an AVR microcontroller. We decided that the least invasive way of measuring brain waves would be using electroencephalography (EEG) to record microvolt-range potential differences across locations on the user's scalp. In order to accomplish this, we constructed a two-stage amplification and filtering circuit. Moreover, we used the built-in ADC functionality of the microcontroller to digitize the signal. Passive silver-plated electrodes soaked in a saline solution are placed on the user's head and connected to the amplifier board. The opto-isolated UART sends the ADC digital values over USB to a PC connected to the microcontroller. The PC runs software written in MATLAB and C to perform FFT and run machine learning algorithms (SVM) on the resultant signal. From there, we were able to control our own OpenGL implementation of the classic PC game Pong using our mind's brain waves. We also wrote software to record our sleep and store the EEG signal inside a data file. High-Level Design Rational and Inspiration for Project Idea Our project idea was inspired by Charles's severe obstructive sleep apnea (OSA) disorder. In order to diagnose sleep apnea, a clinical sleep study is performed where the patient is attached to EEG electrodes, along with SpO2, EMG, and respiration sensors. The patient's sleeping patterns are recorded overnight, and apneas (periods of sleep without breathing) can be identified within the collected data. This process is costly and requires an overnight stay at a hospital or sleep lab. Moreover, the patient often is denied access to their own data since a licensed sleep specialist interprets it for them. Our goal was to build a low-cost alternative that would allow users to take their health in their own hands by diagnosing and attempting to treat their own sleep disorders. Moreover, our project has diverse applications in the areas of neurofeedback (aiding meditation and treatment of ADHD disorder), along with brain-computer interfaces (allowing the disabled to control wheelchairs and spell words on a computer screen using their thoughts). Background Math Support Vector Machines The machine learning algorithm we used was a support vector machine (SVM), which is a classifier that operates in a higher dimensional space and attempts to label the given vectors using a dividing hyperplane. The supervised learning method takes a set of training data and constructs a model that is able to label unknown test data. A brief explanation of the mathematics behind SVMs follows. During training, the SVM is given a set of instance-label pairs of the form {(xi⃗ ,yi):i=1,…,l} where the instances are n-dimensional vectors such that xi⃗ ∈Rn. The n dimensions represent n separate "features." In addition, the labels are in the form y∈{1,−1}, where 1 and -1 designate target and non-target instances respectively. To "train" the support vector machine to recognize unknown input vectors, the following minimization problem is solved: minw,b,ξ12wTw+C∑i=1lξi subject to: yi(wTϕ(xi)+b)≥1−ξi ξi≥0 Source: http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf Note that ϕ is a function that maps the training vectors x⃗ i into a higher-dimensional space, while C>0 and ξi act as error terms (so-called "slack variables"). Moreover, K is the kernel function which is defined as K(ϕ(xi)Tϕ(xj)). For our purposes, we used a radial basis function (RBF) kernel which has a K function of K(xi,xj)=exp(−γ||xi−xj||2) where γ>0 represents a user-tunable parameter. DFT The discrete Fourier transform (DFT) transforms a sequence of N complex numbers (an N-point signal) in the time-domain into another N-sequence in frequency domain via the following formula: Xk=∑n=0N−1xn⋅e−2πkNn The Fourier transform is denoted by F, where X=F(x). Source: http://en.wikipedia.org/wiki/Discrete_Fourier_transform An algorithm, the Fast Fourier Transform (FFT) by Cooley and Tukey, exists to perform DFT in O(nlogn) computational complexity as opposed to O(n2). We take advantage of this speed-up to perform DFTs in real-time on the input signals. Filters In order to filter the brain wave data in MATLAB, we use a finite impulse response (FIR) filter which operates on the last N+1 samples received from the ADC. In signal processing, the output y of a linear time-invariant (LTI) system is obtained through convolution of the input signal x with its impulse response h. This h function "characterizes" the LTI system. The filter equation in terms of the output sequence y[n] and the input sequence x[n] is: y[n]=h0x[n]+h1x[n−1]+…+hNx[n−N] Note that only N coefficients are used for this filter (hence, "finite" impulse response). If we let N→∞, then the filter becomes an infinite impulse response (IIR) filter. Source: http://en.wikipedia.org/wiki/FIR_filter EEG Signal Analysis The EEG signal itself has several components separated by frequency. Delta waves are characteristic of deep sleep and are high amplitude waves in the frequency range 0≤f≤4 Hz. Theta waves occur within the 4-8 Hz frequency band during meditation, idling, or drowsiness. Alpha waves have frequency range 8-14 Hz and take place while relaxing or reflecting. Another way to boost alpha waves is to close the eyes. Beta waves reside in the 13-30 Hz frequency band and are characteristic of the user being alert or active. They become present while the user is concentrating. Gamma waves in the 30-100 Hz range occur during sensory processing of sound and sight. Lastly, mu waves occur in the 8-13 Hz frequency range while motor neurons are at rest. Mu suppression takes place when the user imagines moving or actually moves parts of their body. An example diagram of the EEG signal types follows: EEG signals also contain event-related potentials (ERPs). An example is the P300 signal, which occurs when the user recognizes an item in a sequence of randomly presented events occurring with a Bernoulli distribution. It is emitted with a latency of around 300-600 ms and shows up as a deflection in the EEG signal: Other artifacts present themselves in the EEG signal as well such as eye blinking and eye movement. An illustration of an example signal corrupted by eye blinking follows: Logical Structure The overall structure of the project consists of an amplifier pipeline consisting of a differential instrumentation amplifier (where common-mode noise is measured using a right-leg driver attached to the patient's mastoid or ear lobe), along with an operational amplifier and some filters (to remove DC offsets, 60 Hz power-line noise, and other artifacts). From there, the signal passes to the microcontroller, where it is digitized via an ADC. Next, it is send over an isolated USB UART connection to a PC via an FTDI chip. The PC then performs signal processing and is able to output the results to the user, creating a neurofeedback loop which allows the user to control the PC using their brain waves. A functional block diagram of the overall structure follows: Hardware/Software Trade-offs Performing FFT in hardware using a floating-point unit (FPU) or a field programmable gate array (FPGA) would have allowed us to realize a considerable speed-up; however, our budget was only limited to $75, so this was not an option. Another trade-off we encountered was the use of MATLAB versus C. MATLAB is an interpretted language whose strength lies in performing vectorized matrix and linear algebra operations. It is very fast when performing these operations, but it is an interpreted language that does not run as native code. This speed penalty affected us when we attempted to collect data in real-time from the serial port at 57600 baud. To combat this speed penalty, I wrote a much faster OpenGL serial plotting application in C that runs at 200-400 frames per second on my machine (well above the ADC sample rate of 200 Hz) and is able to perform FFTs in real-time as the data comes in. Furthermore, yet another trade-off was the decision to use the PC to output the EEG waveforms rather than a built-in graphical LCD in hardware. Once again, budget constraints limited us, along with power usage since for safety reasons, our device uses four AA batteries instead of a mains AC power supply. Relationship of Your Design to Available Standards There exists a Modular EEG serial packet data format that is typically used to transmit EEG data over serial; however, we used ASCII terminal output (16-bit integer values in ASCII separated by line breaks) for simplicity, ease of debugging, and compatibility with MATLAB. Moreover, serial communications followed the RS232/USB standards. Another consideration was the IEC601 standard. IEC601 is a medical safety standard for medical devices that ensures that they are safe for patient use. Unfortunately, testing for IEC601 compliance was very much out-of-budget. Nevertheless, we discuss the many safety considerations that we absolutely adhered by in the Safety subsection (under Results) of this report. Hardware Design Amplifier Board Design We built an analog amplification circuit with a total gain of 1,500 based on the design by Chip Epstein at https://sites.google.com/site/chipstein/home-page/eeg-with-an-arduino with modified gain and filter stages. The first stage uses an AD620 instrumentation amplifier for differential common mode signal rejection to reduce noise. The gain of the AD620 is approximately 23. A voltage divider and a 3140 opamp buffer provide a 2.5 V virtual ground for the instrumentation amplifier. After passing through the instrumentation amplifier, the signal is filtered using an RC high pass filter with fc=0.13 Hz (we modified the original design to allow the P300 ERP to reside within the pass-band of the filter). Next, the signal undergoes a second-stage amplification. The gain of a 3140 opamp is set to approximately 65. The output signal is then filtered using an RC low-pass filter with a cut-off frequency of approximately 48 Hz. This frequency was chosen to preserve the low-frequency content of the EEG signal, while removing 50-60 Hz power line noise from the signal. We ordered parts from Digi-Key and samples from Analog Devices, Texas Instruments, and Maxim Semiconductor. We also sampled silver-plated passive EEG electrodes. From there, we were able to amplify a 125 μVVpp, 10 Hz square wave calibration signal to well within the ADC reference voltage range (0-1.1 V) and plot it on a PC in real-time. We constructed this prototype circuit on a breadboard. A schematic diagram of the amplifier board follows: Microcontroller Board Design The microcontroller board contains a voltage divider that outputs a 125 μVVpp, 10 Hz square wave calibration signal from Pin D.3 of the microcontroller. Moreover, it contains a +6V DC battery-power supply that provides DC power to the microcontroller and the amplifiers. A schematic diagram of the microcontroller board follows: Opto-Isolated UART over USB Design We constructed an isolated +6 VDC power supply using 4 AA batteries and connected it the microcontroller using the PCB target board. We cut the ground trace connecting the microcontroller ground to the USB ground using a dremel tool. An illustration of the cut that we performed follows: We used a Fairchild Semiconductor 6N137 optoisolator to isolate the USB power from the microcontroller power. The line of isolation is between the microcontroller UART RX and TX pins (Pin D.0 and Pin D.1) and the FTDI chip's RX and TX pins. A schematic diagram of the isolation circuit follows: Electrode Cap Design We constructed an EEG helmet consisting of an old baseball cap modified to contain EEG electrodes. We followed the International 10-20 System of Electrode Placement by including electrodes at the designated locations on the scalp: Occipital lobe (O), Central lobe (Fz, Pz, C3, C4, Cz), and Frontal lobe (Fp1, Fp2, G). A diagram of the 10-20 system of electrode placement follows: Software Design MATLAB Serial Code The primary function of the MATLAB serial code is to acquire digital EEG signal data from the microcontroller over the serial port. We wrote some code to plot the signal onto the screen and to perform rudimentary signal processing tasks (FFT and filtering). The MATLAB code consists of three files: plot_samples.m, plot_samples_rt.m, and serial_test.m The serial_test.m script opens the serial port and displays an almost real-time plot of the serial data. It parses the serial data in a while loop via fscanf and str2num. Additionally, it updates the plot window contents using MATLAB's drawnow command. The loop terminates if the user closes the plot window, causing the script to clean up the file handle and close the serial port. The plot_samples.m script opens the serial port, and reads exactly N=200 samples of EEG data (around 2 seconds). It then closes and cleans up the serial port. Next, a 60 Hz notch filter is applied to the signal to remove powerline noise via the iirnotch and filter, and the DC offset (mean value) is subtracted from the signal. Finally, the time-domain signal is displayed in a plot window, along with the single-sided amplitude spectrum computed via MATLAB's fft function. The plot_samples_rt.m script performs exactly the same operations as the plot_samples.m script, except it performs them in a loop. The script operates by sampling N=200 samples repeatedly until the user closes the plot window. As an effect, the signal plot and the frequency spectrum are refreshed every 2 seconds giving psuedo real-time operation. OpenGL Plotter A real-time serial plotter was written in OpenGL and C++. OpenGL is a high-performance graphics library, while C++ is much faster than MATLAB since it runs as native code. The program displays the real-time wave form from the serial port, along with its FFT. We use the FFTW (Fastest FFT in the West) library for computing the FFT using fast algorithms. Moreover, extensions were later added to the plotting code allow Pong to be played using brain waves, along with a P300 ERP detector. A data logging feature was added to allow us to record our EEG data while asleep to a file. The SDL library is used to collect user input from the keyboard and output the OpenGL graphics buffer to an on-screen window. Initialization and Event Loop The main() function initializes the SDL library, clears the ADC buffers, initializes OpenGL, initializes SDL TTF (for True Type font rendering), opens the serial port, opens the log file, and initializes the FFTW library. From there, the program enters the main event loop, an infinite while loop which checks for and handles key presses, along with drawing the screen via OpenGL. The Quit() function cleans up SDL, closes the serial port, de-initializes FFTW frees the font, and quits the program using the exit UNIX system call. The resizeWindow() function changes the window size of the screen by changing the viewport dimensions and the projection matrix. For this project, we use an orthographic projection with ranges x∈[0,X_SIZE] and y∈[0,ADC_RESOLUTION]. The handleKeyPress() function intercepts key presses to quit the game (via the [ESCAPE] key) and to toggle full screen mode (using the [F1] key). The initGL() function initializes OpenGL by setting the shading model, the clear color and depth, and the depth buffer. Drawing Code The drawGLScene() function is called once per frame to update the screen. It clears the screen, sets the model view matrix to the identity matrix I4, shifts the oscilloscope buffer running_buffer to the left by one, and fills the new spot in the buffer with the newest sample from the serial port. This sample is obtained by calling the readSerialValue() function in serial.cpp. This function also contains logic to perform the FFT and draw it onto the screen as well. The sample is sent to the P300 module and logged to the output file. Moreover, the power spectrum of the FFT is computed using rfftw_one() and by squaring the frequency amplitudes. The FFT bars and the oscilloscope points are plotted using GL_LINES and GL_POINTS respectively. Moreover, lines join adjacent oscilloscope points. The frequency ranges corresponding to each brain wave classification (alpha, beta, etc.) are calculated, along with their relative powers. Moreover, BCI code is executed which will be discussed in the OpenGL Pong sub-section of this report. The pong and P300 modules are then drawn on the screen, along with status text using TTF fonts and the framebuffer is swapped. Lastly, the frame rate is calculated using SDL_GetTicks(), an SDL library function. Serial Code The serial code handles serial communications over USB and is located in serial.cpp. Important parameters such as the buffer size BAUD_RATE, the port name PORT_NAME, and the baud rate B57600 are stored as pre-processor directives. The openSerial() function opens the serial port and sets the baud rate to 57600 (56k). The readSerialValue() function reads and parses one 10-bit ASCII ADC value from the serial port by scanning for a new-line terminator and using sscanf (readByte() is unused). Lastly, the closeSerial() function closes the serial port device. The UNIX system calls open, read, and close are used to carry out serial I/O, along with the GNU C library's system() function. The device file name for USB serial in UNIX is /dev/ttyUSB0. Note that if the NULL_SERIAL pre-processor directive is set, then mock serial data is used rather than actually collecting data from the serial device. This functionality is useful for testing purposes. Configuration The config.h file contains pre-processor directives that can be used to configure the OpenGL plotting application during compile-time. Important parameters include the screen width and height (SCREEN_WIDTH and SCREEN_HEIGHT respectively), the screen bit depth (SCREEN_BPP), ADC_RESOLUTION the ADC resolution (the number of y-values) set to 210=1024, and the log file name LOG_FILENAME (defaulting to "eeg_log.csv"). Debugging Useful utility functions for debugging purposes are found in debug.cpp. The FileExists() function returns a boolean indicating whether the given file exists. The OpenLog() and CloseLog() functions are useful for writing log files with time and date stamps. The log_out() function can be passed a format string which is written to the log file, along with a time stamp. The format() function takes a format string and returns the formatted result. It uses the vformat utility function to generate the format string based on the arguments passed to the function. The dump() function dumps regions of memory to the screen in a human-friendly hexadecimal format. Font Rendering TTF font rendering support was implemented using NeHe sample code (located in the References section of this report). The glBegin2D() and glEnd2D() functions set up an orthographic screen projection for font rendering. Meanwhile, power_of_two() is a utility function that calculates the next largest power-of-two of the given integer input (useful for computing OpenGL texture dimensions which must be powers of two). The SDL_GL_LoadTexture() function converts an SDL_Surface structure in memory to an OpenGL texture object. This is useful because the SDL_TTF library only returns an SDL_Surface, but we are rendering the fonts using OpenGL. The InitFont() and FreeFont() functions use the SDL_TTF library functions to load and free fonts respectively. Lastly, glPrint() acts like an OpenGL implementation of printf by printing strings to the screen using TTF font textures in SDL_TTF. For more detail: Brain-Computer Interface ### O'Reilly Webcast: Expanding the Capabilities of your Arduino Projects Michael Margolis is the author of Arduino Cookbook 2nd Edition, a collection of projects utilizing the physical computing platform of Arduino, the open source electronics prototyping platform. In this webcast Michael will discuss how to combine and apply multiple techniques from the Arduino Cookbook. Don't miss this informative presentation. ### Raspberry Pi Motion Sensitive Camera Using a Raspberry Pi, a Raspberry Pi camera module, a PIR motion sensor, a USB WiFi adapter, a handful of parts, and a couple of Python programs, you can construct a camera that will automatically snap photos or record short videos when something moves in front of the camera and will automatically upload the photos/videos to Dropbox. This instructable shows how to build a Raspberry Pi Motion Sensitive Camera. My inspiration for making this was to help satisfy my curiosity about the behavior of my cats when I'm not home and to identify the local wildlife culprits that devour the plants in my garden. There are commercial products that can do this but I thought it would be fun to build one that works exactly the way I desire. The Raspberry Pi executes a Python program that starts when the Raspberry Pi is booted and waits for motion to be detected by the PIR sensor. When motion is detected, the Raspberry Pi snaps a photo or records a short video and then uploads it to a DropBox account. The great thing about uploading to Dropbox is that the photos and videos are available to be viewed by the owner of the Dropbox account on any device (laptop, desktop, tablet, smart phone) from anywhere where internet access is available. When the upload is complete, the program sleeps for a few seconds and then waits again for motion to be detected. There is a second constantly running Python program that monitors a switch on the side of the camera. This program illuminates an LED in the switch so you know when the camera is operational. When the program detects the switch being pressed, it blinks the LED in the switch and then halts the software in Raspberry Pi. The LED in the switch turns off to indicate that it is safe to unplug the power to the camera. There is an additional LED mounted on one of the side panels that is illuminated when the Raspberry Pi is connected to power. A more detailed explanation of how the software works is provided in step 20. The diagram shows the wiring of the various components to the Raspberry Pi. The case for the camera was made with 1/8" thick birch plywood cut using a Epilog Helix laser cutter. This instructable assumes you have basic experience with setting up and running a Raspberry Pi, that you have experience soldering, and that you have access to and experience with a laser cutter.   For more detail: Raspberry Pi Motion Sensitive Camera ### Happy Androids with Arduino Video instructions Arduino + Android Normally smartphone events are tightly coupled to your phone device itself. When your cell phone is ringing, your phone speaker plays a ringtone. When you get a new text message, your phone displays it on its screen. Wouldn't it be thrilling to make thoses phone events visible somewhere else, on your wearable, in your living room, on your robot, in your office or where ever you want it to occur? Or would you like to use your smartphone sensors, like the accelerometer, light sensor, compass or your touchscreen to control other devices? Amarino is a toolkit, basically consisting of an Android application and an Arduino library which will help you to interface with your phone in a new dimension. You can build your own interfaces almost without any programming experience. For more detail visit: Happy Androids with Arduino Video instructions ### Finalized Prototype Using Arduino Shown below is the finalized prototype. The purpose of the prototype was to demonstrate the feasibility of a small, highly maneuverable search and rescue robot. As such, the completed prototype was successful. Capabilities include a ground speed of 10 inches per second, battery life of 50 minutes, wireless range of between 50 and 150 feet (depending on interference), weight of 14.5 pounds and the ability to climb stairs. The prototype is also capable of crossing a gap of at least 10 inches and of climbing a 21 inch tall ramp angled at 49 degrees from horizontal. It provides the operator with a color video feed (with nighttime illumination) and two-way audio communication. Arm Rotation Sensors The robot also features 4 arm position sensors to indicate the orientation of each leg relative to the body. The sensors are designed similarly to potentiometers with a C-shaped piece of resistive paper. As the arm rotates, it makes contact between the resistive paper and the output terminal. The output voltage is measured with the Arduino's analog inputs. First fully wireless test This was the second major test of the prototype, the first test done entirely without external connections. Again, the laptop used to send commands and view the camera feed (as well as send and receive audio) is not shown. This test brought to light yet more software and hardware issues, which are being addressed. Line of sight wireless range test With the robot set up in the configuration shown in the above video, the team tested the line of sight wireless range. The team was able to remain in control of the robot at a distance of approximately 160 ft. More tests are planned to analyze the impact of structural interference. First full motor test with wireless control This was the first major test of the prototype. 6 of 8 motors were connected (all except front left rotation and translation). Some software bugs were discovered in the test and are being fixed. Not shown is the laptop connected wirelessly to the robot which is being used to control the motors. Also note that the camera is working with a video feed being sent to the desktop computer shown in the video.   For more detail: Finalized Prototype Using Arduino ### TI has low noise chip for monitoring brain waves Description   The ADS1299 is a low-noise, multichannel, simultaneous-sampling, 24-bit, delta-sigma (ΔΣ) analog-to-digital converter (ADC) with a built-in programmable gain amplifier (PGA), internal reference, and an onboard oscillator. The ADS1299 incorporates all commonly-required features for electroencephalogram (EEG) applications. With its high levels of integration and exceptional performance, the ADS1299 enables the creation of scalable medical instrumentation systems at significantly reduced size, power, and overall cost. The ADS1299 has a flexible input multiplexer per channel that can be independently connected to the internally-generated signals for test, temperature, and lead-off detection. Additionally, any configuration of input channels can be selected for derivation of the patient bias output signal. The ADS1299 operates at data rates from 250 SPS to 16 kSPS. Lead-off detection can be implemented internal to the device, either with an external pull-up or pull-down resistor or an excitation current sink or source. Multiple ADS1299 devices can be cascaded in high channel count systems in a daisy-chain configuration. The ADS1299 is offered in a TQFP-64 package specified from –40°C to +85°C. Features Eight Low-Noise PGAs and Eight High-Resolution Simultaneous-Sampling ADCs Very Low Input-Referred Noise: 1.0 µVPP (70-Hz BW) Low Power: 5 mW/channel Input Bias Current: 300 pA Data Rate: 250 SPS to 16 kSPS CMRR: –110 dB Programmable Gain: 1, 2, 4, 6, 8, 12, or 24 Unipolar or Bipolar Supplies: Analog: 4.75 V to 5.25 V Digital: 1.8 V to 3.6 V Built-In Bias Drive Amplifier, Lead-Off Detection, Test Signals Built-In Oscillator Internal or External Reference Flexible Power-Down, Standby Mode Pin-Compatible with the ADS1298IPAG SPI™-Compatible Serial Interface Texas Instruments has introduced a very low noise electroencephalography (EEG) analogue front end AFE device. It is used for non-invasive monitoring of brain waves. The 24-bit, 8-channel ADS1299 is the first simultaneously sampling EEG AFE with input-referred-noise as low as 1µVpp. The ADS1299 was designed for manufacturers of extra-cranial biopotential measurement equipment who want to reduce board space, design time and cost while improving performance. It can be used in EEG equipment to monitor bispectral index, evoked potentials and event-related potentials to diagnose brain injuries, strokes and sleep disorders. The ADS1299 can also be used in ultra-high-performance medical diagnostic and research-grade electrocardiogram (ECG) equipment.   For more read: TI has low noise chip for monitoring brain waves ### Energy-efficient 3D display maintains images without power Liquid Crystal Displays (LCDs) are a common and increasingly pervasive method of displaying information for everything from watches to giant TV screens. Though, like most other displays, LCDs require electrical energy to constantly display an image. Researchers from the Hong Kong University of Science and Technology, however, have produced an ultra-thin LCD screen prototype that is not only capable of displaying images without continuous power, but in 3D as well. In a standard LCD, each pixel generally consists of a layer of molecules aligned between two transparent electrodes and a pair of polarizing filters. Passing current through the electrodes “untwists” the liquid crystal molecules and affects the way light interacts with them, be they a backlit display, like an LCD TV, or reflective, like a digital watch. Depending upon the orientation of that light, one of the polarizing filters will then make that pixel appear a certain color and form part of the overall display. In the new display the electrodes have been completely removed, allowing a much thinner screen. An image is created on the screen using a flash of light. The flash passes through the polarized glass and aligns the liquid crystal molecules without the use of electrical energy, to reveal a picture. These crystals then remain aligned, holding the image in place, until another flash is applied to change it. As a result, these optically rewritable LCDs (ORLCDs) only require power when the image flash is generated, so they may prove particularly useful in devices such as e-book readers where a static image is displayed for most of the time. "Because the proposed LCD does not have any driving electronics, the fabrication is extremely simple," said researcher Abhishek Srivastava. "The bi-stable feature provides a low power consumption display that can store an image for several years." As part of producing a visible image in an LCD is through the use of polarizing filters, the team added an extra ability to their prototype by using the properties of those filters to show images in 3D. As objects appear three-dimensional to our eyes from the perspective created between the separation of our two eyes, 3D mimicry generally requires two separate images taken from different angles and a pair of suitably polarized glasses to see. The new ORLCD still requires the polarizing glasses to view an image in 3D, but the clever use of polarizing filters by the research team means that they only need the one image to create an illusion of 3D. By dividing the image into three separate zones – where in one the light is twisted 45 degrees to the left, another where it is rotated 45 degrees to the right, and a third in where it is left unchanged – light passing through a filter from the three zones is polarized in different directions, emulating the two images required for 3D simulation. Polarizing glasses can then be used to provide a different view to each eye, thereby simulating 3D.   For more detail: Energy-efficient 3D display maintains images without power ### Driving nine LEDs on a power budget, says ams Description The AS3661 is a 9-channel LED driver designed to produce lighting effects for mobile devices. A highefficiency charge pump enables LED driving over full LiIon battery voltage range. The device is equipped with an internal program memory, which allows operation without processor control. The AS3661 maintains excellent efficiency over a wide operating range by autonomously selecting the best charge pump gain based on LED forward voltage requirements. AS3661 is able to automatically enter power-save mode when LED outputs are not active, thus lowering idle current consumption down to 10 μA (typ). The AS3661 has an I2C-compatible control interface with four pin selectable addresses. Also, the device has a flexible General Purpose Output (GPO), which can be used as a digital control pin for other devices. INT pin can be used to notify processor when a lighting sequence has ended (interrupt - function). Also, the device has a trigger input interface, which allows synchronization between multiple devices.The device requires only four small and low-cost ceramic capacitors. Key Features Three independent program execution engines; 9 programmable outputs with 25.5 mA full-scale current, 8- bit current setting resolution and 12-bit PWM control resolution Adaptive charge pump with 1x and 1.5x gain provides up to 95% LED drive efficiency Charge pump with soft start and overcurrent/short circuit protection Built-in LED test Automatic power save mode; IVDD = 10 μA (typ.) Two wire, I2C-compatible, control interface Flexible instruction set Large SRAM program memory Small application circuit Source (high side) drivers Minimum number of external components Architecture supports color control An LED driver has been designed by ams which controls up to nine LEDs while saving power in LTE mobile devices because it operates independent of the baseband processor. Typically used for indicator lighting, the AS3661 allows command-based programming of all light patterns. Three independent program execution engines form three independently programmable LED banks which can be grouped based on their function. Each bank can contain from one to nine LED driver outputs; the AS3661 offers nine LED channels in total with up to 25mA per channel. A dedicated 12-bit PWM for each of the nine channels delivers absolutely smooth color transitions and enables the production of linear, logarithmic and ratiometric fading effects. Instructions for the program execution engines are stored in the program memory. The total capacity of the program memory is 96 instructions and the user can allocate a memory of 1.5kbit as re-quired by the engines. “Our AS3661 smartlight driver enables systems designers to offer users more eye-catching effects and functionality than ever before. This new product truly brings color into the life of portable devices,” said Ronald Tingl, senior marketing manager of opto-electronic products at ams.   For more read: Driving nine LEDs on a power budget, says ams ### Line Following Robot using arduino This is a Line Following Robot. It follows a black line that is drawn. It is able to detect the black line through one photocell and one analog light sensor. There is an LED in between the two sensors that gives off red light when the Arduino is powered on. Then, when the light is reflected back, more light is detected when it is reflected on the white surface, compared to when it is reflected on the black surface. Using this, the right and left servo motors move accordingly to turn left or right when the sensors detect white surface rather than black. I used the Parallax BOEBot Robot for Arduino Kit as my base for the robot. Then I placed a breadboard in front of the base to attach all the sensors with the LED to face the black line. Follow these steps, and you will be able to build your own line following robot! :) Step 1: Step 1: Parts Parts needed: Arduino Motor Shield (https://www.adafruit.com/products/1438) LED with 100 ohms resistor Photo cell with 1K ohms resistor (https://www.adafruit.com/products/161) GA1A12S202 Log-scale Analog Light Sensor (https://www.adafruit.com/products/1384) A base for the robot with 2 wheels attached to servo motors ** I used : Parallax BOEBot Robot for Arduino Kit (https://www.adafruit.com/products/749) A breadboard A battery with a battery holder Black marker or black tape with white papers Tape to tape all the parts together Wire to connect all the parts (also jumper wires) Step 2: Step 2: Assemble 1 First, hook up all the sensors! Connect the photo cell. One end should go to power and the other should connect to the 1K ohms resistor. Then, on the side with the photo cell and the resistor, connect to the analog pin. Next, connect the other end of the resistor to ground. Then connect the LED with the 100 ohm resistor on the breadboard. Finally connect the light sensor to the breadboard according to the label: ground, power, and one analog pin. Then connect all the wires with jumper wires to the Arduino. Make sure that your jumper wires are long enough to reach the Arduino on the base of the robot. Second, attach the breadboard to the base of the robot. I used tape since I couldn't really think of anything else, but you can use anything if it is going to be able to attach the breadboard (facing down) to the robot. Then, use more tape to organize the jumper wires.   For more detail: Line Following Robot using arduino ### AC Dimmer Circuit Overview Simple AC Dimmer circuit for incandescent bulbs. 128 levels of brightness. Parts are relatively cheap! How it Works This is an AC Chopping Circuit. The dim level sets where the AC waveform gets chopped on. More of the cycle makes the bulb brighter, less is dimmer. (from digikey http://www.digikey.com/ca/en/techzone/lighting/resources/articles/Retrofit-LED-Bulbs-and-Drivers.html) Photo Digital Signals. The four signals on the left. They are labelled on the board. Yellow: light dimming signal, comes from Arduino digital pin 11. White: zero-cross signal, goes to Arduino digital pin 2 in. Red: arduino +5V supply. Black: arduino GND. The LED on board should dim or fade along with the AC light source. Fading will not work until AC power is connected, it depends on the zero-cross info from the H11AA1 chip. AC Signals. The four white cords on the right. The bottom two cables on the right are the AC plug. The top two are the Bulb. These are labelled on the board, but are partially covered by the large screw terminals. Bottom is AC Power - Neutral. Bottom Middle is AC Power - Hot. Top Middle is Bulb - Hot. Top is Bulb - Neutral. NOTE: For help identifying Hot and Neutral on lamp cord, look here. Code example with slow on/off fade: example with potentiometer control: Schematic   Board Layout PCB Files EagleCAD - Gerber - Building the Circuit Parts 33K 10K 1K 470 180 2.4K 0.01uF capacitor generic LED H11AA1 - Optocoupler AC Input 1 Channel http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_18825_-1 MOC3020 - DIP-6 OPTOISOLATOR Triac Driver http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_277780_-1 BTA12-600 - 600 V, 12 A, SNUBBERLESS TRIAC http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_2034010_-1 From a PCB If you had some of these manufactured, then you'll want to build the PCB. See our tutorial on Populating a Fabricated PCB. For more detail: AC Dimmer Circuit ### The DIY Photobooth with Lighting Control using Arduino This is a tutorial on how to build your own Photobooth. My friend had a wedding coming up and was in need of a Photobooth. Photobooth rentals go anywhere from $500 - $1500 so we decided to do our own & hence another DIY Photobooth project was born. This one however is a little different in that it includes a lighting and LED control feature leveraging the Arduino and some custom software. Step 1: Building the Photobooth Structure My friend Diego took care of this portion of the project. The Photobooth frame was built with PVC pipes and joints and his wife did a fantastic job sewing together the fabric which slips into the PVC pipe. Step 2: The Electronics for the Lighting and LED Control If you're good on electronics and soldering, you can do the project with an Arduino following this schematic and instructions in this manual. If you go this route, you'll build the circuit yourself with your existing Arduino and then you'd just need the DIY Magic Mirror/Photobooth Software. You'd save yourself some time though with the DIY Magic Mirror /Photobooth kit which involves much less soldering and includes the software. The DIY Magic Mirror / Photobooth Kit plugs into the USB port on your laptop and then it's just a matter of installing the software and hooking up the printer and monitor. Step 3: DIY Photobooth Software You can Google around and find lots of really good DIY Photobooth software out there. For this project though, we needed the lighting and LED control feature so I had to code it myself. I was able to leverage another project of mine, the DIY Magic Mirror. In that project, I had already written the X-10 lighting and LED control functions using Adobe Flash interfaced with the Arduino. So it was just a matter of adding some extra code for the Photobooth functionality. The other nice thing about this is that the software also doubles as a Breathalyzer so you can do a Photobooth and then check the alcohol level of your guests. Hey, it may come in handy. The manual (see page 46) goes in to greater detail on how to setup the Photobooth software but here's the gist: 1. Run the Config program and turn on the Photobooth 2. Go to the Photobooth settings screen where you can turn on printing, turn on the X-10 control, turn on the LED control, specify the layout of the 4 x 6 photostrip (most printers these days can handle 4 x 6 photo paper). You can also create a custom logo to appear on the screen and a custom background for the Photostrip printout. Major Components in ProjectRequired Components: Laptop Printer (capable to handle 4 x 6 paper size) Monitor HD Webcam – $50 DIY Magic Mirror/Photobooth Kit & Software ($139) or Arduino with the DIY Magic Mirror/Photobooth Software ($49) 2 Clip Lamps – $40 1 Green LED – $1 1 Red LED – $1 Optional enclosure box for the LEDs – $5 X-10 RF Transceiver TM571 – $16 X-10 Firecracker CM17A – $5 X-10 Lamp Module LM465 – $10 PVC pipe and Fabric for the Photobooth Structure – $80 Optional Photobooth Sign from Kinkos Optional Photobooth Start Button – $20 For more detail: The DIY Photobooth with Lighting Control using Arduino ### LTC2645 - Quad 12-/10-/8-Bit PWM to VOUT DACs with 10ppm/°C Reference Features No Latency PWM-to-Voltage Conversion Voltage Output Updates and Settles within 8μs 100kHz to 30Hz PWM Input Frequency ±2.5LSB Max INL; ±1LSB Max DNL (LTC2645-12) Guaranteed Monotonic Pin-Selectable Internal or External Reference 2.7V to 5.5V Supply Range 1.71V to 5.5V Input Voltage Range Low Power: 4mA at 3V, <1μA Power-Down Guaranteed Operation from –40°C to 125°C 16-Lead MSOP Package Typical Application Description The LTC®2645 is a family of quad 12-, 10-, and 8-bit PWMto- voltage output DACs with an integrated high accuracy, low drift, 10ppm/°C reference in a 16-lead MSOP package. It has rail-to-rail output buffers and is guaranteed monotonic. The LTC2645 measures the period and pulse width of the PWM input signals and updates the voltage output DACs after each corresponding PWM input rising edge. The DAC outputs update and settle to 12-bit accuracy within 8μs typically and are capable of sourcing and sinking up to 5mA (3V) or 10mA (5V), eliminating voltage ripple and replacing slow analog filters and buffer amplifiers.   For more detail: LTC2645 - Quad 12-/10-/8-Bit PWM to VOUT DACs with 10ppm/°C Reference ### Make a High-Altitude Balloon Tracker (Arduino) One of the coolest projects I have done so-far with my kids is a "near-space" balloon. That's not quite into space itself (100Km+) but so high that the sky looks black and you can start to see the curvature of the earth below you. The Flickr set with the photos from our first launch is here: http://flic.kr/s/aHsjK22nDc This is a quick-fire slideshow of the photos from the balloon, formatted as a 2.5 frames/sec video. I'm having trouble embedding it so the link is here In order to take this kind of photo you need to send a camera up to the stratosphere. Ours went 38Km (124,000 feet) straight up. This is easy enough: you attach it to a massive balloon, let it rise until the balloon bursts (due to the v. low pressure at the edge of the atmosphere) and then it will fall back to earth. In order to see the photos that you have taken, you then need to find the camera afterwards. This is the trick. Fortunately, at least in the UK and increasingly across Europe, the very helpful guys at the UK High Altitude Society (ukhas.org.uk) have developed a distributed network of trackers who will receive a signal from your balloon, upload the data to a server and plot the position for you on a Google Maps based page (spacenear.us/tracker/). In order to take advantage of this wonderful network of helpers, we need to build a tracker that will communicate with their equipment. That is what I will outline in this instructable. There are plenty of rules and regulations regarding what you can fly and which parts of the radio spectrum you can use for various tasks. The approach I will use in this instructable is suitable for the UK under the rules prevailing in 2013. If you live elsewhere or you are doing this significantly after I write this instructable, please check the rules that apply to you. The guys at UKHAS are fantastically helpful. So - let's build a radio-tracker. Step 1: Things we need The tracker is based upon the Atmel ATMeag328 Microcontroller which forms the heart of many of the popular "Arduino" boards. We are going to make an "Arduino Compatible" board which we can program using the Arduino IDE. Because the GPS module and SD card both require 3.3v and we have plenty of computing power, we may as well make the whole tracker run on 3v3. That means that we can't clock the '328 up to its full 16MHz but it will run happily at 8MHz on 3v3, and that's plenty for our purposes. The tracker is designed on a custom PCB which is 5 x 5 cm in size. This means that it can be fabricated on some incredibly cheap PCB fab' sites. The design files for the tracker board and more details on the design are in the later steps. These are the materials I used for my design. There may well be better options but this worked well for me: Materials: 1 x Custom Tracker Board (see next step) 1 x ATMega 328** 1 x 8MHz Crystal (NB not the usual 16MHz) 2 x 22 pf ceramic caps 1 x Radiometrix NTX2 (e.g. from UPU's store) 1 x GPS breakout board with antenna (the board is designed for this one) 1 x SD card breakout board (e-bay)* 1 x board-mount DS1820 temperature sensor* 1 x external DS1820 Temperature sensor (e-bay)* 1 x HoneyWell HSCDANN001BA2A3 board-mount absolute pressure sensor (Mouser)* 1 x tactile switch 3 x 100nf ceramic caps 1 x 100 uf electrolytic cap 1 x MCP1825 ultra-low dropout 3v3 regulator 1K resistors (around 5) 10K resistors (2-3) 4k7 resistors (4-5) 3mm LEDs (0-4 according to preference, different colours)* Selection of 1% resistors (I used: 47K/6.8K for the battery sensor and 6.8K/10K for the radio driver ) Male header pins (0.1") - some straight, some 90' Tools: Soldering station and solder Clippers Helping hands Wire strippers Programming / Debugging Tools: PC with Arduino IDE installed USB to UART adaptor (I use a cheap CP2102. FTDI would work too) or program with ISP (see below) For Bootloading/Programing**: ISP programmer or Arduino + breadboard or ISP shield * - These sensors and indicators are not essential to the function of the board but allow you to send some interesting data and log it for analysis offline. **You can buy pre-bootloaded chips but they expect a 16MHz crystal. You would likely at least have to correct the timings in the code to make it work on 8MHz. It is certainly preferable to burn an 8MHz bootloader (see later). It's not hard to do. Step 2: Tracker Design Attached to this step are the Eagle schematic and board files that I used for my tracker board, along with two .zip files: one with the board and schematic files and one containing all of the gerber files for the various layers. My board worked fine, but was not 100% perfect, for example, the LEDs on the serial port lines should really pull up to +3v3 rather than pulling down to ground so that they are off when there is not activity. You may well prefer to design your own board, or at least modify mine. If you do this then there are a number of features that are necessary and/or useful for a High-Altitude tracker. These are some that are worth considering: Power: You can't send an alkaline battery up into the atmosphere - it get's down to -50'C and they just stop working. Even though you will insulate your payload, you want to use disposable lithium batteries - the are light and work well at low temperatures. The GPS and SD-card run at 3.3v only. 5v will fry then. If you can run everything on the same voltage you save wasting too much power in voltage conversions. If you use a switching power supply or an ultra-low dropout regulator then you can wring more flight-time from your power-pack. Robustness: You could make your circuit up with lots of loose wires, with sockets or on stripboard, but it's going to get very cold and shaken about! If you can it's worth designing a custom PCB and soldering everything directly to it. No sockets to lose contact, at least for the critical parts. My PCB is small and cheap but will allow soldering of the processor, crystal, GPS and radio. I elected for direct soldering of the radio antenna too. Parts: Radio - in the UK there are only a few narrow frequencies you can use from the air and even then you are only allowed 10mW. The NTX2 is one of the few viable options for radio modules. GPS - layout of a GPS module can be difficult and ideally you would keep it away from everything else. I opted for a pre-made module that could be soldered above and off to the side from the main board. It's important to note also that many GPSs don't operate above 14km height. Ublox GPSs have a flight mode that does work. For any others you will need to do your research before you buy/use. Microcontroller - the ATMega 328 is a great option because it can be programmed from the very easy Arduino IDE. It will also run on 3v3 but only a 8MHz. However that's plenty of processing power for reading a GPS and running a low baud-rate radio. Temperature - a temperature sensor provides interesting data but many are not rated down to the -50'C that we could encounter at the tropopause. The DS18B20 is a good option because they are pretty cheap and are rated to low temperatures. You can get "external" ones which are sealed in a stainless tube for added protection. We'll use one board-mounted one and one external. Pressure - there are not too many "absolute" pressure sensors that I have found. The Honeywell HSCDANN001BA2A3 supposedly goes down to "0" mBar and in practice performed well down to 8mBar on the flight. Its i2c interface is pretty easy to handle. Honeywell make about a zillion variants but many are "relative" sensors - they measure the difference between a certain pressure and atmospheric. You need an "absolute" pressures sensor because it's atmospheric pressure we are measuring. SD card - you could potentially surface-mount your own SD card holder but that's pretty fiddly and I didn't have enough board area anyway. SD-card breakouts are cheap and easily available so I elected to solder one underneath the main board to be compact and easy. A lighter approach would be to solder wires to the pads of a micro-SD adaptor and use it as a socket for a micro-SD card. Step 3: Bootloading In order to use the Arduino IDE reliably at 8MHz, you need to burn the "Arduino Pro Mini 8MHz" bootloader onto your ATMega328. There are all sorts of ways of doing this, but I will assume here that you have a '328 based Arduino board (like an Uno, nano or Duemilanove). Using this you can bootload your '328 using either a dedicated "shield" or just a solderless breadboard. Breadboard method: 1) Place your '328 in the centre of your breadboard. Run +5v and Gnd from your arduino to the power rails on your breadboard. 2) Run a 10K from pin 1 on the BB (reset) to +5v. 3) Fit a crystal (8 or 16MHz) and cap's (22pf) on pins 9 and 10 on the BB. 4) Join pins 7 and 20 (on the BB) to +5v and pins 8 and 22 to Gnd with jumper wires. 5) Jump from D11, D12 and D13 of the Ardu' to pins 17, 18, 19 on the breadboard. 6) Jump from D10 on the Ardu' to pin 1 on the BB. 7) Plug the Ardu' into your PC and burn the the Arduino ISP sketch onto your Ardu' from the Examples. 8) Put a 10uf capacitor from reset to Gnd on the Arduino (not the BB). 9) In the IDE, select "board" as Arduino Pro Mini 8MHz. Select the programmer as "Arduino ISP" 10) In the IDE click "burn bootloader". 11) The lights will flicker for a bit while the bootloader is transferred. 12) When it's finished, the D13 light on the Ardu should flash regularly. That's in parallel with D13 on the new chip and tells you the blink sketch, which is burned with the bootloader, is running on it. Shield Method I got fed up with laying out BBs the whole time so I made an small ISP shield. The picture is of mine but if you don't want to make your own then you can buy one from EMSL. The procedure is very similar but reduces the setting up to one step: 1) Burn the Arduino ISP sketch onto the Arduino & un-plug it. 2) Put your '328 in the shield and the shield on the Arduino. 3) Plug in the Arduino and disable auto-reset (jumper or switch on the shield) 4) In the IDE, select "board" as Arduino Pro Mini 8MHz. Select the programmer as "Arduino ISP" 5) In the IDE click "burn bootloader". 6) The lights will flicker for a bit while the bootloader is transferred. 7) When it's finished, the D13 light on the Ardu should flash regularly. That's in parallel with D13 on the new chip and tells you the blink sketch, which is burned with the bootloader, is running on it. Testing: Your '328 should now be ready to be programmed. If you want to test it before soldering directly onto the board then you can lay it out as a breadboard Arduino as described above. Now, disconnect the Arduino from the Breadboard and connect up the CP2102 USB to TTL converter. That will go to +5v and Gnd, with Tx on the CP2102 going to D0 and Rx to D1. Some CP2102s are marked backwards so you may need to switch these two. Finally you need to add a reset switch between pin 1 and Gnd. You might also want an LED and resistor (say 1k) between pin 19 and Gnd. To load a sketch, select Arduino Pro Mini 8MHz as the board and upload a sketch. Just when it finishes compiling and tells you the final size at the bottom of the IDE, press and release the reset button to start the upload. You should be able to upload the blick sketch and see the D13 LED flashing with a new timing. You can burn the final sketch now if you want. It will save you connecting the CP2102 up to the tracker board. See a later step for the sketch. Step 4: Put it Together.. There are several options on this board - you can control the GPS by serial or using i2c, you can tie the "control" line of the radio direct to ground or you can control from the microcontroller etc. The board is made so that you can put pin headers on the various options and change them around with jumpers. This is very useful in development. However, for the actual flight build, I wanted to hard-solder all of the jumpers to avoid anything losing contact in the harsh conditions of flight. This build therefore solders all of the jumpers but if you are developing your tracker you may well want to use jumpers until you know which option you want to use. In general, I started from the centre and worked outwards for ease of soldering. The SD-card breakout needs to go on late because it covers a lot of the under-side and so prevents you from soldering on very much else once it's there. There's a lot crammed into this board to make it small and cheap and light. That means it's not terribly suitable for a first soldering project. However, it's all through-hole so apart from being a little tight in places it's not at all difficult. Construction: The pressure-sensor mounted above the board on the ends of its legs. This just allows it to be clipped off again if we wish. It's the most expensive component and you might want to use it on another project later. The 1Ks for the status LEDs, the pullups for the DS18B20s, header for the external DS18B20 plus the crystal and caps. Nearly all resistors are vertical on this board to save space. Remember to use an 8MHz crystal! The NTX decoupling cap, control line and voltage divider. The NTX changes frequency according to a voltage supplied on the control pin. To transmit RTTY 50 baud, we want a shift of around 500 Hz. I used 10K and 6K8. 1% resistors are a good plan here. Microcontroller - make sure you bootload it first! If you haven't done that yet, go back to the last step and do it now! Then solder it in. Don't worry about direct soldering it, AVRs are hard as nails, but do get the notch at the right end - it'll be a pig to un-solder. Internal DS18B20 and reset switch. Dead easy. Header - all pins of the '328 are broken out but most of them you don't need. If you want to re-program it in place then you will need a 4-pin header for the Tx, Rx, Vcc and Gnd lines. Try to work out what other pins you might need and whether you want to access them from the top or side. The voltage divider for battery sensing connects to A0 and senses against the 1v1 internal standard. You need to set the range according to the maximum your battery pack can provide because this input cannot go above 1v1 without risking damage (remember a 1.5v battery can be significantly higher when new). I used the arrangement: Batt-47K-A0-6.8K-Gnd which is safe to around 8.7v. Now is a good time to add the status LEDs, smoothing cap and GPS jumpers. In the version of the board shown later the i2c pullups are properly on-board next to the pressure sensor. I forgot them on the first version so I added them on the underside, connected to the sda and scl jumper positions. The NTX2 radio module slips in next, then have a good look over the board. I did not add all of the possible LEDs or headers. If you want any others, add them now because once the SD-card is in, it's going to get a whole lot harder to solder anything! The SD card sits under the board with its header pins soldered in from the top. A foam sticky pad will keep the boards from shorting and hold it nicely while you solder it. Finally, the GPS breakout board attaches to the edge on header pins. I used the full length of the pins to put the GPS physically above and to the side of the main board.   For more detail: Make a High-Altitude Balloon Tracker (Arduino) ### 1080p video over Cat-5 up to 300m long The AD8122 is a triple, high speed, differential receiver and equalizer that compensates for the transmission losses of UTP and coaxial cables up to 300 meters in length. Various gain stages are summed together to best approximate the inverse frequency response of the cable. Each channel features a high impedance differential input that is ideal for interfacing directly with the cable. The AD8122 has two control inputs for optimal cable compensation, one LPF control input, an input to select between UTP and coax cable, and an output offset adjust input. The cable compensation inputs are used to compensate for different cable lengths; the VPEAK input controls the amount of high frequency peaking and the VGAIN input adjusts the broadband flat gain, which compensates for the flat cable loss. The VFILTER input controls the cutoff frequency of output lowpass filters on each channel. Selection between UTP and coaxial cable compensation responses is determined by the binary COAX/UTPinput, which can be left floating in UTP applications. The VOFFSET pin allows the dc voltage at the output to be adjusted, which can be useful in dc-coupled systems. For added flexibility, the gains of each channel can be set to x1 or x2 using the associated GAIN control pins. The AD8122 is available in a 6 mm × 6 mm, 40-lead LFCSP and is rated to operate over the extended temperature range of −40°C to +85°C. FEATURES and BENEFITS     Compensates cables to 300 meters for wideband video     -- 60 MHz Equalized BW @ 300 meters of UTP Cable     -- 120 MHz Equalized BW @ 150 meters of UTP Cable     Fast time domain performance     -- 70 nsec settling time to 1% with 300 meters of UTP cable     -- 7 ns rise/fall times with 2 V step @ 300 meters of UTP cable     3 frequency response gain adjustment pins     -- High frequency peaking adjustment (VPEAK)     -- Output lowpass filter cutoff adjustment (VFILTER)     -- Broadband flat gain adjustment (VGAIN)     Selectable for UTP or coax compensation     DC output offset adjust (VOFFSET)     Low output offset voltage:     ±4 mV @ G = 1     Compensates both RGB and YPbPr     Two on-chip comparators with hysteresis     -- Can be used for common-mode sync extraction     Available in 40-lead, 6 mm × 6 mm LFCSP Analog Devices has introduced what it claims is industry’s fastest 300m UTP cable equaliser for analogue video distribution. “The AD8122 enables transmission of UXGA and 1080p images over Cat-5 cables up to 300m long,” said the firm. 60MHz of equalised bandwidth is provided, with a 16mVrms noise and 70ns settling time to 1% with 300m cables. Power consumption is 930mW, and there is an integrated adjustable low pass filter. Applications are expected in KVM (keyboard-video-mouse) switches, digital signage and professional video projection or distribution. Complementary components include ADI’s AD8120 video delay line and AD8146/7/8 triple differential drivers for analogue video over Cat-5. For more read: 1080p video over Cat-5 up to 300m long ### 100 GHz real-time oscilloscope arrives You've seen the videos and live demos at DesignCon, OFC, and ECOC. Now, it's here. Teledyne LeCroy has announced the LabMaster 10-100Zi, the world's first 100-GHz real-time oscilloscope. First demonstrated in 2013, the LabMaster 10-100Zi acquisition module for the LabMaster 10 Zi oscilloscope makes a significant jump in bandwidth over the previous record of 65 GHz, also held by Teledyne LeCroy. The LabMaster 10-100Zi acquisition module uses the same technology developed for previous models. That is, it downconverts the spectral content of a signal to 36 GHz then digitizes and reconstructs the signal for display.   For more detail: 100 GHz real-time oscilloscope arrives ### Reflow Master Shield – Arduino Solder Reflow Oven Turn your toaster oven into your own solder reflow factory shop using the Reflow Master Shield!!! Paladin Enabling Technologies - Reflow Master Shield The Reflow Master Shield from Paladin Enabling Technologies is an Arduino shield that turns your normal toaster oven into a reflow oven. A reflow oven is used in the production of electronics to change solder paste from a paste form to a liquid form and lastly to a solid form. This results in all your components being soldered for you in one run. But let me share with you why I've created the Reflow Master Shield and why you would want one. In 2012 I created my first project and I wanted to upgrade the project but soon realized that I required surface mount devices or components (SMD) to be able to do so. The industry standard these days are to use SMD to populate boards. As you will notice from some of the following commercial boards: Yes we can still make use of through hole components but their SMD cousins are often more feature rich and comes in at a more affordable price. Component sizes are also reduced which enables you to create a smaller circuit board which once again saves you money. These facts lead me to get hold of a reflow oven controller. I looked to purchase a model but didn't find a model that suited my needs and so I set out to create my own. The Reflow Master Shield is what I came up with.   For more detail: Reflow Master Shield – Arduino Solder Reflow Oven ### List of Common Ports for interfacing with Images Common Ports for interfacing in Electronics & Digital World In computer hardware, a port serves as an interface between the computer and other computers or peripheral devices. Physically, a port is a specialized outlet on a piece of equipment to which a plug or cable connects. Electronically, the several conductors making up the outlet provide a signal transfer between devices.   Ethernet port Ethernet over twisted pair using category 5 cable 8P8C IEEE 1394 interface Parallel port IEEE 1284 36 pin female on a circuitboard DB-25 connector commonly used for a parallel port PS/2 connector Mini-DIN connector Serial port DE-9 USB VGA connector D-sub 15 Digital Visual Interface DVI SCSI HDMI Minijack Phone connector ### Balancing Instructable Robot using arduino In this Instructable I wanted to show to you how to make a self balancing robot. What makes it unique is that its exterior is made to look like the Instructables Robot. Internally it works in the principle of PID, it is a very popular control system for maintaining a variable from fluctuating. In this instructable I have used the MPU6050 which is a gyroscope and an accelerometer in a single package. The gyroscope is used to find the angular orientation and the acceleration. For our application we just need the gyroscope data. To start off I will discuss the various applications and knowledge obtained from this project. Please vote for my entry in the "Instructable Robot Contest" if you find this instructable good. Project-Based Learnings: Knowledge of how to use the MPU6050 module. How to implement the data to balance the robot. How to implement control systems to your projects. ____________________________________________ Applications: This Instructable serves as an introduction to the various Control Systems. These Control Systems are also implemented in Segways and The Ball Balancing Robot. These Control Systems are also applied to PID Furnace Temperature Control, The Line Following Robot, etc. ____________________________________________ Proportional-Integral-Derivative System Advantages: This Control System should be used when the controlled element needs precise control. This balancing robot can be easily made by a Novice Arduino Programmer using this Control System. The tuned PID system is very flexible over a range of environments (i.e. balancing even when weight is added). ____________________________________________ This control system's efficiency depends on the tuning of three variables namely the Proportional constant, Integral constant and Derivative constant, So once you tune the variables accurate control of the robot is achieved. I have provided most of the instructions for making the robot. This robot is in the intermediate level of robotics so beginners shouldn't get frustrated because it for very challenging for Me!!! Step 1: Parts & Materials The material needed to make this balancing robot can be grouped into two categories as shown below: Electronic Components: Arduino UNO. L298 Motor Driver Module. DC Geared Motor (300RPM). MPU6050. Gear Motor Wheels. Jumper Wires (Male to Female). USB Cable. 4-Pin Connector. 9V Battery. 9V Battery Power Connector. 10k Potentiometer. Potentiometer Knobs. ____________________________________________ Other Parts: Acrylic Sheet. 90° Clamp or L-Clamps. Cable Ties. Soldering Iron. Solder Wire. Double Sided Tape. Yellow Chart Paper. Sketch pens. Scissors. ____________________________________________ Please note that I have not used Acrylic Sheet as mentioned but Hylam Sheet(Bakelite Sheet). It is very much similar to acrylic but more rigid and easier to cut. It is commonly used in India for Switchboard Boxes. It may or may not be available in your Country so I mentioned it as an Acrylic Sheet. Step 2: Making The Robot Chassis This step is for making the chassis parts which form the base of the robot. As I mentioned earlier I have not used the acrylic sheet but a Hylam Sheet. The base consists of two strips to which the motor is mounted and a rectangular base on which these strips are mounted in perpendicular. To prepare the Body follow these instructions. Step 1: In this Step, I cut the strips that support the motors. I've cut them with dimensions of 2cm by 8cm. This material is much stronger than the acrylic sheet. Step 2: When the sketch has been drawn, cut the pieces out using a Hacksaw or a Jigsaw cutter. The cutting process will produce a lot of dust. Cut the sheet in a well ventilated room. Step 3: Next comes the base which supports the two strips. Draw a Rectangle of about 14cm in width and 18cm in length. Then draw the mid-line for the base along the width as shown in the diagram. This line will serve as a guide line for fitting the strips. Step 4: Cut out this drawn part using the Hacksaw or the Jigsaw cutter as shown. Use a marker for reference and clean the board later to remove the marker lines. Step 5: Next draw two vertical lines as shown in the diagram. These lines are used for aligning the clamps of the motor. With this step we have finally completed the chassis components. The next step deals with the motor and wheel assembly. Step 3: Attaching the motors After cutting the chassis components next comes, assembling the motors with the strips we cut earlier, then attaching these strips to the bigger piece we cut using L-clamps. The motors need holes for the wires to pass through so they should also be cut in addition to the clamp holes. Step 6: Cut some double sided tape and stick it to one end of the strip as shown in the diagram. This method involves no clamping with nuts and bolts. Step 7: Remove the double sided tape top paper cover to reveal the other adhesive side of the tape. Place the motor on the tape so that it is parallel to the strip. Step 8: Then tighten the motor to the strip using cable ties. This ensure that the motor is firmly clamped to the strip. Step 9: Cut off the excess and Cable tie wire using either a wire stripper or scissors. Step 10: Fit the wheel into the motor and tighten the joint using a screw as shown. ____________________________________________ There you go you have completed mounting the motor onto the strip. Repeat the procedure for the second strip and you would have obtained two of the Instructable strong>Robot's legs with wheels. The final diagram shows the completed legs. Step 4: Finishing the Chassis With this page we will complete the chassis of the Instructable Robot. The prepared chassis is very rigid and stable and is capable of handling the weight of the battery and the electronics. The motors in the pictures are dirty, please excuse it since I have been using them for my other projects. Step 11: In this step I use a L-Clamp which is basically a piece I have in my childhood engineering set. You will be easily able to find out L-Clamps, a link to some clamps is also provided. Anyway place the clamp on top of the free end of the strip. Then mark the holes of the clamp using a marker. Step 12: Repeat the same procedure for the other motor strip. You will obtain two strips with holes marked and ready for drilling. Step 13: This step shows Me drilling the holes on both the motor strips. The holes are made by a 4mm drill-bit. Step 14: Before mounting the clamps on the strips, place the clamps on the main board as shown in the diagram. Then mark the holes using a marker for drilling. Step 15: This step shows Me drilling the holes on the base of the chassis. Note: I only drilled two holes in the previous picture but another hole is needed for the wires to pass through the chassis. So please make another hole. Step 16: On completing all these steps you will obtain the following assembled parts as shown in the diagram. Step 17: I have not provided any pictures of tightening the nuts and bots but once screwed in, it will look as shown in the diagram. ____________________________________________ After completing all these steps the finished chassis will look as shown in the last Figure. The chassis houses the Battery, Ultrasonic Sensors and The Electronics.This ends the mechanical work needed for this project. Step 5: Mounting the motors to the driver. Lets move on to wiring the electronics for the robot. The next few steps will have some Fritzing sketches, some additional images and a little description of the module we are using. So that you are aware of both the working and how to operate the module. The steps below show us how to wire the motors and fix the battery. Step 18: In this step I solder the wires to the motor terminals. Step 19: Pass the wires through the extra hole we drilled in the clamp as shown in the figure. Step 20: Place the module on the base and mark the holes using a marker. Step 21: In this step I make the using using a 4mm Drill bit. Step 22: Fix the module to the base using some nuts and bolts. This firmly fixes the module to the base. Step 23: Connect the motors to the motor terminals of the module and the 9V battery connector to the Power terminals of the Module. Step 24: Finally screw the terminals using a Screw-driver so that the wires are fixed.   For more detail: Balancing Instructable Robot using arduino ### Bidirectional Motor Control Using Arduino One of the simplest ways to get a motor to turn in both directions is by using a double-pole, double-throw (DPDT) relay. Along with the relay, this hookup requires two transistors and two Stamp pins, one for on/off control and the other for direction control. The diagram below contains the schematic for this setup. The DPDT relay is switching the direction of current flow through the motor to get it to turn in either direction. The direction control transistor can be a 2N3904 because most relays require much less than 100 mA through the coil to trip the contacts. A TIP120 can also be used for the direction control. A TIP120 is required for on/off control because it must be able to handle the motor currents. For very high current motors, replace the TIP120 on/off control with a low on-resistance FET or with a SPST relay. In the diagram, the location of the relay pins matches a top view of the DPDT relay sold in the Robot Store (Jameco 174378) and the Radio Shack 275-249A relay. The next diagram illustrates how to lay this circuit out. The pinouts shown are correct for the Jameco 174377 and Radio Shack 275-249A relays. Here is an example Arduino program that runs the motor for two seconds in one direction and then two seconds in the other direction. Example program The 10 ms pauses are to minimize noise spikes caused by turning off the motor and the relay at exactly the same time.   For more detail: Bidirectional motor control Using Arduino ### Chip has all analogue for engine management The 33813 is an engine control analog power IC intended for one cylinder motorcycle and other small engine control applications. The IC consists of five integrated low side drivers, two pre-drivers, a VRS (variable reluctance sensor) input circuit, a voltage pre-regulator using an external pass transistor, and two 5.0 volt internal regulators, one for the microcontroller (MCU) VCC supply and the other for use as a protected sensor supply. Also included is an MCU reset control circuit with watchdog, a ISO 9141 K-Line interface for diagnostic communication and a SPI (serial peripheral interface). The five low side drivers are intended for driving a fuel injector, a lamp, two relays or other loads and a tachometer. The pre-drivers are intended to drive IGBT or MOSFET transistors to control ignition coils, and/or a HEGO heater. The device is packaged in a 48 pin LQFP with an exposed pad. Features Designed to operate over supply voltage range of 4.5 V ≤ VPWR ≤ 36 V Logic stability guaranteed down to 2.5 V One fuel injector driver - typically 1.3 A One ignition IGBT or general purpose gate pre-driver One O2 sensor (HEGO) heater general purpose gate pre-driver Relay 1 driver, typically 2.0 A, can be used for fuel pump control Relay 2 driver, typically 1.0 A, can be used as power relay control Lamp driver, typically 1.0 A can also be used to drive an LED VPROT protected sensor supply tracks VCC +5.0 V regulator MCU reset generator - system integrity monitor (watchdog) VPP pre-regulator provides power for VCC and VPROT regulators Independent fault protection with all faults reported via the SPI ISO 9141 K-Line interface for communicating diagnostic messages Start-up/shut-down control and power sequence logic for power control Interfaces directly to MCU using a 5.0 V SPI and logic I/O Differential/single-ended VRS conditioning circuit with auto/manual selected thresholds and filter times with digital and tachometer outputs Keyswitch logic with provision for power relay and MCU controlled shutdown. For small petrol engines, Freescale has introduced an analogue mop-up chip to fire the ignition, pump the fuel injection, and read sensors in engine management systems. “Small engine makers are increasingly deploying electronic engine controls, including EFI or e-Carb and electronic ignition for motor bikes, motor scooters and power equipment,” said Gavin Woods, v-p of Freescale’s analogue division. “Current solutions rely mainly on discrete components. This device integrates the requirements of tier-one ECU [engine control unit] developers who supply motorcycle and scooter manufacturers.” There are two chips, both designed to work with a microcontroller to handle the digital side: “The ICs compliment and extend Freescale’s motorcycle ECU reference platform, which retains the MC9S12 microcontroller but benefits from further integration and improved diagnostic capabilities,” said Freescale. MC33813 is for one-cylinder engines, and has five low-side drivers and two pre-drivers. For more read: Chip has all analogue for engine management ### Fab Lab Barcelona SuperNode Add an output device to a microcontroller board and program it to do something. Class syllabus:: http://academy.cba.mit.edu/classes/output_devices/index.html [what i learned /am learning] _ Relearned Arduino installation. _ Work with DC motors and H-Bridge IC with Arduino; and its general concepts. _ About the various Fab versions of Arduino and their features and differences: hello.arduino, fabkit2.0/fabduino, barduino. _ How to make and program the hello.H.bridge.44 board to use a DC motor. _ Started learning how to make and program my own version of Arduino: hello.arduino and fabduino. _ Related to the past weeks, eventually! i learned what high byte and low byte mean. I had been quite confused with this, because High and Low, mean of course different things depending on context. I found the answer in the Arduino Cookbook, p:85, that Tomas Díez once recommended: If we consider a byte / 8 bits; the low byte are the four first [right to left] bits/digits, and the low byte are the second four bits/digits. Sometimes, as in our use of serial communication, it is convenient to break the bits in two parts. Then you usually need to put them together again. All this we have been finding in the C and Python scripts that we have been using; but i didn't understand it until now. A start bit and a stop bit have to be put in front and at the end to tell the computer how to interpret the data. Starting to work in the assigment, i realized we were missing in our local inventroy a part that was needed in all of the hello boards proposed for this week, which is the regulator. So i ordered them at digikeys together with some other materials that we will be needing soon. In the meanwhile we started working on one hand studying the boards, milling and stuffing them, and on the other working with arduino, and preparing our own arduinos at the lab to fabricate. Thanks to Luciano [Barcelona / barduino], Nuria and Ruben [fabduino / León], for their great help, as well as, of course, to all the preceding htmaa and Academy students for their tremendous projects and documentation. I have to mention, i like enormously the Arduino project. I consider it one of the most amazing things that has happened in the field of knowledge and production in the last decade. I might say that i had met David Cuartielles, one of the project leaders before he started in the project, and were using a server of him for some years in an independent media project that became quite relevant. I think that from now on we will try to work on two lines in electronics; on one hand we will make and test the Fab Academy prototypes, and on the other we will rely more on self-made-arduinos for the final project, as it seems easier for beginners; and also more accessible to work with in the future. We will see... [assignment development] [preparing, milling and stuffing the boards] For the assignment i wanted to use a board with the H-Bridge IC that professor Gershenfeld had praised in the class. The H_bridge allows to control higher-demanding device such as a DC or stepper motor, with the 5/3.3V and ca. 40mA supplied by the hello board [or the Arduino]. So i chose the first DC motor board - hello.H.bridge.44 -. I most probably will use motors for my final project, and this seems to be like a good starting point. To find out about some not so clear board components, i checked the .cad file, that indeed gives some info about it: IC2 = regulator_SOT23('IC2\n5V') Double checking the fab inventory, as mentioned, that it should be "IC 5.0 100MA LDO VREG SOT23" digikey ref. LM3480IM3-5.0/NOPBCT-ND - and i realized with some dissapointment we don't have them, and as mentioned, i ordered them, but still went on preparing the board. The other components we have already used in previous assigments, so that feel familiar. Planarity calibration notes for the iModela It might be not so easy to tell in the pictures, but this milling was truly high quality. We are still milling with the 0.2mm 45º mill. Speed was 40 mm/s; depth 0.01mm, just one milling layer. The mill was quite new. It was the third board milled with it. It took 1 hour and ten minutes to mill. The workflow has been the one we have eventually determined to work well with the available tools. 1/ Generating paths from png to dxf with fab modules. 2/ Making further offsets in Rhinoceros; approximately 0.06 from the interior path towards the outside + adding lettering. 3/ Exporting to .ai and importing it in iModela Creator. 4/ Fixing the FR1 board with double tape to the iModela platform. 5/ Carefully confirming planarity of the FR1 PCB set in the iModela; 7/ Setting the milling parameters as described above; 8/ Milling; 7/ Watching the milling process carefully and stopping it after the 0.01 or 0.02 mm layer has been milled. 9/ Washing the board and if necessary cleaning minor details with a precission knife; 10/ Cutting the board perimeter with a precission table-top saw. 11/ Applying lacquer to prevent oxidation. The second and/or third board i wanted to make this week are the hello.arduino.168 and the fabduino. For these two, again, i had to order new components, basically the ATmega168 smd microcontroller. Some weeks ago i had drawn in cad the ATmega168 and double checked the geometry just to see how tight it is and how much the milling machine has to be demanded. It looks to me like the Fabduino is even tighter than the hello.arduino, so i decided again to start from the "beginning" and try first the former, which i milled and stuffed, leaving some components waiting to leave space to be able to solder de micro as comfortably as possible. Milling the hello.arduino.168 board; performing a little surgery to it to get a quite nice result; the hello.arduino.168 milled board with an Arduino Uno. Stuffing the board, which had to remain waiting for some supplies. Monday early afternoon we got the supplies. Thursday to Monday by digikey, pretty excellent! And we went on with soldering. The pins of the Atmega168 are truly tiny... They make me almost dizzy... While waiting for the components i thought it a good idea to advance some with a regular Arduino board. I did find an example that actually uses an H-Bridge IC to control a DC - it is one of the projects in the excellent Arduino Projects Book edited among others by Massimo Banzi, Tom Igoe and David Mellis, the former very involved with the Fab Academy as we are using an ISP design by him. To start with i reinstalled the Arduino IDE without much trouble... Ubuntu 10.04, still has minor problems with it - managing the serial connection... The error message is omething like RXTX Warning: Removing stale lock file. /var/lock/LCK... which googling it, it seems i am not the only one with the same problem. It looks though that using arduino as root [sudo] lets me work ok; until now. Of course i have to update to 12.04, but i need some time to back up etc, that i cannot find... Hmmm. In order to better understand the working so the devices first i redrew the schematics and made a diagram of my own, for a project called "Pinwheel" that uses a DC motor and a Mosfet to control it. It was helpful, i have to say. Then i rewrote the code and compiled ok. Below the schematics - with some coloring - for and Arduino controlling a DC motor using a Mosfet [transistor], the above mentioned "Pinwheel" project. From the Arduino Projecs Book, p:95: "Transistors are components that allow you to control high current and high voltage power sources from the low current output of the Arduino. You can think of transistors as digital switches. When you provide voltage to one of the transistor's pins, called the gate, it closes the circuit between the other two pins, called the source and the drain. This way you can turn a higher current/voltage on and off with your Arduino." And this is the Arduino sketch that can run this configuration [written by to get some practice me following the instructions]: arduino_projects_09_pinwheel.   For more detail: Fab Lab Barcelona SuperNode ### Arduino based Bi-color LED Matrix Pong Game We have created two game project instructables so far using the jolliFactory Bi-color LED Matrix Driver Module D.I.Y kits we designed. This LED Matrix module is designed to be chain-able so you may daisy-chain the modules together to the number of modules you need to suit your project. You may check out these two game project instructables with the links below: Project to build a 2 LED Matrix tall Tetris game can be found at http://www.instructables.com/id/Arduino-based-Bi-color-LED-Matrix-Tetris-Game/ Project to build a 2 LED Matrix tall Snake game can be found at http://www.instructables.com/id/Arduino-based-Bi-color-LED-Matrix-Snake-Game/ Pong is one of the first computer games ever created. We came across a couple of Pong game projects built using potentiometers to control the paddles. Potentiometer is not expensive, easy to work with and thus is a great choice as an input device for Pong game projects. We have a few of these interesting Rotary Encoder - Illuminated (Red/Green) purchased from Sparkfun lying around for quite a while. As of writing this instructable, this part is available from Sparkfun (Part number: COM-10596) for U$2.95. You may check this part out at https://www.sparkfun.com/products/10596 For this instructable, we will be building yet another Pong game using two of the Bi-color LED Matrix Driver Modules daisy chained together driven by an Arduino Nano. Here, we will be using the Rotary Encoder - Illuminated (Red/Green) as the input device to control the game paddle. Rotary Encoder is much more challenging to implement as an input device as compared to the humble potentiometer. However, we would like to experiment with something new here and hope that those who have not dabbled with rotary encoders before will learn more about them. To build this project, basic electronics knowledge with electronics component soldering skill and some knowledge on using the Arduino are required. You may view the following YouTube video to see what we are building. Step 1: Overview of rotary encoder Rotary encoder may look like a potentiometer but they are totally different components. There are two main types of rotary encoders: absolute or incremental encoders. Absolute Encoders output the rotational angle using an absolute code. The rotational position can be detected by reading the code. Incremental Encoders output a pulse string according to the rotational displacement of an axis, and information such as speed, distance, and relative position could further be derived from it.   For more detail: Arduino based Bi-color LED Matrix Pong Game ### ADI aims ECG chip at consumer health monitors The AD8232 is an integrated signal conditioning block for ECG and other biopotential measurement applications. It is designed to extract, amplify, and filter small biopotential signals in the presence of noisy conditions, such as those created by motion or remote electrode placement. This design allows for an ultralow power analog-to-digital converter (ADC) or an embedded microcontroller to acquire the output signal easily. The AD8232 can implement a two-pole high-pass filter for eliminating motion artifacts and the electrode half-cell potential. This filter is tightly coupled with the instrumentation architec-ture of the amplifier to allow both large gain and high-pass filtering in a single stage, thereby saving space and cost. An uncommitted operational amplifier enables the AD8232 to create a three-pole low-pass filter to remove additional noise. The user can select the frequency cutoff of all filters to suit different types of applications. To improve common-mode rejection of the line frequencies in the system and other undesired interferences, the AD8232 includes an amplifier for driven lead applications, such as right leg drive (RLD). The AD8232 includes a fast restore function that reduces the duration of otherwise long settling tails of the high-pass filters. After an abrupt signal change that rails the amplifier (such as a leads off condition), the AD8232 automatically adjusts to a higher filter cutoff. This feature allows the AD8232 to recover quickly, and therefore, to take valid measurements soon after connecting the electrodes to the subject. The AD8232 is available in a 4 mm × 4 mm, 20-lead LFCSP package. Performance is specified from 0°C to 70°C and is operational from −40°C to +85°C. FEATURES and BENEFITS   Fully integrated single-lead ECG front end     Low supply current:     170 μA (typical)     Common-mode rejection ratio: 80 dB (dc to 60 Hz)     Two or three electrode configurations     High signal gain (G = 100) with dc blocking capabilities     2-pole adjustable high-pass filter     Accepts up to ±300 mV of half cell potential     Fast restore feature improves filter settling     Uncommitted op amp     See data sheet for additional features Analog Devices is targeting consumer body monitor designs with a heart-rate monitor analogue front end (AFE). The AD8232 AFE is designed to meet the ECG signal conditioning requirements of emerging fitness, portable/wearable monitoring and remote health monitoring equipment. “The intention has been to create a device which supports a range of heart rate and ECG monitoring applications ranging from consumer style fitness monitors to remote health management devices,” Jan-Hein Broeders of Analog Devices told Electronics Weekly. A feature of the front-end chip is its two-pole, high-pass filter that is tightly coupled with the IC’s instrumentation amplifier architecture, and an uncommitted operational (gain) amplifier that enables the user to employ multi-pole low pass filtering techniques to remove line noise and other interference. There is a reference buffer, right leg drive circuit and shutdown function. The AD8232 also includes user-selectable (AC or DC) leads-off detect circuitry that monitors when an electrode is disconnected from the patient or user, providing an alert to the system.   For more read: ADI aims ECG chip at consumer health monitors   ### LED Matrix Bike Safety Backpack using arduino Biking around cars can be a frightening thing, and staying visible at night is crucial for your safety. This tutorial will teach you how to make a custom LED Matrix Backpack that is much larger and brighter than traditional rear bike lights. Parts You'll Need: Individually-addressable RGB LEDs Arduino Pro Mini (or any Arduino, this one is just conveniently small.) Note that if you use the Pro Mini, you will need an FTDI cable to program it. 3-Conductor Conductive Ribbon (wire or conductive thread will work too but this stuff is nice) Thin Wire Basic soldering equipment (soldering iron, solder, etc.) Flux Pen (optional) Needle and thread Some nice cloth to go over the LEDs (optional) A backpack (or jacket! or whatever you want to attach this to.) To see videos of the finished project, click here! Michelle Leonhart @at0mbxmb | www.tinwhiskers.net Wearable LED Matrix by Michelle Leonhart is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Step 1: Learn the Basics of Programming an LED Matrix First things first, if you've never programmed an LED Matrix before, please check out my tutorial on How to Make an Individually Addressable LED Matrix. This will give you the foundation necessary to start this project. Step 2: Separate Your LEDs with the 3-Conductor Conductive Ribbon If you are made of money, you can skip this step and just use a ton of LEDs. But if you're like me and would rather save the cash, you can make a much bigger LED matrix with fewer LEDs by spacing them out. Decide how large you'd like your matrix to be, and how many LEDs you'd like per row/column. Depending on the size you want, snip your 3-Conductor Conductive Ribbon into pieces to separate out the LEDs. Once your ribbon is cut into the correct sized pieces, it's time to tin the tips. I highly recommend a Flux Pen. Flux helps solder flow easily onto your parts, and reduces the amount of time you have to leave the iron in contact with your project. This is especially crucial here, because the heat of your iron will melt the nylon in your ribbon if you hold it there too long. When you're done, there should be 3 tinned spots on both ends of the ribbon. Remember that both ends will be connected to LEDs. Step 3: Solder the First LED to your Arduino Your Arduino should have three wires coming from it: red (power) black (ground) blue (data) Think about how you want your Arduino to fit into your project in terms of aesthetics and function. (I chose mind to be in the top left corner for easy programming.) Tin the pads of one side of your LED, and solder the wires from your Arduino to your LED like so: Blue wire solders to the "DIN" pad on the left side. This stands for "Data In" Red wire solders to the "5+" pad on the left side. Black wire solders to the "GND" pad on the left side. Your LEDs may have a slightly different layout than mine. Compare yours to these from EpicTinker to see if they are the same. If not, you will have to mod your process accordingly. Step 4: Solder the Rest of the LEDs to Your Ribbon Just as you did with the ribbon, now tin the BOTTOM PADS on your LEDs. There are 6 pads total (3 per side), and each pad should have a little blob of solder on it when you're done. Again, using a flux pen will make this faster and easier. When your LEDs are tinned, they are ready to solder to your ribbon. Place your LED on TOP of your ribbon, with the tinned pads laying gently on top of the tinned tips of the ribbon. Use a tool to hold your ribbon down (NOT your hands! The ribbons will get hot!), and firmly press the tip of your iron into the TOP of the first pad on your LED until you see the solder flow between the pad and the ribbon. (Holding the tip of the iron at a slight angle while you do this is ideal.) Retract the iron, and continue to hold the ribbon down with a tool until the solder cools. Once it's cool, give your ribbon and your LED a tug to ensure the connection is strong. Repeat this for all pads, being mindful not to let the solder connect the pads together. Connected pads will cause a short circuit, and possibly break your project. Make as many indivdual rows of LEDs as will fit in your chosen configuration, with as many LEDs per row as you'd like.   For more detail: LED Matrix Bike Safety Backpack using arduino ### TI chip combines body analysis in weighing scales Description The AFE4300 is a low-cost analog front-end incorporating two separate signal chains: one chain for weight-scale (WS) measurement and the other for body composition measurement (BCM) analysis. A 16-bit, 860-SPS analog-to-digital converter (ADC) is multiplexed between both chains. The weight measurement chain includes an instrumentation amplifier (INA) with the gain set by an external resistor, followed by a 6-bit digital-to-analog converter (DAC) for offset correction, and a circuit to drive the external bridge/load cell with a fixed 1.7 V for ratiometric measurements. The AFE4300 can also measure body composition by applying a sinusoidal current into the body. The sinusoidal current is generated with an internal pattern generator and a 6-bit, 1-MSPS DAC. A voltage-to-current converter applies this sinusoidal current into the body, between two terminals. The voltage created across these two terminals as a result of the impedance of the body is measured back with a differential amplifier, rectified, and its amplitude is extracted and measured by the 16-bit ADC. The AFE4300 operates from 2 V to 3.6 V, is specified from 0°C to +70°C, and is available in a TQFP-80 package. Features Weight-Scale Front-End: Supports up to Four Load Cell Inputs On-Chip Load Cell 1.7-V Excitation Voltage for Ratiometric Measurement 68-nVrms Input-Referred Noise (0.1 Hz to 2 Hz) Best-Fit Linearity: 0.01% of Full-Scale Weight-Scale Measurement : 540 µA Body Composition Front-End: Supports Up To Three Tetra-Polar Complex Impedance Measurements 6-Bit, 1-MSPS Sine-Wave Generation Digital-to-Analog Converter (DAC) 375-µArms, ±20% Excitation Source Dynamic Range : 0 Ω to 2.8 kΩ 0.1-Ω Measurement RMS Noise in 2-Hz BW Body Composition measurement : 970 µA Analog-to_Digital Converter (ADC): 16 Bits, 860 SPS Supply current: 110 µA Texas Instruments has introduced an analogue front end IC for use in weighing scales that incorporate also body composition meters. The AFE4300 incorporates two separate signal chains, one targeting weight measurement and the other targeting body composition analysis, with a 16-bit, 860sample/s analogue-to-digital converter (ADC) multiplexed between them. The device’s three BCM channels are designed to enable segmental body impedance analysis (BIA) for measurement across the body including hand to hand, foot to foot, or even hand to foot, which increases overall measurement accuracy. The device also includes an option to accurately measure Extra Cellular Water (ECW) and Intra Cellular Water (ICW) using bio-impedance spectroscopy (BIS). The AFE4300 consumes less than 1mA, operating from a 2V to 3.6V power supply. It is available in a 12mm x 12mm TQFP-80 package. For more read: TI chip combines body analysis in weighing scales ### IWAVE OBD II SECURED EDGE ANALYTICS ENABLING IOT IN FLEET MANAGEMENT Everyone desires to own a vehicle, but the business of leading a fleet of vehicles is never an easy task. From the safety of the fleet, route optimizing, trip analysis to timely maintenance, fleet owners have a lot in their hands to deal with regularly. With the ever-increasing prices of vehicles and fuel, enterprises are often under pressure to utilize fleet efficiently and optimize their useful life. iWave presents a smart IoT solution to address all fleet management concerns and help differentiate businesses with improved administration and efficiency. iWave’s revolutionary OBD II secured edge analytics offers an innovative way to transform traditional fleet management practices. The device provides quality real-time insights that help fleet managers make smart decisions and drive profitable outcomes for their business. The OBD II IoT solution offers high accuracy location tracking, real-time vehicle diagnostics, driving condition analysis, and enhanced safety features that make fleet management a cakewalk. The industry winning OBD II device is now updated with CE/FCC, GCF, E-Mark, KOMINFO Certifications and supports new features such as CAN FD, SAE J1939 Protocol and Secure FOTA. The OBD II device opens up a multitude of interesting possibilities in fleet management.  An X-ray vision into your fleet ensures vehicle uptime The device reads diagnostics trouble codes (DTC) that can be analysed to determine vehicle parameters such as fuel efficiency, mileage and engine performance. The data can be examined to detect faults precisely and helps to implement corrective measures on time. Minor defects can be corrected in-house, thereby reducing maintenance costs and ensuring vehicle uptime. Be in touch with your fleet anytime, anywhere. High-accuracy location tracking facilitates complete visibility over your fleet activities. Access to up to four concurrent GNSS constellations including GPS, GLONASS, Galileo and Beidou enhances the overall tracking performance of the module. Accurate real-time insights helps remotely monitor distance, speed, time, route, idling etc. and enable optimal utilization of the fleet. Ensure your fleet are in right hands always Analysing driving habits helps track common practices and monitor harmful behavior. The device features an advanced 9 axis sensors support that help detect harsh driving patterns such as over speeding, hurried braking, engine revving, etc. Drivers are encouraged to follow safe driving, thereby ensuring fewer accidents on the road. Read more: IWAVE OBD II SECURED EDGE ANALYTICS ENABLING IOT IN FLEET MANAGEMENT ### An FTIR Touchscreen Device The DJ Touch is a portable turntable touchscreen and interactive LED display. Our end goal was to produce a low cost touchscreen device, and demonstrate its application in a common consumer application. Out of an interest in electronic music, and with the knowledge of deejaying's close roots to electronics, we decided to develop a touch screen turntable. The device relies on the concept of frustrated total internal reflection (FTIR) to detect user motion on an acrylic surface. Using a camera system and infrared LED setup, these blobs of infrared light are read into the microprocessor and detected using a dynamic thresholding algorithm. The data is streamed over serial using the FT232R USB connection and a compatible program on the user interface emulates the turntable motion. We have also written up additional code that uses the blob tracking for simple mouse movement. Using MATLAB's powerful image processing library, more complex interactions can be coded. High Level Design There has been a plethora of touchscreen gadgets in today's market of consumer electronic goods. Smart phones and portable entertainment devices are expected to ship with some form of touch screen functionality. In particular, several multitouch projects have been successfully completed leveraging on the FTIR effect. These include and have served as an inspiration for our build. DJ Touch demonstrates the ability to build an interactive display using minimal processing resources for low cost. At the heart of the device is an ATMEGA644 which is connected to a CMOS camera and a LED driver. With only a RS232 serial port to communicate data to the computer, we had to push most of the image processing to the ATMEGA644, outputting only a stream of bits representing the background/foreground data of the screen. The LED display allows the user to confirm that the touch screen is functional, if the computer is not used. On the computer end, there is a serial read-in code that translates the binary bits of information into a full image. Applications can be developed to use the data to track motion across the screen, or as demonstrated in the main DJ application. The system relies on the program Virtual DJ Home, which simulates a DJ deck. Configuring the appropriate keyboard inputs to the turntable actions, the user's rotational motion across the surface of the acrylic is translated into rotations of the turntable. This allows the user to "scratch" music. There is also an additional play/pause button, located in the center of the touch screen. The project relies on I2C, SPI and serial communication protocols. I2C is used to program the camera to allow for optimal image capture of the touchscreen. SPI is used to drive the LED display, controlling up to a maximum of 64 LEDs using only four input wires from the microcontroller. The serial communication data stream is custom formatted in order to minimize the time needed to send data over the connection. With the limited bandwidth of the serial port connection, our device speed is limited. With the addition of processing from the MATLAB front end, the low sampling rate can be compensated for, applying correlation to determine user movement. Using a reduced version of the code, which only outputs rotational speed, we can speed up the rate of image sampling and increase the sensitivity of the device. For demonstration purposes, however, we felt that streaming the full image was essential to show the proper operation of the touchscreen. As the device's sole output is through the serial port connection, there were no applicable standards by which our device had to conform. To our knowledge, while the term "multitouch" is patented by Apple, the concept of FTIR to track user finger presses across a surface predates the patent application.   Hardware Our device consists of a touchscreen and a LED display. As a significant part of the project required setting up the FTIR touchscreen, we have documented the process of obtaining blobs on the acrylic surface. In addition, we will discuss hardware concerns regarding the LED matrix build and the physical camera characteristics. FTIR Screen Frustrated Total Internal Reflection is a multi-touch methodology developed by Jeff Han (Multi-Touch Interaction Research, 2006). Light directed from a material of a smaller refractive index to a material with a higher refractive index at an angle above that of a critical sum will be reflected totally. Light from the infrared LEDs directed into the acrylic is trapped in the material. When the user presses on the surface, the refractivity of the user's finger frustrates the light rays, breaking the TIR effect. This is visible as bright blobs on the camera. The choice of acrylic was paramount for the application. We began with a piece of acrylic that was of insufficient thickness. In addition, we had manually machined the parts, leaving the edges unclear. After determining that the minimum thickness for the TIR effect was 3/8", we ordered a custom 1" 6"x6" acrylic that was polished. The acrylic can be tested with visible light. The amount of pressure needed to get the FTIR to be visible depends on state of the user's fingers. We noted that wet/oily fingers helped the effect. Future work might consider using a compliant coating of silicon, so that this issue is resolved. To maximize the effect, we painted the interior of the frame with white paint. This surface is highly reflective and allows the light to be reflected back into the acrylic material. We also taped the sides of the material to block out light shining directly from the LEDs. The device is constructed on a plywood base, fixing the distance between the screen and the camera. We intended to construct this to be a vertical box, for a more intuitive touchscreen surface. However, as the minimum distance between screen and camera is about 8", the structure would be more stable in a horizontal position. CMOS Camera The CMOS camera is directed at the touchscreen, such that the field of vision includes the entirety of the 6"x6" screen. The screen is built from a piece of 1" thick clear acrylic with a frame embedded with 9 infrared LEDs. The LEDs output at a peak frequency of 940nm and have a radiant intensity of at least 25mW/Sr. This is the minimum intensity recommended for the FTIR effect to be observed. We began with small cheap LEDs with only 15mW/Sr, but could not observe the FTIR effect. Debugging this effect was troublesome because although most camera phone cameras can view infrared (as purple light), the FTIR blobs are not bright enough to be visible on them. While we originally began with an ordinary webcam, modified to view IR wavelengths, we were unable to interface the Atmega644 with the device. We purchased the C3038 CMOS camera, which has been a popular choice in previous ECE4760 projects (Customizable Virtual Keyboard, Scanalicious) and has extensive documentation on its use. We made careful note to purchase the model that does not include the IR-cut filter. Consumer cameras often include a visible light filter that rejects infrared wavelengths, but often the image sensor on it is sensitive to the infrared spectrum. In addition, the camera in monochrome mode is sensitive to the desired wavelength of light for our application, or 940nm. The camera can be additionally programmed using I2C communication. The customization allowed us to maximize the camera's sensitivity to IR. Further details on the data capture of the image stream are given in the Software section of this report.   For more detail: An FTIR Touchscreen Device ### Dust Cleaner will blow away dust for a 1/3 price Compressed gas for cleaning - Dust cleaner, brings huge savings for the price of small limitations. The name of this article might also be like „Dust Off or Dust Cleaner? Both are the sprays - compressed air for dust removal. Dust Off is a well known, long-term well-proven spray for cleaning from dust and other loose dry particles. Dust Off provides absolute safety in a form of non-flammability. However, this indisputable plus is also reflected in a price. That´s why we bring you also a cheaper alternative - spray Dust Cleaner, which provides practically the same service like Dust Off, but for approximately only a 1/3 price. Even though compressed (liquefied) gas Dust Cleaner is flammable, but it represents much cheaper solution for all cases, when there´s no risk of ignition. for example when we work with a switched-off device, which isn´t hot at the same time and there´s no source of sparks near. That´s why it´s suitable for example for cleaning of:   For more detail: Dust Cleaner will blow away dust for a 1/3 price ### Arduino Scouting Robot Summer Project: Arduino Scouting Robot Arduino Scouting Robot Part 1 * 12,9,5 volt power supply recharge it with a 12-volt charger keep power switch on to charge * 2 DC motors operate at 7.2V with a maximum current draw of 3 amps * 2 Digital Servos operate at 6V with a maximum current draw of ~1 amp each the pwm wires are connected to the pwm pins on the arduino (pin 2 for pan and 3 for tilt) * 8-amp DC-DC step down converter input: 9v output: 7.2v to feed the motors The outputs are connected to the 10-amp motor driver (located on the underside of the robot) * 3-amp DC-DC step down converter input: 9v output: 6v to feed the servos * 10-amp dual motor driver input for logic side: 5v and GND (the GND is controlled by arduino pin 23) and Four logic controllers (Two for direction and two for on/off) input for motor power side: 7.2v and GND (GND is controlled by the Buz101s mosfet) and Four motor wires (from two dc motors) * arduino mega2560 input: 9v to dc jack or 5v to pin * xbee from robot(wireless transceiver) input: 5v (when mounted to usb apdater) note: the 5v line from the xbee is needed for the other robot peripherals (LRF and Motor Driver) also * xbee from laptop input: usb * 9DOF sensor input: 5v output: i2c data to arduino {SDA(white) SCL(green)} * Laser Range Finder input: 5v output: serial to arudino {TX1(white) and RX1(yellow)} * Camera input: 2 AA batteries output: to SD card snapshot control by shorting the cam wires which is control by an 2n7000 mosfet switch (arduino pin30) must ground the source lead of the mosfet * Power mosfet Buz101s These control the grounding of 1) servos and 2) DC motors for startup stabilization reasons. Without these mosfet switches the servo and motors will move briefly when the power is on due to the arudino startup glitch (normal) Arduino Scouting Robot Part 2 Arduino Scouting Robot Part 3 Arduino Scouting Robot Part 4 ### AAEON BOXER-8120AI: AI MONITORING FOR FEVER AND PPE COMPLIANCE In light of the ongoing pandemic, nations around the world are putting into place various practices to help curtail the spread of COVID-19. One common rule among these is the requirement to wear masks or personal protective equipment (PPE) out in public, as well as barring anyone with a fever. However, observing large numbers of people in such detail can be overwhelming for security teams and staff. AAEON’s BOXER-8120AI is being deployed by developers to assist in monitoring for such breaches of newly imposed rules. On April 3rd, the task force in charge of the Taiwan CDC’s efforts, the Central Epidemic Command Center (CECC), imposed new rules requiring the wearing of masks on public transportation, with stiff fines for failing to comply. Also included were rules restricting access to those whose body temperature is above 37.5°C (99.5°F). With an average of over two million passengers each day, monitoring and enforcing these rules on Taipei’s Metro system is daunting to say the least. Utilizing artificial intelligence, authorities can reduce the workload of the task, allowing security and staff to effectively monitor passengers without requiring a ramping up of personnel. Some developers are deploying the BOXER-8120AI embedded edge platform to power this innovative and important role. Features Nvidia Jetson TX2HMP Dual Denver 2 + Quad ARM A57Support AAEON ACLinux 4.9, Compliance with Ubuntu 18.048GB LPDDR4, 32GB eMMC 5.1RS-232 x 2, USB3.0 x 2, OTG x1HDMI 2.0 x 1, LAN x 4 (Intel i211*3, Native*1)Micro-SD x 1, Remote On/OffPower input: 10~24V Traditional monitoring equipment usually involves only using infrared cameras. However, the surrounding environment can interfere with readings, leading to missed reports and false alarms, with the requirement to adjust data afterwards. Utilizing AI technology with deep learning, the application can combine both facial recognition with thermal detection to accurately detect those who are violating mask requirements, or have fevers. Read more: AAEON BOXER-8120AI: AI MONITORING FOR FEVER AND PPE COMPLIANCE ### Rubik's Cube Solver using arduino This robot that can solve a Rubik's cube using Arduino. I learned how to solve a Rubiks cube last year, and I was also into Arduino, so eventually I ended up with an idea to make my own Rubik's cube solver. Like many people searching for "Rubik's Cube Solver" on Google, one of the first robots I found was the Tilted Twister design by Hans Andersson: [Play Video] I looked around at some other Rubik's cube solvers, but I liked that design because of it's (relative) simplicity, so I built a similar version of it with popsicle sticks, an Arduino and 2 servos. In the end, my robot takes about 20 minutes to enter the cube state and solve.   Step 1: Materials Electronics: - Arduino UNO R3 - 2 servos (I used Hitec HS-311's) - wires - USB cable You can get all of these parts from any robotics store. I got them from canadarobotix.com Hardware: - popsicle sticks - wooden skewers - thin plywood - wooden wheel (skewer must fit inside the hole) - hot glue - paper towel roll Software: - Arduino IDE - (Algorithms in C++) - Python 2.7+ and Tkinter - (GUI) - Pyserial Step 2: Electronics Wiring up the servos to the Arduino is pretty straightforward 1. Connect the yellow (signal) wires from the push and rotation servos to pin 6 and 9, respectively. 2. Connect the positive and negative wires to the 5v power source and ground. Sometimes the servos had jitters, so I think a few capacitors could have smoothed out the current. Step 3: Mechanical Design I looked at a few designs but settled on the Tilted Twister because it only required 2 servos to operate, which wasn't as complex mechanically as other robots such as the Cubestormer. So here's how the mechanism basically works: 1. A platform holds and rotates the cube. 2. The arm pushes and holds the cube. When I first tried to build the solver, I tried to follow building instructions here: But I was pretty lazy and didn't follow the instructions, so I made a wooden replica with a few tweaks. I haven't documented every step of the build process, but I think you can reproduce the tilted twister design with a few tweaks: 1. Slanted sticks to prevent the cube from snagging. 2. To build the arm joints, - I drilled a hole into ends of the popsicle sticks. - I cut out 2 cm of a wooden skewer. - I inserted the skewer into the sticks - Glued wooden wheels that act as washers on each end. Honestly building the physical solver was a lot harder and complex than I expected, so if you have any questions on how I built the solver, just ask. Step 4: Arduino Sketch - Cube Solving Algorithm [Code: https://github.com/matt2uy/Cube-Solver] So basically the code I wrote uses combinations of pushes, holds and platform rotations to apply algorithms to the cube. There are 3 main parts of my code: the algortihm, GUI (enter cube state) and the serial communications Let's start with the Arduino sketch. It basically uses algorithms to manipulate the cube colours: 1. There are 6 char arrays represent each face of the cube. 2. Using a basic layer by layer method of solving the Rubik's cube, I made a function, cube_decide(), that goes through each stage or the cube solving process. 3. Within each stage, such as cube_decide_cross() (solving the cross), the program would check for specific locations of colours in the cube, and if an algorithm was matched with the condition, cube notation like 'U' (Up) or entire algorithms, like fix_cross_instance_1() would be run. 4. The cube notation and algorithms control the servo functions, such as push_cube() or rotate_one(). Here's a basic overview of the code structure (layers of abstraction): Cube Decide functions < Cube Algorithms < Cube Move functions < Servo functions < Move Function One major breakthrough I had was that I actually simulated the cube's movements in the program. The program reassigns the values in the arrays to simulate and cube rotation. This way, the program can simulate the cube move before it physically executes it. Step 5: Python GUI I needed a better way of entering the cube state than directly typing them into the Arduino sketch, so I got the idea of creating a GUI from this robot: [Play Video] Because I'm new to making Tkinter GUI's (Graphical user interface) and didn't want to make one from scratch, I found a tic tac toe GUI here. Then I turned the 3x3 array of buttons into something resembling a cube and added a few buttons. I also added buttons that would change colour each time they were clicked. Finally I made 5 more windows that would pop up one after the other, and transfer the colours entered into a local array in the script. However, I really slapped the code together in a mess, since I simply copy and pasted 6 separate windows, with almost identical functions. Any suggestions on how I could clean up the code are welcome!   For more detail: Rubik's Cube Solver using arduino ### ARM Cortex M3 plus 24bit DACs for 4-20mA loops The ADuCM360 is a fully integrated, 3.9 kSPS, 24-bit data acquisition system that incorporates dual high performance, multichannel sigma-delta (Σ-Δ) analog-to-digital converters (ADCs), a 32-bit ARM Cortex™-M3 processor, and Flash/EE memory on a single chip. The ADuCM360 is designed for direct interfacing to external precision sensors in both wired and battery-powered applications. The ADuCM361 contains all the features of the ADuCM360 except that only one 24-bit Σ-Δ ADC (ADC1) is available. The ADuCM360/ADuCM361 contain an on-chip 32 kHz oscillator and an internal 16 MHz high frequency oscillator. The high frequency oscillator is routed through a programmable clock divider from which the operating frequency of the processor core clock is generated. The maximum core clock speed is 16 MHz; this speed is not limited by operating voltage or temperature. The microcontroller core is a low power ARM Cortex-M3 processor, a 32-bit RISC machine that offers up to 20 MIPS peak performance. The Cortex-M3 processor incorporates a flexible, 11-channel DMA controller that supports all wired communica-tion peripherals (SPI, UART, and I2C). Also integrated on chip are 128 kB of nonvolatile Flash/EE memory and 8 kB of SRAM. The analog subsystem consists of dual ADCs, each connected to a flexible input mux. Both ADCs can operate in fully differential and single-ended modes. Other on-chip ADC features include dual programmable excitation current sources, diagnostic current sources, and a bias voltage generator of AVDD_REG/2 (900 mV) to set the common-mode voltage of an input channel. A low-side internal ground switch is provided to allow power-down of an external circuit (for example, a bridge circuit) between conversions. The ADCs contain two parallel filters: a sinc3 or sinc4 filter in parallel with a sinc2 filter. The sinc3 or sinc4 filter is used for precision measurements. The sinc2 filter is used for fast measure-ments and for the detection of step changes in the input signal. FEATURES and BENEFITS Analog Input/Output -- Dual 24-bit ADCs (ADuCM360) -- Single 24-bit ADC (ADuCM361) -- Programmable ADC output rate (3.5 Hz to 3.906 kHz) -- See data sheet for additional features Flexible input mux for input channel selection to both ADCs Microcontroller -- ARM Cortex™-M3 32-bit processor -- Serial wire download and debug -- Internal watch crystal for wake-up timer -- 16 MHz Oscillator with 8-way Programmable Divider Memory -- 128k Bytes Flash/EE Memory, 8kB SRAM -- In-circuit debug/download via serial wire and UART Power Consumption, MCU active mode -- Core consumes 290 μA/MHz -- Overall system current consumption of 1.0 mA with core operating at 500 kHz (both ADCs on, input buffers off, PGA gain of 4, one SPI port on, and all timers on) Power consumption, power down mode: 4μA (wake-up timer active) Analog Devices has designed a high-resolution data acquisition chip for 4-20mA current loops around an ARM Cortex-M3 core. Called ADuCM360, the chip includes dual 4ksample/s 24-bit sigma-delta DACs and flash memory. “This device draws 1mA of operating current and is designed for direct interfacing to external 4-20mA loop-powered precision sensors in industrial process control,” said ADI. “Low sleep current further enhances use in battery-powered applications.” The DACs share an 11 input multiplexer, and each has its own programmable gain amplifier. Both converters can operate in differential or single-ended modes. “The ADuCM360 is ideal for applications where the second A/D converter is needed for temperature compensation on the sensor or for dual-sensor applications,” said the firm. For more read: ARM Cortex M3 plus 24bit DACs for 4-20mA loops ### TRINAMIC INTRODUCES THE TMCM-1617 SERVO CONTROLLER MODULE TRINAMIC Motion Control GmbH & Co. KG  announced the TMCM-1617 single-axis servo controller module designed for servo drives with 18A RMS and 8 to 28V DC supply voltage. Achieving high-current loop frequencies to minimize current ripple, the potted module enables smaller electric drives with high dynamics, according to the company. The TMCM-1617 also supports a range of encoders for position feedback, including incremental encoders, analog encoders, and digital hall sensors as position feedback. According to the company, the TMCM-1617 completed a highly accelerated life test (HALT) with operational temperatures ranging from -40°C to 85°C and mechanical vibrations of up to 30 GRMS. Features And Benefits: Servo drive for 3-phase BLDC motors8V to 28V DC supply voltageUp to 18A RMS motor currentRS485, CAN and EtherCAT interfacesCANopen and TMCL protocolIncremental and analog encoder feedbackDigital HALL sensor feedbackReference Switch InputsCooling via aluminum housingL/W/H: 36.8mm x 26.8mm x 11.1mmWeight: ca. 24g Read more: TRINAMIC INTRODUCES THE TMCM-1617 SERVO CONTROLLER MODULE ### Connecting an IR Sensor Using Arduino Schematic Since the IR Sensor uses a light sensor, the schematic is very similar to that of the light sensor. The only difference is the addition of an IR LED and that the IR detector requires connection to 5V and ground. Breadboard Setup To setup the sensors you will need: 2x IR Detectors 2x IR LEDs in housings 2x 2kΩ resistors (red-black-red) 2x 220Ω resistors (red-red-brown) 2x red jumper wires 2x black jumper wires 2x signal jumper wires (can be of any color) First we need to make sure that the IR LEDs are in their housings : 1) Insert IR LED into larger housing part with leads sticking out. 2) Press the LED firmly into the housing. 3) Place the smaller housing part over the LED. Placing the IR LEDs Now we can place the IR LEDs into the breadboard. Note that the anode (longer lead, rounded edge) is the positive side and the cathode (shorter lead, flat edge) is the negative side. Reversing the polarity may damage the LED. Placing the IR Detectors Now we can place the IR Detectors into the breadboard. The middle prong of the collector should be on the same bus as the LED's cathode (in order to tie it to Ground). Resistors Remember, the IR LED's are still a form of LED and will need a resistor in place to limit the amount of current flowing through them. This is especially important to remember with infrared LEDs because the wavelengths of light they emit are not visible to the human eye; it may be difficult to determine if they are working or not.   For more detail: Connecting an IR Sensor Using Arduino ### SAELIG INTRODUCES AARONIA AARTOS DRONE/UAV DETECTION SYSTEM Customizable drone detection systems with 360deg coverage, wideband sensing to 20GHz, and AI software to avoid false alarms  Saelig Company, Inc. has introduced the Aaronia AARTOS Drone Detection System, which can sense airborne drone activity with a virtually unlimited detection range. The AARTOS DDS monitors the entire frequency spectrum (e.g. 100MHz – 20GHz) hundreds of times per second with 360° dome coverage for airborne activity, and is fully customizable depending on the application and situation. It can be configured as a portable or mobile system, or a fixed station with an unlimited number of sensors to form a network covering large areas, and there are no inherent limitations in terms of altitude and elevation. All systems can be linked to a single monitoring center with remote-control for each individual setup. The latest AARTOS DDS V6 generation can detect a DJI Phantom 4 FCC drone at 50 km or more, but the specific range depends on factors such as drone type and topography. The AARTOS DDS uses AI techniques to distinguish between drones and other airborne objects, minimizing the likelihood of false alarms. It is an entirely passive system and does not emit any radiation which could interfere with other infrastructure. Detecting a drone may take the DDS system between 10μs to 500ms, depending on the configuration and the number of IsoLOG 3D DF antenna arrays. A drone even can be detected as soon as its operator establishes a radio link (i.e. the drone and/or the remote control are switched on). The process of pairing, radio link, take-off, and climb usually takes between 30 seconds and five minutes, depending on the drone model (e.g. the DJI Mavic Pro). This allows the AARTOS DDS a unique early-warning capability by detecting the drone even before it can take off. Optical, acoustic or radar-based drone detection solutions are not able to perform this kind of early-warning detection. The AARTOS DDS can even detect the drone operator’s location. It can track the operator’s movements even if drone and operator are operating at different frequencies or bands. With two systems it is possible to accurately estimate the distance of the drone, and an AARTOS DDS system with two or more antennas can also estimate the drone’s altitude. Read more: SAELIG INTRODUCES AARONIA AARTOS DRONE/UAV DETECTION SYSTEM ### Learn how to use 7-Segment LED Display using Arduino 7-Segment LED Display is a very useful component, but also a very confusing and difficult piece to use for beginners. It won’t be difficult once you get it working for the first time. This is what you will get at the end of the tutorial (part one): It basically consists of 7 LEDs, (8 if include decimal point). Just like controlling a single LED, we need to connect each ‘segment LED’ to a Arduino digital pin. Here is the circuit diagram of the LED display: You might notice, there are 2 different type of them, don’t be scared by them, because in the market, the “Common Cathode” type is the most popular so you won’t need to care about the other type. Basically, all you need to do is to connect each LED with a pin, and connect the shared Gnd connector to the ground pin. Next you will need to program it, so  required LEDs are switched on to display different number. Here is my circuit diagram: Coding: I have created a class for using the 7 seg LED display, it’s not a complete working class, but gives a few very useful basic functions. Feel free to expand it and add new useful functions, or create your own class. Seven_Seg_LED_Display.h: Major Components in ProjectArduino LED For more detail: Learn how to use 7-Segment LED Display using Arduino ### COMBAT COVIN-19, JLCPCB WILL BE HERE WITH YOU! JLCPCB is a leading PCB Prototype company in China are attracting increasing people around the world to be our customer and at the same time, we also get much support from them to be the Better JLCPCB, especially during such a tough period due to COVID-19. 1.  JLCPCB Is In Production JLCPCB tried all we can do to maintain business operations to assist in providing these valuable services to combat the COVID-19 outbreak. In order to reduce the concentration of staff, we arrange staff to implement shift system; To ensure a healthy working environment, we disinfect the factory twice a day. To ensure the health of the staff, all workers can enter the workshop only when their temperature is measured and confirmed healthy. Also, we will insure two masks for the production staff every day. 2. JLCPCB Is Shipping Until now, human beings are still suffering from the COVID-19, many countries adopt the state lockdown policy against the COVID-19 outbreak which also causes the rapid decrease of flight quantity. Our shipping is facing enormous challenges. But we didn’t give up, we are constantly developing a variety of logistics channels to adjust the policies to ensure that our customers can receive the goods on time during the outbreak, due to vacation collided with the epidemic situation, a serious shortage of manpower, many employees in JLCPCB volunteer to go to the factory to help the delivery. 3. Public Benefit Activities In addition to these efforts, JLCPCB does whatever can be used for workforce recovery and disease prevention and we have deemed an essential service to manufacturer PCB boards and electronics for essential life-saving/preserving equipment and development which is needed in Wuhan, China and all over the world. Also, we began work on public benefit activities that can be used for workforce recovery and disease prevention like donating money to our local medical agency and delivering mouth masks to our collaborator other countries to their local residents and medical agency. Read more: COMBAT COVIN-19, JLCPCB WILL BE HERE WITH YOU! ### Tutorials for Arduino Getting Acquainted with Arduino Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments. Arduino can sense the environment by receiving input from a variety of sensors and can affect its surroundings by controlling lights, motors, and other actuators. The microcontroller on the board is programmed using the Arduino programming language (based on Wiring) and the Arduino development environment (based on Processing). Arduino projects can be stand-alone or they can communicate with software running on a computer (e.g. Flash, Processing, MaxMSP). AttributesThanks to Jeremy , for this articles Tutorial 01 for Arduino: Getting Acquainted with Arduino You can download the parts list and the code from this episode on my website: http://jeremyblum.com/2011/01/02/ardu... Tutorial 02 for Arduino: Buttons, PWM, and Functions You can download the parts list and the code from this episode on my website: http://jeremyblum.com/2011/01/10/ardu... Tutorial 03 for Arduino: Electrical Engineering Basics You can download the parts list and the code from this episode on my website: http://jeremyblum.com/2011/01/17/elec... Tutorial 04 for Arduino: Analog Inputs You can download the parts list, code, and schematics from this episode on my website: http://jeremyblum.com/2011/01/24/ardu... Tutorial 05 for Arduino: Motors and Transistors You can download the parts list, code, and schematics from this episode on my website: http://jeremyblum.com/2011/01/31/ardu... Tutorial 06 for Arduino: Serial Communication and Processing You can download the parts list, code, and schematics from this episode on my website: http://jeremyblum.com/2011/02/07/ardu... Tutorial 07 for Arduino: I2C Communication and Processing You can download the parts list, code, and schematics from this episode on my website: http://jeremyblum.com/2011/02/13/ardu... Tutorial 08 for Arduino: SPI Interfaces You can download the parts list, code, and schematics from this episode on my website: http://jeremyblum.com/2011/02/20/ardu... Tutorial 09 for Arduino: Wireless Communication You can download the parts list, code, and schematics from this episode on my website: http://jeremyblum.com/2011/02/27/ardu... Tutorial 10 for Arduino: Interrupts and Hardware Debouncing You can download the parts list, code, and schematics from this episode on my website: http://jeremyblum.com/2011/03/07/ardu... Tutorial 11 for Arduino: SD Cards and Datalogging You can download the parts list, code, and schematics from this episode on my website: http://jeremyblum.com/2011/04/05/tuto... Tutorial 12 for Arduino: RFID Card Reading You can download the parts list, code, and schematics from this episode on my website: http://jeremyblum.com/2011/07/tutoria... Tutorial 13 for Arduino: Liquid Crystal Displays (LCDs) You can download the parts list, code, and schematics from this episode on my website: http://jeremyblum.com/2011/07/31/tuto... Tutorial 14 for Arduino: Holiday Lights and Sounds Spectacular! You can download the parts list, code, and schematics from this episode at element14: http://www.element14.com/community/do... Tutorial 15 for Arduino: GPS Tracking More info, including schematics, code, and sample data can be found on my website: http://www.jeremyblum.com/2012/07/16/...   For more detail visit: Getting Acquainted with Arduino ### L293 Motor Driver and H-Bridges The most common method to drive DC motors in two directions under control of a computer is with an H-bridge motor driver. H-bridges can be built from scratch with bi-polar junction transistors (BJT) or with field effect transistors (FET), or can be purchased as an integrated unit in a single integrated circuit package such as the L293. The L293 is simplest and inexpensive for low current motors, For high current motors, it is less expensive to build your own H-bridge from scratch. ITP Physical Computing has a terrific tutorial on using an Arduino and an L293 to control a bi-directional motor. The Twin Cities Robotics Club has an *excellent* tutorial on H-bridges, and complete detail on how to build your own $5.00 H-bridge good for several amps. From the same source is a detailed tech note on PWM speed control of a motor using an H-bridge and a PIC microcontroller The L293 is an integrated circuit motor driver that can be used for simultaneous, bi-directional control of two small motors. Small means small. The L293 is limited to 600 mA, but in reality can only handle much small currents unless you have done some serious heat sinking to keep the case temperature down. Unsure about whether the L293 will work with your motor? Hook up the circuit and run your motor while keeping your finger on the chip. If it gets too hot to touch, you can't use it with your motor. (Note to ME2011 students: The L293 should be OK for your small motor but is not OK for your gear motor.) The L293 comes in a standard 16-pin, dual-in line integrated circuit package. There is an L293 and an L293D part number. Pick the "D" version because it has built in flyback diodes to minimize inductive voltage spikes. The L293D can be purchased for somewhere between $2 and $3 (quantity one) from www.mouser.com (PN 511-L293D) or www.digikey.com (PN 296-9518-5-ND). For complete information, consult the Unitrode L293 data sheet (PDF file, 626Kb). A more recent, improved specification, pin-for-pin compatible chip is recommended for new designs: the TI SN754410NE motor driver. Available from mouser.com, Mouser part number 595-SN754410NE, $1.88. Data sheet (PDF file, 172Kb). The pinout for the L293 in the 16-pin package is shown below in top view. Pin 1 is at the top left when the notch in the package faces up. Note that the names for pin functions may be slightly different than what is shown in the following diagrams. The following schematic shows how to connect the L293 to your motor and the Arduino. Each motor takes 3 Arduino pins. (See notes below for a two Arduino pin solution.) If you are only using one motor, leave L293 pins 9, 10, 11, 12, 13, 14, and 15 empty. Assume you have only one motor connected with the enable tied to Arduino Pin 3, and the two direction controls tied to Arduino Pins 4 and 5.   For more detail: L293 Motor Driver and H-Bridges ### Dual diode controller two high power Schottkys replaces Description The LTC®4353 controls external N-channel MOSFETs to implement an ideal diode function. It replaces two high power Schottky diodes and their associated heat sinks, saving power and board area. The ideal diode function permits low loss power supply ORing and supply holdup applications. The LTC4353 regulates the forward-voltage drop across the MOSFET to ensure smooth current transfer in diode-OR applications. A fast turn-on reduces the load voltage droop during supply switchover. If the input supply fails or is shorted, a fast turn-off minimizes reverse-current transients. The controller operates with supplies from 2.9V to 18V. If both supplies are below 2.9V, an external supply is needed at the VCC pin. Enable inputs can be used to turn off the MOSFET and put the controller in a low current state. Status outputs indicate whether the MOSFETs are on or off. Features Low Loss Replacement for Power Diodes Controls N-Channel MOSFETs 0V to 18V Supply ORing or Holdup 1μs Gate Turn-On and Turn-Off Time Enable Inputs MOSFET On-Status Outputs 16-Lead MSOP and DFN (4mm × 3mm) Packages Linear Technology’s LTC4353 is a 0V to 18V dual diode controller that is designed to replace two high power Schottky diodes to provide low loss ORing of multiple power sources with minimal disturbance to supply voltages. The device regulates the forward voltage drop across external N-channel mosfets to ensure smooth current transfer between supplies in diode-OR applications. In low voltage systems, a slow handoff between controllers results in a voltage droop during supply switchover. The turn on time is less than 1µs. In the event the input supply fails or is shorted, a fast turn-off minimises reverse current. The LTC4353 provides individual enable inputs that can be used to ensure priority to the main supply when supply voltages are within a mosfet body diode drop of each other.   For more read: Dual diode controller two high power Schottkys replaces ### 125 KHz RFID OPERATED DEADBOLT using arduino This is a fun an very useful project that allows easy access into any door with a deadbolt. I have another version that is used on my garage door and uses the same basic circuit and fobs. The system operates in the RF region at 125 KHz. Fobs are used to actuate one of two relays on the main control board. With each scan the deadbolt toggles - if it is unlocked it locks and the red LED comes on, if locked it unlocks and the green LED comes on. One relay causes the deadbolt motor / mechanism to lock the door, the other causes the door to unlock. A regular key can still be used and the deadbolt can still be locked and unlocked manually if desired. Operating the circuit with the key or manually operating it with the deadbolt knob can cause it to fall out of sync with the controller and indicate locked when it is actually unlocked or vice versa. To correct this just cycle the unit with the pushbutton on the deadbolt housing or flip the deadbolt knob the opposite way. I have thought about adding some limit switches to eliminate this problem. Perhaps in some future version I will implement them. I have been using this project for a couple of months with very few hiccups. It is fun to build and adds a definite 'nerdivity' to my home. I based the project on a store-bought electronic deadbolt. It was battery operated and had a keypad on the outside to allow entry with a user defined code. I removed all of the electronics from the indoor housing keeping only the electric motor and mechanism. The mechanism has a built-in clutch that prevents damage should the motor remain on for too long when cycling. My motor is set for a cycle time of about 1.25 seconds. This project is based on the Kwikset Powerbolt Model # 907 15 SMT CP. It cost $69.97 at Home Depot. Almost any battery operated deadbolt will work. It needs some type of clutch mechanism to protect from over-cycling. This was the cheapest unit that Home Depot sold. You may get lucky and find an open box item or a defective unit that can be salvaged. It looks neater than trying to build the motor drive myself. In future versions I will try to place all components inside the plastic housing where the OEM circuit board was located. There many similar projects you can research on the internet. Do a search for 'RFID ARDUINO DEADBOLT'. There a few on Instructables as well. A Universal RFID Key by drj113 available in Instructables is a good read on RFID theory. Going over this material will be time well spent. Step 1: Operation Here is an example of the device in operation. It is a bit noisy as the gears grind inside. It is virtually impossible to lock yourself out of the house using one of these. I had done this one too many times with my door key, so I disabled the locking mechanism of every door knob lock in my home. I only use deadbolts for locking doors now and am happy to report I have never locked myself out since. Back Door RFID Card Operation.mp4(516x290) 14 KB Step 2: The FOBS Here is a picture of the FOBs used in this project. They are fully encased and are almost indestructible. A look inside shows a coil and microchip. There are two form factors that can operate the device, a FOB or a card. I keep the card version in my wallet and a FOB on my key chain. I just take my wallet an wave it over the reader and it unlocks. I use the same card / FOB to access my garage and my house. There will be more about this in the Arduino sketch section later. Power and data are delivered and retrieved via the antenna coil. There are no batteries inside to ever fail. This version contains an identification number and is read only. Other types are available that can have information stored on them. That would require a different reader than the one used here. I have yet to experiment with the read / write type. This technology is finding it's way into our everyday lives at breakneck speed. Step 3: Prototyping And Breadboarding This is the experimental version of this project. The microcontroller is an ATMEGA 328 loaded with a program called a bootloader. It is the bootloader that makes it an Arduino. It took some time to work out the kinks, but I enjoyed learning along the way. This version has an LCD display that when scanned shows the name associated with the FOB. It also shows fault messages like 'FOB Not Recognized' and 'Welcome Home Bill'. I thought adding a ladies voice to it might be cool. I will wait to add that to a doorbell project that I am pondering. Step 4: Sub Assemblies A quick shot of the subassemblies needed to build the project. Don't let the complexity scare you away. Build and test each piece one at a time. You may want to stop along the way and experiment. If you are new to Arduino there vast amounts of tutorials available online. The best one is the official Arduino website at http://www.arduino.cc/. Breadboarding the unit first can be helpful in working out the bugs. Step 5: Circuit Boards And Major Components I built two boards for this project. One has the Arduino microcontroller on with all input / output connectors attached. The Adruino is in a socket mounted on a breakout style board called RBBB from ModernDevice.com. It allows the resonator, voltage regulator, reset switch, power jack and power conditioning in one convenient place. Power for the entire project is fed into this board from a wall-wart (9VDC @ 1A) AC adapter. Power before the 7805 regulator is taken to run the motor. Power after the 7805 regulator and filtering is used to power everything else. Note the blue shrink wrap on the 7805. This was removed after testing and a small heat sink added in it's place. I have about 20 of these RBBB boards in my lab and this one was changed out sometime during construction. The RFID reader itself is located on the small green circuit board on the lower left end of the controller board. It comes with a rectangular coil of wire which is the antenna. I housed it inside a plastic project box. You can read details about it's construction below. Be sure the use the UART type and not the WEIGAND. Only the UART will work with the code I have written for this project. I like to use pre-made jumpers in my projects. They are very cheap and allow quick connect / disconnect during construction and debugging. The Arduino RBBB board above uses these and it makes for efficient work. Step 6: Parts Layout - Control Board The main board is located inside a beige box labeled CPU / INTERFACE MODULE. I could not think of a better name so I'll stick with this for now. Anybody have any ideas? When I refer to the main board I am speaking of the large perf board. There is also an Arduino board that I have been calling RBBB. This is what the manufacturer calls it. Both boards are located in the hinged box hanging to the left of the deadbolt enclosure. Step 7: Schematics The red circled numbers denote Arduino pin numbers. If you like, you can build the entire project on one piece of perfboard or create a PC board layout. When communicating with the Arduino chip you must unplug the connector labeled RX. You will get a fault from the Arduino software if you leave this wire connected while attempting to communicate. This pin is one of two that are used to send serial data to and from the RFID reader board to the Arduino. In normal operation this pin must be connected. I have placed a male pin on the circuit board with a female connector going to the RX pin on the Arduino circuit board. This pin is labled TX on the green RFID board and is connected to RX on the Arduino board. Simply unplug it, upload your sketch, plug it back in and all should be well. The motor is wired using two single pole double throw relays. In the normally closed position both relays connect both motor terminals to - causing no movement. If relay A is energized and relay B is not then motor pin A will be connected to + and pin B will be connected to - causing the motor to spin. If this condition is reversed and relay A is not energized and relay B is energized then motor pin A is connected to - and motor pin B is connected to + causing the motor to spin in the opposite direction. In the unlikely event that both relays are energized then both motor pins will be connected to + causing no movement of the motor. When you are done assembling the project and you find the motor works backwards from your expectations, just reverse the polarity to the motor. If you have a connector like I had on mine just unplug it and plug it back in the other way around. I received some great advice from fellow builder steveastrouk concerning motor noise. He recommends adding a bridge rectifier and 100 nF cap to guard against excess motor noise. I believe mine came from the factory with a cap across the motor leads but when I desoldered everything to add the wire cables, I forgot to replace it. Soon I will add a modified schematic to reflect the changes he recommends. The schematic shows a 100nF cap across the motor leads, but the cap is located on the main control board. It should be directly accross the motor leads. Step 8: Control Board Assembly Notice the red and black dots on back of the board. They indicate positive and negative power supply rails. It is very easy to get them mixed up during assembly. The relays, RFID receiver board, LEDs and miscellaneous connectors are all mounted on this board. You can use whatever construction method your imagination can come up with. Creating a universal PC board with all major parts on it might be an efficient approach if you are planning to build more than one. Wiring is not critical since only control signals are being used. The antenna coil is the only exception as it sends both power and data to and from the RFID board. My antenna coil is mounted about 14 inches away from the RFID board and has proven to be quite reliable.   For more detail: 125 KHz RFID OPERATED DEADBOLT using arduino ### NXP introduces tiny mosfet in leadless package Description N-channel enhancement mode Field-Effect Transistor (FET) in a leadless medium power DFN2020MD-6 (SOT1220) Surface-Mounted Device (SMD) plastic package using Trench MOSFET technology. Features and benefits Trench MOSFET technology Very fast switching Small and leadless ultra thin SMD plastic package: 2 x 2 x 0.65 mm Exposed drain pad for excellent thermal conduction Tin-plated 100 % solderable side pads for optical solder inspection Applications Charging switch for portable devices DC-to-DC converters Power management in battery-driven portables Hard disk and computing power management NXP Semiconductors has introduced its first mosfet in a 2mm x 2mm low-profile DFN (discrete flat no-leads) package. The package has tin-plated, solderable side pads which will offer the advantage of optical soldering inspection. According to the supplier, the pads also improve solder connection compared to conventional leadless packages. The PMPB11EN and PMPB20EN 30V N-channel mosfets are the first of more than 20 devices housed in the DFN2020MD-6 (SOT1220) package. Both mosfets have a maximum drain current (ID) of greater than 10A, and Rds(on) values of 12mOhm typ and 16.5mOhm typ at 10V. Package height is 0.6mm. The DFN2020 package is eight times smaller than standard SO8 packages.   For more read: NXP introduces tiny mosfet in leadless package ### 12V SLA LEAD ACID BATTERY CHARGER USING BQ24450 This project has been developed to charge SLA (Lead Acid Batteries) . It helps to charge 12V Lead-acid battery up to 12Ah in capacity. Specific current output is possible by altering the current sense resistor.  The BQ24450 chip contains all the necessary circuitry to optimally control the charging of valve-regulated lead-acid batteries. The IC controls the charging current as well as the charging voltage to safely and efficiently charge the battery, maximizing battery capacity and life. Depending on the application, the IC can be configured as a simple constant-voltage float charge controller or a dual-voltage float-cum-boost charge controller. The built-in precision voltage reference is especially temperature-compensated to track the characteristics of lead-acid cells and maintains optimum charging voltage over an extended temperature range without using any external components. The ICs low current consumption allows for accurate temperature monitoring by minimizing self-heating effects. The IC can support a wide range of battery capacities and charging currents, limited only by the selection of the external pass transistor. The versatile driver for the external pass transistor supports both NPN and PNP types and provides at least 25mA of base drive current. In addition to the voltage- and current-regulating amplifiers, the IC features comparators that monitor the charging voltage and current. These comparators feed into an internal state machine that sequences the charge cycle. Some of these comparator outputs are made available as status signals at external pins of the IC. These status and control pins can be connected to a processor, or they can be connected up in flexible ways for standalone applications. Read more: 12V SLA LEAD ACID BATTERY CHARGER USING BQ24450 ### How to connect a servo to the Arduino Servo Cable The continuous rotation servos that come with the BOE Shield-Bot have a 3-wire cable for connecting it to the power and controller. The black wire is the ground, the red wire is the power (positive) and the white wire (sometimes yellow, depending on the servo) is the signal wire. The signal wire is used to send the control signal to the servo. All three wires run together into a single, standard hobby servo connector. Wiring the Connection with a Breadboard To help you to understand how the servo connections work, we are going to show you how to hand wire the connections. First we are going to use the two 3-pin headers to connect the servo cables to the breadboard. To do this we are going to need five jumper wires; functionally the wires can be of any color, but to follow the circuit we recommend that you have one black wire, one blue wire, one yellow wire, and two red wires (left). Next we want to look at the schematic for the connections (right). As you can see, both servos have their black wires connected to ground and their red wires connected to 5V. However, the white signal wires each connect to a different Arduino pin. The left servo gets connected to digital pin 10, while the right servo gets connected to digital pin 11. This is because we want to be able to control the servos independently. Since the black wires are both being connected to ground (called 'common ground'), we can connect both of the black wires to one ground port. Likewise, the two red wires can be connected together to the a +5 volt port (since they are both using +5 volts). The two white signal wires, however, will be using two different signal pins in order to control the servos independently and should not be wired together. BOE Shield-Bot Shield connections While hand wiring the connections is not hard, it does take up a large amount of space on the breadboard that could be used for other components. Thankfully, the BOE Shield-Bot Shield has four connections on the shield that allow you to plug the servo connectors directly into the board. On the shield (near the edge of the breadboard) you will see a group of pins shielded by plastic. These are the servo pins. When connecting the servos, always make sure that they are correctly orientated (as noted on the shield's silkscreening; the black wire should be closest to the breaboard). Plugging the servos in the wrong way could cause a short and damage the servo (and possible the Arduino). The servo bank is wired to the Arduino's digital pins 10, 11, 12 and 13. You can tell which pin the signal is connected to by the small number near the signal wire of the plug.   For more detail: How to connect a servo to the Arduino ### Arduino Boards Selector Tool Having difficulty in selection of arduino boards?. Now use our Arduino Selector tool. Filter your specs under the table.   ### “Smart” lithium-ion battery would warn users if it is going to ignite There have been numerous cases of lithium-ion batteries catching fire in everything from mobile phones and laptops to cars and airplanes. While the odds of this occurring are low, the fact that hundreds of millions of lithium-ion batteries are produced and sold every year means the risk is still very real. Researchers at Stanford University have now developed a "smart" lithium-ion battery that would provide users with a warning if it is overheating and likely to burst into flames. Lithium-ion batteries consist of a carbon anode and lithium metal-oxide cathode that are separated by an ultrathin polymer. This separator is porous to allow the lithium ions to move between the electrodes that are contained within a flammable electrolyte solution through which the lithium ions flow. But if particles of metal or dust find their way into the separator at the manufacturing stage, or if the battery is charged too fast when the battery is too cold, lithium ions can build up on the anode and form fibers known as dendrites. If these dendrites penetrate the separator and come into contact with the cathode, the battery can short circuit, igniting the flammable electrolyte solution.   For more detail: “Smart” lithium-ion battery would warn users if it is going to ignite ### Microchip zero-drift op amp is low power for medical Description The MCP6V11/1U family of operatioinal amplifiers provides input offset voltage correction for very low offset and offset drift. These are low power devices, with a gain bandwidth product of 80 kHz. They are unity gain stable, have no 1/f noise, and provide superior CMRR and PSRR performance. These products operate with a single supply voltage as low as 1.6V with a quiescent current of only 7.5 uA. Features Zero Drift architecture Maximum offset of only 8 uV Maximum offset drift of 50 nV/C No 1/f noise Low Power operation Small SC-70 and SOT-23 packaging Microchip has introduced zero-drift operational amplifiers which can operate with a single supply voltage as low as 1.6V and a quiescent current as low as 7.5µA. For low power medical diagnostic systems the MCP6V11/31 op amps are designed on a self-correcting architecture which provides a maximum input offset voltage of 8µV for low-offset and low-offset drift, enabling maximum accuracy across time and temperature. The MCP6V11 offers 80kHz of gain bandwidth product, with a low typical quiescent current of only 7.5µA. The MCP6V31 provides 300kHz of gain bandwidth product, coupled with a low typical quiescent current of 23µA. These single amplifiers are available in small 5-pin SOT-23 and 5-pin SC-70 packages.   For more read: Microchip zero-drift op amp is low power for medical ### Conversational Gloves using arduino This is what came out of my attempt at combining some of my favorite tools and themes...Grasshopper, 3D printing, kinetic motion, and linguistics. I put these gloves on my friends, asked them to tell me a story, and used Grasshopper to record the data from their hand gestures. While these gloves are far from precise instruments, they still produced some interesting forms which I later 3d printed. Step 1: Grasshopper Script I used the Firefly add-on in order to receive input from Arduino and Kinect in Grasshopper. Two Arduino Megas track finger positions and hand rotation while a Kinect tracks each hand's movement through space. Step 2: Specifics Three dimensional shapes were made in Grasshopper by extruding a pentagon through space. Each vertex on the pentagon corresponds with a finger. The more a finger is bent, the further the vertex moves inward. The accelerometer on the back of the hand controls the overall rotation of the polygon. Of course, the accelerometers are not meant to know their spatial position so the resulting geometry is very much an abstraction of the gesture and not a completely accurate representation. Step 3: In the above picture, I bend my pointer finger. As a result, the Y value from the accelerometer decreases, and so does the radius value of the corresponding vertex, causing it to move inward. A similar effect happens with the other fingers (as shown below). For more detail: Conversational Gloves using arduino ### ADI claims lowest power accelerometer Description The ADXL362 is an ultralow power, 3-axis MEMS accelerometer that consumes less than 2 μA at a 100 Hz output data rate and 270 nA when in motion triggered wake-up mode. Unlike accelerometers that use power duty cycling to achieve low power consumption, the ADXL362 does not alias input signals by undersampling; it samples the full bandwidth of the sensor at all data rates. The ADXL362 always provides 12-bit output resolution; 8-bit formatted data is also provided for more efficient single-byte transfers when a lower resolution is sufficient. Measurement ranges of ±2 g, ±4 g, and ±8 g are available, with a resolution of 1 mg/LSB on the ±2 g range. For applications where a noise level lower than the normal 550 μg/√Hz of the ADXL362 is desired, either of two lower noise modes (down to 175 μg/√Hz typical) can be selected at minimal increase in supply current. In addition to its ultralow power consumption, the ADXL362 has many features to enable true system level power reduction. It includes a deep multimode output FIFO, a built-in micropower temperature sensor, and several activity detection modes including adjustable threshold sleep and wake-up operation that can run as low as 270 nA at a 6 Hz (approximate) measurement rate. A pin output is provided to directly control an external switch when activity is detected, if desired. In addition, the ADXL362 has provisions for external control of sampling time and/or an external clock. FEATURES and BENEFITS Ultralow power -- Power can be derived from coin cell battery -- 1.8 μA @ 100 Hz ODR, 2.0 V supply -- 3.0 μA @ 400 Hz ODR, 2.0 V supply -- 270 nA motion activated wake-up mode -- 10 nA standby current High resolution: 1 mg/LSB Built-in features for system-level power savings: -- Adjustable threshold sleep/wake modes for motion activation -- See data sheet for additional features Low noise down to 175 μg/√Hz Wide supply and I/O voltage ranges: 1.6 V to 3.5 V -- Operates off 1.8 V to 3.3 V rails Analog Devices has revealed a 2?A three-axis MEMS accelerometer, claiming it to be the lowest powered yet. 2µA is for operation at 100Hz update rate, while ‘motion sensing wake-up’ mode requites only 300nA, and there is a 10nA standby. The chip has been dubbed ADXL362, and applications are expected in wireless sensor networks and wearable motion detectors. “This low power consumption allows the ADXL362 to be used in applications that require battery life expectancy of months or years, and where battery replacement can be impractical or dangerous to the equipment or operator,” said ADI. To save false wake-ups, on-chip circuits distinguish between different kinds of motion. and an internal FIFO memory “allows system designers to record data and stream long data sets, reducing processor load and saving additional system power”, claimed ADI. For more read: ADI claims lowest power accelerometer ### Pneumatic Inverted Pendulum Construction Mechanical structure Compressed air comes from air compressor and goes in the proportional valve. Coming out from the proportional valve, there are two branches of air flow (one is compressor air, the other one is exhausted air) which connect to the air cylinder (pneumatic actuator). The pneumatic actuator connects to a cart (the aluminum box) where the pendulum is attached, and underneath the cart lies the carrier, which guides the cart along straight line. The rotational encoder is inside the cart, and its shaft is fastened throught the cart. The pendulum is attached to the shaft and is able to rotate 360 degrees. At the back side of the cart, a linear encoder is attached. For more detail please refer to VIDEO 1. Note: the flow control valve is unused. Control circuit board Arduino is used as the data acquisition board and control unit. Signals from the linear encoder and rotational encoder are acquired into the Arduino, and then an output voltage is calculated, which will then control the proportional valve through a Digital Analog Converter and Operational Amplifier. The circuit schematic diagram is shown below: Note that the "black green red yellow" in linear encoder diagram are just merely the color of wires. You might have different ones, but after watching VIDEO 3, it should be clear on how to use a linear encoder--the connection and programming are similar to rotational encoder. The operational amplifier should be connected to the +12 and -12 power supplies (not depicted). As noted above, if using separate power supplies, they must share a common ground. Arduino Visit arduino.cc to learn more. Rotational encoder The rotational encoder used in this project is S1-1250-250-I-N-D (more detail available in TABLE 1). This encoder has 1250 counts per 360 degree (2*pi radians). Therefore, we have: 1250/(2*pi) = angle_count/alphaWhich gives us: alpha = 0.00503*angle_count (unit: radian)And the angular velocity could be estimated via Alternatively, a moving average can be utilized, in which an array of the last x average values are stored, and the average of them is taken. This is more computationally heavy, but may filter out some of the noise. How to read an encoder: When you rotate the encoder's shaft, there will be signals from Channels A and B. Channels A and B are square waves with the same amplitude and frequency, but offset by 90 degrees. Note that when rotating in a different direction at the rising edge of channel A, channel B signal will be different--say, if rotating clockwise results a low valve of channel B at the rising edge of channel A; then when rotating counterclockwise, at the rising edge of channel A, channel B will give a high valve. Linear encoder Inside the black box of the linear encoder, there is a rotational encoder. The black box travels along a track. Therefore, linear encoder and rotational encoder are the same thing--there are also channel A and B in linear encoder, and their signals are the same as rotational encoder. The stroke of air cylinder is 0.1512m, and the linear encoder results 2993 counts travelling that distance. So, we have: 2993/0.1512 = pos_count/x_cWhich gives us: x_c = 0.0000505*pos_count (unit: meter)And we could estimate cart velocity using Digital-analog converter and operational amplifier The DAC in used is DAC0808, and the operational amplifier in used is LM324. Basically what Digital Analog Converter (DAC) does is: given a digital signal from Arduino, DAC outputs an analog signal, which is used to control proportional valve. But because the DAC's output is current and has very little power, we need an amplifier to drive the proportional valve. DAC0808 is an 8-bit DAC, and we give VREF = 12V. If we want a 6.6V output, here is how to calculate the digital value for it: For more detail: Pneumatic Inverted Pendulum ### Piezo buzzer Sonitron SMA-13LV deploys maximum from a minimum 80 dB acoustic signal at only 3V power supply and a really miniature size place this new component into a top class. Belgian company Sonitron and its top-level products ar probably familiar to you from our articles and from our offer in this segment. We continue in increasing of standard stock types and this time we have here an extraordinary interesting type – SMA-13LV, interesting mainly for low-voltage applications. Series of buzzers marked as "SMA" is known by its variousness, as we find here types with loudness of 75-98 dB, THT and SMT versions, and versions with a stable, as well as intermittent signal. Various sizes from 13 to 30 mm with a pitch of 7.5 to 20.32 mm enable to select the right type for a given application. In general, bigger types provide a more loud signal, but it depends on a concrete type. This series is suitable for general use – everywhere, where a reliable buzzer is necessary, including industrial conditions.   For more detail: Piezo buzzer Sonitron SMA-13LV deploys maximum from a minimum ### Arduino Robot With PS2 Controller (PlayStation 2 Joystick) In this tutorial, I'll show you how to use a wireless PlayStation 2 (PS2) controller and an Arduino Uno pilot a robotic tank. Story An Arduino Uno board was used at the core of this project. It receives commands from the wireless controller and sets the speed of the motors. Other development boards might also be used (NodeMCU, Firebeetle, etc.), and the principles presented in this tutorial can be applied on other models of robots and gadgets. I've previously designed a Blynk controlled robotic tank PS2. It connects to a Wi-Fi network and receives commands from Blynk server. A smartphone running Blynk app was used as a remote control, and different input methods were used: push buttons, sliding bars and even smartphone's accelerometer. You can find more about this project here: https://www.hackster.io/igorF2/wi-fi-controlled-robot-using-wemos-d1-esp8266-and-blynk-464198 I've also made some experiments with voice commands. It might be usefull if you want to remotelly control a robot without using your hands, or if you want to made it accessible for someone with limited movements. One might think of a robotic voice controlled wheel chair, for instance. A DIY robotic kit was used, along with some of my favourite tools: Adafruit.io, IFTTT and Arduino IDE. Full instructions here: https://www.hackster.io/igorF2/wi-fi-voice-controlled-robot-using-google-assistant-79802c You can use different kits or even desing your own robots using simple materials, without the need of using complex tools such as 3D printers and laser cutting machines. You can find an example on one of my previous tutorials: https://www.hackster.io/igorF2/widc-wi-fi-controlled-fpv-robot-8f1e09 Step 1: Tools and Materials The following tools were used in this project: Solder iron and wire  (link / link). The DC motors already came with wires soldered to its terminals... But it will eventually break and you might have to resolder it. So consider having a good solder iron and wire nearby. EVA foam sheet  (or other non-conductive material). The robot chassis I used in this project is made of aluminum, and circuit boards are installed on this metal parts. I used a layer of foam sheet between the boards and the metal plate to avoid possible short-circuits. Double sided tape It was used for glueing the foam sheets to the circuit boards, and for the installation of the H-Bridge module. Scissors, for cutting some foam sheet rectangles. I used the following hardware parts for my project: Arduino Uno based dev board (link / link / link / link). It's used as the main controller of the robot. It is really easy to use and program with Arduino IDE, great for beginner on electronics and programming. L298N dual channel H-bridge module (link / link / link / link). This module allows the 3.3V signals from the Wemos (or an Arduino) to be amplified to the 12V needed for the motors. DIY Robot Chassis Tank (link). This awesome kit has with everything you need to built a tank: two DC motors, gears, tracks, bolts, nuts, etc. It already comes with the tools need for assembling the chassis, which is great for beginners! PS2 Wireless Remote Control (link). This videogame controller can send commands wirelessly to a receiver, which can be interfaced with an microcontroller using serial communication. 18650 3.7V batteries (x3) (link / link). I used to power the whole circuit. This tank uses 12V motors. I used three 3.7V batteries in series for powering them. 3S 18650 battery holder (link / link / link). It can hold three 18650 batteries in series, and can be easily be attached to the back of the tank. 18650 battery charger (link / link). Your batteries will eventually run out of power. When that happens, a battery charger will come to your rescue. Jumpers (link / link). I used 6 male-female jumpers for signals between the h-bridge an the Wemos, and 2 male-male jumpers for 5V and Gnd. You might need more if you plan to add some sensors. Type-B USB cable. You'll need this for uploading your code. Most of the boards already come with its own cable. The links above are only a suggestion of where you can find the items used in this tutorial (and maybe support my future tutorials). Feel free to search for them elsewhere and buy at your favorite local or online store. Step 2: Assembling the Robot The first part of this project was the assembly of the robot structure. In previous projects I developed the structure of my own robot, using easily accessible materials (without the need for complex tools, 3D printers or laser cutting machines). You can find this project in the link below: https://www.hackster.io/igorF2/widc-wi-fi-controlled-fpv-robot-8f1e09 Robot Structure Later I decided to give a chance for a robotic  kit obtained from an online store. You can find a link to the robot chassis at the following link: http://bit.ly/2ycI8fP. If you're looking for a kit, I think it's a good option! I used it in two other tutorials, as you can see on the links bellow: https://www.hackster.io/igorF2/wi-fi-controlled-robot-using-wemos-d1-esp8266-and-blynk-464198 https://www.hackster.io/igorF2/wi-fi-voice-controlled-robot-using-google-assistant-79802c At first it seemed that the assembly would be complex or that I would run into problems like the lack of parts (given the amount of parts that make up the kit). But this kit really surprised me! All the pieces seem to me of good quality, and several spare parts accompanied the kit. Thus, a screw lost underneath the workbench won't make it impossible to carry out your project, which I found to be excellent (especially after losing a couple of screws). Another positive point is that all the tools needed to mount the robot are included in the kit (a couple of Allen wrenches and the screwdriver). I believe this makes the kit excellent for starters who doesn't have lots of tools! As a negative aspect I would highlight the lack of documentation. The robot's assembly manual (a spreadsheet file in Chinese) is not extremely user friendly, and there isn't a lot of tutorials online for that tank. And so I decided to document the process of assembling my robot in the video above! Another point of attention concerns the material of the robot structure. The base is entirely made of aluminum, which can cause some short circuit if the pins of the printed circuit boards touch the frame. There are other online kits that you can use. You can even maker your own structure, as I described bellow. Step 3: Wiring Up the Circuit A power pack made of three 18650 batteries was installed on the back of the robot. It provides 11.1V (3 x 3.7V) to the robot. That's enough to power the 12V DC motors. A L298N dual channel H-bridge was used for the control of the motors. It receives some 5V signals of the Arduino board, and provide higher voltages for the motors. It also allow the motors to run in both directions, depending on the combination of those input signals. Each device was connected according to the schematics. Follows a list of the pins you'll need to connect: Arduino Uno inputs/outputs: Digital pin 3 => H-Bridge ENA pin Digital pin 5 => H-Bridge IN1 pin Digital pin 4 => H-Bridge IN2 pin Digital pin 8 => H-Bridge IN3 pin Digital pin 7 => H-Bridge IN4 pin Digital pin 6 => H-Bridge ENB pin 5V pin => H-Bridge 5V pin Gnd pin => H-bridge Gnd pin Digital pin 10 => PS2 receiver pin 6 Digital pin 11 => PS2 receiver pin 2 Digital pin 12 => PS2 receiver pin 1 Digital pin 13 => PS2 receiver pin 7 3.3V pin => PS2 receiver pin 5 Gnd pin => PS2 receiver pin 4 H-Bridge inputs/outputs: ENA pin => Arduino digital pin 3 IN1 pin => Arduino digital pin 5 IN2 pin => Arduino digital pin 4 IN3 pin => Arduino digital pin 8 IN4 pin => Arduino digital pin 7 ENB pin => Arduino digital pin 6 5V pin => Arduino 5V pin Gnd pin => Arduino Gnd pin Gnd pin => Battery pack negative wire 12V pin => Battery pack positive wire OUT1 => Right motor negative wire OUT2 => Right motor positive wire OUT3 => Left motor positive wire OUT4 => Left motor negative wire PS2 receiver: Pin 1 (data) => Arduino digital pin 12 Pin 2 (command) => Arduino digital pin 11 Pin 4 (ground) => Arduino Gnd pin Pin 5 (power) => Arduino 3.3V pin Pin 6 (attention) => Arduino digital pin 10 Pin 7 (clock) => Arduino digital pin 13 Step 4: Setup Arduino IDE For this project I used Arduino IDE for programming the Arduino board. 1. Download and install Arduino IDE latest version You can find the latest version for Windows, Linux or MAC OSX on Arduino's website: https://www.arduino.cc/en/main/software Download it for free, install it on your computer and launch it. 2. Adding the libraries In this project, I use Arduino PS2X library. Download the library at https://github.com/madsci1016/Arduino-PS2X. Unzip the file, and copy the folders to Arduino IDE libraries/tools folders. ............ Now that your dev environment is ready, let's move on to the next step! Step 5: PS2 Wireless Controller Library Explained A PS2 wireless controller is a great tool for your robotics projects. It has a incredible amount of buttons: 20 digital push buttons and 2 analog sticks. This way, there are endless possibilities to control your robot. I used Bill Porter's PS2X library (https://github.com/madsci1016/Arduino-PS2X) to interface the controller to an Arduino Uno board. It defines a PS2X Class for the controller, which contains some methods for reading analog and digital inputs from the joystick. An object to this class is created using the following code (before or during the setup): PS2X ps2x; Once the object was defined, it has to be linked to Arduino I/O pins using the following function: error = ps2x.config_gamepad(clock,command,attention,data, pressure?, rumble?); This function might return some errors if there's something wrong with the connections or with the controller itself. The main functions used from the library are the ones for reading digital and analog inputs. To read and digital input, the following method is used: ps2x.Button(button); In which button is the name of the button to be read. Each button is maped as follows: Buttons Actions Directional buttons: PSB_PAD_UP = D-pad up button; PSB_PAD_DOWN = D-pad down button; PSB_PAD_LEFT = D-pad left button PSB_PAD_RIGHT = D-pad right button Action buttons: PSB_GREEN or PSB_TRIANGLE = green triangle button PSB_RED or PSB_CIRCLE = red circle button PSB_BLUE or PSB_CROSS = blue x button PSB_PINK or PSB_SQUARE = pink square button Triggers: PSB_L1 = left side trigger button 1 PSB_R1 = right side trigger button 1 PSB_L2 = left side trigger button 2 PSB_R2 = right side trigger button 2 Sticks: PSB_L3 = left stick push button (yes, you can press the stick as a push button) PSB_R3 = right stick push button Menu: PSB_SELECT = select button PSB_START = start button To read the analog value (with will be converter in a integer between 0 and 255) of the sticks use the following method: ps2x.Analog(stick_axis); In which stick_axis represents the stick and the direction to be read, as follows: PSS_LY = y-position of left stick PSS_LX = x-position of left stick PSS_RY = y-position of right stick PSS_RX = x-position of right stick With those basic functions you'll be ready to use the PS2 controller on your project! On the following steps I show some Arduino sketch examples combining those buttons! Step 6: Sketch #1 - Dpad Buttons Old video games, such as SEGA Master System and Mega Drive and Nintendo SNES, didn't have force sensitive buttons. The directional buttons were only on/off buttons. For this first example, I wanted to emulate the kind of controls one would have in old video games of those consoles. For the this first Sketch I used Dpad buttons as inputs to the robot. Each button was used by the robot to perform one of the basic movements: move forward, turn right, turn left or move back. Those buttons have binary outputs. This way, the microcontroller will only understand that the buttons were pressed, but won't understand how hard they were pressed. This way, once a given button is clicked, the motors will run at full speed. If you connected everything according to my schematics, you'll have the following outputs: PSB_PAD_UP = move forward PSB_PAD_DOWN = move back PSB_PAD_LEFT = turn left PSB_PAD_RIGHT = turn right As I told before, the motor will move at a fixed speed. When turning left or right, motors will run on oposite directions, so that the robot will turn around its axis. Arduino Code: Download the code and open it on Arduino IDE. If you use the same pinout I did, you probably won't have to change anything on the code (although it might be needed, if the orientation of the motors is different For uploading the code, select 'Arduino/Genuino Uno' board, select the right COM port, plug board on your computer's USB port and upload the code. After the upload was complete, unplug the USB cable, and put the batteries. The code will start running and the Arduino board will automatically connect the PS2 joystick. Open serial monitor at first use and check the status of the connection. If it fails to connect with the joystick, there are somethings you should do: Reset the Arduino Uno board. Try it several times (for me, it usually works after the third reset); Check if the joystick is on (and with charged batteries). The receiver has some LEDs that will indicate if the joystick was paired. Also check if Arduino's RX and TX pins blink as it receives new commands (and updates the status on the Serial port); Check the connections... there might be something wrong in the jumpers between the components. Code Explained: In this project I only had to use PS2X_lib.h library. I is added in the beginning of the code. #include Define the pins of the Arduino connected to the h-bridge. If you use the same connections I did, you'll have the following configuration. If you choose to use different pins, update this part of the code. // These are used to set the direction of the bridge driver. #define ENA 3 //ENA #define MOTORA_1 4 //IN3 #define MOTORA_2 5 //IN4 #define MOTORB_1 8 //IN1 #define MOTORB_2 7 //IN2 #define ENB 6 //ENB Some global variables were declared before the setup (p2sx, error, type and vibrate). The first one is a instance of the PS2X class. Error status during the connection will be stored on error integer. Type and vibrate will indicate the type of the controller (DualShock or GuitarHero controller) and if it's supposed to vibrate upon a given command. The first thing I did during the setup was to configure I/O pins state (as output) and set enable pins to LOW. This way you'll disable both motors on start-up, and the robot won't move randomly while it waits for the rest of the code. // Configure output pins pinMode(ENA, OUTPUT); pinMode(MOTORA_1, OUTPUT); pinMode(MOTORA_2, OUTPUT); pinMode(ENB, OUTPUT); pinMode(MOTORB_1, OUTPUT); pinMode(MOTORB_2, OUTPUT); // Disable both motors digitalWrite(ENA,0); digitalWrite(ENB,0); Then I started Serial port communication (useful for debugging the code). Choose an appropriate baudrate and set the same speed on the Serial Monitor. // Start serial communication Serial.begin(57600); Configure the ps2x object Finally, configure the ps2x object with the pins of the Arduino that were connected to the joystick receiver (clock, command, attention and data respectively). It might return an error (to be displayed on the Serial monitor). The type of the controller will also de displayed (although you probably already know the type of controller you have in your hands at this point :D). error = ps2x.config_gamepad(13,11,10,12, true, true); //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error // Check for error if(error == 0){ Serial.println("Found Controller, configured successful"); } else if(error == 1) Serial.println("No controller found, check wiring or reset the Arduino"); else if(error == 2) Serial.println("Controller found but not accepting commands"); else if(error == 3) Serial.println("Controller refusing to enter Pressures mode, may not support it."); // Check for the type of controller type = ps2x.readType(); switch(type) { case 0: Serial.println("Unknown Controller type"); break; case 1: Serial.println("DualShock Controller Found"); break; case 2: Serial.println("GuitarHero Controller Found"); break; } During main loop the Arduino will read each D-pad button (UP, DOWN, LEFT and RIGTH) and set the different values for the output pins, in order to move the wheels. After a quick delay, a new loop is started. The following section shows how to move robot forward if UP button was pressed. MOTORA_1 and MOTORA_2 pins define the direction of the rotation for Motor A. ENA will define if the movement is enabled or not (motor ON/OFF). Notice it is an "analog" output (actually a PWM one). It's value should be something between 0 and 1023. This will modulate the PWM, and change the average voltage at the output of the h-bridge (between 0 and 12V). If the average voltage is too low, the motor won't be able to move at all. // MOVE FORWARD if(ps2x.Button(PSB_PAD_UP)) { digitalWrite(MOTORA_1,LOW); digitalWrite(MOTORA_2,HIGH); digitalWrite(MOTORB_1,HIGH); digitalWrite(MOTORB_2,LOW); analogWrite(ENB, 1023); analogWrite(ENA, 1023); Serial.println("Move forward"); } *I used PWM outputs for the ENA and ENB pins. This way, 1023 would represent a pulse with the greatest lenght (pin always on) and 0 the absence of pulses (pin always off). If a different (smaller) value is used here, the motors are expected to run slower, since the average voltage in their terminals will be smaller. Step 7: Sketch #2 - Analog Stick and Digital Buttons (L2 and R2) At a given time, all consoles adopted joysticks with two analog sticks. Those new inputs allowed force sensitive inputs that created variable speed actions and became popular in every kind of video games. In this second example I wanted to use an analog switch for steering the tank, and a pair o push buttons as throttle and brakes/reverse. This kind of configuration is very popular in lots of racing games, like Mario Kart for instance. Press R2 button for acceleration of the tank, L2 for reverse and set the direction of the movement based on x-position of left stick. The kind of robotic kit I used doesn't have a lot of inertia (if the voltage on the motors is set to 0V it won't keep moving for a while). This way, there was no need to define a command for braking the robot. Most of the code was already explained in previous step. One difference is that I defined two variables that store the speed of each motor (from 0 to 1023). int motor_right_speed = 0;
int motor_left_speed = 0; Main loop In the Main loop, the Arduino will read x-position of the left stick. It will receive a value between 0 and 255 and map it between -1023 and 1023. This value will be added (or subtracted) to the speed of each motor, in order to create a difference between the speed of each track and make the robot turn left or right. int nJoyL = ps2x.Analog(PSS_LX); // read left stick nJoyL = map(nJoyL, 0, 255, 1023, -1023); motor_right_speed = 1023; motor_left_speed = 1023; if (nJoyL < 0) { motor_right_speed = motor_right_speed + nJoyL; } if (nJoyL > 0) { motor_left_speed = motor_left_speed - nJoyL; } If R2 button is pressed, the tank shall move forward. This way, the Arduino set appropriate values for the motor pins. ENA and ENB create 'analog' outputs to each motor, with a value proportional to the speed desired for each motor (based on x-position of left stick). L2 will do something similar, but reverse the direction of the motor. if(ps2x.Button(PSB_R2)) { digitalWrite(MOTORA_1,LOW); digitalWrite(MOTORA_2,HIGH); digitalWrite(MOTORB_1,HIGH); digitalWrite(MOTORB_2,LOW); analogWrite(ENA, motor_right_speed); analogWrite(ENB, motor_left_speed); } if(ps2x.Button(PSB_L2)) { digitalWrite(MOTORA_1,HIGH); digitalWrite(MOTORA_2,LOW); digitalWrite(MOTORB_1,LOW); digitalWrite(MOTORB_2,HIGH); analogWrite(ENA, motor_right_speed); analogWrite(ENB, motor_left_speed); } if(!ps2x.Button(PSB_L2) && !ps2x.Button(PSB_R2)) { analogWrite(ENA, 0); analogWrite(ENB, 0); } Source: Arduino Robot With PS2 Controller (PlayStation 2 Joystick) ### Make your own TV ambilight using Arduino This is a very easy project. Here is the result I won't go into too much detail how each part works, because I have written some information on my blog. But you should be able to make it work with the information given on this instructable. Step 1: Prepare RGB LED strip The RGB LEDs came as a strip, but I want them to be separated further, so I soldered wires in between. I also use hot glue to strengthen the soldering points. you could buy led strips that have long cables, or you can just use this out of the box, it's up to you. I am using 25 LEDs. Step 2: Mount LED strip on TV My example is a bad one. you should be more accurate about the LED positions. and the should be facing outward with a angle, so the Lights can be seen brighter from the front. The sketch is how the LEDs should be mounted on the TV.   For more detail: Make your own TV ambilight using Arduino ### Automotive sensor needs no PCB MLX90364 General Description The MLX90364 Triaxis® product is based on a Dual Mold Package (DMP) which integrates the Triaxis sensing die together with the discrete decoupling components necessary to meet the strenuous ESD and EMC requirements found in a typical automotive environment. Once encapsulated, this DMP can be welded or soldered directly to a rugged connector or termination and further potted or over-molded. The DMP simply makes the conventional PCB redundant while keeping intact all the features and benefits of the Triaxis non-contact sensing technology. MLX90364 Features and Benefits Absolute Rotary & Linear Position Sensor IC Robust Dual Mold Package (DMP) feat. 4 Decoupling Capacitors (ESD/EMC) Reliable Module Integration Triaxis Hall Technology Simple Magnetic Design Programmable Transfer Characteristic (Multi-Points – Piece-Wise-Linear) Selectable Output Mode: Analog (Ratiometric) – Pulse Width Modulation (PWM) 12 bit Resolution - 10 bit Thermal Accuracy Open/Short Diagnostics On Board Diagnostics Over-Voltage Protection Under-Voltage Detection 48 bit ID Number option Automotive Temperature Range AEC-Q100 & AEC-Q200 Qualified DMP-4 RoHS Compliant A position sensor for automotive applications from Melexis can be used without a PCB within sensing modules. This device is based on a dual mold package construction, which integrates a 12-bit resolution position sensing die together with the decoupling capacitors necessary to meet the strenuous electro-static discharge (ESD) and electromagnetic compliance (EMC) requirements of automotive environments. “Once encapsulated, this DMP can be welded or soldered directly to a rugged connector or termination and further potted or over-molded. The dual mold package simply makes the need for a conventional PCB arrangement redundant. Dedicated ears allow greater accuracy levels to be realised when mounting,” said the supplier. Melexis is already shipping the MLX90364 Triaxis to several automotive tier 1 suppliers. The sensor device can be used in either linear or rotary position sensing applications. It features fully programmable transfer functionality, selectable analog and pulse width modulation (PWM) output modes, open/short diagnostics, on-board diagnostics, under-voltage detection and over-voltage protection. A SENT-SAE J2716 capable version is currently under development. “The MLX90364 addresses the automotive industry’s demands for more electrical, mechanical and environmental robustness”, said Vincent Hiligsmann, Marketing Manager for Sensors at Melexis. “Combining the dual mold package with our latest position sensor ICs, means that the vulnerability often associated with use of PCBs when they are exposed to high temperatures or high levels of vibration can be avoided. By using fewer components and lowering the number of solder-joints by more than a factor of three, the risk of failures is decreased greatly,”said Hiligsmann. The MLX90364 is qualified according to the AEC-Q100 and Q200 automotive standards. It has passed extreme robustness validation tests, such as long exposures to ambient temperatures up to 170 deg C. For more read: Automotive sensor needs no PCB ### The Arduino compatible MicroLink Tiny self-contained board that can do automation, alerts, cellular data, phone calls, SMS text messages, and more - USB plug & play Electronics News:  "users can use the MicroLink as the basis for systems that can monitor and control nearly anything, from any phone, from nearly anywhere in the world."   Atmel Corporation: "MicroLink is like a tiny Arduino with GSM. ... An ATmega328 allows for constant control, while a SIM800H quad band GSM module makes communication with wireless devices simple. ... One of the most unique features of the MicroLink is that it comes ready to use out of the box with a true plug-and-play dynamic" In addition to GSM and Arduino compatibility,  the on-board USB and battery charging capabilities also give the capacity to implement professional quality wireless remote-monitoring and remote-control – all with USB Plug & Play simplicity. You get the latest SIM800H quad band GSM module on board with an ATmega328 microcontroller, so you’re able to monitor and control nearly anything, anywhere – all with the freedom and immediate usability of an Arduino compatible. For more detail: The Arduino compatible MicroLink ### CMOS imager has 2Mpixel resolution The higher resolution EV76C570 is the latest addition to e2v’s renowned industrial CMOS imaging sensor range. The device features an identical CLCC48 package with only a minor change in hardware, and retains optical compatibility with the 1.3MP Sapphire sensor that is already in full production. A 1/1.8 inch optical format is retained thanks to the reduced pixel size of 4.5µm x 4.5µm.  The SPI register banks are also virtually identical, therefore customers who have developed vision systems around the Sapphire (EV76560) and/or Ruby (EV76C660 & EV76C661)1.3MP sensors are able to implement the new EV76C570 to extend their product portfolio with minimal extra development efforts. The compatibility of the family also extends to the following embedded application features (which are shared with the 1.3MP version): Both rolling and global shutter configuration with 3000:1 global shutter efficiency 60fps at full resolution with 120MHz clock 4x separately configurable regions of interest including the possibility to program each window with separate exposure and gain settings A histogram embedded in the footer of the image data field for image statistics to reduce the processing overhead for auto exposure/gain algorithms A lin/log pixel response mode for high dynamic range image capture A 10 Bit parallel output which can be compressed to 8 bits using a multi-slope companding technique. Applications for the EV76C570 range from machine vision and smart cameras, to print or barcode scanning, and also outdoor cameras for traffic and surveillance applications.  It also has some new and unique modes of operation for 3D imaging applications that e2v will be announcing separately. Imager supplier e2v has increased the resolution of its Sapphire family of global shutter CMOS imaging sensors with a 2Mpixel 1600 x 1200 pixel device. The EV76C570 device features an identical CLCC48 package with only a minor change in hardware, and retains optical compatibility with the 1.3Mpixel Sapphire sensor that is already in full production. “The increased resolution is well timed with advances in processing speeds and with the emergence of new higher speed interfaces like USB3.0,” said Gareth Powell, marketing manager of industrial imaging sensors at e2v. Applications will range from machine vision and smart cameras, to print or barcode scanning, and also outdoor cameras for traffic and surveillance applications. The image sensor will also support operation for 3D imaging applications. The sensor retains a 1/1.8 inch optical format thanks to the reduced pixel size of 4.5µm x 4.5µm. For more read: CMOS imager has 2Mpixel resolution ### BAROMETRIC PRESSURE SENSOR FOR SMARTPHONES, WEARABLE AND HEARABLE DEVICES Bosch Sensortec has announced a barometric pressure sensor that is able to deliver much higher levels of accuracy for altitude tracking in smartphones as well as wearable and hearable devices. The sensor, the BMP390, can measure height changes below 10cms thanks to the improved resolution and is 50 percent more accurate than its predecessor. Accurate altitude detection helps to localize people indoors, where GPS signals are not available. The addition of the vertical-specific position to existing horizontal information enables first responders to determine the floor level of smartphone users who trigger an emergency call. The use of Bosch Sensortec’s latest BMP390 pressure sensor in smartphones, enables a high precision localization service that ultimately has the potential to save thousands of lives,” said Dr. Stefan Finkbeiner, CEO at Bosch Sensortec. Wireless providers in the US will soon be required to meet an increasingly stringent series of location accuracy benchmarks, including providing the caller’s dispatchable location and similar moves could be implemented in other regions like Europe or Asia, to further improve people’s safety and peace of mind. Bosch and NextNav, a 3D geolocation service provider, have collaborated on component specifications and system performance resulting in consistent, high accuracy z-axis capabilities indoors. This is accomplished by applying barometric pressure sensors in the phone, like the Bosch BMP390, and combining them with NextNav’s Metropolitan Beacon System (MBS) z-axis service to determine three-dimensional location and positioning. The sensor also enables improved indoor navigation in general, for example in combination with the Position Tracking Smart Sensor BHI160BP. These solutions compensate for traditional localization technologies such as GPS that do not work efficiently in shielded environments. Read more: BAROMETRIC PRESSURE SENSOR FOR SMARTPHONES, WEARABLE AND HEARABLE DEVICES ### How to Build a Midbar ESP8266 Version A while ago, I made the ESP32 version of Midbar which later evolved into a multi-user Cipherbox. While developing the Cipherbox, I realized that even the Lite version of it might be too expensive and too redundant for some people, so I "resurrected" the single-user Midbar project and made an ESP8266 version of it. The purpose of Midbar is to significantly increase the cost of unauthorized access to its user's personal data. ESP8266 version of Midbar utilizes the 3DES + AES + Blowfish + Serpent encryption algorithm alongside the ESP8266's built-in memory to store eight passwords and four credit cards in the encrypted form. It also utilizes the HMAC SHA-256 to verify the integrity of the stored logins, which means that if at least one bit of an encrypted login gets flipped, Midbar will inform you about it by displaying the following alert: "Integrity Verification Failed!!!" In case you've missed the original Midbar or just want to know why I called it Midbar in the first place - Midbar (מדבר) is a Hebrew word that means "pasture," "uninhabited land," "wilderness," "large tracts of wilderness (around cities)," "desert." I had two reasons for choosing the word Midbar as the name of this project. First - while working on my previous projects, I noticed that the so-called "device that keeps your personal data secure in an encrypted form" market is pretty much a "desert around the oasis of the password manager market." Second - I couldn't find a better word to describe that project. At first, I wanted to call it a "Password Vault," but then I realized that it's more than just a password vault. So, I just called it Midbar! Supplies ESP8266 x1 0.96 Inch OLED SSD1306 Display x1 EC11 Rotary Encoder x1 4.7k resistors x7 22nf capacitors x2 330 Ohm resistor x1 Buttons x2 Step 1: Encryption Algorithms ESP8266 version of Midbar utilizes three encryption algorithms: 3DES + AES + Blowfish + Serpent; Serpent; 3DES. Let me briefly describe the implementation of each algorithm: 3DES + AES + Blowfish + Serpent is the strongest encryption algorithm utilized by this device. It's a combined encryption algorithm that's composed of four cryptographically strong encryption algorithms. It splits its input into 80-bit long blocks and then separately encrypts each block, infusing 48 random bits into each block. It produces the 128-bit (16 bytes) long output. That encryption algorithm performs superencryption; The serpent is an encryption algorithm that was competing in the Advanced Encryption Standard contest against Rijndael (now AES) and other algorithms. It takes a 64-bit long input, adds 64 random bits, and produces the 128-bit long output; 3DES is an outdated encryption algorithm. You can still use it to encrypt your data, but if I were you, I wouldn't be using it for anything important. It takes a 32-bit long input, adds 32 random bits, and produces the 64-bit long output. Step 2: Integrity Verification Integrity verification is an essential feature absent in the previous version of Midbar, leaving it vulnerable to the block-swapping attack. Before I get to the description of the integrity verification feature, I would like to clarify where it's present and where it's absent. It's present in: Logins; 3DES + AES + Blowfish + Serpent encryption algorithm; Serpent encryption algorithm. It's absent in: Credit Cards; 3DES encryption algorithm. The backbone of the integrity verification feature is the Hash-based Message Authentication Code constructed from the SHA-256. For the sake of convenience, I've truncated the output of the HMAC SHA-256 for the 3DES + AES + Blowfish + Serpent encryption algorithm to 240 bits because that algorithm takes 80-bit long blocks as input. As for logins, HMAC SHA-256 takes a concatenation of title, login, password, and website alongside the key as an input and produces a 256-bit output. That 256-bit long output of HMAC is then truncated to 240 bits and encrypted with 3DES + AES + Blowfish + Serpent. When Midbar decrypts the record, it also decrypts the tag. It then computes a new tag for the decrypted credentials and compares the new tag with the decrypted tag. If these two don't match, Midbar displays the following alert: "Integrity Verification Failed!!!" Step 3: Cell Mapping (Memory Allocation) Since ESP8266 only has 4 KB of memory available for the user data, I had to remap it several times to fit as many records as possible. Eventually, I came up with these results: The value stored in the first cell indicates whether the master password is set or not; Cells 1 - 48 store the encrypted hash of the master password; Cells 49 - 3952 store the encrypted logins and credit cards. Step 4: Install Drivers and Configure Arduino IDE *Optional If you've never flashed ESP8266 before you'll need to configure Arduino IDE and install drivers to upload the firmware to the boards, you can find drivers here: CH340 driver: https://sparks.gogo.co.nz/ch340.html CP210x driver: https://www.silabs.com/developers/usb-to-uart-brid... In case you don't have Arduino IDE, you can download it here: https://www.arduino.cc/en/software/ Configuring IDE isn't a part of this tutorial, you can read about it here: https://randomnerdtutorials.com/how-to-install-esp... Step 5: Download Firmware You can download the firmware for Midbar from one of these sources. SourceForge: https://sourceforge.net/projects/midbar/ OSDN: https://osdn.net/projects/midbar/ GitHub: https://github.com/Northstrix/Midbar If you just need the firmware for the device alongside the RNG, then I would advise you to download a 0.15 MB archive either from SourceForge or OSDN. But if you need the firmware for all versions of Midbar alongside the extra code, photos, and diagrams, in that case, I would advise you to download the 34.9 MB archive from GitHub. Step 6: Download and Install the Libraries Adafruit-GFX-Library: https://github.com/adafruit/Adafruit-GFX-Library Adafruit_SSD1306: https://github.com/adafruit/Adafruit_SSD1306 Adafruit_BusIO: https://github.com/adafruit/Adafruit_BusIO EncButton: https://github.com/GyverLibs/EncButton The process of unpacking libraries is typical. You can unpack the content of the archive into the folder: …\Arduino\libraries. Or open the Arduino IDE, click Sketch -> Include Library -> Add .ZIP Library... and select every archive with the library. Step 7: Clear EEPROM To ensure that Midbar will work as intended, you must clear the EEPROM before uploading the firmware. To clear the EEPROM upload the sketch from the "Clear_EEPROM" folder into the ESP8266, and then reboot the board. Step 8: Generate Keys To make the unauthorized deciphering of your data computationally infeasible - It is crucial to generate your own keys and never reuse them. The best way to generate the keys is to throw 20-sided dice. If you get a number from 1 to 9, write it down. If you get a number from 10 to 15, write down a letter corresponding to that number. 10 = A; 11 = B; 12 = C; 13 = D; 14 = E; 15 = F. If you get 20, write down 0. If you get something else, don't write anything and throw the dice again. There's also an easier option. I modified one of my previous projects to work as a random number generator, the generated output seems "random enough" for me, but I haven't run any tests. So, I can't guarantee that it's random. Use it at your own risk. To generate the keys - launch gen.exe from the "Untested RNG" folder and then click the "Generate keys for Midbar" button. The background turns blue when you press that button. Step 9: Modify the Firmware Open the file "Firmware.ino", scroll down a bit, and then replace my values of the kderalgs, numofkincr, hmackey, des_key, AES_key, Blwfsh_key, serp_key with yours. Step 10: Flash the ESP8266 Upload the firmware from the "Firmware" folder into the ESP8266. Step 11: Assemble Midbar Assembling the Midbar shouldn't be hard. In my opinion, the hardest part of the process is to connect the encoder. As for the possible component replacements: You can replace the 330-Ohm resistor with a 220-Ohm - 1k resistor; You can replace 4.7k resistors with 4.7k - 10k resistors; And you can replace the capacitors with 22nf - 100nf capacitors. Step 12: Set Your Password To use the Midbar, you first need to set the password (or should I call it the "Master Password"?). To do so: Power up Midbar; Quad-click the encoder button; Enter the password that you would like to use to unlock the Midbar. You can't change your password. And Midbar won't be able to decrypt your data without your password because the keys for the encryption algorithms are partially derived from your password. Perhaps, it won't even unlock without the correct password. Beware of it; Quad-click the encoder button. After you've unlocked the Midbar and got the main menu: Turn the rotary encoder to the right to go down the menu. Turn the rotary encoder to the left to go up the menu. Press the "A" button to open the selected menu. While in the submenu, press the "B" button to return to the main menu. While entering a text in a tab: Click the encoder button four times to continue; Click the encoder button five times to cancel the current operation. *If the hex value decreases when you rotate the encoder to the right, I would advise you to swap the wires connected to the D5 and D6 pins. Step 13: Add Login As I've mentioned In the introduction, this version of Midbar can store eight passwords and four credit cards in encrypted form. To add a login: Select the "Logins" line in the main menu; Press the "A" button; Select the "Add" line; Press the "A" button; Choose the slot you want to put the login to by rotating the encoder; Press the "A" button; Enter title; Quad-Click the encoder button; Enter login; Quad-Click the encoder button; Enter password; Quad-Click the encoder button; Enter website; Quad-Click the encoder button. Step 14: View Login To view a login: Select the "Logins" line in the main menu; Press the "A" button; Select the "View" line; Press the "A" button; Choose the login you want to view by rotating the encoder; Press the "A" button; Press any button to view the next field. Step 15: Delete Login To delete a login: Select the "Logins" line in the main menu; Press the "A" button; Select the "Delete" line; Press the "A" button; Choose the login you want to delete by rotating the encoder; Press the "A" button. Source: How to Build a Midbar ESP8266 Version ### Programming an ATTiny13A using Arduino & servo interpreter So there I was, browsing eBay, looking for some cheap deals on Atmel chips when i came across a pair of ATTiny13 chips for £2.50. I just had to have them! After all, how hard can it be? I needed a small chip to read servo signals from a hobby RC Receiver and control a laser output. Once they arrived it dawned on me that I actually had no idea how to program these little chips. Dom and I spent hours trying various ways of ATTiny programming we found online with no luck. It was only until he left I sat down at my computer and found Tekstop's tutorial on 'Tiny programming that I had any success. With a couple of modifications to his files you will be up and programming these low price chips in no time! Connect your ATTiny13A to your arduino following the diagram below Arduino pin 13 - ATTiny pin 7 Arduino pin 12 - ATTiny pin 6 Arduino pin 11 - ATTiny pin 5 Ardunio pin 10 - ATTiny pin 1 Arduino +5v      - ATTiny pin 8 Arduino GNd    - ATTiny pin 4 Optional: GND - negative side of LED ATTiny pin 3 - resistor (250 ohm) - positive side of LED ATTINY13A Datasheet: http://www.atmel.com/Images/doc8126.pdf Arduino ISP info: http://arduino.cc/en/Tutorial/ArduinoISP Step 2: Setting up the IDE Open the arduino IDE and connect your Arduino Go to file > Examples > ArduinoISP Check you have the correct board & port selected (Tools > Board/Serial Port) Press the upload button This will program your arduino board to be used as an ISP (in system programmer) Once complete, close the IDE We now need to set up the IDE to recognise our ATTiny13A as an arduino compatible chip Download and extract this file: https://github.com/tekstop/attiny/tree/Arduino1 Copy the folder "attiny" from the extracted ZIP to the /hardware/ folder in your arduino IDE installation directory We then need to offset the clock speed (not a very elegant solution, but i'm working on it!): Open Hardware/attiny/boards.txt Scroll to the bottom of the file, this last few lines contains the data relevant to our chip Change "attiny13.build.f_cpu=9600000L" to "attiny13.build.f_cpu=1000000L" This will correct delay times etc. Open the Arduino IDE again Go to Tools>Board and select "ATtiny13 (internal 9.6 MHz clock)" Major Components in ProjectArduino +5v      – ATTiny pin 8 Arduino GNd    – ATTiny pin 4 For more detail: Programming an ATTiny13A using Arduino & servo interpreter ### UCC12040/50 3 KVRMS AND 5 KVRMS ISOLATED DC/DC CONVERTERS Texas Instruments’ 500 mW, high-efficiency low-EMI converters are suitable for ultra-high voltage applications. Texas Instruments’ UCC12040 and UCC12050 DC/DC converters with 3 kVRMS and 5 kVRMS reinforced isolation ratings, respectively, are designed to provide efficient, isolated power to isolated circuits that require a bias supply with well-regulated output voltages. These devices integrate a transformer and DC/DC controller with proprietary architecture to provide 500 mW (typical) of isolated power with high efficiency and low EMI. The UCC12040/50 converters integrate protection features for increase system robustness. The devices feature an enable pin, synchronization capability and regulated 5 V or 3.3 V output options with the headroom. These low-profile, miniaturized converter solutions are available in a wide-body SOIC package with 2.65 mm height (typical). Features: High-efficiency with integrated transformer technologyMeets CISPR32 Class B EMI limits without ferrite beads across the load range on a 2-layer PCBOutput power: 500 mW (typ.)Input voltage: 4.5 V to 5.5 VPackage: 16-pin wide-body SOIC with >8 mm creepage and clearanceRegulated 5.0 V to 3.3 V output with selectable 400 mV headroom voltage to power an LDOShort circuit recoveryThermal shutdownExtended temperature range: -40°C to +125°CPlanned safety-related certification:CSA certification per IEC 60950-1, IEC 62368-1, and IEC 60601-1 end-equipment standardsCQC approval per GB4943.1-20113,000 VRMS (UCC12040) and 5,000 VRMS (UCC12050) isolation for 1 minute per UL 1577Robust isolation barrier: Read more: UCC12040/50 3 KVRMS AND 5 KVRMS ISOLATED DC/DC CONVERTERS ### Retablillo de las Maravillas v1.0 4./ Interactivity & electronics 4.1/ Switches / characters 4.2/ Screen / interface 4.3/ Motor controller 4.4/ I/O controller & interface [4./ electronics] [4.1/ switches / characters] The characters on top of the moving platform function, as interfaces, actually as on-off switches. While standing in its position on the platform that keep a switch on. Once they are knocked off the switch is off. The characters are built once again with 3mm laser cut MDF, and made of a circular platform, connectors and a silhoutte. On top of the silhouette and color printed collage is glued to make the figures attractive and, if so desired, recognizable. This is achieved setting two electrodes on the surface of the moving platform that are connected by a continuous conductive surface when the figures are on top of them. The material solution of it was using flexible self-adhesive copper film for both ends of the switch, taking care to have it as perfectly flashed on the surface as possible. On the lower side of the platform a cable is soldered to each of the electrodes connecting to the I/O board. A secondary problem was to keep the characters reasonably in place while the platform is moving left to right and back. This is achieved using small neodimio magnets that are embedded in the precisely cut MDF pieces. It was important to finely regulate the distance between magnets not to make the figures impossible to knock off with the light balls to be used in the game. Once determined the distance, the magnets were fixed in its place with some drops of Loctite glue. The figues still move a bit, and in a future version, two pairs of magnets could be used for each of the figures to achieve a more stable configuration. The electrodes are made enveloping MDF pieces with the right dimensions in flexible copper film, so that the contact can be made on the top of the platform and cables can be soldered in the lower part. The neodimio magnets that we had in the lab from other projects need to be adjusted to find the right strength for the figures, so that they stay in place when the platform moves but that they can be knocked down with a softball. Some testing were made with the platform in movement to make sure the electrical connection was stable. Once the position of the electrodes and the magnets were fixed i used some Loctite glue to keep them in the exact place. [4.2/ screen interface]   As advanced before, after considering various alternatives such using an LCD screen or a Python+Tkinter interface on a computer screen, a quite low tech and efficient design was finally chosen for the interface. It consists on a white translucent acrylic, etched and equipped with various colored LEDs, as well as two functional switches [actually an on-off switch and a push button]. Two other push buttons are placed in the interface, but ended up having no function, and just looking cool :) _ The LEDs inserted in the translucent acrylic glow in a attractive and quite visible fashion. The system works as follows: The on-off switch connects and disconnects the system. The first time it is turned on two parallel routines [motor and timer+score] get triggered lasting for approximately 30 seconds. For the next iteration the player can press the push button that triggers the routines every time it is pressed. To turn the system off, the player presses the on-off switch. The whole system is powered by a 12V battery, giving it an autonomy of several hours. [4.3/ motor controller] The stepper motor is controlled by an Arduino Uno and an ad hoc designed and fabricated simple board that houses a Pololu / Allegro A4988 mini board, - "A4988 Stepper Motor Driver Carrier" [http://www.pololu.com/catalog/product/1182] -, a 100uF capacitor and a set of connectors for 12V and 5V power + the four bipolar motor cables + the three connections to an Arduino Uno. A schematic design was made with Inkscape, and then turned into the actual circuit design and milling files for the iModela with Rhinoceros; the file exported to the iModela, eventually was an ".ai", an Adobe Illustrator file, that can be generated from Rhino [see images and links to files below]. The board was milled with the iModela, using a 4mm [1/64"] end mill - eventually! - that we were able to use thanks to a special adaptor/connector supplied by Roland Spain at the Fab Lab Iberia founding meeting in Barcelona. Compared to the 45º mills we had been using all through the academy the results using the 4mm end mill were extremely good. The board combines smd [capacitor] with through hole components [connectors]. The intelligence, as mentioned, is run by an Arduino Uno. We tried to make it with our own fabricated Arduino, but after trying four times in the lab with hello Arduino and Fab Kit 2.0 we didn't manage to make it work yet. A laser cut and etched 3mm MDF platform supports and gives stability to both boards. Both of boards are powered by the 12V battery - connecting to the Arduino through its own connector that i soldered too. The Arduino powered with 12V, regulates its own voltage, and provides the second board with 5V, through the 5V (and GND) pins. This allows for a single power source for all the system,- it is used to power a second Arduino in charge of the I/O system, too. The system has been designed following the instructions in the Pololu web page and data sheet, as well as Igna94Igna's, a local young colleague, online instructions [and code]. Above the connection diagram provided by Pololu for the Allegro A4988 motor controller "step-stick". And this one is my adaptation of the Pololu / Allegro diagram [http://www.pololu.com/catalog/product/1182] to be used in my configuration with Arduino and a Nema17 Wantai bipolar stepper motor supplied by reprapworld.com [http://reprap.org/wiki/NEMA_17_Stepper_motor] - that i had used before for the Reprap Prusa i2 that we made in former classes during the Academy. A larger version of the above image can be seen using "view image" in Mozilla / Chromium. The additional connections and the recommended 100uF capacitor, plus the A4988 are set in a "shield" as seen in the following drawings and images. Rhinoceros image captures for the motor controller PCB design and milling file: Download Rhinoceros file >> download link | alt download link [without .3dm extension] Milling was a slow process. Eventually i was able to mill with a 1/64" end mill - instead of the 45º that we had been using up to now - thanks to a special connector provided by Roland Iberia, and some mills sent to us by Nuria from Fab Lab Leon - thanks! -. The first board milled with the end mill came out perfect... But... I hadn't realize that because i was using through hole technique for some of the components, i should had milled it upside down... Before, in the first board i had made minor mistakes, while in the third board some tracks didn't come out well; so i ended up milling at least four boards until i got a truly great one... Here are some pics of the process:   For more detail: Retablillo de las Maravillas v1.0 ### How to control a Servo using Arduino In this one, servo is programmed to be controlled by two buttons, one turns servo to the left and the other one turns it to the right. When the servo is turning, corresponding LED will be switched on to indicate the operation. Result: Because Arduino has built-in library for controlling servo, which makes servo a really easy kit to use. In this project, I will be using a servo to turn the IR sensor around constantly. This is the circuit Diagram: This is the code: // Oscar’s Project // // There are 2 input buttons (turn left and right), when button is pressed, the servo turns and corresponding LED is lit up. #include Servo myservo;  // create servo object to control a servo // a maximum of eight servo objects can be created int pos = 90;    // variable to store the servo position const int maxDeg = 160; const int minDeg = 5; const int leftPin = 3; const int rightPin = 2; const int led1Pin = 6; // indicator const int led2Pin = 5; // indicator const int outputPin = 9; // pwm function will be disabled on pin 9 and 10 if using servo int leftPressed = 0; Major Components in ProjectArduino For more detail: How to control a Servo using Arduino ### IoT Using ESP8266-01 and Arduino Ever asked how to control any device from any place in the world? In this tutorial, we'll learn how to control things wirelessly over WiFi. Story Introduction Today, we will build a device that connects to the internet and allow the user to control his/her home remotely over wifi. We will use the Arduino board(any model will do the job well) with the ESP8266-01 wifi module to make this device. Let’s get started! What’s a smart home? Smart home technology uses devices such as linking sensors, features and other appliances connected to the internet of things (IoT) that can be remotely monitored, controlled or accessed and provide services that respond to the needs of the users.Wikipedia Working Scenario The ControlPanel We will build a simple web page that will work as a control panel for the user allows him to control any home appliance connected to our system. To build the web page we will use: HTML CSS Jquery The Embedded Hardware The web page sends some orders to the ESP8266-01 which is working as a web server connected to the Arduino board. And according to the incoming data, the Arduino board will take some actions like turning on the bulb, turning off the TV and in this part, we will use: Arduino ESP8266-01 Getting Started with the ESP8266-01 As we stated before, we need our Arduino board to get connected to the Internet but the Arduino Nano the version which we are using today doesn’t have that feature. So, we will use the ESP8266-01 wifi module to add the wifi feature to our tiny Arduino board. there are a lot of ESP wifi modules models out there, which one should I choose?! Well, almost all the ESP family wifi modules out there will do the job well but each one has its own features and specifications. I encourage you to look at each one specifications and features to choose the most suitable one for your needs. According to my needs, I found the ESP8266-01 is the most suitable one and that’s for many reasons. It’s very famous in the makers community. As a result, it got a very solid online community that you can find an answer to almost any question or problem you face with this awesome small module. Also, its price is very cheap(around 1.5$). Also, it’s very easy to use with the Arduino board since its a Serial wifi module it can communicate with the Arduino board over the serial communication. It has a built-in Microcontroller which means that you can use it as a standalone microcontroller and wifi module in one combo which is super cool. It has built-in two GPIOs. Only with 1.5$, you will get all of these features which is super cool, actually. Let’s get a closer look at this module. ESP8266-01 Pinout VCC: connect to +3.3V power source. Don’t connect it with a 5V source it will get damaged. GND: -ve pin, connect it to the ground of your circuit. CH_PD: chip enables pin – Active HIGH. Connect it to a logic value HIGH to allow the module to boot up. RST: Chip Reset pin – Active LOW, when it pulled LOW it Resets the module. GPIO0, GPIO2: General purpose input/output pins. Tx: connect to the Rx of the microcontroller(Arduino) to establish serial communication. Rx: connect to the Tx of the microcontroller(Arduino) to establish serial communication. ESP8266-01 Configuration As we stated before the ESP8266-01 module communicates with the Arduino board over the Serial communication. Which means that we need to connect it with the Arduino’s Serial pins 0, 1(Tx, Rx). But the problem here is that these pins will be busy because we will use the Arduino Serial monitor alongside the ESP8266-01 for debugging purposes. So, we need to find another two Serial communication pins to use them with the ESP8266-01. Fortunately, Arduino made this easy. There’s a library called “SoftwareSerial” which developed to allow serial communication on other digital pins of the Arduino, using software to replicate the functionality. For example, by using this library I can set the pins 2, 3(SoftwareSerial) as Rx and Tx alongside the pins 0, 1(Hardware Serial). “SoftwareSerial” library works great as long as the transmission speed is less than 19, 200 baud. But, there’s a small problem here! the ESP8266-01 wifi module comes from the factory programmed to communicate at speed 115, 200 baud which is somehow hard at the “SoftwareSerial” library to communicate at. So, we need to reprogram our wifi module to set the communication speed to 9600 baud which works pretty good with the “SoftwareSerial” library. To do that we will use some “AT Commands”. Changing the ESP8266-01 communication speed First step: Upload an empty program to the Arduino board At this step, we are uploading an empty code to the Arduino board. Just to be sure that there’s nothing is Executing in the background by the Arduino board. Second Step: Wiring the ESP8266-01 with the Arduino board To Reconfigure the ESP8266-01 and change the communication speed(baud rate) we use the AT-commands. Simply, AT commands are some instructions used to control modems, mobile phones, Bluetooth modules, wifi modules, GSM Modules. With these commands we can get basic information about our mobile phone or GSM Modules like the name of the manufacturer, model number, IMEI and so on.“AT” is an abbreviation for “ATtention” and it’s called AT-commands because every command starts with “AT”. The “AT” prefix is not a part from the commands itself it just tells the module the start of the commands. Some Important AT Commands Command number “4” depends on your ESP8266-01 firmware version, if this command doesn’t work with you AT+CIOBAUD= Try this one AT+UART_DEF=,8,1,0,0 Step 1: Open the Serial Monitor Step 2: Set the Communication speed to 115, 200 baud As we stated before, the ESP comes from the manufacturer programmed to communicate at speed 115, 200 baud. So we need to set the Arduino communication speed to 115, 200 too for the first time only then we will change that later. Also, you should select “Both NL & CR”. Step 3: Send “AT” and wait for the response to be sure that the ESP module is hearing you. Step 4: Now, change the ESP8266-01 communication speed My ESP8266-01 module loaded firmware is 1.6. and this command AT+UART_DEF=,8,1,0,0 works well for me. If it doesn’t work with you, try this AT+CIOBAUD=. If it responds with “OK” now your ESP module communication baud rate changed from 115, 200 baud to 9600 baud. CONGRATS! Let’s change the Serial monitor communication speed back to 9600 and send “AT” again to see if the ESP module can hear us at the new Speed(9600) or not. LOOK! it’s working. the ESP8266-01 now can communicate with the Arduino board at 9600 baud rate instead of 115, 200 baud rate. Now, let’s try to connect with the Wifi network Once you press enter, the ESP8266-01 will search for this network and connect with it. If the process succeeds it will return this WIFI CONNECTED WIFI GOT IP At this point, we successfully changed the ESP8266-01 communication speed from 115, 200 baud to 9600 baud. Now, we need to build the control panel(Web Page) which the user will use to control his home appliances. So, let’s build it! What’s the Internet? Actually, the internet is a wire buried under the ground it can be fiber optics, copper, or even a satellite but the internet is simply a wire. Any two computers connected to that wire can communicate. If the computer is connected directly to that wire it’s called a server and if it not connected directly to that wire it’s called a client. Server: Is a special computer that runs a specific Operating system like Apache, this special computer saves some web pages, files, databases on its disk drive. Any server connected to the internet has a unique IP Address like 172.217.171.228, the IP address is just like a phone number helps people to find each other easily. Since that IP Address is not very easy for humans to remember. So, we just gave it a name google.com(Domain name). Client: It’s a computer like what you and I are using every day, it’s connected indirectly to the internet through an internet service provider(ISP) and it also has a unique IP address. Working Scenario Simply, it starts with a request sent from a web browser(Client) like google chrome, Firefox and ends with the response received from the webserver. You entered the website URL makesomestuff.org in a browser from a computer(client), then this browser sends a request to the webserver hosts the website, the webserver then returns a response contains HTML page or any other document format to the browser to display it. Exactly, that’s what we need to do today in our project. We need to send a request from the web browser(Client) to the ESP8266-01(Webserver) which both of them are connected to the same local network. This request contains some data which tells the Arduino what to do turn on or off a light bulb. So, let’s build the web page! Building The Web Page To build our web page we have to deal with HTML, CSS, Javascript. If you never heard about these names before, don’t worry I got you. HTML: Stands for “HyperText markup language”. We use it to build any web page main structure. Like adding some buttons, images, paragraphs, headers, tables, and many more elements. It consists of a series of elements which tell the browser how to display the web page content. These elements represent by something called tags. CSS: It stands for cascading style sheet. After building the web page main structure, you need to make this structure looks nice here comes CSS to make some styling. It’s a language that describes the style of an HTML element. It consists of some selectors and deceleration blocks. Javascript: It’s a programming language that we will use to make the web page more interactive like adding some animations, maps and it allows us to make some complex things on the web page. Mainly, we will use it today to send an HTTP request from the client(web browser) to the webserver(ESP8266-01) to take some actions like turning on or off a light bulb. Build The Web Page Structure To easily understand the upcoming explanation, I recommend Reading this cool HTML intro. As we see our control panel is very simple. It contains two headers each one has a different size, one image, and two buttons one for turning on an LED and the second one for turning it off. Code Smart Home System

Smart Home Control Panel

Sorry But I'm a Meme Addict!



Code Explanation : declaration defines that this document is an HMTL5 document. : the root element of an HTML page. : element contains meta information about the page. : element specifies the title of the document. this title appears on the web page browser tab. <body>: element contains the visible web page content. <h1>: element defines a large element. <h4>: element defines a smaller header. when the header value decreases the font decreases. <img>: element adds an image to the web page. the image that you want to display should be in the same project folder. <br>: advance the cursor to a new line. <button>: element adds a button to the page content. Each button is our web page has very important two attributes the id, and the class attributes. we will talk about why we assigned these two values to the buttons in the Jquery code explanation. Styling The Web Page To easily understand the upcoming explanation, I recommend Reading this cool CSS intro. Now, the web page looks nicer (NOT TOO MUCH xD) we gave it a cool green background color, we make the page content centered aligned, and we change the headers font color and font family which made the web page more alive. We used CSS to do all of this styling stuff. Code <!DOCTYPE html> <html> <head> <title>Smart Home System

Smart Home Control Panel

Sorry But I'm a Meme Addict!



Code Explanation We added some few lines of code to make our web page looks nicer. We added style="background-color: seagreen; color: seashell; text-align: center;" inside the body tag to make all the web page content in the center of the page and to set the background color to seagreen also to set the font color to seashell. Also, we added style="margin: 10px;" inside the two button tags to set a margin of 10 pixels around the four sides of each button. Sending a Request To The Webserver To easily understand the upcoming explanation, I recommend Reading this cool Jquery intro. Now, after building our web page structure and styling it we need to add some functionality to the two buttons which we added earlier in the web page. we need when the user clicks the “LAMP ON” button his/her browser sends a request contains some unique data to the server(ESP8266-01) this unique data tells the Arduino to turn on the lamp. The same thing with the second button “LAMP OFF” when the user clicks it, the browser will send a request contains some unique data to the server(ESP8266-01) this unique data tells the Arduino to turn off the lamp. Let’s take a look at the code. Smart Home System

Smart Home Control Panel

Sorry But I'm a Meme Addict!



Code Explanation First Things First, we need to import the Jquery library in our code. So, we added this line in the head tag. All the magic happens in this interesting part. $(".button").click(function () { When the user clicks on any button associated with the class “button”, trigger the following function. var p = $(this).attr('id'); Get the value of the clicked button attribute “id” and store it inside the “p” variable. pin: p Put the variable “p” value in a dictionary (key-value) it’s key is “pin” and the value is “p” variable value. $.get("http://172.20.10.11:80/", { pin: p });}); Then, send a GET request to the webserver which it’s IP address is “172.20.10.11”. this GET request contains the value of the attribute id pressed button. In case the user pressed the “LAMP ON” button this id value will be 111, so the GET request header will contain some data like this pin=111. look at the next figure! At the opposite side, if the user pressed “LAMP OFF” button the request will contain this data pin=110. Code Logic I know you asking now why the heck did he choose 111 and 110 specifically? Ok, Lemme answer you fam. Actually, the number 111 and 110 divides into two parts. Part one: is the first two numbers which are in both cases will be “11”, it refers to the Arduino pin number which the load I need to control is connected on. Part two: is the third number which changes between 1 and 0 depending on the clicked button. And it refers to the pin state(ON or OFF). In the Arduino code, we will receive this data and separate these two parts from each other and save each part in a different variable, part one in variable pinNumber and the second part in variable pinState, then we will write this simple line of code to control the connected loaddigitalWrite(pinNumber, pinState); Connecting The Load Now, we need to connect the load with the Arduino board to control it. Before connecting any high voltage device like the air conditioner or even the TV, we need to test our circuit and the code with some low voltage stuff like LEDs only to make sure that everything is working well. Here’s the wiring diagram The wiring is pretty simple. We are connecting the LED positive leg to the Arduino digital pin 11, and the negative leg to the GND through a 1k ohm resistor. Arduino Code #include //including the SoftwareSerial library will allow you to use the pin no. 2,3 as Rx, Tx. SoftwareSerial esp8266(2,3); //set the Rx ==> Pin 2; TX ==> Pin3. #define serialCommunicationSpeed 9600 // <========= define a constant named "serialCommunicationSpeed" with a value 9600. it referes to the Software and hardware serial communication speed(baud rate). #define DEBUG true //make a constant named "DEBUG" and it's value true. we will use it later. int redLED =12; //assign a variable named "redLED" with an integer value 12, it refers to the pin which the red LED is connected on. int blueLED =11; //assign a variable named "blueLED" with an integer value 11, it refers to the pin which the blue LED is connected on. void setup() { pinMode(redLED,OUTPUT); //set the pin number 12 as an output pin. pinMode(blueLED,OUTPUT); //set the pin number 11 as an output pin. digitalWrite(redLED,LOW); //turn the red LED off at the beginning of the program. digitalWrite(blueLED,HIGH); //turn the blue LED on at the beginning of the program. Serial.begin(serialCommunicationSpeed); //begin the Hardware serial communication (0, 1) at speed 9600. esp8266.begin(serialCommunicationSpeed); //begin the software serial communication (2, 3) at speed 9600. InitWifiModule(); //call this user-defined function "InitWifiModule()" to initialize a communication between the ESP8266 and your access point (Home Router or even your mobile hotspot). digitalWrite(blueLED,LOW); //after finishing the initialization successfully, turn off the blue LED (just an indicator). } void loop() //our main program, some fun are about to start) { if(esp8266.available()) //if there's any data received and stored in the serial receive buffer, go and excute the if-condition body. If not, dont excute the if-condition body at all. { if(esp8266.find("+IPD,")) //search for the "+IPD," string in the incoming data. if it exists the ".find()" returns true and if not it returns false. { delay(1000); //wait 1 second to fill up the buffer with the data. int connectionId = esp8266.read()-48; //Subtract 48 because the read() function returns the ASCII decimal value. And 0 (the first decimal number) starts at 48. We use it to convert from ASCI decimal value to a character value. esp8266.find("pin="); //Advance the cursor to the "pin=" part in the request header to read the incoming bytes after the "pin=" part which is the pinNumer and it's state. int pinNumber = (esp8266.read()-48)*10; //read the first Byte from the Arduino input buffer(i.e. if the pin 12 then the 1st number is 1) then multiply this number by 10. So, the final value of the "pinNumber" variable will be 10. pinNumber = pinNumber + (esp8266.read()-48); //read the second Byte from the Arduino input buffer(i.e. if the pin number is 12 then the 2nd number is 2) then add this number to the first number. So, the final value of the "pinNumber" variable will be 12. int statusLed =(esp8266.read()-48); //read the third byte from the Arduino input buffer. then save it inside the "statusLed" variable. At any case, it will be 1 or 0. digitalWrite(pinNumber, statusLed); //then turn the LED at "pinNumber" on or off depending on the "statusLed" variable value. Serial.println(connectionId); //print the "connectionId" value on the serial monitor for debugging purposes. Serial.print(pinNumber); //print the "pinNumber" value on the serial monitor for debugging purposes. Serial.print(" "); //print some spaces on the serial monitor to make it more readable. Serial.println(statusLed); //print the "statusLed" value on the serial monitor for debugging purposes. String closeCommand = "AT+CIPCLOSE="; //close the TCP/IP connection. closeCommand+=connectionId; //append the "connectionId" value to the string. closeCommand+="\r\n"; //append the "\r\n" to the string. it simulates the keyboard enter press. sendData(closeCommand,1000,DEBUG); //then send this command to the ESP8266 module to excute it. } } } /****************************************************************************************************************************************************************************************** * Name: sendData * Description: this Function regulates how the AT Commands will ge sent to the ESP8266. * * Params: command - the AT Command to send * - timeout - the time to wait for a response * - debug - print to Serial window?(true = yes, false = no) * * Returns: The response from the esp8266 (if there is a reponse) */ String sendData(String command, const int timeout, boolean debug) { String response = ""; //initialize a String variable named "response". we will use it later. esp8266.print(command); //send the AT command to the esp8266 (from ARDUINO to ESP8266). long int time = millis(); //get the operating time at this specific moment and save it inside the "time" variable. while( (time+timeout) > millis()) //excute only whitin 1 second. { while(esp8266.available()) //is there any response came from the ESP8266 and saved in the Arduino input buffer? { char c = esp8266.read(); //if yes, read the next character from the input buffer and save it in the "response" String variable. response+=c; //append the next character to the response variabl. at the end we will get a string(array of characters) contains the response. } } if(debug) //if the "debug" variable value is TRUE, print the response on the Serial monitor. { Serial.print(response); } return response; //return the String response. } /****************************************************************************************************************************************************************************************** * Name: InitWifiModule * Description: this Function gives the commands that we need to send to the sendData() function to send it. * * Params: Nothing. * * Returns: Nothing (void). */ void InitWifiModule() { sendData("AT+RST\r\n", 2000, DEBUG); //reset the ESP8266 module. //delay(1000); sendData("AT+CWJAP=\"PUT YOUR SSID\",\"PUT YOUR PASSWORD\"\r\n", 2000, DEBUG); //connect to the WiFi network. delay (3000); sendData("AT+CWMODE=1\r\n", 1500, DEBUG); //set the ESP8266 WiFi mode to station mode. delay (1000); sendData("AT+CIFSR\r\n", 1500, DEBUG); //Show IP Address, and the MAC Address. delay (1000); sendData("AT+CIPMUX=1\r\n", 1500, DEBUG); //Multiple conections. delay (1000); sendData("AT+CIPSERVER=1,80\r\n", 1500, DEBUG); //start the communication at port 80, port 80 used to communicate with the web servers through the http requests. } code explanation the code is pretty straightforward, we implemented two different functions InitWifiModule() and sendData() The sendData() function job is regulating how the AT commands will get sent to the ESP8266-01 module. the InitWifiModule() function job is to provide the sendData() function the AT commands that we need to send to the ESP8266-01. In the loop() function we read the income HTTP request header and search for the “+IPD, ” which means that the request has successfully arrived, then we read the pin value which it will be “111” if the user clicked the “LAMP ON” button and “110” if the user clicked “LAMP OFF” button. Don’t forget to put your wifi SSID and Password in the Arduino code line no. 103sendData("AT+CWJAP=\"PUT YOUR SSID\",\"PUT YOUR PASSWORD\"\r\n", 2000, DEBUG); For more code explanation please read the comments in the code, it’s well documented How It Works After uploading the code to the Arduino board, open the Serial monitor and read the responses that the ESP module is sending. At the beginning of the program, if you see something like the previous figure with “OK” at the end of the page, it means that the ESP8266-01 module is successfully connected to your wifi (Access point) and got an IP and MAC address. Now, you can open your fancy web page and try to control some stuff. But, if you see something like the previous figure with a “FAIL” or “ERROR” at the end of the page, it means that your ESP module can't connect to your wifi (Access point) for some reasons. Try to check if entered the right SSID and password for your network. Adding a High Voltage Load After we tested our code and got sure that everything is working like a charm. We need to replace this boring LED with a High voltage load like an air conditioner, TV or a light bulb. But to control all of these high voltage appliances we have to deal with relays. What’s and why relays? Ok, the relay is a mechanical switch, which is toggled on or off by energizing a coil. It’s mainly used to control a high powered circuit using a low power signal (5V or 0V). So we can control a high powered device like an air conditioner or an AC lamp turning it on or off only by a 5V or 0V signal. Which is amazing! The Two-channel relay module has two control pins(IN1, IN2) these pins should get connected to two Arduino digital pins to control the state of the two coils, closes or opens the load circuit. At the opposite side of the relay module, the COM(common) should get connected to one end of the load. The other end of the load is either connected to the NC(Normally Close) or NO(Normally open). If connected to the NO the load remains Disconnected before trigger and vice versa. Wiring Diagram As you see, we are using a two-channel relay module that gives us the ability to control two different AC loads. We are connecting the first relay at digital output pin11(Arduino) and the second relay to digital output pin 12(Arduino). Make a small modification to our web page. We will add another two buttons(ON and OFF) to control the second connected load. Smart Home System

Smart Home Control Panel

Sorry But I'm a Meme Addict!



Source: IoT Using ESP8266-01 and Arduino ### Mini High Voltage Supply Using Arduino WARNING: Before you start making anything please take a moment and read this: This circuit is intended to be used for educational and experimental purposes (electrostatic experiences, franklin bell experiment, plasma generation, gas ionization, electronic igniter, testing of insulating materials...) this circuit should not leave the lab or your house, and it shouldn't be used to harm to anybody, human or animal. Do not attempt to replicate this circuit if you aren't familiar with high voltages or intermediate electronics, high voltages are very dangerous. This voltage supply uses small capacitors to achieve a desired voltage, remember to safely discharge those capacitors by shorting the output when you finish using the supply to avoid accidental shocks (it hurts, but the energy stored in the 10nF caps is very small to be dangerous). Take into account the sparks and corona discharges generate ozone, so use it in well ventilated areas. High voltages can disrupt electronic equipment, so don't keep phones, pacemakers or other sensitive electronic devices near the supply. I'm not responsible for the use given to this device and I've made all what it's on my hands to include safety related information, and safety implementations to the circuit. Follow the general security measures when dealing with high voltages, here you have a nice safety guide, please read it carefully before you continue. Although this device outputs a huge voltage, the associated current is extremely small, but it can still be dangerous and produce a quite nasty and painful shock. In terms of safety, this is one of the safest high voltage sources, since the current output is comparable to the tasers used by the police. It's a safer alternative to more dangerous power supplies made out of TV flyback transformers. Nevertheless the dangers can't be underestimated. Step 1: Introduction This high voltage supply is designed to output alternating pulses of DC voltage around 10 to 20 kilovolts, I haven't really measured the voltage, but the spark gap can get as long as 1.5 Cm, this can vary due the different elements used to make the circuit. The voltage itself can be regulated varying the amount of stages at the Cockroft-Walton multiplier, for example, if you want it to lit a neon bulb you can use 1 or no stages at all, if you want to power a sparkplug you can use two or three, and if you want a higher voltage you can use 4, 5 or more. Bear in mind less stages mean less voltage, but more current, what could increase the dangerousness of this device. Ironically, the more voltage you get, the less difficult is to be harmed by the supply, since the current drops to a negligible point. Also, take into account the Cockroft-Walton multiplier isn't ideal, so the more stages you add, the more losses you'll get, until you reach a point where more stages mean a decrease in the voltage, I recommend 5 stages, although I haven't tried to use more. At the top you have a short video in which I test it: Step 2: How it works: Understanding how this circuit works is not crucial to be able to assemble it and make it work, you can skip this part if you want, but it's nice to know how things work: After pressing the button, the IR diode is activated and a beam of light hits the sensor of the optocupler, this sensor drops it's resistance to about 50 Ohms, unleashing the energy needed to activate the 2n2222 transistor. This transistor allows some energy to power the 555 timer. For those of you who don't know what a 555 timer is, it is a chip, that, amongst other functions, can take an input DC voltage and transform it into a square wave. The frequency and duty cycle of the wave can be adjusted modify the value of the components that surround it. In this case it's adjusted to have a constant 50% duty cycle, while the frequency can be adjusted with the potentiometer. This square wave, gets sent to a high current transistor, which allows pulses of high current to flow inside the primary coil, and here is where the magic happens. I also added a small 220uF capacitor, it's function is to save some energy while the transistor is off, so it can release current quite fast when it turns on again, this will release some stress from the power supply since the variations of current won't be that high between pulses. You can charge up a coil with a magnetic field the same way you charge a capacitor with static charges, the difference is when the magnetic field is no longer sustained, it collapses, converting that energy into a voltage spike. The amplitude of that spike depends on the turn ratio, and since it's quite large we can get big voltage spikes at the output of the transformer. But that voltage is still far away from the voltage we're looking for, so that's why we add a Cockroft-Walton voltage multiplier, which steps up the voltage until its high enough to break air resistance. You can learn more about voltage multipliers here. Step 3: The big list You will need: 555 timer 8pin chip socket A transformer body and enameled copper wires (winding our own transformer will give us a bit more of power than the 8R:1kOhm audio transformer, also it's kinda difficult to find that specific audio transformer) 220uF capacitor 2x 1k resistor 10x UF4007 diodes ( they are faster than the 1N4007, meaning better performance) 10x 10nF 1, 2 or 3KV ceramic capacitors. I recommend 2kV ones. 2n2222 transistor BD679 or similar high current - fast switching Darlington transistor Small heatsink 10kOhm or 4.7kOhm potentiometer (for more accuracy) IR LED IR light sensor 30 Ohm resistor 2xAA battery pack (it will last longer than just 1AA) Shrink tube (5mm diameter) Two push buttons Bear in mind you will also need a power source capable of delivering up to 15 volts and at least 1 amp (my circuit needs about 0.60A at full power with a small spark gap). For more detail: Mini high voltage supply ### Desktop Fist Bumper using arudino This simple device sits on your desk at work, ready to give you fist bumps throughout the day as you need them. A 3D printed "fist" is moved by a servo attached to a rack and pinion mechanism. An ultrasonic range finder detects when you place your hand near it, and an Arduino Uno controls it all. Materials: Arduino Uno - RadioShack 276 128 Standard servo - RadioShack 273 766 Ultrasonic range sensor - RadioShack 276 342 Misc wires and connectors 9V battery connector -RadioShack 270 324 9V battery - RadioShack 230 2209 Slide switch - RadioShack 275 401 Afinia 3D printer - RadioShack 277 224 3D print filament (ABS or PLA) - RadioShack 277 182 or RadioShack 277 163 Nuts and bolts - RadioShack 640 3018 and RadioShack 640 3011 ¼” plywood (14" x 25") Wood glue (optional) Rough sandpaper (I used 275 grit) Weights (I used misc washers) String/wire cable Step 1: Make cables To connect the electronics, a few cables are needed. First, make a pair of "splitters" for providing power (5V) and GND to the sensor and servo from the Arduino using female connectors. Since both devices need the same Vcc, the splitters make the wiring easier to put together and more compact when it is assembled. Next, solder a cable to connect to the ultrasonic range sensor. Use a female connector for the end that the sensor will plug into, and solder the other ends of the wires to individual male headers. Finally, cut off the female connector at the end of the servo and solder the wires to individual male headers as well.   For more detail: Desktop Fist Bumper using arudino ### MT. MYSTERY, ACHIEVING THE PIN ELECTRONICS TRIFECTA As technology evolves, and demand increases for next generation chips in artificial intelligence, deep learning, machine learning, automotive, IoT, healthcare and other areas, technology to provide faster, higher density and lower power ATE (Automatic Test Equipment) semiconductors is required. At ElevATE, the goal is to provide our customers with pin electronic (PE) solutions innovating with respect to speed, power,and density.  The company’s new pin electronics chip, Mt. Mystery accomplishes this design trifecta:  increasing speed by 50%, reducing power by 67%, and total size by 75%.  Achieving it through 20+ years of ATE expertise, circuit architecture advancement, and the use of modern sub-micron technology. Density.  In design, Mt. Mystery connotes a compact and efficient use of space.  In technology it also delivers the fine balance between speed and  power.  Whether the latest smartphone, data center blade, or ATE test system the triple challenge of speed, power, and density remains a constant. The advantage this trifecta brings to the ATE system designer is flexibility across all three axes. 50% speed increase permits the test of the most modern processor, SOC, FPGA, and memory technologies.  67% reduced power permits tripling the number of pins/devices under test without increasing the power budget.  75% reduction in size permits the quadrupling the number pins under test without expanding the overall PCB size versus a current architecture.  Mt. Mystery achieves this trifecta creating the space for the ATE manufacturer to innovate without the hurdles of prior performance constraints. The technology trifecta delivered by Mt Mystery creates an added benefit.  It permits ElevATE to drive a lower solution cost.  Combined with ElevATEs ISO certification for design and quality this yields a tangible total cost of ownership advantage to our customers. Read more: MT. MYSTERY, ACHIEVING THE PIN ELECTRONICS TRIFECTA ### Arduino Basic Wifi Project using ESP8266 wifi module Overview ESP8266 is a highly integrated chip designed for the needs of a new connected world. It offers a complete and self-contained Wi-Fi networking solution, allowing it to either host the application or to offload all Wi-Fi networking functions from another application processor.   ESP8266 has powerful on-board processing and storage capabilities that allow it to be integrated with the sensors and other application specific devices through its GPIOs with minimal development up-front and minimal loading during runtime. Its high degree of on-chip integration allows for minimal external circuitry, and the entire solution, including front-end module, is designed to occupy minimal PCB area. In this tutorial, we’ll use a seeeduino to control the ESP8266 WiFi module to request a static page from the internet. This is a basic use of TCP socket, for other usage, please refer to the AT command guide of the module. Material list Seeeduino V3 / Arduino Uno ESP8266 Serial WiFi module UartSBee v4 / other USB to TTL converter Note: We used a software serial to print some debugging information as there’s only one hardware serial on seeeduino board. But the limitation of software serial is that it can’t communicate in a higher baud rate than 19200. So part of the output from ESP module will be dropped because the baud rate 57600 of ESP module is higher than that of the software serial. If you have a board with more than one hardware serial (e.g. Arduino Mega 2560), the case will be easier. Step 1 – Connection Arduino Basic Wifi Project using ESP8266 wifi module Step 2 – Programming Open Arduino IDE and create a new sketch; Parse the following code into the sketch editor (need modifying the SSID and PASS macros into your own situation); #include #define SSID "xxxxxxxx" #define PASS "xxxxxxxx" #define DST_IP "220.181.111.85" //baidu.com SoftwareSerial dbgSerial(10, 11); // RX, TX void setup() { // Open serial communications and wait for port to open: Serial.begin(57600); Serial.setTimeout(5000); dbgSerial.begin(9600); //can't be faster than 19200 for softserial dbgSerial.println("ESP8266 Demo"); //test if the module is ready Serial.println("AT+RST"); delay(1000); if(Serial.find("ready")) { dbgSerial.println("Module is ready"); } else { dbgSerial.println("Module have no response."); while(1); } delay(1000); //connect to the wifi boolean connected=false; for(int i=0;i<5;i++) { if(connectWiFi()) { connected = true; break; } } if (!connected){while(1);} delay(5000); //print the ip addr /*Serial.println("AT+CIFSR"); dbgSerial.println("ip address:"); while (Serial.available()) dbgSerial.write(Serial.read());*/ //set the single connection mode Serial.println("AT+CIPMUX=0"); } void loop() { String cmd = "AT+CIPSTART=\"TCP\",\""; cmd += DST_IP; cmd += "\",80"; Serial.println(cmd); dbgSerial.println(cmd); if(Serial.find("Error")) return; cmd = "GET / HTTP/1.0\r\n\r\n"; Serial.print("AT+CIPSEND="); Serial.println(cmd.length()); if(Serial.find(">")) { dbgSerial.print(">"); }else { Serial.println("AT+CIPCLOSE"); dbgSerial.println("connect timeout"); delay(1000); return; } Serial.print(cmd); delay(2000); //Serial.find("+IPD"); while (Serial.available()) { char c = Serial.read(); dbgSerial.write(c); if(c=='\r') dbgSerial.print('\n'); } dbgSerial.println("===="); delay(1000); } boolean connectWiFi() { Serial.println("AT+CWMODE=1"); String cmd="AT+CWJAP=\""; cmd+=SSID; cmd+="\",\""; cmd+=PASS; cmd+="\""; dbgSerial.println(cmd); Serial.println(cmd); delay(2000); if(Serial.find("OK")) { dbgSerial.println("OK, Connected to WiFi."); return true; }else { dbgSerial.println("Can not connect to the WiFi."); return false; } } Step 3 – Monitor Open Serial Monitor and press the reset button of board, you’ll see the output. At last, Happy Hacking!  Resources Here’s the main wiki item for it: http://www.seeedstudio.com/wiki/WiFi_Serial_Transceiver_Module We’d like to thank Rudy who translate the entire datasheet, we recommend all developers take a look at this before you tinkering. https://nurdspace.nl/ESP8266 With thanks to Arduino Basic Wifi Project using ESP8266 wifi module ### Arduino Esp8266 Esp8266 Introduction: This is WiFi serial transceiver module, based on ESP8266 SoC. ESP8266 module is a TTL "Serial to Wireless Internet" device. Providing your microcontroller has the ability to talk to a TTL serial device (most do) you'll be in business. It is a highly integrated chip designed for the needs of a new connected world. It offers a complete and self-contained Wi-Fi networking solution, allowing it to either host the application or to offload all Wi-Fi networking functions from another application processor. ESP8266 has powerful on-board processing and storage capabilities that allow it to be integrated with the sensors and other application specific devices through its GPIOs with minimal development up-front and minimal loading during runtime. Its high degree of on-chip integration allows for minimal external circuitry, and the entire solution, including front-end module, is designed to occupy minimal PCB area. In this tutorial, we’ll use a seeeduino to control the ESP8266 WiFi module to request a static page from the internet. This is a basic use of TCP socket, for other usage, please refer to the AT command guide of the module. The SOC has Integrated TCP/IP protocol stack ESP8266 has powerful on-board processing and storage capabilities that allow it to be integrated with the sensors and other application specific devices through its GPIOs with minimal development up-front and minimal loading during runtime. Its high degree of on-chip integration allows for minimal external circuitry, and the entire solution, including front-end module, is designed to occupy minimal PCB area. Esp8266 Specifications: Corresponding Interface:     SDIO 2.0, SPI, UART     32-pin QFN package     Integrated RF switch, balun, 24dBm PA, DCXO, and PMU     Integrated RISC processor, on-chip memory and external memory interfaces     Integrated MAC/baseband processors     Quality of Service management     I2S interface for high fidelity audio applications     On-chip low-dropout linear regulators for all internal supplies     Proprietary spurious-free clock generation architecture     Integrated WEP, TKIP, AES, and WAPI engines Specification:     802.11 b/g/n     Wi-Fi Direct (P2P), soft-AP     Integrated TCP/IP protocol stack     Integrated TR switch, balun, LNA, power amplifier and matching network     Integrated PLLs, regulators, DCXO and power management units     +19.5dBm output power in 802.11b mode     Power down leakage current of <10uA     Integrated low power 32-bit CPU could be used as application processor     SDIO 1.1/2.0, SPI, UART     STBC, 1×1 MIMO, 2×1 MIMO     A-MPDU & A-MSDU aggregation & 0.4ms guard interval     Wake up and transmit packets in < 2ms     Standby power consumption of < 1.0mW (DTIM3) Esp8266 PCB WiFi Serial Transceiver Module Esp8266 PDF Datasheet Download: Download ESP8266 DataSheet English Esp8266 Project: Arduino Basic Wifi Project using ESP8266 wifi module ### $1.50 Arduino TV Annoyer Hey Arduino fans! Here is an 'ible for making a device that turns TVs on when you want them off, and off then you want them on! If you hide it in something inconspicuous, it would make a great April Fools joke or gag gift. And the best part is that the total parts cost is less than $1.50!! (Assuming that you already have an Arduino and the tools) This is a contest entry for the LED Contest with Elemental LED, so if you like it, please tell your friends and rate it up! Thanks! I know this is my first Instructable, but believe me, I have been working with electronics practically my whole life. I started up with Arduino about 6 months ago, and I've made at least 150-200 different projects, and I've also created a ton of other original things with Arduino and other microcontrollers. I even built my own computer, so you know I'm not messing around. :) Step 1: Parts list Here are the things you will need for this project. I have included the Mouser link and the price next to the item. Components 1x Infrared Detector ($0.78) http://goo.gl/6sSN6 1x Wide angle Infrared LED ($0.23) http://goo.gl/5PFlS 1x Narrow angle Infrared LED ($0.23) http://goo.gl/67sCf 1x 2N3904 PNP transistor (or equivalent) ($0.08) http://goo.gl/XD3jI 1x 10 Ohm resistor (Brown, Black, Black, Gold) ($0.05) http://goo.gl/UiKDs 1x 47 Ohm resistor (Yellow, Purple, Black, Gold) ($0.10) http://goo.gl/89jXQ 1x Arduino Uno (or equivalent) ($25.00) http://goo.gl/p9wVs Some wire (preferably solid-core, 22 gauge or so) (About $7-$8 at your local hardware/electronics store) Tools 1x USB A-B cable (for programming the Arduino) ($2.95) http://goo.gl/3f6rx 1x Soldering Iron (Optional) (About $15-$25 at your local hardware/electronics store) 1x Spool of thin solder (About $10 at your local hardware/electronics store) 1x Solderless breadboard (About $5-$6 at your local electronics store) 1x Computer (I would hope you know where to get one of these) 1x Arduino IDE (can be downloaded here) Step 2: Wiring Time to assemble! I will be doing this on a solderless breadboard. 1.) Plug in IR Detector. Make sure the dome on it is facing you. 2.) Connect the leftmost pin of the detector to Arduino Digital pin 2, the middle pin to Ground, and the rightmost pin to +3.3V. 3.) Plug in the 2N3904 NPN transistor. Make sure the flat side is facing you. 4.) Connect the leftmost pin of the transistor to the 47 Ohm resistor, the middle pin through the 10 Ohm resistor to Arduino Digital pin 3 (PWM), and the rightmost pin to Ground. 5.) Connect the cathodes (negative, has a shorter leg, and the side is marked with a flat part to indicate the cathode) to the other end of the 47 Ohm resistor, and the anodes (longer lead, not the cathode) to +3.3V. Major Components in Project1x Infrared Detector 1x Wide angle Infrared LED 1x 47 Ohm resistor 1x Arduino Uno For more detail: $1.50 Arduino TV Annoyer ### Making a Smart BLE Receiver for My Dumb Garage Door My garage door comes with a motor and a 433MHz remote that I don't always carry with me because it is quite bulky and in the way. Because of that, sometimes when I am in front of it and I want to open it, I had to go inside and press the trigger switch that is attached to the wall next to the entry door on the inside. Since I got tired of that, when Reyax approached me and offered to send in a BLE module for me to make a project with it, I knew that now was the right time to solve this for myself. The final garage opener receiver uses a custom app that I built with MIT App Inventor to send a command to the Bluetooth module and a NodeMCU controller then reads that message. Once the right message is received, a relay is triggered that basically overrides the switch contacts via a relay and opens the garage door. The entire setup is added as an add-on to the existing door and switch without interfering with it and it can be very easily removed if there is ever a need for that. Supplies The star of the project is the Reyax RYBG211_Lite module which is used to communicate with the phone and receive its commands. The module can connect to up to 8 devices at a time and it uses AT commands to talk to the microcontroller via UART, making it extremely easy to add Bluetooth support to any project. The Reyax RYBG211 BLE Module can be found on the links below: REYAX RYBG211_Lite: https://reyax.com//products/RYBG211_lite RYBG211_Lite on Amazon: https://www.amazon.com/REYAX-RYBG211_Lite-2-4GHz-Power-Module/dp/B097Y8LSJV RYBG211_Lite on First Component: https://www.first-components.com/en/rybg211_lite Other parts and tools needed for the project NodeMCU microcontroller - https://s.click.aliexpress.com/e/_DEeYNqr Mini DC to DC step down module - https://s.click.aliexpress.com/e/_DDUhdrp 12V Power adapter - https://s.click.aliexpress.com/e/_DmERHmf PCB Screw Terminal - https://s.click.aliexpress.com/e/_DCwF1xv Pin Headers - https://s.click.aliexpress.com/e/_DBtPODh Prototype PCBs - https://s.click.aliexpress.com/e/_DldKD71 5V Relay Module - https://s.click.aliexpress.com/e/_DEqGEiF Mini breadboards - https://s.click.aliexpress.com/e/_DmY9HFv Project enclosure box - https://s.click.aliexpress.com/e/_Dkng61v Soldering iron - https://s.click.aliexpress.com/e/_DcIXiNv Soldering kit - https://s.click.aliexpress.com/e/_DmAl8z1 Multimeter - https://s.click.aliexpress.com/e/_DB5z2UB Android phone - https://s.click.aliexpress.com/e/_DCpBbSn Step 1: Making the Proof of Concept Circuit To begin, I first assembled the entire project on a breadboard so I can test out the code and the mobile application. The RYBG211_Lite module is connected to pins D5 and D6 and the software serial library is used to communicate with it. The relay will be connected to pin D2, but for the POC, I only connected an LED so I can monitor the output when triggered. Most relays are controlled by pulling the pin low, so the LED anode is connected to 3.3v from the NodeMCU and its cathode is connected to pin D2. In addition to the LED, there is also one push button that is connected to pin D1 so we can then put the entire project into pairing mode and new phones can be connected to it only in a specific time period. This is done so that we add a layer of security and prevent strangers from controlling our door. Step 2: Creating the Mobile App The mobile application is created using the MIT App Inventor platform. Since this is just a one-off project and to keep everything simple, the BLE module address is hardcoded inside the code so I made the APK to only work for this module. If you want to create one for yourself, you will need to update this with your module address. Once the BLE module is connected and paired with the phone, the app has one very simple job and that is to send the "OPEN" string to the module on each button press. An additional button is added to the top of the screen so that in case the Bluetooth module does not connect automatically, we can manually trigger the connection. The code for the application can be found in the project repository on GitHub. I'm not fully happy with how App Inventor works in this example as there were some Bluetooth issues with Android 12 at the time of writing this Instructable but it will have to do it for now. Step 3: Handling Security A major part of the project is how to control what phone can connect to the receiver. If we allow all of the phones to connect, someone might come close to the door, connect to it, and then send the right data to the module so the door can be opened. To prevent this, the project keeps a list of allowed devices. When a connection request is received, the Arduino code checks the allowed devices list to see if the connecting device is in the list and if it is not, then the connection is terminated immediately. To add a device to the allowed list, we need to press the push button for 5 seconds so we can put the project into pairing mode. The pairing mode is active for 30 seconds and during this period, any new device that connects to the module will be added to the list. To clear the list of devices, while in pairing mode, we can press the push button again and that will clear out all of the previously added devices. Step 4: Soldering the Circuit Once I was happy with how the garage door project worked, I used a prototyping PCB to make permanent solder connections. The project will be powered from a 12V power adapter so I used a DC-to-DC converter to reduce the voltage down to 5V to then provide it to the Vin pin on the NodeMCU. All of the other connections are made as previously explained. Source: Making a Smart BLE Receiver for My Dumb Garage Door ### Katrina And Maya bOunce is a haptics-based learning game system that teaches the concepts behind wave dynamics, and in particular, resonance. The bOunce device (an adaptation of the Haptic Paddle) allows a user to "bounce" a ball in a virtual environment. By feeling the haptic force feedback from the virtual ball, as well as seeing the ball’s waveform trajectory in the virtual environment, the user strategically times his or her force input in order to make the ball to bounce to a certain goal height in as short a time as possible. The game contains three distinct “levels”: bouncing a large ball, a small ball, and a small ball underwater. The users are encouraged to make hypotheses about the ideal driving frequency for the system on each level. The game’s competitive aspect, as well as its educational motivation, make it ideal for middle- and high-school settings. During the demo day, bOunce was successful in teaching wave dynamics concepts, helping students practice making hypotheses and conclusions, attracting users, and imbuing a sense of enthusiasm for physics and educational applications of haptic systems. On this page... (hide) Introduction Background Methods Hardware Design and Implementation Virtual Environment Analysis and Implementation Educational Demonstration Results Future Work Acknowledgements Files References Appendix Checkpoint 1 Checkpoint 2 Checkpoint 3 Introduction This project was motivated by the need for students to intuitively understand abstract physics concepts. Students struggle with topics related to waveforms (amplitude, frequency, phase, interference, resonance) simply because they cannot see or feel these phenomena. The bOunce device displays these effects and allows a user to interact directly (by matching the resonant frequency of a bouncing ball). This activity greatly enhances learning about waves, with relevance to many fields of science and engineering: electromagnetism, sound, mechanics, optics, and oceanography. Background Perkins, et. al, “Interactive Simulations for Teaching and Learning Physics” [1] Perkins et. al. have developed multiple web-based game-like simulations for use in teaching physics concepts at the high school and college levels. These simulations aimed to: (1) increase student engagement and (2) improve learning through exploration. The simulations focus on creating visualizations of phenomena that are not normally visible to the human eye (atomic/particle movements, electric fields, etc.). Using these simulations in lecture has been shown to motivate unprompted high-quality questions and comments from students. The Wave-on-a-String and Radio Waves programs graphically display the concepts of frequency, amplitude, interference, etc. In the Masses and Springs program, students learn about damped oscillation through the lifelike look of the graphics, which mimics the students’ real-world experience. The student feedback to the use of these simulations was largely positive, and many students appreciated the ability to quickly manipulate the programs to investigate new effects. Furthermore, students commented on the helpfulness of visualizing concepts that are normally not visible. This study indicates that visualization of abstract physics concepts is helpful for student learning. However, Perkins et. al. have developed a purely visual interface - we still see a need for haptic-based learning for students who do not identify with visual learning and to enhance the learning of students who do. Our device incorporates the visual elements presented above in our graphical interface, but also adds haptic interaction to further improve learning. Lee, “Pendulums: A Hands-on Way to Experience Resonance” [2] by Lee [2]. Lee has developed a set of hands-on pendulum activities to teach wave concepts such as frequency, amplitude, and resonance to students in middle school. Using simple construction techniques, Lee outlines the procedure to build various pendulum systems out of 2 liter soda bottles, strings, and film canisters filled with coins (see Figure 1). Students are encouraged to alter the modular setup (lengths, masses, number of hanging objects, etc.). Based on these changes, students are able to manually input forces and witness the differences in behavior, depending on the system. Students are also encouraged to make hypotheses, record observations, and deduce conclusions. These activities are cost-effective, simple to assemble, and allow the students to feel the resonance of a system, an aspect that our device will also capture. However, parameter manipulation requires the student (or teacher) to build an entirely different apparatus with the specified parameters. Our device, by contrast, enables the student to investigate a different system by flipping a single switch to instantly change a parameter (changing the level). Berner, “Resonant Wineglasses and Ping-PongTM Balls” [3] Apparatus Designed by Berner [3]. Berner has designed a system that uses a signal generator (visualized by vibrating ping-pong ball) to break a glass container, in order to create an effective physics demonstration of resonance. A glass is chosen with a stem, so that it can be supported (see Figure 2). A high-frequency sound is driven near the glass, and when the natural resonance of the glass is achieved, the ping-pong ball starts to vibrate within. The amplitude of the signal is increased until the glass breaks. Using strobe lights, the students are able to estimate the oscillation mode of the glass. Everyone present for the demonstration is required to wear ear protection, and the glass apparatus must be properly shielded for safety. Berner’s demonstration has quite a dramatic effect; however, the students’ experience is passive. They simply watch resonance in action, which (although remarkable) limits the interaction between the student and the abstract concept. Furthermore, the materials required are costly, and there are significant safety concerns. Therefore, this is not a practical demonstration to be employed in a high school or middle school setting. It is one better suited for a college-level lab. Lastly, this demonstration operates at one set of parameters and cannot be manipulated by the students. Our device is successful in addressing these concerns. Huang, “Haptic Feedback Improves Manual Excitation of a Sprung Mass” [4] It has been previously shown that users who were given haptic feedback when forcing a dynamic system, rather than relying on visual feedback alone, were able to more consistently and more quickly determine the resonant frequency of the system. These users were asked to excite a handle directly attached to a spring mass damper system in front of them; haptic feedback, sometimes coupled with visual feedback, were meant to inform the users efforts to find the resonant frequency. Although effective, this device is not necessarily “kid-friendly”, thus, our device builds upon this user experience by making it more accessible to kids and teenagers. Gillespie, “Stable User-Specific Haptic Rendering of the Virtual Wall” [5] A virtual environment model for a bouncing ball has been previously developed by Gillespie and Cutkosky. For this system in particular, gravity rather than user input is the driving force on the ball. This strategy circumvents a notable modeling complication arising in both [4]' and [5]' related to the user’s ability to vary the impedance of the input, which is not predictable and is thus difficult to model. Instead, a ball driven by gravity (a predictable driving force) represented the “user input”, serving as an allegory to inform controller design for a system. We ultimately decided to simulate our system as a simple spring-mass-damper system, neglecting the effects of gravity, in order to circumvent the complications discussed. This analogy was successful in providing a compelling haptic sensation for the users of bOunce. Young et. al, “Learning Force Concepts Using Visual Trajectory and Haptic Force Information at the Elementary School Level” [6]. The educational paradigm inspiring bOunce came largely from the work of Young et al. on teaching elementary school students about buoyancy with haptic simulation activities. Fourth and sixth grade students were given a pretest on concepts related to buoyancy before advancing through a series of teaching activities. Both subgroups involved in the study received visual feedback as they picked up blocks of different material properties and placed them in tanks of liquid. However, only one received force feedback, allowing only this group to feel the buoyant and gravitational forces on the blocks throughout the activities. After finishing the activities, both subgroups were given a posttest that was identical to the pretest, but with answer choices reordered. The activity allowed posttest scores to improve across both age groups and across both user subgroups (visual and visuohaptic). It was promising that although the 4th and 6th grade students started from different math and science backgrounds, they arrived at comparable levels of posttest understanding. This result indicates that the researchers enabled experiential learning of a science concept that was equally accessible to the two age groups, despite the discrepancy in math and science foundations. However, test results did not indicate that the addition of haptic feedback allowed for statistically significant improvement in learning. The researchers suggested using test questions that more accurately tease out the effect of haptic feedback (i.e. not using questions that referenced only visual cues during the activities) in later iterations of the user study. More appropriate questions might lead to more promising results that make a better case for adding haptics into educational curricula. In considering how to design user studies for bOunce, the importance of careful test question formulation, highlighted by the work of Young et al., should be kept in mind. See Future Work for more information. Methods Hardware Design and Implementation An Arduino and Ardumoto Shield were used to interface between the system hardware and the virtual environment. Their low cost and user-friendly functionality make them a good choice for design and implementation of haptic educational modules. The bOunce user interface hardware is an adaptation of the existing Haptic Paddle kit [7]. The original sector pulley handle is replaced by the bounce adapter. External switches were implemented in order to change between levels of the bOunce game. This was necessary because the Arduino could not simultaneously accept Serial user input while printing to the serial monitor of Processing, the graphics environment that displays the position and motion of the virtual ball. A backgrounding box was added to keep hardware from distracting the users, but materials were kept translucent so that some transparency was preserved. Thus, some amount of teaching was enabled toward a separate educational goal of teaching users how the haptic system works. Virtual Environment Analysis and Implementation MATLAB Simulation. The actual dynamics of a bouncing ball system can be extremely chaotic, involving bifurcation theory and colliding manifolds. We used a spring mass damper system forced by repeated step inputs (at a user-determined “step – frequency”) as a simplified model for the bouncing ball system. Our numerical simulations indicated that such a system reaches a kind of resonance that is analogous to the resonance achieved by driving a spring mass damper system at its natural frequency. (However, this “like-resonance” occurs at a different frequency than the true natural frequency of the spring-mass-damper system). Programming. MATLAB simulation results informed the step input driven spring-mass-damper simulation in the Arduino programming. Different mass and damping parameters were applied to different levels of the game. The equilibrium ball, or mass, position was set one centimeter away (in arc length) away from the upright bounce adapter paddle. Once the user “bounces” the mass a certain distance by pushing the paddle, the simulation loops through the dynamic response of the mass and performs numerical integration to find the velocity and position of the ball, based on the paddle position sensed. See attached Arduino code for details.   For more detail: Katrina And Maya ### AAEON UNVEILS AI AND EDGE COMPUTING SOLUTIONS POWERED BY NVIDIA AAEON, a leading developer of embedded AI and edge-computing solutions, today announced it is unveiling several new rugged embedded platforms—augmenting an already extensive lineup of AAEON AI edge-computing solutions powered by the NVIDIA® Jetson™ platform. The new AAEON products provide key interfaces needed for edge computing in a small form factor, making it easier to build applications for all levels of users, from makers to more advanced developers for deployments in the field. The new products include: BOXER-8251AI featuring the new Jetson Xavier™ NX, a powerful, compact AI processing module with 384 CUDA® cores, 48 Tensor Cores, and two NVDLA engines capable of running multiple neural networks in parallel and delivering processing speeds up to 21 TOPSBOXER-8240AI featuring the Jetson AGX Xavier, which delivers workstation performance in a compact form factor with 512 CUDA cores and 64 Tensor Cores delivering processing speeds up to 32 TOPSBOXER-8222AI featuring the Jetson Nano™, capable of operating multiple neural networks or processing several high-resolution images at the same time with 128 NVIDIA CUDA cores delivering processing speeds up to 472 GFLOPS AAEON also introduced a new version of the popular BOXER-8120AI, now featuring the Jetson TX2 4GB module, providing an efficient and cost-effective solution for AI edge computing with 256 CUDA cores delivering processing speeds up to 1.3 TFLOPS. Partnering with an AI and edge computing leader like NVIDIA supports our mission to deliver more diversified embedded products and solutions at higher quality standards,” said Alex Hsueh, Senior Director of AAEON’s System Platform Division. “These new offerings powered by the Jetson platform complement our existing lineup of rugged embedded products, providing an optimal combination of performance and price in a smaller form factor for customers to easily deploy across a full range of applications. Read more: AAEON UNVEILS AI AND EDGE COMPUTING SOLUTIONS POWERED BY NVIDIA ### Stereo Audio with an Arduino Recently I've been posting a lot of projects that use an 8 bit resistor ladder digital to analog converter(DAC) and an Arduino to make sound.  (see the Arduino vocal effects box, the Arduino drum sampler, and my audio output tutorial).  The technique I've been using to make these DACs is very simple, it requires only a handful of 10k and 20k resistors wired together into a network.  But the convenience comes with a price, as these DACs end up a little noisier than I would like at times.  So I decided to buy a specialized IC that will be compatible with all the code I've already written for the resistor ladder DACs, but uses highly matched resistors to reduce noise.  When I looked on Digikey for such a DAC, I found the TLC7528, a dual output 8 bit DAC IC.  The dual output capability of the chip interested me a lot; while it is easy to set this chip up with one permanent output, it also gives you the option of  toggling between two isolated output pins, making it fairly straightforward to set up a 2 channel audio output with a relatively small amount of additional effort/hardware setup/Arduino data pins. In this instructable I'll show you how to use the TLC7528 with the Arduino to output stereo audio.  Stereo audio means 2 independent channels of audio.  Stereo audio is especially fun when sent to headphones because you can achieve some interesting auditory effects since each ear is hearing its own independent channel of sound, some ideas include: "3D audio" spatial effects- by adjusting the filtering, amplitude, and phase of two channels of audio you can simulate the experience of sound directionality, making a sound source seem to originate from a precise location in the space around you, here's a great example binaural beats- by sending two sine waves of similar -but unequal- frequencies to headphones (one to each ear), you will hear a pulsating beatnote that is thought to induce relaxation and other meditative effects.  Here's an example. panning- change the relative amplitude of a sound source in each channel of the stereo mix.  This effect is simple, but can be really cool sounding, a great example is in the bridge of Led Zeppelin's Whole Lotta Love (listen to it with headphones!) Parts List: (x1) TLC7528 Digikey 296-1871-5-ND (x1) Arduino Uno Sparkfun DEV-11021 Other Materials: 22 gauge jumper wire oscillosope Step 1: 8 bit DACs and Serial vs Parallel The TLC7528 is a type digital to analog converter (DAC).  It takes digital data (numbers between 0 and 255) and outputs a voltage between 0 and whatever voltage you supply the chip with.  The output voltage of the DAC can be calculated according to the following equation: output voltage from 8 bit DAC = (supply voltage) * (digital input data) / 255 In this Instructable, I'll be powering the DAC from the Arduino's built in 5V supply, so the equation above can be simplified to: output voltage from 8 bit DAC = 5V * (digital input data) / 255 From this equation, we can see that the TLC7528 would output 5V if it receives a value of 255, 0V if it receives a value of 0, 2.5V if it receives a value of 127, and so on.  You may be wondering where the 255 came from, this is a result of the TLC7528 being an 8 bit DAC.  8 bit means that the binary numbers we can send to the DAC must have no more than 8 digits in them.  In binary, numbers that are represented with 8 digits (or less) range in value from 0 to 255 (as opposed to the regular decimal numeral system where and 8 digit numbers range from 0 to 99999999).  So there are 256 possible values (0-255) that the 8 bit DAC can receive.  This can be calculated quickly from the equation below: 2^8 = 256 possible values If we were using a 10 bit DAC, then it could receive 2^10 = 1024 different values, ranging from 0-1023.  This means a 10 bit DAC has a higher resolution than an 8 bit DAC.  Despite this, I've found that 8 bit DAC's are generally much more useful than 10 bit DACs because data is easier to store and output from the Arduino in 8 bit form than in 10 bit form.  For example, the data type byte in the Arduino language is for storing 8 bit numbers.  If you wanted to store a 10 bit number, you would have to use an int data type, but int data types can store up to 16 bit numbers, so you would be wasting 6 bits of memory.  Additionally, the pins of the Arduino are grouped together in clusters of 8 or less.  On the Uno, the only full group of 8 are digital pins 0-7, this group is called PORTD.  When writing Arduino code you can easily output 8 bits of data by setting the states of digital pins 0-7 all at once.  In the code this is done by sending an 8 bit number to PORTD.  For example: PORTD = 255; sets digital pins 0-7 HIGH, it is equivalent to the following: digitalWrite(0,HIGH); digitalWrite(1,HIGH); digitalWrite(2,HIGH); digitalWrite(3,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); digitalWrite(6,HIGH); digitalWrite(7,HIGH); but using the PORTD command sets all the pins simultaneously and is much faster.  The following command would set digital pins 0-7 LOW: PORTD = 0; you can also use the PORTD command to set some of the pins high and others low.  For example: PORTD = 137; 137 in binary is 10001001, so sending 137 to PORTD will set pin 7 HIGH (because the first digit of the binary number is a "1"), pins 6-4 LOW (because the next 3 digits are "0"), pin 3 HIGH, pins 2 and 1 LOW, and pin 0 HIGH.   You can read more about how this works on the Arduino website.  You can even send binary numbers to PORTD, for example: PORTD = B10001001; is equivalent to PORTD = 137; Finally, I'll talk about how we get this data into the TLC7528.  The TLC7528 is called a parallel DAC.  This means that all the data we send to the DAC is sent in parallel.  8 bit parallel DACs have eight data connections between the Arduino and DAC that send all 8 bits of data at the same time.  The opposite of parallel is serial, in serial setups you use fewer data connections (usually three), but send only one bit over at a time.  So, in order to transmit an 8 bit number via a serial connection you have to send eight 1 bit packages, one after the other, while in parallel setups you can send all 8 bits at the same time.  This means that serial connections require faster data transfer than parallel connections.  If you are not worried about using 8 digital pins of the Arduino, a parallel 8 bit DAC is a good option because it requires less clock speed and is simpler to code. Step 2: TLC7528 Overview The pin diagram shown above comes directly from the datasheet of the TLC7528 DAC.  As I described in the last step, the TLC7528 has 8 parallel data inputs, labelled DB0-DB7; these pins will connect directly to digital pins 0-7 of the Arduino.  The TLC7528 is an interesting chip because it actually has two outputs on it (called DACA and DACB), which are both connected to the same 8 digital input pins.  You can select which output to want to use by setting pin 6 HIGH or LOW (LOW outputs to DACA and high outputs to DACB).  Pins 15 and 16 are used to control the outputs of the DAC as well, I'll explain more in later steps. Fig 2 shows a functional block diagram of the chip.  Again, notice the data inputs, logic controls, and two separate outputs of the DAC.  There are many ways to set up this DAC depending on what you are trying to do with it, you can read more about these on the TLC7528 datasheet.  Fig 3 shows how to set up the DAC in voltage-mode operation.  In this setup, the analog output of the DAC will be pins REFA and REFB, and the pins labeled OUTA and OUTB will be connected to a fixed input voltage (I used the 5V supply voltage).  In the next step I'll show you how I set this up on a breadboard. Major Components in Project(x1) TLC7528 Digikey 296-1871-5-ND (x1) Arduino Uno Sparkfun DEV-11021 Other Materials: 22 gauge jumper wire oscillosope   For more detail: Stereo Audio with an Arduino ### Antilog converter linearizes carbon dioxide sensor While most carbon dioxide sensors use IR technology, electrochemical sensors are a serious competitor because of their high sensitivity, wide measurement range, and low price. As a rule, electrochemical sensors connect to a microcontroller through a buffer amplifier with an extremely low bias current (<1pA). The micro is needed to linearize the logarithmic response of the sensor. A good example of this approach is the SEN-000007 module from Sandbox Electronics, which uses an MG-811 CO2 sensor from Hanwei Electronics. Reference 1 reveals the circuits and the code, but does not specify accuracy. This Design Idea shows a pure hardware solution to the linearization problem with a simple and cheap circuit that features easy adjustment and good accuracy. The output signal can go directly to a panel meter or a microcontroller, requiring no complex data manipulation such as log or antilog calculations. The MG-811 sensor measures CO2 concentration from 400 to 10,000 ppm (0.04% to 1%). Figure 1 displays the transfer function of the sensor. The data points come from the datasheet of the MG-811. The line and equation are generated by the curve fitting tool of Microsoft Excel. For more detail: Antilog converter linearizes carbon dioxide sensor ### 3D Printed EMG Prosthetic Hand If you've ever looked at prices for prosthetic hand, you may have noticed that they can cost upwards of $5000, with more advanced myoelectric controlled arms priced at over $20,000. Such prices are not ideal considering that over 80 percent of amputees are from developing countries where access to prosthetic limbs is limited by lack of health care and financial resources. With 3D printing, however, we can create more cost-effective prosthetics that can better address the need of amputees. Some of the major advantages of 3D printing are rapid prototyping, customization of size, and the flexibility to replace parts by printing new ones. This project combines a 3D printed robotic arm from an open source project called InMoov with an Arduino compatible muscle sensor from Advancer Technologies. While this arm may not be as advanced as a $20,000 prosthetic limb, it is still a proof of concept that demonstrates the possibility of creating cost effective limbs that can provide comparable functionality at a fraction of the price. I also think it's a cool project in general and one that can spur great interest for those who wish to work with prosthetics. Supplies Major Parts: 3D Printed Hand from InMoov Arduino Nano MyoWare Muscle Sensor Electrodes Servo Motors (I used MG996R servos) Wires 7.2 Volt Battery Fishing line Screws Other: Drill and sandpaper to enlarge openings and create a smooth finish Two-part plastic adhesive to glue 3D printed parts Wire stripper Screwdriver Electrical tape Step 1: 3D Printing & Assembly As mentioned in the intro, the 3D printed hand used in this project comes from an open-source project called InMoov. For this project we will only be using the hand and forearm. The link to the STL files can be found here and the link for the assembly instructions can be found here. Since there are a plethora of guides and resources on how to build this arm. I won't be covering the build process in this guide. I have included pictures of some of the steps in case you want to reference them. It is important to be patient with the build process since it may take some trail and error to get all the pieces to fit and move smoothly. Take your time with each step and enjoy the build process. I promise it will be very satisfying once you finish. Step 2: Wiring Everything Together While it may look daunting at first. The wiring for this circuit is actually pretty simple. In essence we want to connect each of the 5 servos to a power, ground, and signal wire. In total, you should have 6 power wires and 6 ground wires coming from your battery. I have included an image that illustrates this better. You may be asking why we need 6 wires when we only have 5 servos. This is because we need to attach one of the power wires to the Arduino board in order to power it and one of the ground wires to the ground pin on the Arduino. The signal wires should be directly attached to any of the digital pins on the Arduino. For my circuit, I attached the servos to digital pins D3, D5, D6, D9 and D10 on the Arduino Nano board. Next, we want to attach our Myoware muscle sensor to the Arduino. To do this we want to attach the positive lead of the Myoware sensor to the 3.3 Volt output on the Arduino board. We then want to take the negative lead of the Myoware sensor and attach it to the ground pin on the Arduino board. Lastly, we want to attach our signal lead of the Myoware sensor and attach it to one of the analog pins on the Arduino (I attached it to A3). This will allow the Arduino to read signals from the muscle sensor that will be used to control the servos. If you're new to circuits this may seem overwhelming and that's okay. This is all part of the learning process. It may take some time to understand all the details. But with patience and curiosity you will come out of this experience knowing so much more than when you started. Source: 3D Printed EMG Prosthetic Hand ### RENESAS RX66N AND RX72N MCU FAMILIES The new Renesas RX66N and RX72N high-performance MCU families offer the highest integration of fast 120 MHz-Flash and SRAM memory and peripheral function The new Renesas RX66N and RX72N high-performance MCU families offer the highest integration of fast 120 MHz-Flash and SRAM memory and peripheral functions. Up to 4 MB of Flash and 1 MB of SRAM save external memory extensions and enable feature-rich applications like AC Servo Drives and Motion Controllers of HMI Control Panels with TFT LCD. The super high-performance CPU with 120 or 240 MHz delivering up to 1396 CoreMark paired with dual IEEE1588 compliant Ethernet, strongest Crypto features and various HW accelerators matches with demanding needs for future proof and cutting edge designs. Key Features Ultra Performance: 32-bit RX MCU at 240 MHz, On-chip Double-precision FPU, 1396 CoreMarkFlash Integration: Up to 4-MB Dual-bank Flash, 1 MB SRAM, QSPIRich Connectivity: Dual IEEE1588 Ethernet, SD Host Interface, QSPI and Triple CANBest Peripherals: Trigonometric Functions Unit, LCD Controller, 2D Engine, CMOS Camera I/F Additional Features Arithmetic unit for trigonometric functions supports the highest dynamic motor controlup to 4-MB flash memory (supportive of the dual bank function)1-MB SRAM, Graphic-LCD Controller, 2D drawing engineData transfer:DMACAa: 8 channels, DTCb: 1 channelEXDMAC: 2 channels, DMAC for the Ethernet controller: 3 channelsReal-time clock:Adjustment functions (30 seconds, leap year, and error)Real-time clock counting and binary counting modes are selectableTime capture function (for capturing times in response to event-signal input)Independent watchdog timer, 120 kHz clock operationUseful functions for IEC60730 compliance:Oscillation-stoppage detection, frequency measurement, CRCA, IWDTa, self-diagnostic function for the A/D converter, etc.Register write protection function can protect values in important registers against overwriting.Various communications interfaces: Read more: RENESAS RX66N AND RX72N MCU FAMILIES ### Arduino All-In-One Remote Now you can have all the remotes of your house in a device that fits in your hand with Arduino, never fight for who has the TV remote again! To make it you will need: Arduino (I used a cheap copy of the arduino UNO). LCD keypad shield, (I bought mine from dealextreme) 1x Infrared LED (standard ~940nm) 1x Infrared sensor. A computer. (That can run the arduino compiler program) Codes/Programs: Program for gathering signals (download here) Main program (download here) Video program (download here) Step 1: Intro: Infrared light has been used quite a lot for many different applications in many fields, one of them is communication, specifically between remotes and domestic devices, what allows us to control them without leaving the comfort of our sofa. The process of communication between an emitter (the remote) and a receiver (the device) starts when the user presses any button of the remote, this device has an oscillator and a preconfigured chip that allow the signal to adopt a square waveform with a frequency of 39kHz, depending on the button pressed, the chip will use a determined signal code. This signal travels through the circuit until it reaches the infrared LED, which transforms it into a series of pulses of invisible light (~940nm). If any sensor it's in it's range those pulses will be transformed into a quadratic wave that will indicate what to do according to the programming of the device. To create a remote we want to capture those pulses, which will have a certain amplitude in time, we also want to know the time between those pulses so we can reproduce those pulses with voltage and time as the only variables. Step 2: The hardware. In this instructable we won't need to work hard creating complicated circuits, instead, our work will be centered on the code we are going to implement. The hardware we are going to use is the Arduino and the LCD keypad shield, which will help to visualize the menu that will order the codes by their function and the remote they come from . Notice that this shields usually come without the pin headers, without them we won't be able to use the pins that remain free. If your shield don't has them just go to your local electronics store and buy a female pin header, cut it and sand the edges with sandpaper, then just solder them into place. We will use 2 different setups depending on whether we want to gather of send the codes: Step 3: Gathering the codes. Before we can create a functional remote we will need to gather the codes of the remotes we want to use, we will use an infrared sensor to do so. To set up the circuit, we can follow the sketch in the pictures, connecting the signal pin of the sensor to the pin 2 and the other pins to 5V and ground. The code we will be using is from an Adafruit tutorial, I made some changes in order to make our job easier. Now comes the boring part, once the code has been uploaded and the sensor connected we go to "Tools" and we click on "Serial Monitor". You will see a message that says "Ready to decode IR!", now, by pressing any key of the remote while facing the sensor, we will be able to obtain the code. If you use the version I provided the readings will appear in a code form ready to be pasted and interpreted by the Arduino main program, we just need to take care of storing this code to avoid losing it, to do so we can open a .txt to paste and label this signals now converted into code. IMPORTANT: the program reads the time the signal is high as well as it is low, before you send the signal the program is already counting the time it is low, that time will appear as the first reading and it is useless so it must be deleted. Also, many of the code is unnecessary since it's repeated to make sure the device get's it, if you can find a pattern I suggest you to cut the code and save space, if you just copy and paste it all it's OK but you might be pasting too much redundant information. TIP: If the Arduino compiler show this message "Serial port 'COM3' not found. Did you select the right one from the Tools > Serial Port menu?" your Arduino isn't connected or the port isn't recognized. Once we have all the codes we want we can move on to the next step.   Step 4: Preparing our code: menus and submenus Before being able to send the codes we need to visualize what are we sending, we will need to create a menu with all the functions (or submenus) we want to use. Creating a menu it's easy, but it can be quite confusing, I've added lots of comments about the functions of each part in the main code. I would have liked to use a library but instead I built it all in a single monolithic program so you don't have to download anything else, that way it's easier to learn how it works, creating a menu is quite useful and a must-learn task for every programmer.   For more detail: Arduino All-In-One Remote ### Just Veggin with an Arduino Beetbox Bring Touch Control to the Arduino. Use interesting touch sensors like Carrots or Beets to make a "Beetbox". In this instructable you will learn: * How to use the Cap Sense library to make Arduino responsive to touch * How adding a Wave Shield (and some root vegetables), you can make a "Beetbox" Step 1: You Will Need For the Touch Sensor part you will need: * Arduino UNO * A 4.7M Ohm resistor  (or a value similar to that) (one for each sense channel) * Breadboard for wiring up e.g. (http://goo.gl/1E1iI) * Some Wires For an initial experiment to show how touch sensing works: * An LED * a 560 Ohm resistor For the "Beetbox" part: * Some Root Vegetables (such as a Beet) * An Adafruit Wave Shield as shown  http://goo.gl/KUUZz * The WaveHC library for Arduino (http://www.ladyada.net/make/waveshield/download.html) Step 2: The Principles of Capacitive Touch Sensing For the Beetbox we use three sense channels. To start we'll implement one touch sense channel and activate an LED when Arduino senses touch. Wire up the circuit as shown in the Fritzing diagrams and photo's. Get and Install the Capacitive Sense library for Arduino from here: http://goo.gl/EpSX0 Step 3: Here's How the Capacitor Sense Works The Cap Sense circuit is made by the resistor between Arduino pins 6 and 9, and also the capacitance to ground on the Touch Sensor. When the CapacitiveSensor arduino library is asked to read the sensor value, pulses are Output on Pin 9 and Input into pin 6. The library routine measures the delay between when the pulses are transmitted and when they are received. The measured delay is proportional  to the Resistor value R and the Capacitance C. i.e.   Delay = R*C (strictly speaking there's a scaling factor too depending on the voltage level you're measuring from, but that's just a detail for us). The Capacitance on the sensor varies as you bring your finger close to the sensor and as you touch it. Touching the sensor gives you the largest capacitance and the longest delay. In order to make the delay large enough to be detected by Arduino you need a large resistor e.g. 4.7Meg Ohms. Step 4: Arduino Code: Key Concepts There are a couple of Key Concepts in the Arduino code. 1. Activate an LED when the sensor is touched. To do that we need to measure the delay (total1) and compare it to a Threshold value e.g. ============= void setup() { ....some setup stuff.... } void loop() { total1 =  cs_9_6.capacitiveSensor(30);        // Measure the Cap Sense Value from the Sensor if (total1 > THRESHOLD) { digitalWrite(LedPin, HIGH); } else { digitalWrite(LedPin,LOW); } } ======= That's pretty straightforward. But what should the THRESHOLD value be? The total1 value of delay we read back varies from day to day because it's very sensitive to capacitance (which is the whole idea), but it means we can't just put in any fixed THRESHOLD value because it will be different under different conditions. To make sure we have an appropriate THRESHOLD value, we need to measure the THRESHOLD value during a calibration sequence at the start of the code. We do this as follows. We initialise i=0 during setup() and calibrate for the first 50 iterations of loop(). The LED flashes during calibration and we need to touch the sensor to determine the appropriate THRESHOLD value. ======= Major Components in Project* Arduino UNO * A 4.7M Ohm resistor * Breadboard for wiring up   For more detail: Just Veggin with an Arduino Beetbox ### MOTOR SWITCH LED Using Arduino Here is how to connect a motor, a switch and an LED to your Arduino and how to do some checking to make sure that everything works. The strategy is to get the circuit going in stages, testing each part as you go. Once everything is wired correctly and can be either controlled or read by the computer correctly, then you can write the main program with confidence that all the pieces are working. LED Follow the directions shown in the Arduino Guide (PDF file) under the "Flashing an LED" section. Use this program to confirm that the LED works under computer control pinMode(2,OUTPUT); digitalWrite(2,HIGH); delay(1000); digitalWrite(2,LOW); The LED should go on for 1 second. Switch Here is how to wire up a membrane switch. Follow the directions shown in the Arduino Guide under "Reading a Switch". Use the program shown in the Guide to confirm that the Arduino is reading the switch properly. The stream of 1's going across the monitor window should change to 0's when you close the switch. If it doesn't, read the voltage at Pin 3 with your DMM. It should be 5 V with the switch open and 0 V with the switch closed. If it isn't, remove the switch from the circuit and check for continuity with the beeper function of your DMM. The DMM should beep when the switch is closed (short circuit) and stay silent when open (open circuit). Sometimes switch contacts get dirty so if you aren't getting a short circuit, try wiggling the switch button while it is closed. The code assumes the switch is connected to Pin 3 on the Arduino, but any pin can be used. Motor Do not connect your motor directly to an Arduino pin and do not use the 5 V power from the Arduino board to power your motor. Instead, control the motor using your TIP120 transistor and a separate 9V or 12V battery. The motor can be either the gear motor or the small motor. For the small motor, you can use the 2N3904 transistor as the switch. The TIP120 transistor pins look like this. Here is the schematic diagram for how to connect the motor "Px" is any I/O pin on your Arduino. For this exercise, use P4. Connect the minus of the battery to the emmiter of the transistor (E pin) and then also connect the emmiter of the transistor to GND on the Arduino board. Check these connections carefully because you never want the plus of the battery to directly connect to an Arduino pin. Here is a pictorial diagram of the connections. Connections should be made on the solderless breadboard rather than by soldering.   For more detail: MOTOR SWITCH LED Using Arduino ### Mobile Radio Power Controller ( MRPC ) Before I began the installation of my Yaesu FT-8800 in my car I knew I wanted automatic power ON / OFF.  This is a feature that I have always felt was lacking in my other mobile rigs as I am forever leaving my ham radio on long after I have departed the car. Let's start with an action packed video of the finished product, then we can talk about how we got there. First, I set out to determine if my radio has such a feature natively, and I found the following.  Per the FT-8800 user manual, there is an Automatic Power Off ( APO ) feature.  Below is a screen cap from the manual describing this operation. As you will read, this feature can be used to turn OFF the radio, but not back ON.  And for the APO to turn the radio OFF there are several specific requirements including leaving the radio in a non-scanning mode - not necessarily something I can commit to.  In the end, I determined this APO is not helpful to me in its current form. Recalling that my radio will return to its last known power state meant that I only have to apply power to the radio when the car is ON and disconnect the power when the car is OFF to achieve my goal. Having ruled out the APO feature on the FT-8800 I set out to see what products already exist on the market to automatically toggle my radio power.  Surely there should be something for <$50.   For more detail: Mobile Radio Power Controller ( MRPC ) ### How to Use the TM1637 Digit Display With Arduino In this tutorial, I am going to show you guys how to control the TM1637 4-Digit 7-Segment displays using an Arduino. If you want to displays sensor data, temperature and humidity, or want to design a clock, timer or counter, you will need this 4-Digit Seven-Segment Display.  Step 1: Topics Covered In this tutorial we are going to talk about:  The Basics of a 7-Segment Display  Hardware Overview and Pinout of The TM1637 Module  TM1637 Library Installation  Interfacing TM1637 Module with an Arduino  Loading The Basic Arduino Code (that comes with the TM1637 library) Then we will have a look at some of these quick examples: Example 1: Displaying String and a Number Example 2: Displaying Scrolling and Blinking Text Example 3: Creating a 4 Digit Counter Example 4: Displaying Temperature & Humidity using DHT11/DHT22 Example 5: Creating an Arduino Based Digital Clock And finally we will have a look at some common errors. Step 2: 7-Segment Display Basics A 7-Segment Displays consists of 7 LEDs making the shape of decimal number 8. These LEDs are called segments, because when they light up, each segments contributes in the formation of part of a decimal or hex digit. These individual segments are labeled from ‘a’ to ‘g’ representing each individual LED. By setting a particular segment HIGH or LOW, a desired character pattern can be generated. Step 3: Hardware Overview and Pinout of TM1637 Module The module comes with 4 right angle male pin headers. I find it a bit annoying to have the pin headers on the top side of the board. However, you can always unsolder and put them at the bottom of the board. Now lets have a look at the GPIO pins: CLK - is the clock input pin. You can connect it to any digital pin of an Arduino. DIO - is the Data I/O pin. This can also connect to any digital pin of an Arduino. VCC - Connects to 3.3V to 5V power supply. GND - is the ground pin. CLK and DIO pins can be connected to any digital pin of an Arduino. This gives us an opportunity to hook up a lot of these modules to an Arduino, as long as each instance has a pin pair of its own. When writing the code, we just need to specify the pin pair and then just go ahead and use them in your project. If you run out of pins on your Arduino board you can use a GPIO Pin Extenders like the PCF8574. Please check out my tutorial on the Extender module, the link is in the description below. PCF8574 GPIO Extender: https://diyfactory007.blogspot.com/2018/12/pcf8574-gpio-extender-with-arduino-and.html The module has 4 x 0.36 segment 7-Segment Displays and a ‘colon’ at the center for creating clock or time-based projects. A bare four digit 7-Segment Displays usually requires 12 connection pins but the TM1637 LED Driver removes the need of the extra wiring for the 7-Segments and the entire setup can be controlled just by using 2 wires (DIO and CLK) and two more for power reducing the total wires to 4. These modules communicate with the processor using "I2C-like protocol". The implementation is pure software emulation and doesn't make use of any special hardware (other than GPIO pins). The module operates between 3.3v to 5v with a current consumption of 80ma and allows adjusting the brightness of the LEDs at the software level. They are available in few different colors. Step 4: TM1637 Library Installation There are many libraries available for the TM1637 module. For this tutorial, we are going to use the "TM1637Display Library" written by "Avishay Orpaz". You can download the library using the library manager or from Github, the link is in the description below. To install the library using "Library Manager", navigate to Sketch > Include Library > Manage Libraries…  Search for "TM1637" and look for the one by "Avishay Orpaz". Hit the "Install" button to install the library on your device. TM1637Display Library: Download Step 5: Interfacing TM1637 Module With an Arduino Hooking up the TM1637 module to an Arduino is very easy. You just need to connect four wires: 2 for power and other 2 for controlling the display. You can connect the VCC of the module to either 3.3v or 5v pin of the Arduino. So, connect: CLK - Pin 2 of Arduino DIO - Pin 3 of Arduino VCC - 5V  of Arduino GND - GND  of Arduino As previously advised, you can use any pin combination for the CLK and DIO on the Arduino board. Just make sure you change the pin numbers in the code to reflect the change of wiring. So far, based on my experience I have only found one disadvantage. This module is unable to display floating points or dots between numbers. However, you can use the "HT16K33 module" for displaying floating points. Step 6: Loading the TM1637Test Example Before going ahead, lets have a look at the example that comes with the TM1637 Library. Navigate to File > Examples > TM1637 and load the "TM1637Test" example. The sketch starts by including the "TM1637Display.h" library. Then it defines the CLK and the DIO pins that will be used to connect the TM1637 display. In this example Pin-2 of Arduino is used for CLK and Pin-3 for DIO. #include #define CLK 2 #define DIO 3 Next, you need to create a new instance of the "TM1637Display" class by passing the CLK and the DIO Pin values to it. TM1637Display display(CLK, DIO); Then, the code shows us 2 ways of displaying data on the individual segments by creating arrays of texts. a. 1st by passing "hexadecimal numbers" to the individual displays uint8_t data[] = {0xff, 0xff, 0xff, 0xff}; Passing "0xff" to all the 4 displays will turn them all ON, and passing "0x00" will turn them all OFF. Using the "display.encodeDigit()" function you can display digits between 1 and 15. data[0]= display.encodeDigit(15); // This will display F___ on the display [0b01110001 = F] display.setSegments(data); This will display F___ on the display. b. 2nd by individually specifying the segments that you want to turn on. The below creates an array that sets the individual segments values and displays "dOnE" on the display. uint8_t done[] = {  SEG_B | SEG_C | SEG_D | SEG_E | SEG_G,      // d  SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,  // O  SEG_C | SEG_E | SEG_G,              // n  SEG_A | SEG_D | SEG_E | SEG_F | SEG_G      // E }; Now, to display these arrays, you need to pass them to the "display.setSegments()" function.     display.setSegments(data); // Will turn off all LEDs display.setSegments(done); // Will display "dOnE" The setSegments function accepts 3 arguments setSegments(data[], length, position); Data   = The data to display Length  = number of digits to be updated (0–4). Ex. for "dOnE", it will be 4, for the "°C" it will be 2. Position = determines the position from which you want to print (0-leftmost, 3-rightmost). Remember, the LEDs once turned on stays on until they are turned off. So, you always have to clear the previous value before displaying the new one. This can be done by passing 4 lots of 0xffto the "display.setSegments()" function or by using "display.clear()" function.     uint8_t data[] = {0xff, 0xff, 0xff, 0xff}; display.setSegments(data); The brightness of the display can be adjusted using the "setBrightness()" function. The function accepts values between 0 (lowest) to 7 (highest). display.setBrightness(3); // Sets the brightness level to 3 The "display.showNumberDec()" function is the function that you are going to use the most to display numbers on the module. The first argument is a number that you want to display on the screen. The rest of the arguments are all optional.   Syntax: showNumberDec(number, leading_zeros, length, position);   Number    = The number that you want to display on the screen. Values up to 9999 (type integer). Leading_Zeros = True/false. Setting it to True will add leading zeroes. Default value is false. Length    = number of digits to be updated (0–4). Ex. for "dOnE", it will be 4, for the "°C" it will be 2. Position   = determines the position from which you want to print (0-leftmost, 3-rightmost). Example: display.showNumberDec(1,false)  // Displays ___1 display.showNumberDec(1,false,1,0) // Displays 1___ display.showNumberDec(1,false,1,2)  // Displays __1_ display.showNumberDec(10,false,2,0) // Displays 10__ Step 7: Template For the rest of the examples, I am going to use this template to write the code. I will only show you guys the bit which is different in each code. Step 8: Example 1: Displaying Strings and Numbers In this example you can see letter "TEST" and a randomly generated number is alternating and getting displayed on the screen. To display the letter TEST, I am first clearing the screen and then lighting up the individual segments to display the characters. To display a number, I am first generating a random number between 0 and 9999 and then displaying it using the "display.showNumberDec()" function. Example1: Download Step 9: Example 2: Displaying Scrolling and Blinking Text Now, to display a scrolling text, I am incrementing the position of the text by 1 and then displaying it from the new position. You need to pad the display with any character or it will end up showing random characters on the display. Blinking a text is super easy. All you have to do is display the text, add a delay, clear the screen and then again add a delay before displaying the text again. Example2: Download Step 10: Example 3: Creating a 4 Digit Counter To display a counter, I am looping from 0 to 9999 and displaying the incremented value every time on the 7-Segments. You can also add a push button switch to start and stop the counter. Example3: Download Source: How to Use the TM1637 Digit Display With Arduino ### 50V TO 5V @7A SYNCHRONOUS BUCK (STEP-DOWN) CONVERTER This module is a non-isolated 7A DC-DC converter. The module can convert any DC voltage between 7V to 50V to a 5V DC with load current up to 7A. The project has been designed around LM5116 Wide Range Synchronous Buck Controller IC. The design includes 6uH toroid inductor and two N channel MOSFETS. The operating frequency is 250 KHz. The LM5116 is a synchronous buck controller intended for step-down regulator applications from a high-voltage or widely varying input supply. The control method is based upon current mode control utilizing an emulated current ramp. Current mode control provides inherent line feed-forward, cycle-by-cycle current limiting, and ease-of-loop compensation. The use of an emulated control ramp reduces noise sensitivity of the pulse-width modulation circuit, allowing reliable control of very small duty cycles necessary in high-input voltage applications. The operating frequency is programmable from 50 kHz to 1 MHz and the LM5116 drives external high-side and low-side NMOS power switches with adaptive dead-time control. A user-selectable diode emulation mode enables discontinuous operation mode, for improved efficiency at light load conditions. A low quiescent current shutdown disables the controller and consumes less than 10 µA of total input current. Read more: 50V TO 5V @7A SYNCHRONOUS BUCK (STEP-DOWN) CONVERTER ### O'Reilly Arduino Video Tutorial (Basic Steps) by Brian Jepson In this webcast video tutorial, Brian Jepson will introduce the basics of Arduino, the open source electronics prototyping platform. You’ll learn what Arduino is, where to get one, and how to connect electronic components to it. You’ll also learn how to write simple programs for Arduino. When you’re done, you’ll be ready to learn more, make more, and have fun prototyping. If you’ve got an Arduino, an LED, a pushbutton, and some hookup wire, you have most of what you need to follow along with this webcast. But if you’d like to keep going beyond the basics, we suggest one of the following kits from our own Maker Shed. We’ve lined up a discount code you can use which will give you 15% off any of these kits until June 21, 2010: Getting Started With Arduino kit (includes a copy of the book Getting Started with Arduino!) Arduino Projects Pack Advanced Arduino Starter Kit (includes a copy of the book Making Things Talk!) The video was initially broadcast on 2010-06-16 and they were offering up a 15% discount on the three of the four kits, not sure how long they'll be offering the discount but if you've not picked up a kit yet this would be a perfect time to do so! ### Arduino Board Selector Tools by Arduino4Projects.com Have a fun. ### CIRCUITBRAINS DELUXE IS A TINY, CIRCUITPYTHON-COMPATIBLE MODULE CircuitPython is a branch of MicroPhython designed to simplify education and experimentation on low-cost microcontrollers to make it easy to prototype without any upfront desktop software downloads. With CircuitPython, you can write clean and simple Python code to control your hardware instead of using complex low-level languages like C or C ++. While we have seen several boards developed with Adafruits’ CircuitPython support, the new CircuitBrains Deluxe powered by Microchip SAMD51 seems to be one with a little difference. The CircuitBrains Deluxe, a tiny CircuitPython – compatible ARM Cortex – M4 Module is a 48-pin castellated pad module designed for easy implementation of CircuitPython in maker projects or smooth integration into space-constrained products without the bulk of a large breakout board. Preloaded with a fork of MicroPython, the CircuitBrains Deluxe has other advantages besides being smaller in size when compared with larger CircuitPython compatible boards like Adafruit Metro M4, Adafruit Feather M4 Express or the Sparkfun Thing Plus. The board exposes more I / O pins and has more SPI flash storage memory against the usual 2MB to 4 MB of other boards. Features and specifications of the board include: Board Dimensions: 29 x 29 x 3.5 mm (1.15 x 1.15 x 0.15 inches)32-bit ARM Cortex M4 microcontroller – Atmel ATSAMD51J19 –  at 120 MHz, 512KB Flash and 192KB SRAM8 MB SPI Flash storage capacityPin Breakout for SPI, UART, and I2CDebug / SWD programming interfacePin Breakouts for Inputs / Outputs – 19 Digital and 13 AnalogLEDs for Power and Status5v supply voltage power supplyOnboard 3.3 V LDO regulator connected to 3V3 pin Apparently, since rolling your own microcontroller board can be time-consuming, using CircuitBrains Deluxe in your projects should help save some time and frustration. With CircuitPython support, the CircuitBrains Deluxe when connected over USB opens up the serial console and storage to allow you to modify the codes and see the results immediately after the changes are saved. Read more: CIRCUITBRAINS DELUXE IS A TINY, CIRCUITPYTHON-COMPATIBLE MODULE ### Arduino Controlled Lighthouse Overview: I’ve often thought that a lighthouse would make a great project for an Arduino, and so I decided to give it a try using one of the local lighthouses here in Erie, Pennsylvania as inspiration. I chose the North Pierhead Lighthouse that guards the entrance to Presque Isle Bay. The model features a white LED beacon, a rotating parabolic reflector, a foghorn, and a flickering red LED representing the keeper’s fireplace. The video above shows the lighthouse in action. (You may have to turn up the volume to hear the foghorn.) History: Native American legend has it that the Great Spirit led the Erie tribe to the area now known as Erie, Pennsylvania because of its abundant game, plentiful fresh water and cool breezes. Legend also holds that members of the Erie tribe once ventured out into Lake Erie to discover where the sun set in the evening. Angered by this intrusion, the Spirit of the Lake raised a storm on the waters. To protect the Erie as they made their way back to shore, the Great Spirit stretched his left arm out into the lake to shelter them. The Great Spirit’s arm remained in the lake forming the peninsula now known as Presque Isle. The peninsula encloses Presque Isle Bay with a narrow channel leading out into Lake Erie. This channel is guarded by the North Pierhead Lighthouse, first constructed in 1857. The current configuration of the structure stands about 10 meters (34 feet) high. The model here will be constructed at a scale of 5cm = 1m. Step 1: List of Materials The materials used in the project are: Arduino board (I used a Duemilanove, but any board will work) Arduino proto shield or sensor shield (optional) Six 1.5 volt batties (I used AA) Six cell battery holder with barrel plug White LED Red LED 8 ohm speaker Continuous rotation servo Parabolic reflector (I used one from a $3 flashlight) Thin, three-ply wood (about four square feet) Saw Wood glue Hot glue/hot glue gun GEM-TAC clear drying glue Various screws, nuts and standoffs Step 2: Cupola The cupola was the most challenging part of the model. The hexagonal roof is made from six isosceles triangles, each with a base of 4cm. See Figure 2-2. I intended for the roof to have a height of 1cm at the center, which meant that the other two sides of each triangle should have a length of about 5.745cm. My cutting and piecing must have been off as the actual roof ended up with a height of about 2cm. This worked out well, as this configuration looked more like the actual cupola roof. I cannot change the angle of the blade on my small band saw, so I had to miter the edges of the triangles with a Dremel rotary tool. Used hot glue instead of wood glue to piece the roof together since, when it is dry, there is more “give” in the hot glue. I needed this since I had to “massage” the roof a little bit to get it to sit properly. See Figure 2-3 The lower portion of the cupola is made from six rectangles each with a base of 4cm and a height of 5cm. Again, I mitered the sides and used hot glue to piece them together. The cupola has six posts that are 3mm wide and 5cm long. These are hot glued into the six corners of the hexagon with 4cm extending above the lower portion to hold the roof. The spire on top is made from a fake pearl with a toothpick stuck trough it. See Figure 2-4. Step 3: Lower Sections The middle and bottom sections of the structure are much less difficult. The middle section consists of four rectangular pieces of width 10.3cm and height 12.3cm fitted together. I used wood glue on these sections as the rectangular geometry was much more straightforward (and much more forgiving) than the hexagonal cupola. See Figure 3-2. The roof of the middle section/floor of the cupola is a 11.3cm by 11.3cm square. I cut a hole in this square to mount the servo and pass wiring from the cupola to the lower sections. The hole has to be offset so that the rotor of the servo is in the exact middle of the square. See Figure 3-3 and also Step 4. I used plastic mesh for the fence around the cupola and secured it with clear drying glue. See Figure 3-4. The bottom section consists of four trapezoids with bottom width 15.7cm, top width 10.3cm and angled sides of 23.1cm. See Figure 3-5. There are several round porthole type windows on the structure, which I drilled with a 3/8 inch drill bit. There are also smaller holes on one side for the speaker. See Figure 3-6. Step 4: Electronic Components I disassembled a cheap LED flashlight to get both the white LED and the parabolic reflector (5cm in diameter). I drilled a small hole on the outer edge of the reflector so that it could be attached to the servo horn with some standoffs and screws. A little hot glue behind the anchor screw was necessary to get the reflector to sit vertically. See Figure 4-2. I used a 3.5cm standoff and another screw to attach the servo horn. See Figure 4-3. Three screws and nuts were used to secure the speaker to the bottom section. Wires and hot glue were used to set the LEDs in place. Step 5: Circuit Diagram See Figure 5-1. The white LED is connected to pin 1 through a 220 ohm resistor. The red LED is connected to pin 5 through a 220 ohm resistor. The red wire of the servo goes to Vin, the black wire to ground and the white signal wire to pin 3. One wire of the speaker goes to pin 13 through a 100 ohm resistor and the other wire goes to ground. You could even replace the 100 ohm resistor with a 200 ohm (or similar) potentiometer if you want a volume control.   For more detail: Arduino Controlled Lighthouse ### TI unveils its fastest 16-bit DAC, sampling at 1.5GS/s Description The DAC34SH84 is a very low-power, high-dynamic range, quad-channel, 16-bit digital-to-analog converter (DAC) with a sample rate as high as 1.5 GSPS. The device includes features that simplify the design of complex transmit architectures: 2× to 16× digital interpolation filters with over 90 dB of stop-band attenuation simplify the data interface and reconstruction filters. Independent complex mixers allow flexible carrier placement. A high-performance low-jitter clock multiplier simplifies clocking of the device without significant impact on the dynamic range. The digital quadrature modulator correction (QMC) enables complete IQ compensation for gain, offset and phase between channels in direct upconversion applications. Digital data is input to the device through a 32-bit wide LVDS data bus with on-chip termination. The wide bus allows the processing of high-bandwidth signals. The device includes a FIFO, data pattern checker, and parity test to ease the input interface. The interface also allows full synchronization of multiple devices. The device is characterized for operation over the entire industrial temperature range of –40°C to 85°C and is available in a 196-ball, 12-mm × 12-mm, 0.8-mm pitch BGA package. The DAC34SH84 low-power, high-bandwidth support, superior crosstalk, high dynamic range, and features are an ideal fit for next-generation communication systems. Features Low Power: 1.8 W at 1.5 GSPS, Full Operating Condition Multi-DAC Synchronization Selectable 2×, 4×, 8×, 16× Interpolation Filter Stop-Band Attenuation > 90 dBc Flexible On-Chip Complex Mixing Two Independent Fine Mixers With 32-Bit NCOs Power-Saving Coarse Mixers: ±n × fS /8 High-Performance, Low-Jitter Clock-Multiplying PLL Digital I and Q Correction Gain, Phase and Offset Digital Inverse Sinc Filters 32-Bit DDR Flexible LVDS Input Data Bus 8-Sample Input FIFO Supports Data Rates up to 750 MSPS Data Pattern Checker Parity Check Temperature Sensor Texas Instruments has introduced its fastest 16-bit digital-to-analogue converter (DAC). The quad DAC34SH84 samples at 1.5GS/s with power consumption of 362mW per channel. TI is offering it as a pin-compatible upgrade from the 1.25-GSPS DAC34H84 for LTE, GSM and WiMAX wireless basestations. A 750MS/s-per-DAC input rate supports up to 600MHz complex bandwidth for fifth order linearization of 120MHz. There is 2x to 16x interpolation and two independent, 32-bit numerically controlled oscillators which lower the interface rate of associated FPGAs. On-chip calibration of complete RF transmit path suppresses sideband and local oscillator feed-through while driving IQ modulators, such as the new TRF3705. The DAC34SH84EVM evaluation module can be purchased today for US$499. It includes transformer-coupled IF outputs to evaluate the DAC34SH84 directly. The DAC34SH84 is sampling now in a small 12-mm x 12-mm BGA package. Production quantities are expected in 2Q 2012. For more read: TI unveils its fastest 16-bit DAC, sampling at 1.5GS/s ### How to Successfully Market Yourself as a Freelance Accountant The world continues to be dominated by freelancers, meaning you have a great chance of becoming a successful freelance accountant. Whether you choose to do this in your spare time or become a full-time freelancer, marketing is the key to finding and retaining clients. Many small businesses cannot afford an in-house accountant, which is where you come in. To successfully market yourself as a freelance accountant, follow the steps below. Choose a Niche Any business does better when it understands its target audience and chooses a niche. With so many different freelance accountants out there, how will you stand out? A niche helps you to define a specific set of people you can assist with your current skill set and can make it easier to find new clients. If you have experience working within a certain industry, such as gas and oil, it may be best to stick to this niche. As a freelancer, it can be difficult to stay current with the latest industry trends. To better serve your niche market, consider these Online CPE Courses for Accountants in the gas and oil industry. Create a Brand Name and Logo Branding your freelance business will make your content look more professional and enhance your brand identity. Instead of working as just yourself, consider creating a brand name and logo, which you can use across your website, social media accounts, and emails. This could be something as simple as your name followed by the word accounting, or a name that specifies exactly what type of accounting you do. Build a Professional Website Nobody will take you seriously as a freelance accountant without a professional website. Even those on a low budget can create a free website, which can be improved as the money starts rolling in. If you approach a company via email or social media, they are likely to use a search engine to find out more about you. If they find a professional-looking website, they are more likely to take you seriously as a freelancer. Your website should list any services you offer but avoid putting prices on here. You may need to negotiate, especially when first starting out. Posting regular blog posts can help your business gain traction and improve search rankings. Once you’ve worked with clients, ask them for a testimonial, which can be posted on your website to impress potential customers. Create Social Media Accounts Social media is one of the best and cheapest ways for freelancers to get word of their services out there and get noticed. As a freelance accountant, you may want to focus on sites such as Facebook and LinkedIn. Once you have created your account, compose a compelling profile and link to your website. You should post regularly on your social media accounts with interesting and informative information for potential clients. Daily engagement with your social media accounts can help your posts get views. Follow and network with other freelance accountants and start-ups, as this is a great way to start a conversation with a small business that might need a freelance accountant. Start a Mailing List Mailing lists can keep old, existing, and potential clients in the loop and remind them of the great services you offer. When sending out emails, make sure they are relevant and include any offers or deals that could be of interest. Focus your emails around important tax dates, as this will remind clients of the important deadlines for the year and may just spur them on to reach out for help. Get in Touch with Start-Ups and Small Businesses Becoming a freelancer takes patience and dedication to the craft. You may need to spend days researching new start-ups and small businesses in your area that you can approach. Do this in person or by sending out emails to introduce yourself and your services to relevant companies. Make sure to keep this simple and consider offering a free consultation. This allows businesses to learn more about the importance of using an accountant and the benefits you can offer, such as finding ways to lower their tax payments. Marketing yourself as a freelance accountant starts with choosing a niche and creating a brand image. Building a professional website will help more possible clients find you and improve your online reputation. Create social media accounts and network with businesses, start a mailing list to keep clients updated, and start getting in touch with start-ups and small businesses that you can work with. ### ARIES LAUNCHES RISC-V BASED POLARFIRE SOC MODULE Aries Embedded has launched a Linux-powered, FPGA-enabled RISC-V SoC from Microchip’s Micro semi unit, called the M100PFS. It is one of the first compute modules equipped with the PolarFire SoC. The M100PFS features an identical 74 x 42mm footprint as Aries’ similar M100PF module, which is equipped with the PolarFire FPGA without the Linux-ready RISC-V cores. The M100PFS enables applications like wireline access networks, cellular infrastructure, defense, commercial aviation, industrial automation, and IoT. The new M100PFS offers support for more entry-level FPGA models, two more versions of the M100PFS module with different FPGA capabilities are available for order with shipments due in Q3 2020. The mid-range 93KLE and 161KLE FPGAs are available only on request. The largest 460K LE capability will be available in a later model. There are two major M100PFS SKUs, namely the M100PFS-025ADA0 — MPFS025T FPGA with 23K LE, 68 math blocks, 4x SERDES, 1GB LPDDR4 RAM for HMS (RISC-V/Linux), 4GB eMMC, and the M100PFS-250AECC — MPFS250T FPGA with 254K LE, 784 blocks, 16x SERDES; 4GB LPDDR4 each for HMS and FPGA; 8GB eMMC. All the models that are available now enable 12.5Gbps SERDES and 2x PCIe root port/endpoints. Available also are 2x 64-bit AXI4 processor-to-fabric interfaces,  3x 64-bit AXI4 fabric-to-processor interfaces, and a 32-bit APB processor-to-fabric link. The M100PFS incorporates a 32 MBit SPI NOR flash and also an “execute in place” Quad SPI flash controller. It offers support for up to 64GB eMMC by order. Its 3.3V, 0 to 70°C tolerant module features dual 180-pin Samtec board-to-board connectors. I/O features includes 2x GbE, 2x CAN 2.0 A and B, 2x SPI, 2x I2C, 5x multi-mode UARTs, and single USB 2.0 OTG and MMC 5.1 SD/SDIO connections. Additionally, the module enables GPIO, an RTC, a clock distribution, and different timers, inclusive of 5x watchdogs. The announcement does not include a carrier board, but the FPGA-only M100PF module features an optional M100PFEVP baseboard. The carrier features a microSD slot plus 2x GbE ports, a micro-USB port, 4x DB9 ports, and 2x UART and 2x CAN ports. The M100PFEVP also features a TFT, HSMC, and 3x PMOD connectors. The M100PFS module will be available along with the Linux- and FPGA PolarFire SoC development tools. Read more: ARIES LAUNCHES RISC-V BASED POLARFIRE SOC MODULE ### ADI low noise MEMS microphone targets mobiles The ADMP504 is a high performance, very low noise, low power, analog output, bottom-ported omnidirectional MEMS microphone. The ADMP504 consists of a MEMS microphone element, an impedance converter and an output amplifier. The ADMP504 sensitivity specification makes it an excellent choice for both near field and far field applications. The ADMP504 is function- and pin-compatible with the ADMP404 microphone, providing an easy upgrade path. The ADMP504 has very high SNR and extended wideband frequency response, resulting in natural sound with high intelligibility. Low current consumption enables long battery life for portable applications. The ADMP504 complies with the TIA-920 Telecommunications Telephone Terminal Equipment Transmis- sion Requirements for Wideband Digital Wireline Telephones standard. The ADMP504 is available in an ultraminiature 3.35 mm × 2.5 mm × 0.88 mm surface-mount package. It is reflow solder compatible with no sensitivity degradation. The ADMP504 is halide free. FEATURES and BENEFITS     Tiny 3.35 mm × 2.5 mm × 0.88 mm surface mount package     Omnidirectional Response     Very high SNR of 65 dBA     Sensitivity of –38 dBV     Extended frequency response from 100 Hz to 20 kHz     Low current consumption:     < 180 uA     Single-ended analog output     120 dB maximum SPL     High PSR of 70 dBV     Compatible with Sn/Pb and     Pb-free solder processes     RoHS/WEEE compliant APPLICATIONS     Smartphones and feature phones     Tablet computers     Teleconferencing systems     Digital still & video cameras     Bluetooth headsets     Notebook PCs     Security and surveillance   Analog Devices has announced its lowest-noise MEMS (micro electromechanical system) microphone. The microphone’s SNR (signal-to-noise ratio) is 65dBA, or 29-dBA EIN (equivalent input noise). According to the supplier, this is the same SNR performance as an array of two individual 62dB SNR microphones. The ADMP504 microphone has a frequency response up to 20kHz and a high PSR (power-supply-rejection) of 70dBV. It is available in a 3.35mm x 2.50mm x 0.88mm surface-mount package. For more information, visit: http://www.analog.com/ADMP504 To view a video on the application of the ADMP504, visit: http://videos.analog.com/video/products/MEMS-sensors/1431854772001/ADI-MEMS-Mics-Set-New-Bar-in-Noise-Performance/ For additional support, connect with engineers and ADI product experts on EngineerZone, an online technical support community: http://ez.analog.com/community/ask_the_expert/mems-microphones Analog Devices believes the MEMS microphone can match the cost and useability of traditional electret condenser microphones (ECMs) in volume consumer applications like mobile phones. There three factors drive MEMS technology: potential for higher audio quality, the small size and the presence in the market of multiple suppliers will affect the take-up of MEMS microphones.   For more read: ADI low noise MEMS microphone targets mobiles ### Working with a Load Cell and an Arduino We built a system that uses eight air-clamping cylinders (McMaster-Carr 62185K64) to push down on a piece of glass to seal it to a sidewall. A number of times, the glass has cracked. So, this project is an attempt to come up with an inexpensive way of measuring how many pounds of force the cylinders are exerting. The sensor that we want to use is a load cell (an arrangement of strain gauges). The specific load cell that we're using is the FX 1901 Compression Load Cell. We bought ours from Mouser for $30. Load cells only make a very small change in voltage, so you have to use an instrumentation amplifier to increase the voltage to something we can use. The specific instrumentation amplifier that we're using is the Burr-Brown INA125 Instrumentation Amplifier. This also came from Mouser and cost just under $6. The fastest way to hook everything together and see if it would work was to use an Arduino board and use the computer for readout. These boards can be purchased for around $30. Here is a basic schematic of what we were trying to do. Here is how everything looked hooking up all the parts. Once everything is hooked up, we just needed to write a program that would read analog pin 0 on the arduino, since that's where we hooked up the output of the amplifier. // Arduino with load cell // Put two known loads on the sensor and take readings. Put those values // here. float aReading = 192.0; float aLoad = 15.0; // lbs. float bReading = 344.0; float bLoad = 24.3; // lbs. long time = 0; int interval = 500; // Take a reading every 500 ms void setup() { Serial.begin(9600); } void loop() { float newReading = analogRead(0); // Calculate load based on A and B readings above float load = ((bLoad - aLoad)/(bReading - aReading)) * (newReading - aReading) + aLoad; // millis returns the number of milliseconds since the board started the current program if(millis() > time + interval) { Serial.print("Reading: "); Serial.print(newReading,1); // 1 decimal place Serial.print(" Load: "); Serial.println(load,1); // 1 decimal place, println adds a carriage return time = millis(); } } For more detail: Working with a Load Cell and an Arduino ### What are the Signs that You Should Consider a New IT Service Provider? If your IT systems are completely or partially managed by an external managed service provider (MSP), then you should see a boost in your company’s performance and a reduction in annual expenses, as compared to statistical data from before. If none of that seems familiar, then that in itself should be the first red flag. We will get into more details next to further clarify the signs that indicate it is truly time to find a new IT service provider.   Unsatisfactory, Slow Response Two of the critical factors that set a reputed and efficient IT Provider aside from an inefficient one are response speed and resolution quality. Response speed is judged on the basis of the following factors: How quickly they respond to client complaints. How quickly they start working on the problem. How much time it takes for them to address the issue. Resolution quality is dependent on the following aspects: How well they keep clients updated with real-time status notifications regarding their progress with solving the complaints. How effective the solutions implemented by them are in actually solving the issues. If you find your present IT provider to be slow and dissatisfactory in their response and resolution to IT complaints, you should not be wasting any more time with them. Reoccurring IT Issues Reoccurring IT issues indicate that the quality of your managed IT service provider’ complaint resolutions are not up to the mark. They are most likely temporary fixes and more akin to patchwork than actual solutions. However, there is another angle to consider here which is just as important. It isn’t uncommon to find that a client did not take on board any or all of the essential actions suggested by their IT service provider, after they helped in averting an impending IT disaster. In such cases, the fault lies with management and not the external IT service provider. On the other hand, if the client did act on the suggestions without result, that is most certainly a sign of incompetency on the IT service provider’s part. Take it as a clear indication that you need better a better MSP. Lapses in System and Network Monitoring If your IT service provider is not monitoring your network and system like a cyber hawk 24/7, they will not be able to detect all incoming and internal threats in time. So, how do you know if your MSP’s remote system and network monitoring is lapsing? They will not know about one or more of the problems currently plaguing your system and network before someone from the company’s end makes an official complaint to inform them about it. It does not work like that anymore because the threats online are just too myriad, constant, and vast for that. Instead, it should be the other way around. A competent IT MSP will solve most minor issues and start addressing all major issues even before the client realizes they exist. They should be the ones sending alerts, notifications, suggestions, and updates to the client and not the other way around. This would only be possible when your IT provider does not have any lapses in their 24/7 system and network monitoring. If that’s not what you are getting right now, consider changing MSPs. ### 36V OPERATION, COIL-INTEGRATED STEP-DOWN DC/DC CONVERTERS Torex Semiconductor Ltd. has launched the XDL605/XDL606 series of AEC-Q100 compliant, ultra-small step-down “micro DC/DC” converters which have an integrated coil and control IC. A DC/DC converter power supply circuit can be constructed simply by adding a ceramic capacitor and a resistance for voltage setting to the external components, which can contribute to substantially reducing space requirements for board areas and shortening development periods. Also, the internal incorporation of the coil simplifies board layout, making it possible to minimize radiation noise and problems with circuit operation. An input voltage of 3.0V to 36V (absolute maximum ratings 40V) with a switching frequency of 2.2MHz, 0.75V standard voltage supply are built-in, and the output voltage can be set from 1.8V to 5.0V with an external resistance. The control system can be selected from PWM control (XDL605) or PWM/PFM automatic switching control (XDL606). The soft-start time has been internally set to 2.0ms (TYP.), but can be optionally set to any desired value by connecting a resistance and capacity to the EN/SS pin, and the power good function makes it possible to monitor the status of the output voltage. Sequence control can be performed with a combination of the softstart time and power good function. The coil and control IC are encapsulated in a DFN3625-11B ultra-small leadless package (outside dimensions: 2.5 x 3.6 x h1.55mm) (Figure 1), making these products among the world’s smallest class of coilintegrated DC/DCs compliant with AEC-Q100. Read more: 36V OPERATION, COIL-INTEGRATED STEP-DOWN DC/DC CONVERTERS ### LittleGoal: World Cup Match Notifier using Arduino [ This Instructable was made at the Taipei Hackerspace littleBits Instructables Build Night. ] Can't watch the World Cup football games, but want to know when important game events (ie. goals) happen? Then littleGoal is for you! The littleGoal setup will monitor the game's progress, and alert you via vigorous flag-waving and a photogenic Goal! sign when anything of importance happens during your World Cup game. It is intended to be quickly assembled, minimalistic, and pretty much ready to use for your next game! Step 1: Ingredients What's needed? littleBits 1 × Arduino at Heart module 1 × power module 2 × servo module 1 × light wire module 1 × fork module or split module (optional) 1 × buzzer module (optional) some wire modules (optional) board (foam, plastic, wooden...) paper for the flags pieces of strings internet enabled computer (here we use a Raspberry Pi) Micro USB cable to connect the computer and Arduino The wire modules make it easier to place the relevant pieces, while the fork+buzzer is only needed if you want sound effects as well besides the light effects. The little bit parts were all included in the single littleBits Deluxe Kit, except for the Arduino module. The power is originally provided by a 9V battery. Servos use quite a bit of power, though, so I ended up adding a 9V wall plug that fit the same power module to make sure the Arduino doesn't go under voltage and restart on me... Step 2: Mechanical setup The major part of the mechanical setup concerns the way the team flags are hung up and waved by the servo modules. Tried to make it as simple as possible, and can use whatever you find around you. Here in Taiwan we have a lot of spare bamboo chopsticks, and those are great for scaffolding. The first step was cutting in the top of the chopsticks so that a string can be hung from there without dropping (making the flagpost). I used a wood saw, but anything is good that makes a little groove on the top. The post base is a foam board, just made a hole, and secured (hm, not very securely) the sticks with tape. If you have better idea, please do that, this was a quick and dirty way. The two posts are some 20cm apart, something convenient. We've printed the flags in colour. Got the SVG (vector graphics) files from Wikimedia and used Inkscape to arrange them. The printed size is 8cm on the long edge, but could use whatever fits your setup. Might need some playing around with the image files. I got lucky that the person on the team taking care of the flag arrangement knew what she was doing. :) Double-side printing, cut and fold. Strings taped in the inside of the flags to hang them. A string is then taped to the bottom part of the flag and tied to the servo. Pulling on the bottom allows bigger (more exaggerated) movements for the flag when pulled. The strings can be simply tied to one of the servo's holes (the servo comes with a few different moving pieces, this was the default piece, good enough. The servo control should be switched to "turn" mode. Step 3: The GOAL! lights The remaining main part is the GOAL! sign. Fortunately we already had some experience with electroluminescent wire from the Cool Neon Build Night (here's our music controlled Hack sign and galloping horse), and knew how to make something cool relatively quickly. Use a board that you can easily modify, but it's still sturdy enough (we had a piece of display foam board) you can design your text by first outlining with a marker pen. can make holes in the board to hide the wire behind the board to have breaks in the text, eg. between letters tape it down to the board to secure it on the front when testing, you might need to turn down the light a bit, EL wires are not that bright... We had enough remaining wire to have an outline to the board's edge too, it made it even more sign-y. Mentioned in the ingredients part that it's optional to add a buzzer module. This is especially nice if you are a fan of vuvuzela from the last World Cup! Since all the games are after midnight here in Taiwan, and the walls are very thin, I chose to remove it, but in testing it worked very nice!   For more detail: LittleGoal: World Cup Match Notifier using Arduino ### Says ST gyroscope brings dead-reckoning to cars The A3G4250D is a low-power 3-axis angular rate sensor able to provide unprecedented stability at zero rate level and sensitivity over temperature and time. It includes a sensing element and an IC interface capable of providing the measured angular rate to the external world through a standard SPI digital interface. An I2C-compatible interface is also available. The sensing element is manufactured using a dedicated micro-machining process developed by STMicroelectronics to produce inertial sensors and actuators on silicon wafers. The IC interface is manufactured using a CMOS process that allows a high level of integration to design a dedicated circuit which is trimmed to better match the sensing element characteristics. The A3G4250D has a full scale of ±245 dps and is capable of measuring rates with a user-selectable bandwidth. The A3G4250D is available in a plastic land grid array (LGA) package and can operate within a temperature range of -40 °C to +85 °C. Key Features Wide supply voltage: 2.4 V to 3.6 V ±245 dps full scale I2C/SPI digital output interface 16-bit rate value data output 8-bit temperature data output Two digital output lines (interrupt and data ready) Integrated low and high-pass filters with user-selectable bandwidth Ultra-stable over temperature and time Low-voltage-compatible IOs (1.8 V) Embedded power-down and sleep mode Embedded temperature sensor Embedded FIFO High shock survivability Extended operating temperature range (-40 °C to +85 °C) ECOPACK® RoHS and “Green” compliant AEC-Q100 qualification STMicroelectronics has introduced its first 3-axis digital-output gyroscope that meets the industry-standard qualification for automotive integrated circuits (AEC-Q100). The angular-rate sensor is designed for applications, including in-dash navigation, telematics and vehicle tolling systems. In many cases dead-reckoning systems ar eused to compensate for loss of satellite signal with GPS, and so can be used for monitoring motion, distance travelled and altitude. Gyroscopes which employ a single sensing structure for motion measurement along all three orthogonal axes can eliminate interference between the axes, thereby increasing measurement precision, coupled with improved output stability over time and temperature. The A3G4250D gyroscope measures angular rates up to +/-250dps (degree per second). An on-chip IC interface converts the angular-motion data into a 16-bit digital bit stream that is transmitted with high reliability to a dedicated microcontroller chip through a standard SPI or I2C protocol.   For more read: Says ST gyroscope brings dead-reckoning to cars ### Arduino ESPWroom02 Breakout Board Hey, what's up, everyone? So here's something useful: a custom breakout board for using the ESPWROOM02U module for tinkering and testing. The ESP-WROOM-02U Breakout Board is an ESP8266EX-based microcontroller that offers the same features as its predecessor, the ESP Series, but is way smaller, making it suitable for implementing into a badge or wearable project. Furthermore, the ESP-WROOM-02U integrates a U.FL connector for adding an external antenna for increasing the WiFi range, which is an eye-catching feature. It comes in two variants, ESP-WROOM-02D and ESP-WROOM-02U, where 02D is without the U.FL connector and 02U comes with it. For using this microcontroller, we need a breakout board of some sort for programming the board and using its I/O pins for controlling stuff. So I prepared a simple carrier board that lets us program this MCU and interact with it. This Instructables is about the whole building process and how to use this module, so let's get started. Supplies Following are the materials used in this built- ESP-WROOM-02U Module Custom PCB 10K Resistor 0603 Package 1K Resistor 0805 Package BLUE LED 0805 Package RED LED 0805 Package SMD tactile switch Male Header Pins Female Header Pins nodemcu for programming Step 1: ESP-Wroom-02U Module ESP-WROOM-02U is an ESP8266 chip-based microcontroller made by Espressif Systems. It comes under the category of 802.11 WiFi modules and is powered by an ESP8266EX, which is a Tensilica L106 32-bit RISC processor. Its operating voltage is between 2.7 and 3.3 volts, and it works at a frequency of 2.4 to 2.5 GHz. As for its average current, it consumes 80mA at least and 170mA max. It has 11 GPIO pins that can be used as regular I/O pins. As for its working, we can easily use this in place of regular ESP12F modules. Its specs are similar to those of ESP12F modules; the only difference is the size, which is way smaller and more compact. Here's its datasheet for more in-depth info- https://www.espressif.com/sites/default/files/documentation/esp-wroom-02u_esp-wroom-02d_datasheet_en.pdf Step 2: PCB Design We start first by preparing a basic schematic of the ESP-WROOM Module by following its minimal configuration setup in the datasheet and replicating it into the PCB CAD software. In the design, we connect 2x 10K resistors to the enable pin and GPIO0, both of which are pulled up to 3V3. There's also a 10K resistor between GPIO15 and GND, as well as one between the reset pin and 3V. We also added a few SMD resistors: C1 and C2 are added between VCC and GND, which are 100nF and 10uF, respectively. These capacitors are for smoothing the input voltage fed into the ESP module and reducing noise. C3 is connected between the enable pin and ground. For accessing GPIOs, there is a two-pin header connector that connects to all GPIO ports. As for programming, we also added a separate connector that programming is connected to with pins that are required by NODEMCU to interact with this board during programming. Additionally, two LEDs were added to this setup for testing the Blink-Chaser sketch; both of these LEDs are connected with a common load resistor, and GPIO4 and GPIO5 were used for driving these LEDs. After finalizing the schematic, I prepared a small PCB that neatly holds everything around the ESP module, which is placed in the middle. Attachments sch.pdf Download Step 3: PCBWAY After finalizing the PCB and exporting the Gerber data, we sent it to PCBWAY for samples and placed an order for a blue solder mask with a white silkscreen. I received PCBs within a week, and they were excellent, as expected. I love the quality of PCBs made by PCBWAY. There are other manufacturers available, but their service is always on another level. check out PCBWay service for getting great PCB service at less cost. Step 4: PCB Assembly PCB Assy is primarily comprised of four processes, which are as follows: Solder Paste Dispensing Process Pick and Place Process Hotplate Reflow THT Components Step 5: Solder Paste Dispensing The first step is to apply solder paste to each component pad. We use regular Sn-Pb solder paste that has a melting temperature of 140° to 270°C, and to apply the solder paste, a solder paste syringe with a wide nozzle is used. Step 6: Pick and Place Process We then used an ESD tweaker to carefully pick and place all the SMD components in their assigned places one by one, which took like 30 seconds tops, but the result was a perfect PCB with all the components placed in their locations. Step 7: Hotplate Process After the "pick and place process," we carefully lifted the whole circuit board and placed it on my new Mini Hotplate. The hotplate heats the PCB from below up to the solder paste melting temperature. As a result, the solder paste melts and components get solder on their pads. Step 8: THT Process Next, we add header pins to this board: male header pins for adding this setup on a breadboard and female header pins for connecting an external programmer for programming the ESP board. Step 9: Breadboard Setup Here's one problem: Because I was aiming to make a rectangular board, I forgot to keep it short enough to place it normally on a breadboard. That's not an issue, as we can use two breadboards for placing the board, one for each side. Step 10: Programming the Module by NodeMCU For programming this board, we could use two methods. 1. Use an FTDI UART Board with Boot Mode Buttons 2. Use a NODEMCU Board without adding any Boot Mode Button The method that involves programming the board with NODEMCU is by far the best way to program any ESP device or chip. Nodemcuhas an onboard CP2102 chip, which is a UART chip for programming the MCU through TX and RX pins. Nodemcualso has two transistors that put the ESP into boot mode, which terminates the manual process of adding external buttons and pressing them during the uploading process. Previously, I made a programmer board that broke out these pins from the NODEMCU board. 3v GND RST GPIO0 TX RX Before the main wiring, we add a jumper between the ENABLE pin of the nodemcu and GND. This will put the ESP8266 board of NODEMCU to sleep, and we can connect an external ESP8266 board with the onboard CP2102 chip. We connect the ESP-WROOM's 3V, GND, RST, GPIO0, TX, and RX pins with the same pins of the nodemcu. First, we connect the nodemcu Board's header pins to the ESP-WROOM female header pin connector in the right order. Next, we open Arduino IDE and plug the USB into nodemcu. we then go to the Tools menu and select the board that is being used which is in this case NODEMCU1.0 board. we select the right com port and hit upload. Source: ESPWroom02 Breakout Board ### Pololu Dual MC33926 Motor Driver Shield for Arduino This shield makes it easy to control two brushed DC motors with your Arduino or Arduino-compatible board. Its dual MC33926 motor drivers operate from 5 to 28 V and can deliver a continuous 3 A per motor. These great drivers also offer current-sense feedback and accept ultrasonic PWM frequencies for quieter operation. The Arduino pin mappings can all be customized if the defaults are not convenient, and the motor driver control lines are broken out along the left side of the shield for general-purpose use without an Arduino. Compare all products in Brushed DC Motor Drivers or Arduino Shields. Overview This motor driver shield and its corresponding Arduino library make it easy to control two bidirectional, brushed DC motors with an Arduino or compatible board, such as the A-Star 32U4 Prime. The board features a pair of Freescale MC33926 motor drivers, which operate from 5 to 28 V and can deliver a continuous 3 A per channel, and includes current sense circuitry, protection resistors, a FET for reverse battery protection, and logic gates to reduce the required number of I/O pins. It ships fully populated with its SMD components, including the two MC33926 ICs, as shown in the picture to the right; stackable Arduino headers and terminal blocks for connecting motors and motor power are included but are not soldered in (see the Included Hardware section below). This versatile motor driver is intended for a wide range of users, from beginners who just want a plug-and-play motor control solution for their Arduinos (and are okay with a little soldering) to more advanced users who want a dual MC33926 carrier that requires fewer I/O pins to control. The Arduino pin mappings can all be customized if the defaults are not convenient, and the simplified MC33926 control lines are broken out along the left side of the board, providing a convenient interface point for other microcontroller boards (see the right connection diagram below). This versatility, along with an option to power the Arduino directly from the shield, sets this board apart from similar competing motor shields. For a higher-power alternative to this shield, please consider the dual VNH5019 motor driver shield, which can deliver a continuous 12 A per channel. For lower-power, lower-cost alternatives, consider the DRV8835 dual motor driver shield or A4990 dual motor driver shield. Features Wide operating voltage range: 5 – 28 V 1 Output current: 3 A continuous (5 A peak 2) per motor Inputs compatible with both 5 V and 3.3 V systems PWM operation up to 20 kHz, which is ultrasonic and allows for quieter motor operation Current sense voltage output proportional to motor current (approx. 525 mV/A) Motor indicator LEDs show what the outputs are doing even when no motor is connected Can be used with an Arduino or Arduino clone (through shield headers) or other microcontroller boards (through 0.1″ header along the left side) When used as a shield, the motor power supply can optionally be used to power the Arduino base as well Arduino pin mappings can be customized if the default mappings are not convenient Arduino library makes it easy to get started using this board as a motor driver shield Detailed user’s guide Reverse-voltage protection on motor supply 3 Robust drivers: Transient operation up to 40 V Over-current limiting via internal PWM Over-temperature shutdown and hysteresis Under-voltage shutdown Output short-to-ground and short-to-Vcc protection 1 The board supports transient (< 500 ms) operation up to 40V. Operation from 5-8 V reduces maximum continuous output current (driver performance is derated in this range). 2 Internal peak-current limiting gracefully reduces the output power at load currents above 6.5 A ± 1.5 A. See the MC33926 datasheet (1MB pdf) for more information. 3 There is no reverse-voltage protection on the logic supply.   For more detail: Pololu Dual MC33926 Motor Driver Shield for Arduino ### Stepper Motors Stepper motors are not smooth - they move in "steps". Different motors have a different number of steps to make one complete rotation. You use software to step the motor forward or backward at different speeds. There are two kinds of stepper motor bipolar and unipolar - Unipolar will have five or six cables coming from them. Bipolar will always have four. They function the same but you need different chips to drive them. Unipolar Stepper motors 5 - 6 wires require the Darlington Array IC chip. not very common easy to wire Bipolar Stepper motors 4 wires require the dual H-Bridge IC chip - L293D. Much more common trickier to wire (but still pretty easy) How to tell if you have a stepper motor? Are there 4 or more wires coming out of it? When you turn it in your fingers can you feel it "step"? Steppers are in a lot of printers and scanners, so we'll be sure to see them "in the wild" next week. here's a nice page about stepper motors Unipolar in Depth On a 6 wire stepper two of these lines will be power. Start by picking any two wires and measure the resistance across the wire. plug the black tester lead into the COM port and the red lead into the V port to the right of the COM port. put the meter on the ohm setting. (see image). take the protective tips off the testers - d'uh. if there is no resistance at all the wires are on opposite "sides" of the motor. if there is low resistance then one of the wires is the power. if there is high resistance then neither wire is the power, but they do have a common power (on the same "side"). how do you know if the resistance is high or low? Compare them! Each type of motor will give you different readings - it the relationship between the resistance that's the key. But which wire is which, because it matters that we turn them on and off in the right sequence. using the breadboard and the Arduino plug the 2 common power wires into the 5 volt. pick (at random) one of the wires and plug it into ground. This will be wire 4 when we are done, but for now it goes in ground just to run this test. I DOES NOT matter which wire you choose to be wire 4, it's the relationship between wires that's important. take another wire and plug it into ground also, but watch the motor as you do it (it may help to put a piece of tape on the motor) If the shaft does not move, you have Coil 2. If the shaft jogs (slightly)clockwise, you have Coil 3. If the shaft jogs (slightly) counter-clockwise, you have Coil 1. I had always done this step by trial and error, which works too but takes forever. Thanks to this nice site for the time saving tip. In the gif we are testing the yellow wire to see what pin it goes to by watching how the motor "jogs" when we plug it into ground. Bipolar in Depth In some respects the bipolar motor is easier because it has fewer wires, but there's no shortcut I know for figuring out which is which. Still Trial and error takes a lot less time. The wiring is actually pretty straight forward. Although you can run a stepper off of a the 5 volts on Arduino it good practice to have it use it's own power supply.   For more detail: Stepper Motors   ### Arduino Zallus Oven Controller A Flexible Oven Controller controlled via touch screen or through USB. Draw and download your own profiles using free Profile Creator. Note: Shipping outside US may take longer than estimated ship dates! A Flexible Oven Controller for any application Reflow Soldering Application: More and more often now, through-hole variations of packages are ceasing to exist. Furthermore, surface mount packages are getting more and more difficult to hand solder. Part of this is because modern components are simply not designed to be hand soldered and often are actually damaged by hand soldering. Where as DIY SMT Reflowing is a quick, reliable, and affordable way to solder surface mount components. This is where the Zallus Oven Controller Kit allows you to easily convert a toaster oven into a fully J-STD-20 compliant Reflow Oven. Perhaps the most important feature of this system is the Zallus Profile Creator tool on the PC which allows you to easily modify and create your own profiles! This guarantees your controller will work with virtually any oven and allows you to easily verify your profile is safe and Industry Compliant. Easily draw and test your own profiles! Its no secret, solder is quite easy to melt, you simply apply heat. However, actually reflowing solder means you are following an industry specifications that provides a balance between component integrity and forming quality solder joints. Most DIY oven controllers do not have any type of evaluation method as to whether or not the profile your running is safe for the components or optimum for the solder. This is a quality feature that the Zallus Profile Creator tool allows you to easily verify.   For more detail: Zallus Oven Controller ### HIGH DEMAND FOR IMAGE PROCESSING SYSTEMS IN THE MEDICAL SECTOR Health has become the dominant topic worldwide. Research and development to protect the physical well-being of each individual as well as the entire population have an unprecedented significance. More than ever, laboratories and pharmaceutical companies are striving to accelerate their processes, for example by increasing the throughput of tests or speeding up the production and distribution of medicines. Airports are making increasing use of access controls, whether in the form of ID checks or temperature measurement devices, to identify travelers with symptoms of illness. In all these areas, image processing can make an important contribution to protecting people and thus also saving lives. The possible applications are already almost unlimited and are becoming increasingly diverse in the age of Industry 4.0 – not least due to the use of artificial intelligence. A British company is currently using IDS cameras together with thermal imaging cameras to detect people with elevated temperatures and so potentially have the corona virus. The non-contact thermal imaging and measurement system designed for mass screening, detects temperature differences of less than 0.6 °C and with an accuracy of less than 0.3 °C. “The Thermoteknix FevIR Scan software tracks people in real time as they walk in front of the camera and shows their maximum face temperature on screen,” Richard Hames, Sales Director at Thermoteknix Systems Ltd., explains. The so-called FevIR Scan 2 system consists of a thermal imaging camera and a visible USB 2 uEye LE CMOS camera in a sealed housing that is connected to a laptop PC running Thermoteknix FevIR Scan 2 software. The USB 2.0 uEye LE board-level version is particularly lightweight and compact – ideal for finding a place next to the thermal imaging camera in the small FevIR Scan 2 housing. A thermal reference source with constant temperature is included in front of the thermal imaging camera. It allows for constantly calibration of the thermal imager for accurate temperature measurement to detect persons with elevated skin temperature. The UI-1642LE-C model is used to detect people passing through the system. It is equipped with a 1.3 megapixel CMOS sensor from ON Semiconductor, which has a resolution of 1280 x 1024 pixels and a frame rate of 25 frames per second. This frame rate enables screening in places with a high volume of people, such as airports or entrance halls. Source: HIGH DEMAND FOR IMAGE PROCESSING SYSTEMS IN THE MEDICAL SECTOR ### BOARDCON ANNOUNCES EM1808 EMBEDDED SBC FOR AIOT SOLUTION Boardcon today released the RK1808 based Single board computer (SBC) EM1808 with 4G/SSD, GPS, and WiFi/BT modules to meet customer demand for AIoT high-performance computing products, and make it easy for traditional embedded devices to upgrade artificial intelligence. The EM1808 SBC is featuring a Rockchip’s RK1808 processor, which is an AIoT solution with built-in high performance NPU. This Embedded board features dual-core Cortex-A35 CPU architecture, NPU computing performance up to 3.0TOPs and VPU supporting 1080P video codec, microphone array with hardware VAD function and camera video signal input with built-in ISP. The Embedded Kit offers Gigabit Ethernet connectivity, dual USB2.0/3.0 HOST, MIPI DSI/CSI connector, 4x MEMS microphone, M.2(NGFF) expansion slot for SSD or 4G LTE module, as well as external GPS and WiFi/BT modules. The board can be customized according to the actual needs of the customer. With the ultimate low power consumption, powerful AI computing of RK1808 and rich AIoT-oriented interfaces, EM1808 can meet customer demand for AI high-performance computing products, and make it easy for traditional embedded devices to upgrade artificial intelligence. Read more: BOARDCON ANNOUNCES EM1808 EMBEDDED SBC FOR AIOT SOLUTION ### Capture the image of a falling object using Arduino The aim of this project is to create a setup to capture the image of a falling object or any object in motion at a precise time using a DSLR and Arduino microcontroller. It can be done in many different ways, but the method I tried is illustrated below. Figure 1: Schematic of the setup The idea is, when the object falling or moving blocks the light source from reaching light sensor the camera and/or the external flash unit is triggered. An Arduino Uno microcontroller board is used to measure the sensor values and send trigger signal to the camera/flash. With the microcontroller you can change the threshold value of the light sensor value and add precise dealy to the trigger signal. Here the light source is a simple laser pointer is used as a light source and a cadmium sulphide photocell acts as a light sensor. The wiring diagram is shown below, A bit of explanation on how this circuit works. The photocells or the Light Dependent Resistors (LDR) have a high resistance when there is no light, equivalent to open circuit. When light is shine on them their resistance reduces. The value of the resistance depends on how bright the light is. Initially when the light source is pointed to the LDR, it has a low resistance. The LDR and the resitor R1 act as a voltage divider circuit. The voltage drop across R1 is measured by the analog input terminal of the Arduino board. Ideally would have almost no resistance (0 ohms) when a bright light is focused on it. Which means the voltage drop measured across R1 would be ~5V. But depending on the intensity of the light source and the distance from the LDR, the LDR will have some low resistance value and hence the voltage across R1 (measured at A0 terminal) will be less than 5V. When a moving object cuts the beam of light the LDR value increases and hence the voltage across R1 drops. By comparing this value with an appropriate threshold value (which you can set to be somewhere between when the light is on the LDR and when it is blocked by the object), you can use the digital output lines to trigger the camera and/or flash by setting it to high. The next step is to use the signal from digital output line of the arduino to trigger the camera and/or external flash unit. To trigger the external flash all you need to do is to short the two pins at the hot shoe connector (shown in the image below). I used a wireless flash trigger receiver which has a PC sync port to mount the flash unit. One end of the PC sync cable connects to the receiver unit and the other end connects to the collector and emitter terminals of a NPN transistor. The base of the transistor is connected to the one of the digital output lines of the Arduino board via a 1.1kohm resistor. This NPN transistor circuit acts as a switch which shorts the terminals of the PC sync cable and inturn firing the flash whenever the digital output line goes high. The camera can be triggered in a similar way using the remote shutter release cable. Depending on the make and model the connector type and the pin configuration can change. The olympus E-520 uses a 12 pin port to interface with the computer for data/video transfer and remote shutter release. I got the pin diagram for the connector from the link here. I used a 3.5mm stereo plug to connect to the other end of the 12-pin connector (this way I can use the same cable to hook up to other circuits if needed). The digital output (pin D2) from Arduino is connected to a transistor switch circuit and the output of that is connected 3.5mm stereo female pin. The line going to pin 8 of the camera has a switch on it. This is the half release button. For the full release to work the half release need to be pressed. Since the camera menu does not work when the half release button is pressed, having a switch helps so that you can look at pictures or change settings while taking pictures. Flip in on to take pictures and flip if off the change the settings or look at pictures.   For more detail: Capture the image of a falling object using Arduino ### LED Binary Clock using an Arduino A Binary Clock! I was recently looking at some binary clocks and I felt like Why not? I have everything to make one and I don't have a clock in my room. So I decided to build one and here it is. Hope you Like it and maybe build your own. It's a cool project because it's your very own, unique clock, it's easy to make, it's highly customizable in both size/shape and firmware/functions, it is Arduino based/compatible AND it looks good. Step 1: What you'll need for this project you will need the following things; Materials/components; cardbord/wood box(you choose the size)  DC WallWart 5V out at least 250 mA  Arduino or Atmega328/168/88/48  (if not using an Arduino) 16Mhz crystal and caps (the more precise, the better).  13x 220 Ohms Resistors.  13x LEDs (your preferred color)  A lot of Wire.  3x pushbuttons (PCB mount)  (optional) 1x LDR (light dependant Resistor) OR 1x Pushbutton (enclosure mount) Tools;  Soldering Iron and solder.  Cutter/Xacto Knife.  wire strippers.  Computer (I guess you have one if you're reading this).  (if not using an Arduino) USBtiny ISP. Step 2: Selecting your box The easiest and simplest enclosure is a cardboard box, you could also use a nicer plastic or wooden box, it's up to you. Select your box, remove the back part from it. if it's a cardboard box, you might want to disassemble it and reassemble it inside out, like I did, that way its easier to paint or, leave it like that and it looks great! Step 3: Mark your box. You need a 4x4 grid, but don't make holes just yet, as you won't fill it all the way. in a cardboard box, I four it's easier to just make some small holes for the LED legs and insert them from the outside, other ways the cardboard will look awful and your LEDs won't be "snapped to grid". At first, I marked my box on the inside, but later on I decided that I actuallly liked those Grid lines, so I did them on the outside too. Step 4: Add your LEDs Place your 13 LEDs in your 4x4 grid as shown in the image above. from the inside, Bend all the Leads and place a drop of hot melt glue on top of each (Bottom, actually) (see image 2). Step 5: Wiring 1 connect together all the POSITIVE leads (the longer ones) from each LED. Step 6: Wiring 2 Add one wire to each LED's NEGATIVE lead. instead of the positive lead, connect the NEGATIVE ones, contrary to the diagram above. Remember, all the POSITIVE ones are connected together, contrary to what the diagram shows. Step 7: (If using an Arduino) simply add one resistor to each wire going to each LEDs leads and connect them to the corresponding arduino pins, then connect a pushbutton to Arduino's digital pin 14 (Analog 0), one to digital pin 18 (analog 4) and another to digital pin 19 (analog 5). the 14 pushbutton will change minutes, adding one for each time you press it. the 19 pushbutton will change hours, adding one for each time you press it. the 18 pushbutton (optional) will turn ON/OFF the LEDs, but keep counting the time, this is useful for sleeping time. :) the 18 LDR (optional, instead of the pushbutton) will turn the LEDs when ther's no light, e.g. at night. but keep them on when there is, like in the day or at night, when you turn on the lights. the proper LED to Arduino pin diagram is shown below, remember that it´s the other way around, instead of all to Gnd, all to 5V, etc. Major Components in Project cardbord/wood box(you choose the size)  DC WallWart 5V out at least 250 mA  Arduino or Atmega328/168/88/48   For more detail: LED Binary Clock using an Arduino ### DIY Arduino 433MHz RF Receiver and Quad SPDT Relay Shield You are planning to use Arduino in your project but you need some kind of remote control functionality. A standalone Arduino won’t provide what you need but this DIY shield may be a good solution for you. It includes a 433.92Mhz RF receiver which lets you send commands to Arduino wirelessly and four SPDT relays which can be used for switching purposes. Each relay is capable of switching up to 10A @ 250VAC so they can be used to control mains powered devices. There are four LEDS indicating the status of the relays. The terminal blocks on the shield lets you easily connect the devices you will control. The RF receiver is a module that can be found in the market easily. It is directly soldered to the shield and runs at 4800bps. The board has an antenna input which lets you solder your custom antenna to increase the wireless range. Circuit Design The schematic of the project is drawn in SoloCapture, the schematic editor of SoloPCB tools. SoloCapture makes the schematic drawing process very easy and fast. You can download SoloPCB tools at Fabstream.com for FREE. You can download the SoloPCB design files of the project by using the link below. Download DIY Arduino RF Receiver and Relay Shield SoloPCB Design Files48 downloads Since this is an Arduino shield, there should be connections to the expansion headers of Arduino. J5 to J8 connectors are used for this purpose. They are 2.54mm pitch, 15 mm male headers. The power and the signal lines are carried to the shield over these connectors. For more detail: DIY Arduino 433MHz RF Receiver and Quad SPDT Relay Shield ### LCD Word Clock using Arduino Introduction: This Instructable is about making a 16 character by 2 line LCD Word Clock with DST switch. The pictures show how some of the times will read out. I have made a few of these for family and friends already and they have been quite well received probably because of their uniqueness. I have even made a few of these for myself which are now in use. Step 1: Parts Parts: 1602 16x2 LCD LCD module @ $3.00 on eBay IIC/I2C Interface Serial Interface For Arduino 1602 LCD @ $2.00 on eBay DS3231 AT24C32 Precision RTC Module @ $3.00 on eBay Anarduino An Arduino Compatible 24 DIP model kit @$5.40 on eBay BreadBoard P.S. Breadboard Power Supply @$1.50 on eBay Module Wiring Dupont Wire Connector Cables 20cm (female-female) @$1.50 on eBay Mini SPDT Switch @ 50 cents 2.1mm DC Pwr Jack @ 50 cents #2 hardware I use ½ inch bolts to mount parts on case. Check out jameco.com 10K Ohm Resistor 1/8W or 1/4W Molex Header Item G18974 at Electronic Goldmine @$2.00 / 10 Case enclosure MB-132 at allelectronics.com @$3.00 Arduino UNO Used to program ATMEGA328P chip and clock module Shipping is not included in the above price approximations... some are free shipping and others cost. Everything should run about $35 if you had none of it except the UNO to begin with. Step 2: Construction Initial preparations: If you are interested in building the clock the way I did, then please refer back to my first Instructable to get the bread board power supply ready for the project and to my second Instructable “Kitchen Sink Clock” to get the info needed about working with the Anarduino Kit and programming the ATMEGA328P and the Precision RTC module using the INO file provided with this Instructable.   For more detail: LCD Word Clock using Arduino ### Arduino Video Tutorial Series(Basic to Advance) Arduino Video Tutorial #1(Getting Started and basic Connection) Contents: What is Arduino? What is a sketch? What is the Arduino (software) IDE (interactive development environment) arduino-1.0.1 Arduino philosophy We take a look at the Arduno hardware. I cover how to download the Arduino Software and drivers and then how to install them. What happens when the Arduino USB device driver fails and how to solve it. I upload a sketch to the Arduino UNO R3 to test it and blink an LED. I discuss the project for tutorial #2, a voltmeter with Min Max Ave. I talk about the Sparkfun serial enabled 16 x 2 LCD and the challenges it poses.   Arduino Uno R3 features: ATmega328 micro controller Input voltage - 7-12V 14 Digital I/O Pins (6 PWM outputs) 6 Analogue Inputs 32k Flash Memory 16Mhz Clock Speed [divide style="2"] Arduino Video Tutorial #2 (Sketch structure, variables and procedures) Contents: What is the sketch structure? What are variables and what types of variables - int, integer, float, floating point, byte, string array. The build of the voltage divider for the voltmeter can be found in the Ohms law tutorial: http://www.youtube.com/watch?v=AWLJAD... What is the Arduino (software) IDE (interactive development environment) arduino-1.0.1 What is an Arduino library / libraries Arduino philosophy We take a look at the Arduno hardware. I discuss the project for the tutorial, a voltmeter with Min Max Ave. I talk about the Sparkfun serial enabled 16 x 2 LCD and the challenges it poses. I talk about the Sparkfun serial enabled 20 x 4 LCD. Arduino for beginners / dummies / newbies [divide style="2"] Arduino Video Tutorial #3 (Functions, return values and variables) Contents: Local and global variables Functions / procedures Return values from functions Sample sketch code that does Math / arithmetic and write to the terminal Some commands used: Serial.print; Serial.println, if, else, void setup, void loop, return ### Wiring of the Solenoid Valves Overview of Wiring for the Salinity Sensor Other pages describing fish tank wiring: Connect electrical power to the pump and the breadboard Connect the salinity sensor to the breadboard and Arduino Connect the solenoids to the cascade control circuit (this page) Return to the main page for the fish tank wiring.   Schematic The following schematic shows the circuit for supplying power to one of the solenoid valves. The power to the solenoid comes from the 12V power supply circuit. The relay and the transistor are powerd from the 5V circuit, which is fed from the Arduino. Cascade Switching The solenoid is controlled by a cascade-switched circuit. A digital output pin of the Arduino is connected to the base of a transitor which controls the current to a normally open, SPST relay. When the relay coil is energized, it closes the contacts, which allows current from the 12V supply to flow through the solenoid. When the solenoid coil is energized, the valve opens, allowing water to flow from the reservoir into the fish tank. The following photograph shows coil-side view of three relays. Two of the relays control separate solenoid. The third relay controls the heater. The wiring for the three relays is identical. The short red and green jumpers connect the relay circuit to the 5V power rail along the nearest edge of the breadboard. The brown, yellow and blue wires are connected to digital I/O pins on the Arduino. Each of those wires is connected to an NPN transistor by a 220 Ω resistor. The transistors are on the ground side of the relay coil. Power diodes are in parallel with the relay coil act as snubbers to the charge stored in the coil. When the current to the coil is switched off, the snubber diodes (a.k.a. flyback diodes) allow the electro-magnetic field in the coil to safely dissipate through the coil windings. The following photograph shows the contact side of the relay circuit. There are three sets of long read and black leads that connect the relays either to one of the two solenoid valves or to the heater. Two of the three relays have red indicator LEDs to provide visual confirmation that the contact is closed. The rightmost relay circuit has its LED circuit removed to make the connection to the solenoid leads more clear.   For more detail: Wiring of the Solenoid Valves ### Water level controller using arduino Arduino water level controller / indicator. This article is a about a fully functional water level controller using Arduino. The circuit displays the  level of water in the tank and switches the motor ON when the water level goes below  a predetermined level. The circuit automatically switches the motor OFF when the tank is full. The water level and other important data are displayed on a 16×2 LCD display. The circuit also monitors the level of water in the sump tank (source tank). If the level in side the sump tank is low, the motor will not be switched ON and this protects the motor from dry running. A beep sound is generated when the level in the sump tank is low or if there is any fault with the sensors. Circuit diagram. The circuit diagram of the water level controller using Arduino is shown above. Conductive method is used to measure the level. The sensor assembly consists of four aluminum wires arranged at 1/4, 1/2, 3/4 and full levels in the tank. The dry ends of these wires are connected to analog input pins A1, A2, A3 and A4 of the Arduino respectively. A  fifth wire is positioned at the bottom of the tank. Resistors R6 to R9 are pull down resistors.The dry end of this wire is connected to +5V DC. When the water touches a particular probe, electrical connection is established between that probe and the +5V probe because water has slight conductivity. As a result current flows through that probe and this current is converted into a proportional voltage by the pull down resistor. Arduino reads the voltage dropped across each pull down resistor for sensing the level of water in the tank. Same method is used for measuring the level of water in the sump tank.   For more detail: Water level controller using arduino ### Cheap wireless transmission between two Arduinos with Infrared Hi all, For a project, I was looking for a cheap solution to send data from an Arduino to an other one. The serial port was already taken, and my transmission (unidirectional) needed to be wireless. My researches has brought me to discover these kinds of radio modules (433MHz). They were available on the net, but I was still looking for something else. So, I remember that I have in my stock an IR receiver with a small remote control. I also had an IR led. After some research on the web for libraries, I used an existing one to create a small and easy IR protocol to send data between my two cards. Of course, the range and the baud rate are limited, and you must keep the cards in "eye contact". Here is a step by step presentation of this system. In my example, a temperature and humidity sensor will be used for data transmission (DTH11). The data will be sent to the other Arduino and sent to a computer. Feel free to use and modify this example for your own projects ! Thanks for the 10k views ! Step 1: Materials list Ok, you will need: • two Arduino cards (uno, mega...). I'll use an Uno and a Mega in this project. • a computer with the Arduino software • an IR led, with a 100 ohms resistor • a 38 kHz receiver module • wires • breadboard, or similar • In my case, a DTH11 temperature and humidity sensor. If you don't have it, you can simply sent a demo string. (see the code in the next step) This site was a good source of information. I encourage you to read it ! The main IR libraries are here. Please download and install them in the Arduino "Libraries" folder. (Should be in "My documents / Arduino") The libraries for the temperature and humidity sensor are here. Step 2: Wiring the emitter The emitter is easy to build. You just need to wire a led with a 100 ohms resistor, and use an other pin to connect the sensor. The Arduino pin used for the led is the 3. (See the attached pics). Watch out, the Fritzing illustration doesn't fit my real module. If you have the naked chip, you will need more parts ! See the DTH11 datasheet. If (like me) you are not sure about the LED orientation, or if you don't know if it works correctly, temporally connect the DATA wire to the +5v pin on the Arduino (to turn the LED on). Then, check with a mobile phone camera if the led is emitting (you should see a low purple colour, see pics) The temperature sensor is wired this way: • Vcc : to the +5v pin of the Arduino • Dnd : to a GND pin • Data : arduino pin 2 If you don't have this sensor, you can try the transmission by sending a string. Just check the code. The code is attached. Compile it and upload in on the card. TransmissionIR_EmetteurTemperature.ino1 KB Step 3: Wiring the receiver Ok, for the receiver, I have a ready-made reception module (38 kHz). It was used with a small remote control. Just connect it to the second Arduino following: • Gnd to GND • Vcc to Arduino Vcc (+5v) • Data : Arduino pin 11 Watch out, again the module shown in the illustration is not the same as my module. if you have a naked receiver, you must add parts ! For more detail: Cheap wireless transmission between two Arduinos with Infrared ### Design with Freedom Using Arduino Phase I - Conceptual Design (May 6, 2014 to October 31, 2014) Design with the latest free online tools available from Digi-Key. Using Scheme-it, you will be able to transform your Back-of-the-Napkin concepts to a real life Bill-of-Materials. Leveraging the Freescale Freedom Platform (with over 10 boards to choose from) you will need to design in block diagram format a feature set extension to implement your design creativity. Phase I - Best Hardware and Software submission: an Apple® iPad Air valued at no more tha (€489) Four Hundred and Eighty Nine Euros Phase I - Second place prize: an Apple® iPad Mini valued at no more than (€399) Three Hundred and Ninety Nine Euros. Phase I - Three (3) Honorable Mention prizes: an Apple® iPod touch valued at no more than (€249) Two Hundred Forty Nine Euros. Phase II: Hardware and Software Design (July 1, 2014 to October 31, 2014) Take your thoughts to the next level. Using PCBWeb, Digi-Key's free online PCB generation tool then visit mbed.org, ARM's free online software development environment to write the software needed to bring your Freescale Freedom based design to life. You can buy a Freescale Freedom Platform from Digi-Key, use one you already have or just focus on your value added solution. Let your creativity flow.   For more detail: Design with Freedom! ### Hack a TowerPro Micro Servo to Spin 360 / Continuous Rotation Hey guys! Since I've got my servos, I've had two that I set aside for hacking. So, coming to my favorite website for help, I was sorely disappointed when I couldn't seem to find any instructables on how to mod a micro servo. After viewing a few, I went to my workbench and got to work. I was very surprised when I opened up my micro servo and found it to be slightly different then the bigger servos. So, I decided I would make a guide on how to hack into your servo! So what are we waiting for? Lets get started. But then you ask, doesn't this defeat the whole purpose of a servo? Well, no. We just utilize the gearbox, so that we can use this motor as a drive motor for a robot. So now, let's really get started! Step 1: Ingredients: Ingredients needed: (no, not food ingredients unfortunately) Rotary tool or a utility knife Very small screwdriver (phillips) Soldering pencil* and solder Wire snips Needle noes pliers 2x 2.2k resistors Helping Hands (AKA 3rd hand) BTW check out this awesome instructable on making helping hands. Thanks rstraugh!& 10 minutes Step 2: Disassembly First remove any servo arms, legs, and limbs from the servo. Then, using a very small screwdriver, unscrew the four screws on the bottom of the servo. Be very careful not to lose these. Watch the video for the disassembly of the gears. The top main gear my be hard in coming off. You can see I had a little trouble getting it off in the video.   Clip #285 from AJ on Vimeo. Step 3: That 5k Potentiometer Now we are going to turn our focus on the 5k pot. Here is were it's different from the bigger servos. The shaft of the pot is also the shaft on which the gears sit on. So, we cannot get rid of the potentiometer, but we must keep it. That being said, we must unsolder the 5k variable potentiometer, and solder on 2 [2.2K] resistors. Unsolder the wires on both ends, off of the PCB and potentiometer. Save these wires for a later project. Take two 2.2K resistors and and bend the top leads over. Then, using the helping hands secure them like you see in the picture. Now solder these two top ends together. Get them as close to each other as you possible can. There should be two leads in the middle. Since this would make it harder to solder bend this wire up and cut it off. You should now have 3 leads. Solder this new resistor to the PCB as shown in the last picture. Upon request, I made a horrible video of me soldering these on. It's not the best, but at least it held. For instructions on soldering. . . Noahw and his amazing instructable http://www.instructables.com/id/How-to-solder/ & CuriousInventor.com http://www.instructables.com/id/How-to-Solder-Videos%3a-Why-is-soldering-difficult-s/ Clip #364 from AJ on Vimeo. Now we must remove the collar that stops the potentiometer from spinning 360. Note, you may need to use needle nose pliers to peel off this plastic. In my case, I had already broken the collar when I was trying to get the gears out. See the video, and see what needs to happen. There also might be a metal stop like my other servo had. Your smart, just figure out how to allow the potentiometer to spin freely, but keeping it intact. Clip #288 from AJ on Vimeo. Finally, we need to put the potentiometer back into its original place. But first, we need to bend the leads over them selves inward, so that it won't be in our way later on. Bend the leads over, the put back in it's spot. Make sure it's sitting properly on the plastic.   For more detail: Hack a TowerPro Micro Servo to Spin 360 / Continuous Rotation ### IMPLANTED RETINA GIVES SIGHT TO THE BLIND The first two patients to receive the NR600 retinal implant from Nano Retina Ltd. (Herzliya, Israel) have reported their first results. by Peter Clarke @ eenewsanalog.com The NR600 attaches to the back of the eye and includes an array of 26 by 26 silicon needles that connect to the photoreceptors. Retinal implant is stimulated by wireless, rechargeable eye glasses that provide the implant with power and send captured scene information to the implant. They also allow the patient to fine-tune different light settings. The NR600 mimics the physiological processes of the human eye and restores functional vision to persons blinded by retinal degenerative diseases, including age-related macular degeneration and retinitis pigmentosa. These are the first-in-human retinal implant results for the NR600. The two patients are part of a European clinical trial for the purpose of obtaining CE approval for the NR600. They were both blinded by retinitis pigmentosa and have had the NR600 implanted by Professor Peter Stalmans, one of Europe’s leading retina specialists with the operations performed at the Department of Ophthalmology of the University Hospital Leuven, Belgium. The Nano Retina implant is inserted into the eye in a minimally invasive surgical procedure under local anesthetic with no need for hospitalization. The estimated procedure duration is less than 1 hour. After implantation the stimulation parameters are calibrated and optimized to the patient’s individual needs. Read more: IMPLANTED RETINA GIVES SIGHT TO THE BLIND ### Regulator generates bus termination for DDR3 Description The LTC3617 is a high efficiency monolithic synchronous buck regulator utilizing a current mode, constant frequency architecture. It operates from an input voltage range of 2.25V to 5.5V and provides a regulated output voltage equal to 0.5 • VDDQIN while sourcing and sinking up to 6A of load current. An internal amplifier provides a VTTR output voltage equal to 0.5 • VDDQIN with an output current capability of ±10mA. The operating frequency is externally programmable up to 4MHz, allowing the use of small surface mount inductors. For switching-noise-sensitive applications, the LTC3617 can be synchronized to an external clock up to 4MHz. Forced continuous mode operation in the LTC3617 reduces noise and RF interference. Adjustable external compensation allows the transient response to be optimized over a wide range of loads and output capacitors. Applications DDR Termination Supports DDR, DDR2 and DDR3 Standards Tracking Supplies Features ±6A Output Current 2.25V to 5.5V Input Voltage Range ±10mV Output Voltage Accuracy Optimized for Low Output Voltages Down to 0.5V High Efficiency Integrated Buffer for VTTR = VDDQIN • 0.5 Shutdown Current: <1µA Adjustable Switching Frequency: Up to 4MHz Optional Internal Compensation Internal Soft-Start Power Good Status Output Input Overvoltage Protected Thermally Enhanced 24-Pin 3mm × 5mm QFN Package Linear Technology has introduced a synchronous step-down switching regulator, capable of generating a bus termination voltage for DDR/DDR2/DDR3 and future standard memory applications requiring sourcing and sinking of current. An internal resistor divider sets the VTT DDR termination supply and VTTR reference voltages equal to half the voltage applied to the input, with output current capability of ±6A (sinking/sourcing) at VTT and ±10mA at VTTR. The outputs are capable of operation down to 0.5V. The device operates from an input voltage range of 2.25V to 5.5V and allows switching frequencies as high as 4MHz, allowing for very small externals. The internal synchronous top and bottom power switches have an RDS(ON) of only 35mohm and 25mohm respectively, enabling the LTC3617 to attain efficiencies as high as 93%. This can eliminate the need for an external catch diode, said the supplier. For more read: Regulator generates bus termination for DDR3 ### IR DOMED LEDS DELIVER UP TO 5.0A PULSED RADIANT POWER OVER 50° Lumileds has added news LEDs to its Luxeon IR Domed Line with a significant increase in both DC and pulse drive current–up to 1.5A and 5.0A, respectively. The new emitters deliver radiant power of 1350mW at 850nm wavelength (slightly visible) or 1450mW at 940nm (invisible or covert IR). These new IR LEDs are engineered to withstand higher power so that clearer 3D imaging is possible using fewer LEDs in critical infrared (IR) applications. Drop-in replacement for existing designs is a snap with the standard 3.7 by 3.7mm footprint. In addition to high drive capability, a new 50° emitter is now a part of the portfolio. Along with the 60°, 90°and 150° emitters, these IR LEDs will serve high punch, long range or wide scanning applications, including face recognition for security and access controls. Lumileds low resistivity package (2.5 W/°C) removes heat more efficiently from the emitter, enabling even more compact camera designs and higher reliability than its competitors. Smaller, higher resolution surveillance cameras have smaller lens apertures and smaller pixel size on the image sensors. These systems need more light to function properly. The high drive capable LUXEON IR Domed Line LEDs significantly increases light output for a wide variety of IR applications,” said Alvin Yeoh, Senior Product Marketing Manager at Lumileds. “Drop-in replacement for existing designs is a snap with the standard 3.7 by 3.7mm footprint. Applications such as biometric identification, virtual reality/augmented reality headsets, machine vision and surveillance cameras will benefit immediately from the power boost. In addition to high drive capability, a new 50° emitter is now a part of the portfolio. Along with the 60°, 90°and 150° emitters, these IR LEDs will serve high punch, long range or wide scanning applications, including face recognition for security and access controls. Lumileds low resistivity package (2.5 W/°C) removes heat more efficiently from the emitter, enabling even more compact camera designs and higher reliability than its competitors. Read more: IR DOMED LEDS DELIVER UP TO 5.0A PULSED RADIANT POWER OVER 50° ### RGB LED Tutorial (using an Arduino) (RGBL) using arduino LEDs are great. But with any project there comes a point where flashing is simply not enough. For these cases an RGB (Red, Green, BLue) LED is the answer. With an RGB LED you'll be able to produce any colour glow your heart desires. At first using an RGB LED seems quite complex, but it quite quickly becomes clear that its no more difficult than controlling one of their single colour counter parts. What follows is a quick guide to get you started controlling an RGB LED first with wires then with an Arduino microcontroller. If you'd like to jump ahead to any part here's your chance. Step 1 The Parts Step 2 Testing Step 3 Arduino Controlled Example Circuit Step 4 Digital Control of Colour Step 5 Analog Control of Colour (Shamless Plug) Interested in getting a few RGB LEDs to play around with and in the UK? a component bundle can be bought at our online store oomlout.co.uk Step 1: Parts Only a few parts are required. RGB LED (common anode) A common anode RGB LED is nothing more complicated than three one colour LEDs (one red, one green, and one blue) housed in a single package. Rather than having 6 leads (a cathode and anode for each LED) it has only 4 one cathode for each colour, and one common anode. (see the schematic diagram below) A common anode RGB LED is the most popular type. It is most commonly found in either a 5mm bulb size or as a 5mm pirahna form factor. Current Limiting Resistors (270 ohm) (red-purple-brown) Most LEDs are designed to work with a voltage between 1.5v and 3v. As most microcontrollers (including the Arduino) operate on 5 volts a current limiting resistor is required. Consult your LEDs datasheet for maximum ratings but we like to use 270 ohm resistors. This limits the current to ~20mA, well within most LEDs and microcontroller ratings. Arduino Microcontroller & Breadboard A great open source microcontroller platform (for more details visit arduino.cc) Step 2: Testing Before we connect our RGB LED to our Arduino it's a good idea to give it a test. Consult your RGB LEDs datasheet for its pin-out or below are the two most common RGB LED form factors and pin-outs. Wire up the Test Schematic (below) Plug the RGB LED into your breadboard Connect a current limiting resistor to each of the three cathodes Connect the common anode to 5V (5 volts) Test each color by connecting its current limiting resistor to ground (GND) Experiment with colour mixing a little by powering multiple elements at once Step 3: Example Circuit Time to move on to controlling your RGB LEDs with an Arduino. For the example code to follow you'll need three RGB LEDs and 9 current limiting resistors (avaliable for purchase in the UK from oomlout.co.uk ) Wire up the circuit below. There are two ways to do this. For the more advanced consult the schematic below. Or for the less advanced you can download a breadboard layout sheet (the pdf below). Print this out and lay it over your breadboard for convenient component placement.6 Step 4: Digital Arduino Code It is possible to control an RGB LED digitally. This requires 3 digital pins for each LED and allows for 7 colours to be displayed (Red, Green, Blue, Yellow, Cyan, Magenta, White). But don't take our word for it download the code below and get playing. To do this simply... Copy the code below and paste it into a an empty Arduino sketch. Compile and upload the sketch to your Arduino board. Enjoy as your three LEDs light up Red, Green, and Blue. If you go to the loop() section of the code under example 1 you can see where you change the colors. Try a few other variations To see how we control each LED look at the setColor() function. Next comment out (add //) to the three lines of example 1. Un-comment (delete //) from in front of every line in the Example 2 section of the loop() code Upload this to your board and watch as your three LEDs change colour randomly. Play around with the code to see how it works and make your own fun color functions.   For more detail: RGB LED Tutorial (using an Arduino) (RGBL) ### Advanced capacitors ensure long-term performance stability To meet the demanding performance and harsh environmental conditions of automotive applications, component manufacturers have developed professional-grade tantalum capacitors that ensure long-term electrical performance stability. The professional tantalum technology satisfies the automotive industry’s need for rugged capacitors that maintain high-performance standards under electrical and mechanical stress. Technical improvements have been made that strengthen the structure of the capacitor and give it more robust performance in a variety of applications. The primary benefits of using professional-grade tantalum over standard reliability consumer electronic tantalum include: The formation ratio of professional tantalum capacitors, (which is the ratio between voltage used for electrolytical creation of dielectrics and rated voltage), is more than 3.0. This results in thicker and higher quality dielectrics. Conservative design rules are followed both in design and manufacturing. Strict quality control limits are applied and additional testing is performed. Devices are screened for hard surge current, undergo extended electrical testing, and accelerated burn-in processes are used to achieve and verify robustness. The use of professional tantalum capacitors results in enhanced reliability (failure rate = 0.5%/1,000 hours) and reduced leakage current of up to 75% less than standard tantalum capacitors. Professional tantalum capacitors are available both in standard and low equivalent series resistance (ESR) options, which make them suitable for a wide range of automotive control circuits in applications such as engine control units, anti-lock brake systems, motor-driven power steering systems, electronic gearboxes, and tire-pressure monitoring sensors.   For more detail: Advanced capacitors ensure long-term performance stability ### Darkness Map Data Collection Device The Darkness Map encompasses both data collection and visualization of nighttime light levels. You can add to the map by downloading the app for iPhone or Android, but you can also contribute data by creating your own data collection device. This tutorial will cover how to build an Arduino powered data logger with a light intensity sensor. Since the sensor modules are attached to the Arduino on a breadboard, it's fairly simple to swap out the light sensor for a different sensor of your choosing. You can use the device to log data about temperature, air quality, noise, and many other environmental factors, and because everything is attached by breadboard, you can easily adapt it to use in other projects. Step 1: Parts You Need Arduino Uno - available from a variety of online resellers, and even your local Radioshack. Adafruit Proto Shield for Arduino Kit Adafruit Ultimate GPS Breakout Kit Adafruit MicroSD card Breakout Board TSL2561 Digital Luminosity/Lux/Light Sensor Half-size breadboard CR1220 Coin Cell Battery - also available at drug stores, other online resellers MicroSD Card - you can also repurpose one from an old mobile phone 9V Battery clip 9V Battery The parts for each device cost about $90, not including the Arduino Uno. Step 2: Solder Your Breakout Boards and Kits First things first, you'll want to put together the Proto Shield kit. Adafruit has a great step by step tutorial on how to attach and solder all the necessary parts. When it comes time to attach the last parts, don't, as we'll be putting the half-sized breadboard on top of the protoshield. Next, attach and solder the header pins to the GPS module, MicroSD breakout board, and the TSL2561 light sensor. You may want to tape them if they aren't staying put as you solder. To attach the coin cell battery holder to the back of the Ultimate GPS module, heat the pads on either side of the battery holder with the tip of your soldering iron. Once they're hot enough, let solder flow on top and hold the battery holder in place until the solder hardens. After you have soldered all your header pins, you are ready to start connecting the modules together. Follow the steps in the Proto Shield tutorial, and break off the sides of the half-sized breadboard. Then peel the adhesive backing off the back of the breadboard and attach it to the top of the Proto Shield. Once you have all the modules put together, it's time to connect the wiring. Step 3: Set up the GPS Module First, you'll want to set up your Ultimate GPS Module and make sure it's working properly. In order for the GPS to get a signal, you'll want to work near a window (possibly even outside), so that you can stick your Arduino and GPS module on a window ledge for it to get a reading. As per the Adafruit tutorial, you can initially wire it so that it bypasses the Arduino's ATMega chip, and communicates directly with your computer's USB serial port. In order to do this, just wire the GPS module's +5V pin to the Arduino's +5V pin, Ground to the Arduino's Ground pin, RX to pin0 and TX to pin1. Next upload a blank sketch, where both the void setup() and void loop() functions are empty. Open the serial monitor in Arduino and you should start seeing a bunch of characters start to spit out. Make sure the serial baud rate is set to 9600. This is raw GPS NMEA code, which you can read more about here. Find the line that starts with $GPRMC. The first section is GMT (Greenwich Mean Time), next is the letter A which means the GPS module is Active (as opposed to V which would be void). Then next four values are the Geolocation data. In Brooklyn, NY my location data reads: 4041.3198,N,07357.5915,W. This translates to (Latitude 40 degrees, 41.3198 decimal minutes North and Longitude 73 degrees, 57.5915 decimal minutes West). To check this against google maps, you'd covert it into degrees of latitude and longitude that google understands. I typed in +40 41.3198 ,- 73 57.5915, and it was able to find the correct location. If you're getting readings with lots of zeros, try placing the GPS further on the window ledge. Next, you'll want to wire the GPS to your Arduino. Change the wiring so that the GPS Module's RX pin is connected to Arduino pin2, and it's TX pin is connected to pin3. Adafruit has a GPS library, but we'll be using the TinyGPS library by Mikal Hart. Download the latest version of the library and put the folder inside Documents --> Arduino --> libraries. Make sure it's called TinyGPS. Open the simple test example sketch. Notice how the serial monitor is set to a baud rate of 115200. Also, where it says ss.begin(4800); change that to be ss.begin(9600); since the Ultimate GPS Module samples at a 9600 rate. Save your changes and upload it to the Arduino. Once the sketch is uploaded, open your serial monitor. If you see a bunch of weird characters, change the baud rate to 115200. Then you should be able to see the data being printed to the serial monitor. If you're not seeing any GPS data, you may have to put your module on the window ledge again since it's most likely not receiving any new GPS signals. If your GPS module is working correctly and you've been able to run the TinyGPS library code, the next step is adding the MicroSD breakout board to the Arduino, and seeing if we can save our GPS data to a text file on the MicroSD card.   Step 4: Set up the MicroSD Breakout Board In order to see if the SD card is formatted correctly, and if the MicroSD card breakout board is setup properly, you'll want to take the GPS module off your breadboard for now and work with the MicroSD card breakout board on its own. Feel free to leave your wires in the breadboard so you can remember to leave space for the different modules. For our purposes, wire the MicroSD card like this: --5V pin to Arduino 5V pin --Ground to Arduino Ground pin --Clock pin to Arduino's pin13 --DO pin to Arduino pin12 --DI pin to Arduino pin11 --CS pin to Arduino pin10 Now you'll want to open an example from the SD card library, which comes with Arduino. We'll be checking whether our MicroSD breakout board is wired up properly, and if the SD card is formatted correctly using the CardInfo sketch. Before you upload the code to the Arduino, make sure you change one line of code. The chipSelect pin should be set to 10, not 4. const int chipSelect = 10; Upload the code to the Arduino and turn on the serial monitor. If your serial monitor gives you a message that it can't initialize the card, try reformatting it to FAT32 or FAT16 using your Disk Utility application. If you have further problems, follow the steps in the Adafruit tutorial. Next let's see if we can write files to our SD card. Open the Files example from the SD library. Make sure to change chipSelect to equal 10, not 4. Upload the code and turn on the serial monitor. If it successfully creates and removes the example.txt file then congratulations, you're able to write to an SD card. Next we want to see if we can get the Arduino to save our GPS readings to the SD card. Disconnect your Arduino from the computer. Put the GPS module back in place. In order to connect both the GPS and MicroSD card breakout board to 5V and Ground on the Arduino, we'll want to bring the power and ground to the breadboard, and then connect it to each module. Now, upload the following code to your Arduino. It's best if the Arduino is back out on your window ledge so you can get a GPS reading. You can check to see what's happening by opening the serial monitor, but make sure to change the baud rate to 115200 or else the characters won't make much sense. You should be seeing rows of three values. First the longitude coordinate, next the latitude coordinate, and finally the unix timestamp. #include "Wire.h" #include "SD.h" #include "SoftwareSerial.h" #include "TinyGPS.h" #include "RTClib.h" const int chipSelect = 10; RTC_Millis RTC; File dataFile; TinyGPS gps; SoftwareSerial ss(3, 4); void setup() { Serial.begin(115200); Serial.print("Initializing SD card..."); ss.begin(9600); pinMode(chipSelect, OUTPUT); RTC.adjust(DateTime(__DATE__, __TIME__)); // see if the card is present and can be initialized: if (!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); // don't do anything more: while (1) ; } Serial.println("card initialized."); // Open up the file we're going to log to! dataFile = SD.open("GPStest.txt", FILE_WRITE); if (! dataFile) { Serial.println("error opening GPStest.txt"); // Wait forever since we cant write data while (1) ; } } void loop() { DateTime now = RTC.now(); bool newData = false; for (unsigned long start = millis(); millis() - start < 1000;) { while (ss.available()) { char c = ss.read(); // Serial.write(c); // uncomment this line if you want to see the GPS data flowing if (gps.encode(c)) // Did a new valid sentence come in? newData = true; } } if (newData) { float flat, flon; unsigned long age; int year; byte month, day, hour, minute, second, hundredths; gps.f_get_position(&flat, &flon, &age); gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age); char sz[32]; sprintf(sz, "%02d/%02d/%02d, %02d:%02d:%02d,  ", month, day, year, hour, minute, second); Serial.print(""); Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6); Serial.print(", "); Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6); Serial.print(", "); Serial.println(now.unixtime()); dataFile.print(""); dataFile.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6); dataFile.print(", "); dataFile.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6); dataFile.print(", "); dataFile.println(now.unixtime()); } dataFile.flush(); delay(500); } Now unplug your Arduino and eject the MicroSD card from the breakout board. Find the SD card adapter and insert it into your computer, either with a card reader or directly if you have an SD card slot. See if there is a text file called GPSTEST.TXT. If there is, yay! If not, then I'd try reformatting your card and trying to write to it again. Open the text file and make sure the data has been written. Sometimes the file gets created but no data gets saved, and if this is your case, check your wiring, and try following LadyAda's SD card tutorials. For more detail: Darkness Map Data Collection Device ### Say Hello with My Roommate Mouse with Arduino I live alone in a small house in Shenzhen, and i really I love this graceful and dynamic city. As an software engineer, I have no girlfriend yet, and usually nobody visit my room, I really love this because I do not need to clear my room! But, I found that I have a, or some, roommates recently: HELLO, my Roommates! Yes, my new roommate is mouse. The scattered crumbs pasta provides them enough food. I do not see them during the daytime, they always get out for food in the night. But I think as we lived together for such a long time, it is very impolite for not saying hello to each other. Of course I sincerely wish that they are friendly to me. Miss/Mr mouse, if you are too shy to say hello to me, what about leave me a photo, to let me know who I am sleep with? So, I planned to use Arduino, and some of the basic modules such as Serial Camera, PIR Sensor, to make a simple automatic camera to take a photo of my roommates. Step 1: Module Preparing and System Design The following modules are needed in this project: PIR Sensor: This module is used to detect the mouse, if mouse detected, Arduino begin to take photo; Serial Camera:a simple to use camera, take photo for mouse in the detecting area; Crowduino Uno-SD: An Arduino compatible main board, Compared to the Arduino Uno, there is a SD card socket on the board, to help me store the pictures on the SD card. Besides, A SD Card is needed to store the mouse picture, and i need some jumper wires are needed to connect these modules, and a LED to help me debugging. The whole story is: when the mouse get out for food and detected by PIR sensor, the mainboard Crowduino Uno-SD control the serial camera to take a photo, and then stores the picture in the SD card, so I can get these pictures in the next morning. Step 2: Mouse Detection with PIR Sensor: A PIR sensor(passive infrared sensor) is an electronic sensor that measures infrared (IR) light radiating from objects in its field of view. All objects with a temperature above absolute zero emit heat energy in the form of radiation. This sensor used in my project often detects infrared light that emit by human(36 ℃ to 38 ℃) . As the mouse has the same temperature arrange , this sensor can also detects the mouse. The Sensitivity and detecting arrange can be adjusted, which I will explain in the debugging. Connect power and GND of PIR sensor to Crowduino, and the SIG to A5 of Crowduino. To help my debugging, I also connected a LED between the D5 and GND, a resistor about 300ohm is need to serial connected to the LED to limit the current. If the PIR detects mouse, it will send a signal (actually a voltage level) to Crowduino: Hey, I detected the mouse, please go on the next step! Step 3: Install the Serial Camera and SD Card As the Crowduino get the message that a mouse is coming, it will told the Serial camera to take a photo. This kind of serial camera is easy to use, after connecting its power and GND with Crowduino, connec it’s input and output(RX and TX) to Crowduino digital pins D1 and D0 The data from serial camera need to be stored. Install the SD card into the socket on the Crowduino.   For more detail: Say Hello with My Roommate Mouse with Arduino ### Arduino-based line follower robot using Pololu QTR-8RC line sensor UPDATE FEB 2012: This guide is featured on Adafruit's blog http://www.adafruit.com/blog/2012/02/14/arduino-based-line-follower-robot/ This is Faz3a II, my first line-following robot, which I also hope to use for maze-solving. I used the Arduino Uno, Adafruit motor shield, Pololu's QTR-8RC line sensors and motors. You can build a cheaper and lighter version of this robot using the Atmel Atmega328 and the L293D h-bridge. This robot weighs about 300gm and costs about $90 USD. For my previous robot projects, I used an empty external hard disk enclosure as the robot platform. But for this robot, I am using a DVD case. All in all, I found the round shape of the DVD case a better choice for maneuverability.  Not to mention the low cost of DVD cases and ease of stacking layers to hold more parts, with the help of long screws and nuts. For this project, my task was simplified by the availability of software libraries from Pololu and Adafruit for the sensor and motor shield respectively. Of course I could have bought a robot kit but I want to be able to take my robot apart anytime to build another one or use the parts in a different project. So if your passion is robotics, consider getting a ready robot kit. PARTS LIST ELECTRONICS Arduino Uno Adafruit motor shield Pololu QTR-8RC line sensor. I used only 5 sensors. Pololu 30:1 micro meta gearmotor X 2 7.2V (6 X AA NiMh batteries) MISC DVD case Wires Wire straps 3 long screws and about a dozen nuts to act as raisers. The length of the screws depends on the height of the battery brick. One thing to keep in mind when choosing the screws is to get the ones with smooth curved heads and not the flat ones. I use the screw heads as casters.  SOFTWARE Arduino IDE 1.0 Adafruit motor shield library Pololu QTR-8RC Arduino library REFERENCES I wrote a guide no how to use and test the Pololu QTR-8RC line sensor. Step 1: Making the robot's plaform from a DVD case I used a DVD case for the platform. I marked this DVD case with an erasable pen first. It's a rough sketch made with a small ruler. I know this design won't be winning any engineering awards, but it works. Then I used a plain cutter and drill bits to carve out the design on the DVD into the final platform ready for attaching parts. Make sure you drill holes big enough for the wire straps. Step 2: Assembling the robot's components The assembly process is straight forward. I found it very useful to keep notes tracking which motor goes to which motor shield terminal pin and which sensor pin goes into which Arduino pin. Without this, it's easy to make mistakes that consume long debugging hours. If you have everything in order, this project should take max 10 hours at a very leisurely pace. The first time I built it, I ran into all sorts of issues because I did not keep track of my wires and because I did not have all the necessary connectors at hand so I did plenty of soldering to connect the sensors to the Arduino.  But once I overcame all the wiring hurdles, rebuilding the robot was a matter of 3-4 hour. The coding and debugging took another few hours the first time around.  The second time I rebuilt this robot, it was simply a matter of load and run. Be mindful of your robot's left and right motors. Label the motors and the wires as well as the terminals they are connected to and that should spare you needless debugging time. One telltale sign of reversed motors or reversed variable signs is if your robot spins towards the wrong direction constantly. I powered the robot via the Adafruit motor shield external power pins. I did not need to power the motors separately from the Arduino. The 7.2V power brick did a fine job of powering the whole robot. I had no resets or erratic performance. As for front and back casters, the soft semi-spherical tip of the screws was good enough to allow smooth movement. No special casters were used. I am sure the screws created extra friction but it did not degrade performance by much. I could have used an LED for caster just as well. Major Components in Project Arduino Uno Adafruit motor shield Pololu QTR-8RC line sensor. For more Detail: Arduino-based line follower robot using Pololu QTR-8RC line sensor ### RGB LED Rainbow Fader using an Arduino Introducing the RainBoard: A simple RGB LED Rainbow fader using an Arduino Uno and a few simple components. Believe it or not, we will control 45-channels of RGB LEDs at 32 brightness levels using only 3 digital pins from the Arduino! How is this possible you ask? By using two magic concepts: Shift Registers, and Pulse-Width Modulation.  Some of the schematics/images may seem daunting, but if all instructions are followed carefully, it should be easy to have this set up and running in less than 30 minutes (perfect for those that forgot to get that special someone a Christmas present this year!). This is my entry into the Make it Glow Contest. And also my very first Instructable, I hope you like it! Here's the schematic and the diagram of what we will be making. Step 1: Parts Before we begin, here is a parts list of everything we will need for this Instructable as well as links to vendors where these items can be obtained. When designing this circuit I made sure to select common components that can be found just about anywhere that sells electronic parts. I found all of the items here on eBay, but many of the standard on-line electronics distributors (Digikey, Mouser, SparkFun etc.) should have these items in stock. I linked to SparkFun parts to make ordering easier. 2x  RGB LED Strip - 30 LED/m 1m We need these to make the pretty rainbow effect! One of the most crucial  components as you can't make it glow if you don't have something to emit light. We need two because each strip will be cut into 10 sections and we need 15 sections total for our project. This will give us 5 sections as spares in case something goes  wrong. 2x Break Away Headers - Straight  These are to make the RGB LED strips easy to plug straight into a standard breadboard. Those RGB LED strips need power and we're going to give it to 'em! We will be soldering these onto the RGB LED strips, and each strip has 4 connections. Since we will be making 15 of these sections, we need 60 pins total, and each purchase comes with 40 pins. This will give us 20 spare pins in case we break them in the wrong spot. 6-8x 74HC595 8-Bit Shift Registers These are the meat and potatos of the project. In order to make such a large amount  of wires connect to the Arduino, we need these shift registers to pass the information along to the RGB LED Strips. We only need six Shift Registers to make this work, but I always like to order extra.  That way, in case something happens to one or two of them, we still have the parts to complete the project. Just make sure to be careful if you only order six. 6-8x ULN2803 DIP 8-Channel Darington Driver  These are one of my favorite electronic components. I'm sure lots of you are familiar with a standard NPN Transistor. The beauty of these is that they are comprised of 8 transistors built in but all of them have a common emitter. This makes them a great item to sink lots of high current (up to 50v @ 500ma!) LEDs that share a common anode. These will be the muscle of our project. Again, we only need six of these, but as all of us know, good ol' Murphy's Law can play a part in any project. It's good to have backups. 2x Basic Breadboard  Any electronics project needs a breadboard. If you don't have any of these, I would suggest buying some even if you don't complete this project. Even for the simplest of circuits these things are worlds easier to use than alligator clips. We need two because we are going to be pulling the rails off of one side on both of the breadboards. This will let us move them closer to each other, giving us 3 channels to work with. 1x Arduino Uno (or other similar model) Ahhh, the Arduino, how I love thee. I could write a tome about how much I love this  thing. I could write poems, love letters, Haiku's, and songs about this simple yet glorious device. This Instructable is long enough as is, so I will spare you all the weirdnesss. We only need one of these as long as we are super careful with it. Be gentle to it and  it will love you almost as much as you love it. 1x 12VDC Wall Adapter Power Supply We need to power this puppy and something like this should do. I use a prototyping power supply (Around $200) so not everyone has access to one. One of these will  work just fine as long as it's 12VDC, it's regulated, and has a 2.1mm center-positive barrel jack. 1x  Any way to connect things together. My personal favorite are simple jumper wires. I always seem to run out of these so order a  few of them if you can. If not, simple 22  gauge solid-core wire and some wire-strippers will work like a charm (and much cheaper). I tend to use the jumper  wires for straight and short connections and use 22 gauge wire to for the long, awkward connections. This will keep things nice and neat. 1x  Soldering Iron Any soldering iron will do, pick something around 30w if you can. 1x Third Hand (optional) This isn't required, but will definitely help in step four! Enough shopping, let's get to building! Step 2: Theory Before we dive in head-first, I thought I would explain a little bit of how this thing works. For those of you that want to get started, you can skip this section and come back later if you want to learn the theory. For this project, I wanted to make a 15 RGB LED strip rainbow fader. This will be eventually mounted in a picture frame and mounted on the wall as a mood light (in a later Instructable). In order to change the color of each strip, we have to quickly increase/decrease the brightness of each LED's RGB channels. There are many ways to do this. The most efficient way to do this is through pulse-width modulation (PWM). That may sound like a big word, but it's actually quite an easy concept to understand. As with most LEDs, these RGB LED strips normally have two color options per channel: ON or OFF (kind of like that monitor on the Apple I back in elementary school). But what if we decided to quickly turn the LED on then off again, many times per second? Turns out that the human eye still sees the LED, but we don't see it turn on or off. It simply looks less bright. This is the basic concept of PWM. By turning it on and off again and at very fast rates, the human eye couldn't be the wiser in determining if the LED is on or off! It simply looks as if it fades between brightness levels. If we made the first LED's red channel fade into it's green channel, it would look like it was fading from red, to orange, to yellow, to green. If we did this with its blue channel, soon we have every color of the rainbow, but we would only have it fade each color of the rainbow on one RGB LED Strip. Now what if we did this in synchronous with all of the RGB LED strips? That's where the Shift Registers come into play. As all digital communications work with 1's and 0's (HIGH and LOW, or ON and OFF), we need a way to tell each of the wires to turn itself ON or OFF, and rather quickly. Luckily the shift register was designed for this purpose. Basically we tell the Arduino a string of 1's and 0's and it feeds them into the shift registers. When one shift register gets full, it passes the first 8 digits that was fed to it on to the next register, and so on until all 6 registers are told what to do. Think of it like a row of seats in a movie theater. When someone first enters the row, they go to the last seat until all of them are full. When new people want a seat, the first person that entered now stands up and leaves (to the next shift register). Everyone then moves over one chair and the new person can now sit down. This is similar to how a shift register works. We can talk to all of the RGB LED strips in this way. But then how do we make this work off only 3 digital pins from the Arduino? Going back to the row of seats in a movie theater comparison, we know that we only need one cable to send 1's and 0's to the RGB LED strips (the line of people). But the shift registers need two more pins, one for the clock, and one for the latch pin. The clock pins is pretty self-explanatory. It's essentially a way to tell the shift register how quickly things are happening, much like the 16MHz clock tells the Arduino it's own timing. The latch pin plays a critical role with shift registers. It tells the shift register when we are ready to write to it, and when we are done writing to it. Without such a pin, data would constantly fly out the end of the rows, much like our poor movie patrons if someone decided to steam-plow through the aisle. This would be just as bad for our movie patrons as it would be for electronics. This pin keeps data in the register until we are ready to write to it. But what about those ULN2803's? What the heck are those things for anyways? Well, unfortunately the RGB LEDs run on 12VDC power and the shift register works on 5VDC. To work around these limitations, we will feed 12VDC into the Arduino, and access it through its 'Vin' pin to power the RGB LED's, and use the shift registers to control the ULN2803's (which are like 8 NPN Darlington transistors crammed into one glorious chip of awesomeness!). The beauty of these are that they have a common emitter, which means if we plug in an RGB LED that has a common anode and plug the anode to +12VDC and plug each cathode into the collectors of the ULN2803, then when we switch them on with the transistors it closes the circuit and grounds the cathodes, making the LED turn on. (*phew* that was a long sentence.) Enough chit chat, we've got a RainBoard to make! Step 3: Before we get too far (last time, I promise!), I want to briefly discuss DIP packaging for those of you that are new to electronics. DIP packaging, or Dual In-Line Packaging, is a simple building standard developed for small electronics chips. The important thing to note here is that almost all chips built around this standard have the same pin configuration. While looking at the chip from the top (so you can see the numbers), you will see either a dot, notch, or a curved groove on the chip. Turn this so that it is at the top (12 o'clock). The first pin on the top-left is pin #1. Moving down the left side, there is pin #2, pin #3, etc. When you get to the bottom you now count the right side, but this time you count from the bottom up. They are kind of numbered counter-clockwise in this sense. For more clarity, see the image. Major Components in Project2x  RGB LED Strip – 30 LED/m 1m 2x Basic Breadboard 1x Arduino Uno   For more detail: RGB LED Rainbow Fader using an Arduino ### Mouser releases free version of NI MultiSIM simulator, PCB tool Previewed in August this year, distributor Mouser has now formally released MultiSIM BLUE, the National Instruments Multisim Component Evaluator, Mouser Edition. The free software is a multifunction package that covers schematic capture, simulation, PCB design and bill-of-materials compilation with direct links to Mouser's site. Available via free download on Mouser.com, MultiSIM BLUE enables engineers to design and simulate circuits before laying them out in physical prototypes. MultiSIM BLUE adds features and functionality to provide engineers with an industry-standard SPICE simulation environment of electronic circuits using Mouser's distributed components, including the newest in analog and mixed-signal ICs, passive components, discrete semiconductors, power management ICs, connectors, and electromechanical components. Simulation is driven by the same advanced parser technology as NI Multisim software with support from BSIM and other advanced parameters.   For more detail: Mouser releases free version of NI MultiSIM simulator, PCB tool ### Window Painting Robot (arduino, processing, accelerometer) The idea for this project came from one of my favorite 'ibles: the polargraph. I loved the drawing style and thought how cool would it be to do this on the side of a building? Unfortunately the challenges to setting up such a large polargraph on a student budget pushed me to find an alternate solution, and thus started the window painting robot! This is a fairly simple robot that uses two neodymium magnets to stay up on glass walls, windows, or any surfaces less than 1" thick (one magnet is attached to the robot and the other is on the opposite side of the surface. It also work on floors, but not nearly as cool). Check it out in action! Link to video is also HERE. I am entering this project into the UP contest so if you think it is at all neat/delicious/gets you thinking then please give me a vote and help me, help you with more awesome projects =] What I think is so enticing about this design is the wide applicability. It allows expression of ideas and creativity in normally unused spaces. The real challenge is what's the biggest glass window can you find? This also has other applications as it could clean windows, or survey the sides of buildings, draw just on floors, etc. The advantage of this design over a polargraph or other drawing method is that it is really easy to set up and draw on any size of window. Later in the 'ible you will find the processing program I wrote for this, which takes input about your window size and robot specs and lets you to draw what you would like the robot to mark on your window; with a touch of a button it turns it into arduino code that fits in the arduino program I have supplied, so it can be easily uploaded to the robot. Then you just put the robot on the wall and watch it go to work! The autonomous nature of this design makes it free of wires while also not relying on any sort of wireless connection to do its work. I did this project with scrap VEX metal and motors I had lying around, but don't be discouraged if you don't have those!!! It will work with any 3 wire motors (and others as well but may take minor changes to code) and whatever materials you have available (wood, metal, plastic, etc). DO NOT be discourage, you can do this project! I always challenge myself to build with what I have and this project cost me a total of $20 so really not an investment. Step 1: Parts List Parts List 2x  3-wire Motors (I used vex 393 motors with motor controllers to make them 3-wire but any will do.) 1x  3-wire Servo (used to raise and lower the pen, I'm using a really small one. Size doesn't matter, in this case.) 1x  Arduino Board (I used an uno but any should work!) 2x  Neodymium magnets (I got mine from magnet4less.com and went with N42 counter-bored circular magnets 1" diam by 1/2" thick. These are the real crux of the whole project as they need to be strong enough to hold the robot against the wall. My robot weighs 2.5 pounds and these magnets keep it easily attached to windows up to 1" thick! Remember you can always add spacers if they are a little strong.) 1x  Battery Pack (These are to power the arduino and drive the motors, I used the vex 7.2v pack but use whatever works for you.) 4x  Wheels (You can use two but I found four to be alot more precise. Whatever they are make sure they have a rubber coating or some grippy surface.) 1x  Tiny Breadboard (This is optional as you can just wire things directly to the arduino, but it help plan the paths out.) 1x Single-Axis Accelerometer (Optional but highly recommended) I'm using one that is twenty years old so really anything will do (they can be found online for cheap). Just remember for our application the lower the g rating the better, mine is +-4g so anything around there will do. Materials for the body (Use what you have!!!! Those who have a 3d printer, try making a chassis that way. I don't have access to something like that but the lighter, the better! I used some scrap metal.) Gears (I used vex ones, these are needed to drive wheels if you are doing a four wheeled design. People with 3d printers can make their own but for those without access lego gears are a possibility if the mounts are drilled out. Be creative!) Window Markers! Random bits of wire/screws to hook everything up. Step 2: Look at That Body For the body I used scrap metal to make a general U shape in the frame. I later added a support beam at the open end of the U to give it more strength, so I would advise you to just make a square with an opening in the center (for the servo and pen to be mounted in). The body's width should be able to fit both your motors as they will be mounted under it. Mine measures 12.5 centimeters as my motors are 5.5 cm wide. The body also should be long enough to mount both your wheels with gears to drive them. My body ended up being 15 cm long, close to a square shape. Keep in mind that the magnet will be mounted at the center of the robot's underside (see next slide for details) so make space if that is needed. Just as a general reminder, keep it light! The lighter weight, the easier it is to maneuver. Step 3: Magnets (so attractive) The next import part is to mount your magnets to the underside of the frame. As you can see in my pictures I have it along the line that the motor shafts are, so when the robot turns it revolves around the magnet and will offer little resistance to keep the driving precise. The magnet should be mounted so that when the wheels are attached and the robot is pressed against the wall it will be just a millimeter from the surface of the glass. This height is tough to gauge without the wheels added yet, but it is important to make sure you can mount the magnets and the exact height can be adjusted with washers or nuts later. I actually kept the magnet off after this point to make the rest of the building easier. Step 4: The Wheels (of Change) Keep On Turning The base is almost ready to move! Mount the motors to the frame. Then attach the gears and wheels to the frame. Using the VEX parts made this simple for me, but it boils down to three shafts for each side, one for each wheel and the one driven by the motor. I used gears to help add torque so the wheels wouldn't slip. After adding the wheels, you can also iron out the exact height the magnet will need to be mounted at. For more detail: Window Painting Robot (arduino, processing, accelerometer) ### AAEON GENE-APL7: POWERING THE TOOLS FOR VACCINE RESEARCH As the number of Coronavirus disease 19 (COVID-19) cases continue to increase daily, medical researchers are working tirelessly to develop treatments and a vaccine. In the United States, where the number cases have exceeded 560,000, biotech developers are deploying blood and virus testing devices to help in this vital task. Many of these machines are powered by the GENE-APL7 subcompact board from AAEON to provide clear, accurate results for medical researchers. With the complicated nature of a novel virus, medical experts estimate development of a vaccine for COVID-19 may take several months. The SARS-CoV-2 virus responsible for the disease is continuously evolving, with as many as 40 new variants of the strain having been discovered according to officials in Iceland. As the spread of the disease is beyond being able to contain in many countries and regions, medical researchers are in a race against time. Testing new medicines, especially when developing vaccines, requires close monitoring of test subjects’ blood to detect the production of antibodies and reaction to viral agents. Specialized medical equipment and instruments which are used for testing blood and viruses are needed to help speed up the process while still providing critical and accurate information. Several developers of such equipment in the United States have turned to the GENE-APL7 subcompact board to help power these devices. The GENE-APL7 3.5” subcompact board provides the necessary computing power and flexibility to keep up with the task. While small in size, making it easy to fit into medical equipment, the GENE-APL7 can be expanded to support as many as 10 USB ports and 11 COM ports, allowing it to interface with multiple testing devices to provide sample analysis. With low power, high performance Intel® processers, the GENE-APL7 can be embedded into machines with fanless operation, increasing reliability by preventing contaminants from affecting the board. The GENE-APL7 supports multiple video outputs including eDP and VGA with support for 4K HD, providing researchers with a clear view of virus samples for more accurate analysis. Source: AAEON GENE-APL7: POWERING THE TOOLS FOR VACCINE RESEARCH ### Kaleiduino: A Battery Powered Arduino LED Kaleidoscope Hello everyone, and welcome to my Instructable! This instructable will show you how I made the first ever DIY Arduino controlled "LED Kaleidoscope"! What is an LED kaleidoscope? Well, our traditional kaleidoscopes used 3 mirrors joined as a triangle with stuff like sequins and stolen cake decorations at one end, to create an awesome pattern when seen from the other end. My kaleidoscope uses 4 mirrors - forming a square. But wait, no cake decorations here- that's what the LEDs are for! They blink and fade and flash about to make a pattern at least 20x cooler than the old fashioned k' scopes. Step 1: Background... The definition of a kaleidoscope from wikipedia...: "A kaleidoscope is a cylinder with mirrors containing loose, colored objects such as beads or pebbles and bits of glass. As the viewer looks into one end, light entering the other creates a colorful pattern, due to the reflection off of the mirrors." Kaleidoscopes are awesome toys, and are always fun to make and play with. But admit it, you'll get bored with it pretty fast. Thats where my idea comes in - why not make a kaleidoscope with LEDs? With so many electronic toys available these days, why is the kaleidoscope lagging behind? With LEDs you have unlimited possibilities - make customisable patterns, adding interactivity, changing patterns according to readings from sensors and so on...... This isn't just fun to play, it's fun to make and customize it too! My kaleidoscopes square because making a compatible LED matrix board is simpler and more practical. Step 2: Materials... This isn't expensive at all, and materials are easily available. An Arduino board ( Mega2560 is the best)..http://www.radioshack.com/product/index.jsp?productId=12272877 LEDs, any colour. For example, this one... General purpose PCB. http://www.radioshack.com/product/index.jsp?productId=12516741 BC547 transistor- 3 of them. Jumper Wire. Here's a pack of hundred PCB Strip Socket Connector (optional) 4 mirrors of dimensions approximately 17 x 3 cm Mountboard or cardboard Cyanoacrylate glue Lots of ice cream sticks Battery http://www.radioshack.com/product/index.jsp?productId=4356385 USB Cable for programming Tools required: Soldering Iron and associated tools and materials Here's a cheap but good one.. Decent computer. Box cutter. At least 2 hands. Other tools may be required depending on how you plan to make it. Step 3: How it works.............. Controlling LEDs. There are 9 LEDs, that are controlled with an Arduino using a technique called multiplexing. This article will make you understand the theory of multiplexing LEDs well. Ignore the circuit part though, it is quite different from this one. Due to this, I only need 6 pins of the Arduino to control 9 LEDs. These LEDs are soldered on a PCB mounted at the back of the kaleidoscope. How Kaleidoscope Works. Mirrors, when put together, form multiple reflections of the same object. This makes the LED pattern awesome and cool. I didn't make a triangular kaleidoscope because making a suitable LED matrix for it is tricky and impractical. Hence the odd (but super cool) square. I've controlled the LEDs with simple Arduino code (I'm a bit of a newbie), which you can hack. Ice cream sticks are just there to make the kaleidoscope firmer and better looking. And this thing is powered by a battery. Just so you know. Step 4: Making The LED Matrix.. LED matrix is simple to make. The 'Matrix' here has nothing to do with Neo, Agents and Zion. Its just that the LEDs are connected in such a way that we can multiplex them. See the last diagram for the matrix's circuit. It's just like any other matrix. Columns are controlled by arduino via transistors. I used current limiting resistors of 270 ohms. Soldering requires some experience. Making columns of solder isn't easy. You'll need lots of wires too. I made the matrix board on such a way that I can use 4 pinned RGB LEDs too. However using this board for single LEDs is fine. You may make the board for either only the single LEDs (diagram 1), or the one compatible with both single and RGB LEDs (diagram 2 - the one I have done). I didn't solder LEDs and transistors directly, but used the socket. It a good idea- you can modify or troubleshoot later easily. After soldering the sockets, put the LEDs. Remember to cut off a bit of the LED's lead so that it isn't too long. Add the transistors too. Be sure to test LEDs to make sure connection are good.   For more detail: Kaleiduino: A Battery Powered Arduino LED Kaleidoscope ### Arduino based Graphical Weather Station Always wanted to have a graphical weather station? And with accurate sensors? Maybe this project is something for you. With this weather station you can see what the weather is "doing". Temperatures for example might rise or fall. From a normal thermometer it is not possible to see the temperature history. With this weather station you have an history of 26 hours, displayed over 320 pixels of a TFT display. Every 5 minutes a pixel is added to the graph which will enable you to see if it is having a rising or falling trend. This is done for temperature, humidity, air pressure and CO2 in different colors. Outside temperature is also included wireless. In this way you can "predict" the weather based on what the air pressure is doing. Normal weather stations do have sensors which are some inaccurate. For example, for temperature they normally have an accurace of +/- 2 degrees. For this weather station more accurate sensors are used. The HDC1080 temperature sensor does have an accuracy of +/- 0.2 degrees which is far better. The same for humidity and air pressure. At the top of the TFT display the measurements of the sensors are displayed and refreshed every 5 seconds. These measurements are also available via RS232. Main features: Graphs in different colors for recognizing trends Accurate sensors for temperature, humidity and air pressure. Factory calibration data and sensor temperature are read from sensors where possible and applied to code to get the most accurate measurements. Temperatures are available in Celsius (default) or Fahrenheit. Outside temperature via wireless module (optional) RS232 interface for remote monitoring. Nice small design (even my wife tolerates it in our living room ;-) I hope you will enjoy examining the weather conditions the same as I do ! Step 1: Parts 1 x TFT Module 2.8 inch without Touch Panel ILI9341 Drive IC 240(RGB)*320 SPI Interface 1 x Microchip 18f26k22 microcontroller 28-PIN PDIP 1 x HDC1080 module, GY-213V-HDC1080 High Accuracy Digital Humidity Sensor with Temperature Sensor 1 x GY-63 MS5611 High-resolution Atmospheric Height Sensor Module IIC / SPI 1 x MH-Z19 infrared co2 sensor for co2 monitor 1 x (optional) NRF24L01+PA+LNA wireless modules (with antenna) 1 x 5V To 3.3V DC-DC Step Down Power Supply Buck Module AMS1117 800MA 1 x Ceramic capacitor 100nF 2 x Acrylic Board 6*12cm thickness 5mm or 100*100mm thickness 2mm 1 x Micro USB connector 5pin seat Jack Micro usb DIP4 legs Four legs Inserting plate seat mini usb connector 1 x Black Universal Android Phone Micro USB EU Plug Travel AC Wall Charger Adapter For Android Phones 1 x PCB double sided. Some M3 nylon spacers/screws - For outside temperature (optional) 1 x Microchip 16f886 microcontroller 28-pin PDIP 1 x Waterproof DS18b20 temperature probe temperature sensor Stainless steel package -100cm wire 1 x 4k7 resistor 1 x NRF24L01+ Wireless Module 1 x Ceramic capacitor 100nF 1 x Prototype PCB breadboard 1 x 85x58x33mm Waterproof Clear Cover Plastic Electronic Cable Project Box Enclosure Case 1 x Plastic Battery Case Storage Box Holder with Wire Leads for 2 X AA 3.0V 2AA 2 x AA battery Step 2: PCB I used a double sided PCB for this project. The Gerber files are available. This PCB fits at the back of the TFT display. The temperature sensor is mounted at the back to prevent heating from the circuit. Connect the NRF24L01+ in the following way to the microcontroller: pin 2 - CSN of NRF24L01+ pin 8 – GND of NRF24L01+ pin 9 - CE of NRF24L01+ pin 22 - SCK of NRF24L01+ pin 23 - MISO of NRF24L01+ pin 24 - MOSI of NRF24L01+ pin 20 – VCC of NRF24L01+ n.c - IRQ of NRF24L01+ Attachments top.pdf Download bottom.pdf Download home-10.dri Download home-10.gpi Download home-10.plc Download home-10.sol Download home-10.stc Download home-10.sts Download home-10.cmp Download home-10.drd Download schematic.zip Download Step 3: Outside Temperature The 16f886 microcontroller is used to read the DS18B20 temperature sensor every 5 minutes. This temperature is transmitted via the NRF24L01+ wireless module. A prototype PCB breadboard is sufficient here. Use the following microcontroller pin configuration: pin 2 - CSN of NRF24L01+ pin 8 - GND pin 9 - CE of NRF24L01+ pin 14 - SCK of NRF24L01+ pin 15 - MISO of NRF24L01+ pin 16 - MOSI of NRF24L01+ pin 20 - +3 volt of the AA batteries pin 21 - IRQ of NRF24L01+ pin 22 - DS18B20 data (use 4k7 resistor as pull up) Step 4: RS232 Output Every 5 seconds the measurements are provided via RS232 at pin 27 (9600 baud). You can connect this interface to your computer and use a terminal program (e.g. Putty) to get the data. It allows you to use the measurements for other purposes. Step 5: Code The sensors used in this project are using different interfaces of the 18f26k22 microcontroller. So, the first serial interface used by the MH-Z19 CO2 sensor. This interface is set to 9600 baud. The second serial interface of this microcontroller is used for providing the sensor measurements at pin 27 every 5 seconds so you can connect it to your computer (also set at 9600 baud). The HDC1080 temperature/humidity sensor and MS5611 air pressure sensor operates on i2c interface. The TFT display and NRF24L01+ wireless module operates on the same SPI interface configured at 8 Mhz. The 18f26k22 microcontroller itself is set to 64 Mhz. By default, the temperatures are in Celsius. By connecting pin 21 to ground you get the temperatures in Fahrenheit. Thanks to Achim Döbler for his µGUI graphic library and Harry W (1and0) for his 64bit solution. The 16f886 microcontroller is used for measuring the outside temperature. The DS18B20 temperature sensor is read every 5 minutes (one-wire protocol is used here) and transmitted with the SPI interface via the NRF24L01+ wireless module. Most of the time this microcontroller is in low power mode to save batteries. Of course also negative temperatures are supported. If this outside temperature feature is not used it will not appear on the TFT screen so it is optional. For programming the 18f26k22 and 16f886 microcontrollers you need a pickit3 programmer. You can use the free Microchip IPE programming software (don't forget to set VDD to 3.0 volt and check the checkbox "Power Target Circuit from Tool" at "ICSP Options" at "Power" menu). Attachments 18f26k22.hex Download 16f886.hex Download   ### Using The PCF8575 i2c i/o Expander To Read Inputs With Arduino This Instructable will show you just how easy it is to add extra inputs to your Arduino. You can use this technique to add hundreds of extra inputs to your Arduino with only two wires by using a fancy communication protocol called i2c (eye-squared-see). What I have used... PCF8575 SMD to DIP breakout board Teensy-Arduino (any Arduino will work)  (3x) pushbutton  (3x) resistors  (3x) LED   Step 1: Build the Circuit   The SDA and SCL lines enable i2c communication. Which pins are SDA and SCL? Uno, Ethernet: A4 (SDA), A5 (SCL) Mega2560: 20 (SDA), 21 (SCL) Leonardo: 2 (SDA), 3 (SCL) Due: 20 (SDA), 21 (SCL), SDA1, SCL1 The PCF8575 is not available in a breadboard-friendly form (only surface mount). The handy Sparkfun breakout boards allow you to plug this chip into the breadboard for prototyping. You need to connect a 10kOhm resistor between SDA/SCL and PWR (see image). Also note that push-buttons need resistors. If you want an i2c i/o expander in which you don't need resistors on the switches check out the MCP23017. If you are having troubles hooking up your switches try this for reference. I included the LEDs only to provide some feedback. They add no functionality. Step 2: The Code Okay now the scary part - the code. If you want to use i2c devices it is best to understand how the code works otherwise you are going to have many problems down the road. i2c is handled using the Arduino wire library. To understand i2c you are going to have to do a bit of reading. Expect to be very confused at first. If you plan to do any intermediate and advanced electronics learning i2c is imperative. I will try to give a very simple explanation of i2c. One thing you will notice, as you begin to work with electronics, is that you always have a mess of wires. A long time ago Phillips said 'hell with all these wires - we need a way for all the devices to talk to eachother with only two wires'. Shortly after, i2c was created. Now you can buy i2c chips which do just about everything, and all these chips are able to communicate with eachother using only two wires. i2c is often called the 'two wire interface'. So how do these devices talk to each other? Well, they all have an address, much like you have a mailing address at your house. With this unique address you can talk to each device individually. The Arduino, which would be the master-i2c-device, can send instructions to the individual slave-i2c-devices using a fancy communication protocol. In Arduino, the send-communication looks like this: Wire.beginTransmission(aDeviceAddress); //who are you talking to? Wire.send(someDate); //what data are you sending this device Wire.endTransmission(); //end communication And the receive-communication looks like this: byte dataReceived[2]; //a two byte array to hold our data Wire.beginTransmission(aDeviceAddress); ////who are you talking to? Wire.endTransmission(); //end communication Wire.requestFrom(aDeviceAddress,2); //request two bytes of data if(Wire.available()){     dataReceived[0] = Wire.receive(); //read byte 1     dataReceived[1] = Wire.receive(); //read byte 2 } The real tricky part of i2c is interpreting the datasheet and understanding how you and expected to receive or send data to the device. When writing i2c code you constantly have to reference the datasheet. The Arduino code file is attached below. NOTE if you are using Arduino1.0 Wire.send and Wire.receive statements MUST BE changed to Wire.write and Wire.read Step 3: Testing   Source: Using The PCF8575 i2c i/o Expander To Read Inputs With Arduino ### MEET THE ESP32-S2 BASED SOC, WROOM AND WROVER MODULE ESP32-S2 WiFi SoC by Espressif Systems was first unveiled in May last year before its first internal development boards and datasheet were later showcased sometime in September but since the outbreak of the Coronavirus epidemic, progress on the board has really gone down the lane. However, the company recently announced its intentions towards starting mass production for the ESP32-S2, alongside other development boards like the ESP32-S2-Saola-1 and ESP32-S2-WROOM & ESP32-S2-WROVER modules. Apart from having an improved security capability, the ESP32 Wifi MCU board, among other features, supports WiFi HT40 @ 2.4GHz and provides up to 43 programmable GPIOs as well as 14 capacitive touch-sensing IOs. It is based on a single Xtensa LX7 clocked at 240 MHz and has a system memory of 320KB SRAM, 128 kB ROM, and 16 kB RTC memory. It also has support for an external SPIRAM up to 128 MB and an external flash up to 1GB. Unlike other ESP32 modules, the ESP32-S2 does not support Bluetooth but comes with an in-built USB interface and has support for LCD cameras. Meanwhile, the ESP32-S2 is not readily available on Aliexpress at the moment but the board is currently being sold on Digikeyfor just $1. Digikey also has available in its store two other ESP32-S2 modules, the ESP32-S2-WROOM, and the ESP32-S2-WROVER, both of which are priced for as low as $1.99. The two modules are very similar to each other with almost the same features except for the presence of PSRAM found only in the WROVER module. Some of the common features and specifications of the ESP32-S2-WROOM and ESP32-S2-WROVER include: ESP32-S2 embedded Xtensa single-core 32-bit LX7 microprocessor240 MHz Speed128 kB ROM and 320 kB SRAM4 MB SPI flash802.11 b/g/n WiFi 4 with A-MPDU and A-MSDU aggregation, 0.4us guard interval support, bit rate of 802.11n up to 150 Mbps and center frequency range of 2412 – 2484 MHz. GPIO with PWM, ADC, DAC, and LCD port along with SPI, UART, 12C, 12S communication interfacesCamera interfaceIR pulse countertouch sensorTemperature sensorOperating Temperature range -40 to 85oC3.0 to 3.6 V input voltage Read more: MEET THE ESP32-S2 BASED SOC, WROOM AND WROVER MODULE ### ZMDI uses digital chip to improve MEMS sensor accuracy Dresden, Germany, February 25, 2013 – ZMD AG (ZMDI), a Dresden-based semi­conductor company that specializes in enabling energy efficient solutions, today announces the release of the ZSPM4521 high-efficiency lithium-ion (Li‑ion) battery charger and the ZSPM4523 super capacitor charger for managing charging with photovoltaic sources. As a global supplier of analog and mixed signal solutions for automotive, industrial, medical, information technology and consumer applications, ZMDI enables best-in-class energy efficient solutions for mobile and battery-powered applications with its Smart Power Management technology. Both the ZSPM4521 and ZSPM4523 are configurable for termination voltages and charge currents to allow optimum charging for a wide range of Li-ion batteries or super capacitors. They can regulate up to 1.5A continuous drive current and use a maximum power point tracking (MPPT) function to extract the maximum possible power from the photovoltaic charging source. Once the termination voltage is reached, the MPPT regulator operates in voltage mode to maintain optimal voltage. The switching frequency is 1MHz , which enables the use of small filter components, resulting in smaller board space and reduced system costs. An integrated I2C™ (trademark of NXP) interface enables the user to set application-specific termination voltages and control charging currents. The ZSPM4521 has an additional charge timeout feature to protect the Li-ion battery from overcharge. It also offers separate settings for termination voltage and maximum charge current for different battery temperature ranges. It provides Li-ion-specific protection for over-current, over-temperature, over-voltage, under-voltage and charging timeout. The ZSPM4523 is optimized for super capacitor charging. It provides protection for over-current, over-temperature, over-voltage and under-voltage. Smart Charger Features: Maximum power point tracking (MPPT) for optimized charging Ultra-low quiescent current, 10µA 1.5A continuous output current Reverse-current blocking Programmable termination voltage and charging current Over-voltage and charging-timeout supervisor Input supply under-voltage lockout Full protection for over-current and over-temperature Charge status indication I2C™ program interface with EEPROM registers Temperature (junction) range -40°C to 125°C Package: 16-L PQFN (4mm x 4mm) ZMDI has expanded its range of capacitive sensor signal conditioning devices with a chip which has 14-bit resolution and 0.25 % accuracy over a range of sensor capacitances and temperatures. The signal conditioning device can be configured to interface with capacitive sensors from 0.5 to 260pF, with sensitivity as low as 125 atto-Farads (aF) per digital bit. The part can be used in both single- and differential-input sensor configurations. The device offers a full 14-bit resolution for compensation of sensor offset, sensitivity and temperature. The ZSSC3123 device is of particularly interest for MEMS-based sensor elements, such as pressure sensors for hydraulic control systems, humidity sensors, and liquid level gauges. “Responding to sensor system designer needs, we have developed a digital technique to correct both first-order and third-order nonlinearity errors that were difficult or impossible to correct with a pure analogue signal path,” stated Steve Ramdin, product manager at ZMDI.   For more read: ZMDI uses digital chip to improve MEMS sensor accuracy ### TEMPERATURE SENSOR IC IS SMALL, ACCURATE AND VERSATILE Although the WSEN-TIDS temperature sensor from Würth Elektronik measures just 2.0 x 2.0 x 0.5 mm, its range of application is wide: Its accuracy in the measuring range -40 to 125°C is ±0.5°C, while in the range -10 to 60°C it goes down to ±0.25°C. Applications extend from PCB temperature monitoring and system monitoring for power supplies, heating, ventilation, air conditioning and cold chain monitoring, to sensor technology in industrial controls, domestic appliances or wearables. The sensor is factory calibrated and can, therefore, be used without time-consuming remeasurements. The sensor’s 16-bit output signal can be read out via an I²C interface with different output data rates up to a maximum of 200Hz. Characteristics Silicon based digital temperature sensorHigh accuracy (up to ±0.25 °C typ.)Fully calibrated 16 bit temperature outputSelectable output data rate up to 200 HzI²C digital communication interfaceProgrammable temperature threshold and interrupt An additional interrupt pin can optionally be used to indicate when a programmed temperature threshold value is exceeded. WSEN-TIDS is perfectly suited for battery powered applications as it operates from 1.5- to 3.6-V and draws a current of only 1.75µA. A development kit is available for the temperature sensor. Read more: TEMPERATURE SENSOR IC IS SMALL, ACCURATE AND VERSATILE ### The Arduino Gemma In a presentation at the Maker Faire held in Rome this weekend Arduino co-founder Massimo Banzi gave a preview of the soon to be released Gemma wearable Arduino board. The 27 mm diameter board contains an ATtiny85 processor programmable from the Arduino IDE via Gemma’s micro USB connector. The design is a collaborative effort together with Adafruit Industries who also worked on the Arduino Micro. The ATtiny85 has 8K of flash and 5 I/O pins, including analog inputs and PWM outputs. It was designed with a USB bootloader so you can plug it into any computer and reprogram it over a USB port (it uses 2 of the 5 I/O pins, leaving you with 3). Ideal for small & simple projects sewn with conductive thread,   For more detail; The Arduino Gemma ### Arduino Robotic Spider V8 I needed a project that would use all my servos, so I decided to make the do-nothing, worthless spider. If you have fischertechnik and servos to waste, this is the project for you! Really, this flopping spider makes for a great learning project. The main goal of this project is to teach the fundamentals of servos, synchronizing them, programming them, and understand the range and strength of servos. The results are very amusing! Fischertechnik? What's that? Legos have bricks, K'NEX has blue and yellow connector rods, but what does fischertechnik have? In truth, it has way too many pieces to give names to! Fischertechnik is definately not as popular as legos or K'NEX, but I like it much better. It's very good for exercising building and construction skills. Here is an excerpt from Wikipedia on fischertechnik "Fischertechnik is a brand of construction toy. It was invented by Artur Fischer and is produced by fischertechnik GmbH in Waldachtal, Germany. Fans often refer to Fischertechnik as FT or ft. It is used in education for teaching about simple machines, as well as motorization and mechanisms. The company also offers computer interface technology which can be used to teach the theory of automation and robotics." I will be calling fischertechnik FT as mentioned above. Here's a video of it walking. Step 1: Ingredients: Tools: Hot glue gun Razor blade Philips Screwdriver Drill with 7/32 drill bit Dremel with very tiny drill bit (a little bit smaller than the screws that come with the servo) Electronics: 6 AA battery pack and alligator clip 8x micro servos and attachments 30+ jumper wires or pin headers. Breadboard Arduino and power Parts: Fischertechnik Step 2: Building the Frame Since I don't know what to call the FT pieces, I'll just show the pictures to building the frame. Make sure to look at the captions. Assuming you have fischertechnik, you can just tell what pieces I'm using to build this. I'm sorry I can't offer much more of and explanation! Step 3: Mounting the Servos Now get out your dremel! The servos conveniently fit between the 'bricks'. Drill a small pilot hole, then using the screws the servo came with, screw them in. If you don't want to screw into you pieces, that OK, just use some hot glue, but, it's always easier disassemble if you use screws. Note: You will want to screw these on BEFORE you put on the arms, or else the arm will be in the way of your screw making it difficult. And why do I know this? I'll let you guess =) Repeat this on the other side. Step 4: Mounting the Servos on Servos You will first need to screw on the circular servo attachment. If the servo is facing away from you, turn it all the way to the right. See pictures. Now the circular servo arm is different from the other arms; the screw sticks up above the plastic unlike the other ones, which the screw head sinks below the plastic. So, with  this bump in the middle, a flat surface cannot be mounted totally flat, instead it will wobble and pivot around the center. To fix this, I'm taking a 7/32 bit (one size smaller than 1/4 on a standard drill set) and drilling a small indent on the servo that will be glued on top of the base servo. See pictures. Then using hot glue, glue the two servos together. Step 5: Mounting the Spidey Legs! This part is little tricky. I'm going to put a little video up to kinda help you understand how to mount the arms. See the pictures how to make the arms. You will need four of these.  See the video in step 4 for glueing these on. Step 6: Seeing it all Together After you mounted all the arms you will want to check them for full range of motion. Step 7: Creating a Diagram For Reference Now, this is the most helpful step of all. Create a diagram like the one shown in the picture, and figure out for each servo which way is 180 deg. and which is 0 deg.. Then number all the servos. These numbers are what you will be using in your Arduino program.   For more detail: Arduino Robotic Spider V8 ### 20A/40V INTEGRATED POWER MODULE FOR DC BRUSHLESS MOTORS (BLDC) This project is based on STK984-090A which is a fully-integrated inverter with current rating 20A and supply voltage 40V DC. It has been designed to drive the Brushless DC Motors (BLDC) and permanent magnet synchronous motors (PMSM), the module works as output driver which include power stage and current sense circuitry, header connector provided to interface with Arduino or other micro-controller for PWM inputs and current feedback. Screw terminals help to connect the motor and power supply. INA168 IC is a current sensor and measures the current across the internal sense resistor and provides an output voltage. This voltage can be feed to Arduino analog pins to detect the current flowing across the MOSFET’s. LM317 voltage regulator provides 5V DC to power the current sense IC INA168 and other logic circuitry. D1 motor power LED. Maximum PWM frequency 20 KHz and duty cycle 10 to 90 % or 100%. Current Feedback Output The device INA168 converts a differential input voltage to a current output. This current is converted back to a voltage with an external load resistor that sets any gain from 1 to over 100. Current feedback Output voltage can be set using this formula V = Current x 3mohms x R1/5K ohms ( Is.Rs.RL/5Kohms ) Output Voltage Range The output of the INA168 device is a current that is converted to a voltage by the load resistor, R1, RX. The output current remains accurate within the compliance voltage range of the output circuitry. The shunt voltage and the input common-mode and power-supply voltages limit the maximum possible output swing. The maximum output voltage (Vout max) compliance is limited by either Equation (Vout max = VIN– – 0.5 V ) The project is a fully-integrated inverter power stage consisting of the gate driver, 6 Mosfets and high side current shunt resistor, suitable for driving permanent magnet synchronous motors and brushless DC (BLDC) motors. The MOSFETs are configured in a 3-phase bridge with a single drain connection for the lower legs. The power stage has a full range of protections including cross conduction protection, external shutdown and under-voltage lockout. Built-in charge pump for operation with low battery voltage, over current protection on both high side and low side Mosfets, over-temperature shutdown, under-voltage and over voltage shutdown for defined operation at all input voltages, integrated high side resistor for external current sensing. Read more: 20A/40V INTEGRATED POWER MODULE FOR DC BRUSHLESS MOTORS (BLDC) ### Arduino controls cheap RC car transmitter OBJECTIVE Cheap Chinese RC toy cars can be had for about 5 Euros in the local market. The wireless brains behind the majority of these cheap RC toys is a pair of very cheap ICs the TX2 and the RX2. Yup, that's what they are called. So this tutorial is focused on the TX2/RX2 based remote controlled toys. I bought one RC toy car a while ago and used the Arduino with an IR sensor to drive it. Then I figured why not use the Arduino to drive the radio control mechanism of the car. You can see a video of the steps involved and the final  operational circuit here: WHY? I mentioned in my other projects how hard it is for most people in Jordan to afford buying electronic components because of the very low income,  absurdly high tariffs (mostly to feed rampant government corruption), and arbitrary security procedures. So scavenging parts from cheap gadgets is the way for most young makers I know to sustain their passion for electronic innovation. CREDITS Special thanks to Eng. Jafar Quttaineh for his invaluable assistance. FEEDBACK Your feedback is most welcome to help me improve my future projects. Let's get started... Step 1: Getting started APPROACH In this project, I will use the Arduino to drive the transmitter's LEFT and RIGHT functions. So instead of the user pushing the remote control's joystick to turn the car (or my test rig) , the Arduino can be connected and programmed instead to send these commands via the RC car's transmitter. The same steps can be duplicated to enable the Arduino to drive the transmitter's BACK and FORWARD function pins. I extracted both receiver and controller circuits from the RC car but you may find it easier to just work with the transmitter + Arduino while leaving the receiver and the car intact. This might be simpler for some of you since you have to only worry about dissecting and wiring the transmitter to the Arduino. Also, the intact receiver + car will act as your test platform. It's also more fun to end your project with your Arduino controlling your RC car instead of just looking at two naked circuits and a blinking LED. Your call. COMPONENTS The car has three main components. 1) Mechanical: For steering and locomotion, the car has 2 DC motors and associated gear. One motor provides locomotion from the back of the car, the other DC motor in the front provides steering left and right. I won't be using the motors in this project but these toy cars are a great source of motors, gears, h-bridges, and other parts. So I am not throwing anything away. 2) Electronic: There are three main circuits. a) the transmitter b) the receiver c) the H-bridge. The transmitter and receiver are driven by the venerable TX2 encoder and RX2 decoder ICs. The h-bridge to drive the DC motors uses power transistors. Refer to the datasheet for more details. 3) Power: The transmitter is powered by 2 AA batteries (3V) and the receiver/car comobo is powered by 4 AA batteries (6V). PARTS NEEDED FOR THIS PROJECT - Arduino Uno or clone. - 2 X  10K Ohm resistors. I use each in a series to connect the transmitter's pin to the Arduino's digital pin.  If you want to connect all steering functions (Left, Right, Back, Front) to the Arduino you will need 4 of those. 10K might be overkill but the circuit works. - 2 X breadboards to place the transmitter and receiver for wiring. It just makes for easier handling and wiring. But you can do without the breadboard. - Wires and alligator clips. - 4 X AA (6V) battery source to supply the receiver. - Multimeter to test your connections. - DC motors, small DC lamps, or relays to test your final TX2/RX2 system depending on what you plan to use it for. OPTIONAL LED TESTBED I know some of you will be tempted to just use LEDs to test the rig. LEDs are nice and cheap and accessible. Since the receiver's h-bridge (geek term for circuit that drives motors) switches between positive and negative voltage depending on whether it's driving the motor in one direction or the other (e.g. Forward vs Back), we can't just use LEDs as-is since an LED passes current in one direction only but not the other. But if you insist on using LED's , I came up with a quick and dirty test circuit based on LEDs. I won't describe it in detail because it's not relevant to his project. My LED testing circuit was put together on the fly. It's a mini breadboard made up of two LEDs, two diodes, and two resistors both in parallel but rigged for opposite polarities. When the voltage is positive, one LED will turn on, when it's negative, the other LED will turn on. This is to simulate a motor turning one way (e.g. Right) or the other (e.g. Left).  You don't need to do this test circuit. Just connect a small DC lamp or a DC motor to test your circuit. I am sure there are better ways of doing this but it was the quickest at the time. I might add two more LEDs to simulate the 2nd  motor's Forward and Backward functions. WORKING WITH DIFFERENT RC GADGETS There's a good chance your RX2/TX2 based RC gadget was made by a different vendor with different wire colors and based on different schematics. You should be able to apply the techniques from this project to other RX2/TX2 based RC projects with a modest effort. Step 2: Taking the RC car apart and re-wiring it with the Arduino THE SHOWDOWN And now for the fun part. Putting the pieces together to give Arduino control over the transmitter. For the purposes of this project, I am only connecting the Arduino to the Right/Left function pins of the TX2, pins 1 and 14. But the process is very similar to connect Arduino to the Forward and Back pins 5 and 4. Keep the antenna connected to the receiver for better results. In a production environment, attach the original antennas back on the receiver and transmitter, to squeeze in every extra feet of transmission range. The receiver circuit is also integrated with an h-bridge circuit used to drive the 2 motors. The yellow, green, and blue cables supply positive or negative voltage to spin the motor clockwise or counterclockwise. The RX2 receiver decides, based on the transmitter function signal, which DC motor spins and in what direction. In the final production, you can use the h-bridge output to drive relays or wheels, etc. Major Components in Project– Arduino Uno or clone – 2 X  10K Ohm resistors – 2 X breadboards   For more detail: Arduino controls cheap RC car transmitter ### NANO-6051 BUILT WITH INTEL® 8TH GENERATION CORE™ I7/I5/I3 PROCESSORS American Portwell Technology, Inc., (https://www.portwell.com), a wholly-owned subsidiary of Portwell, Inc., a world-leading innovator in the Industrial PC (IPC) market and a member of the Intel Internet of Things (IoT) Solutions Alliance, has launched its new NANO-6051, a NANO-ITX form factor embedded board featuring Intel 8th Gen Core i7/i5/i3 processors up to 4 cores/8 threads with a low 15W thermal design power (TDP), formerly codenamed Whiskey Lake. The processors integrate Intel Gen 9.5 graphic engine with 24 execution units that delivers enhanced media conversion, fast frame rates and 4K Ultra HD (UHD) video, and provides significant 3D multimedia performance. According to Maria Yang, American Portwell’s product marketing engineer, NANO-6051 provides an optimized balance of high performance, accelerated graphic processing, lower power consumption and energy efficient capability. Operating with thermal design power (TDP) of 15W and a compact footprint (120mm x 120mm; 4.72” x 4.72”),” says Yang, “our new NANO-6051 adopts a heat spreader as an efficient thermal solution for space-limited environments that makes it suitable for fan-less systems and can fit specific design configurations with performance and low-power requirement, especially where space is at a premium. Portwell’s new NANO-6051 features DDR4 2400MHz non-ECC SO-DIMM up to 32GB and storage interface 1 x M.2 Key M 2280 socket for SSD. For functionality extension, it provides 2 x USB 3.2 Gen 2 (10Gb/s) on rear I/O and 4 x USB 3.2 Gen 1 (5Gb/s) on board header to ensure fast data transmission with low-power consumption. 1 x M.2 Key E 2230 socket for wireless module connectivity including Wi-Fi and Bluetooth which can make it an ideal solution for communication and IoT applications. Intel I210AT and Intel I219LM Ethernet Controllers provide dual Gigabit Ethernet LAN access via the two RJ-45 connectors. 1 x RS-232/422/485 is selectable by BIOS adjustment. The Intel Gen 9.5 graphic engine supports dual mini DisplayPort (DP) on rear I/O with resolution up to 4096×2304. It provides a selection of multiple connections such as displays, graphic cards, cameras, storage and more on the same system. Moreover, NANO-6051 offers combo Audio Jack and DC 12V input on rear I/O, ATX 4-pin 12V on board, on-board TMP 2.0 for application security, and supports multiple operating systems including Microsoft® Windows® 10 IoT Enterprise, Ubuntu®, real-time Yocto Project® (YP) and Wind River®. Meanwhile, NANO-6051 also takes advantage of Intel advanced technologies such as Intel Optane™ Memory, Turbo Boost, Hyper-Threading, Virtualization (VT-x), Thermal Monitoring, Trusted Execution and Speed Step™ Technology. As a whole, it can offer a wide variety of expansion capability for various applications such as industrial factory automation, automated test equipment, semiconductor equipment, robotic control, automatic unmanned vehicle, medical/healthcare equipment, digital signage, industrial IoT gateway, digital security surveillance, broadcasting systems, transportation applications and more. Read more: NANO-6051 BUILT WITH INTEL® 8TH GENERATION CORE™ I7/I5/I3 PROCESSORS ### Arduino Ping Ultrasonic Range Finder Code The Ping))) is an ultrasonic range finder from Parallax. It detects the distance of the closest object in front of the sensor (from 2 cm up to 3m). It works by sending out a burst of ultrasound and listening for the echo when it bounces off of an object. The Arduino board sends a short pulse to trigger the detection, then listens for a pulse on the same pin using the pulseIn() function. The duration of this second pulse is equal to the time taken by the ultrasound to travel to the object and back to the sensor. Using the speed of sound, this time can be converted to distance. Circuit The 5V pin of the PING))) is connected to the 5V pin on the Arduino, the GND pin is connected to the GND pin, and the SIG (signal) pin is connected to digital pin 7 on the Arduino. image developed using Fritzing. For more circuit examples, see the Fritzing project page Schematic: Code /* Ping))) Sensor This sketch reads a PING))) ultrasonic rangefinder and returns the distance to the closest object in range. To do this, it sends a pulse to the sensor to initiate a reading, then listens for a pulse to return.  The length of the returning pulse is proportional to the distance of the object from the sensor. The circuit: * +V connection of the PING))) attached to +5V * GND connection of the PING))) attached to ground * SIG connection of the PING))) attached to digital pin 7 http://www.arduino.cc/en/Tutorial/Ping created 3 Nov 2008 by David A. Mellis modified 30 Aug 2011 by Tom Igoe This example code is in the public domain. */ Major Components in Project Hardware Required Arduino Board (1) Ping Ultrasonic Range Finder hook-up wire For more detail: Arduino Ping Ultrasonic Range Finder Code ### How to Make an Interactive Sound Wave Print In this tutorial we are going to show you how to make an interactive sound wave print within a picture frame, so you can see and hear your favourite song at the same time! When you touch the print through the glass of the frame, it will play the song shown in the sound wave image. Printed Sensors behind the print act as a proximity sensor and are connected to a Touch Board and speaker behind the frame. Step 1: Preview https://youtu.be/rAYQtIw2UWc Click here for a preview ! Step 2: Materials Touch Board Electric Paint Printed Sensor - Paper USB cable Speaker Picture frame Masking tape Step 3: Create Sound Wave Print First, you need to create your sound wave print. We used this website here to generate a sound wave from a song. Simply upload the song you want to use, download the generated wave and design your sound wave print. We recommend printing the sound wave on card instead of paper, so the sensor pattern doesn't show through. Step 4: Upload the Code and the Song If you haven't set up your Touch Board yet, do so now by following this tutorial here . In this project, we used our Proximity_MP3 sketch. In order to detect touch through glass and paper, the sensors of the Touch Board need to be more sensitive. Therefore, the Proximity_MP3 code is more suitable than the Touch_MP3 code. Simply open the Proximity_MP3 sketch, which is located under File > Sketchbook > Touch Board Examples > Proximity_MP3 and hit upload! You also need to upload your song to the Touch Board. Read this tutorial here if you haven't changed the sounds on the Touch Board before. We will use electrode E0 to trigger the song, so upload your chosen song named TRACK000.mp3 to the SD card. Step 5: Prepare the Printed Sensors Attach a strip of the Printed Sensors to the back of the picture frame, where we'll connect it to the Touch Board. Cables aren't necessary, as the Printed Sensors can be bent. Carefully cut away part of the Printed Sensor so you are left with a reversed L-shaped sensor. Make sure that the long part of the sensor has an access node, as this is where you are going to connect the board. Step 6: Assemble Sound Wave Print Frame and Sensor Now it's time to assemble! Firstly, place the sound wave print inside the picture frame. Now, add the Printed Sensor behind it, the pattern facing the same way as the print, and make sure the strip extends beyond the frame. Secure the frame backing in place, and bend the Printed Sensor down. Stick it down with Blue Tack, or double-sided tape. Source: How to Make an Interactive Sound Wave Print ### Bolymin BE635 – for all PIC32 lovers With the Bolymin BE635 graphic embedded module it´s possible to focus only on software development - hardware is done. A possibility to interactively adjust various parameters and at the same time to see a “result” of our settings (for example a status of a given device) considerably increases safety and reliability in various industry sectors. That´s probably one of reasons why a graphic output becomes a standard even in devices, where they were recently used very rarely so far. From the development point of view, one of the key deciding factors is a platform, on which a given system is built (processor, OS). PIC32 family certainly belongs to popular microcontrollers (32 bit RISC CPU), that´s why the new graphic embedded module Bolymin BE635 addresses all, who know PIC32, or they want to become familiar with it. For everyone, who´ve ever worked with PIC32 family, a development of application will be much easier with BE635, as practically all necessary hardware is on one board and at the same time we get a support in a form of various drivers for communication as well as graphic output. For programming purposes a new Microchip PICkit3 is suitable and SW development can be done in the known environment Microchip MPLAB IDE. BE635 is designed as a universal module, where only a designer decides, how much computing power of a processor will use on which activity (displaying, data processing, external HW control, communication, ...), that´s why possibilities of its usage are really very wide.   For more detail: Bolymin BE635 – for all PIC32 lovers ### Piano for Campus School Project With Arduino Nano RP2040 + MPR121 Hi! My name's Jack and I'm a senior at Boston College studying Computer Science and Finance. This semester, I'm taking Physical Computing with Professor Gallaugher. We've been following a flipped classroom model and I made this project utilizing Professor Gallaugher's Circuit Python YouTube tutorials. For my Campus School Assistive Tech Project, I made a realistic-looking touch-enabled piano that plays appropriately-determined tones when you press on each key. This project utilizes an Arduino Nano RP2040 running CircuitPython as well as an MPR121 Capacitive Touch Sensor. The sensor uses a STEMMA QT connector to connect to the Arduino, which is mounted on top of a breadboard in order to easily connect cables. There is a small speaker connected to play sounds. Lots of the wiring is connected with alligator clips (for example, these connect the touchpads on the MPR121 to the tinfoil on the keyboard keys). Finally, the Arduino is connected to an external power bank I have so that the setup can run on its own power (standalone, doesn't need to be connected to a laptop). I wanted to build this project in particular because I am a piano player myself and remember how fun it was to mess around with electronic keyboards when I was really young (and I still enjoy doing so). I thought it was so cool we learned how to make something like this and wanted to build it for kids at the Campus School to share that joy I had when it came to keyboards and music. I also wanted to make sure it looked realistic and fun (so that's why I spent a fair amount of time designing the wood and acrylic lasercut stencils by hand). If you have any questions, don't hesitate to reach out and I'll try my best to answer – I'm jack.m.mcclelland@gmail.com. Supplies All materials: Circuits and wiring materials (middle of image): Arduino Nano RP2040 (can also substitute with Adafruit Circuit Playground Bluefruit or similar) Breadboard (for easily connecting the Arduino to the speaker and MPR121 sensor) MPR121 Capacitive Touch Sensor Speaker with aux out cord (you'll clip alligator clips to the tip and sleeve) 14 alligator clips (12 to connect MPR121 touchpads to keys, 2 to connect speaker to Arduino) External battery pack or power bank USB 2.0 to Micro USB cable to connect external battery pack to Arduino Any other alligator clips or wires you need to connect all the above Frame and building materials (top and bottom of image): Wood frame to house the piano Acrylic keys (used 1/8" "vanity" [mirrored] and 1/8" dark blue acrylic in this project) Take to secure elements like the box sides and keys to create the frame Tinfoil (for the capacitive touch part, will be attached to the bottom of the keys) Scissors to cut the tinfoil (ripping works too but is much less clean) Step 1: Lasercut and Assemble the Frame and Keys First, design and lasercut the materials for the frame and keys. I designed this in Adobe Illustrator and went to my university's Maker Space to cut this out (they were super nice and helpful). The frame I made out of wood (1/8" birch wood I believe), and I made sure to include a hole for the speaker. Optionally, you can add volume control or pitch control potentiometers and I cut out two squares at the top for that. Make sure you include a hole for the keys so they can sit flush (make this bigger than you think as you'll need to space the keys out so they don't touch each other), and I also added some text at the top and cut that out too so it looks nice. I made sure the sides of the box could easily slot into slits I made in the top. For the keys, I tried to make it look realistic, and so used a combination of alternating light and dark keys. I saw the vanity / mirrored acrylic and had to go with that for the white keys! The dark keys are the darkest acrylic I could find which was dark blue. Assemble the wooden part of the box, which should be as easy as slotting in the sides into the notches on the top and then using tape to make sure everything stays together. Then cut out some tinfoil to place at the bottom of each key. Wrap the tinfoil around each key, then place the keys next to each other in the proper pattern so you can attached them to the box. I found this was easiest done when the box was upside down. I also used two long thin pieces of wood to support the keys in place, which is critical. Use tape to secure everything down. Once you have the box all good to go, it's time to write the code that will run on the circuitry! Contact me (email at the top and bottom of this Instructable) if you'd like for me to send you the Adobe Illustrator file I used to cut this design! Step 2: Write the Code! Now it's time to write the CircuitPython code that will run on the Arduino Nano RP2040. Let's briefly walk through it line-by-line: First, add your import statements for the libraries you'll need for the project. import time, board, pwmio, adafruit_mpr121 Then, add these lines to set up your touchpad (MPR121 Capacitive Touch Sensor). i2c = board.I2C() touch_pad = adafruit_mpr121.MPR121(i2c) Next, add these lines to set up your Arduino with your external speaker. tone = pwmio.PWMOut(board.D3, variable_frequency = True) volume = 500 tone.duty_cycle = volume Now, set up the frequency and duration for your tones that will play each time you touch a key. notes = [262, 277, 294, 311, 330, 349, 370, 392, 410, 440, 466, 494] tone_duration = 0.2 rest_duration = 0.01 Create a function that will be responsible for playing tones when it is called. def play_a_tone(freq): tone.duty_cycle = volume tone.frequency = freq Now that everything's set up, let's get to the main part of the code, explained below: while True: touched = False for i in range(12): if touch_pad[i].value: print("Pad {} touched".format(i)) play_a_tone(notes[i]) touched = True if touched == False: tone.duty_cycle = 0 while True runs everything in this loop during the program's execution in perpetuity. First, initialize the variable touched = false, so we know nothing's playing at the moment. Next, we have 12 keys that play 12 notes (see the notes[] list), so let's loop through them here. If a pad is touched... Then print that to the console (for debugging and visibility purposes) Also, run the function play_a_tone() we defined earlier, and pass in the pad / key that was touched Now set the variable touched = True because a key was just touched, a note is being played If touched = False, then we want to make sure nothing's playing And that's what happens with this line Let me know if you have any questions about the code! Here it is in full: import time, board, pwmio, adafruit_mpr121 i2c = board.I2C() touch_pad = adafruit_mpr121.MPR121(i2c) tone = pwmio.PWMOut(board.D3, variable_frequency = True) volume = 500 tone.duty_cycle = volume notes = [262, 277, 294, 311, 330, 349, 370, 392, 410, 440, 466, 494] tone_duration = 0.2 rest_duration = 0.01 def play_a_tone(freq): tone.duty_cycle = volume tone.frequency = freq def play_a_rest(duration): tone.duty_cycle = 0 time.sleep(duration) while True: touched = False for i in range(12): if touch_pad[i].value: print("Pad {} touched".format(i)) play_a_tone(notes[i]) touched = True if touched == False: tone.duty_cycle = 0 Attachments piano.py Download Source: Piano for Campus School Project With Arduino Nano RP2040 + MPR121 ### Arduino based Bi-color LED Matrix Audio Spectrum Visualizer After we came up with the Bi-color LED Matrix Driver Module kit, we have been looking around for interesting projects to work with it. You may be interested in some of the projects we have put up at instructables using this LED Matrix kit. Instructable to build a Arduino (SPI) 7 Bi-color LED Matrix Scrolling Text Display Instructable to build a Arduino based Bi-color LED Matrix Tetris Game Most electronics hobbyist seems to be interested in projects involving Audio Spectrum Analyzer/Visualizer at some point in time. We decided to come up with this instructable to show how an Audio Spectrum Visualizer can be built using the Bi-color LED Matrix DIY kits. As usual, before we decided to come up with this instructable, we browsed through the existing instructables to check if there are any similar projects. There is already a handful of instructables involving Spectrum Analyzers/Visualizers but we decided to go ahead with this instructable as we will be offering something different here and hopefully someone may find it useful. To build this project, basic electronics knowledge with electronics component soldering skill and some knowledge on using the Arduino are required. You may view the following YouTube video to see what we are building. Step 1: Building the Arduino Bi-color LED Matrix Audio Spectrum Visualizer We will be building a two LED Matrix tall stereo audio spectrum visualizer here driven by an Arduino Nano. We will basically be using four Bi-color (Red and Green) LED Matrix Driver Module kits from jolliFactory and two MSGEQ7 IC chips made by Mixed Signal Integration. Two of the LED Matrix kits are for the audio left channel and another two for the audio right channel. Each of these modules uses two MAX7219 Display Driver ICs to drive a Bi-color LED Matrix. These ICs are excellent because they take a lot of work off the micro-controller and simplify the wiring and logic design. You can find this Bi-color LED Matrix Driver Module kit from here. This kit comes with all through-hole components and someone with basic soldering skill should be able to assemble it without much difficulty. See the following YouTube video on how to assemble the LED Matrix Driver Module Kit:   The MSGEQ7 IC is a single channel seven band Graphic Equalizer Display Filter. By feeding an audio signal to it, it will filter out seven frequency bands centred around 63Hz, 160Hz, 400Hz, 1,000Hz, 2,500Hz, 6,250Hz, and 16,000Hz. The seven frequencies are peak detected and multiplexed to the output to provide a DC representation of the amplitude of each band. All we need is to read these DC values with the microcontroller analog input and output the spectrum to the Bi-color LED Matrix displays. We need two MSGEQ7 ICs here, one for the left and another for the right audio channel. The wiring connection diagram above shows how a MSGEQ7 IC is typically connected. Step 2: Wiring After the four LED Matrix kits are completed, they are connected together with the two MSGEQ7 ICs and micro-controller as shown in the wiring diagrams. One of the wiring diagrams is with the LED Matrices removed for a better view of the connections. An Arduino Nano is used here to control the entire electronic circuit setup. Note the use of 10Kohms pull-down resistors on the LOAD input pins for the LED Matrix modules. When power is first applied to the micro-controller or when they are reset, their I/O lines float. The LED Matrix module MAX7219 ICs can see this as valid data and display garbage until the micro-controller gains control. The pull-down resistors prevent these problems. Except for the four Bi-color LED Matrix Driver modules, we hook up the entire circuit on a small piece of perf-board around 90mm x 30mm. See above for our completed circuit on perf-board. Note there are two 3.5mm stereo audio jack sockets in the wiring diagram in the previous section. One serves as a stereo audio input and the other is a pass-through output which allows you to connect this Audio Spectrum Visualizer in-line between your audio source and your stereo system. However, due to space constraint on our perf-board, we are using a 4 pin angle header to replace one of the 3.5mm stereo audio jack sockets and we had to modify our audio cable for it to fit to the 4 pin angle header. If you are working on this project, a larger perf board around 110mm x 30mm should be sufficient to populate all the correct parts required for this project. Step 3: Programming the Arduino Board The Arduino board needs to be loaded with the Arduino sketch to drive the Audio Spectrum Visualizer. We used Arduino IDE V1.03 for our project. Download the Arduino sketch below for this project and upload it into your Arduino board. Download jollifactory_Audio_Spectrum_Visualizer_V1_0.ino You may amend the sketch to enhance the visualizer to your liking. For us, we like the slow falling effect for each of the frequency band's peak.   For more detail: Arduino based Bi-color LED Matrix Audio Spectrum Visualizer ### PICOSCOPE AUTOMOTIVE OSCILLOSCOPES WITH SMART ACCESSORY INTERFACES This latest diagnostic PicoScope design retains all the strengths of the existing 4425/4225 automotive scopes but adds smart interfaces for powered and intelligent accessories for increased efficiency. Saelig Company, Inc. has introduced the new PicoScope 4425A and 4225A diagnostic oscilloscopes, available in 4-channel and 2-channel configurations. This latest diagnostic PicoScope design combines all the strengths of the existing 4425/4225 automotive scopes but adds smart interfaces for powered and intelligent accessories.  The new accessory interface, called PicoBNC+™, combines the standard BNC connector with active digital and power connections. The 4425A and 4225A will also work with existing BNC probes and accessories, preserving previous accessory investments. The many features of this new scope series include: automatic probe detection (ConnectDetect), ±200V voltage input range, floating inputs, high sample rate (up to 400MSa/s), high vertical resolution (12-bit to 16-bit enhanced), a SuperSpeed USB 3.0 interface, 20MHz bandwidth, advanced triggers, advanced filtering, large buffer memory (250MSa), math channels, measurement & phase rulers, Pico waveform library, more than 150 guided tests, and free lifetime Pico software upgrades. The new 4x25A models make it even easier and more intuitive to use, with new test capabilities and future-proofing as part of the design. The new PicoBNC+ connection is a plug-and-play ‘push to connect’ design.  Interactive LEDs on the scope match the color-coding on the probes when they are connected. Probes are automatically recognized by the PicoSoft software and settings are adjusted accordingly, making diagnostics even faster and easier with the PicoScope 4x25A automotive oscilloscopes.   PicoBNC+ probe recognition saves time, reduces errors, and allows new users to become confident and comfortable faster than before.  PicoBNC+ powered probes mean that current clamps are always ready for action, with no checking of batteries or limited long-term measurements.  PicoBNC+ software control provides Auto-zero for probes, avoids manual switch settings, and simplifies probe setup. Channel status LEDs indicate the appropriate probe/channel connection, and which channels are in use.  The probe mismatch test in PicoScope 7 software eliminates the chance of accidental incorrect setup or erroneous measurements.  In addition to all the new features, the 4x425A scopes still offer all the benefits of the previous versatile 4425 PicoScopes. Read more: PICOSCOPE AUTOMOTIVE OSCILLOSCOPES WITH SMART ACCESSORY INTERFACES ### Digital Dice With Arduino Have you ever tried to play a game only to find out you don't have any dice? That's not a problem anymore! Now you can create your very own digital dice using LEDs and your Arduino board. This is a beginner-level project. This project will allow you to push a button and randomly generate a number between 1 and 6, shown with the number of LED lights. Credits to: EvdS. (n.d.). Led dice. Arduino Project Hub. Retrieved May 14, 2022, from https://create.arduino.cc/projecthub/EvdS/led-dice-885cf1?ref=tag&ref_id=led&offset=8 Supplies 6 LEDs 6 220 ohm resistors 1 push button 1 k-ohm resistor 1 Arduino Uno 1 breadboard jumper wires Step 1: Set Up the LEDs and Button Place the 6 LEDs in the breadboard as shown. They should go in rail E with two spaces in between each LED. You should place the Anode end (long end) of the LED in the first of the two spaces and the Cathode end (short end) in the second space. Place your LED Anode ends in rows 3, 7, 11, 15, 19, and 23. Place your button in the breadboard as shown. The left side should go in rail E, space 59 and 61, and the right side should go in rail F, space 59 and 61. Step 2: Attach the Resistors Place a 220 ohm resistor in the row with the Cathode end of the LED. It should reach from rail D to the ground rail (-, blue) in each of the LEDs (rows 4, 8, 12, 16, 20, and 24). Place a 1 k-ohm resistor near your button. It should go from the bottom left of the button (row 61) to row 64. Step 3: Wire the LEDs Take one jumper wire and attach it from the Anode end of the first LED (row 3) and attach it to the digital output on the Arduino at space 2. Take the next jumper wire and attach it from the Anode end of the second LED (row 7) and attach it to the digital output on the Arduino at 3. Take the next jumper wire and attach it from the Anode end of the third LED (row 11) and attach it to the digital output on the Arduino at space 4. Take the next jumper wire and attach it from the Anode end of the fourth LED (row 15) and attach it to the digital output on the Arduino at space 5. Take the next jumper wire and attach it from the Anode end of the fifth LED (row 19) and attach it to the digital output on the Arduino at space 6. Take the next jumper wire and attach it from the Anode end of the sixth LED (row 23) and attach it to the digital output on the Arduino at space 7. Step 4: Wire the Button Take one jumper wire and attach it on the bottom right (row 61, rail G) by the button. Attach the other end of the wire to the digital output on the Arduino at space 12. Take another jumper wire and attach it next to the resistor in the space at row 64, rail C. Attach the other end to the ground rail (-, blue). Take another jumper wire and attach it to the top left side of the button (row 59, rail D). Attach the other end to the positive rail. Step 5: Attach the Ground and 5V Wire Take a jumper wire and attach it to the Ground port on the Arduino. Attach the other end to the ground rail on the breadboard. Take another jumper wire and attach it to the 5V port on the Arduino. Attach the other end to the positive rail. Source: Digital Dice With Arduino   ### Magic Light Capacitance Sensor using an Arduino This was my very first arduino project.  Its great for beginners. Fade the color or the lights my moving your hands near it.  It fades from a pretty purple blue to a firey red-orange. Its was SUPER easy to build, not to hard to write the code, and its really impresses people!  I gave it to my mother for christmas, and it was a big hit. Watch the video to see it in action! I apologize for the poor quality, I will try to take more pictures. All you need is: Arduino wires high resistor (mine is 10 mega ohms) leds tin foil or other conductive material I build a housing for mine using an empty salsa jar and a toilet paper tube that happened to be the perfect size to snap together like legos. Step 1: Code and Circuit Set up a breadboard according the  semantic. Download the attached code. Update: added Fritzing diagram and schematic (Its a great program, check it out frizting.org) /*this code is a cap. sensor that fades between 2 leds * set up: pin 8 > high resistor > one wire to foil, one to pin 9 *Led set up pin 2>resistor>led>grnd *based on http://arduino.cc/forum/index.php/topic,8609.0.html * ajust if statment to fit resistor, currently using a 10Mohm */ Once it is set up, run the code and open the serial monitor.  Move the set up away from your computer to help diminish interference   Note what numbers are being out put when nothing is near the foil sensor, also note what it is when your open palm is extremely close to the sensor. Change the int low cap to just above the number output when nothing is near your sensor. Change high cap to the number output when you are almost touching the sensor. You will have to adjust these numbers often to "calibrate" the light.  Many factor interfere with the readings to it needs to be set up whenever it is moved. basic_capasitance_led_fade.zip1 KB Step 2: Housing To defuse the light coming through the jar I "mod-podged" toilet paper to the inside of the jar. To do this I mixed a little bit of elmers glue or mod-podge with just a tiny bit of water, and painted it onto the inside of the jar.  Then I pressed on ripped up scraps of white tissue paper (actually just 1 ply toilet paper). Major Components in ProjectArduino wires high resistor   For more detail: Magic Light Capacitance Sensor using an Arduino ### Freq Show: Raspberry Pi RTL-SDR Scanner Have you ever wondered what's in the radio waves zipping invisibly around you every day?  Software-defined radio (SDR) is a great tool to explore radio signals using a computer and inexpensive radio tuner.  With SDR you can examime many radio signals such as FM radio, television, emergency & weather radio, citizen band (CB), and much more. Although dedicated SDR hardware like the HackRF allow you to tune an immense range of the radio spectrum, you can easily get started with SDR using a Raspberry Pi and inexpensive RTL-SDR tuner.  Inspired by the HackRF PortaPack, this project will show you how to build a small portable SDR scanner using a Raspberry Pi, PiTFT, and RTL-SDR radio dongle.  With the Raspberry Pi Freq Show RTL-SDR scanner you can visualize the invisible world of radio!   For more detail: Freq Show: Raspberry Pi RTL-SDR Scanner ### LED Flipbookit: full color and brightness control with an Arduino Step 1: Gather the materials Materials: - addressable RGB LED strip : I used a new variety of three conductor WS2811 strips. - an Arduino : I used a Arduino Leonardo. Any 5vdc Arduino should be adequate. - 4 AA batteries and a battery holder are a nice touch to make it more portable. - prototyping board or prototyping Arduino Shield - potentiometer for brightness control - maybe some connectors for the power and motor could come in handie - headers to secure hardware to Arduino - misc wire for LED strip and potentiometer - 3M Double Sided Foam Tape for sticking Arduino and LEDs in place - Flipbookit MOTO-FLIP from flipbookit.net : http://flipbookit.bigcartel.com/product/flipbookit-moto <-- this thing is super easy to build - Step 2: 0. build Flipbookit Moto. Seriously this thing is ridiculously easy to assembly. Enjoy. 1. Solder up proto to align with Adruino as follows: - LED Strip to 5vdc, GND, and pin9 - potentiometer to 5vdc, A1, GND - motor connector to 3.3vdc, GND 2. Load the Arduino library and example code from here: https://github.com/CRASHSpace/LEDs/tree/master/HSB_to_RGB/examples/led_rainbow_brightness 3. Hook up prototype board to the Arduino. Test the LEDs and brightness and motor Step 3: 4. Cut holes in the rear of your Flipbookit to accommodate the power barrel jack and the usb port. 5. Test fit Arduino 6. Add 3M Double Sided Foam Tape to Arduino 7. Affix Arduino in place. 8. Hookup motor 9. Plug in power or usb   For more detail: LED Flipbookit: full color and brightness control with an Arduino ### Arduino - Solar MPPT Battery & Phone Charger I always wanted to make a PCB and this is my first professional circuit board attempt. So before you decide to start this project you should know there could be some mistakes or it could be more reliable and compact. This design is not the most efficient and cheapest way to make a DIY MPPT design. There are many reasons for this matter. First of all, when I choose a component it has to be easy, cheap, and reachable. Also, I already had some components and wanted to use them. The second reason, I wanted my design to be as simple as possible. The main reason is these processes have to be educational and in the end, the product should be usable. Thus, the designing process was elaborated for these reasons. My goal is to introduce you to the concept and some design tips. So, if you decide to make your circuit I suggest you shouldn't copy this. You should take this circuit as a reference. I am really keen on solar-powered circuits and I wanted to learn the MPPT concept for years. The best way to learn something is to make it, so I started designing my circuit. If you have any questions about the circuit, feel free to contact me. If I have a solution, I will try to respond in my free time. Before I start I really suggest you read the MPPT project of ASCAS. He has done a really great job. Supplies Soldering Station 3D Printer 1x Arduino UNO 1x INA219 1x PCF8574 1x IR2104 1x MT3608 1x TPS61175 2x 18650 LI-ION 1800mAh battery 1x 16x2 LCD 2x BC547 2x IRF510 1x IRF9540NPBF 4x MBRS340T3G 1x ES3D 1x 5mm Red LED 1x 220uH inductor 1x 4.7uH inductor 1x 22uH inductor 2x 10k NTC 2x 1k POT 1x Switch You can order the components on the schematic. Step 1: INTRODUCTION TO MPPT 1. GENERAL INFORMATION - What is the meaning of MPPT?      The meaning of the MPPT is “Maximum Power Point Tracer”. We use it in a solar charge controller. This is neither a component nor a circuit. It is just a method that we use in control devices. - Why do we need them? With this method, we can access the maximum power that solar panels can give us with respect to the solar radiation at that moment. - What is the ‘Maximum Power Point’? Before we discuss that first, we have to learn about the solar panel characteristic curve (graph 1). This type of graph is called the I-V curve. ‘Isc’ is short-circuit current and ‘Voc’ is open-circuit voltage. Usually, you can see them on the backward of the panels at standard test conditions. Open circuit voltage is the maximum voltage and short circuit current is the maximum current that a solar panel can reach. It depends on the heat and solar radiation but for now, we will discuss it later. If we add the power curve to this graph, it will look like (graph 2). As you can see the power line starts from zero and before the peak it continues like a linear line. The reason is voltage is changed but current can not go further than Isc. That peak power is our maximum power point. That means we can not produce more power than the peak point. - What happens if we use solar panels directly? We can explain it easily with an example. Let’s say we have a solar panel that Voc is 22V and Isc is 0.62A. Also, MPP is 10W. And we want to charge a 3.7V battery. If we directly connect them, the voltage will be 3.7V and the solar panel can only produce 0.62A. That means, our output power is 2.3W! we lost 7.7W power. If we had been using an MPPT device, it had been checking the input voltage, found the maximum power, and gave it to us. In this case, we can charge the battery with 2.7A. - How do MPPTs work?      It checks the input voltage and current. It requests more power from the solar panel and if the solar panel can supply it, then it will ask for more until the solar panel can not afford the requested power. This means, our tracker found the MPP. After, it tries to hold the point if the power does not change. However, in real life, MPPT can not just hold a point, it swings at that point. Because it is always in a search for MPP. 2. DIFFERENT MPPT METHODS      There are many types of MPPT algorithms. MPPT methods can vary depending on different purposes. Convergence speed of the MPP, number of sensors used for the tracking, cost, etc. These parameters are directly related to our chosen method. In this paper, I am not going to describe all these methods but if you are interested in learning more, you can easily google these keywords; Incremental Conductance (IC) Method Constant Voltage Method Temperature Method Open Voltage Method Feedback Voltage (Current) Method Fuzzy Logic Control As you can see, there are several different methods. To say one of them is perfect is difficult because they have pros and cons, so it depends on the application. In this paper, we will use the “Perturbation & Observation Method”. Therefore I did not add it to the list above. Step 2: PERTURBATION & OBSERVATION METHOD 1. ALGORITHM      For this project, I chose the common and effective method called ‘Perturbation & Observation’ (Graph 3) - How do this method work?      For clarity and a better understanding, we have to look at each part separately in this method (Graph 4). First, the algorithm reads the solar voltage and current value. Our first reading is shown as (1) second is (2) and it goes on like this. We assume that it is as shown in (Graph 4). (Graph 5) Next, the algorithm calculates the power shown as P(1). The initial value of voltage, current, and power assumed 0. It controls the difference between two power points. If there is no change between the two’s, it just returns the start position. In reality, we need to discuss this condition too but to understand the general idea, we can ignore this. If there is any change between those, the algorithm can skip to the next condition. (Graph 6) The algorithm has to compare if P(1) is bigger than P(0) because the algorithm has to know the exact point. (Graph 7) As you can see, the difference between power can be in LHS or RHS and move upwards or downwards. If the difference is bigger than 0, the algorithm knows it goes upwards, If not, it goes downwards. However, it still can’t find the side, so it has to look for the movement of voltage. In our case, P(1) is bigger than P(0). (Graph 8) The algorithm compares the voltage differences and decides the direction of the motion which is LHS or RHS. In our case, V(1) is bigger than V(0). (Graph 9) After the algorithm decides on motion direction, it increases or decreases the reference voltage. The reference voltage is actually the solar voltage value. If we decide to increase reference voltage, that means, we have to increase the solar voltage. After increasing the solar voltage, the algorithm starts to check where motion is again until it finds the MPP. For better understanding, we need to discuss what the duty cycle is and what a ‘buck converter’ is, we will talk about them in STEP 3. - ΔPower = 0 Condition (Graph 10) This graph shows power-voltage curves with respect to different solar radiations. Red dots are the MPPs. As you can see, solar radiation can change the maximum power point and open-circuit voltage. That means power can remain the same although MPP is changed. (Graph 11) Blue dots show equal values of power curves. As you can see, solar radiation can change but power can stay the same. - Overall Table (Graph 12) 2. PROBLEMS - Drifting Problem      This problem can be explained basically like this, let’s think available solar radiation is 400 W/m2. P&O algorithm consistently searches for MPP and it fluctuates as much as ΔV at point A. However, if the power curve increases to 600 W/m2, the algorithm thinks power and voltage increase. So that, the reference voltage will shift to the right and move away from MPP. (Graph 13) - What are the pros and cons? Pros; Simple structure Doesn’t need pre-defined solar panel features(Vmpp, Isc eg.) Cons; Reference voltage drafts away for unstable weather conditions. Depends on the reference voltage step, fluctuation increases on the MPP. Step 3: DESIGN RULES TO KNOW 1. BUCK CONVERTER TOPOLOGY The first and second notes are for the topology. 2. SYNCHRONOUS AND ASYNCHRONOUS BUCK CONVERTERS The third note is for this. 3. DUTY CYCLE The fourth one is for this. The duty cycle can be calculated with the ON time divided by the period. In this way, we can adjust the voltage level with alter the duty cycle as I explained above. Step 4: BLOCK DIAGRAM OF THE CIRCUIT 1. SIMPLIFIED BLOCK DIAGRAM First one is the simplest block diagram of the circuit. This way, when I design a circuit, I can see what I need clearly. - Solar Panel I used a solar panel that has many features shown above. There is no additional advantage or specialty of the panel, the reason for my choice is because I already have it. - Load      As a load, I want to charge LI-ION batteries. In this way, I can charge my phone or anything that can be fed with 5V. - MPPT      This part is the MCU part. The Circuit board will be controlled by this controller. MCU will drive the DC-DC buck converter and LCD. Also, it will read the input voltage, current, and heat of the MOSFETs. - LCD      I want to show some data on LCD. So that I don’t have to connect MCU to the computer every time. Also, I want to use the final product outdoor which will be easier to use. - DC-DC Buck Converter      This is actually the main converter for the MPPT. This is going to be a synchronous buck converter. The reason is that the synchronous version is more efficient than the asynchronous version. Solar input power is not that much so I need to make this conversion as efficient as possible. 2. DETAILED BLOCK DIAGRAM After I make a basic block diagram of the circuit, I like to add more details to see what I need. The third one is showing the detailed version. Before I printed the circuit board, there was a current sensor for the output of the buck converter too. But thanks to my bad luck, the first current sensors that I ordered were faulty. So I decided to change it to another IC. Because of budget problems, I couldn’t buy two. So I decided to use the current sensor only for input.      Backflow current control unit has two advantages. The first one is separating the solar ground and load ground. If this application were a high input voltage application, it would be beneficial to use. The second one is it blocks the backflow current coming from the buck converter. It’s important because solar input voltage can be less than the output battery voltage and current can flow from batteries to panels.      The heat sensor is optional. In our case, current not be that much to heat MOSFETs. But for safety, it will be good to see it. So that, we can on and off the load MOSFETs.      I had bought a MOSFET driver earlier so I have had to add a 10V boost converter to the system because it is working between 10-20V. Also, I used the Arduino UNO board so I supply it with 10V too. It’s not an efficient way but as I said before, I tried to use components that I already have. Step 5: SCHEMATIC 1. SOLAR PANEL BLOCK - Input Voltage Sensor      The input voltage sensor is a voltage divider circuit. C2 and C3 caps are used as a decoupling for ADC. I will share my design preferences too. I ordered some resistors and in the designing process, I try to reach the exact values of the resistors with my resistor values. That’s why they were so many. Also, I added a LED indicator for the input voltage. - Input Current Sensor      I used 3 different ways for the input current sensor. My first choice was ACS712. It’s a very precise IC but for my circuit, read current steps are so wide. My solar panel’s short circuit is about 700mA and that IC can read 30A on both sides. So I tried to make my current sensor with OPAMPs. Unfortunately, it couldn’t be precise and has a very large reading tolerance. I can share my high-side current reading with differential amplifier notes later. Next, I decided to use MAX471 IC. It’s the same thing with high-side current sensing with the differential amplifier, but all circuits are in a package, even the shunt and gains resistors. It could be perfect but as I said, they came faulted to me so I couldn’t use them. Finally, I found INA219. It’s a very precise IC and has adjustable gain also it communicates with the I2C protocol. I will share my design notes for this IC too. 2. DC-DC POWER CONVERTER BLOCK - Mosfet Driving      IR2104 is easy to use and you can drive both MOSFET.      IMPORTANT: C7 bootstrap capacitor should be more than 100nF. Keep in mind to replace it with 100nF or higher value. In addition to this, I accidentally drew the C7 capacitor between the D1 diode and HO pin which is really important. It should have been between D1 and VS. Even though I changed it from the schematic, it still stays on the PCB drawing. - Mosfet Heats      The heat sensor is a voltage divider and I feed them with 3.3V because I already have 3.3V on the Arduino board. It will consume less energy in this way. - Mosfet      For the MOSFET circuit, I will share an excel file and you can design your circuit with that calculator. I split the total capacitance into three parts so the output voltage ripple decreased. L1 inductance value is high because Arduino switching frequency is low. I used 31kHz frequency on the D11 pin of the Arduino. I used the D4 diode as a BCCU because there is no need to separate input and output grounding. Input is not that high. But still current can flow from the battery to the solar panel. D4 will eliminate that. 3. LOAD BLOCK - Battery & Voltage Sensor      C16 and C17 are decoupling capacitors. I used two LI-ION batteries in parallel. So I don’t need a voltage divider, batteries are already in a 5V range. But I made a mistake and unfortunately, I noticed it after the PCBs came to me. If you directly connect the batteries to the Arduino analog pin, the Arduino is supplying itself from the batteries and it can’t be completely turned off if you don't disconnect the batteries.      IMPORTANT: I should have added a pull-down resistor between Battery_Voltage and the ground. Even though batteries are not connected to the P1, I still saw some voltage because C16 and C17 loaded from analog pins. - 10V Step-Up Voltage Regulator I put a switch there because if I close the switch, 10V can’t supply the MOSFET driver and Arduino. So I can turn on and off the circuit. I made this circuit by following the datasheet's suggested values.      IMPORTANT: I changed the R20 with a 4.7k resistor. Because output voltage was higher than 10V. - Regulated Load Voltage I made this circuit by following the datasheet's suggested values. As you can see, the grounds are separate and connected to another place. This is not a necessary thing. I did it just to see them one by one. - Load Turn ON/OFF & Load Voltage I made this circuit for protection. It will cut the circuit over or under-voltage situations. Also, the output can only be open if Arduino can be turned on. 4. MPPT BLOCK    Pin 11 is a PWM pin and PWM frequency can increase 31kHZ.    IMPORTANT: You don’t have to connect pull-up resistors for all the I2C IC. Just one pull-up is enough for one bus. 5. LCD BLOCK I used a 16x2 LCD and drive it with I2C.      IMPORTANT: I make the LCD contrast setting R42 short-circuit because contrast increased when voltage is close to the GND. Change the places in R42 and R41 instead of each other. Step 6: PCB I designed the PCB using EasyEDA and ordered it from JLCPCB. the EasyEDA is easy to use and if you want to order the PCB, you can directly order it from EasyEDA. I used the default settings for order parameters. I used both sides of the PCB. The board is quite huge. The reason I soldered with solder-station is that I wanted to give myself some space. Also, I wanted to connect Arduino to the board with headers and it took some space. I changed that awful-looking electrolytic capacitor (6th picture) with an SMD capacitor. If you want to use both sides of the circuit board, you shouldn’t put electrolytic caps under it. It can not stay still on the table. Step 7: CODES This is the flowchart for the MPPT algorithm. The algorithm works like this. First, we make sure PWM is between the pre-defined maximum and minimum values. The reason is that MOSFETs act unstable under or above these values. PWM is between 0-255. I defined 25 as the minimum. If PWM gets low, that means the duty cycle will be less and low-side MOSFET will be ON more. In this case, low-side MOSFET acts like a short circuit at some point, and current flow increases as much as that MOSFET can't handle. That burns the MOSFET. For the high-side MOSFET, if PWM is 255 that means the duty cycle will be %100. But in reality, it doesn't work like this. Duty cycle increase like %97-98. Also increases PWM on high-side MOSFET results in the gate voltage being high. For a more reliable circuit, defining upper and lower limits is a good solution. At the beginning of the loop, we make sure PWM is between the limits. After that, we can read the battery voltage, input solar voltage, and power. The batteries are LI-ION so the output voltage shouldn't be higher than the suggested maximum voltage of 4.2V. We need to make sure the output voltage is under this voltage. If it's higher than the max., we control the PWM. If it's already at the minimum, to protect the batteries we close the MOSFETs. If it is not in the minimum value, PWM is decreased and turns back to the beginning of the loop. If the output voltage is under 4.2V, we check the input solar voltage. Because we defined a maximum PWM value and that means we have a maximum duty cycle value. if we think that the output voltage is at the maximum and we also think that we have an upper limit for the duty cycle, we have a minimum voltage limit for the input. Vin * D = Vout Vout/Vin = D if Vout = Vout(max). To find the D(max) value, a Vin = Vin(min) is needed. So if we already have a D(max), that means in this equation, Vmin has to be the minimum value.      So we control the input with that minimum value. If the input is under the minimum, we close the MOSFETs. The other step is to check whether MOSFETs are on or off. If it is off, we make it on and continue. Then we control the power status. Power status means ΔP. So we check the ΔP status that can be below zero, above zero, and equal to zero. There is an additional status for the P = 0. If we update the above table that is in the algorithm section, it will look like the 2nd picture. As additional information, duty cycle and Vref are the inverse ratios. If the duty cycle is increased, Vref is decreased or vice versa. Actually, Vref is not a real voltage value. It is a guess of voltage. In the V-I curve, we use the Vref variable for what voltage we expect in the next step. We can think like this, for example, we have a ball and we throw that ball wherever we want it to go. Then, we walk to the ball. We take the ball and again we throw the ball wherever we want it to go. We can think the ball is Vref and the walking person is the real input voltage. If we throw the ball in the wrong place, we try to find the look to correct way for getting the ball. That means to increase the duty cycle, the input voltage has been decreased, or to decrease the duty cycle, the input voltage has been increased. The duty cycle is directly related to PWM and they are directly proportional. PWM is 0 means duty cycle = %0 and PWM is 255 means, duty cycle = %100. We can adjust the duty cycle by using PWM so we can change Vref with PWM in the table. Numbers are for indicating the status of voltage and power. If both numbers are zero, we do nothing for PWM. But if power is equal to zero and voltage has changed, we need to follow a different algorithm. (3rd picture) As you can see on the graph, blue dots indicate the same power level. At those points, power can stay the same but the voltage could have been changed. That looks like cheating but to define this status, we can define the MPP for the algorithm. So that the algorithm can find out the where voltage is. If the read input voltage is left or right of the predefined maximum power point, PWM will change depending on this information. For finding the MPP point, I took the %70 of the open-circuit voltage. So for 22V, MPP will be around 15V. We have to make a decision before choosing the MPP. As you can see in the graph, MPP drifts right when solar radiation is increase. If we make a decision thinking of high-level solar radiation, for those points MPP point will be found in a more correct way. The same thing is correct for low-level solar radiations. I chose the voltage which I can find a middle point. So that both sides have equal distance. I control this status by using EST_VOLTAGE_STATUS. So if we update the table again it will look like this: (4th picture) After the decision on the PWM value, we assign the power and voltage values as the previous values. So that, when we read the new values, we can compare them with previous values. Then we set the PPWM called predicted PWM. PPWM is found by output and input voltage ratio. If the input voltage is 0, PPWM will be 1. If not, we scale the ratio by 255. 0,995 value is the error correction for calculated PPWM. Also, we have to make sure PPWM is in the minimum and maximum range. This value will be the bottom limit for PWM.      There is an important point. As you can see, we didn't use the CC mode for charging the batteries we just control the maximum battery voltage level. We don't have a current sensor for the batteries and we can't read the current flow through the batteries. Maybe it can be calculated with the input power times efficiency equation but to make the process easy I didn't use it. Batteries are charging only using CV mode.      I will share the whole code with you and you can take references or change it for your purposes. Source: Arduino - Solar MPPT Battery & Phone Charger ### Infinity Mirror Clock using Arduino Ever since my addressable RGB LED strips (WS2812B) came from Aliexpress, I've been fascinated with LED projects. Following up on my success with my Charlieplexed LED clock, I wanted to create something with more Jazz.. While browsing google images, I came across an instructable for an Arduino Infinity Mirror and the brain cells started working in overdrive. Why shouldn't I make an infinity mirror, that's also a clock !! Features: Works like a clock - the colours of the hands are user-programmable over bluetooth Has an IR sensor to sense if someone is coming near the mirror. Switches off the LEDs, so that this can be used as a normal mirror :-) Shows a rainbow effect every 15 minutes (time is user adjustable) Has a touch button to toggle between clock and rainbow effects Switches to night mode between midnight and 7:00 AM - can be changed in the code. Can be programmed over bluetooth - so you do not need to take it off the wall if you need to update the code Step 1: Electronics A Standalone Arduino: http://dushyant.ahuja.ws/2013/10/standalone-arduin... OR Arduino mini pro: http://www.aliexpress.com/item/10Pcs-Lot-Pro-Mini-... RTC Module – DS1302: http://fabtolab.com/DS1302-RTC-module?search=rtc LM2596 Step Down Adjustable Power Supply Module 1.3V-35V: http://cgi.ebay.in/ws/eBayISAPI.dll?ViewItem&item=... 1m 60LEDs/M Addressable RGB LED Strip (WS2812B): http://www.aliexpress.com/item/1M-WS2812-WS2812B-6... HC-05 Bluetooth module: http://www.aliexpress.com/item/RS232-TTL-LC-05-Wir... IR Proximity Sensor: http://www.instructables.com/id/Simple-IR-proximit...4 IR LEDs; 1 IR LED detector: http://www.evelta.com/industrial-control/sensors/5... Touch Pad: http://www.aliexpress.com/item/Touch-Pad-Brick-Sen... 9V – 2A Adapter CP2102 USB-to-TTL (the RST pin on the CP2102 is not for resetting the arduino – you have to solder a wire to the DTR pad on the PCB – which sends a reset signal to program the arduino. This has to be connected to the DTR pin on the Arduino Step 2: The Circuit The circuit is very simple: LED Strip - Connect power to the LM2596 Step Down Adjustable Power Supply Module - ensure you adjust the pot so that the output is 5V; Connect the ground to the common ground; Connect data to pin D5 of the Arduino Touch Sensor - data to pin D2 of Arduino RTC Module - SDA and SCL to the A4 and A5 of the Arduino respectively Bluetooth Module - Connect RX to Arduino's TX and TX to Arduino's RX. You will have to break-out pin 32 on the module to the DTR pin on the Arduino (This allows you to program the Arduino over bluetooth) IR Proximity Sensor - create the sensor as per this instructable: http://www.instructables.com/id/Simple-IR-proximit... - connect the photo-diode to A1 (A0 on the instructable schematic) and the IR LEDs to D13 (D2 on the instructable schematic) Connect the Power 9V 2A Power supply to the input of the 7805 and the LM2596 To setup the bluetooth programming circuit, please follow this link: http://makezine.com/projects/diy-arduino-bluetooth... Infinity Mirror.sch372 KB Step 3: The Code This clock uses the following libraries (and all thanks to the authors of these libraries): RTCLib Arduino Library: https://github.com/adafruit/RTClib FastLED Arduino Library v2.1: http://fastled.io/ https://github.com/FastLED/FastLED/tree/FastLED2.1 SerialCommand Arduino Library: https://github.com/scogswell/ArduinoSerialCommand... TimerOne Arduino Library: https://github.com/scogswell/ArduinoSerialCommand... The latest version of the code can be downloaded from the project github: https://github.com/dushyantahuja/Smart-Infinity-Mi... #include #include "RTClib.h" #include "FastLED.h" #include #include #include "EEPROM.h" #include "TimerOne.h" #define NUM_LEDS 60 #define DATA_PIN 5 #define UPDATES_PER_SECOND 100 #define SWITCHPIN 2 // Variables for IR Proximity int IRpin = A1; // IR photodiode on analog pin A1 int IRemitter = 13; // IR emitter LED on digital pin 4 // CRGBPalette16 currentPalette; TBlendType currentBlending; CRGB leds[NUM_LEDS],minutes,hours,seconds,l,bg,lines; RTC_DS1307 rtc; SerialCommand sCmd; boolean missed=0, ledState = 1, lastsec=1, multieffects = 0; byte lastsecond, rain; int light_low, light_high; DateTime now; void(* resetFunc) (void) = 0; void setup() { digitalWrite(IRemitter,LOW); // turning the IR LEDs off - as a precaution - they don't have current limiting resistors Wire.begin(); rtc.begin(); Serial.begin(115200); FastLED.addLeds(leds, NUM_LEDS); currentPalette = RainbowStripeColors_p; currentBlending = NOBLEND; // ******** Setup the default values for parameters (if not set before) if (EEPROM.read(99) != 1){ // Check if colours have been set or not EEPROM.write(0,255); // Seconds Colour - R-G-B - White EEPROM.write(1,255); EEPROM.write(2,255); EEPROM.write(3,255); // Minutes Colour - R-G-B - Red EEPROM.write(4,0); EEPROM.write(5,0); EEPROM.write(6,0); // Hours Colour - R-G-B - Green EEPROM.write(7,255); EEPROM.write(8,0); EEPROM.write(9,0); // BG Colour - R-G-B - Black EEPROM.write(10,0); EEPROM.write(11,0); EEPROM.write(12, 0); // Light sensitivity - low EEPROM.write(13, 55); // Light sensitivity - high EEPROM.write(14, 15); // Minutes for each rainbow EEPROM.write(99,1); } // Else read the parameters from the EEPROM else { seconds.r = EEPROM.read(0); seconds.g = EEPROM.read(1); seconds.b = EEPROM.read(2); minutes.r = EEPROM.read(3); minutes.g = EEPROM.read(4); minutes.b = EEPROM.read(5); hours.r = EEPROM.read(6); hours.g = EEPROM.read(7); hours.b = EEPROM.read(8); bg.r = EEPROM.read(9); bg.g = EEPROM.read(10); bg.b = EEPROM.read(11); light_low = EEPROM.read(12); light_high = EEPROM.read(13); rain = EEPROM.read(14); } // ********** Setup the serial commands sCmd.addCommand("MULTI", set_multi); sCmd.addCommand("STAT", clockstatus); sCmd.addCommand("SETRAIN", set_rainbow); sCmd.addCommand("HOUR", set_hour); sCmd.addCommand("MIN", set_minute); sCmd.addCommand("SEC", set_second); sCmd.addCommand("BG", set_bg); sCmd.addCommand("LIGHT", set_light); sCmd.addCommand("TIME", set_time); sCmd.addCommand("MISSED", missedCall); sCmd.addCommand("MISSEDOFF", missedOff); sCmd.addCommand("RAINBOW", effects); sCmd.addCommand("MISSED", missedCall); sCmd.addCommand("MISSEDOFF", missedOff); sCmd.addDefaultHandler(effects); // ********** Set all LEDs to background colour for (int i = 0; i < NUM_LEDS; i++) { leds[i] = bg; } pinMode(IRemitter,OUTPUT); // IR emitter LED on digital pin 2 digitalWrite(IRemitter,LOW);// setup IR LED as off clockstatus(); attachInterrupt(1, set_multi, FALLING); Timer1.initialize(); Timer1.attachInterrupt(state, 500000); } void loop() { sCmd.readSerial(); if(readIR(10) > 50){ // Switch off LEDs if someone is near the mirror - so that it can be used as a mirror. Switch off LEDs between 12:00 and 6:00 to save energy and cool down the LEDs and power supplies for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB::Black; } FastLED.show(); ledState = 1; //FastLED.delay(200); } else { for (int i = 0; i < NUM_LEDS; i++) { leds[i] = bg; } if(multieffects){ // Check if the button for multi-effects has been pressed uint8_t secondHand; secondHand = now.second(); if( secondHand == 0) { currentPalette = RainbowColors_p; currentBlending = BLEND; } if( secondHand == 30) { currentPalette = RainbowStripeColors_p; currentBlending = BLEND; } static uint8_t startIndex = 0; startIndex = startIndex + 1; FillLEDsFromPaletteColors( startIndex); FastLED.show(); } else if(ledState){ // Main clock code // Setting brightness to light_high int x = light_high; // analogRead(IRpin); now = rtc.now(); if(( now.minute() % rain == 0 && now.second() == 0)){ effects(); } for(byte i=0; i<=now.minute();i++){ //Serial.println(minutes); leds[i] = minutes; } //Serial.println(now.hour(),DEC); for(byte i = 0; i<60; i+=5){ leds[i]=CRGB::White; } for(byte i=(now.hour()%12)*5; i<=((now.hour())%12)*5+(now.minute()/12);i++){ leds[i] = hours; } if(now.hour() < 7) LEDS.setBrightness(constrain(light_low,0,100)); // Set brightness to light_low during night - cools down LEDs and power supplies. else LEDS.setBrightness(constrain(light_high,10,255)); if(lastsec){ l=leds[now.second()]; leds[now.second()] = seconds; lastsecond = now.second(); lastsec = 0; // Serial.println("ON"); } else { leds[lastsecond] = l; if(missed) all_off(); // Serial.println("OFF"); lastsec = 1; } FastLED.show(); ledState = 0; } //delay(250); if(multieffects) FastLED.delay(1000 / UPDATES_PER_SECOND); } } void FillLEDsFromPaletteColors( uint8_t colorIndex) { uint8_t brightness = 255; for( int i = 0; i < NUM_LEDS; i++) { leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending); colorIndex += 3; } } void set_multi(){ static unsigned long last_interrupt_time = 0; unsigned long interrupt_time = millis(); if (interrupt_time - last_interrupt_time > 200) { if(multieffects){ for (int i = 0; i < NUM_LEDS; i++) { leds[i] = bg; } } multieffects = !multieffects; Serial.println(multieffects); } last_interrupt_time = interrupt_time; } void set_rainbow(){ rain = atoi(sCmd.next()); EEPROM.write(14,rain); Serial.println("RAINBOW TIME SET"); } void clockstatus(){ Serial.println("Status: "); Serial.print("BG: "); Serial.print(bg.r); Serial.print(" "); Serial.print(bg.g); Serial.print(" "); Serial.println(bg.b); Serial.print("SEC: "); Serial.print(seconds.r); Serial.print(" "); Serial.print(seconds.g); Serial.print(" "); Serial.println(seconds.b); Serial.print("MINUTE: "); Serial.print(minutes.r); Serial.print(" "); Serial.print(minutes.g); Serial.print(" "); Serial.println(minutes.b); Serial.print("HOUR: "); Serial.print(hours.r); Serial.print(" "); Serial.print(hours.g); Serial.print(" "); Serial.println(hours.b); Serial.print("Ambient Light: "); Serial.println(analogRead(IRpin)); Serial.print("Light set - High:"); Serial.println(light_high,DEC); Serial.print("Light set - Low:"); Serial.println(light_low,DEC); Serial.print("Date: "); DateTime now = rtc.now(); // DateTime(2014,5,2,22,30,0); Serial.print(now.day(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.println(now.year(), DEC); Serial.print("Time: "); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); Serial.print("Distance: "); Serial.println(readIR(5),DEC); } void state(){ ledState = 1; } const int colorWheelAngle = 255 / NUM_LEDS; void effects(){ Serial.println("RAINBOW"); for (int j=0; j<3; j++){ for (int i = 0; i < 60; i++) { FillLEDsFromPaletteColors(i); FastLED.show(); delay(30); } } lastsec = 1; } void missedCall() { missed = 1; } void missedOff() { missed = 0; } void all_off(){ for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB::Black; } } void set_hour(){ hours.r = atoi(sCmd.next()); hours.g = atoi(sCmd.next()); hours.b = atoi(sCmd.next()); EEPROM.write(6,hours.r); EEPROM.write(7,hours.g); EEPROM.write(8,hours.b); Serial.println("HOUR COLOUR SET"); } void set_minute(){ minutes.r = atoi(sCmd.next()); minutes.g = atoi(sCmd.next()); minutes.b = atoi(sCmd.next()); EEPROM.write(3,minutes.r); EEPROM.write(4,minutes.g); EEPROM.write(5,minutes.b); Serial.println("MINUTE COLOUR SET"); } void set_second(){ seconds.r = atoi(sCmd.next()); seconds.g = atoi(sCmd.next()); seconds.b = atoi(sCmd.next()); EEPROM.write(0,seconds.r); EEPROM.write(1,seconds.g); EEPROM.write(2,seconds.b); Serial.println("SECOND COLOUR SET"); } void set_bg(){ bg.r = atoi(sCmd.next()); bg.g = atoi(sCmd.next()); bg.b = atoi(sCmd.next()); EEPROM.write(9,bg.r); EEPROM.write(10,bg.g); EEPROM.write(11,bg.b); Serial.println("BG COLOUR SET"); for (int i = 0; i < NUM_LEDS; i++) { leds[i] = bg; } } void set_light(){ light_low = atoi(sCmd.next()); light_high = atoi(sCmd.next()); EEPROM.write(12,light_low); EEPROM.write(13,light_high); Serial.println("LIGHT SET"); } void set_time(){ String set_date, set_time; set_date = (String)sCmd.next() + ' ' + (String)sCmd.next() + ' ' + (String)sCmd.next(); set_time = (String)sCmd.next(); rtc.adjust(DateTime(set_date.c_str(),set_time.c_str())); } int readIR(int times){ int ambientIR; // variable to store the IR coming from the ambient int obstacleIR; // variable to store the IR coming from the object int value[10]; // variable to store the IR values int distance; // variable that will tell if there is an obstacle or not for(int x=0;x upload should do the trick if, not go to tools> serial port and try a different channel. YouTube Videos Step 2: CIRC-02 8 LED Fun On the LEDs remember that the longer leg is positive. The legs on the resistors bend very easily so it might help to to use a pencil to poke a hole in the paper then sticking in the resistors. This uses up most of the digital pins out. The code is much longer then the first lab. It starts by designating the pins. then it states the different loops, one loop starts each light one at a time and the other has a loop inside it , they both do the same thing but with a loop there is much less code. Basic instructions are at '''CIRC-02''' - Multiple LEDs - (8 LED Fun) copy the code from http://ardx.org/CODE02 Step 3: CIRC-03 Spin Motor Spin On my circuit i did not need the optional capacitor. I attached a piece of blue tape to the motor so that I could see that it spun. The legs of the transistor are not labeled but if you are using the breadboard layout just place it in the same direction as its drawn. The codes say to use pin 9 then goes to say if pin 9 is + or - 5 volts. Below it uses speed and time variables to control the motor. Basic instructions are at '''CIRC-03''' - Spin Motor Spin - (Transistor & Motor) copy the code from http://ardx.org/CODE03 Step 4: CIRC-04 A Single Servo This project might be easier then the first. Most the electronics for the servo motor are inside it and it is very quick to plug into the bread board. When the motor is running it does make a funny clicking sound but that is from the code. The code says to rotate 1 degree then wait 15 milliseconds before turning again. Basic instructions are at '''CIRC-04''' - A Single Servo - (Servos) copy the code from http://ardx.org/CODE04 Step 5: CIRC-05 8 more LEDs This is the hardest circuit to assemble so far, if you wanted to make an LED cube it would probably be in this method of controlling the LEDs. The Arduino and the shit registers work together. The shift register act as extra pins on the arduino and do what the arduino tells it to. the shift register uses the serial communication link to talk with the arduino. Basic instructions are at '''CIRC-05''' - 8 More LEDs - (74HC595 Shift Register) copy the code from http://ardx.org/CODE05 Major Components in ProjectArduino   For more detail: Experimenters Guide for Arduino as Performed at OIT ### THE SOCIAL DISTANCING BADGE As the world continues in the fight against Covid19, makers, developers, Engineers, and open source communities are joining in the fight by creating solutions ranging from open source ventilators to treat people who are sick, to 3D printed face masks to prevent the sickness. One of such solutions, which falls into the latter category, is the ‘Social Distancing Badge’ by SensorDots. The badge is a solution created to help people effectively implement lifestyle changes like, Social Distancing, that has been ushered in by the virus. The device simply helps people keep their distance from other people or objects, by letting them know the distance between them and the object in front of them. The Wearable device uses an eye-safe laser-based LiDAR Sensor, through which it obtains distance measurements with millimeter precision. The obtained distance is displayed on the device’s display to let the person approaching or the user know if they are at a safe enough distance from each other. While the prototype featured a protoboard implementation with a lanyard so the device is hanged around the neck, SensorDot is taking the device through a redesign phase for a more refined product. The new design, whose PCB has already been sent for manufacturing, is a lightweight low power design that could be pinned to a bag, backpack, shirt or even be used as a belt buckle or hair clip. It could even be used as a handy standalone distance measurement tool that would fit in a wallet with very stretched pockets. While the badge comes ready to use as a distance measurement tool, it also comes packed with the following features: A customizable Arduino based firmware (328PB micro-controller).Eye-safe VL53L1 LiDAR sensor.Micro USB serial and programming interface, as well as recharging.Hackable GPIO interface.100mAh rechargeable button cell lithium battery.Optional lanyard or safety pin solder attachment points (badge includes solderable safety pin to clip to a shirt or jacket as well as 3.2mm holes on the top corners to attach a lanyard).57mm x 38mm x 10mm badge size (thickness includes battery).Low power and easy to read 4 digit LCD display.Displays up to 4 meters on the LCDStatus/indicator LED and charging LED.Mode switching button. Read more: THE SOCIAL DISTANCING BADGE ### Calming Book Box (Arduino) In moments of hypo- or hyperarousal, when the thinking brain is offline, this Arduino-based Calming Book Box will prompt self-regulation with a wave of the hand. Inspired by Tinkercad's Crystal Ball project and Instructable user cah65's Arduino Powered Fortune Teller, a liquid crystal display reveals a series of nervous systems regulation activities each time the photoresistor reads a decrease in light. This beginner-intermediate level project is highly customizable in terms of its purpose, code, and visual end product. Supplies I am notorious for not practicing this myself, but truly-- gather your supplies first and reduce your frustration. For my version, I needed: Circuitry Arduino Uno Rev3 USB-A to USB-B Cable computer breadboard jumper wires in assorted lengths & colors 220Ω resistor 330Ω resistor 5 kΩ resistor photoresistor crystal LED display Software Arduino Web Editor Tinkercad Tools safety glasses drill with 1/4" bit or device to poke holes utility knife or scroll saw engineer square or ruler Art Supplies (can be modified/personalized) book box (alternatively, cardboard or cigar box) pencil Mod Podge glue foam paintbrush dried flowers plastic bag Step 1: Develop Theme Before you dive in, spend some time sketching out ideas about how to make this project beneficial to your life. Will it be self- or co-regulation strategies for a classroom? For your family? Or personal to you? Step 2: Set Up the Circuit If you are new to Arduino, before attempting this custom project, I highly recommend practicing with Tinkercad's Project 11: Crystal Ball while simultaneously viewing @Mr.DudaSTEM's video tutorial. If you are ready to dive into this project, this is the customized setup for the Calming Book Box. On Arduino, attach red wire to 5V and black to GRD. On breadboard, attach red to + and black to -. Position photoresistor in row F. Add new jumper wire on row F and connect to 5V rail. Place 5 kΩ resistor on row I and connect to - (GRD) rail. Add blue jumper wire from A0 input pin on Arduino to row H near photoresistor. To set up the contrast of the crystal LCD screen, add a 330Ω resistor in from row E to row G. Connect to GRD rail with black wire from row J to - rail. Add red jumper wire from row J to + (5V) rail. Wire the resistor to the V0 pin on the crystal LCD with a blue wire from row D. Power the LCD There are 16 metal pins on the crystal LCD. Use 3 black wires and ground the display at pins 1, 5, and 16. To input power to the LCD screen, connect red wire from pin 2 to the 5V rail. At pin 15, connect another red wire from row E to F. Then, power pin 15 by adding a 220Ω resistor from row J to the 5V rail. Set up data communication Connect LCD pin 11 with a red wire to Arduino digital pin 5 Connect LCD pin 12 with a green wire to digital pin 4 Connect LCD pin 13 with a black wire to digital pin 3 Connect LCD pin 14 with a blue wire to digital pin 2 Connect LCD pin 4 with an orange wire to digital pin 9 Connect LCD pin 6 with a white wire to digital pin 8 Step 3: Code Your Sketch Code Notes This code is easily customizable to myriad purposes, whether for a classroom, family, personal use, or other randomized response systems. To adjust the total number of options, go to reply = random(32); //pick a number from 0 to 32 and change the number accordingly To change a response, case 4: lcd.print("glitter jar"); find the case reply you want to change and alter the content inside the quotation marks on that line (max 16 characters) Link to Arduino Web Create Sketch https://create.arduino.cc/editor/mbbluma283/d477eaf1-e3c9-49be-a2db-f77bba6b082c/preview Copy/Paste of Code #include LiquidCrystal lcd(9, 8, 5, 4, 3, 2); int reply; int lightCal; int lightVal; void setup() { pinMode(A0, INPUT); lightCal = analogRead(A0); Serial.begin(9600); lcd.begin(16, 2); lcd.print("You matter."); delay(3000); // Wait for 3000 millisecond(s) lcd.setCursor(0, 1); lcd.print("You r important"); delay(3000); // Wait for 3000 millisecond(s) } void loop() { lightVal = analogRead(A0); if (lightVal < lightCal - 50) { reply = random(32); //pick a number from 0 to 32 lcd.clear(); lcd.setCursor(0, 0); lcd.print("Coping idea:"); lcd.setCursor(0, 1 ); switch (reply) { case 0: lcd.print("tree pose"); delay(7000); // Wait for 7 second(s) break; case 1: lcd.print("ice pack"); delay(7000); // Wait for 7 second(s) break; case 2: lcd.print("5-4-3-2-1 senses"); delay(7000); // Wait for 7 second(s) break; case 3: lcd.print("4-7-8 breath"); delay(7000); // Wait for 7 second(s) break; case 4: lcd.print("glitter jar"); delay(7000); // Wait for 7 second(s) break; case 5: lcd.print("rip paper"); delay(7000); // Wait for 7 second(s) break; case 6: lcd.print("dance"); delay(7000); // Wait for 7 second(s) break; case 7: lcd.print("playdoh or clay"); delay(7000); // Wait for 7 second(s) break; case 8: lcd.print("take a lap"); delay(7000); // Wait for 7 second(s) break; case 9: lcd.print("get a tight hug"); delay(7000); // Wait for 7 second(s) break; case 10: lcd.print("hum or sing"); delay(7000); // Wait for 7 second(s) break; case 11: lcd.print("look at nature"); delay(7000); // Wait for 7 second(s) break; case 12: lcd.print("learn something"); delay(7000); // Wait for 7 second(s) break; case 13: lcd.print("remember details"); delay(7000); // Wait for 7 second(s) break; case 14: lcd.print("lift weight"); delay(7000); // Wait for 7 second(s) break; case 15: lcd.print("wall sit"); delay(7000); // Wait for 7 second(s) break; case 16: lcd.print("talk to someone"); delay(7000); // Wait for 7 second(s) break; case 17: lcd.print("jumping jacks"); delay(7000); // Wait for 7 second(s) break; case 18: lcd.print("list the why"); delay(7000); // Wait for 7 second(s) break; case 19: lcd.print("snuggle pets"); delay(7000); // Wait for 7 second(s) break; case 20: lcd.print("clean"); delay(7000); // Wait for 7 second(s) break; case 21: lcd.print("sensory checkin"); delay(7000); // Wait for 7 second(s) break; case 22: lcd.print("check HALT needs"); delay(7000); // Wait for 7 second(s) break; case 23: lcd.print("tapping"); delay(7000); // Wait for 7 second(s) break; case 24: lcd.print("very sour candy"); delay(7000); // Wait for 7 second(s) break; case 25: lcd.print("read and cuddle"); delay(7000); // Wait for 7 second(s) break; case 26: lcd.print("take a bath"); delay(7000); // Wait for 7 second(s) break; case 27: lcd.print("make something"); delay(7000); // Wait for 7 second(s) break; case 28: lcd.print("treat yourself"); delay(7000); // Wait for 7 second(s) break; case 29: lcd.print("balloon breathe"); delay(7000); // Wait for 7 second(s) break; case 30: lcd.print("write about it"); delay(7000); // Wait for 7 second(s) break; case 31: lcd.print("Zenimal meditate"); delay(7000); // Wait for 7 second(s) break; case 32: lcd.print("garden"); delay(7000); // Wait for 7 second(s) break; } //end of switch } //end of nested if() else { lcd.clear(); lcd.begin(16, 2); lcd.print("How you feel"); delay(1000); // Wait for 1 second(s) lcd.setCursor(0, 1); lcd.print("is so important"); delay(3000); // Wait for 3 second(s) } //end of else } //end of loop() Upload .ino from Arduino Web Create to Arduino microcontroller. Attachments Calm_Book_Box.ino Download Step 4: Cut Shape to Insert LCD Display I positioned the crystal LCD screen component on my book box roughly where I wanted it. I measured its size and used an engineer square to place it more precisely. Then, I outlined the space I would need to cut away to show the LCD display. Using a small drill, I made a hole in the corner of the rectangle I needed to cut out. At this point, you can cut out your shape using whatever cutting tools you have available. I ended up using a scroll saw for an easy, precise cut. I also had some metal rasps handy for quickly shaping to a neat rectangular shape. An Exacto knife, sandpaper, and patience would yield similar results. Step 5: Design Internal Space Because I chose not to solder, I needed to find a way to bolster my breadboard off the floor of the book box without bumping too high into the cover. It was also crucial that the equipment did not slide around. I used a combination of some plastic pencil cases and spare packing foam to position my Arduino and components. Alternatively, you could enclose the components more discretely and use the second part of the book box to store self-regulation supplies like a lavender eye pillow, balloons to blow up, aromatherapy mist, etc. Step 6: Drill Hole for Photoresistor Once all internal pieces were positioned, the photoresistor was ready to be revealed. I used a marker on the underside of the book cover to indicate where the photoresistor was touching, and drilled a hole large enough for the sensor to poke through. Source: Calming Book Box (Arduino) ### ZAPpelin, or how to train your blimp with an Arduino and IR remote Is it flying seal? A flapping alien? No it's a ZAPpelin, an Arduino controlled indoor blimp, setup to learn in the signals from an IR remote to command it. This project came to life at the third Arduino Jam Februari 15th to17th 2013, at Timelab, Ghent, Belgium. Our team consisted of: -charles32 -mgossye -myself (masynmachien) The main challenges we set ourselves: - Keeping the weight down. The Zappelin should be reasonably small to be used in a living room. - Keeping costs down by using an ordinary "TV style" IR remote most of us have lying around at home. (the high inertia of a blimp made this possible). - Using the advantage of an Arduino over standard modelling RC equipment to use an alternative propulsion concept. Here's a video of the ZAPpelin in action: If you like this Ible, please give it your vote. Thanks! Step 1: Parts and materials: For a DIY Arduino board: • 28-pin DIP IC Socket • 16MHz crystal • momentary push-button (optional) • 10 k0hm resistor • 2 x 22pF capacitors • ATMega168 or 328 microcontroller chip • breadboard style perf board • a row of 6 female headers • some thin wire IR sensor: • we used a PNA4602 type (as the ones Adafruit) Hardware to program: •USB to UART converter •Arduino board (used as ISP for changing fuse bits) Remote control Any "TV style" IR remote control. We used an Apple one, but other worked too. Software: •Arduino 1.0 (or later) •avrdude RC gear: • Two ultra micro servo under 2.5g (a regular type, not linear ones). We used a so called HK-5320 1.7 g servo, which actually weighs 1.9g with wires and connector. It turns out these have alimited mechanical range of about 100°. The slightly heavier (actually 0.5g heavier). HK-282A does have a 180° mechanical range, and would be my choice for a new build. I was not yet able to determine the mechancal range of the intermediate (in weight) HK-5330. • Two extension leads with connectors compatible with the servos and one for the battery (the Hobby King servo connectors are compatible with the common “minium battery connectors”) • A 1s LiPo battery around 2.5 to 4g.  Obviously you will need a suitable charger (not shown). Balloon and helium: • You can have your ballons filledat the balloon shop for a couple of euro or bring home a helium bottle (rented or bought, around 50 EUR for a canister + 50 balloons). • The lift capacity of the balloon needed depends on the gear used. It should be about 20 to 25 g. Our first attempt was based on my favourite Zeppelin NT Mylar balloon carrying a good 17g. The Zeppelin NT blimp balloon can be ordered from Deutschen Zeppelin-Reederei GmbH (you can find it by clicking klick on "Produktubersicht", choosing "Accessoires" and scrolling down). • To add an extra control function we needed more lift and added a latex balloon. Depending on temperature and moisture a latex balloon will last longer or shorter. The spare buoyancy needed for this project lasted roughly a day. Remark: with an Arduino pro mini 3.3V we would have saved about 5 g and this would not have been needed. For the fins: • Some EPP sheet (Expanded PolyPropylene), 3 mm thick. We used a triangle with two 22 cm long to start with. • Three times about 5cm of 0.8 to 1mm diameter carbon rod. • a piece of extruded polystyrene (Depron or similar), 3mm thick, 35cm long, 5cm wide. For assembly and trimming: • Some sewing thread. • Superglue. • Scotch tape. • A couple of grams of putty, to be used as trim ballast. Tools: • A precision soldering iron and solder • A scale accurate to 0.1g. • Scissors.   Step 2: Making a lightend Arduino board + changing fuse bit We built a simplified perfboard Arduino. Something like this, but without voltage regulation, and a minimum of connectors. The row of headers is for power and uploading with an FTDI USB to serial cable. The IR sensor is connected to Pin2 (input), Ground and VCC. An Arduino pro mini 3.3V would be a ready made solution. Instead we built a minimal Arduino board and made it work on one LiPo cell (3.7V). The standard brownout voltage (low battery switch off) was below that value, but takes in account such a large margin that it didn’t work without changing it to a lower value. We set it to 1.8V using avrdude. To set the brownout voltage to 1v8, we have to reprogram the extended fuse bit. First, make sure your arduino-board is functioning and the chip has the bootloader on it. Then upload the arduino as ISP sketch on another arduino board (in this example, Arduino Uno)   For more detail: ZAPpelin, or how to train your blimp with an Arduino and IR remote ### Digital Zoetrope using Arduino A zoetrope is a mechanical device that animates a series of pictures by spinning them fast enough that the images appear to merge together and move, My digital zoetrope works on a similar principal, by flashing the LEDs while they are spinning it is possible to display text, patterns and possible even simple animations. My design uses an Arduino Pro mini powered by a system of brushes and a magnet and hall effect sensor for position detection. Step 1: Materials I used an Arduino Pro Mini from Sparkfun as the projects controller, the motor is just a small hobby motor which can be bought cheaply or salvaged for free. You'll need 7 LEDs and resistors for them, use resistor values slightly lower than those specified for your LED type, the LEDs will be switching on and off very quickly so they're not at as much risk of being damaged by the current, The resistors I used where too high so the LEDs arn't as bright as they normally would be when it is spinning. The Hall Effect sensor was bought several years ago so I'm missing its actual parts number but it has an analog output on its middle pin that gives a reading that is proportional to the magnetic field strength on the sensor. I also used a small neodymium magnet to trigger the sensor. I used two tins to create the base of the zoetrope, the square tin just acts like a case but the round tin lid on top must be conductive as it will be the Arduinos negative supply.. Step 2: Electronic circuitry The 7 LEDs are soldered to a piece of stripboard, with their positive leads connected together each with an individual resistor, I connected the negative LED leads to pins 3 to 9 on the arduino pro mini, see the 2nd picture to see how I wired it up in more detail. I power the circuit through 4 AA batteries which give an output of 6v theoretically but in reality it is slightly less, although it is sufficient to power the Arduino and motor. A battery clip is connected to the motor via a switch, the negative lead is soldered to the lid of the tin for the brush to connect the Arduino to ground. The positive lead comes from the switch to one input of the motor and I soldered a small piece of wire from the positive motor input to the motors metal housing. Step 3: Arduino power brushes To power the Arduino while it is spinning there are two brushes, The barrell of the motor is connected to the positive lead to the battery, I used a piece of copper wire to act as a brush to make a contact while the device is spinning, thew other end connects to the stripboard which is connected to the positive LED legs and the Arduino VCC pin.. I used an elastic band wrapped around the Arduino body and hooked onto the brush to hold the brush to the motor casing tight. In the last step I showed how the negative lead from the battery connector is connected to the lid of the tin. To make the negative brush I used a dremel to cut the middle out of a circular tin lid, after using a multimeter to check its conductivity, I then soldered the circular tin lid to the top of the square tin lid and used a piece of bent paperclip soldered to a GND pin and bent into shape so the curved end fits in the rim made by the tin lid. Step 4: Construction The construction of the device is pretty straight forward, I used a dremel to cut a hole through the square tins lid which I hot glued the motor into, make sure the glue goes all the way around and be careful that the metal of the tin lid doesn't touch the motor casing or it will short circuit.The magnet is strong enough To attach the stipbooard to the pulley on the motor I used a Mechano bracket and superglue, to prevent as much vibration as possible I bent a piece of wire to a right angle, I then used this piece of wire to find the centre of gravitiy of the stripboard by hanging the board through the holes until it balanced. I then put this centre of balance over the motors axle as close as i could by eye.   For more detail: Digital Zoetrope using Arduino ### GENE-WHU6: COMPACT BOARD BUILT FOR FULL-SIZED APPLICATIONS 3.5″ SubCompact Board with 8th Generation Intel® Core™ i7/i5/i3/Celeron® Processor SoC AAEON, an industry leader in compact embedded solutions, introduces the GENE-WHU6 subcompact board, powered by 8th Generation Intel® Core™ processors. Despite its compact size, the board offers full-sized functionality, able to deliver the flexibility of a desktop system in a compact form factor. The GENE-WHU6 is built to provide performance beyond its size, powered by 8th Generation Intel® Core™ i3/i5/i7 and Celeron® processors (formerly Whiskey Lake) with greater processor performance than the previous generation. The GENE-WHU6 combines this processing power with up to 32GB of DDR4 SODIMM RAM for even greater computing performance. Designed for full-sized functionality, the GENE-WHU6 provides a rich compliment of I/O features, including four USB 3.2 Gen 2 ports, two Gigabit Ethernet ports, and up to two COM ports supporting RS-232/422/485. The GENE-WHU6 also offers flexibility with display ports, featuring HDMI 2.0, VGA and LVDS. Users can also make use of the expandability of the GENE-WHU6 with a full-sized mPCIe slot, and two M.2 slots (one 2280 B Key and one 2230 E Key). The GENE-WHU6 supports AI accelerator modules, such as AAEON’s Kneron® KL520 NPU modules or the AI Core X family featuring Intel® Movidius® Myriad™ X. The GENE-WHU6 is built to power embedded applications wherever it’s deployed. Designed for tough conditions, the GENE-WHU6 features wide voltage input (9-36V) as well as a wide operating temperature range (0°C to 60°C). Combined with its compact 3.5” form factor, the GENE-WHU6 can be deployed just about anywhere to power applications such as Smart Manufacturing and Intelligent Safety and Security. The GENE-WHU6 allows users the ability to deploy a compact solution that retains the functionality of larger machines,” said Menah Lin, Product Manager with AAEON’s Embedded Computing Division. “With greater flexibility and functionality than what other form factors support, the GENE-WHU6 delivers the power your embedded project requires. Read more: GENE-WHU6: COMPACT BOARD BUILT FOR FULL-SIZED APPLICATIONS ### Ambient light includes IR sensor for mobiles proximity detection Description MAX44000 combines a wide-dynamic range ambient light sensor with an integrated infrared proximity sensor, making it a perfect solution for touch-screen portable devices. MAX44000 consumes as little as 11µA (time averaged) in ambient light sensing plus proximity sensing, including external IR LED current. The on-chip ambient light sensor is capable of wide dynamic range 0.03 lux to 65,535 lux measurements. An on-chip IR proximity detector is matched with an integrated IR LED driver. All readings are available on an I²C communication bus. A programmable interrupt pin minimizes the need to poll the device for data, freeing up microcontroller resources, reducing system software overhead, and ultimately, reducing power consumption. MAX44000 is designed to drive an external IR LED and can operate from a VDD of 1.7V to 3.6V. It consumes just 5µA operating current when only the ambient light sensor is enabled and 7µA when the proximity receiver and driver are enabled. Key Features Tiny, 2mm x 2mm x 0.6mm UTDFN-Opto Package VDD = 1.7V to 3.6V Low-Power Operation 5µA in Ambient Mode 7µA in Ambient Plus Proximity Mode 70µA in Ambient Plus Proximity Mode, Including 100mA LED Current Excellent Light-Source Matching Programmable Green and IR Channel Gains Integrated Single-Pulse IR LED Driver 10mA to 110mA Programmable Range Internal Ambient Cancellation -40°C to +105°C Temperature Range Applications/Uses Accessories Industrial Sensors Presence Detection Smartphones Maxim has introduced a digital ambient light sensor that allows for incandescent and fluorescent illumination, and it senses proximity using infra-red. Called MAX44000 and made on a BiCMOS process, the 2x2x0.6mm IC includes three optical sensors and two ADCs. Two of the photodiodes and an optical filter are used together to mimic the optical response of the human eye in a variety of spectral environments with a 0.03 to 65,535 lux dynamic range. There are practical difficul¬ties in trying to reproduce the ideal photopic curve in a small cost-efficient package,” said Maxim. “The IC instead uses two different types of photodiodes, a green and an infrared, each of which is amplified and subtracted on-chip with suitable gain coefficients so that the most extreme light sources – fluo¬rescent and incandescent – are well matched to a com¬mercial luminance lux meter.” Separate user-programmable green and IR chan¬nel gain trim registers allow the sensor to be used under dark or coloured glass. Proximity detection uses the third photodiode, which is also infra-red, and an IR LED pulsed by the chip. Pulsing cuts power consumption and allows the circuit to reject ambient illumination. “When a smartphone is brought up to a user’s face, the touch screen must be shut off to prevent inadvertent touches that may disrupt the call,” said the firm. “Thus a proximity sensor is crucial. Once a sensed signal is received, it is run through a front-end circuit to reject ambient infra-red and sent to an ADC.”   For more read: Ambient light includes IR sensor for mobiles proximity detection ### FTDI integrates USB 2.0 interface into UART cables Operating at USB Hi-Speed 480Mbps rate, this fast single channel bridge chip features either a flexible serial interface or parallel FIFO interface, with data transfer speeds up to 40Mbytes/s. Using a serial EEPROM interface, this device can be configured for a wide variety of asynchronous and synchronous serial standards, such as JTAG, SPI, I2C and UART as well as synchronous and asynchronous parallel FIFO interfaces. In addition, this device features the new synchronous, half-duplex FT1248 bus, which allows an engineer to trade off bandwidth for pin count using 1, 2, 4, or 8 data lines at up to 30Mbytes/s. The I/O structure is 3.3V with built-in tolerance for 5V, allowing the designer maximum flexibility when interfacing with FPGAs.  On-board voltage regulation provides 3.3V and 1.8V supplies from a 5V source, as well as a power-on-reset function. FTDI provides royalty-free virtual com port and D2XX drivers for Microsoft Windows (XP – Windows7), Apple Mac OSX, and Linux. This 48 pin device is available in either LQFP or QFN packaging, and is ROHS compliant. key hardware fatures Single channel USB to serial / parallel ports with a variety of configurations. Entire USB protocol handled on the chip. No USB specific firmware programming required. USB 2.0 Hi-Speed (480Mbits/Second) and Full Speed (12Mbits/Second) compatible. Multi-Protocol Synchronous Serial Engine (MPSSE) to simplify synchronous serial protocol (USB to JTAG, I2C, SPI or bit-bang) design. UART transfer data rate up to 12Mbaud. (RS232 Data Rate limited by external level shifter). USB to asynchronous 245 FIFO mode for transfer data rate up to 8 MByte/Sec. USB to synchronous 245 parallel FIFO mode for transfers up to 40 Mbytes/Sec Supports a half duplex FT1248 interface with a configurable width, bi-directional data bus (1, 2, 4 or 8 bits wide). CPU-style FIFO interface mode simplifies CPU interface design. Future Technology Devices International (FTDI) has added two more cables to its USB to digital level serial interface product range. The devices which interface USB 2.0 with digital level UART cables incorporate the firm’s FT232H Hi-Speed USB interface ICs mounted on a circuit board contained within the USB connector at the end of the cable. Receive and transmit buffers with 1 kByte capacities allow efficient transfer of high levels of data. The signal levels are either +3.3 V (for the C232HD-DDHSP-0 version) or +5 V (for C232HD-EDHSP-0 version). The integrated FT232H IC handles all the USB signalling and protocols, facilitating rapid implementation and lowering engineering overheads. Both the C232HD-DDHSP-0 and C232HD-EDHSP-0 have an optional power output capability with a maximum output current of 200mA at their respective signal voltage level. The cables, which are 1.8m long, can cope with data transfer rates of up to 12Mbaud. Both of these cable products have an operational temperature range of -40 °C to +85 °C. They are housed in black cabling with a transparent connector at the end. Individual wires are terminated on to a single header socket. Typical applications for these product include Flash card readers/writers, bar code scanners, industrial control systems, medical diagnostic equipment, set top box interfaces, USB digital camera interfaces and USB wireless modems.   For more read: FTDI integrates USB 2.0 interface into UART cables   ### Origami Interactive Kinetic Art Kinetic Interactive Arts? These concept of moving arts and interacting arts are not new to you, but most of the interesting and massive size pieces are almost always located in private companies or corporations. I was inspired by the piece "Diffusion Choir" located in a tech atrium of a company in Boston, and I wanted to make a small scale project. I love art (public art), electronics, and stuff that moves so this is a great opportunity for me to hand on all of them in a single project. This project involves 3D printing pieces, and majority of the main components I designed by myself so few free to modify and adjust the 3D printing model. I mainly use Rhino 3D so if you want to change the model, please check out my files at the 3D printing section. While you are reading this instructable, if you are planning to follow my steps, I would warn you about the limited resources as I did not keep track of all the components. I was experimenting within the project to make each piece working as I was intended. I encourage you to do the same thing and a lot things can be learned while making it by yourself. Have fun and do not destroy a lot of servo motors like I did :> Movin' on! Supplies You will need the following for the main part of the project, you may want to figure it our by yourself on how to install the piece in your place. - 1 Arduino Uno - 4 Ultra Sensors (I used HC-SR04) - 4 9G Micro Servo motors (not the continuous one, but if you want modify the 3D models + code, the project can be better) - Jump wires - 1 Breadboard (mainly for testing, I would put the breadboard away for the long-term installation) - 1 AC/DC Adapter for Arduino Uno - 4 White Paper (letter size - the thinner the paper the better the result) For installation, I used Scotch Mounting putty (great stuff for hanging on window) Step 1: What Does It Look Like? https://youtu.be/n_lfZmhMrls Here is a quick video on how this thing would turn out. The mechanism activate when someone/object is closed to it (in this project, if less than (<) 1 meter, the origami will blooms. Step 2: Schematic of the Project (general) *Feel free to adjust the circuit* I planed to relying on Arduino Uno power supply (it was a bit glitchy in the project if you use the USB cable to test run the project - try to upload the code to Arduino and use the Adapter Power instead) (I will explain details on why the glitch happens later) Arduino Uno has 13 digital gates (try not to use gate 0 and 1 because if those gate received signal, the signal could change the code saved in your Uno, they are Serial Ports (USART)) and the project will take up full 12 remained in Uno digital gates, which is perfect. By these order gates 2-3 are for echo-trig of the ultra-sensor, I may want to repeat that 3+ times for 3 other ultra sensors (4-5, 6-7, 8-9). From gates 10-11-12-13, they are for servos (in order) 1-2-3-4. Each of the ultra sensors are related to one of the servo motors. You can use the power setup to supply the components like in the schematic, but what I used was parallel circuit to supply them (which is not great and the current is not strong enough to run all 4 at the same time, and that is why the glitch happens) Step 3: 3D Printing The joy of 3D design *talking in sarcastic tone*, these models that you are seeing here are not the first design, they are all my 4th design within this project. If you 3D printing and the products seems not really fit that is because I design that would fit the 3D printers I used (Original PRUSA i3 MK3S printers). The design files are all in perfect size (try not to change it). You can use the 3dm from Rhino3D to make change to the models. If you don't have Rhino, you can try the Evaluation Software Rhino 3D. Get stl files here (you will get linked to Google Drive for these files) 3dm file is also in the link above. For a set of the kinetic blooming piece, you will have to print: - 1 main_gearHolder.stl - 4 main_gearWithHole.stl - 1 servo_holder.stl - 1 servo_gear.stl - 1 servo_pusherPlunger.stl - 1 padbase.stl Step 4: Assembling 3D Pieces After printing, you can try to connect them. I connect the main_gearHolder to the servo_holder by using solder tip to melt the plastic and stick them together (also trying to aim somehow the gear_pusherPlunger to fit in with the servo_holder, because if you make a slight off-position the pusher will not catch the gears). Better, you can use super glue to connect 2 pieces of plastic together. Using the cheap tips of the chopstick I can assemble the gears into the main_gearHolder. Snap off the hanging plastic pieces that is used to snap on the servo motor gear, push that piece into the servo_gear. You may find it will not fit properly, my trick was using the solder tip to melt the plastic around the inner rim. To get the white piece stick on the padbase, I snapped off the extra part of the pusher and using hot glue to stick it on to the base (make sure you position to fit the hole on the base where the servo wire will go, check the 3rd pictures to see what I mean) Using skewer sticks to plug in the hole in the gear (4th picture). Step 5: Folding the Papers This is the trickiest part as the fold is depending on you. I designed this fold to fit the opening mechanism of the servo, because the 9G Micro Servo is not a powerful component to handling large force (yes opening the paper and closing paper can require substantial N to open and keep it open and closing it). The servo motors will make noise when there is some applying force against its spinning motion. Use the picture 1-2-3 to be your references of your fold. The hole in the middle of the paper is 3.5 x 3.5 cm. I was planing to make a video on how to fold this piece but it will add more complication in my writing process. I will upload the video sometime soon. Also, you need to make 4 of these folds (not a lot but the measuring part and the folding part can take quite a lot of time) ask your friends to help you :))) Source: Origami Interactive Kinetic Art ### The machine of answers Using Arduino Should you ask your boss for a raise? Call that cute guy you met at a party? Sell your stock?  Wouldn’t it be nice to have a handy method of handling some of life’s more pressing dilemmas? This machine give you the answer to all you life pressing dilemmas. You need to concentrate on your question for 10 seconds, and when you feel the time is right, press the button, and the machine will give you the answer. FlapRuota-1005.stl FlapRuota-1005.stl273 KB   Step 1: Bill of materials Let's start with the BOM: PRINTED PART: Print all the STL files: 1 x ButtonHolder-1005.stl 1 x logoPen-1005.stl 1 x ingranaggioGrande-1005.stl 1 x ingranaggioPiccolo-1005.stl 1 x FlapStaffaLibera-1005.stl 1 x FlapStaffaMotore-1005.stl 2 x NBottom-1005.stl 2 x Ntop-1005.stl 2 x FlapRuota-1005.stl Threaded rod: 4 x M8x250 3 x M8x150 1 x M8x180 Other: 100 x M8 nuts 100 x m8 washers 40 x iron wire diameter= 1 mm, length= 95 mm 2 x 608 "roller skate" bearings 6 x M3x15mm bolt ELECTRONICS: 1 x ARDUINO UNO 1 x pololu stepper driver A4988 1 x stepper motor (eg. 35BYG104) 1 x Arduino Proto Shield 1 x LED 1 x push button 12x12 mm 1 x 10kOhm  resistor 1 x 320Ohm resistor   For more detail: The machine of answers Using Arduino ### RPi Board, a board to learn Python with the Raspberry Pi I’m continuing working with Juan Brito and Danny Macancela from the blog Desafio Ecuador, developing new boards to bring near the technology and programming languages. Our last work is a board to use with the Raspberry Pi and focused to learn Python. The board has the basic elements to start with this language. Also, with the develop of the PCB we remove the wiring, avoiding troubles with connections, inversion polarity…So with this board you only focused in the software develop, because the hardware side will work! The Hardware The RPi Python board is oriented for a educational environment, so the hardware is simple, and has the basic elements to start working with Python. We develop this breakout board to fit in the Raspberry Pi board using the GPIO’s to control the elements. Why Raspberry Pi? Because at this time, is the cheaper and powerfull board in the market. It has a lot of documentation and support behind it, in a future post, I’ll talk about it deeper. If you want more info about the Raspberry Pi now, you can look here, here or here (this last one in Spanish). The schematics of the board can be download from here: RPI PYTHON BOARD SCHEMATIC As you can see, the elements that the board includes are the following ones: Four 10mm difussed leds: These leds are the same ones that I use previously on the K4S Keyboard. This leds are connected to a general GIPO’s of the board (see schematic) through a FDV301N mosfet transistor. These transistors are not necessary, because the current on the leds are small, but I prefer put it to protect the GPIO pins of the Raspberry. To activate, you must put the corresponding pin to HIGH, and for turn off, put the pin in LOW level. Two pushbuttons: The pushbuttons allows send inputs to the Raspberry, so reading it you can know if they’re pressed or not and act according it state. By default, when the pushbutton is not pressed, you read a HIGH level, and when you press it, then you will read a LOW level. One buzzer: The buzzer allows you send acoustic signals. You can program a continuous tone or beeps with a variable period, it depends how you program it. Like the leds, I put a MOSFET transistor to protect the Raspberry Pi pin. To activate the buzzer, you must send a HIGH level to the pin. And to turn off, simply send a LOW level!. One connector for a 2×16 LCD This connector allows to put a standar 2×16 LCD display, to send messages ans show info. You can put a standard LCD module or an OLED one. I decide put this last ones, because are really cool and gives a modern aspect, instead or the traditional ones. And, because the OLED display makes its own light, no backlight is required. This reduces the power required to run the OLED and is why the display has such high contrast. I choose two colours, Red and Blue from Raystar, that also provides a good application note to manage these displays. From here, I want to giving thanks to Jorge Galán, from RC Microelectrónica for his help and support to obtain it.   For more detail: RPi Board, a board to learn Python with the Raspberry Pi ### How to hire for your payments team Hiring a new member of staff can be daunting yet exciting at the same time. The process can be lengthy and for those with other important tasks that they need to complete, it can become burdensome. Perhaps you’re new to recruiting, or you’re simply unsure of where to start when it comes to hiring  for the payments team. Nonetheless, this blog has got you covered. Keep reading to find out more about hiring the best candidates for your payments team! Assess what the department needs Before you start posting any job vacancies, it would be helpful to first assess what the department needs from a new employee. For instance, what are the sort of skills required as part of a new hire’s daily activities in the payments team? Ensure that you involve relevant stakeholders in this process so that you obtain important knowledge that empowers you to make confident hiring decisions when it comes to recruiting your next payments team member. Offer incentives It goes without saying that an excellent employee benefits scheme will attract candidates to apply for roles within your organisation. Regardless of whether that’s the payments team or other department, promoting your company’s employee benefits programme can help attract a flock of eager and enthusiastic candidates! You don’t have to promote every single employee perk, but ensure that you promote ones that are popular or not common to grab the attention of potential employees! For example, employee benefits such as private healthcare and insurance policies such as group life insurance, pet insurance, or income protection insurance could attract more candidates. Optimise the hiring process Did you know that ‘ghosting’ not only applies to relationships outside of work, but also within the recruitment process? Candidates complain about recruiters ghosting them, not only after application, but also after interviews! Recruiters also complain of candidates ghosting them as well. So, how can you solve this problem as a recruiter? Optimise the recruitment process, of course. One way to do this is to shorten lengthy processes whenever possible. Although you might believe that your hiring process can help you find the perfect candidate for the role, the process itself might simply be ineffective and inefficient. Find ways to shorten the process - do candidates really need to go through three interviews and five tests before successfully getting the role? Or can a short test given to them right after they apply help to shortlist candidates, with only those that pass the test put through to the interview stage(s)? If you can, contact all candidates, regardless of whether they’ve passed or have been rejected. Offer hybrid and remote working opportunities Hybrid and remote working arrangements are increasingly becoming the norm in many companies since the height of the COVID-19 pandemic. In fact, many job seekers are proactively looking for roles that offer these opportunities! For your payments team, consider whether hybrid or remote work can be offered so that you’re able to offer this to potential candidates as well. Studies have found that 51% of employees feel more productive when they work from home, so you might want to think about the advantages of remote workers too. ### ECONOMICAL SSA3075X-R 7.5GHZ REAL-TIME SPECTRUM ANALYZER The SSA3075X-R extends the Siglent SSA3000X series to add real-time spectrum analysis capabilities for intermittent and frequency-hopping signals used in commercial communications and 5G applications.  Saelig Company, Inc. has introduced the SIGLENT SSA3000X-R Real-Time Spectrum Analyzers (RTSA) which are powerful and flexible tools for complex RF spectrum and signal analysis. With a capability of 40MHz analysis bandwidth and 7.2μs 100% probability of intercept (POI), the analyzers can provide multi-dimensional data displays, advanced triggering, and RF data capturing, to assist with modern RF spectrum challenges such as frequency hopping, channel conflicts, spectrum interference, etc. These RTSAs also contain a standard tracking generator for network analysis, optional wideband digital modulation analysis, and EMI measurement. The SSA3050X-R model has a frequency range of 9kHz to 5.0GHz, while the SSA3075X-R has a range of 9kHz to 7.5GHz.  The built-in tracking generators operate from 100kHz to 5.0GHz  and 100kHz to 7.5GHz respectively, and a preamplifier is included as standard.  Control is made easy with a 10.1” multi-touch screen, with an external mouse and keyboard also supported.  A remote control is also possible via an attached PC or web browser. Many real-world signals such as modulated communications signals, spurious interference, and pulsed or frequency-hopping transmissions are sporadic, non-recurring, or even random. Using traditional spectrum analyzers, which steadily sweep through the active spectrum, these signals can easily be missed.  Real-time spectrum analysis (RTSA) uses overlapping FFTs and high-speed memory to provide a 100% probability of intercept to detect even intermittent signals. Real-time bandwidth, the maximum frequency span of overlapping FFTs, is a critical parameter for an RTSA to allow detailed analysis of a signal’s spectrum. The SSA3000X-R analyzers can also perform in a swept or a real-time mode. A modulation analysis mode is also available for AM/FM, ASK/FSK/PSK/MSK/QAM vector signal modulation analysis and EVM evaluation, as well as data recording to a PC.  An EMI measurement mode allows for pre-compliance and other RF testing. Reflection measurement VSWR and return loss measurement with Q value calculation can be accomplished using an external reflection bridge or coupler. Read more: ECONOMICAL SSA3075X-R 7.5GHZ REAL-TIME SPECTRUM ANALYZER ### ABC 123 Toddler Trainer using Arduino Here is a kid tested and teacher approved trainer for the kids in your family and / or extended family that are learning their ABCs and their 123s. It was kid tested on my granddaughter, who really loves it, and was approved by my wife, retired school teacher. In actuality, it is a simple scrolling message box that is capable of producing 2 different messages at the flip of a switch. So if you don’t have a “kiddo” you want to use it with or give it to, then I will explain in the code segment of this Instructable how to speed it up and change the messages. If you want to see it in action here it is to watch. ABC...123 Toddler Trainer Step 1: Parts: Max7219 8x8 Matrix LED @ $4.00 on eBay x 2 Anarduino An Arduino Compatible 24 DIP model kit @$5.40 on eBay BreadBoard P.S. Breadboard Power Supply @$1.50 on eBay Module Wiring Dupont Wire Connector Cables 20cm (female-female) @$1.50 on eBay Mini SPDT Switch @ 40 cents 2.1mm DC Pwr Jack @ 50 cents #2 hardware I use ½ inch bolts to mount parts on case. Check out jameco.com 10K Ohm Resistor 1/8W or 1/4W Molex Header Item G18974 at Electronic Goldmine @$2.00 / 10 Case enclosure MB-173 at allelectronics.com @$3.00 Arduino UNO Used to program ATMEGA328P chip Shipping is not included in the above price approximations... some are free shipping and others cost. Everything should run about $30 if you had none of it except the UNO to begin with. Step 2: Programming the ATMEGA328P Download the ABC 123 Toddler Trainer INO file, connect your computer and program the UNO. Once you’ve programmed the UNO disconnect the USB cable and go on to the next step. Step 3: Putting it together The first picture shows the wiring for the Anarduino. I have explained about the Anarduino and how to set it up in my Kitchen Sink Clock Instructable and ask that you refer back to that one if you plan on building this as I did. Just put the ATMEGA328P that you programmed in the last step in the socket of the Anarduino. The power supply for this project is explained in my first Instructable about the breadboard power supply and again , I ask you to reference that if you need more info.   For more detail: ABC 123 Toddler Trainer using Arduino ### Linear has transceiver that is reliable in the field Description The LTC®2862/LTC2863/LTC2864/LTC2865 are low power, 20Mbps or 250kbps RS485/RS422 transceivers operating on 3V to 5.5V supplies that feature ±60V overvoltage fault protection on the data transmission lines during all modes of operation, including power-down. Low EMI slew rate limited data transmission is available in a logic-selectable 250kbps mode in the LTC2865 and in 250kbps versions of the LTC2862-LTC2864. Enhanced ESD protection allows these parts to withstand ±15kV HBM on the transceiver interface pins without latchup or damage. Extended ±25V input common mode range and full failsafe operation improve data communication reliability in electrically noisy environments and in the presence of large ground loop voltages. Features Protected from Overvoltage Line Faults to ±60V 3V to 5.5V Supply Voltage 20Mbps or Low EMI 250kbps Data Rate ±15kV ESD Interface Pins, ±8kV All Other Pins Extended Common Mode Range: ±25V Guaranteed Failsafe Receiver Operation High Input Impedance Supports 256 Nodes 1.65V to 5.5V Logic Supply Pin (VL) for Flexible Digital Interface (LTC2865) H-Grade Option Available (–40°C to 125°C) Fully Balanced Differential Receiver Thresholds for Low Duty Cycle Distortion Current Limited Drivers and Thermal Shutdown Pin Compatible with LT1785 and LT1791 Available in DFN and Leaded Packages Applications Supervisory Control and Data Acquisition (SCADA) Industrial Control and Instrumentation Networks Automotive and Transportation Electronics Building Automation, Security Systems and HVAC Medical Equipment Lighting and Sound System Control Linear Technology has a range of rugged, high voltage tolerant RS485/RS422 transceivers which it says can eliminate field failures without the need of costly external protection devices. In practical RS485 systems, installation cross-wiring faults, ground voltage faults or lightning induced surge voltages can cause overvoltage conditions that exceed absolute maximum ratings of typical transceivers. The LTC2862-2865 feature ±60V overvoltage fault protection on the data transmission lines, protecting bus pins during operation and power shutdown. Whether a circuit is transmitting, receiving, in standby or powered off, the LTC2862-2865 tolerate any voltage within ±60V without damage, increasing the robustness of any typical RS485 network. The low power family supports fast 20Mbit/s and low-EMI slew-rate-limited 250kbit/s data rates, as well as half- and full-duplex versions. The LTC2862-2865 family provides protection and reliability for a variety of RS485/RS422 applications, including industrial control, instrumentation networks and automotive electronics. An extended ±25V input common-mode range and full failsafe operation improve data communications reliability in electrically noisy environments and in the presence of ground loop voltages. This extended common-mode range allows the LTC2862-2865 devices to transmit and receive under harsh conditions that would otherwise cause data errors and possible device damage. Enhanced ESD protection allows these devices to withstand ±15kV (HBM and IEC-1000-4-2 air discharge) on the transceiver pins without latchup or damage; all other pins are protected to ±8kV HBM. Fully symmetric receiver thresholds allow the devices to maintain good duty cycle symmetry at low signal levels and boost receiver noise immunity.   For more read: Linear has transceiver that is reliable in the field   ### DIY Fingerprint Lock Box Ever wanted a box that opens in a super cool way? We thought it would be fun to create a box that can be unlocked using the correct fingerprint! If we had more time, we would make the box more secure. In the mean time, we have learned a lot and had a lot of fun. We found several tutorials online that inspired us to make this awesome project: How to Set Up Fingerprint Sensor With Arduino Techatronic Arduino fingerprint security lock DIY Fingerprint Door lock System Although this project is recommended for the beginner to intermediate level, we personally found several parts of it very challenging, and hope this Instructable will help others have an easier time than we did. We built this project as part of Ms. Berbawy's Principles of Engineering class at Irvington High School. Supplies Materials: Arduino UNO Fingerprint Sensor (from Adafruit) Solenoid Lock Jumper Cables One Channel Relay Module Breadboard Rechargeable 12V Lithium Ion Battery Pack Male-to-male DC power cable 2 Hinges 4 M3x8 screws 2-10 M3x12 screws Arduino USB cable DC Power Jack Plug Adapter Tools: Wood glue Adobe Illustrator/SVG editing software (Optional) Arduino IDE Soldering iron and solder Laser Cutter (Optional) Wire Cutters Wire Strippers Dial/Digital Calipers CAD Software 3D printer Screwdriver (for relay module and other electric components) 1. Attach the ribbon cable to the fingerprint sensor. Make sure the orientation of the cables is correct (refer to the image above). The only wires we will be using for the fingerprint sensor are the RX wire, TX wire, VCC (power) wire, and GND wire (refer to image). **Note: when referring to the diagram and comparing it to your own fingerprint sensor, make sure to hold the fingerprint sensor in the same orientation as the image! (In the image above, the fingerprint sensor is upside down). You can find more information about the fingerprint sensor and what each wire corresponds to by going to this link. 2. Once you correctly attach the wire harness to the fingerprint sensor, remove the JST connector on the other hand and strip the wires. Do the same thing for the solenoid wire: Remove the JST connector and strip the wires. 3. Since the wires of the fingerprint sensor and solenoid lock are stranded, we recommend soldering solid wires to each stranded wire and adding heat shrink (to help with connections). 4. Connect all the wires and components as per the circuit schematic above. Step 2: Code for Fingerprint Sensor 1. Download the Arduino IDE (if you don't already have it installed) from this link. 2. Download the Adafruit Fingerprint Library from GitHub: Adafruit Fingerprint Sensor Library. 3. Then in the Arduino IDE go to Tools --> Manage Libraries. Look up the Adafruit Fingerprint Sensor Library and install it. 4. Most of the code is already included in the library. To access the code to enroll the fingerprints, go to File --> Examples --> Adafruit Fingerprint Sensor Library --> enroll. This will open up the code to enroll the fingerprints. 5. Connect the Arduino to your computer and make sure that you are using the correct port. (You can check this by going to Tools --> Port.) Also, make sure you are boarding the correct Arduino by going to Tools --> Board. Then compile the code and upload it onto the Arduino. 6. To enroll your fingerprints, go to the Serial Monitor (Tools --> Serial Monitor). It will prompt you to enter an ID from 1 to 127. Type in whichever ID you want your fingerprint to have and press "send". Then follow the instructions in the Serial Monitor to correctly enroll your fingerprint. (You will need to place your finger on the sensor twice). You can enroll 127 fingerprints; however, if you type in the same index again for a different fingerprint image, the previous one will be overridden. **Note: If you see the message "Did not find fingerprint sensor :(" when you open the Serial Monitor after uploading the code, we recommend switching the RX and TX wire (without changing the code) or resetting the Arduino. Also, make sure the baud rate for the Serial Monitor is 9600. 7. In order to see whether the fingerprint sensor will recognize your fingerprint, go to File --> Examples --> Adafruit Fingerprint Sensor Library --> "fingerprint" to open a new program. Compile this program and upload it. Right now, the solenoid lock will not work but it will say that it is waiting for a valid finger. If you test out the correct fingerprint, it should display the line "Found ID #__ with confidence of ___" depending on how clear the match was. Congratulations! The fingerprint sensor should be working now! If you are still having trouble, we recommend using this tutorial to get further clarification: Fingerprint Sensor Tutorial. Step 3: Code for Solenoid Lock 1. To activate the solenoid lock, we need to slightly modify the "fingerprint" code we used in the last step. Add the lines: "pinMode(13, OUTPUT);" and "digitalWrite(13, LOW);" right after the open curly bracket in void setup() (as shown in the image above). 2. Then add the lines "digitalWrite(13, HIGH);" "delay(3000);" and "digitalWrite(13, LOW);" at the end of the program right before the comment that says "// found a match!" (as shown in the image above). You can change the delay to whatever value you desire: It changes the amount of time the solenoid lock will be activated (unlocked). 3. Plug in the power adapter to a power outlet and to the DC power jack plug adaptor. 4. Upload the code again, and this time when the program recognizes your fingerprint, the lock should also be activated! **Note: If your circuit is not working properly, we recommend using a multimeter to confirm that all the connections are fine and to help trace where the issue is arising (if it is a hardware problem). 5. Since we plan on using this circuit to create a fingerprint lock box, we needed to make our electronics portable, so we replaced the power source with a lithium-ion battery pack with 12V. We used this to power both the Arduino and the solenoid lock. 6. We also soldered together the three wires that were connected to the breadboard and then put heat shrink on it (since the breadboard was not necessary). Step 4: CAD Model for Fingerprint Lock Box At this point, the electronics should be working properly. Sometimes, if the code suddenly stops working, we recommend resetting the Arduino and going through parts of the code steps again (this happened to us frequently). While this step is not completely necessary, we highly recommend making a CAD model for the box and adding all the components as well, just so you can get an idea of how everything will fit before laser cutting the box that will house all the electronic components. You can probably skip parts of this step if you are simply using a pre-made box. The dimensions and design of the box are completely up to you! (Refer to the images above to understand our design.) 1. We created a simple 10 in. x 4 in. x 4 in. box on OnShape (any other CAD software is also perfectly fine although the steps may be slightly different) to have a rough idea of where all of the parts would be mounted inside the box. Make sure to also keep into account the thickness of the wood you will use for laser-cutting (for example, we were using 1/8 in. birch wood, so we made the thickness of each wall 1/8 in. in our model). 2. After creating the basic box, we found online CAD versions of our specific electronic parts on Grab CAD and imported them into OnShape. In an assembly, we placed them where we wanted them to be placed using a mate connector feature. **Note: Some of the GrabCAD models are not 100% accurate. Make sure to measure your actual components thoroughly so that you are aware of the differences between the model and the actual part. Design your box based on the actual parts and not solely based on the CAD models. 3. We wanted to have the electronics on one side of the box and we wanted space to put actual things inside the box on the other side of the box (which is why we made it so long). We added a wall between the electronics section and the empty area. Moreover, in order to save space, we originally planned to screw the relay module and the Arduino UNO to the walls of the box (as shown in the image above); however, when we actually built the box and added all the electronics, we decided that it was better for us to not screw in the Arduino (which is why there are 4 holes in the front of our final box). 4. When designing the box, make sure to accurately place any holes for screws and to size them correctly based on the size of the screw you are going to use (for example, we used M3x12 screws for everything except the solenoid lock which we used M3x8 screws for). Add holes for where the wires from the fingerprint sensor and solenoid lock will go (if you're following a similar design to ours). If the GrabCAD model is identical to your actual component, you can make it easier to place the holes for the screws by going to the assembly in OnShape --> right-click on the part --> Edit in Context. This makes it easier to edit the box in the parts studio while being able to see the actual size of the component. Step 5: Design the Mechanism to Lock the Box Now we had to design a mechanism that would actually keep the box locked when the lock was not activated. We wanted to place the solenoid lock sideways on the front wall and design/3D print a piece that would attach to the lid, hang over the front wall of the box, and then go underneath the deadbolt of the solenoid lock (in an "S" shape) (refer to the images above). We created a lid for the box and added holes for the screws that went through the plastic piece and also through the lid. In the assembly, we placed the part in the correct spot on the box based on where we were planning on placing the lock and based on the lock's dimensions. **Note: This placement is very important for the box to function correctly; therefore, be very careful about the measurements and calculations and where you place the mate connector. Step 6: Adding Finger Joints on the Box In order to make the pieces of laser-cut wood join together well when we glue them together, we used finger joints. Our original model (which had all the electronic components) had smooth edges, so we decided to create a new parts studio where we would only create the basic box with fingers. We made the dimensions identical to the previous model. We created 0.59-inch fingers down the edge and the bottom of the box. The size of the fingers is completely up to you! **Note: Make sure that each side of the box is a separate part so that you can add the finger joints. It won't work if the box is one single part. We did this part manually but it can also be done by box-making software like MakerCase. If you use MakerCase, make sure to specify that the dimensions are for the outside, specify the thickness of the wood you will be using (for us it was 1/8 in. birch wood), make it an open box, and add finger joints. (We recommend making it an open box because we wanted the lid to have smooth edges and not fit into the top using finger joints since we wanted the lid to lift up when we added hinges to the back of the box.) We chose to make the fingers manually because we also wanted to create fingers for the wall in the middle of the box that would separate the electronics section from the empty space section (refer to the images above). Since we had already added all the electronic components and placed them in the right spots in the last step, we did not do it again for this new box. Step 7: Laser-cutting the Box When everything is completely finalized in your CAD software, we need to export each side of the box (with fingers) individually as a DWG file and then import it to Adobe Illustrator so we can laser-cut the parts. 1. In order to export each side of the box with fingers, right-click on the part --> Export as DXF/DWG --> Export. Make sure to click on the outside of each part. 2. Open Adobe Illustrator and create a new artboard that has the dimensions of your laser cutter (for us, Ms. Berbawy's laser-cutter is 12 in x 24 in). Make sure to change the dimensions of the artboard to inches instead of points. Then File --> Open the downloaded DWG file. When you open it, it will create a new artboard. You can add it to the artboard you already created by just copy-pasting the image. Do this for each side of the wall (create new artboards if not all the pieces fit onto just one). 3. These images only have the finger joints but they don't have the holes for the screws and wires that we had created in the first model (where we placed all the electronic components). Since the dimensions of the box are exactly the same even with the finger joints, you can export each side of the box with the screw/wire holes and add it in Illustrator on the same artboard. You can line up this new image with the corresponding box side (which already has fingers) and then remove the outline so that you are left with all the sides of the box with fingers and with the correct placements of the screw/wire holes. 4. Once all the walls of the box are imported into illustrator, you need to adjust a few settings in order to laser cut it properly: - Group each piece with each other (since we added the screw/wire holes after importing the original piece) - Change the stroke color to red 255 - Change the thickness of the stroke to 0.1 inches - Arrange all of the pieces as close together to ensure that the wood is not wasted 5. Laser-cut the pieces! Source: DIY Fingerprint Lock Box ### Sea Fun - A Live Paper Toy By Basic Electronic Modules I kind of fall for paper toy lately. Besides cutting and pasting 3D paper toys, I decided to make a live one that can actually move and interact with me. I had the cartoon figures and paper scenes printed in a print store, cut the mechanical parts by a laser cutting machine and used a Grove - Starter Kit Plus to create the movement, light effect and audio effect of this project. I have all the original design files attached in this post. If you find the cartoon figures cute and the acrylic parts useful, you can download and use it as you like. :) Here is a video roughly displaying how I built this project and the outcome. The specific steps are following. Step 1: Material Used & Tools 1. Paper Scenes Shown in the 1st picture. We arranged the figures on 350g art paper in A3 size, and had some of them doubled due to spare space. But you only need one and A4 is more suitable for home printer, so we rearranged them in A4 size. You can find them in the last two pictures. 2.  Mechanical Parts Shown in the 2nd picture. I added notes to illustrate the uses of those acrylic parts. Move on the parts to see the notes. I used 2mm acrylic board to cut these parts, that's why the width of slots is set 2mm in the .cdr file. If you are going to cut them with materials of other thickness, you need to modify the width of slots in the .cdr file attached. Actually I think wood would be a nice choice. If you determine to go with wood, please let me know the outcome! What if you don't have a laser cutting machine? First laser cutting service is easy to find over the Internet. All you need to do is uploading your design file and wait for the package beside your mail box. Here is the page of our service:  Seeed laser cutting service. Besides you can totally replace acrylic with other more handy materials and get some hand craft job. For example, hard card board or wood board. 3. Grove - Starter Kit Plus Shown in the 3rd picture. Containing most-frequently-encountered electronic modules, this kit is a great gift for yourself or your kids. It's suitable for quick prototyping and helps beginners to learn more about electronic and have fun. Get one here! 4.   Tools Shown in the 4th picture. You will need scissors and utility knife to cut out the paper figures. Adhesive tape is useful when making some paper joints. Glue gun is a must! It can provide you with a firm connection between the acrylic parts. 2.cdr23 KB For more detail: Sea Fun - A Live Paper Toy By Basic Electronic Modules ### RF mixers reduce distortion in 4G basestations IDTF1150 Dual RF to IF Downconverting Mixer The F1150 dual channel device is designed to operate with a single 5V supply. It is optimized for operation in a Multi-mode, Multi-carrier BaseStation Receiver for RF bands from 1700 - 2200 MHz with High Side Injection. IF frequencies from 50 to 450 MHz are supported. Nominally, the device offers +40 dBm Output IP3 with 335 mA of ICC. Alternately one can adjust 4 resistor values and a toggle pin to run the device in low current mode with +36 dBm Output IP3 and 235 mA of ICC. A member of IDT’s Zero-Distortion™ family, this RF to IF mixer reduces distortion for improved SNR while simultaneously reducing power consumption. Features Dual Path for Diversity Systems 1700 to 2200 MHz freq range Ideal for Multi-Carrier Systems 8.5 dB Gain (200 MHz IF) Ultra linear +38 dBm IP3O (350 MHz IF) Ultra linear +40 dBm IP3O (200 MHz IF) Low NF < 10 dB 200 ohm output impedance Ultra high +13 dBm P1dBI Drop in replacement for existing radiocards 6x6 mm 36 pin package Power Down mode < 200 nsec settling from Power Down Minimizes Synth pulling in Standby Mode Low Current Mode : ICC = 235 mA Standard Mode: ICC = 335 mA Optimized for High Side Injection Integrated Device Technology has expanded its analogue wireless infrastructure product line with two low-distortion RF to intermediate frequency (IF) mixers for cellular basestations. The IDT F1150 and F1152 are dual 1700-2200MHz RF to IF mixers with ultra linear (+42 dBm) third-order intercept point (IP3O) for good intermodulation rejection, making them suitable for multi-carrier, multi-mode cellular systems found in 4G wireless basestations. “The low power consumption and low IM3 distortion of the IDT F1150 and F1152 address a key need for our customers’ 4G basestation solutions, which are being deployed at an intense pace,” said Tom Sparkman, general manager and v-p of the communications division at IDT. According to the supplier, the devices are designed to improve system third-order intermodulation (IM3) performance and reduce power consumption, resulting in improved quality of service. “This will result in smaller enclosures with increased reliability in 4G wireless infrastructure applications,” said IDT. “The mixers reduce power consumption and improve IM3 distortion by over 15 dB for better signal-to-noise ratio (SNR), allowing customers to improve performance with a higher front-end gain,” said the supplier.   For more read: RF mixers reduce distortion in 4G basestations ### Audio and Visual Timer Do you need a way to quickly and easily set a timer for short intervals? This audio and visual timer has you covered! All you need to do to set your timer is turn the potentiometer knob and push the button. One LED = 5 seconds Two LEDs = 10 seconds Three LEDs = 20 seconds Four LEDs = 30 seconds At the end of the timer, the Piezo will beep, and you can set another timer! This project is great for timing quick tasks, and the delays can be adjusted to accommodate for longer or shorter tasks! I was motivated to create this project because I have been teaching multiplication fact fluency in my classroom, and I've been using sand timers to help students time themselves as they solve multiplication facts. I noticed that many of them would spend too much time looking at the sand timer, and not enough time looking at their math, or spend the whole time working on their math, and not notice when the timer ended. I wanted to create a variable length timer that had a visual element as well as an audio element. This project would be good for an intermediate Arduino project. The circuitry can be fickle, but Attachments Audio and Visual Timer                                                                                                      Download Supplies Arduino Uno Breadboard Piezo Potentiometer LEDs (4) Resistors (1 k ohm) (5) Push button Jumper wires (16, various sizes) Step 1: Arrange Input and Output Components on Breadboad Insert Piezo, LEDs, potentiometer, and pushbutton as shown and described. Place the Piezo in the breadboard, inserting pins into rail e, rows 26 and 30. Place the LEDs in the breadboard as shown, 1 row apart from each other in rail e. (LED 1, cathode (short end) row 22, anode (long end) row 21; LED 2, cathode in row 19, the anode in row 18; LED 3, cathode in row 16, the anode in row 15; LED 4, cathode in row 13, the anode in row 12). Place the potentiometer in the breadboard with pins in rows 8, 9, and 10. My potentiometer has the outer pins in rail e and the inner pin in rail f. Place the pushbutton in the breadboard with pins in rows 3 and 5, rails e and f. Step 2: Add Resistors Insert resistors as shown and described. Insert resistor pins in (h,5) and (h,6) Insert resistor pins in (a,22) and negative rail. Insert resistor pins in (a,19) and negative rail. Insert resistor pins in (a,16) and negative rail. Insert resistor pins in (a,13) and negative rail. Step 3: Wire LEDs Wire LEDs Connect LEDs to pins on Arduino Uno. The wire connects the anode side of the LED to the pin. Connect a jumper wire from (a,12) to Arduino digital pin 7. Connect a jumper wire from (a, 15) to Arduino digital pin 6. Connect a jumper wire from (a, 18) to Arduino digital pin 5. Connect a jumper wire from (a, 21) to Arduino digital pin 4 Step 4: Wire Piezo Wire Piezo Connect Piezo to power and to Arduino Uno. You may need to lift the Piezo out of the breadboard in order to access slots for wiring. Connect a jumper wire from (a, 26) to Arduino digital pin 8. Connect a jumper wire from (a, 30) to the negative rail. Step 5: Wire Potentiometer Wire Potentiometer Connect the potentiometer to power and to Arduino Uno. Connect a jumper wire from (c, 8) to the positive rail. Connect a jumper wire from (a, 10) to the negative rail. Connect a jumper wire from (a,9) to Arduino Analog In Pin A0. Wire Pushbutton Connect the pushbutton to power and to the Arduino Uno. Connect a jumper wire from (h,3) to the positive rail. Connect a jumper wire from (i, 6) to the negative rail. Connect a jumper wire from (i, 4) to Arduino digital pin 3. Step 7: Connect to Electricity Ground and Current Wire the Electricity Create the circuitry for electricity to flow throughout the circuit. Connect a jumper wire from 5v on Arduino Uno to the positive rail on the breadboard. Connect a jumper wire from GND (ground) on Arduino Uno to the negative rail on the breadboard. Connect a jumper wire from the positive rail on the breadboard to the opposite positive rail on the breadboard. Connect a jumper wire from the negative rail on the breadboard to the opposite negative rail on the breadboard. Step 8: Connect Arduino to Computer Connect your Arduino to your computer via USB cable. Source: Audio and Visual Timer ### arduino factory + production tour in turin, italy who would ever imagine that global cultural and economic revolution would spring from the tranquil fields of piedmont, italy, in tiny towns nestled against the stunning backdrop of the alps? but that’s exactly where arduino, the system of microcontrollers revolutionzing the maker movement and pioneering the concept of opensource hardware, was born in 2005 and continues to make its home today. arduino’s story is unusual to say the least. five colleagues, seeking to empower students with the tools to create, developed the platform in 2005. now distributors estimate that over one million arduinos have been sold, and the arduino community is among the most resilent and inventive on the internet. forums like instructables and arduino’s own scuola connect enthusiasts to learn from one another, and arduino users build on the platform to open up new creative possibilities. we traveled to turin, italy, to see arduino’s first officina, before setting off north to visit the italian factories that continue to be the heart of arduino manufacturing for the entire world. the citofono to the torino officina arduino, nameplate CNC-engraved at their fablab image ©designboom located in what’s known as the ‘capital of the alps’, the torino officina was founded in february 2012 to oversee the development of the hardware and expand the educational and cultural initiatives that surround it. davide gomba, already an arduino veteran by the time, was among the associates instrumental in founding the office, and we’re lucky to have him as our guide throughout our visit. it’s late august when we arrive, and some of the office is still on summer holidays, but those who are there are hard at work preparing for the release of two new arduino products and organizing the rome maker faire in collaboration with make, asset-camera, and tecnopolo.   For more detail: arduino factory + production tour in turin, italy ### Nanoleaf 2.0 So this is the Nanoleaf 2.0 which is a DIY version of the famous Nanoleaf RGB Triangular lighting setup. The goal here was to Recreate a Nanoleaf-like device with minimal spec and low cost, one that has all the basic RGB Glowing features and can be made easily. https://youtu.be/WXDLpdvsbqc To accomplish this feat, I prepared this setup completely from PCBs that were provided by PCBWAY. This Instructables is gonna be about the whole built process of this economic version of Nanoleaf so let's get started! Supplies Following were things required to make this project- Custom PCBsWS2812B LEDsAttiny85 SOIC8SMD ButtonUSB Micro Port vertical100nf Cap5V Power SourceArduino Nano (for flashing Attiny85) If you want to purchase this Nanoleaf, checkout its tindie link- https://www.tindie.com/products/maepa/nanoleaf-dumb-edition/ Step 1: Prologue Nanoleaf available on market costs a lot, so I planned this alternate version which doesn't have any fancy connectivity options like BT or Wifi, I added a button to change the color of LEDs. This Setup is powered by a USB Port that takes 5V Inputs to power each LED and Attiny85. I already made a V1 of this setup that you guys can check out from the below link. https://www.instructables.com/PCB-NANOLEAFHEXALEAF/ In that version, I used 6 LEDs and a THT version of Attiny85. This edition is similar to the previous one in layout, the only difference is the Attiny85 Package is now SOIC8 instead of DIP8, there are a total of 8 pixels in this board now and the overall length has been shortened to make this setup more compact. Also, I've added a vertical Micro USB Port in this project so we can easily connect a charger to this setup in a nice and tidy way. Step 2: PCB Design and Schematic 8 WS2812B LEDs are connected in parallel, Dout of First LED is connected to Din of Second LED, Second's LED Dout is connected with third LED's Din and this goes on up to 8th LED. 8th LED Dout is connected with a CON1 Pad that will connect with other boards and this sequence will continue on the second PCB as well. We can add as many PCBs that we like and make different GONS from this setup. Like previously I made a Dodecgon by preparing a similar setup, We are already preparing Trigon but we can make Tetragon, Pentagon, Hexagon, Heptagon, Octagon, etc. We just have to use multiple Boards and connect them at a certain angle which is the internal angle between two sides of any gon you're preparing. Attiny85 is being used to control the addressable LEDs with an SMD Button. I prepared its PCB and then send it to PCBWAY for samples. Step 3: PCB Assembly PCB Assembly of this project contains the following steps that also include testing the board before adding componenets on the bottom side. Solder paste DispensingPick & Place ProcessHotplate reflow processChecking If the LEDs are workingAdding Attiny85, Switch, and USB Port Step 4: SOLDER PASTE DISPENSING Now the first step is to add solder paste to each component pad one by one. To Apply solder paste, I'm using a Solderpaste Dispensing Needle with a Wide syringe, and the solder paste I'm using is a regular solder paste consisting of 63% Tin and37% Lead. Step 5: PCBWAY I received the PCBs in a week which was fast. I choose White Soldermask for this project with a Black silkscreen and the overall quality of the PCBs was just awesome. I have Been using their service for a while and I have to say, it's pretty decent for getting started. Checkout PCBWAY from here- https://www.pcbway.com/ Step 6: Pick & Place Process After applying Solderpaste we move on to the next step which is to add components to their assigned location. Also, because we are preparing a Trigon setup, we need to make two more boards. Step 7: Hotplate Reflow After the "Pick & Place Process", I carefully lifted the whole circuit board and place it on my DIY SMT Hotplate. the hotplate heats the PCB from below up to the solder paste melting temp, as soon as the PCB reaches that temp, solder paste melts and all the components get soldered to their pads, we lift the PCB and then place it on a cooler surface for a little bit, to cool down the heat of PCB. Step 8: Testing LEDs To check if the LEDs are soldered properly or not, we need to check each board and for that, I used an Arduino nano board connected with three jumper wires that connect VCC GND and Din of LED Board with 5V GND and D3 of Arduino nano. I used Adafruit's Neopixel Test sketch to check if the LED was working. #include #ifdef __AVR__ #include #endif #define PIN 3 // Parameter 1 = number of pixels in strip // Parameter 2 = Arduino pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) // NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) // NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products) Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800); // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across // pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input // and minimize distance between Arduino and first pixel. Avoid connecting // on a live circuit...if you must, connect GND first. void setup() { // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket #if defined (__AVR_ATtiny85__) if (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // End of trinket special code strip.begin(); strip.show(); // Initialize all pixels to 'off' } void loop() { // Some example procedures showing how to display to the pixels: colorWipe(strip.Color(255, 0, 0), 50); // Red colorWipe(strip.Color(0, 255, 0), 50); // Green colorWipe(strip.Color(0, 0, 255), 50); // Blue //colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW // Send a theater pixel chase in... theaterChase(strip.Color(127, 127, 127), 50); // White theaterChase(strip.Color(127, 0, 0), 50); // Red theaterChase(strip.Color(0, 0, 127), 50); // Blue rainbow(20); rainbowCycle(20); theaterChaseRainbow(50); } // Fill the dots one after the other with a color void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; iPreferences on a PC, or Arduino->Preferences on a Mac, enter the above URL in "Additional Boards Manager URLsTools -> Boards -> Boards Manager... *If using 1.6.6, close boards manager and re-open it (see below)Select "ATTinyCore by Spence Konde" and click "Install". AVRs chips usually come blank, they need to be set up to be Arduino IDE compatible but to do that you need an AVR programmer do to that, for example, a USBASP. Fun Fact, you could make your own AVR Programer with an Arduino Uno or a Nano board in a very easy step. Connect your Arduino board with a COM port and select the following sketchExample>ArduinoISP upload this sketch onto your boardAfter uploading, go to the tools menu and choose the Arduino as ISP option in the programmer section.Now for flashing Attiny85, we can select the Attiny85 in the Board section. The programming process uses VCC, GND, and four data pins. Three pins connect MISO, MOSI, and SCK between the programming micro and the target micro, and the fourth pin from the programming micro goes to the reset pin of the target. Wire the Attiny85 with Arduino in the above way. (also right after uploading ISP Sketch to your Arduino, do not forget to add a 10uf Cap between Reset and GND pins of your Arduino board)Instead of using an Arduino UNO and a breadboard for this job, I will use my DIY Attiny Programmer which I made for flashing the Attiny or Atmega MCUs. which you can check out from here- https://www.instructables.com/Multiple-ATtiny8513A... connect the Board to the Arduino as ISP Setup in the above wiring configchoose the right port, right programmer (Arduino as ISP), and hit Burn Bootloaderwait for a few seconds, and you will get done burning the bootloader message.Now Open the sketch that you want to upload to this AttinyGo to the Sketch menu and select Upload using the programmer.and your Sketch will get uploaded onto the attiny85. Step 11: Main Code Here's the main code- #include #define BUTTON_PIN 4 #define PIXEL_PIN 0 // Digital IO pin connected to the NeoPixels. #define PIXEL_COUNT 24 Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800); bool oldState = HIGH; int showType = 0; void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); strip.begin(); strip.show(); // Initialize all pixels to 'off' } void loop() { // Get current button state. bool newState = digitalRead(BUTTON_PIN); // Check if state changed from high to low (button press). if (newState == LOW && oldState == HIGH) { // Short delay to debounce button. delay(20); // Check if button is still low after debounce. newState = digitalRead(BUTTON_PIN); if (newState == LOW) { showType++; if (showType > 14) showType=0; startShow(showType); } } // Set the last button state to the old state. oldState = newState; } void startShow(int i) { switch(i){ case 0: colorWipe(strip.Color(0, 0, 0), 50); // Black/off break; case 1: colorWipe(strip.Color(255, 0, 0), 50); // Red break; case 2: colorWipe(strip.Color(0, 255, 0), 50); // Green break; case 3: colorWipe(strip.Color(0, 0, 255), 50); // Blue break; case 4: colorWipe(strip.Color(100, 0, 255), 50); // purp break; case 5: colorWipe(strip.Color(200, 0, 255), 50); // lite purp break; case 6: colorWipe(strip.Color(255, 0, 100), 50); // pink break; case 7: colorWipe(strip.Color(255, 255, 0), 50); // yellown break; case 8: colorWipe(strip.Color(255, 110, 20), 50); // orange break; case 9: colorWipe(strip.Color(255, 100, 100), 50); // Rorange break; case 10: colorWipe(strip.Color(255, 180, 40), 50); // lite orange break; case 11: colorWipe(strip.Color(0, 255, 255), 50); // LIGHT Blue break; case 12: colorWipe(strip.Color(0, 255, 100), 50); //greenish blue break; case 13: colorWipe(strip.Color(150, 255, 0), 50); //greenish red break; case 14: colorWipe(strip.Color(255, 255, 255), 50); // white break; } } void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i Project SettingsUnder Your Apps > SDK Setup and Configuration > Config Step 10: User Interface We have designed a neuromorphic companion web app for the device. Neumorphism, or soft UI, is a visual style that combines background colors, shapes, gradients, highlights, and shadows to ensure graphic intense buttons and switches. All that allows achieving a soft, extruded plastic look, and almost 3D styling.Before starting the workout you need to submit your personal details such as name, age, gender, height, and weight in the personal tab. This info is used in analyzing the workout. You can find the entire code here. Step 11: Lipo Battery The main advantages of LiPo battery cells are that they have about four times the energy or density of nickel-cadmium or nickel-metal hydride batteries. They are also very lightweight and pliable. These advantages pointed us to choose a LiPo battery for the device. To reduce the size, Here we used a 160 mah battery and that can yield optimum run time for the device. The maximum voltage of the LiPo is 4.2v and the nominal voltage is 3.7V. The voltage starts at 4.2 maximum and quickly drops down to about 3.7V for the majority of the battery life. Once you hit 3.4V the battery is dead and at 3.0V the cutoff circuitry disconnects the battery. The graph above shows the discharge profile of LiPo. Step 12: DC Voltage Booster There are actually two options that exist for powering up the Arduino either to give standard 3.3V to 3.3V pin or to give (5-21) Volts to the Vin. In both cases, we should be very careful.The VIN (and the USB) go into a 3.3V switching regulator. This has a minimum input voltage of 4.5V. When we feed 3.3V from the power source directly into the board. We should isolate the output of that regulator from the rest of the circuit by cutting that one link (refer to the above image). Note : if you provide more than 3.3V you are liable to damage the board. So here we are supposed to give 5V to the Vin of the Arduino, but Lipo batteries can provide up to only 4.2 v when it is fully charged.To deal with the complication, we are using a voltage boost converter module that provides 5V DC stable voltage output at various input range between 1.5V to 5V. This is the voltage boost converter module that provides 5V DC stable voltage output at various input range between 1.5V to 5V. This small tiny circuit boosts the voltage level and provides the amplified stabilized 5V output. For the different input ranges, it consumes a different amount of current to produce a balanced output.While using this module one must comply with the following conditions1. Input voltage cannot be greater than the nominal voltage, otherwise, it will burn out module2. Input power must be greater than the output power, otherwise, the output voltage will be less than the nominal voltage.3. Output load cannot be greater than the nominal load, otherwise, the output voltage will be less than the nominal voltage. Starting voltage 0.8V, the output current 7mAInput 1-1.5V, output 5V 40-100mAInput 1.5-2V, output 5V 100-150mAInput 2-3V, output 5V 150-380mAInput more than 3V, output 5V 380-480mA; DC-DC boost converter modules operate at frequency of 150KHZ, the typical conversion efficiency is 85% Step 13: TP4056 Li-Ion Battery Charger Module TP4056 module is a linear charger lithium-ion battery. This module uses the TP4056 Li-Ion charge controller IC and a separate protection IC. They can charge batteries consisting of single cells. Most importantly, it supports constant current and constant voltage modes of charging operations. Users can select both modes. This module offers a 1-ampere charging current.But our battery needs only 170 ma current. The interesting fact of the module is that it has an RPROG Current setting resistor(R3). So we can easily adjust the output current by changing that resistor. The above image shows the R3 and its current value. The TP4056 charger module have 0805 SMD package, for resistors. We replaced the 1.2K resistor to 10K. Now it can provide 130 ma current for the battery. So our device can be easily charged by means of this module. Note : You can also provide 1Amps current to the battery, but it won't last long. Step 14: 4mm SPDT 1P2T Slide Switch 4mm SPDT 1P2T Slide Switch used with TP4056 charger module to regulate the current flow between the charge controller and voltage booster. The above schema shows current flow in the SPDT switch. Step 15: Fusion 360 for Case For making the case we have used the Fusion 360, the case actually consists of two parts the main body and the lid. The body and the lid are attached by frictional fit. For attaching the TP4056 charger module we actually designed a stand that can be plugged inside. The stand is actually a separate file, not merged with the body. The buckles were not found in a cheap amount in stores, that's why we designed that as well. These are the 3d printed parts that we designed. The blue and white color combination makes it more appealing. In total we have 4 files. Step 16: Hook and Loop This design is actually meant for the arms, as an armband. The hook and loop mechanism is used here as the fasteners along with this 1/2 inch elastic band. So Any person can wear this band by easily adjusting the strap. Step 17: Assembling Hardware After attaching the strap, Then we started assembling the hardware as per the schematics given above. Use the above image for reference or watch the video. Our Get-Fit is ready to wear now. Step 18: Future Updates The following updates will be done on the next version. A heart rate sensor will be includedGalvanic skin response will be includedMore exercise will be addedGive more clear analytics of your workout Source: DIY Fitness Tracker(GET-FIT) ### Bluetooth RGB Shelf Lighting using Arduino Being the giant fan of LED's that I am i'm always trying to come up with new ways I can put them throughout my house. Today i'm going to show you how to create a simple, yet extremely eye catching, RGB Bluetooth controlled Shelf lighting system. The beauty of integrating Bluetooth into the system is that you can control your lights using almost any device, your computer, smart phone, even your tablet.   Step 1: Materials Arduino Uno R3 Arduino Proto Sheild 30mm WS2801 LED's 12v Power Supply JY-MCU HC-06 V1.06 Bluetooth Transeiver 2.1mm power jack 2k resistor 1k resistor DB9 Connector You can find most of these from just about anywhere, you don't necessarily have use the links above, they are just a suggestion. You also don't need the DB9 Connector I use it for an easy disconnect from the LED's. Step 2: The Circuit Connect the HC-06 to the 5v power source on the Arduino and the WS2801's to the 12v power source. Be sure that the Tx on the HC-06 goes to the Rx pin on the Arduino and the Rx pin on the HC-06 to the Tx pin on the Arduino. You can connect as many LED's in a row as you would like, in this particular scenario I'm using 11. Step 3: Connecting Bluetooth The default password for these Bluetooth transceivers is "1234" without quotes. Below are all of the defaults: -- Default COM setting: 9600, N, 8,1 -- Default Password/pairing code: 1234. -- Supports the AT command to modify the baud rate, device name, passkey, master/slave, etc. -- Supports baud rates 2400 -1382400. -- Based on the CSR Bluetooth chip BC417143 -- Bluetooth specification v2.0 + EDR -- Power supply: +3.3VDC 50mA -- Frequency: 2.4GHz ISM band -- Modulation: GFSK(Gaussian Frequency Shift Keying) -- Emission power: ≤4dBm, Class 2 -- Sensitivity: ≤-84dBm at 0.1% BER -- Speed: Asynchronous: 2.1Mbps(Max) / 160 kbps, Synchronous: 1Mbps/1Mbps -- Security: Authentication and encryption -- Size: 26.9mm x 13mm x 2.2 mm. -- Working temperature: -20 ~ +75 Centigrade -- Dimension: 26.9mm x 13mm x 2.2 mm If you wish to change any of the defaults there is a great tutorial on Instructables that I used, the tutorial is for the HC-05 but it works for the HC-06 as well. Modify The HC-05 Bluetooth Module Defaults Using AT Commands   For more detail: Bluetooth RGB Shelf Lighting using Arduino ### TS-7100 – FEATURE DENSE EMBEDDED SOLUTION WITH OPTIONAL 2.8″ TOUCH SCREEN A full featured, compact embedded computer with optional 2.8″ touch LCD and DIN-mountable enclosure that measures 2.4″ by 3.6″ by 1.7″. It packs in industry standard interfaces including Ethernet, USB, RS-232, RS-485, and CAN, and bunch of I/0. Make It Smaller Time and again at customer visits, Technologic Systems heard the same thing, “We love your single board computers, but make them smaller! They have to go inside this cabinet, and we need room for everything!” We listened. Technologic Systems is proud to introduce the TS-7100, our smallest single-board computer in an optional DIN-mountable enclosure that measures 2.4″ by 3.6″ by 1.7″, powered by the ARM iMX6 UltraLite CPU. It ships with industry-standard interfaces, including Ethernet, USB, RS-232, RS-485, and CAN. For wireless connectivity, the TS-7100 comes with WiFi and Bluetooth module, as well as a NimbeLink/Digi cellular modem and mesh network socket. With all of these features packed into a smaller footprint, not only will the TS-7100 fit in your cabinet, but it can also help to replace other peripherals and modules to free up even more space and get more done. Combining all of these components into one small DIN mounted unit, we provide the ability to promote hot swapping in the field, limiting costly technician time and troubleshooting. Each component on the TS-7100 has been carefully chosen to ensure reliable operation in the field and maximum product lifespan for 10+ years. The fanless design of the TS-7100 paired with the low cost enclosure is able to withstand high vibration, debris, and a wide temperature range of -40 °C to 85 °C. Additional Features Include: NXP i.MX 6UltraLite 696 MHz ARM CPU with FPU512 MB RAM4 GB eMMC Flash Storage2 KB FRAM Storage802.11 b/g/n WiFi and Bluetooth BT4 LE Radio3″ 16-bit 240×360 Resistive Touchscreen DisplayTS-SILO Super Capacitor Power Reserve SolutionPreloaded Debian 10 “Buster” Distribution, Linux Kernel v4.91x microSD Card Socket2x 10/100 Ethernet Ports2x USB Host Ports2x Serial Ports1x RS-485 Ports1x CAN PortIndustrial Temperature Range (-40 °C to 85 °C) Read more: TS-7100 – FEATURE DENSE EMBEDDED SOLUTION WITH OPTIONAL 2.8″ TOUCH SCREEN ### Realtime GPS+GPRS tracking of vehicles using Arduino You just need to install your Arduino with the GPRS+GPS Quadband Module (SIM908) in a hidden place in your car, maybe in your trunk, in the glove compartment or under your spare tyre. Then connect the GPRS-GSM and the GPS antenna and a SIM card, all of this powered with a battery and... you are ready! First of all you have to call the police of course, but you can help them a lot. If your car is not parked where do you think, something is wrong... Call immediately to your Arduino, hidden in your car, and it will send you an SMS with the location, longitude and latitude at the moment, and it also sends GPS data to a web server with the realtime position (Google Maps). Thanks to the GPS+GPRS shield you can track your car in realtime. This shield is programmed to recognise your number and only if it is correct it will send you this data.   For more detail: Realtime GPS+GPRS tracking of vehicles using Arduino ### Atmel has ZigBee radio for 3D TV glasses Low-Power 2.4GHz ISM Transceiver for Consumer Applications The Atmel AT86RF232 2.4GHz ISM transceiver is fully IEEE 802.15.4-compliant and feature-optimized for consumer applications in the unlicensed 2.4GHz ISM band available worldwide. It is ideal for low-complexity, peer-to-peer wireless applications like remote controls, health and fitness devices, toys, game controllers, and others. The new device is fully-compliant with IEEE 802.15.4, making it the ideal transceiver for ZigBee RF4CE. The ZigBee RF4CE specification is designed to control a wide range of wireless consumer products including remote controls for home entertainment devices, human interface devices like mice and keyboards, and 3D glasses. The Atmel AT86RF232 transceiver includes all the necessary features to support the latest wireless applications in the consumer market, including excellent RF performance, low power consumption, high-link budget and onboard AES encryption for secure communication. The device also supports automatic antenna diversity to improve RF performance and link reliability. Typical Applications Proprietary Peer-to-Peer Remote Controls Sport and Fitness Devices Toys Game Controllers Healthcare Automation Atmel has developed an RF transceiver to support the high-volume consumer markets in the 2.4GHz ISM (Industrial, Scientific and Medical) band. The AT86RF232 transceiver supports the ZigBee RF4CE specification aimed at consumer remotes, keyboards and 3D glasses. “With the growing high-volume consumer segment, manufacturers are looking for transceivers with low power, high RF performance and enhanced security,” said Magnus Pedersen, product marketing director for microcontroller wireless solutions at Atmel “The transceiver addresses these issues with antenna diversity, larger link budget and robust RF performance for this cost-sensitive market.” said Pedersen. The transceiver supports automatic antenna diversity to improve RF performance and there is on-chip AES encryption for secure wireless end-to-end communication. The transceiver has a voltage range of 1.8V to 3.6V, -100dBm in sensitivity and an output power of 3dBm for extended battery life in various applications.   For moe read: Atmel has ZigBee radio for 3D TV glasses ### Arduino Science Clock I have toyed with the idea of building a clock for sometime and my sister had a big birthday coming up so I decided that this was a great opportunity to build a clock for her as a gift. My sister has a PhD in science and works as a science educator so I decided to make a science themed clock. I wanted to make the clock slightly different, the first thing that stands out with this clock is that it doesn't have numbers, I used the periodic table elements instead. For those of you that don't know here's a list of the elements I used with there corresponding number https://youtu.be/G0lQ9HCKvRU H-HydrogenHe-HeliumLi-LithiumBe-BerylliumB-BoronC-CarbonN-NitrogenO-OxygenF-FluorineNe-NeonNa-SodiumMg-Magnesium So rather than 6 O-Clock it is actually carbon o-clock etc. The clock has both digital and analogue systems for time keeping. The analogue system simply uses two stepper motors for moving the hands in hour or minute steps. The hands can be adjusted manually with the buttons on the side of the electronics enclosure. The digital system keeps track of the time by lighting up an LED adjacent to the corresponding hour. I have also made this part of the clock more interesting, at the turn of the hour the LEDS light up in sequence forward then backwards through the next corresponding 12 hours and then stops at the current hour staying lit for the next 60 minutes. The combination of using Fusion 360 and my 3D printer really made the analogue part of this clock build very easy. Supplies The Supplies I used were as follows: 1 x 3mm Plywood sheet, 600mm x 400mm 4 x Red 5mm LEDs 4 x Blue 5mm LEDs 4 x Green 5mm LEDs 4 x Yellow 5mm LEDs 12 x 220 ohm resistors 1 x Roll of Hookup wire 1 x PLA for 3D Printer 1 x 300mm long 8mm diameter Brass Rod 4 x 8mm Shaft Collars 1 x 8mm Self Aligning Pillow Block Bearing 2 x Stepper Motors, 28BYJ-48 2 x Driver Board Modules for Stepper Motors, ULN2003 4 x Spring Return Push Buttons 1 x 2 position Toggle Switch 1 x Arduino Mega 1 x Real Time Clock Module, DS1307 The Tools I used were: 3D Printer Laser Cutter Soldering Iron General Hand Tools Step 1: Mechanical Design The clock hands and gear mechanism was designed using Fusion 360, the gears were then printed on a 3D printer. I found the combination of using my 3D printer together with Fusion 360 meant I could rapidly prototype many different designs before I got to the final gear train design. Each hand is driven by a stepper motor through a pair of spur gears, the pinion gear is connected directly to the stepper motor and the driven gear is on the 8mm brass axle. Each gear has a 2:1 reduction, this is to take the torque load of the the stepper motor hopefully increasing the life of the motor. The hour hand has a 25:50 gear ratio and the Minute hand has a 30:60 ratio. The hour stepper motor turns the axle through the 50 tooth gear. The 50 tooth gear is secured to the axle with a locking collar. The hour hand is the driven by the shaft, also being connected via a locking collar. The minute hand is on the 60 tooth gear which can freewheel around the 8mm shaft, this is driven by the minute stepper motor and the 30 tooth gear. The spur gears were designed using the Fusion 360 spur gear add in, this functionality being very important for this project. The way I designed the gears was as follows: Click the utilities TabClick on the Scripts and Add-ins on the tool barScroll down to spur gear and select runA menu will then a appear to enter your gear parametersClick run and your gear will appear on the screen Once the gear was generated I then added the shaft with the required flats to connect to the motor. The gears that needed to be coupled to the axle were fitted with a locking collar. I connected the steel locking collar to the gear using 2-part epoxy glue. The 8mm brass shaft was used to make sure the collar was correctly aligned. Once all of the gears were designed on Fusion 360 the files were exported as an stl file. The stl file was then opened up in Cura and sliced ready for 3D printing. With Fusion 360 there is the option to automatically generate the stl file and send to Cura directly, Fusion 360 also opens Cura with your print ready to slice. The 3D printing was done with a Creality Ender 3 Pro. The small gears took about 20 minutes each to print and the large gears took about an hour to print. The clock hands were also designed on Fusion 360 and 3D printed the same way. Step 2: Plywood Clock Face and Enclosure The main clock face, electronics enclosure and supports were manufactured from 3mm plywood. This is a fairly straightforward 2D design so I used a simple 2D CAD package to design the clock face and supports. I tried to find some pictures of a chemical flask, DNA and an atom on line to download with no luck so they were drawn from scratch. I cheated for the electronics enclosure as I used an online box making tool. I used makercase.com. With this tool you put in all your settings for your enclosure and it then generates a drawing of the box of which you can download dxf and svg files. This tool is awesome for quickly designing boxes! Once the drawings were done it was time to cut out the parts using a laser cutter. The laser cutter at the hackspace I am a member of uses LightBurn software which seems pretty compatible with most file formats. I find using an engineering CAD package quite useful as I can use different layers for different types of laser cuts, for example the outline can be drawn in a layer for a full cut, the text engraving can then be a different layer with a lower intensity. The LED holes were another layer so the cut sequence could be optimised. The small LED's are 5mm so the holes were 6mm. To secure all the plywood elements I just used standard wood glue. Step 3: Electronics Design The electronics design is pretty straight forward. The main input is the DS1307 Real Time Clock Module. This simply needs a power supply and connection to the Arduino via the I2C bus (SDA/SCL). There are 4 push button inputs for the user to adjust the minute hands forwards and backwards, these are connected via internal pullups on the Arduino and are activated when connected to ground. There is also a toggle switch which allows the user to switch between UTC and BST. This means during the summer it advances which LED is lit. This button does not effect the hands. The outputs are the 12 LEDs which light up on the hour and also come on in a sequence defined in the code. The other outputs are the two 28BYJ-48 Stepper motors and associated driver boards. The Arduino pins connected to the driver boards are specified in the code. A full schematic drawing is shown in the pictures above. Step 4: The Code Together with the gear mechanism the code is at the heart of this project. I am not going to explain every line of this code, I am just going to detail a few snippets. Global Variables and Libraries. #include "RTClib.h"
#include
RTC_DS3231 rtc; int skip = 0; const int stepsPerRevolution = 200; //for the motor itself, total steps w/ reduction ~2038 //Stepper clockStepper(stepsPerRevolution, 8, 10, 9, 11); Stepper clockStepperMin(stepsPerRevolution, 11, 9, 10, 8); Stepper clockStepperHr(stepsPerRevolution, 7, 5, 6, 4); int timer = 100; // The higher the number, the slower the timing. int ledPins1[] = {31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 46, 53}; // an array of pin numbers to which LEDs are attached int ledPins2[] = {33, 35, 37, 39, 41, 43, 45, 47, 49, 46, 53, 31}; // an array of pin numbers to which LEDs are attached int ledPins3[] = {35, 37, 39, 41, 43, 45, 47, 49, 46, 53, 31, 33}; // an array of pin numbers to which LEDs are attached int ledPins4[] = {37, 39, 41, 43, 45, 47, 49, 46, 53, 31, 33, 35}; // an array of pin numbers to which LEDs are attached int ledPins5[] = {39, 41, 43, 45, 47, 49, 46, 53, 31, 33, 35, 37}; // an array of pin numbers to which LEDs are attached int ledPins6[] = {41, 43, 45, 47, 49, 46, 53, 31, 33, 35, 37, 39}; // an array of pin numbers to which LEDs are attached int ledPins7[] = {43, 45, 47, 49, 46, 53, 31, 33, 35, 37, 39, 41}; // an array of pin numbers to which LEDs are attached int ledPins8[] = {45, 47, 49, 46, 53, 31, 33, 35, 37, 39, 41, 43}; // an array of pin numbers to which LEDs are attached int ledPins9[] = {47, 49, 46, 53, 31, 33, 35, 37, 39, 41, 43, 45}; // an array of pin numbers to which LEDs are attached int ledPins10[] = {49, 46, 53, 31, 33, 35, 37, 39, 41, 43, 45, 47}; // an array of pin numbers to which LEDs are attached int ledPins11[] = {46, 53, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49}; // an array of pin numbers to which LEDs are attached int ledPins12[] = {53, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 46}; // an array of pin numbers to which LEDs are attached The above code shows what libraries are used for the Real Time Clock, the Steppers. It defines the name of the steppers, how many steps and the pins used. There are 12 arrays which are used in a custom function for doing the LED flashing sequence on the hour. The code below is used in the setup function to setup the clock. Basically if the real time clocks seconds value is zero then it advances the minute hand. Because the steps per revolution on the steppers is not divisible by 360 this section of code deals with any error correction. This is the section of code you need to play with to tune the clock if it is fast or slow. In my code every 30 minutes the minute hand advances slightly further on the 30th minute. if (now.second() == 0) { skip += 1; if (skip != 29) { //Serial.print("advance stepper 34 steps"); Serial.print(" skip "); Serial.println(skip); clockStepperMin.step(-68); //advance ~1:00 delay(1000); } else { skip = 0; //Serial.print("1 step skipped to keep correct time"); Serial.print(" skip "); Serial.println(skip); clockStepperMin.step(-72); //advance ~1:00 minus 1 step to keep clock in time delay(1000); } } On the hour is when the most complicated part of the sketch happens as it calls a custom function. The snippet below shows what happens at 2 o-clock. The stepper is advanced then the 2 o-clock function is called to do something with the LEDs. if (now.second() == 4 && now.minute() == 0 && now.hour() == 2) {
//Serial.print("advance stepper 34 steps"); Serial.print(" skip "); Serial.println(skip); clockStepperHr.step(342); //advance ~1:00 delay(1000); if (dstButton == LOW) { Two_oclock(); } else { Three_oclock(); } Below is the custom function which is called at 2 o-clock. This sequences the LEDs as defined in the ledPins4 array. void Two_oclock() {
ledState0A = HIGH; for (int thisPin = 0; thisPin < pinCount; thisPin++) { // turn the pin on: digitalWrite(ledPins2[thisPin], HIGH); delay(timer); } if (ledState0A = HIGH) { for (int k = 1; k < pinCount; k++) { // turn the pin off: digitalWrite(ledPins2[k], LOW); delay(timer); } } ledState0A = LOW; } I have attached 2 versions of the code. The first is very long but easy to understand. The second is much shorter but is more advanced as it fully uses the custom functions by passing variables back and forward. The second version was developed by a Hackspace friend, Paul, after he read my original code and was challenged to optimise it. Step 5: Final Assembly and Testing https://youtu.be/G0lQ9HCKvRU The final assembly and testing was simply a hot mess of solder, wires and hot glue. A great way to spend a rainy Sunday afternoon. The first thing I did was solder a 220 ohm resistor to the anode (+) of each LED. I then hot glued each LED into the clock. Next I connected all the cathodes (-) to each other in sequence ready to connect to ground. I then connected a long wire to each resistor ready to connect to the corresponding output on the Arduino Mega. When the LEDs were assembled I assembled the hands drive system including the stepper motors and then threaded all the wires into the electronics enclosure. Inside the electronics enclosure I connected the RTC (real Time Clock), the 5 input switches, the two Stepper Driver PCB's, and the LED connections all according to the schematic. Once assembled I tested it out and it worked pretty well. I found that it looses about 2 minutes a day which can be corrected in the code with some trial and error. Source: Arduino Science Clock ### FRIENDLYELEC NANOPI R2S IS NOW AVAILABLE FOR PURCHASE FROM $22 The NanoPi R2S, which was recently launched by FriendlyElec back in January of this year, was an upgrade to the NanoPi R1S. At the time of the Nano Pi R2S publication, the board wasn’t available, and there wasn’t any information about the pricing either. As of now, FriendlyElec has fully launched the NanoPi R2S and is available for purchase starting from $22. The NanoPi R2S, just like mentioned earlier on is based on the Rockchip RK3328 processor and comes more 1G DDR4 RAM, 512MB more than the predecessor NanoPi R1S. Similar to NanoPi R1S, the board comes with two Gigabit Ethernet ports (with one deployed for WAN and the other for LAN), each capable of attaining close to 1Gbps and with OpenWRT supported off the shelf, the board can be configured as a router. WiFi isn’t supported onboard but can be added through a USB dongle. FriendlyELEC recommends the use of the RTL8821CU USB dongles, which will be supported out-of-the-box by the default firmware. The board also comes with a 10-pin GPIO, which cannot be found in the NanoPi R1S board. According to FriendlyElec, getting the new board might not be that straight forward because of the current Covid-19 pandemic. Because of the epidemic, postal services in a lot of countries get delayed. Customers who need orders urgently need to choose DHL. EU customers who need DHL service to deliver orders need to email us before orders place. Specifications: CPU: Rockchip RK3328, Quad-core Cortex-A53DDR4 RAM: 1GBNetwork:Internal 10/100/1000M Ethernet Port x 1USB3.0 converted 10/100/1000M Ethernet Port x 1USB2.0 Host: Type-A x1MicroSD Slot x 1MicroUSB: power input and USB SlaveDebug Serial Port: 3.3V TTL, 3-pin 2.54mm pitch connectorLED: LED x 3KEY: KEY x 1 programmablePC Size: 55.6 x 52mmPower Supply: DC 5V/2ATemperature measuring range: 0℃ to 80℃OS/Software: U-boot,Ubuntu-Core,OpenWrt Read more: FRIENDLYELEC NANOPI R2S IS NOW AVAILABLE FOR PURCHASE FROM $22 ### L.O.G. $10 Arduino There are probably thousands of articles on making an Arduino. So who needs another Arduino? Well, this Lazy Old Geek(L.O.G.) needs one. Here’s the features I would like: Features: Low cost More permanent than a breadboard Not a custom PCB More prototyping area than a RBBB or Anarduino or Boarduino Easier prototyping than just perfboards Compatible with USB-BUB and my Arduino USB Step 1: Parts List: Most of the electronic parts were purchased or can be purchased and are priced from: http://www.taydaelectronics.com/servlet/StoreFront Radio Shack Multipurpose PC Board with 417 Holes $2.19 http://www.radioshack.com/product/index.jsp?productId=2102845 1 AtMega328 IC bootloader  $4.00 (ebay?) 1 28 pin IC socket                   $0.07 1 16MHz resonator                  $0.17 1 10K resistor                          $0.01 2 0.1uFd capacitors                $0.02 1 6pin male header                 $0.02 Optional LED: 1 1k resistor                            $0.01 1 LED                                      $0.01 Optional 3V Aref: (Don't install these unless your script requires Aref to be set to 3 volts.) 1 3.2K resistor                       $0.01 My Arduino USB                   $3.99 My calculations says that's about $10.50 for a working Arduino clone with USB. I think that's a pretty good price. Step 2: R.S. Multipurpose PCB Radio Shack Multipurpose PC Board with 417 Holes $2.19 Why I chose this board: Designed for standard ICs, similar to breadboards Two strips running between 'IC pins' for power and ground Connected outside rows The component side is painted to match the copper side Now using this PCB is similar to using a breadboard but one of the difficulties at least for this Lazy Old Geek is that you put the components on the non-copper side but make most of your connections on the solder side. Another difficulty is using the two center strips as power and ground. Well, I came up with a clever way of designing and documenting the PCB layout. I do not have much expertise with CAD software like Eagle so I used Microsoft Excel. If you are not familiar, Excel is a spreadsheet program that can create documents that can also be read by Open Office and Google Docs. What I did is create a spreadsheet where each hole in the PCB is represented by a cell in the spreadsheet (See picture or ArduinoTemplate.xls). So this is a representation of the physical PCB. When adjacent pads are connected like the strips down the middle I filled the cells with the same color. The cells contain descriptions of what’s in them for this circuit. E.g., the AtMega socket is labeled for pins 1-28. NOTE: The picture/spreadsheet represents the solder side or bottom of the IC, so the pins are opposite what you might expect. For the AtMega off to the sides, I put in some signal descriptions. I also labeled the ground (light blue) and power strips (pink) Components are marked by the holes where they will be put. E.g., C1 and C1. The resonator has three pins so it is Rs, Rs, Rs. The six pin male header for the USB adapter is called RS232 and is identified by its pin names, Gnd, 3.3V, 5V, Tx, Rx, DTR Resistors and capacitors have two lead and they are located by the same identifier, e.g. C1 for one lead and C1 for the other. Further instructions are at the bottom. ArduinoTemplate.xls18 KB Step 3: Soldering it up Soldering to these copper pads is not easy. After sitting around, the copper oxidizes. It would probably help if you scrubbed it with Scotch Brite or maybe an eraser. One of the difficult parts is wiring up power (5v) and ground for the AtMega IC. Now sometimes if the signal and pin are the same side, it’s just a matter of soldering a little jumper across. 22 Gnd 7   5V But sometimes they cross over 20 5V 8   Gnd For these, I took a stiff piece of wire and jumpered over the other bus. (see picture). The wire is stiff and short so shouldn't bend very easily. Now this is probably not the best way to do this but it works for me. If this concerns you, you can put some insulation on the wire. Major Components in Project Low cost More permanent than a breadboard Not a custom PCB   For more detail: L.O.G. $10 Arduino ### Choosing a Quality Assurance Specialist and Company A quality assurance specialist is a collaborator responsible for detecting and correcting software defects and testing the product before it is released for public use. This post is essential for technical evaluation and meeting customers' expectations. Finding a qualified testing engineer, building and maintaining productive performance is not a cheap step that impacts the entire working process. This article tells how to shorten this process making it maximally affordable and efficient for a business owner. Necessary Skills and Qualifications of a Quality Assurance Specialist Estimating preferred skills and qualifications helps to select the best-fitting candidate. The core features that an entrepreneur should possess are: understanding of the quality assurance terminology, tools and representing the practical experience analytical skills and focusing on details ambitious features to develop the knowledge and fit the progress movement nonstop Zappletech possesses all these features. Demanding business owners prefer to deal with specialists who can provide their knowledge and experience. Professional certification, memberships, scientific degrees of team members in a relevant field, their participation in the training programs referred to analytics and project management software are welcome and appreciated. Keys to a Successful Collaboration For a successful collaboration, the order of work must have a precise scheme: Solution generating. Due to the variability of the projects, they demand different techniques, requiring an individual approach to each of them. Find out if your testing provider can handle the scope of your tasks. Flexibility of models. Depending on the size, complexity, deadlines, and applied solutions. Convince that the vendor can provide the services that match your needs. Reliability. Before entrusting your product to a third party, make sure that it is in safekeeping. Require the resumes of each project participant, implement test interviews to check their technical, conversational, and cultural level if necessary. Quality of reports. Test report examples are a demonstrative and often paid type of test that shows professionalism in the documentation. Agreement. The contract must include all essentials, such as determining the approach, intellectual property defending. Preferably, it should be a short and professionally concise document to reduce the time for the paper routine. Zappletech matches all these requirements and provides a high level of services for all equipment, including mobile test automation. Regardless of the operation system, the specialist of Zappletech will make your software run smoothly. Bottom Line The more you test your potential partner, the better result you will achieve. By collaborating with genuine professionals, you exclude all the potential risks and turn your software into a rocket. ### Love Gauge Using Arduino I'm working together with my wife. But sometimes one of us has an external appointment. So, if one of us is thinking about the other, we want to show it together. For this, I have made an Love Gauge for us. It stands on our desktop, or you can carry it somewhere else, cause it has an WLAN module. If one of us thinking of the other, you can open the website and move the pointer to an message. The pointer of the Love Gauge on the desktop is moving to the message, and you know the other is thinking of you. If you want to build it you need an internetserver, an servo and an Arduino with network shield. I used an reaDIYmate board with WLAN. Step 1: Design I have made an sketch with CorelDraw for the wooden parts and the background for the remote control program. We have engrave and cut the wooden parts with an laser. Liebesbarometer_Skala.pdf77 KB Step 2: Fix the servo Now you put the servo inside the scale. It is an small cheap servo, cause the pointer is very light. I fixed it with an sticky tape and two screws. Step 3: Fix the pointer First you need to set the servo with an computer to 90° and switch it of. The diameter of the hole in the pointer is so small that you don't need an screw to fix it. You can just press it on in the vertical position.   For more detail: Love Gauge Using Arduino ### BMR481 48 V-TO-LOAD DIRECT CONVERSION DC/DC CONVERTERS Flex Power Modules’ converters are first generation direct conversion products Flex Power Modules’ BMR481 DC/DC converter addresses the growing need for higher energy efficiency levels in datacenters and cloud computing infrastructures. This converter offers an input range of 40 V to 60 V targeting 48 V to 54 V nominal supplies and a programmable 0.5 V to 1.35 V output. The 12 mm x 27.7 mm footprint of the main module provides a maximum output current of 70 A and incorporates a digital interface for monitoring, configuration, and control purposes. This main unit can then be supported by up to five additional ‘satellite’ modules resulting in a total current rating that reaches 420 A. The single-stage BMR481 provides an ideal alternative to the conventional two-stage intermediate bus converter (IBC) and point-of-load (POL) architecture which requires an extra conversion step, taking up more space and impacts operational performance. This groundbreaking direct conversion module presents engineers with a more streamlined and economical solution. The converter can achieve up to 92% efficiency from a 1 V output at 53 VIN which is 2% to 3% higher than what the equivalent IBC-based deployment can deliver. The BMR481 reduces board area by up to 50%. MTBF is more than 8.7 Mhrs for the main module. Optimized efficiency is achieved by automatic enabling and disabling of phases/satellite modules depending on the required load, along with dynamic voltage adjustment to provide optimum supply rails to the connected ICs. Output ripple and noise is an extremely low 1 mVp-p (typical) due to the zero voltage/zero current switching employed. Load and line regulation are typically kept at 1 mV. At 53 V input and 0.5 V output, the full 70 A output current is available from the main module to over +75°C ambient temperature with 0.5 m/s airflow and over +90°C with 2 m/s airflow. Full digital control is implemented with a PMBus v1.3 interface compliant with PMBus or AVS/SVID. Isolation is rated at 1,500 VDC (functional). Read more: BMR481 48 V-TO-LOAD DIRECT CONVERSION DC/DC CONVERTERS ### MSP430 FET using TI Launchpad In order to do In System Programming (ISP) you usually need a Flash Emulator Tool (FET). For the Texas instruments MSP340 family you can buy the one that TI sells for their MCUs: That costs about 100$ and it isn't too much if you program MCUs for a living. It can work with supplies from 1.8V to 3.6V and do program/debug using JTAG or Spy-By-Wire (2 Wire) interfaces. For the hacker that buys their own tools there are cheaper solutions. You can find several references on Internet about people that have used the MSP430 Launchpad to do ISP programming. This Launchpad board is designed to program MSP430 MCUs of the "G" value line in dip packages using an included 20 pin socket. As all the signals needed to do Spy-By-Wire are available so you can use this board to program MCUs located in another board as long as you route the needed signals: TDIO, TCK and the reference GND to the proper pins of the MCU to program. This article explains a FET implementation using the TI Launchpad. As this board provides also a serial TX/RX communication using the PC USB connection. It will also be implemented in the FET. Features Two Wire Spy-By-Wire for the MSP430 family Serial TX and RX communication at 3.6V level Limitations and Disclaimer The FET will inherit all the limitations related to the use of the TI Launchpad as a FET device. Can only use Spy-By-Wire, no full JTAG is available It can only work with and provide 3.6V The second limitation could be important. As the Launchpad works at a fixed 3.6V supply, the provided Vcc and the signaling is at 3.6V. As long as the board you communicate with is at about 3.6V all will be ok. As 3.6V is the maximum operating voltage in the MSP430 you cannot connect the FET to a board that operates the MCU at a greater voltage. In the case of connecting to a board that uses a lower voltage, let's say 2.5V, you could power the board without using the FET, but the signaling from the FET to the board will be at 3.6V and that could be above the Absolute Maximum Ratings from the MCU. Adding level shifters is out of the goals of this project so I recommend using this FET only when the board is powered between 3.3V and 3.6V in order to guarantee that the Maximum Ratings are not exceeded. If the connected board should work at less than 3.3V I recommend to power it at 3.6V from the FET during the programming and debugging and powering it at it's own lower voltage when it is disconnected from the FET. Off course this document is only a documentation of something I have done for myself and there are no provided guarantees that it will suit your own needs or that it won't blow-up your home. Yoy have been warned. Launchpad Signals and project schematic The signals needed to program a MSP430 chip and provide Serial communication are mainly at the J3 connector that links the emulator upper side of the board with the target MCU lower side. As we won't use the lower part, we will take out all the five jumpers in J3.   For more detail: MSP430 FET using TI Launchpad ### ITTT || ARDUINO-UNO || ANTIPONG CONSOLE This project and instructable were made as part of an assignment at HKU ( University of the Arts Utrecht ), during the module: If This Then That. In this instructable we'll be making a small game console that plays an inverted version of pong. In this version of pong you'll be dodging the balls instead of "ping-ponging" them over to another player, see how long you can last! Supplies To build this console we'll be using a bunch of different parts, which can be seen in the image above or the parts list under this sentence, you'll only need one of each part unless specified otherwise : // mainboard // Arduino uno ( we used rev.3). // electronic parts // Adafruit SSD1306.Standard PushButtons - 3x.Piezo buzzer.Led (any colour, we used green).220 ohm resistor. // case // 3d printed case ( Model link, we made use of a resin printer but a standard filament printer will do fine! ).Zero pcb/dot pcb - 16cm x 10cm (6.3 x 3.93 inches). // testing & soldering // Solder wire.Flux.Set of standard jumper wires (flexible tips!).Breadboard (for testing). // power // USB-B to USB-A cable.Standard (phone) charging block. Step 1: Research and Planning Background: For the longest time I struggled with what to make for this assignment. Having worked with Arduino's before but never this substantially and having a hard time limit for when this project should be finished were both important variables to consider. After doing some digging through other instructables of other creators ( and previous ITTT projects by other students), I found one project that really caught my eye. The instructable referenced: "ATtiny85 Snake Game" While I loved this project, I didn't simply want to recreate what another user already made and decided to give this project my own swing. After speaking with the teachers and other students I quickly decided that instead of snake I would be making a version of the game pong. Planning: In my initial concept I wanted (just like the regular version of pong) to make it a multiplayer experience, where both players had 2 buttons to control the paddle and just ping pong the ball to each other till a person had won. After just a quick bit of googling I found that a lot of other users on instructables had already made an Arduino version of pong (both single and multiplayer) and while for this project I would be allowed to use their code, if altered, I personally wanted to write this code myself. See "1" for the original concept. Eventually I decided I would code my own single player version of pong using other projects code as reference, and invert it entirely. Making a pong game where instead of having to hit it, you would have to dodge it and see how long you're able to survive. Doing this removed the need for another player, and saved a lot of time making and figuring out how to code this. See "2" for the final concept. For the assignment the "final product" needs a case and with this final concept reminding me of a Gameboy (which used injection molded cases) this seemed like an excellent time to put a new resin printer I've bought to use. While these machines are a bit different than your regular printer the 3d model should work just fine on both. Step 2: Code The code for this project turned out to be a lot more difficult than I initially thought it would be. Most components are quite self explanatory but the display worked different from what I imagined. Its not possible to clear an exact part of the screen, instead the entire screen has to be cleared. A workaround I found was to spawn a black object in the spots that should be cleared, which while quirky works great. While I'm personally not a developer the code (while simple) appears to work flawlessly and doesn't appear to have any bugs. The limitations of the Arduino-Uno make it so the display's refresh rate isn't the highest but the end result is more than playable. Some parts of the code may be redundant or out right unneeded, if there is anything that should be changed feel free to send me a message and I will look at changing the code in this Instructable. The code for this project can be found below this step and can be uploaded to the Arduino-Uno without any further tweaks. During the testing phase I made use of the online website Wokwi to build my circuit and write my code. There are a bunch of online tools which help you, but Wokwi specifically allowed for the use of the ADAFRUIT SSD1306 which is the display we're using for this project. See and test the wokwi project here I did end up testing the final circuit with a breadboard to see if all the parts were working correctly ( I highly recommend doing this before soldering it all together!) ARDUno_AntiPong.txt This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters Show hidden characters #include#include#include#define OLED_WIDTH 128#define OLED_HEIGHT 64#define LED 10#define OLED_RESET 4Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);const char LEFT_BUTTON_PIN = 2;const char RIGHT_BUTTON_PIN = 4;const char START_BUTTON_PIN = 6;int Buzzer = 8;bool hasStarted = false;bool Pressed = false;int player_y = 110;int player_x = 27;int player_width = 12;int Ball_Pos_Y = 50;int Ball_Pos_X = 30;int Ball_Dir_Y = 1;int Ball_Dir_X = 1;int Lives = 3;void setup() {pinMode(2, INPUT_PULLUP);pinMode(4, INPUT_PULLUP);pinMode(6, INPUT_PULLUP);pinMode(LED, OUTPUT);display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)display.clearDisplay();display.display();Draw_TitleScreen();}void loop() {digitalWrite(LED, HIGH);bool Current_Left_State = digitalRead(LEFT_BUTTON_PIN);bool Current_Right_State = digitalRead(RIGHT_BUTTON_PIN);bool Current_Start_State = digitalRead(START_BUTTON_PIN);if (Current_Start_State == Pressed && hasStarted == false) {display.clearDisplay();hasStarted = true;display.drawFastHLine(player_x, player_y, player_width, WHITE);}if (hasStarted) {Draw_Court();Draw_Lives();}if (Current_Left_State == Pressed && hasStarted == true && player_x != 5) {player_x -= 2;// Draw player moving left. //display.drawFastHLine(player_x, player_y, player_width, WHITE);display.drawFastHLine(player_x + player_width, player_y, player_width, BLACK);}if (Current_Right_State == Pressed && hasStarted == true && player_x != 47) {player_x += 2;// Draw player moving right. //display.drawFastHLine(player_x, player_y, player_width, WHITE);display.drawFastHLine(player_x - player_width, player_y, player_width, BLACK);}display.drawPixel(Ball_Pos_X, Ball_Pos_Y, WHITE);Draw_Lives();Ball_Pos_Y += Ball_Dir_Y * 4;Ball_Pos_X += Ball_Dir_X * 4;display.drawPixel(Ball_Pos_X, Ball_Pos_Y, WHITE);display.drawPixel(Ball_Pos_X - Ball_Dir_X * 4, Ball_Pos_Y - Ball_Dir_Y * 4, BLACK);// checks if the ball has hit a vertical wall, and inverts the movement direction.if ( Ball_Pos_X <= 1 || Ball_Pos_X >= 63 ) {Ball_Dir_X = Ball_Dir_X * -1;Sound_Bounce();}// checks if the ball has hit the ceiling or the player paddle, and inverts the movement direction.if ( Ball_Pos_Y <= 16 || Ball_Pos_Y >= 127) {Ball_Dir_Y = Ball_Dir_Y * -1;Sound_Bounce();}if ( Ball_Pos_Y == 110 && Ball_Pos_X >= player_x && Ball_Pos_X <= player_x + player_width && hasStarted == true) {Ball_Dir_Y = Ball_Dir_Y * -1;Lives -= 1;Sound_Hit();}if (Lives == -1) {Game_Over();}display.display();}void Draw_TitleScreen() {// rotate display 90 degrees to match physical orientation. //display.setRotation(1);// top bardisplay.fillRect(0, 0, 64, 14, WHITE);// outlinedisplay.drawRect(0, 0, 64, 128, WHITE);display.setTextSize(2);display.setTextColor(WHITE);display.setCursor(4, 20);display.println("ANTI");display.setCursor(4, 40);display.println("PONG");display.setTextSize(1);display.setTextColor(WHITE);display.setCursor(18, 100);display.println("Press");display.setCursor(18, 108);display.println("Start");tone(Buzzer, 200);delay(500);noTone(Buzzer);}void Draw_Court() {// top bardisplay.fillRect(0, 0, 64, 14, WHITE);// outlinedisplay.drawRect(0, 0, 64, 128, WHITE);// display.setTextSize(2);// display.setTextColor(WHITE);// display.setCursor(4, 20);// display.println("Dodge");// display.setCursor(4, 40);// display.println("That");// display.setCursor(4, 60);// display.println("Ball");}void Sound_Bounce(){if (hasStarted == true) {tone(Buzzer, 500, 50);}}void Sound_Hit(){if (hasStarted) {tone(Buzzer, 800, 50);}}void Draw_Lives() {display.setTextSize(1);display.setTextColor(BLACK);display.setCursor(3, 5);display.println("Lives:");display.setCursor(45, 5);display.println(Lives);}void Game_Over() {display.clearDisplay();display.drawRect(0, 0, 64, 128, WHITE);display.setTextSize(2);display.setTextColor(WHITE);display.setCursor(4, 10);display.println("You");display.setCursor(4, 30);display.println("Lost");display.setTextSize(1);display.setTextColor(WHITE);display.setCursor(4, 100);display.println("Back to");display.setCursor(4, 108);display.println("Menu....");display.display();display.drawRect(0, 0, 64, 128, WHITE);delay(3000);display.clearDisplay();Draw_TitleScreen();hasStarted = false;Lives = 3;} Step 3: Circuit Image of the the circuit for this project. I decided to remake the circuit in photoshop as the digital version wasn't the best for legibility. Step 4: Case As mentioned earlier I was going to use a resin (SLA) printer to make the case for my project. Initially I had planned to make a top and bottom half of this case but I simply loved how the bare PCB looked, so I ended up scrapping the top portion of the case. As I'm quite inexperienced with cad programs I opted to use the 3d modelling and animation software maya to build my case. While this software is way less precise and makes it harder to get measurements, this case was simple enough to get by with using maya. See "4" for the model in maya. After maya I imported the model in the slicer program Chitubox ( which came with the printer ), added supports and sliced it to make it ready for printing. See "5" for the model in Chitubox. The print took roughly 7 and a half ours to finish, so I decided to print it overnight to save on the power bill. After the print finished, I took it out of the printer and saw some of the corners were slightly bend as a likely result of improper supports. Luckily with this being a plastic case, this can be easily remedied with hot air and bending it into shape after it has gotten hot See "6" for the case straight out of the printer. after a bit of bending back and some test fitting, the parts fit perfectly together. See "7" for the result. Due to the weird refresh rate of the screen the screen appears off on photos, this however is fine in real life. Step 5: Soldering Soldering proved quite a lot more doable than I initially imagined. The screen has a few tiny connectors, but these are fairly well spaced out. The only issue I found was that there are simply not enough ground ports on the Arduino Uno itself, so you're going to have to be a bit creative. One fortunate thing about the ground wires is, that they can all be soldered together, I soldered all the ground wires together at one central spot, the display, and then looped them back into the ground pin on the board. In the supplies section I mentioned the importance of jumper wires with bendable tips, if the tips are not bendable the board will simply not fit inside the case and the wires itself will be rather lose in their sockets. See "8" for the soldering result. After the soldering is done, first mount the USB-A in the slot closest to the bottom (on the left hand side) so its stuck in place, after that just fit the PCB in place and you're ready to go. Step 6: Polishing While the case, straight out of printer, looks fairly representable, I personally really wanted it to be white to match the orange PCB. I started with sanding with 400grit sandpaper to roughen up the extremely smooth surface of the printed model and smooth the hard edges, then used primer and eventually white spray-paint to paint the case. This step is not at all required but makes the case look a lot nicer to hold and look better aesthetically. // caution // Even though the model was UV-cured always take safety precautions, there is a lot of really fine resin dust floating around after you sand it. wear a mask. Step 7: Gameplay https://youtu.be/rEaU1wzsipg The actual use of the console is fairly self explanatory. The game prompts the user to press start to start the game, after which the player will have 4 lives ( 0 counts as a life ) to try and survive as long as possible dodging the bouncing ball. The game will end when all lives are lost and will automatically return to the home screen. There are 3 buttons on the device itself. The middle of the three buttons serves as a start button, and after the game has started the left and right button will be used to control the player paddle ingame. Step 8: Final Thoughts This was a super fun project to work on, this isn't something that normally interests me at all but I've learnt a lot of new skills and technics to use on future projects. Furthermore I'm super pleased with the end result, its fairly compact, easy in use and really expandable. I will definitely iterate on this project in the future in one way or another. Source: ITTT || ARDUINO-UNO || ANTIPONG CONSOLE ### SCIENTISTS DEVELOP SAFER LEAD-BASED PEROVSKITE SOLAR CELL STRUCTURE Researchers at Northern Illinois University and the U.S. Department of Energy’s (DOE) National Renewable Energy Laboratory (NREL) in Golden, Colorado, reported in the journal Nature on a potential breakthrough in the development of hybrid perovskite solar cells. Considered rising stars in the field of solar energy, perovskite solar cells convert light into electricity. They’re potentially cheaper and simpler to produce than traditional silicon-based solar cells and, on a small scale in laboratory settings at least, have demonstrated comparable efficiency levels. But key challenges remain before they can become a competitive commercial technology. One major challenge is the use of lead. Most top-performing hybrid perovskite solar cells contain water-dissolvable lead, raising concerns over potential leakage from damaged cells. Led by Tao Xu of NIU and Kai Zhu of NREL, a team of scientists has developed a technique to sequester the lead used to make perovskite solar cells and minimize potential toxic leakage by applying lead-absorbing films to the front and back of the solar cell. The lead toxicity issue has been one of the most vexing, last-mile challenges in the perovskite solar cell field,” said Xu, an NIU professor of chemistry. “We think we have a highly promising remedy to this problem—and it could be a game-changer. “In the event of a damaged cell, our device captures the great majority of the lead, preventing it from leaching into groundwater and soils. The films that we use are insoluble in water. Under conditions of severe solar cell damage in a lab setting, the lead-absorbing films sequestered 96% of lead leakage, the scientists said. Their experiments further indicate the lead-absorbing layers do not negatively impact cell performance or long-term operation stability. Perovskite solar cells are so named because they use a class of crystal structures similar to that found in the mineral known as perovskite. The perovskite-structured compound within these solar cells is most commonly a hybrid organic-inorganic lead halide-based material. Read more: SCIENTISTS DEVELOP SAFER LEAD-BASED PEROVSKITE SOLAR CELL STRUCTURE ### Emotidora: Hats with Emotions using Arduino This project, Emotidora, will help a user express his/her emotions about events in day-to-day life. Weve all been in situations where something very exciting or unfortunate has happened to us and we want to share it with other people. This usually involves the expression of some emotion through visual cues, and when prompted by a peer, it can lead to expressing the situation/emotion. Emotidora enables people to wear their emotions on their head. It allows people to share how they will know how they feel and it can lead to more natural self-expression and conversation. Additionally, the person can change their hats emotion at any time and can also transfer the emotion to another (feeling happy, but your friend is feeling sad? transfer your emotion!) Ideally, the hat will do the following: 1) When a person feels a certain way, he/she can display a corresponding emoticon on the hat by using a variable resistor, a potentiometer, to switch the emotion on the hat given six options: ecstatic, happy, straight-face, sad, anger, and surprise. 2) Interaction with another person that is wearing a hat is possible if they come close enough that an infrared communication is made between the hats (i.e., they will know that they are in proximity and will allow more interaction to take place). a) Another user patting your hat’s roof in a caring way would be able to change the emotion on your hat by stepping it up a level. Say you were feeling ’straight-faced’ and much of anything at the moment. A tap on the hat by another Emotidora user will now more your emotion from ’straight-face’ to ’happy’ because you’ve been cared for. b) The other interaction that is possible is through a hug, another caring gesture. Hall-Effect sensors (that detect magnetic fields) are placed on opposite sides of each hat. Magnets are on either side of the sensor. When both people hug and the hall-effect sensor on each comes in contact with the magnets on the other hat, your current emoticon gets happier as well. Step 1: What you Will Need -2 Arduinos -2 photoresistor sensors -2 1K ohm resistors -2 Hall effect sensors -4 magnets -2 100 ohm resistors -10 330 ohm resistors -66 LEDs (27 of one color, 6 of another)x2 -solder -soldering iron -electrical wire -electrical tape -solderless proto-board -scissors -5V (up to 9V) battery Step 2: Constructing: The Emoticon Face The first step to Emotidora is to create the emoticon face that will be displayed on the front face of the hat. The face can be in any design you want, but ideally it should be able to incorporate all of the combinations of smiley faces that you want in the hat. The faces that we wanted to show are 6: ecstatic, happy, straight, sad, anger, suprise. The figure 1 shows the way that we built our emoticon face and every face that is displayed on it. Take your 33 LEDs and your 5 330 Ohm resistors. And hook up all of the LEDs in parallel for each row of the smiley, with the longer lead of each LED in line with the 330Ohm resistor as it connects to +5V, which in our case is output by the pins of an arduino. Do as shown Figure 2, on a breadboard. Remember that the LED is a diode, and the longer end of the LED should be connected to the resistor. This resistor is connected to our arduino pins (2-6) which output a 5V signal when they are turned on. The shorter end of the LED must be connected to ground. Now in order to switch between the smileys, we need to program the arduino to be able to take each different face as a ’FaceCase’, where it will turn on the row of LEDs based on which FaceCase that it is given. To do this, we can write a ’switch case’ program in C for the arduino, with each case (each smiley) telling the arduino which pins to turn on (which LEDs to light up). The table below shows which pins should be turned on for each smiley face. Major Components in Project-2 Arduinos -2 photoresistor sensors -2 1K ohm resistors -2 Hall effect sensors -4 magnets   Fore more detail: Emotidora: Hats with Emotions using Arduino ### Programmable driver runs motors quietly Dedcription The MTD6505 device is a 3-phase full-wave sensorless driver for brushless DC (BLDC) motors. It features 180° sinusoidal drive, high torque output and silent drive. With the adaptive features, parameters and wide range of power-supplies (2V to 5.5V), the MTD6505 is intended to cover a broad range of motor characteristics, while requiring minimum external components. Speed control can be achieved through either power supply modulation (PSM) or pulse-width modulation (PWM). The compact packaging and the minimal bill-of-material make the MTD6505 device extremely cost efficient in fan applications. For example, the CPU cooling fans in notebook computers require designs that provide low acoustic noise, low mechanical vibration, and are highly efficient. The frequency generator (FG) output enables precision speed control in closed-loop applications. The MTD6505 device includes Lockup Protection mode to turn off the output current when the motor is in a lock condition, with an automatic recovery feature to restart the fan when the lock condition is removed. Motor overcurrent limitation and thermal shutdown protection are included for safety enhanced operations. Features 180° Sinusoidal Drive, for high efficiency and lowacoustic noise Position Sensorless BLDC Drivers (No Hall-effect sensor required) Integrated Power Transistors Supports 2V to 5.5V Power Supplies Programming Resistor (RPROG) setting to fit motor constant (Km) range from 3.25 mV/Hz to 52 mV/Hz Direction Control: - Forward direction: connect DIR pin to GND or leave floating - Reverse direction: connect DIR pin to VBIAS Speed Control through Power Supply Modulation (PSM) and/or Pulse-Width Modulation (PWM) Built-in Frequency Generator (FG Output Signal) Built-in Lockup Protection and AutomaticRecovery Circuit Built-in Overcurrent Limitation Built-in Thermal Shutdown Protection No External Tuning Required Microchip has added to its range of sinusoidal, sensorless, 3-phase BLDC fan motor drivers with its first standalone, resistor-programmable driver. The driver enables the selection of multiple back-EMF coefficient ranges, a feature which allows engineers to design for a variety of 3-phase BLDC fan characteristics with a single device. The MTD6505 device’s 180-degree sinusoidal drive is designed to support energy efficiency, and with low acoustic noise and mechanical vibration. Being a sensorless driver has no need for an external Hall-Effect sensor. On-chip protection features include thermal shutdown, over-current limiting and lock-up protection. It comes in a 3×3 mm UDFN package with a 0.5 mm thickness. For more read: Programmable driver runs motors quietly ### PCBWAY.COM MANUFACTURER REVIEW Printed circuit boards are an important part of electronic products and the ability to get them fabricated in time and at good quality and price, is key to ensuring the product stays on schedule with the time to market plans. The process of getting them done on time, and at the right quality, however, requires a PCB manufacturer with the tools, experience, and support required to deliver as specified. This requirement and the possible impact of failure makes the process of selecting a PCB manufacturing partner a very important and difficult task as there are tonnes of PCB manufacturing companies (including resellers posing as manufacturers) out there and the process of verifying them, can be tedious. To help with this, we review PCB manufacturers from time to time, and today, we will review one of the most formidable names in the PCB manufacturing Industry: PCBWay. We will cover their process, capacity, offerings/packages and every other thing we feel you may need to make decisions about their services. Located at the heart of the World’s manufacturing capital; Shenzhen, PCBWay has been delivering high-quality complex PCBs using state of the art machines and equipment since its establishment over a decade ago. They have served as a reliable PCB Manufacturing partner for several small or large run projects across diverse sectors, from IoT and Smart devices to medical, Industrial and Open source/DIY communities. Running one of the most equipped factories in the world, PCBWay makes different types of PCBs ranging from the regular FR4 PCBs to flexible PCBs, SMD stencils, and more advanced, high precision PCBs. They have the capacity to make up to 14 layers PCB (depending on the type of PCB) with different materials from FR4 to Aluminum. More information on their PCB capabilities and equipment specifications can be found on their service description page. Being a domain leader who understands electronics manufacturing and the headaches involved, PCBWay also runs an In-house PCB Assembly service (PCBA), which ensures the project can be completed under one roof with fewer worries. The PCBA service specializes in prototyping and small-volume production, making them the ideal partner for the R&D stage of product development. The PCBA service also helps eliminate supply chain worries as PCBWay maintains a relationship with suppliers across the world, through which they get access to all types of components including the “hard-to-find” components. More information on the PCB Assembly service is available here. Read more: PCBWAY.COM MANUFACTURER REVIEW ### The Edison is not a Raspberry Pi The above dimensions and prices reflect the Edison with the mini breakout board. I’ve been watching lots of comment channels regarding the Edison, and I see a lot of people slamming the Edison as compared to the Raspberry Pi over a few of the lines above: lack of USB (“Where am I going to plug in my keyboard and mouse?”) lack of video processor speed cost the I/O connector is impossible to use without an extra board All five of those points would be valid criticisms if the Edison were a single board computer like the Raspberry Pi. The Raspberry Pi is, and always has been, aimed at providing a low-cost computing terminal that can be deployed to as a teaching tool. Any hardware hackability on the platform has been purely incidental, a bonus feature. The Edison, on the other hand, is meant to be a deeply embedded IoT computing module. There’s no video because your Wi-Fi enabled robot doesn’t need video. There’s only one USB port because wearables don’t need a keyboard and mouse. The processor speed is lower because for portable applications power consumption is important (and you can see above just how much better the Edison is than the Raspberry Pi on that front). As for cost, yes, the Edison loses big time, until you add the cost of an SD card, a Wi-Fi dongle, and a Bluetooth dongle. That brings the prices much closer to parity, although still definitely not equal.   For more detail: The Edison is not a Raspberry Pi ### Pseudo Perpetual Spinning Top You must have seen many magic tricks and wondered how it works so, here's another one but you don't have to figure out how it works. I will show how it works (Spoiler - It uses magnets and some electronics) and how you can make one yourself. https://youtu.be/3NUuXq4e0bo This magic Spinning Top rotates forever and you may think it is perpetual motion but it isn't so I call it Pseudo Perpetual Spinning Top Supplies Components Attiny8549E Hall SensorLiPo BatteryTP4056 Battery Protection and Charge Circuit3.3V to 5V Boost ConverterSPDT SwitchUSB-ASP AVR Programmer Software Arduino IDE Hardware 3x5mm Round Neodynium MagnetElectromagnet(Buy or Make one yourself - Detail in Step)34-37 Guage Enamel Copper Wire2mm Non-Metallic RodSome 3D Printed PartsSandPaper for sanding 3D Printed Parts3D Printer (Optional)DoubleSided TapeGlue Gun Step 1: Science Behind the Magic The perpetual top uses a few permanent neodymium magnets which lie inside the spinning top and an electromagnet that resides in the base i.e., the platform on which the spinning is rotating, and a Hall Effect Sensor that detects the polarity of the magnet in the spinning top and triggers the Electromagnet. You can see this in the animation above; as soon as the North pole(Red) appears above the Hall Effect Sensor, it triggers the polarity of the Electromagnet such that the South Pole(Blue) is on the top side of the Electromagnet so that it will attract the spinning top and this gives a bit of acceleration to the spinning top. This triggering happens twice every rotation, one for the NorthPole and one for the South Pole, and that's how the spinning top gains enough stability to rotate forever (or as long as the Electromagnet's polarity keeps on changing on time). Step 2: Electronics and Circuit The Circuit and the PCB for this project s designed in the Eagle CAD. Attiny85 is used to read the value from the Hall Effect Sensor and a Motor Driver L9110S to drive the Electromagnet Coil in both Polarity. This Circuit runs from a Lipo Battery so a Boost Converter is Used to step up the voltage from 3.2-4.2V from the battery to 5 V required for the Circuit and the Coil. Apart from the Circuit TP4056 Lipo Protection and Charge Circuit is sued to charge and safely discharge the battery. Step 3: PCB Manufacturing From PCBWay.com After creating the schematic and board design, rather than troubling myself with homemade PCBs, I generated the Gerber File (you can download it from this link) and ordered from the quick PCB Prototyping service of PCBWay.com. Ten pcs of professional-made PCBs arrived at my home within a few days. Step 4: Electromagnet You can buy an Electromagnet or even a wound one for yourself. You will require enameled copper wire of 34-28 Guage ( I used 35 Guage). Then I printed some stoppers that I put over the rod, so the coil is wound within a given range. To quickly wound the coil, I used a small geared motor that has good torque and attached a chuck to hold the coil rod and wound the coil approximately 10 meters in length. The resistance of the coil after the wounding comes out to be 11Ohms. Step 5: PCB Assembly Start With the soldering of SMD parts first then move the Through Hole parts. there are Pads for Battery connection and Electromagnets. For the Boost Converter, you can use the special 3.3v to 5V Step-Up Converter which comes in 3 Pin configuration or you can use the standard boost converter and attach the input pin to Vin, ground to GND, and output to Vout. Just make sure the boost converter can supply at least 500mA. Step 6: Attiny85 Programming If Attiny Boards are not installed in the Arduino IDE then first install the ATTINY Boards in the IDE through this link After the Arduino Boards are installed then upload the code using USB-ASP AVR Programmer or Arduino Uno. you can program the IC using the ISP Connector on the PCB or you can program it alone and then install it on the PCB. Step 7: 3D Print The 3D Model for this project is designed in Fusion 360 and there are four parts needed to be 3D Printed for the enclosure and the spinning top which will be holding the permanent magnets. All the parts are listed below and I have also included the Fusion 360 File which you can tweak to your needs if required. Step 8: Spinning Platform Preperation The Spin Platform is a curved platform and the curve is provided so the spinning top can rotate in a given region where it is in range with the sensor as well as the electromagnet. and it is recommended to print it at will 0.1mm layer height for better results. After printing the platform you can use sandpaper to smooth out the layers and create a seamless transition between the layers so the spinning top can rotate feeling on the base. Step 9: Spinning Top Assembly The Spinning top will require 8 neodymium magnets. 4 magnets on each side of the spinning top, and the polarity of the magnets will be opposite on the other side as can be seen in the image/animation where blue is the SouthPole and Red is the NorthPole. After adding the magnets in the holes cover it using the top part which will act as a handle for the spinning top to rotate. Then add a 2mm pointed rod into both the parts. If the rod feels loose then use some adhesive like super glue or a glue gun. In the animation, only 4 magnets are been shown but you can add more to increase the magnetic strength so the top position can be easily sensed by the Hall Effect Sensor. Step 10: Assembly Animation This animation is just for your reference to show what will go where during the assembly. Step 11: Solder Batteries and Switch After assembling the PCB, we need to solder the battery, Switch and the electromagnet to the PCB before the final assembly Step 12: Final Assembly First, attach the hall Effect Sensor to the bottom of the Spin Platform such that its sensing part is near to the center of the circular base using double-sided tape and Then attach the PCB to the enclosure body in the given position and secure it using a glue gun or double-sided tape. Then connect the electromagnet, battery, SPDT On/Off Switch, and TP4056 Charge Circuit to their respective position. Electromagnet First, attach the electromagnet temporarily to the body as its position needs to be adjusted in order to find the optimum position according to the electromagnet and neodymium combination used by you. It is a little Hit and Trial method where you need to find the position where the rotation of the spinning top is the best. Then finalize that position and secure it using a glue gun. Step 13: Show the Magic You are ready to show the trick to your friends and family and see their reactions. It can be a fantastic showpiece on your table. If you made it, do share it below and if you face any issues during the build, send me a message. I'll love to help you out. Source: Pseudo Perpetual Spinning Top ### WAVEbuoy using Arduino The WAVEbuoy is a arduino lamp connected to the internet that displays the current wave height of any of the National Data Buoy Centre's wave buoys. This lamp is currently connected to the Sevenstones Lightship buoy that gives an indication of swell approaching Cornwall in the UK. The lamp can also be connected to any surfing location covered by magicseaweed.com RED - High surf alert GREEN - Medium swell BLUE - Low swell Parts needed: Arduino UNO & Ethernet shield Light bulb like this one Link 3 Colour RGB SMD LED Module Link Breadboard Jumper wires The case....its up to you how you encase it. Im a carpenter by trade and i had the ability to use some scrap pieces of oak. You could house it in all sorts of ready made boxes or lamps. The white dome on top is a lightbulb that i have cut in half. Step 1: Build the circuit Its a very simple circuit using 2 RGB modules and 3 resistors. Just follow the diagrams. If you need the fritzing file let me know. I know i could improve this by using a PCB, but i just sawed off a small section of the breadboard and stuck it in the oak case.   For more detail: WAVEbuoy using Arduino ### Arduino Keyboard and Mouse Control Code This example illustrates the use of the Mouse and keyboard libraries together. Five momentary switches act as directional buttons for your cursor. When a button is pressed, the cursor on your screen will move, and a keypress will be sent to the computer. Once you have the Leonardo programmed and wired up, open up your favorite text editor to see the results. NB: When you use these libraries, the Arduino takes over your computer's keyboard and mouse! Software Required Any text editor Circuit image developed using Fritzing. For more circuit examples, see the Fritzing project page Schematic Code /* KeyboardAndMouseControl Controls the mouse from five pushbuttons on an Arduino Leonardo or Micro. Hardware: * 5 pushbuttons attached to D2, D3, D4, D5, D6 The mouse movement is always relative. This sketch reads four pushbuttons, and uses them to set the movement of the mouse. WARNING:  When you use the Mouse.move() command, the Arduino takes over your mouse!  Make sure you have control before you use the mouse commands. created 15 Mar 2012 modified 27 Mar 2012 by Tom Igoe this code is in the public domain */ Major Components in Project Hardware Required Arduino Leonardo or Arduino Due board breadboard Five pushbuttons Five 10-kiloohm resistors For more detail: Arduino Keyboard and Mouse Control Code ### Remote Controlled Car Using Cardboard Every maker at least once make or tries to make RC Car. RC Cars are widely available yet the joy of playing with the one you made yourself can't be compared with the bought one. So I decided to make a Wireless RC Car with the easiest available material i.e. Cardboard. No need for a 3D Printer, just grab some scrap Cardboard, a cutter & some glue, and let's build our own RC Car. https://youtu.be/cNNA54Kru6Q Supplies Components 2 x 18650 Batteries1 x Lipo Battery1 x 18650 Battery Holder2 x On/Off switch2 x Joystick4 x 6V Motors2 x Arduino Nano6 x Screw Terminal2 x HC-12 Transceiver Module1 x 7805 voltage Regulator4 x L9110s Motor Driver IC1 x 3V to 5V Boost Converter 3Pin ICFemale Header Pins Software Arduino IDE Hardware Double-Sided TapeGlueCutterScaleWiresSoldering Iron Step 1: Circuit Designing I have designed the Circuit in AutoCAD Eagle CAD. The Circuit is designed in such a way the same PCB could be used for both transmitter and receiver of the RC Car. The Motor Driver used is an L9110s controlled by Arduino Nano The Telemetry module of choice is HC-12 as it works on UART and is quite easy to use. In the Receiver board i.e. the board which is used by the RC Car will contain the motor driver and Arduino but not the joystick and the PCB Board on the Transmitter Side i.e. on the Remote Controller will be populated with Joystick whose pads are on the back side of the PCB. Step 2: PCB Manufacturing After creating the schematic and board design, rather than troubling myself with homemade PCBs, I generated the Gerber File (you can download it from this link) and ordered from the quick PCB Prototyping service of PCBWay.com, and within a few days 10 pcs of professional-made PCBs arrived at my home. Step 3: PCB Assembly Assemble the PCB for Reciever as well as Transmitter both will include Arduino Nano and HC-12 Module. HC12 Module will lie in between the Female Header pins of the Arduino Nano, so make such you attach the Header Pins first, and before soldering the header Pins, insert the HC-12 Module to space out the Header, then solder the female header Pins and HC-12. Otherwise, it may be difficult to insert the HC12 Module later in between the Header Pins. Then solder the SMD Components such as Motor Driver, Resistor, LED, and in the end add Through Hole Components such as Screw Terminal, Capacitor, and 7805 Regulator for Receiver side and 3V to 5V Boost Converter IC for the Transmitter side PCB. Step 4: Motors Preparation To attach the motor to the cardboard, i.e., to the side panel of the RC Car body, we will first wrap a strip of cardboard to the motor round section and thicken its border and create a surface upon which glue can adhere. To attach the stip, first, add a layer of double-sided tape. Then stick the stip of cardboard to the double-sided tape. Then use white glue to stick further layers of cardboard and make the overall radius up to 25mm. While the glue is drying, you can bind a rubber band around it, so the cardboard doesn't peel away. Step 5: Motor Mounting on Side Panel For the side panel, you can cut two strips of 28mm and a hole of 5mm at both ends. The DXF file for the side panel is attached below. You can take a printout of this DXF file for reference. After the motor strips are dried, stick those upon this panel using white glue and secure them using some clips while it is drying. After the motor's stips are dried, attach the wires to the motors. Step 6: Preparing Wheels To Make the Wheels we are going to stack 4 layers of cardboard cut in a circular shape. Each Cardboard Layer is 4mm leading to 16mm of Wheel Base. Out of 4 layers, 3 layers will contain Hole and one will be without a hole and it will be used as the base i.e. the outer surface. Later we will attach the motors to this hole. Use some white glue to stack 4 layers of cardboard and let it dry. Make 4 such wheels. Step 7: Finalizing the Wheels After the Wheels are dried we can attach some outer ridges to the wheels for better aesthetics. to create the ridges take stips of corrugated cardboard pealed in one layer. Remote the corrugation from the end of the cardboard strips. Now use some white glue to stick the strips to the wheels as shown in the images above. Tie any wire or thread around the wheel to secure the stips to the wheels while the glue is drying. Step 8: Preparing the RC Car Body To prepare the body of the RC Car, we will take a 40cmm X 9 cm strip of corrugated Cardboard and wrap it around the side panel we created in the steps above. Before attaching the side panels, add a rectangular piece of the same corrugated Cardboard as a base for the electronics we will be adding later. Then place the Motor Side Panel on both sides of the strip. Use white glue to secure the body to the side panel. Use some extra cardboard strips with glue to attach the base to the side panel. Make sure the body is securely attached to the side panels. Create a cut on the upper flange so it can be closed by inserting on the top. Step 9: Adding Control Electronics to RC Car When the Body is complete we can move to add the electronics to our RC Car. First Attach all the Motors Wires to the PCB. Make sure left side Motors are attached to MD1 and MD3 and right side Motor to MD2 and MD4. Then Attach the Battery Holder in Series with the On/Off Switch and then Attach it to the Vin and GND Terminals on the PCB. After that insert the Holder and PCB inside the RC Car Body. Secure them using some double Sided Tape. Step 10: Adding the Wheels Place the wheels on the table and add some glue gun near the hole and then insert the Motor shart into the hole and hold the body upright until the glue gun is stiff. Repeat the same on the other side. Step 11: Programming the RC Car Programming the Arduino Nano will be the easiest step out of all the steps. Just grab a mini USB cable and upload the code provided below into the microcontroller. The only library you will need is Software Serial which is mostly preloaded with the Arduino IDE. Step 12: Enclosure for the Remote Control For the Remote controller, we will use a base in the shape of a Joystick and attach a corrugated stip on the edges of the shape. To attach the stip first attach some semi-peeled strips of a corrugated sheet to the base as can be seen in the image above. Then with the help of these semi-peeled sheets attach the main strip to the border of the base. Use some clips to secure them together until the glue dries. Step 13: Circuit for Remote Control Connect the Two Joysticks to the Arduino Boards. The pads for Joystick are on the back of the PCB. To make the connectors for the joystick I use 5 Pins female headers and solder wires of 10cm to it. Step 14: Assemble the Remote Control As the base is prepared it's time to add the electronics and cover it. Place the Electronics over a foam sheet so it will help reduce the vibration while using the joysticks and also help in easily placing and securing the components in the body. Then place the Components inside the body and attach the battery and switch. There is a hole on the top cover for the On/Off Switch and the HC-12 antenna. Step 15: Programming the Remote Control Programming the Arduino Nano will be the easiest step out of all the steps. Just grab a mini USB cable and upload the code provided below into the microcontroller. The only library you will need is Software Serial which is mostly preloaded with the Arduino IDE. All the pins are defined on the top of the Code and change them as it suits you to change the direction and rotation of the motor. Step 16: Play Time Now that everything is prepared....it's PlayTime. Go and enjoy the ride with your self make RC Car. If you made this project do share it below and if you face any issues during the build message me, I would love to help you out. Source: Remote Controlled Car Using Cardboard ### Arduino ADK LED Lighting Have you ever wanted to control electronics with your smartphone?  The Arduino ADK (Android Development Kit) is the Arduino Mega with a built in USB host device, ready for your smartphone to be plugged in!  We'll make a simple introductory project with a few LED strips and a relay (to control the high voltages of the LED strip).  For this project, you will need no Android programming experience (or even learn how to code Android!), but a moderate Arduino code understanding.  We'll use the easy Handbag app for Android. This Instructable will cover how the Arduino ADK works, how to use it with Android devices, and how to make a cool example project of lighting up LED strips with Android!!! Please vote for me in the Make to Learn Youth Contest and Lamps and Lighting Contest!!!  Every vote counts! What did you make? I made a tutorial on the Arduino ADK, which I found little documentation on in the past.  I wanted other people to learn all about the Arduino ADK easily, once they got one and didn't know how to use it.  The 'ADK in-depth' part of this Instructable is a compilation of many resources that I have found on the internet.  I also created an 'example project' in Step 4-8 to interface an LED strip (with a relay, which I have never worked with in the past) with the Arduino ADK, and an Android device.  The simple program uses the Handbag application and libraries (wasn't designed by me) to make a simple application menu for the Android to turn on/off the LED strip. How did you make it? I used many of my prior electronics and soldering skills, and some electronic components I have gotten in the past.  My parents gave me the LED strip last Christmas, and I got the Arduino ADK at Maker Faire Bay Area 2012, but didn't know what to do with it.  Later on, I looked online and found the Handbag application, and started coding in minutes.  Using only Arduino programming (which is the great part of Handbag, you don't have to write any Android code), I coded a simple application menu that activated the relay that switches the LED strips on and off. Where did you make it? I made the project mainly in my garage/hackerspace (Qtechknow Labs), where I teach many of my friends DIY electronics.  I also used my soldering iron and project desk.  I have gotten many of my soldering skills at booths at Maker Faire, and lots of my electronics skills around the internet!  I looked at Arduino.cc as well as Google Developers to get to know what the Arduino ADK was about, even though I didn't understand it at first. What did you learn? I learned all about the Arduino ADK, relays, and Android devices, all of which I had no experience with in the past.  I learned that everything fails at first, but you have to keep on trying to get it the way you want it.  I'm super excited that I now know all about the Arduino ADK, so I can design some more cool Android projects! Step 1: Parts and Tools The total cost of the parts is about $28.50, excluding the Arduino ADK and LED Strip. Tools: Android Phone (Check OS requirements) USB cable for Android Phone Soldering Iron Solder Wire Strippers Safety Glasses Safety Mask or Solder Fume Extractor Laptop Wire (only a little bit is needed) Step 2: Introduction to the Arduino ADK The Arduino ADK is basically an Arduino Mega with a built in USB host controller.  It has over 50 digital pins, 15 analog pins, and many more for communication.  It has a very fast processor with over 200kb of memory to store code!!!  In most programs, you use less than 15kb. The Arduino ADK can communicate with Android devices, or basically any USB slave (i.e. keyboard, mouse).  It has a MAX3421E that communicates with the ATmega2560 through SPI to transmit and receive data to the Arduino ADK. Some of these concepts might be a little confusing, but you don't have to understand them in full detail to make a simple Android app.   Major Components in ProjectParts: Arduino Mega ADK (Makershed, $85) USB-B Cable for Arduino ADK Programming (SparkFun, $4) LED Strip – 1M (you only need 2 feet; Adafruit, $20) 2N2222 Transistor (Digikey, $0.34) Relay SPDT (SparkFun, $2) Diode Small Signal 1N4148 (SparkFun, $0.15) 10K Resistor – 1/6W (SparkFun, $0.25) Half Size Breadboard (SparkFun, $6) 12V DC Power Adapter (SparkFun, $6) Jumper Wires (SparkFun, $4.50) For more detail: Arduino ADK LED Lighting ### The scope…from Hell Using Arduino What I asked for was a general purpose 5GSa/s 1GHz four-channel bench scope. What I got was a 1GSa/s 100MHz two-channel. Still, it is somewhat usable, and less expensive than a fancy temperature-controlled soldering station. But it has bugs – many bugs. I have been negotiating with the manufacturer to get a firmware update to fix these bugs. After five months, no results. This scope has been designed to accept firmware updates. Good planning. It needs them – desperately. ("Ship now and fix the bugs later. We have a schedule to keep!") Before listing all the functional problems, let me elaborate on what I actually like about this scope. The advertised bandwidth is 100MHz, but when feeding in a 300ps edge (ECL directly into the scope with a BNC-T 50 ohm terminator), the measured scope risetime indicates the bandwidth is more like 140MHz. Hurrah for the analog designers! The variable frequency digital filter function (highpass, bandpass, band-reject, and lowpass) works nicely on the display. Another extremely nice feature is the PC software that allows screen captures for reports and record keeping. It usually works, unless the scope goes to sleep (more on this later), and with a USB connection, capturing a screen image on your PC is a piece of cake. Beats the heck out of sneakernet. From here it goes downhill, rapidly. Those who wrote the operating firmware seem to have never used a scope. Those who wrote the user manual should have had it proofread and edited by someone competent in technical writing. There are many good features. It would be nice if they all worked properly, and so far I've barely scratched the surface. Bug 1a When using the math function, turning off the source channel(s) also turns off the math function. This should not happen according to the manual. There are many times one wants to see only the math trace. Workaround: Leave the source channel(s) on and turn down the display intensity. This dims both channels, but leaves the math function visible since it has no intensity adjustment. (A bug dressed up in a tux becomes a feature.) Bug 1b Turning the FFT function off, then back on, changes the vertical position of the FFT display by 30dB. This really should remain where set by the user.   For more detail: The scope…from Hell! ### Marblevator, Perpetual?, Cradle. "Marblevator, Pertual?, Cradle" like "Marblevator, Perpetual?, Version 2" and "Marblevator, Perpetual?" is not perpetual at all as it is simply another illusion. And like its predecessors it is a very quiet illusion with the only noise being that of the marble as it rolls back and forth in the cradle. I've incorporated an Arduino Nano 33 IoT in this model. The Nano software controls the illusion using two interrupt service routines activated by two infrared transceivers. When the ball bearing passes over an infrared transceiver, an interrupt is generated via the Nano input pin associated with the infrared transceiver, causing the interrupt service routine associated with the pin to be called. Each interrupt service routine utilizes the interrupt history of both interrupt service routines in order to detect downhill ball bearing motion. When downhill motion is detected, the software pulses an electromagnetic coil in order to accelerate the ball bearing up the other side of the track (as the model uses infrared transceivers to sense the ball bearing, it cannot be operated where an external source of infrared is present as that will flood the infrared transceivers thus render the model inoperative). https://youtu.be/ysQ3apH0HNw I've also included software that monitors the battery voltage via a resistor divider and analog input pin to put the Nano to sleep when the LiPo battery voltage drops below a specified cutoff level (9.6vdc). As usual, I probably forgot a file or two or who knows what else, so if you have any questions, please do not hesitate to ask as I do make plenty of mistakes. Designed using Autodesk Fusion 360, sliced using Ultimaker Cura 4.12.1, and 3D printed in PLA on Ultimaker S5s. One final note, I receive no compensation in any form for the design, parts and/or materials used in this model. Supplies Soldering iron and solder.One roll each of red, black, green and blue 28AWG stranded wire.Micromesh polishing sheets (1200, 1500, 2400, 3200).Sandpaper (120, 220, 400 and 600 grit).Thick cyanoacrylate glue.Double sided tape.Velcro.Heat shrink tubing. Step 1: Parts. I acquired the following parts: One Arduino Nano 33 IoT [ABX00027]One 11.1vdc 300mAh 3S 30C battery LiPo battery.One JST mating connector for the battery.One Gikfun EK1909 "magnetic levitation coil".Two TCRT5000 infrared transceivers.One FQP30N06L MOSFET.One 1N4007 diode.One 10kΩ resistor.One 2.7kΩ resistor.Two 1KΩ resistors.One M3 by 8mm cap screw.One 11MM diameter ball bearing.One M3 by 8mm cap screw. I 3D printed the following parts at .1mm layer height, 20% infill: One "Base.stl" with PLA support.Two "Bolt, Mount, Coil.stl".One "Bottom.stl".One "Mount, Coil.stl".One "Track.stl" with breakaway or PVA support (requires a dual extrusion 3D printer, see Cura image above). This is a precision print and assembly model using at times very small parts and in very tight spaces. Prior to assembly, test fit and trim, file, sand, etc. all parts as necessary for smooth movement of moving surfaces, and tight fit for non moving surfaces. Depending on you printer, your printer settings and the colors you chose, more or less trimming, filing and/or sanding may be required. Carefully file all edges that contacted the build plate to make absolutely certain that all build plate "ooze" is removed and that all edges are smooth. I used small jewelers files and plenty of patience to perform this step. After 3D printing "Base.stl" and "Track.stl" I carefully removed the support material using a flat jewelers screwdriver and needle nose pliers. The model also uses threaded assembly thus an M8 by 1.25 tap and die will assist with thread cleaning if necessary. Step 2: Board and Coil Mount Assembly. Referring to the included schematic diagram of the electronic design for this model, I assembled the board and coil mount as follows: Bent the MOSFET gate and source leads downward, then bent the drain lead up upward.Insulated the back side of the MOSFET heatsink tab with electrical tape.Inserted the 2.7kΩ resistor between pin A7 and GND of the Nano.Inserted the 10kΩ resistor on top of the 2.7kΩ resistor between pin A7 and Vin pins of the Nano.Soldered the previous two inserted resistors to the Nano and trimmed the leads.Attached the coil to "Mount, Board and Coil.stl" using the cap screw.Inserted the MOSFET from the underside into the Nano, gate pin to D3 and source pin to GND, drain pin upward.Snapped the Nano into the mount assembly.Positioned the MOSFET 3mm above the underside surface of the Nano, soldered the MOSFET gate and ground leads to the Nano, then trimmed the gate lead, leaving the source lead as is for soldering later.Wrapped one uninsulated coil wire tip around the MOSFET drain pin then soldered it.Wrapped the anode lead of the diode around the MOSFET drain pin then soldered it.Wrapped the remaining uninsulated coil wire tip around the cathode lead of the diode then soldered it.Slipped heat shrink tubing over the JST mating connector black wire, soldered the black wire to the MOSFET source lead, slipped the heat shrink over the soldered joint and applied just enough heat for the heat shrink to insulate the joint.Soldered the JST mating connector red wire to the cathode lead of the diode.Glued the red wire insulation of the JST mating connector to the mount for strain relief.Soldered a 60mm length of wire between the diode cathode to the VIN pin of the Nano.Carefully bent the MOSFET insulated source lead flat to the board.Glued the red and black wire insulation of the JST mating connector to the mount for strain relief. Step 3: Infrared Transceivers Assembly. Again referring to the included schematic diagram of the electronic design for this model, I assembled the infrared sensors as follows: Bent the first TCRT5000 anode lead over to the first TCRT5000 emitter lead, soldered the two leads together, then trimmed all the leads.Soldered a 1KΩ resistor to the first TCRT5000 anode lead.Soldered an 80mm length of red wire to the free end of the 1KΩ resistor then insulated the resistor solder joints with heat shrink tubing.Soldered an 80mm length of black wire to the first TCRT5000 emitter lead.Soldered an 80mm length of green wire to the first TCRT5000 collector lead then insulated the solder joint with heat shrink tubing.Bent the second TCRT5000 anode lead to the second TCRT5000 cathode lead, soldered the two leads together, then trimmed all the leads.Soldered a 1KΩ resistor to the second TCRT5000 anode lead.Soldered an 80mm length of blue wire to the second TCRT5000 collector lead then insulated the solder joint with heat shrink tubing.Positioned the first TCRT5000 assembly near the mount assembly, inserted its wires the into the first TCRT5000 hole in the mount assembly then routed them up through the second TCRT5000 hole in the mount assembly.Soldered an 80mm length of black wire and the black wire from the first TCRT5000 assembly to the second TCRT5000 emitter lead.Soldered an 80mm length of red wire and the red wire from the TCRT5000 assembly together, slipped a 20mm length of heat shrink tubing over the wires, soldered these wires to the second TCRT5000 resistor free end, slid the heat shrink tubing over the solder joint and applied heat to shrink it.Soldered the green wire from the first TCRT5000 to the Nano pin D10.Soldered the blue wire from the second TCRT5000 to the Nano pin D9.Soldered the black wire from the second TCRT5000 to the Nano GND pin.Soldered the red wire from the second TCRT5000 to the Nano 3.3V pin.Sanded the ball bearing rails on "Track.stl" starting with 120 grit sandpaper, followed with 220, 400 and 600 grit, then finely polished the rails using Micromesh 1500, 1800, 2400 and 3200 sheets.Carefully slid each TCRT5000 into the transceiver sockets in the track.Attached the track to the mount assembly using two "Bolt, Mount, Board and Coil.stl". Step 4: Software. I have included the Arduino file "MarblevatorCradle.ino" containing the software that will be downloaded into the Nano. The software is divided into four sections; setup(), loop(), InterruptServiceInfraredTransceiver1() and InterruptServiceInfraredTransceiver2(). The setup() function contains the initialization code. After disabling interrupts, the code assigns the pin used to drive the mosfet as a digital output and clears the output. Next the two infrared transceiver input pins are assigned and the respective interrupts attached. Finally the software sets the built in LED pin as an output, then enables interrupts. The loop() function contains code required to monitor battery voltage. The LiPo battery I used in this model does not have low voltage cutoff protection, so I've tasked the Nano loop() function with this responsibility. After declaring, initializing and calculating the various battery voltage parameters, a ten second delay is encountered. After the delay, the battery voltage a/d count is acquired and compared with the calculated cutoff a/d count. If the battery voltage falls below the cutoff, the Nano is put to sleep. Finally are the two interrupt service routines, InterruptServiceInfraredTransceiver1() and InterruptServiceInfraredTransceiver2(), each one associated with one of the infrared transceivers. When the ball bearing rolls over an infrared transceiver, the infrared transceiver collector output will go low causing that infrared transceiver's interrupt service routine to be called. After a delay, the interrupt service routine waits for the rising edge of the interrupt pin then determines whether or not to pulse the coil. At this point the global variable "bLastInfraredTransceiverSensorInterrupt" will contain one of three values; 0, 1 or 2. If 0, no interrupts have previously occurred indicating the model has just powered on thus the coil will be pulsed. If 1 and the current interrupt service routine is 1, or if 2 and the current interrupt service routine is 2, then the interrupt service routine was the previous interrupt service routine when the bearing was rolling uphill. A second interrupt in a row on the same interrupt service routine indicates the ball bearing is rolling downhill thus the coil will be pulsed. Whether the coil is pulsed or not, the software records the interrupt service sensor number in "bLastInfraredTransceiverSensorInterrupt" in preparation for the next interrupt. Step 5: Ball Bearing Travel Adjustment.The software includes the constant "COIL_ON_MICROSECONDS" that I set to 1600 microseconds (1.6 milliseconds). Depending on how well the track ball bearing rails were sanded and polished, this value may need to be decreased if the ball bearing travels too far (e.g. collides with the track end caps), or increased if the ball bearing does not travel far enough. To adjust the value of COIL_ON_MICROSECONDS, I perform the following steps: Place the track and mount assembly in a small vice and check for level and if not level, I level it.Connect the Nano to a USB port on my computer, download the software to the Nano, then disconnect the USB cable.Connect the battery to the assembly JST connector.Place the ball bearing at one end of the track and release it.Monitor the ball bearing movement.If travel adjustment is necessary, I unplug the battery, connect the USB cable to the Nano, change the value of COIL_ON_MICROSECONDS by 100 to 150, download the change to the Nano, disconnect the USB cable, reconnect the battery, then repeat as necessary.If the value of COIL_ON_MICROSECONDS becomes too large (exceeds 3000 microseconds of 3.0 milliseconds), I polish the track again as the coil may become warm enough to distort the mount assembly and/or track. I measured an average coil temperature rise over ambient room temperature (72 degrees) of the prototype model at about 2 degrees F (thus the coil temperature was 74 degrees F.). With a coil pulse width of 1.6ms, the ball bearing in the prototype model rolls just short of end cap to end cap, using a maximum current draw of 112mAh (during coil pulse), a minimum current draw of 10mAh (prior to placing the ball bearing on the track), and an average current draw of 25mAh (after 30 minutes of operation). Step 6: Final Assembly. For final assembly, after ball bearing travel adjustment. I performed the following steps: Unplugged the battery.Attached the battery to "Base.stl" using Velcro.Removed the bolts holding the track to the mount assembly.Carefully removed the TCRT5000 assemblies from the track sockets.Placed the mount assembly into "Case.stl" such that the TCRT5000 assemblies exited the track slot at the top of the case.Carefully inserted the TCRT5000 assemblies fully into the track sockets.Secured the track to the mount assembly and case with the two bolts.Plugged in the battery.Pressed the base assembly into the case assembly.Released the ball bearing from one end of the track. And that is how I 3D printed, soldered, adjusted and assembled "Marblevator, Perpetual?, Cradle." Source: Marblevator, Perpetual?, Cradle. ### Arduino Based Temp and Humidity Display The temperature in my office at work varies quite a bit depending on the time of day, season, and the whims of the other people I share the floor with. When I’m sitting at my desk shaking uncontrollably or sweating profusely it would be nice to know if it’s due to the temperature or just work related stress. A simple $5.00 thermometer would suffice, but where’s the fun in that? Making my own thermometer might cost ten times as much, but I might learn something in the process and it would be way cooler than any cheap store bought thing? I’d rather make something myself even if I have to pay a “maker’s premium.” Step 1: BOM Bill of Materials: DHT22 Temperature-Humidity Sensor + Extras (Aosong AM2302 + 10k 5% resister) Adafruit Perma-Proto Half-Sized Adafruit 0.56” 4-Digit 7-Segement Display w/I2C Backpack TE/Amp 28pin DIP Socket 1-390261-9 (optional) Molex 90 Degree 0.1” Header 1x6 22-28-8102 10k Ohm 5% Resister 5v Power Supply 2 x 0.1uF Ceramic Capacitor 2 x 22pF Ceramic Capacitor 16 Mhz Crystal Oscillator 2.1mm DC Barrel Jack Solid Core Wire Atmel ATMEGA328P-PU or Adafruit Atmel ATMega328P-PU (pre-programed w/Arduino bootloader) Tools: Soldering Iron Solder Adafruit Standalone AVR ISP Programmer Shield (or any other programmer for burning bootloaders to AVRs) FTDI USB Adaptor or FTDI USB Cable Step 2: Design The first thing to do is layout the placement of devices on the Perma-Proto board. This was the first time I've used Fritzing. Fritzing is an open-source electronics design application available for Windows, Mac OSX, and Linux. I chose to try it out on this project because I knew that Adafruit had a large Fritzing library of parts that included the Perma-Proto board. The software makes the layout of parts and connections on the Perma-Proto a snap. The Fritzing file can be downloaded along with the Arduino sketch from GitHub.   For more detail: Arduino Based Temp and Humidity Display ### Pixel Drop Ceiling using Arduino In our living room we have a small patch of drop ceiling right in the middle of the room, basically a giant piece of duct tape to cover up bad carpentry. It was constantly getting water damage from what looks like a giant hole in the ceiling above the drop tiles. After roughly a year of living in the house I decided to take action. The Pixel Drop Ceiling was born. The Pixel Drop Ceiling is a Bluetooth, Arduino powered, Computer controlled, RGB, Drop Ceiling. The perks of being controlled by the computer are that the whole system is music controlled and its easy to change and create your own patterns with little software know-how. You can then change these patterns on the fly without having to upload new software to the Arduino, allowing you to create your own "show" in essence. Step 1: Materials Stratford Translucent Ceiling Tiles Black Paint Arduino Uno R3 Arduino Proto Board HC-06 Bluetooth Transceiver 30mm WS2801 LED's 12V 5A Power source 2k resistor 1k resistor 2.1mm Power Jack When choosing Ceiling Tiles you don't have to go with the Stratford that's simply what I chose, just make sure that no matter what design of tile you get that you buy the translucent tiles, NOT the white tiles. The Translucent tiles are made purposely to put lighting fixtures above and they look amazing when you do so. Step 2: The Circuit The circuity is fairly simple, just make sure that you power the LED's externally using the 12V power source and you power the HC-06 using the 5V pin on the Arduino. The circuit is exactly the same as my previous Instructable the Bluetooth RGB Shelf Lighting, the only difference between the two is the firmware on the Arduino itself which I will explain in the next step. When wiring to the LED's its normally a good idea to make some sort of easy disconnect, you can see what I used in the pictures above. Step 3: Ceiling Assembly These ceiling tiles are very flexible so it makes for a very easy installation. For the half sized tiles on each side of the drop ceiling we simply held down the tiles with a straight edge and cut it with scissors, the lip around the edge gives you a little bit of tolerance for any mess up. As for the wires ran to the ceiling for the LED's I was "lucky" and had a giant hole in my ceiling that conveniently led straight to my room up stairs. The original drop ceiling grid was white but painting it black gave it much more of a "Grid" look, which in turn made for better looking separation between pixels. In order to mount the WS2801's I took the easy way out and simply used double sided mounting tape to stick them to the ceiling along with duct tape to hold up the wires, I wasn't too worried about harming the existing ceiling, because of the already present "Giant hole". When you mount them too the ceiling put them in some time of serpentine pattern. The matrix software will then compensate for what pattern you have them in and change the patterns as needed. Step 4: Arduino Software The software for the Arduino is quite simple, it receives incoming pixel data and lights the LED's accordingly. The guys over at SolderLab were kind enough to offer their sketch for the Uno and Mega Arduino boards. This sketch works with the Glediator and J!nx LED Matrix software, I will explain more in the next step. When using the Arduino Uno software at 500,000 BAUD you are limited to controlling 512 LED's, if you were to go with the Mega version the firmware is run at 1,000,000 BAUD allowing you to handle roughly 1024 LED's. Links to both the Uno and Mega Sketches are below. SolderLab's Sketches (You will have to change the BAUD as shown below if you use these!) Arduino Uno WS2801 Arduino Mega WS2801 Attached is my modified code w/ BAUD changes In order to use this software with Bluetooth integration a little work is required. The HC-06 cannot run at 500,000 BAUD, to fix this you need to modify the default BAUD rate on the Bluetooth transceiver as well as in the Arduino code. We'll mess with the defaults on the HC-06 in the next step. I've already made the necessary changes to Arduino code posted below, in case you don't want to use Bluetooth serial or your starting fresh with Glediator's sketch what you need to do is change this: ~~~~~~~~~~~~~~~~~~~~~~~~~~ //UART Initialization UCSR0A |= (1< 0% Error at 16MHz :-) <--Comment Out This Line UBRR0L = 16; <----- Add in this one ~~~~~~~~~~~~~~~~~~~~~~~~ What this does is it drops the incoming BAUD rate from 500,000 to 115,200, the max BAUD rate of the HC-06. Make sure that you change the header to your number of pixels as well, as seen below: #define Num_Pixels 28 Compile and upload! WS2801_Ceiling.rar1 KB For more detail: Pixel Drop Ceiling using Arduino ### Audio Visualizer With an LCD Display People love listening to music. It is as they say, music reflects our mood. And it is a spectacle to see music become 'alive' right before our eyes. Well, that's what music visualization does. According to Wikipedia, music visualization "generates animated imagery based on a piece of music. The imagery is generated and rendered in real time and is synchronized with the music we play." Music visualization is greatly seen on EDM concerts, where artists team up with VJs (or video jockeys) to create visual spectacles, that can attract and mesmerize the audience. This can be done with video editing and effects software such as Davinci Resolve Fusion and Adobe After Effects. However, this can also be achieved using hardware. In this Instructable we're gonna create a simple and easy-to-make audio visualizer using an Arduino UNO, a sound sensor or a microphone, and a 16x2 LCD display. So without further ado, let's get started Supplies Here are the list of components required for creating this project 16x2 LCD displayArduino UNO (or Nano)Two 1kΩ resistorsLM393 Sound Sensor ModuleJumper Cables and BreadboardA computer for uploading the code That's it. No other components are required. All the items are easily available on Amazon or any other shopping app. Or you can just go to your nearest electronics dealer to get your components. Step 1: Connecting Each Component Here are the following connections for both LCD and Sound Sensor Module to the Arduino UNO. This breadboard diagram was made on a software called Fritzing. I won't be going on too long with the technical details here, just where you need to connect and why. LCD Connections VSS and VDD to 5V and GND respectively, to power the LCD.V0 connected to a 1k resistor and then to GND. We are not changing the contrast of the LCD here, so the LCD will show the characters clearly.RS (Register Select) to pin 13. It is configured to give value HIGH so that Data Register is selected (you don't need to know what a Data Register does, just that it helps in transferring data to the LCD)R/W (Read/Write) to GND. We configure the R/W pin to value LOW so that we can write data to the LCD.E (Enable) to pin 12. This is used to latch (keep all the data coming from the Arduino to the data pins.pins D4-D7 are connected to pins 11 to 8 respectively. They are the data pins which will transfer data from Arduino to the LCD displayLED+ is connected to 1k resistor and then to 5V, and LED- to GND. This is for the LED backlight, which will cause the LCD display to glow. Sound Sensor connections The Sound Sensor Module detects the sound via a microphone and feeds into an op-amp (LM393-dual comparator). It has 4 pins VCC - Powered by +5VGND - GroundAnalog pin (AO) - Analog output connected to analog input of microcontrollerDigital pin (DO) - Digital output connected to digital input of microcontroller The four pins are connected to Arduino UNO as follows VCC to 5VGND to GNDAO to analog pin A0DO to nothing (here we are not using digital output) After following the steps exactly as mentioned, you are good to upload the program. Step 2: Uploading the Program The above image is the schematic of the circuit, also made on Fritzing. I have created a program for the same circuit. If you have followed the exact steps for building the circuit, you can upload the code directly to the Arduino Board, or you need to change some parameters according to your connections. Following is the code for my circuit. #include LiquidCrystal lcd(13,12,11,10,9,8); int soundsensor = A0; float t = 25; float t1 = 5; void setup() {   // put your setup code here, to run once: pinMode(soundsensor, INPUT); Serial.begin(9600); lcd.begin(16,2);   lcd.setCursor(0,0);   lcd.print("Audio Visualiser");   delay(2000); } void loop() {   // put your main code here, to run repeatedly: long sum=0; int sensorVal= analogRead(soundsensor);//Input from soundsensor Serial.println(sensorVal); for(int i=0;i<100;i++){   sum+=sensorVal; } sum=sum/100; /* here we are comparing the soundsensor values with the pre determined values (selected at random). If it goes above the pre dertermined value, the character will be displayed*/ if(sum>195){   lcd.clear();   lcd.setCursor(0,1);   lcd.print("#");   lcd.setCursor(0,0);   lcd.print("##");   delay(t);   } else{     lcd.clear();     lcd.setCursor(0,1);   lcd.print(" ");   lcd.setCursor(0,0);   lcd.print("#"); delay(t1); } if(sum>200){   lcd.clear();   lcd.setCursor(0,1);   lcd.print("##");   lcd.setCursor(0,0);   lcd.print("####");   delay(t);   } else{     lcd.clear();     lcd.setCursor(0,1);   lcd.print("#");   lcd.setCursor(0,0);   lcd.print("##"); delay(t1); } if(sum>205){   lcd.clear();   lcd.setCursor(0,1);   lcd.print("###");   lcd.setCursor(0,0);   lcd.print("#####");   delay(t);   } else{     lcd.clear();     lcd.setCursor(0,1);   lcd.print("##"); delay(t1); } if(sum>210){   lcd.clear();   lcd.setCursor(0,1);   lcd.print("####");   lcd.setCursor(0,0);   lcd.print("######");   delay(t);   } else{     lcd.clear();     lcd.setCursor(0,1);   lcd.print("##"); delay(t1); } if(sum>220){   lcd.clear();   lcd.setCursor(0,1);   lcd.print("#####");   lcd.setCursor(0,0);   lcd.print("########");   delay(t);   } else{     lcd.clear();     lcd.setCursor(0,1);   lcd.print("###"); delay(t1); } if(sum>230){   lcd.clear();   lcd.setCursor(0,1);   lcd.print("#######");   lcd.setCursor(0,0);   lcd.print("#########");   delay(t);   } else{     lcd.clear();       lcd.setCursor(0,1);   lcd.print("###"); delay(t1); } if(sum>240){   lcd.clear();   lcd.setCursor(0,1);   lcd.print("########");   lcd.setCursor(0,0);   lcd.print("#########");   delay(t);   } else{     lcd.clear();       lcd.setCursor(0,1);   lcd.print("##"); delay(t1); } if(sum>260){   lcd.clear();   lcd.setCursor(0,1);   lcd.print("############");   lcd.setCursor(0,0);   lcd.print("##########");   delay(t);   } else{     lcd.clear();       lcd.setCursor(0,1);   lcd.print("#"); delay(t1); } if(sum>280){   lcd.clear();   lcd.setCursor(0,1);   lcd.print("##############");   lcd.setCursor(0,0);   lcd.print("############");   delay(t);   } else{   lcd.clear();     lcd.setCursor(0,1);   lcd.print(" "); delay(t1); } Serial.println(sum); } You can also modify the code to obtain different results. Feel free to post your modifications in this Instructable If you have any problems in uploading the code from the code box, I have also attached the code file, which contains the same program as in the code box. Step 3: My Hardware Works! https://youtu.be/jtUPyxDADf8 I will explain the working in a simpler way. When music is played from the speakers, the microphone picks up the sound and sends it to the op-amp. The op-amp (or operational amplifier, if you didn't know that) works as a comparator (a device which compares two values and sends an output if one is greater than the other), and sends the output to the analog port in the Arduino UNO We can access the output values from the Serial Monitor for analysis and use the potentiometer (soldered in the module itself) to change the sensitivity (as per required). I have programmed these values in such a way that if the input goes above a certain value, the LCD will display the characters and it will increase in a bar like shape. The characters can be customized as per the user. Well, a person can understand only a little bit by explaining with words, so I have uploaded a video too. Step 4: Everything Has an End Congratulations for reaching this far! It is as they say, if there is a beginning, there will be an end, and this Instructable has to end (or else you will get really board reading this). And while this visualizer may not be perfect, it is simple and you can make it in 10 minutes (half an hour, tops). And hey, it is as they say, a simple solution may or may not be perfect. Now that I have shown you how the audio visualizer works, it is now up to you to build and modify the circuit. You can add another LCD display (just to give that visualizer feeling), or change it altogether (bigger the display, better the visualization). There are endless ideas for modification, and all of this can be saved for a later date. I hope that all of you enjoyed reading this Instructable. If you want more of these Instructables, please do share it with your friends and colleagues, and encourage them to build this circuit. Source: Audio Visualizer With an LCD Display ### Push-button using an Arduino Pushbuttons or switches connect two points in a circuit when you press them. This example turns on the built-in LED on pin 13 when you press the button. image developed using Fritzing. For more circuit examples, see the Fritzing project page Connect three wires to the Arduino board. The first two, red and black, connect to the two long vertical rows on the side of the breadboard to provide access to the 5 volt supply and ground. The third wire goes from digital pin 2 to one leg of the pushbutton. That same leg of the button connects through a pull-down resistor (here 10 KOhms) to ground. The other leg of the button connects to the 5 volt supply. When the pushbutton is open (unpressed) there is no connection between the two legs of the pushbutton, so the pin is connected to ground (through the pull-down resistor) and we read a LOW. When the button is closed (pressed), it makes a connection between its two legs, connecting the pin to 5 volts, so that we read a HIGH. You can also wire this circuit the opposite way, with a pullup resistor keeping the input HIGH, and going LOW when the button is pressed. If so, the behavior of the sketch will be reversed, with the LED normally on and turning off when you press the button. If you disconnect the digital i/o pin from everything, the LED may blink erratically. This is because the input is "floating" - that is, it will randomly return either HIGH or LOW. That's why you need a pull-up or pull-down resistor in the circuit. Schematic: Code /* Button Turns on and off a light emitting diode(LED) connected to digital pin 13, when pressing a pushbutton attached to pin 2. The circuit: * LED attached from pin 13 to ground * pushbutton attached to pin 2 from +5V * 10K resistor attached to pin 2 from ground * Note: on most Arduinos there is already an LED on the board attached to pin 13. Major Components in Project Hardware Arduino Board momentary button or switch 10K ohm resistor breadboard hook-up wire For more detail: Push-button using an Arduino ### EFFICIENCY MEETS PRACTICALITY IN THE NISE 108 INDUSTRIAL GATEWAY Compact and streamlined, the NISE 108 is NEXCOM’s newest industrial gateway. We’ve carefully selected each connectivity component to ensure your convenience and easy assembly. The thoughtful design further guarantees that the standalone embedded computer will withstand shock and vibration as well as effortlessly pair with display panels for use in, but not limited to, factory, agricultural, and service settings. Make the connection, worry-free The cableless connectors for two SATA storage devices allow the NISE 108 to resist shock and vibration while simultaneously avoid cable detachment, making it suitable for challenging operational environments, particularly in industrial situations. The four USB and three COM ports provide abundant interfaces for both modern and legacy devices, critical for factory automation and communication applications. Two GbE LAN ports also ensure that the fanless computer stays connected to your local network, while you can adapt the expansion mini-PCIe socket for wireless connectivity with an optional Wi-Fi/Bluetooth module – or even other I/O devices. Three’s not a crowd The NISE 108 strategically includes two DP and one LVDS port for an effortless triple display setup, ideal for dual display of your critical data (DP) and a third touch screen (LVDS) for operational controls. The NISE 108 is thus especially appropriate for agro-industrial (e.g., temperature sensor monitoring, livestock counts) and service environments, such as gas stations (monitoring oil levels, then uploading to a centralized cloud for further assessments and follow-up). Sleek and efficient design In giving you, our customers, more value, the overarching design of the NISE 108 highlights its density and functionality. For convenience and easy access, all I/Os are now on the front interface, helping you maintain a well ordered work environment without the clutter of tangled cables. The I/O gateway’s aluminum and metal chassis, fanless construction, and compact size, combined with pre-drilled threaded holes on the top cover, make it easy to install a VESA mount for assembling your own panel PC – or set up as a standalone computer, with or without wall mount bracket. Read more: EFFICIENCY MEETS PRACTICALITY IN THE NISE 108 INDUSTRIAL GATEWAY ### American and 2 Japanese Physicists Share Nobel for Work on LED Lights Three physicists have been awarded the Nobel Prize for revolutionizing the way the world is lighted. The 2014 physics award went to Isamu Akasaki and Hiroshi Amano of Japan and Shuji Nakamura of the University of California, Santa Barbara, for “the invention of efficient blue light-emitting diodes, which has enabled bright and energy-saving white light sources.” The three scientists, working together and separately, found a way to produce blue light beams from semiconductors in the early 1990s. Others had produced red and green diodes, but without blue diodes, white light could not be produced, the Royal Swedish Academy of Sciences said on Tuesday morning in its prize citation. “They succeeded where everyone else had failed,” the academy said. Their work has spurred the creation of a whole new industry. The committee that chose the winners said light-emitting diodes, or LEDs, would be the lighting source of the 21st century, just as the incandescent bulb illuminated the 20th. The three scientists will split a prize of $1.1 million, to be awarded in Stockholm on Dec. 10. Isamu Akasaki of Japan reacted to being awarded the 2014 Nobel Prize in Physics after Staffan Normark, the permanent secretary of the Royal Swedish Academy of Sciences, announced the decision. Publish Date October 7, 2014. Photo by Jonathan Nackstrand/Agence France-Presse — Getty Images. Dr. Akasaki, 85, of Meijo University and Nagoya University, and Dr. Amano, 54, of Nagoya University, are Japanese. Dr. Nakamura, 60, is American. Awakened by a phone call from the Swedish academy, he described it in a news conference as “unbelievable.” In its announcement, the academy recalled Alfred Nobel’s desire that his prize be awarded for something that benefited humankind, noting that one-fourth of the world’s electrical energy consumption goes to producing light. This, it said, was a prize more for invention than for discovery. Frances Saunders, president of the Institute of Physics, a worldwide scientific organization based in London, agreed with those sentiments. Noting in an email statement that 2015 is the International Year of Light, she said, “This is physics research that is having a direct impact on the grandest of scales, helping protect our environment, as well as turning up in our everyday electronic gadgets.” For more detail: American and 2 Japanese Physicists Share Nobel for Work on LED Lights ### Soft Squares - Chisel Away With Arduino in Unity For this project, I created an Arduino-powered chisel which can communicate with a game I made in Unity, Soft Squares. You can paint over a 5 x 5 x 5 cube and chip away cubes you don't need, to create a miniature sculpture of whatever you'd like! You can even add colour to your creations. I found the idea of linking Arduino with Unity interesting, as it'd mean that I could, in essence, make a custom game controller, which could even be controlled by things not usually seen in game controllers, like light, temperature, or distance to another object. I decided to use an accelerometer to let physical player input have an effect inside of a digital game. By 'chiselling' with the chisel, you can remove parts of the larger 5 x 5 x 5 cube, like an actual chisel! You can see a video of it in action here (Google Drive). I will go more in-depth into my process in the final steps (this is a student project) - I'd rather not bloat this introduction. Supplies Although you can use other, similar components, I do recommend using these since the measurements of the 3D prints are quite precise! Materials and Components 1 Arduino Uno Rev31 USB 2.0 Cable Type A/B1 Joystick (or 0 if just using buttons)4 2-pin Buttons (5 if just using buttons)18 Male-Male Jumper Cables (or 15 if just using buttons) (preferably around 10 cm)1 ADXL345 Accelerometer2 Cable Lugs, (one male, one female, one to fit 4 cables, one to fit 1 cable)Approximately 55 meters of 3D filament (2 mm layer height, 10% infill)SolderSanding Paper (recommended) Tools Cable Lug Crimping Tool3D PrinterSoldering IronSander (recommended)Liquid Glue (might also work with a regular glue stick, but I didn't feel like going through that suffering) Digital Components 3D-Printing software like Ultimaker CuraArduino IDECorresponding files on my GitHub projectDownload the STLs of the 3D-printables in '3D Print STLs'.Download the corresponding Arduino code in, well, 'Arduino Code'.'CubeColor' if using a joystick, 'CubeColorNoJoystick' if not using a joystick.Download the 'Build' folder. Execute the Soft Squares.exe to play.If you want, you can also download the 'Source' folder, which contains the Unity project I made. Step 1: 3D Printing In order to assemble the chisel, you'll need to 3D print the various components from the downloaded STLs. How you'll print depends on your 3D printer and 3D printing software, but 2 mm layer height with 10% infill worked fine for me (well, minus all the failed prints - but I don't believe that's because of those settings). I recommend starting with printing the Chisel Top, then Joystick Support, then Joystick Support 2, and then Chisel Bottom and Chisel Front - most of the shenanigans will be happening at the top part and will involve the joystick supports, so if you want to be time-efficient you can print those and work on the next few steps whilst printing the bottom and front part. Step 2: Sanding To make the chisel comfortable to hold, I recommend sanding some of the 3D prints. You should mainly sand the exteriors of the top and bottom of the chisel, and the front part of the chisel if you feel like it.Be careful with the holes at the top!You might also need to sand the extrusions on the bottom part - check if you can slot the top and the bottom part into each other!You won't see the supports in the end result and they're made to be placed inside of the chisel, so don't sand those.Avoid sanding the front of the top and bottom part of the chisel, or the bottom of the front part of the chisel (... that's a sentence). We'll be glueing the parts together there, so it'll help if it's just a straight, flat surface. Step 3: The Buttons (note that the image with the soldering was later scrapped - just used for clarity) Once you have printed the top, you can start messing with the buttons! Hooray. The buttons will be used to control the colour and to move the cursor in-game, as well as move the camera if you're just using buttons. If printed successfully, the top part will feature 5 holes - 1 larger one (for a joystick) and 4 smaller ones - these 4 smaller ones are for the buttons. We're going to install the buttons and get them wired up. Installing the buttons Note that you can also wire the buttons first - this was easier for me, personally. If you've got the same buttons as me, this should be fairly simple. The buttons feature a thin nut and washer, which you can screw off just using your hands.Now, the bottom part of the button should be able to fit through one of the holes. So, uh, get it in there!Then, re-screw the nut onto the bottom part of the button to get it secured in the hole (see the images). Sadly, the washer probably won't fit - but this shouldn't be a problem, so dispose of it.Repeat this until all four buttons are installed. Wiring the buttons Since we're using two-pin buttons, we only need two wires per button, one to go to the ground, and another to go to one of the Arduino's digital pins. Fit a wire through one of the pins, which will go to the ground. Make sure it's secured by either twisting the end or soldering it.Fit another wire through the other pin, which will later lead to one of the Arduino's digital pins.Repeat this until all four buttons have two wires. Connecting the ground wires As the Arduino only has three ground pins, we'll need to connect the ground wires together so that they can share a single ground pin. Gather the four ground wires into the larger cable lug.You might need to strip the wires first in order to make sure they reach in there - if you run into any issues later, this could be a problem.Using the crimping tool, press the cable lug until the wires are stuck in there firmly.Gather a single wire into the other, smaller cable lug.Using the crimping tool, press the cable lug until the wire is stuck in there firmly.Connect the two cable lugs to form a four-in-one ground cable! You can also do this by soldering as I tried in one of the images - but this was quite inconvenient and caused some issues with the limited amount of space inside of the chisel. Securing the cable lugs One issue I frequently encountered whilst testing was that the metal of the cable lug would touch other Arduino components, causing it to function incorrectly (one time even thinking I was 'connecting an unknown device' - I'm not sure whether I should be alive, honestly). So, we're going to limit how much wiggle room the cable lugs have. Place the cable lugs above the indent for the USB cable (see image).Glue the lugs securely so that they can no longer move. That's all! Buttons installed. Step 4: The Joystick Now, we can mess with the joystick! The joystick will be used to move the camera in-game. It'll also be used as a button to change between the various modes in the game. The joystick belongs to the larger, remaining hole in the top part of the chisel. Keep in mind that you will need the joystick supports - if those are still printing, you could skip to step 4 for now and return once the supports are done. Wiring the joystick For each pin, connect a wire to it, by twisting around it or soldering it (or any other way you see fit).I highly recommend using different-coloured wires! Later on, it'll be difficult to see which pin is which, so having a colour code could majorly help with avoiding trouble later (trust me, I've been through it - see the first image). Installing the first joystick support To make sure the joystick won't fall, we're going to add some 3D printed supports, starting with the support which looks like a rejected Lego stud. The holes on the corners of the joystick should fit in there just right. Place the support at the front of the top part (where you'll also find the larger hole). Move it to the bottom of the part, so it's level with where the part ends (see image).Glue the support and make sure it's stuck.You might need to 'extend' the support with some extra glue like I had to so that the joystick will fit correctly. Whoops.Be careful not to have glue spill on the rim of the top part. You might've noticed the small holes on the 3D print - those will slot into extrusions on the 3D print of the bottom part. Spilt glue might mess with them slotting in.After letting the glue dry, check if you can wedge the joystick in and if you can move it sufficiently - if so, congrats! If not, try glueing the support again.If you're having trouble, just glueing the support with the joystick already on it could help - but could also result in it getting permanently stuck (don't worry, it'll get permanently stuck soon - but might not be a good idea at the moment if you need to make changes after it already got stuck). Installing the second joystick support You might've noticed when testing the first joystick support, that attempting to press the joystick down feels unstable - so we're going to install the second joystick support! Make sure the wires are secure and that the joystick is already attached to the first support - the joystick will be stuck after the attachment of this support, so be prepared for that.Place the support at the same level as the first support. The second support should cover the other holes of the joystick but should leave the pins exposed.You might need to turn over the support if you're having trouble getting it to fit - it has a slight slant to it.Glue the support and make sure it's stuck.Again, glue on the rim could cause future problems.After letting the glue dry, press the joystick and see if the support provides resistance - when you actually press the button, you should hear a faint click. If this doesn't work, try glueing the support again. Congrats, the joystick is secure! Step 5: The Accelerometer In order to track if the chisel is chiselling away, we'll be using an accelerometer to track the speed of the chisel. This way, we can break a cube in-game if the chisel moves fast enough. Soldering the accelerometer For the GND, VCC, SDA and SCL pins, connect a wire to it, by twisting the wire, soldering, or any other way. Be sure that the wires don't touch each other or connect with other pins (especially when using solder)! Slotting the accelerometer To avoid the accelerometer from going all over the place, the bottom part of the chisel has a neat slot where the accelerometer can fit! So, uh, make sure it's in there. Step 6: Assembly Now that we've got all the parts ready, we should be able to assemble the chisel! Just a few more steps. Glueing the front to the bottom To make the chisel more... chisel-y, we'll glue the front part to the bottom part. That way, when you slot in the top part, it'll look like an actual chisel! (...with some imagination, that is) Only glue the bottom half of the chisel!For me, it helped to hold the bottom and front parts upright and glue them together like that.Once again, make sure to not spill glue over the rim!After it has dried, check if the front actually sticks when slotting the top on the bottom. The wiring Now, it's time to get all the wires in there - place the Arduino Uno on the elevated part of the bottom (so that the USB cable can fit through the indent) and see the provided wiring diagram to see how to get the wires in order. Make sure the accelerometer is attached to 3.3V, 5V won't work and might damage it. The result Now, place the top on the bottom and see your finished product! ...nearly, that is. Admittedly, you might need to push your wires in there a little, especially if you're working with longer wires. Playing the game Connect the Arduino to a computer with the Arduino IDE using the USB cable, funnelling the cable through the hole at the back of the chisel. Upload the corresponding code to the Arduino depending on whether you want to use your buttons to move the camera, or if you want to use your joystick instead (I put the code below here for easy access, but it's also on GitHub in the 'Supplies' section). If you want to know what the code does exactly, I put comments in there, but in essence, it checks whether a button was pressed or lifted this frame, and sends that information to Unity (I could also send the state of every button every frame, but I've discovered that Unity doesn't like that). Then, execute the game and play! Keep in mind the chisel needs to be plugged in in order to work. Step 7: Controls Here's a simple overview of the controls and how the game works. There are four modes: Colour - change the properties of what you're painting with.Move - move the cursor over the big cube.Paint - move the cursor over the big cube, as well as painting the surface that the cursor is on.View - move the camera using the buttons. Joystick - Move the camera (if using 'CubeColor'), and press to switch between modes. Buttons - Move the cursor (Move and Paint), move the camera (View), switch between what property you target (Color, left and right) or change the value of that property (Color, up and down). Swing - Swing the chisel to delete the cube the cursor is currently on. S-key on the keyboard - Take a screenshot of what you made! Should be saved in the same folder as the .exe file. Congrats! You're now done with the project. Below are some 'extra' steps featuring failed attempts, other ideas I had at first, and other nonsense. Step 8: Process I made various amounts of concepts in Unity to see what I would like best, but I only decided to make the chisel in the end. At first, I wanted to do something with light in Unity. You'd have to stay in shadow to survive. Being in light would hurt you, which would be indicated by dimming lights. I did manage to make this, in the end, but it didn't feel exciting and was just Arduino being used as a regular controller without much flair to it. Afterwards, I tried making something like Flappy Bird in Arduino, using a pressure sensor to apply force to the bird. This did already feel better, as it made use of something unusual in game controllers like a pressure sensor. Still, however, it felt a bit bland. I then imagined some crazy concept where, using Bluetooth, Arduino would connect to your phone, after which it would control a Unity game on your phone, and you'd use the Arduino as a controller whilst the phone was inserted into a VR-headset-esque device. You'd play as a bird flying around in an open world. ...although I do tend to take on overly-ambitious ideas, I recognized that this was far too much for the time I had left, so, I just started brainstorming random ideas. At first, I had the idea of being able to color your own cube (hence why the Arduino code is called 'Color Your Cube'), and depending on the color, it'd have different stats. Testing out coloring the cube was neat - so then I tested it where your cube character would consist of multiple cubes (on a 2D plane) - and then I realized I just made an art program. I wanted to expand on this idea, so then I thought of deleting pixels - which lead to me wanting to create a chisel which could chip away at blocks using motion. At first, I wanted to use a distance sensor to use movement, since I already had a distance sensor, but in the end, I decided to go for an accelerometer - I had to buy new electronics anyway, so I opted for an accelerometer, which would probably detect movement more accurately (with the distance sensor, you could also face the chisel to another location to 'chisel'). Lastly, to really make it like you're using a chisel, and not just a brush, I extended the 2D plane of cubes into 3D, so it'd feel like you were making a painted sculpture. And, well, that's what I ended up with! Source: Soft Squares - Chisel Away With Arduino in Unity ### Create an internet controlled robot using Livebots Here you will learn how to create an internet controlled robot or other installation using Livebots. Livebots is a project I'm working on which consists of an easy to use website for all the robots that people can interact with through the internet. As an example I will be using a simple Arduino UNO with a LED connected to an Raspberry Pi to show you the concept, but of course you can use anything that can be receive messages by the serial port and any computer you would like. Here is it: And here is another example: Step 1: Program the arduino Attached is a simple arduino program that reads the messages form the serial port and lights the LED when they contain "HIGH" and turns it off when "LOW". Feel free to adapt it to your own needs. livebotDemo.zip462 bytes Step 2: Add the robot to the Livebots website Start by creating an account (http://livebots.cc/Account/Register). Click Add a Robot and upload your bot's picture (http://livebots.cc/Upload/1). Then you can add your robot information that will appear on the robot's page. Step 3: Install PySerial In order to let python communicate with arduino you will need to install pySerial: http://pyserial.sourceforge.net/ 1. Download and click open: http://sourceforge.net/projects/pyserial/ 2. Unzip and untar the files 3. Install pySerial. On a terminal window, navigate to the folder where you have the files and run the following command: cd pyserial-2.5 sudo python setup.py install For more info on how to do this on raspberry pi go here: http://www.doctormonk.com/2012/04/raspberry-pi-and-arduino.html PS: If you're on Windows make sure you have python installed: http://www.python.org/getit/windows/ (Thanks msandersmay10 for pointing this out!)   For more detail: Create an internet controlled robot using Livebots ### Smart Tank Chassis with Ultrasonic Sensor using Arduino In the previous projects I tried different ways to control the smart tank manually. But how about if the tank makes its own decision and control itself? It should be quite interesting. Ultrasonic sensor can help to do so by sending sound wave in front of the sensor. It receives the wave once the wave meets obstacles and reflects to the sensor so as to determine the distance. So I've bought an ultrasonic sensor and start another project. Step 1: Parts HC-SR04 Ultrasonic Sensor with Servo and Rack Smart Tank Arduino Uno Small Breadboard Battery Box AA x 4 Battery Box 9-volt I just add one more sensor on top of the third project actually. Step 2: Wiring I leave the servo unwired at this stage. For the sensor the wiring is as follow: GND > Arduino GND Echo > Pin 6 Trig > Pin 5 VCC > 5V For the smart tank I listed the wiring again below. That is the same as the previous projects: IB on the right side > pin 8 IA on the left side > pin 9 IA on the right side > pin 10 IB on the left side > pin 11 VCC on both side > + of the battery box GND on both side > - of the battery box and Arduino GND Step 3: Test the sensor I wanna test if the sensor works, so I google it and find anything can help. Google is our friend and this link can be one of the reference: http://arthursrobotorial.blogspot.hk/2012_12_01_archive.html #define trigPin 5 #define echoPin 6 void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } int CheckDistance() { long duration, distance; digitalWrite(trigPin, LOW); // Added this line delayMicroseconds(2); // Added this line digitalWrite(trigPin, HIGH); // delayMicroseconds(1000); - Removed this line delayMicroseconds(10); // Added this line digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1; return distance; } void loop() { int testDistance = CheckDistance(); /// get object distance using ping /// if object is more than 50 cm away it is out of range if (testDistance >= 50 || testDistance <= 0) /// if object is more than 50 cm away it is out of range { Serial.println("Out of range"); } else /// object is closer than 50cm, print distance { Serial.print(testDistance); Serial.println(" cm"); delay(500); ///wait half a sec before next ping } In Arduino IDE, select Tools > Serial Monitor. It shows the distance if succeeds. Step 4: Test the sensor with the tank Then I combine the code in the first stage with the code in the third project and revise a little bit: If the distance between the sensor and the object is more than 30cm, it goes forward. Otherwise it turns right. #define trigPin 5 #define echoPin 6 int motorPin = 8; //right side to IB - forwward int motorPin2 = 9; //left side to IA - forwward int motorPin3 = 10; //right side to IA - backward int motorPin4 = 11; //left side to IB - backward void setup() { Serial.begin (9600); pinMode(motorPin, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void forward(){ digitalWrite(motorPin, HIGH); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); } void backward() { digitalWrite(motorPin, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, HIGH); } void turnLeft() { digitalWrite(motorPin, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); } void turnRight() { digitalWrite(motorPin, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); } int CheckDistance() { long duration, distance; digitalWrite(trigPin, LOW); // Added this line delayMicroseconds(2); // Added this line digitalWrite(trigPin, HIGH); // delayMicroseconds(1000); - Removed this line delayMicroseconds(10); // Added this line digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1; return distance; } void loop() { int testDistance = CheckDistance(); /// get object distance using ping if (testDistance >= 30 || testDistance <= 0) /// if object is more than 30 cm away it goes forward { forward(); } else /// object is closer than 30cm, turns right { turnRight(); } delay(500); ///wait half a sec before next ping } The result seems ok.   For more detail: Smart Tank Chassis with Ultrasonic Sensor using Arduino ### The "Rare Vogel" Birdhouse Controller A birdhouse controller for a bird based game, why? I saw this birdhouse in the store and felt instantly inspired! Going from something big and grand with a shortage of time for the school's deadline to something small and cute. It inspired an entire game around it! It was an interesting project, I learned how to read data from the datastream directly into unity, how to use two pin buttons, items and more in arduino and learned how to plan things out in tight spaces! https://youtu.be/GXbqMysx4_M It was build by looking at the components online and ordering them, trying them out, seeing what works all in the bird house and seeing what it could add! Supplies The things you will need are a computer and these things; Software: UnityArduino IDE Tools: Soldering IronDouble sided tape (Thick and thin)Glue (Optional but recommended)DrillSanding paper (Soft)A file Components: ButtonsWiresTilt SensorIR break beam sensorPotentiometerUSB B CableArduino Uno (May use a different one depending on your birdhouse size) Parts: A 4/40 screw, nut and spacerBirdhouse (Buy a cheap one or make your own! We'll be using one from the Action)CardboardPin headers Step 1: Breaking In Open up the house so you can get in there, in the case of this one it was glued together so I was able to pull it open! This will differ depending on your scenario! Be sure to sand the hole, a finger will come through this so we wanna avoid splinters! (Sand it down in general actually.. but especially this hole!) If you break anything, feel free to use the glue! Step 2: You Sure Push My Buttons Grab your birdhouse and drill two holes in the top for your buttons, Depending on the size of your buttons you may need to drill different sizes than displayed here. If you're using the same birdhouse as me the wood is soft, you may not even be needed to use a drill but something sharp like a knife (Not recommended) Step 3: This Sure Sticks Out Take the stick out of the house! Considering this specific house was made of soft wood, I was able to poke through it with something sharp. Do not throw away the stick! We'll still need it later! File the stick down (Or use something sharp, not recommended!) if your potentiometer has an opening. Try to fit it in there by filing it down. Alternatively, you can glue it directly to it! After attaching the stick to the potentiometer, cover it up a bit so it looks cleaner and attach it to the house! we used thick strong doublesided tape for both the inbetween and behind areas. Step 4: I Love Spaghetti! Once you know the holes fit properly and have the potentiometer fit, it's time to wire these bad boys up, grab your soldering iron and add some wires to them! (Orientation of the wires shouldn't matter! Recommend using yellow instead of red like here for the buttons to avoid confusion) While you're at it, consider preparing other parts too! So the same layout on the potentiometer and add pin headers on the end of all your wires. In order to accommodate for the amount of ports of the arduino, connect all the red/black wires to a single pin (Again, this does NOT go for your red/yellow wires on the buttons) As a reference, see the diagram what needs to be soldered to what! I recommend using a four pin header for the 7-4 pins, on this order; BUTTON R, BUTTON L, IR SENSOR, TILT SENSOR. Not follow this order may require you to re-work some Unity Code. Useful tip! Be sure the buttons are already in when you hook them up all onto one ground cable! Step 5: I See You, Don't Shake Me! Grab your IR break beam sensor and allign them to the middle of the hole! We used double sided tape to keep them in place. Furthermore get your tilt sensor ready, we also taped this one down UPSIDE DOWN! This way it reads when it's held upside down far more reliably, especially considering people will be holding this as a controller so it needs some wiggleroom! Make sure it's directly down, not screwed or crooked. Step 6: Crafty, Aren't You? Phew, that was a lot! But we're almost there! In order not to have the players fiddle with the cables, you grab a piece of cardboard! Make two pieces, Again size depends on your specific birdhouse! Be sure they fit, one bendable piece so you can easily drop it in, attack it with glue or double sided tape. Same for the second piece, this will be used as a bottom part! Now our player will not fiddle around in spaghetti (Yay!) Step 7: Holes! Holes! More Holes! Test fit your arduino into a corner piece, and measure where the USB hole needs to be, I can't give exact directions for this depending on the case of arduino you're using. There needs to be a USB hole as well as a scew which will hold your arduino into place. CAUTION: USE THE SPACER AND DO NOT OVERTIGHTEN THE SCREW! This might bend or even break your arduino! Be sure the spacer is under your arduino, you can test fit it, but don't leave it in there yet as we still need the arduino! Step 8: Plugging Things In! Plug everything into your arduino! D7 - Right buttonD6 - Left buttonD5 - IR receiverD4 - Tilt ensorA0 - Potentiometer And ofcourse the power+ground wires! Carefully push these into the box, be sure that any exposed wiring that may come in contact with another has been isolated! Wedge the USB port into the hole and secure the arduino with the screw, remember; the order here is important for screwing, see the previous step! Don't close it off yet! Plug your arduino in and let's see if it works! Step 9: IT'S ALIVE! Open your aruino IDE and use this script, caution! This is gonna need the library below! #include "signalenzo.h" //Thanks to Aeralius for helping create this library! float lastValue; void setup() { //Opening connection Serial.begin(9600); //Regestering all the buttons pinMode(7, INPUT_PULLUP); registerSignalCommand(7); pinMode(6, INPUT_PULLUP); registerSignalCommand(6); pinMode(5, INPUT_PULLUP); registerSignalCommand(5); pinMode(4, INPUT_PULLUP); registerSignalCommand(4); } void loop() { //Don't torture the Arduino :) delay(50); checkSignals(); float Input = analogRead(0)/1023.0; if(Input > lastValue+.01f || Input < lastValue-.01f){ lastValue = Input; Serial.print("A0,"); Serial.println(lastValue); } } The script registers buttons and let's unity know when something is pressed/changed! The libary; //With help from Aeralius! bool signalPins[14] = {}; bool signalPinsUps[14] = {}; bool signalPinsDowns[14] = {}; void registerSignalCommand( int Pin ) { signalPins[Pin]=true; //Add the pin to the pin list thing :) } void checkSignals() { for(int i=0;i<14;i++) { if(signalPins[i]==true) { //DOWN if(!digitalRead(i) and !signalPinsUps[i]) { signalPinsUps[i] = true; signalPinsDowns[i] = false; Serial.print("D");Serial.print(i); Serial.println(",1"); } //UP if(digitalRead(i) and !signalPinsDowns[i]) { signalPinsUps[i] = false; signalPinsDowns[i] = true; Serial.print("D");Serial.print(i); Serial.println(",0"); } } } } This is the actual managing system for letting unity know! In case you don't want to setup the project yourself, you can also get it from git here. Flash the code and check if all actions work! Open the serial monitor and see if you can toggle all the actions like the attached image above; Rotating stick:A0 (0 to 1 float) Right button:D7 (0 or 1) Left button:D6 (0 or 1) Hole sensor:D5 (0 or 1) Upside down:D4 (0 or 1) If these all work properly, you can close off the birdhouse by gluing the bottom and move over to unity/the game! If not, you might wanna check your wiring and check some steps! Step 10: It's Gametime https://youtu.be/GXbqMysx4_M You can build/run the game in unity yourself, the git is available here, the project was made in 2020.3.18f1, you can find that specific version here or alternatively you can upgrade the project to a higher version. In here you can adjust all settings and the entire feel of the game to your liking, fair warning, the code was rushed so it isn't clean at all! If you do not wish to use unity but just play the game you can get it right here! Your experience should look something like the video attached! How to play the game: Left button: DESTROYS BLUE CHAIRS! Right button: DESTROYS RIGHT CHAIRS! Hole: Slows down the bird, to give you more control (Blocks shooting!) Stick: Move around (This is additive! Don't go too fast or you'll tumble!!) Hold upside down: Butt forward to destroy weak wall parts!! (And farts when trying to shoot!) Goal: Get your a high score! And block those pesky chairs from passing you, as they take points away! Step 11: Bonus Step, DECORATING! Make your own awesome custom design to keep the piece interesting! Very curious to see what you'd do with your birdhouse! Source: The "Rare Vogel" Birdhouse Controller ### Using the Arduino Uno to program ATTINY84-20PU Using the Arduino Uno to program ATTINY84-20PU (Newark item # 68T3783). This Instructable shows how to use the Arduino platform to work with physically smaller processors, such as the ATtiny84 (84/44/24), ATtiny85 (85/45/25), and ATtiny2313. This example is specifically for the ATtiny84-20PU processor (Newark item # 68T3783) but can be adapted for the others boards by selecting the appropriate board from the Arduino software (i.e., Arduino IDE) and modifying the pinouts as required. Step 1: Configure the Arduino IDE Software 1) Ensure the Arduino IDE is NOT running. 2) Create new folder named "tiny" in your Arduino "hardware" folder C:\Projects\Arduino\hardware\tiny 3) Download the Arduino-Tiny archive (ZIP-file) http://code.google.com/p/arduino-tiny/downloads/detail?name=arduino-tiny-0100-0016.zip 4) Copy and paste the contents of the ZIP-file into the "tiny" folder. 5) Create a new file named "boards.txt" in the tiny directory. C:\Projects\Arduino\hardware\tiny\boards.txt 6) Open the "boards.txt" file and the "Prospective Boards.txt" file using a text editor. 7) Copy board entries of interest from "Prospective Boards.txt" to "boards.txt". I simply copied the entire contents from "Prospective Boards.txt" to "boards.txt". 8) Save and close "boards.txt".  Close "Prospective Boards.txt" (see picture for how the contents should look). Step 2: Program the Arduino to Use as an In-System Programmer (ISP) 9 ) Open the Arduino IDE. 10) Select your Arduino board. I have the Arduino UNO  but replaced the processor with a pre-programmed Atmega328P chip from Adafruit, which requires that I select "Arduino Duemilanove with ATmega328." At this point, you should see additional "boards" listed, such as all of the ATtiny boards that as in your "Boards.txt". Do not select the ATtiny chip at this point. Select your Arduino board so that you can tell the Arduino that you want to use it as an In-System Programmer (ISP). 11) Select AVR ISP programmer by selecting [Tools] [Programmer] AVR ISP. 12) Upload the ArduinoISP sketch to your Arduino by selecting [File] [Examples] ArduinoISP. Step 3: Create Blink Sketch for the Attiny84 13) Open  sketch to be programmed onto Attiny84. This example uses the Blink sketch from the Arduino software. [File] [Examples] [01.Basics] [Blink] 14) Edit the sketch so the LED pins correspond to the ATtiny84. That is, change "int led = 13;" to "int led = 0;" Major Components in ProjectArduino For more detail: Using the Arduino Uno to program ATTINY84-20PU ### 3D Printed Timelapse/3D Scanning Turntable An affordable Arduino Turntable designed for Time lapse photography. Changing the gearing and code it can also be used for Photogrammetry/3D scanning or Video. The turntable operates on the move shoot move principle in the Timelapse and Photogrammetry modes where the camera is triggered via the sync cable. The electronics can be adjusted based on personal needs, I for example opted for 2xOptocouplers to simultaneously trigger two separate cameras. I would describe this as an intermediate level project,basic experience with Arduino and 3D printing as well as the ability to solder are required. https://youtu.be/KTsz7B96uHQ If you have any questions or suggestions please leave a comment and thanks for visiting my Instructables! Note: Some links are affiliate which means I earn a small amount when you use them at no extra cost to you. Supplies Hardware 3D printed parts set, about 18 hours and 210g of material.3xM8x8mm Hex bolts2xM3x4mm Hex bolts Electronics 28BYJ-48 Stepper motor withULN2003 stepper motor driverArduino (or other microcontroller) Camera trigger: PC817 Optocoupler2x470 Ohm resistorsCamera trigger cable Misc Small breadboard or solderboardFemale header pins for microcontrollerScrew or plug terminalsPower supply 5-12V Tools Soldering iron2.5mm Hex wrench Step 1: 3D Print Turntable Parts Print the parts and clean up. Pay particular attention to the gear teeth, aim to do a better job than I did here at ensuring they are free from excess material. All print files are available here: Printables Or buy the set (Europe only) here: Ebay Step 2: Assemble Turntable Attach the motor to the gear cover with the 4mm bolts. Attach the gear cover to the turntable base with 3x8mm bolts as pictured. The additional holes are spare and can be used if the holes become damaged. Pictured in white is the gear to be used for Photogrammetry or video, the grey gear and gear cover are used for Timelapse (it turns much slower). Step 3: Electronics Wire the electronics as pictured. Note: I have only tested with Canon but should work with all camera systems. Connect the tip and sleeve wires from the camera trigger cable to the output of the optocoupler, polarity doesn't matter. The third wire is for autofocus and remains unused. All the electronics can alternatively be housed in the body although I recommend using an external power supply for longer timelapses. Pictured here are 2x18650 lithium batteries. Step 4: Upload the Code Ensure Arduino Stepper library installed and up to date.Upload code to Arduino All code available here: GitHub Step 5: Final Thoughts As I designed this Turntable to be as cheap and simple to build as possible it has some limitations. I will update soon with a few changes, at the moment I'm working on: The supplied code is also very basic, suggested improvements are the incorporation of display and rotary encoder or push buttons to edit variables and changes modes without the need to connect to a computer. Step 6: Nema 17 Mod This step only if you want to use a NEMA 17 motor. Using a Nema 17 provides a lot more flexibility with control options as well as more power and speed. I recommend using the finest microstepping your driver allows, I'm using 1/16 with the A4988 driver but there are better options such as the DRV8825 this allows 1/32 microsteps for example. Note the jumper caps used on the CNC shield, these are used to adjust the microstepping (photo 3) I use and recommend the Pine R motion controller from Black Forest Motion, they can be picked up for about 150€ second hand. Pictured is a CNC shield with A4988 drivers and 20mm pancake Nema 17 The print files can be found in the Nema 17 mod folder at Printables, use the 14mm feet extenders for a Stepper motor up to about 23mm thick, for a larger motor use the 40mm foot extensions, they allow a motor of about 48mm in length to be used. The legs can also be stacked if required. There are two versions of the gear, one for a motor with a D-Shaft and the other without. Steps: Print the files, I recommend PLA with 0.15mm layer height with supports for the Motor Bracket only.Attach motor to bracket with 8mm M3 screws.Attach the bracket to the turntable base with 8mm M3 screws, washers recommended. Do not fully tighten yet.Slide the gear onto the shaft ensuring it doesn't protrude above the turntable base, secure in place with a M3 screw if required (min 6mm length)Place the turntable top on ensuring the gears mesh correctly, now with the assembly upside down adjust the motor bracket to ensure smooth meshing without too much play then tighten the 3 screws on the motor bracket. Important note with the stepper motor drivers: Ensure the motor is connected before adding power to the shield otherwise you will instantly fry the driver module! I highly recommend watching this video if unfamiliar with stepper motors. Using the CNC shield as well as arduino programming are outside the scope of this project, there are a lot of great resources online, alternatively the motor can be connected directly to the Pine R controller and controlled via app. Source: 3D Printed Timelapse/3D Scanning Turntable ### TSMC, ARM see impressive results with FinFET process Technology from a Taiwanese semiconductor foundry is to bring considerable benefits in performance and power efficiency to big.LITTLE implementations, in the name of FinFET. Hsinchu, Taiwan-based TSMC announced last month it had successfully produced the first fully functional ARM-based networking processor with FinFET technology and explained how TSMC's 16FinFET process promises speed and power improvements as well as leakage reduction.   The advantages address "challenges that have become critical barriers to further scaling of advanced SoC technology. It has twice the gate density of TSMC's 28HPM process, and operates more than 40 percent faster at the same total power, or reduces total power over 60 percent at the same speed." Last month the company also announced 16nm FinFET (16FF) process technology improvements in light of a collaboration between ARM and TSMC to jointly optimize the 64-bit ARMv8-A processor series on FinFET process technologies. TSMC and ARM set new benchmarks for performance and power efficiency with FinFET Silicon with 64-bit ARM big.LITTLE technology. Silicon results on 16FF showed the "big" Cortex-A57 processor achieving 2.3GHz for sustained mobile peak performance, as well as the "LITTLE" Cortex-A53 processor consuming only 75mW for most common workloads. The company said TSMC's 16FF+ process technology will deliver an additional 11 percent gain in performance for the Cortex-A57 at the same power as the 16FF process, and a further 35 percent power reduction for the Cortex-A53 when running low-intensity applications. The 16FF+ is scheduled to be delivered by Q4 2014.   For more detail: TSMC, ARM see impressive results with FinFET process ### 12W AC-DC POWER SUPPLY REFERENCE DESIGN MEETS ALL ERP REGULATIONS A reference design kit (RDK-839) containing a 12W ac-dc power supply for appliances, meters or other industrial applications is now available from Power Integrations. In addition to a functioning supply, it includes a bare board and additional devices that will easily allow a similar supply to be built. Utilizing PI’s energy-efficient TinySwitch-4 family of offline switcher ICs, the design features less than 30mW no-load consumption and 300mW available output in stand-by (500mW input). It meets all existing and proposed energy efficiency standards including European EcoDesign Directive ErPs. The RDK-839 reference design kit has an input voltage range of 85- to 265-Vac. The highly integrated design uses a simple EE16 transformer. Flexible board design allows the use of either the compact SO-8C package or the cost-effective DIP-8C package without modifying the board. Summary of Features EcoSmart™ – meets all existing and proposed energy efficiency standards including ErP.No-load consumption <30mW; more than 300mW available in stand-by with 500mW input84% average active-mode efficiency – DOE6 and EC CoC (v5)The board can fit P/G or the cost-effective D packageBP/M capacitor value selects power MOSFET current limit for greater design flexibilityAccurate detection output overvoltage protection (OVP) using primary bias winding sensed shutdown featureAccurate tolerance of I2f parameter (-10%, +12%) reduces system costIncreases MOSFET and magnetics power deliveryReduces overload power, which lowers output diode and capacitor costsIntegrated TinySwitch-4 safety / reliability featuresAccurate (±5%), auto-recovering, hysteretic thermal shutdown function maintains safe PCB temperatures under all conditionsAuto-restart protects against output short-circuit and open loop fault conditionsP and G package with >3.2 mm creepage on package enables reliable operation in high humidity and high pollution environmentsMeets EN550022 and CISPR-22 Class B conducted EMI with >12 dBµV marginMeets IEC61000-4-5 Class 3 AC line surge Read more: 12W AC-DC POWER SUPPLY REFERENCE DESIGN MEETS ALL ERP REGULATIONS ### Home Made Bezel / Window for LCD, LED, TFT Displays. I've been working on a project that used a 16x2 LCD display and wanted a nice finish that also allowed me to seal against water and other liquids. I also needed impact resistance, low cost and the ability to be changed easily if worn or broken. I considered many different ideas:- 1) A full sheet of perspex on the front of my enclosure. Great finish but expensive and difficult to seal as fully transparent. 2) A small piece of perspex over a cut hole in the enclosure. Cheaper but not so nice finish, showing the full LCD through and any rough enclosure cutting. 3) Looking for access to a laser cutter to make a profiled perspex window that sits through the enclosure hole to sit flush with surface. Difficult tolerances and no depth control with a laser. 4) Asking a local workshop to make a profiled perspex window on CNC milling machines. Cost more than using a full perspex sheet. So, eventually I tried something else and ended up with what I think is a nice professional finish that is easy to do, cheap, and results in an iPhone type black glass frame style, with a clear window exactly the right size to show the display properly. It can also be easily adapted to any other type or size of display. Step 1: Create And Print A Template The first step was to take the existing display and get this transferred to some kind of CAD drawing, so that a template can be made. Since I've been getting more proficient with CADSoft Eagle, I simply used a blank BRD file with mm grid to create my drawing and print at scale on to some card. You could use any package that allows you to create accurate drawings at a 1:1 scale. You need it to come out in print to the correct scale. I took the original dimensions of the 16x2 LCD display I had and drew it up, including the stand-off holes. I then added an additional 5mm surround to give my bezel additional strength around the fixing holes, and also to make it look better since the holes wouldn't be right on the edge. Print the template off and then use a sharp knife (craft knife, trimming knife, scalpel), or scissors, to cut out the outline and the inside border. I used plain card for this, but a bit of extra time to make a plastic/acrylic template might be better if you intend to make a lot of these. 16x2 LCD Bezel Template.pdf5 KB 128x64 1.8in TFT Bezel Template.pdf4 KB Step 2: Use Template To Mark Out On A Piece of Perspex Next use the cut out template to mark up a piece of clear acrylic / perspex with the outside dimension and then cut this out.   For more detail: Home Made Bezel / Window for LCD, LED, TFT Displays. ### MaKey MaKey Monome using Arduino Objective: build a monome - a complex electronic music instrument - using easy-to-learn, inexpensive components and a process that's so easy a kid could do it. Gist: This touchscreen music instrument is essentially 4 parts: MaKey MaKey (or Arduino) Neopixels copper tape cardboard Sound is produced in either Scratch (visual programming language for kids) or Processing (visual programming language for artists). Additional info on my website: jdeboi.com. ------------- Materials MaKey MaKey (or Arduino) about 20 alligator clips 64 Neopixels copper tape (double-sided conductive - 6mm x 30m) stranded 22 gauge wire 5V power supply power adapter 300 to 500 Ω resistor capacitor (1000 µF, 6.3V or higher) jumpers 22 square inch glass lots of cardboard (at least 26 inches long) thin, semi-transparent white paper Tools soldering iron+solder wire strippers wire cutters scissors measuring tape straight-edge box cutter small philips head Step 1: Neopixels Neopixels are individually addressable, RGB LEDs. Adafruit sells them in long strips. Soldering Neopixels Cut the Neopixels into 64 pieces, cutting along the line marked by the scissor icon. Tin all of the copper pads on the Neopixels to make it easier to solder on wires. Space out the neopixels by 2.5 inches so that each square on the lattice contains a single LED. Cut lots approximately 2 inch strips of 22 gauge, stranded wire. Strip the plastic off the tips and tin the wires so that it’ll be easier to solder onto the Neopixel’s copper pads. I recommend using 3 different colored wires for GND, 5V, and Data. Check the label on each Neopixel to make sure you’re always soldering the right wire to the right pad. Solder together 8 sets of 8 Neopixels. We’re going to zizag the Neopixels over the array- each row is 2.5 inches above the subsequent row. Always make sure that the LEDs arrows point in a continuous direction as you zig zag from one row to the next, and that you’re soldering 5V to 5V, Ground to Ground, Data to Data. Adding Power Adapter Between the 4th and 5th row of Neopixels, we’re going to splice in the power supply. c In addition to the ground and 5V wires, insert a 1000 µF capacitor across the + and – power adapter terminals. The longer leg of an electrolytic capacitor is the positive leed. The data wire from the end of the 4th row wraps around to the beginning of the 5th neopixel row, as usual. Finish connecting all of the rows of Neopixels together to form the zigzagged array. Neopixel Strip to MaKey MaKey Ground pin on strip to ground on the Makey Makey. Data pin on strip to the MaKey MaKey's D0 pin through a 300 ohm resistor. Install Arduino IDE. Install MaKey MaKey Arduino addon (unless you're just using an Arduino) Install Adafruit Neopixel library. Plug 5V power supply into power adapter. Upload a Neopixel sketch (in the example folder of the Adafruit Library) to test the Neopixels! Step 2: Cardboard Lattice The cardboard lattice is made up of 18 strips of cardboard. cut 9 row and 9 column strips. The dimensions of each are illustrated in the diagram. I used a box cutter and a piece of glass as a straight edge. Slot the pieces together. If the lattice is right side up, there should be a 22inch by 22 inch divit in the middle that holds the glass in place. Hot glue the Neopixels to a poster beneath the lattice to keep them from sliding. I used clay to fill the gaps between the cardboard squares. The clay also holds the cardboard in place. if you don’t have clay, tape or glue should work just as well. Step 3: Touchscreen We want to build an 8x8 monome that has 64 buttons, but the Makey Makey only has about 20 inputs. How can we create 64 separate keyboard triggers with only 20 Makey Makey inputs? The solution is to multiplex the rows and columns. We create 8 rows and 8 columns of copper tape - each line connected to its own alligator clip - and by grounding the intersection of a row and a column, we trigger a unique key. There are 64 intersection points that can be triggered using just 16 Makey Makey inputs.   For more detail: MaKey MaKey Monome using Arduino ### Custom NanoLeaf Lights! DIY, Wireless, Modular, Arduino, 3D Printed! I am very excited to share this project with you because it looks absolutely beautiful and is super easy to make! It's a NanoLeaf inspired wireless Arduino RGB LED lights project that not only allows you to create any custom NanoLeaf shape you want but also use the same identical segments to create a 4-digit display, where you can display the time, temperature, humidity, or pretty much anything you want. All using one single modular segment and for a cheap affordable price! I have made a video that goes over the whole project and explains each step very clearly. So if you want a video version, I highly recommend watching the video as it is much easier to follow. https://youtu.be/RalzwaIh_J4 The instructable thumbnail image shows some of the things you can do with the segments in this project. Lets get into it to see how this is all made! Supplies Let's first go over all the components you will need for the project. ESP32, for the micro-controller.12V 8A, power supply.LM2596 or any step down converter, to convert 12V to 5V for the ESP32. Remember to use the screw on this component to adjust its output voltage to 5V using a voltmeter.LED strip, the specific one used in this project is the WS2811 LED strip. For all the supported LED strips, see this.1000μF capacitor, across the LED strip.A4 3mm matte opal acrylic sheets (x7), used to get the glowing effect. You can cut 4 shapes using 1 A4 sheet. I recommend getting extra A4 sheets just in case something bad happens...Refer to Acrylic sheet shape to see what shape you need to cut from the acrylic sheets.DHT11(optional), used to get the temperature and humidity when using the 4-digit display.Power switch, to turn on and off.M2 bolts, to attach the lid to the main housing part. They can be from 8mm to 12mm long.20 AWG flexible silicon wires, for connecting segments together.Dupont crimping tool, the tool used to make the dupont connectors. Please note, all the 3D printed parts, code, and more information can be found in the project repository here. Step 1: Segment Assembly Now that we know all the components that make up this project, lets see how they all come together. First we will go through how to make a segment, since once you know how to make a segment, you are pretty much limitless in this project. Step 2: The Main Housing and the Acrylic Sheet The main housing and the acrylic sheet simply gets glued into the ledge inside the main housing like shown in the image. Step 3: LED Strip For the LED strips, they need to be cut to a length of roughly 15 cm long to fit in each segment. Make sure you only cut using the cut marks in the LED strip as marked in the first image (red arrows). Please note the number of sections in your LED strip segment, in my case there are 3 sections, since there are 2 cuts as illustrated in the first image. We need to solder wires to the LED strip to allow us to connect segments together, which for that I used dupont connectors. The length of the wires actually matter, so for the female side the wires need to be 12 cm long, and for the male side, they need to be 22 cm long. The female and male sides depend on the arrows marked on the LED strip. The wires need to be 20 AWG to withstand the current. This is illustrated in the second image. To solder the wires to the LED strip, I found a very easy way to do it, in the short clip I show how you can do it. Using pieces of tape for attachment and positioning of the LED strip and wires. Step 4: The Lid Now for the lid, you simply need to 3D print it and glue the LED strips to the flat side and route the wires to the back. Step 5: Lid and Main Housing Then finally, the lid and the main housing simply attaches together using the 2 bolts. And that right there is a fully assembled segment! IMPORTANT! When connecting 2 segments together, you have to ensure that you connect them in the correct direction, the red wire needs to go to the red wire, and the black wire needs to go to the black wire, see image. So whenever you connect segments together, double check and triple check the orientation. Step 6: Segments Attachment Now we know how to make segments, lets see how they attach together. For the segment attachments, I made this tiny little 3D printed connector that slides in into any of the 10 groves that is around each segment. This allows you to easily attach segments together in multiple ways to create the exact shape you want. The clip demonstrates how to connect 2 segments together using this connector piece. Step 7: Shape Sketch Now that we know how to make segments and how to attach them together. Let's see how we can create any custom shape we want! I first recommend making a sketch of the shape you want to make and also come up with a way to wire it. The image is an example of such sketch, marking the start and end points. The start point is the female side, and the end point is the male side, you can choose the location of these points depending on your shape. Step 8: Creating the Shape After you have created the sketch, you first start by attaching all the segments together using the connector to make your shape. Step 9: Shape Wiring Then flip it around, and connect the wires together following your sketch. Step 10: Breadboard Wiring Now for the breadboard wiring, the image is a diagram of the breadboard wiring. Step 11: Code Upload For the NanoLeaf shape, the code is very simple to upload. All you need to do is to go to install.wled.me, press install, choose your upload port and insert your WiFi credentials when asked, and that's how simple it is! Now for the setup you need to do on the phone, it will be pointless to write it all out here, since there are two many small details, so I will just direct you to the video at the 09:39 mark where I go through the setup you need to on do on the phone after the code upload. Step 12: Demo After you have uploaded the code and did the setup on your phone, you can now control your NanoLeaf shape using your phone! Now you can easily change, add, or remove segments to create any kind of shape you want using the exact same identical modular segments! Step 13: 4-digit Display The next steps are for how you can make the 4-digit display. Now for the 4-digit display, it is a bit more involved, but still simple to make. You will need a total of 28 segments, since each digit is made up of 7 segments. Step 14: 4-Digit Display Wiring For the wiring, it needs to match the exact wiring diagram, where the starting point is on the right (female), and the end point is on the left (male). Step 15: 4-Digit Display Breadboard Wiring The breadboard wiring is pretty much exactly same as the custom shape, the only difference is that an extra LED strip segment is attached at the beginning, this is needed to control the 4-digit display appropriately. The DHT11 is optional, it is used to obtain the temperature and humidity. Step 16: 4-digit Display Code Now this is the main difference between the general NanoLeaf shape and the 4-digit display. Please note, in the video (time: 13:37) I go through and show the exact steps on how to upload and use the code for the 4-digit display. Below is just a short text version. Install VSCode.In VSCode, install the PlatformIO IDE extension.Clone/download the project repo.Open the /WLED directory in VSCode.There are two changes you need to make before uploading the code: In WLED/platformio.ini, under the [env:esp32dev] environment, change the upload_port to your micro-controller port.In WLED/usermods/NanoLeaf_Display/usermod_nanoleaf_display.h, change the ADDR_LEDS_PER_SEG variable to the number of addressable LED sections there are in your LED strip. In the image it illustrates what I mean here, there are 3 sections, since there are 2 cut marks, so if you were to cut the LED strip on the cut marks, you will get 3 seperate sections, this is the number you need to set the ADDR_LEDS_PER_SEG variable to. Now you can upload the code. For the setup you need to do on the phone and how to use the usermod settings to control the 4-digit display, refer to the video (time: 14:42). Step 17: 4-digits Display Demo Just like that, you have created an epic 4-digit display! Step 18: Desk Light You can even use the segments to create a little desk light! Step 19: Done! That is the project done! This project truly looks stunning in real life, which unfortunately does not come through in the images and video. I highly recommend watching the video, as it is much easier to follow and everything is clearly explained, you will also understand the project better! https://youtu.be/RalzwaIh_J4 Thank you very much, and I will see you on the next project! Step 20: Project Resources Project videoProject repository Includes: 3D printing files, code, wiring, and everything else you need. Source: Custom NanoLeaf Lights! DIY, Wireless, Modular, Arduino, 3D Printed! ### Arduino and Xbee wireless setup The Arduino Wireless shield allows your Arduino board to communicate wirelessly using Zigbee. This documentation describes the use of the shield with the XBee 802.15.4 module (sometimes called "Series 1" to distinguish them from the Series 2 modules, although "Series 1" doesn't appear in the official name or product description). A Simple Example You should be able to get two Arduino boards with Wireless shields talking to each other without any configuration, using just the standard Arduino serial commands (described in the reference). To upload a sketch to an Arduino board with a Wireless shield, remove the Xbee. Then, you can upload a sketch normally from the Arduino environment. In this case, upload the Communication | Physical Pixel sketch to one of the boards. This sketch instructs the board to turn on the LED attached to pin 13 whenever it receives an 'H' over its serial connection, and turn the LED off when it gets an 'L'. You can test it by connecting to the board with the Arduino serial monitor (be sure it's set at 9600 baud), typing an H, and pressing enter (or clicking send). The LED should turn on. Send an L and the LED should turn off. If nothing happens, you may have an Arduino board that doesn't have a built-in LED on pin 13 (see theboard index to check for sure), in this case you'll need to supply your own. For more detail: Arduino and Xbee wireless setup ### ST says low power comparator is fast The TS3011 single comparator features a high-speed response time with rail-to-rail inputs. Specified for a supply voltage of 2.2 to 5 V, this comparator can operate over a wide temperature range of -40°C to +125°C. The TS3011 offers micropower consumption as low as a few hundred microamperes, thus providing an excellent ratio of power consumption current versus response time. The TS3011 includes push-pull outputs and is available in small packages (SMD): SOT23-5 and SC70-5. Key Features Propagation delay: 8 ns Low current consumption: 470 μA typ at 5 V Rail-to-rail inputs Push-pull outputs Supply operation from 2.2 to 5 V Wide temperature range: -40°C to +125°C ESD tolerance: 2 kV HBM/200 V MM Latch-up immunity: 200 mA SMD packages STMicroelectronics has a high-speed voltage comparator with current consumption of less than 500µA. This is significant, says ST, because of the chip’s 8ns propagation delay at a current consumption of only 470µA at 5V. As well as signal-conditioning applications in telecoms, fast-response comparators can find use in pulse-width modulation for audio amplifiers or as output buffers in oscilloscopes and analog-to-digital converters. The TS3011 integrates push-pull outputs, removing the need for a pull-up resistor, and rail-to-rail inputs with operating voltage range from 2.2V to 5V. The device delivers a stable response time over a wide temperature range of -40°C to +125°C. It is a robust solution with superior ESD (Electrostatic Discharge Protection) capabilities and a latch-up immunity of 200mA. For more read:  ST says low power comparator is fast ### 6 reasons to consider branching out into out-of-home (OOH) advertising. There are many marketing strategies to choose from but one that can be particularly effective is out-of-home or OOH advertising. This method of advertising uses multiple formats to reach consumers at any point during their time out of their home and can be used to either reach a new audience or bolster a larger campaign. Spending on OOH advertising grew to 901 million in 2021 proving its popularity, so whether you are failing to entice the consumer base you desire or just want to broaden your target market, here are 6 reasons to consider OOH advertising as part of your next marketing strategy. More than just billboards and bus stops Out-of-home has evolved far beyond just billboards and bus stops, it can cover almost anything a potential consumer could lay eyes on when they are out of their home. Interactive screens, posters or live screens utilised in shopping centres, outside leading supermarkets or on a busy high street. The possibilities are almost endless. Hard to miss. OOH is the marketing strategy that never sleeps, and it works because it is always there but never obvious. Consumers can be targeted at any point in either their working or errand-running day. A consumer going to stock up on essentials could see a bus stop poster on the way to the shop, checkout advertising while they are there and then an advert on the side of a bus on their way home. Data, Data, Data Knowing who you want to reach, where you want to reach them and what you want to achieve gives the foundations to begin targeting audiences with precision. By using data, OOH can be used in the inventory items most likely to succeed and give the high-volume impressions desired. The outcomes are measurable too! Affordability The adaptability of OOH also lends itself to affordability. Location, size, and length of display are all influencing factors when it comes to the price of an out-of-home campaign. Because it can be tailored it can also be kept within a budget meaning you don’t have to break the bank to break out into the world. Instant Brand Awareness A picture can say a thousand words. Consumers are bombarded with ads all over television and radio every day and as such the impact of these ads has lessened overtime. OOH reaches people in real-world situations and isn’t as in your face, using a picture on a bus can create an instant buzz with a potential consumer and get them invested in what your business has to offer. Accessible for all Historically, businesses needed to have a relationship with the media owners they wanted to advertise with or at least get into their good graces in order to create and execute an effective OOH campaign. Now with programmes such as Clear Start, businesses are equipped with everything they need and can be assured that their message will meet the intended audience at scale. These six reasons are just a drop in the ocean of many reasons to consider out-of-home advertising but with the potential reach available for minimum effort, the return on investment could be huge! So, what are you waiting for, start creating today. ### Emotionally Unavailable Plant Since the pandemic started, and working from home became the new norm, your plant has been your most faithful companion. Bringing life and color to your desk, cheering you up during your long and lonely days, easy to take care of… Yeah, buying that plant was definitely a good idea. And, unlike humans, your plant will never let you down and break your heart, right? But… aren't you tired of healthy relationships? Don’t you miss the thrills of doubt and uncertainty? Don’t you want to feel the need to be comforted? We see you, and we hear you. Let us introduce you to the very first Emotionally Unavailable Plant: the plant that will bring you the toxic relationship you didn't know you needed. https://youtu.be/fd6cMG1bDK4 A plant that doesn't want you to get attached to it, is exasperated by your affection, and wants to have nothing to do with your personal problems. As long as you keep your relationship casual, your plant will stay around and even make cute sounds. But beware, if your petting become too intrusive, it will quickly run away from you and your silly feelings. And do you know what the best part is? You get to build this lovely companion yourself! Yes, your relationship with your favorite plant will probably deteriorate, but don't you think it's time to free it from your bad vibes and mood swings? Come on, dry your tears and follow our easy tutorial, your plant will thank you. This project was conducted by Ivana Trifunovic, Selin Sevim, and Alina Turean as a part of the Computational Design and Digital Fabrication seminar in the ITECH master program. Supplies Here's everything you'll need to build your own Emotionally Unavailable plant. Robot body The body of our robot is composed of 3 main elements: A platformA plant potAnd a cover case We 3D printed all of them. If you don't have access to a 3D printer, a laser cutter can or manual cut will also work perfectly. You will also need: 1x 360 degree wheel (example)Some non-conductive material (i.e. rubber gloves) Electronics If you are new to electronics, we recommend that you get an Arduino Starter Kit, that will contain most of the components needed for this project From Arduino Starter Kit 1x Arduino Uno R31x Mega breadboard (or two small breadboards)1x 1MΩ resistor1x Piezo buzzer1x H-bridge L283D Motor driver1x ButtonMale header pins Additional components 2x 9V batteries (you'll likely need more for prototyping) + battery snaps2x motorized wheels (example) or 2 TT motors and custom wheels1x Ultrasonic sensor (HC-SR04)1x crocodile clipLots of wires (Female to Male, Male to Male). We highly recommend rigid core jumper wires (example) to have a circuit that is as flat and insulated as possible (we'll develop this point in Step 3) Prototyping tools Hot glue gun, superglue, and duct tapeCraft knifeScrew driverA soldering iron is not mandatory but very practical to have at hand! And most importantly... Your favorite plant!!! Our robot is made for small plants, around 20cm high. This is mainly due to the weight our motors can take, but you can adapt it to your own materials. Any type of plant will work, but the more wet the soil is, the better :) Step 1: Logic and Setup Capacitive sensing Our emotionally unavailable companion uses capacitive sensing to detect your intrusive presence. The capacitiveSensor library turns two Arduino pins into a capacitive sensor, which can sense the electrical capacitance of the human body. The moist soil of your plant is a conductive material, and makes a perfect touch sensor! With just two wires and a 1MΩ resistor, we are able to detect if you are in contact with your plant, and how intense is this contact. If you are eager to learn more about capacitive sensing, this Arduino page provides a good explanation, as well as this page. Other sensors and actuators Motors To allow your plant to escape your caresses, we use a simple H-Bridge L293D driver that controls the two motorized wheels. It is the most convenient and space-effective option to control the two motorized wheels. We recommend reading this article if you want to have a better understanding on how to use it. Ultrasonic sensor You wouldn't want your favorite companion to hurt a wall when moving around, would you? Adding an ultrasonic sensor in front of your platform, secures your plant from any obstacle on its way for freedom! Before any movement is initiated, the Ultrasonic sensor will calculate the distance to the nearest obstacle, and check that there is enough free space for your plant to run away safely. If an obstacle is too close, it will initiate a 90° turn to the left, and check again. Piezo buzzer Because we know how pleasant it is to play with your plant leaves, we made sure to give your plant enough ways to convince you to leave it alone. We added a small piezo buzzer that produces nice, melodic... okay, pretty annoying sounds when you become too tactile. Touch thresholds Your plant will have four different levels of tolerance. The more you touch it, the more intense will be the reaction. Flirty If your caresses stay light, your plant will make cute sounds of appreciation that will make you love it even more than you already do. But don't get too attached, its patience is very limited! Soft If you become a bit more adventurous, your plant will make a small move, and the sound will become less friendly. Your companion will stay reachable, but take this as a warning! Intense If you can't refrain your affection, your plant will have no other choice but to drive itself far away from you. The message should be clear now, right? Too much How do you dare touching your poor plant even more? Your audacity will be punished by a long, high-pitched sound, and your plant will definitely get away from your wandering hands. Step 2: Let's Make a Fancy Plant Pot To give your favorite plant an opportunity to express its feelings, you'll first have to built it a new home that has more features and space to play with. We have chosen to go with a fancy 3D printed case for which we provided the files that are ready-to-print. But having a 3D-printer shouldn't be a criteria for you to follow this tutorial! The pot can be achieved in many ways, so it's your time to be creative and mind-blow us with cool designs ideas that match your plant character ;) The design is composed of 3 main parts: A base platform that will host the wheels and all the electronic components. In addition to the main platform, a few other pieces make it even better.A case to contain all the messy jumpers and give a cool aestheticsA cover pot that sits in the top, in which you can directly transplant your plant! Let's construct it: Start by 3D-printing all the parts in the file provided just below, or build your own pieces.Glue the additional platform parts on the platform. Refer to the pictures for their locationFix your two motorized wheels (we used superglue but there are plenty of options to make them stay in place) and your additional wheel on the platformPosition your breadboard and batteries in the holes. Fix your Arduino Uno above one of the wheels (we only used tape because we want the electronics part to be fully dismantable and handy for prototyping). Now, get your plant ready: Transplant your plant to the 3D-printed pot. Remember to always water it away from the electronic part!Wrap the pot with a non-conductive material (here we used a custom cap made of rubber gloves). This step is very important to insulate the moist (and conductive!) soil from the wires, and thus to avoid interfering in our electric field. Your plant can now sit proudly on the case and is ready to deal with your annoying emotional behavior! Step 3: Giving Your Plant a Voice (Wiring) Now that your plant has a nice body, it's time to give it ways of expressions! Get your wires ready, it is time to connect everything. A few recommendations before starting: To make our capacitive sensor as reliable as possible, it is crucial to maintain the electronic field surrounding the wires as far away as possible from our plant's soil. So, no messy wiring here! We used flat, solid core wires as much as possible. We also opted for a Mega breadboard, to keep the middle of our platform as "clear" as possible from electronic interference. For each step, you can refer to the attached wiring diagrams and pictures. Please make sure to also check your components datasheets as wiring can slightly differ from one to another! We strongly recommend that you test your wiring after each step before going on to the next one. This makes troubleshooting way easier! For each step, we provided a test code that will help you check that your components are working the way you want them to. Start by wiring the motor driver Attach the L293D H-Bridge to the end of your breadboard that is closer to the wheels. Connect as following: Start with the Battery: Vcc2 is connected to the positive side, the negative side goes to the negative bus of the breadboard. Connect the negative bus to Arduino GND pin.Vcc1 to Arduino 5V pinENA to Arduino pin 9IN1 to Arduino pin 8IN2 to Arduino pin 7IN3 to Arduino pin 5IN4 to Arduino pin 4ENB to Arduino pin 3Connect OUT1 and OUT2 to the 1st motor. Connect OUT3 and OUT4 to the second one. There is no wrong or right order for your motor connections as you'll find out by running the code if they go in the right direction or not and will be able to interchange them.Common all the grounds by adding a wire that goes from one negative bus of your breadboard to the other one. Do the same for the two positive sides. Check that your two motors are running correctly. The code provided will test basic functions such as moving forward, backward, acceleration... Step 2: add the Ultrasonic sensor and the 2nd battery Fix your Ultrasonic sensor in front of the platform, on the small promontory designed for this purpose. Connect as following: Vcc to the breadboard, with one wire connecting it to the positive busTrig to Arduino pin 6Echo to Arduino pin 11Gnd to the breadboard, with one wire connecting it to the negative bus From now on, you need to connect the 2nd battery to make the circuit work away from your computer Connect the positive side to the positive bus of the breadboard. Add one wire from the positive bus to Arduino Vin pinConnect the negative side to Arduino GND pin Check that the sensor is working well. The code will allow you to print the distance between the sensor and an obstacle. Step 3: add the Piezo buzzer We recommend to add the piezo on the opposite side of your breadboard, as our goal is to keep the center of the platform as wire-free as possible. Connect as following: Plug your piezo on your breadboardConnect one leg to the negative busConnect the other leg to Arduino pin 2 Check that your buzzer is working well. The code will produce basic bips every second. Step 4: create your capacity sensor and add a reset button Connect as following:Plug the 1MΩ resistor to your breadboardConnect one leg to Arduino Digital pin 12, and add another wire on the same line. This wire will go in the soil of your plant. You can also use a crocodile clip here.Connect the other leg of the resistor to Arduino digital pin 13 Check that your capacity sensor works well. You can simply start by touching the end of the wire, and then plug it into your plant's soil and try touching the leaves of the plant. The code will allow you to read touch values (you'll need to install a special library, please refer to the next section for more details). Finally, let's add a reset button. This will make the testing and troubleshooting a lot more convenient. Connect one leg of your button to the negative bus of the breadboardConnect the other one to Arduino Reset pin Step 4: Understanding Your Plant Signals (Coding) It is now time to open your computer, and start talking to your plant. The attached code already contains everything you need! First, install the necessary library You'll need a special library to read the capacitive sensing values. You can download it directly from the Arduino IDE by going to Sketch - Include Library - Manage Libraries. Search for CapacitiveSensor, and install it. Let's go through the code We can break down the code into 4 parts. 1) Inputs and variable definitions First, define the 4 touch thresholds and their reactions. You will need to tune those values depending on your material, space available, and the kind of relationship you want with your plant!We then define the variables we need for the calibration step, and all the sensor and actuators we use. You'll only need to modify those if you use different Arduino pins. 2) Functions definition This is where the main functions of our project are created. Calibration of touch valuesDistance to obstacle calculationMotor moves functionAnd most importantly, the Flee loop that will be triggered when you touch your plant. 3) Void Set-up When you run the program, the first 5 seconds are dedicated to the calibration of your capacitive sensor. For optimum results, you should do this calibration with your cover and your plant pot on top of the platform to have values as accurate as possible (this is why having a reset button outside of the cover case is very handy!). During the calibration window, touch your plant as much as possible, and don't touch it at all: the goal is to gather the maximum and minimum touch values. A bip will indicate you when the calibration starts and ends. 4) Void Loop You are now ready to start playing with your plant! The main loop is pretty straightforward: The capacitive sensor collect touch values that are mapped on a 0 to 100 rangeDepending on the threshold it falls into, the touch triggers two reactions: sound (with the tone() function), and movement (with the FleeLoop) Step 5: Tips and Improvements As we wanted a completely removable system, we have chosen not to solder our components and to use a breadboard. But if you aim for a more definitive machine, soldering will make everything more reliable! If some of your wires do not connect in a stable way, soldering them to a male header pin and plug this pin in the breadboard will definitely help. What comes next... There are many other useless features that you could add to make your relationship with your plant as toxic as you've always dreamed to. Here are a few ideas of further implementations: add a screen to ease out the dialogue, add color-coded LEDs to assert boundaries, add more extreme reactions in case of repetitive contacts... However, it is good to keep in mind that we are playing with micro-electronics here, and not-so-strong components. We realized that adding too many features was creating a lot of interference, confusing our capacitive sensor. To take this project to the next step, one should consider getting rid of the breadboard and re-design the platform and case in order to have as many distance as possible between the wires of the different components. A note on more advanced touch sensing If you are interested by touch sensing technologies, and would like to dig deeper in the topic, we recommend you to check out the Touché project by Disney researchers. By using Swept Frequency Capacitive Sensing, they are able to detect much more precisely the kind of contact you have with an object. Thanks to dedicated members of the Arduino community, this technology has been implemented to Arduino a few years ago. A library and tutorials are available online. (custom Touché shield; plant application). Check out those links! We would love to try to implement this technology to our project, so let us know if you achieved it! Step 6: Send Us Pictures! If you have reached this step: congratulations! We hope you enjoyed the making (or the reading) of this tutorial as much as we did. If you have any question regarding the tutorial, please don't hesitate to reach out in the comment section and we will do our best to help. This project is beginner friendly, and is a good opportunity to get started with electronics in a fun and rewarding way :) As this is our very first Arduino project, we would also love to hear your feedbacks and suggestions for further development! Last but not least, we are looking forward to see pictures of your own Emotionally Unavailable Plant!! Source: Emotionally Unavailable Plant ### 60 seconds Voice Record – Playback module Description Voice Module 60 Sec project will playback and record up to 60 seconds of voice message.  This circuit  is an excellent choice to add voice to your project. Specifications: Up to 60 Seconds of nonvolatile voice storage Up to eight segments record and play option available Easy and clear, jumper selectable mode option Preset for adjusting sampling rate Tactile switches for Record, Play function trigger Easy jumper selection for selecting recording source Onboard microphone for recording message directly onto the chip Audio output available to drive a speaker Direct speaker connection via berg connector LED to display Record/Playback of messages Berg connector for power supply input Four mounting holes of 3.2 mm each PCB dimensions 54 mm x 94 mm This circuit will help you record and play a 60 seconds voice message stored on it.  This circuit is based on APR9600 IC from Aplus. The project provides four different modes of voice message to be recorded and played, viz i) MOD8 : 60 Seconds is equally dived in 8 equal segments, ii) MOD4 : 60 Seconds is equally divided in four equal segments, iii) MOD2 : 60 Seconds is equally divided in two equal segments and iv) Tape Mode : Entire 60 segment is available in a single shot mode.  For MODE selection see MODE selection table. There are two different ways to record a voice message onto the chip viz. i) CN1 connector on PCB for external audio input or ii) Onboard Microphone.  Jumper J3 on the PCB to select audio source.  J3-Position A would select the external audio input and J3-Position M/P would select onboard microphone.  Onboard preset PR1 will adjust the sampling rate of playback and record option for IC.  Important thing to remember is that, if you increase the sampling rate, the duration of message will reduce and vice-versa.  For details see resistance values & sampling frequencies table. Recording a Message: To record a message, please select the right MODE at Jumper J1 and J2.  The MODEs are clearly marked on the PCB and jump or no-jump positions are also marked.  Also select the source for recording through CN1 Connector.  Keep the sampling rate preset PR1 in the middle position to test a sample of the recorded message.  Increasing the sampling rate will decrease the total amount of recording time and vice-versa.   For more detail: 60 seconds Voice Record – Playback module ### What is MKR Token and What makes MKR Token Unique? What is Maker Protocol? The Maker Protocol is a decentralized application (dapp) that operates on the Ethereum blockchain and has gained widespread popularity. It was developed by a diverse group of individuals, including developers from the Maker Foundation, external partners, and other entities. Notably, it was the first decentralized finance (DeFi) application to experience significant adoption. MKR holders from all over the world manage the Maker Protocol by owning its governance token, MKR. Using a process of scientific governance that includes Executive Voting and Governance Polling, these holders oversee the Protocol and monitor the financial risks associated with Dai to ensure its stability, transparency, and efficiency. Each MKR token locked in a voting contract represents one vote. What is MKR Token? The Maker Protocol's governance token, MKR, grants voting rights to its holders regarding any changes to the protocol. It's worth noting that while MKR holders can vote, any individual, including non-MKR holders, can propose changes to the protocol for an MKR vote. In the future, changes to the governance variables of the Protocol that receive voter approval may not take effect immediately. If voters decide to activate the Governance Security Module (GSM), there could be a delay of up to 24 hours. This delay is intended to give MKR holders time to safeguard the system against potentially harmful governance proposals. For example, a proposal that goes against established monetary policies or allows for security mechanisms to be disabled could trigger a Shutdown. What is MKR Token used for? Polling and Executive Voting:The Maker Governance process involves two key steps: proposal polling and Executive Voting. First, proposal polling is conducted to gauge the community's general sentiment before any Executive Votes are cast. This step is important because it ensures that governance decisions are carefully considered and agreed upon by the community before the voting process begins. Second, Executive Voting is used to either approve or reject changes to the state of the system. For instance, an Executive Vote might be held to ratify the Risk Parameters for a new collateral type that has been accepted into the system. Smart contracts are responsible for managing the various types of votes in the Maker Governance process. A Proposal Contract, for example, is a smart contract that contains one or more valid governance actions programmed into it. Once executed, the Proposal Contract applies its changes to the internal governance variables of the Maker Protocol, and it cannot be executed again. Valid Proposal Contracts can be deployed by any Ethereum Address. MKR token holders can then cast their approval votes for the proposal that they prefer, which will be designated as the Active Proposal. The Ethereum address that receives the most approval votes will be elected as the Active Proposal, and will be granted administrative access to the internal governance variables of the Maker Protocol for modification purposes. Recapitalization: Apart from its function in Maker Governance, the MKR token also serves as a means of recapitalizing the Maker Protocol in times of need. When the system's debt exceeds its surplus, the MKR token supply can be increased through a Debt Auction (as explained earlier) in order to recapitalize the system. This incentivizes MKR holders to take responsibility for and govern the Maker ecosystem prudently, in order to prevent excessive risk-taking. Where can you buy Maker(MKR)? Both centralized and decentralized cryptocurrency exchanges allow trading of MKR tokens. MEXC Global is the most well-liked marketplace for purchasing and selling MKR tokens. How to Buy MKR Tokens? You can use the MEXC Global search bar to search for "MKR" to view available trading pairs. And you can also find a detailed guide on how to buy MKR token. The Maker Protocol has become one of the most popular and important DeFi platforms in the Ethereum ecosystem, with billions of dollars in value locked in its smart contracts. It is considered a pioneer in the field of decentralized stablecoins, and its success has inspired the development of many other DeFi projects that aim to improve and expand upon its functionality. ### CHAI RELEASE OPEN SOURCE ENVIRONMENTAL TESTING KIT FOR COVID-19 The CHAI team announced at the Open Hardware Summit that the group would be launching an environmental test kit that will be able to work on the Open qPCR machine, which was released in 2016. The kit will be a DIY test kit for COVID-19, which has caused a global pandemic for the detection of the virus on surfaces, objects, and non-liveable things. One cannot overstate the importance of containing the spread to help. Detecting how the virus is transmitted will help researchers figure out a way to slow it and hopefully stop it. The Open qPCR, which is built around the BeagleBone Black Single Board Computer (SBC), is an open-source device created for Polymerase Chain Reaction (PCR) testing. PCR is a technique for studying DNA and RNA sequences. The Open qPCR has the single-channel version, which costs $4,499 and the double channel version, which costs $6,499. This is affordable and portable for a piece of lab equipment. Read more: CHAI RELEASE OPEN SOURCE ENVIRONMENTAL TESTING KIT FOR COVID-19 ### Arduino or Twitter Mets Apple Whenever I go to Citi Field with my kids to see the Mets, they go crazy for the Home Run Apple.To me, the Apple is part of what makes baseball exciting for kids. Even though my kids may not watch most of the games, I still enjoy bringing them along. The Home Run Apple started popping out of a top hat at Shea Stadium in 1980 and now Citi Field has an updated version of the Apple. The apple pops up when a Met hits a home run. The old apple from Shea Stadium was retired and now rests outside of the Jackie Robinson Rotunda of Citi Field. There are a few other teams around the majors that have their own home run gimmicks as well, and I have written this project in a way that it could be easily adapted to another team. The other teams that come to mind are the Angels (fireworks), Astros (Train), Brewers (Bernie Brewer sliding down a yellow slide), Marlins (clockwork fish & fireworks), Phillies (Liberty bell) and Reds (fireworks). Feel free to let me know if I have missed any in this list. I thought I would like to have a little piece of Citi Field in my house that would react when the Mets hit a homerun. I thought of a few different options, but all of them would be difficult to implement reliably on such a small platform as the Arduino. The main problem is that while baseball scores are available, you have to pay for most data feeds. To make things worse, I didn't really want a box score or any other form of sports score that I could think of. I wanted a notification of a current home run on a timeline that I could acknowledge and ignore until another home run notification came in. The only possibility that I could think of was Twitter. First working prototype... Final working apple! Step 1: Lego Prototypes Originally I was just planning to temporarily make the apple and top hat out of Legos until I could find a more suitable solution. My daughters have a growing collection of Legos, but unfortunately almost all of theirs are pink, white and light green. I stopped by a Lego store and bought a small container (about $8) of red and black bricks from the pick-a-brick bins and built the first model which was very boxy. I wanted something that had a little more curve to it, but I had used up all of the Legos I bought. I made another trip to a different Lego store, hoping to find different sizes of bricks and hopefully some plates as well. I didn't have much luck finding plates, but I did get a good variety of black and red bricks, so I bought the large container (roughly $15) and filled it up. I still wasn't satisfied with the curves I was able to make, so I made another trip to the Lego store and bought another large container (I know, I can't help myself). I figured I could make the curves smoother if I just made it big enough. Unfortunately, the smooth horizontal curves that I can get by making it bigger don't help with the vertical curves of the apple, so I needed to find some plates. I looked on Lego.com and a few brick resale sites online, but it seems like you have to buy everything separately and it can get very expensive, very quickly. I looked on eBay and found a user selling 1/4lb bags of color separated Legos with a buy it now auction. I bought 2 red and 2 black and hoped that they had a good selection of plates. When the bags came they had everything I needed and there was plenty of excess that I gave to my kids to improve their collection. Step 2: Servo I bought a micro-servo from Sparkfun because it was cheap ($9) and I thought space might be an issue. I've never had a reason to use servos with Arduino, but this worked very easily and without too much trouble. I first tested the servo with the basic servo sweep sketch on the Arduino and moved the arm back and forth. I had to adjust the arm so I kept the movement that I needed within the range of the servo. It seems like the servo strains a bit when it gets up to the outer limits of it's movement. Avoid the urge to force the servo to a particular place because you may break something inside the servo. I used a drinking straw as a push rod to pop the apple up and down. The straw was just the right size to fit into the circles on the bottom of the Legos so it would stay in place. The other end I trimmed short, poked a hole in the end, pushed a piece of UTP wire I had laying around through the straw and servo arm and twisted it up. I had found a spot to rest the servo in the side of the top hat and I used hot glue to stick it in place. More good into about servos Step 3: Meet the Mets I wanted to play some sound as well when I triggered the apple mechanism, so since I don't have a way to play crowd sounds or baseball bat cracking sounds, I decided to make the Arduino play the Mets theme song "Meet the Mets". I found 2 different sets of sheet music for the song, and I pieced together the part I needed from the 2 sites. You have to click around an awful lot to get to the right instrument part, but I think I got it pretty close. http://www.onlinesheetmusic.com/ http://www.hamienet.com/ I won't go into it again here, but I wrote another Instructable that outlines my process for turning sheet music into Arduino code.   For more detail: Arduino or Twitter Mets Apple ### Starship X582 Incursion Starfighter Childrens Interactive Bed Now forgive my memory, as this was a few years back now. What started out as a children's spaceship themed bed, turned into an epic build. Supplies The project started with the purchase of a single mattress. I then walked around the local DIY store and started to find shapes that I thought I could make into Starship parts. Two rectangular dustbins became the side Nacelle engine pods. Cutlery holders became the thruster pods, a large plant pot and a dirt sieve became the main centre engine. All the framing was made with 18mm MDF and CLS timber. The front landing foot was made of scraps of timber, with a Poundland Bike pump as a hydraulic piston. After designing all the parts, I then painted everything matt white. Step 1: Assembly Well, what I can I say... months of design, assembly and fiddling followed. The cabin lighting was a huge array of illuminated push buttons (thank you China). These and all the LED lighting were controlled by an Arduino Mega 2560p in the cockpit. The Mega controlled MCP23017's to give me more inputs and outputs. There was also an array of MAX7219's controlling all of the illuminated buttons. There were also rotary buttons, toggle switches and keypads. The confirmation voice was a text to speech recording, put through an editor to add echo. MILES of wiring went into this thing. Plenty of the parts were 3d printed (far too many to list here). I basically made them up as I went. The graphics were designed in Photoshop and simply printed out onto standard vinyl (Ebay). Very effective and cheap. LEDS.... Loads of them. I just purchased a huge bag of mixed colours from China and placed them inside the engine pods, along with the car speakers. The amplifier for the speaker system was actual an old PC system with a sub-woofer. Step 2: Flight Console The console was mocked up in cardboard. I found an old joystick and a selection of old screens. The main 2.4" touchscreen allowed you to 'fly' around space. You could pick a planet to navigate to and then use the throttle and joystick to fly there. It also showed your artificial horizon and weapons status. The whole navigation 'arm' lifted on a motorised linear actuator with a whole host of anti-trap sensors to stop little fingers getting crushed. The navigation console also had four 2x40 LCD displays (because I had them!). These showed all manner of information such as radio frequencies, speed, fuel, weapons etc All this console ran off another Arduino Mega 2560p. This linked to the cabin Mega via serial. https://www.youtube.com/shorts/LZWDgmlGGAs Step 3: PSU In the PSU lived an Arduino Pro Mini. This took care of all the sound effects and engine lighting. Again, linked to the main cabin Mega via serial. It contained a row of Mosfets to switch the various lighting effects, and two different MP3 modules. One was a Wav board that supported over-laying tracks. This allowed me to 'loop' the engine sound seamlessly. I could also increase and decrease the pitch of the engine. All the interfaces and panels were breadboarded first to ensure they worked. https://www.youtube.com/watch?v=9Aco-kz63qA The other MP3 module was for the music. You could play various 'space' music themes and tunes in the cabin. Step 4: Remote Control A Bluetooth receiver on the main cabin Arduino Mega allowed full remote control (and therefore parental control) of all the systems. This was written using MIT App inventor 2. Step 5: Self Destruct System Lifted straight from the film Alien. I found an old control panel that I decided could be the self destruct system. I added a servo to give it a 'moving' part and once armed, it announced the destruct system was armed with the associated countdown. The navigation screen switched to a countdown timer (Alien style) and the cabin RGB LEDS pulsed amber/red. https://www.youtube.com/watch?v=oON3KPB6mus Step 6: She's Flight Ready If you want to see a grown man wedged inside a child's bed, then have a look below! https://www.youtube.com/watch?v=bepTv2w4InI&t=413s Source: Starship X582 Incursion Starfighter Childrens Interactive Bed ### ADI converter will cut power of professional audio The ADAU1966 is a high performance, single-chip DAC that provides sixteen digital-to-analog converters (DACs) with differential output using the Analog Devices, Inc. patented multi-bit sigma-delta (Σ-Δ) architecture. An SPI/I2C port is included, allowing a microcontroller to adjust volume and many other parameters. The ADAU1966 operates from 2.5 V digital and 3.3V or 5V analog supplies. A linear regulator is included to generate the digital supply voltage from the analog supply voltage. The ADAU1966 is available in an 80-lead LQFP package. The ADAU1966 is designed for low EMI. This consideration is apparent in both the system and circuit design architectures. By using the on-board PLL to derive the master clock from an external LR (Frame) clock, MCLK, or from an external crystal, the ADAU1966 can eliminate the need for a separate high frequency master clock and can also be used with a without a bit clock. The DACs are designed using the latest Analog Devices continuous time architectures to further minimize EMI. By using 2.5 V digital supplies, power consumption is minimized and the digital waveforms are a smaller amplitude, further reducing emissions. FEATURES and BENEFITS     PLL generated or direct master clock     Low EMI design     118 dB DAC dynamic range and SNR     −98 dB THD + N     2.5V digital and 3.3V or 5 V analog and IO supply     232mW Total Quiescent Power at AVDD=3.3V     Linear regulator driver to generate digital supply     Supports 24-bits and 32 kHz to 192 kHz sample rates     Low-Latency 192kHz sample rate mode     Differential DAC output     Log volume control with autoramp function     Temperature sensor with digital readout +/- 3˚C accuracy     SPI and I2C controllable for flexibility     Software-controllable clickless mute   Analog Devices has introduced a 16-channel audio D/A converter designed to reduce power consumption in professional audio systems and automotive equipment. The 24-bit ADAU1966 16-channel audio D/A converter provides 118dB-SNR (signal-to-noise ratio) performance at 32kHz to 192kHz sampling rates. Its 118dB SNR performance is achieved with a lowest in class power consumption of less than 300mW for 16-channel operation by running the digital portion of the device at a lower voltage. The digital supply can be generated on chip via a linear regulator allowing the chip to operate off a single analog supply. Alternatively, the regulator can be bypassed and a separate 2.5V to 3.3V supply provided to the chip. Operating the ADAU1966 with full-scale differential output voltage of 3 Vrms reduces the need for downstream gain and preserves a high SNR against electrically-coupled system noise. By using the A/D converter’s on-board PLL (phase-locked loop) to derive the internal master clock from an external left/right clock, the chip is designed to eliminate the need for a separate high frequency master clock and can be used with or without a bit clock. It is qualified for AEC-100 automotive applications and operates at a -40° C to +105° C temperature range. It also features an SPI/I2C port which allows an external microcontroller to adjust volume and read the chip temperature to within +/-3°C.   For moreread: ADI converter will cut power of professional audio   ### Control Fluorescent Lights with a Laser Pointer and an Arduino A few members of the Alpha One Labs Hackerspace do not like the harsh light given out by fluorescent fixtures.  They wanted a way to be able to easily control the individual fixtures, perhaps with a laser pointer? I got right on it.  I dug out a pile of solid state relays and brought them to the Lab.  I bought an Arduino Duemilenova and demonstrated the use of the LED Blink example sketch to actually blink a halogen lamp.  I found some info on using LEDs as light sensors [1] and an Arduino sketch demonstrating the technique[2]. I found that the LEDs were not nearly sensitive enough - the laser had to point straight into the light emitting part, or the LED wouldn't register.  So I switched to phototransistors.  They are much more sensitive, and over a wider range of frequencies.  With the proper filter over the transistor I could make it more sensitive to red light, and from a much wider range of angles to the sensor. DISCLAIMER AND WARNING:  This instructable deals with line (mains) voltage at 120 or 240 volts.  Use common sense if you build this circuit - if you have a doubt about something, ask someone who knows.  You are responsible for your (and others') safety, and compliance with local electrical codes. light control demo.avi2 MB Step 1: The Sketch and some Theory I'll assume you know how to power your Arduino, and get a sketch compiled and loaded in. For each lamp I use telephone cable, since it's cheap, has four conductors, and I had a bunch laying around anyway.  I used red for common +, black for ground, green for the phototransistor collector, and yellow for the relay control +. A phototransistor passes an amount of current that varies with the amount of light falling on it.  The Analog to Digital Converter (ADC) in the arduino measures the voltage at the pin relative to ground.  I looked at the phototransistor data sheet and verified with a multimeter that the transistors pass 10mA at full light. Using Ohm's law, that's about 500 ohms at 5V, To control the lamps I used a solid state relay module.  These are relatively cheap at the current rating we needed, about $4 for up to 4A.  Make sure to buy relay modules with a zero-crossing detector, especially if controlling anything inductive, like a fluorescent light, motor, or wall-wart transformer.  Switching them on or off anywhere but the zero point could cause voltage spikes which at best will reduce the life of your appliance, and at worst start a fire. hexaled.pde5 KB Step 2: Wiring the lights Have a look in the ceiling and decide where you will mount the Arduino controller.  Remember that it will need a 7-12v poweer supply. Cut lengths of telephone wire (or cat5 or whatever) about two feet longer than the distance from the Arduino to each light you want to control. Have a look at the connection from the power lines from the switch into the ballast.  You might be able to order connectors (Newark Electronics sells the Wago 930 series, which is what we had).  Then you won't need to cut existing wires and can remove the system if something goes wrong. Solder the ground (black) to the relay input -, and the control (yellow) to relay input + (the color code in the picture is different from what I put on the front page, since I changed my mind about what would make sense). Solder or screw on (depending on your relay) the black (hot) wire through the relay.  Make sure to use heat shrink and electrical tape!  Push the black wires into your connectors and the white (neutral) and ground (green) are just straight through from connector to connector. The other end of the wires go to the Arduino as follows: All the red wires (common cathode or collector) go to Analog 0 (port C0), and all the black to ground.  Each green (anode or emitter) goes to pins 8-13 (port B 0-5) and the yellow wires go to the pins 2-7 (port D 2-7).  Make sure that the green and yellow wires match up, since the sensor needs to control the proper relay!  If you put the yellow into pin 2, the green from the same fixture goes to pin 8. For more detail: Control Fluorescent Lights with a Laser Pointer and an Arduino ### TIG ANNOUNCES BLUETERA II OPEN SOURCE IOT MOTION-BASED DEVELOPMENT BOARD Tensor Iotera Group (TIG) has announced its new Bluetera II open source full-stack development board, which according to the company uses Google’s Protocol Buffer technology for motion-based IoT applications. TIG says that the Bluetera II is the second generation module. Bluetera II is built to fill the gap for an open source platform that meets the following requirements : A system-level API that properly encodes and delivers data from the end-node to the client application, often running on a mobile phoneA way to simplify 3D motion data that would otherwise require users to master non-trivial and sometimes counter-intuitive concepts and mathematicsPhysical characteristics appropriate for an Internet of Things (IoT) platform: robust, low-power, extensible, and as small as possible The company says Developers of IoT platforms often struggle with motion math: quaternions, calibration, angles, transformation, logging, etc. The Bluetera SDK’s motion library provides common open-source algorithms and calculations to help reduce this sort of complexity. Using the Madgwick sensor fusion algorithm, for example, Bluetera II is capable of streaming 200 Hz of quaternion data (OS-dependent)… Protocol Buffers is a battle-tested, schema-based serialization library developed by Google. An SDK built on Protocol Buffers allows our API to pass information between the various layers of an IoT system in a way that is efficient, extensible, and even beautiful. That API, which integrates with Nordic’s nRF SDK, will save you from having to do a great deal of boring, time-consuming, error-prone work that requires expertise in many different frameworks. The Bluetera II is equipped with the latest Nordic nRF52840 SoC, which can function as a BLE Central and a BLE peripheral. The hub is capable of being connected to a Linux or a Windows-based USB port as a BLE dongle. Then, it can become an integral part of the Bluetera LAN interacting with multiple Bluetera hub modules. The Bluetera II which features Nordic’s nRF52840, enables an Arm Cortex-M4 FPU, with 1MB of Flash, and 256KB of RAM. A BLE 5.0 controller is also incorporated with the MCU for wireless communications, but TIG offers BLE add-on modules for short, long, and ultra-long applications. The Bluetera II also features a pair of 13-pin headers, each of the headers are equipped with PWM, SWD, and GPIOs that can be configured as UART, I²C, ADC, etc. Read more: TIG ANNOUNCES BLUETERA II OPEN SOURCE IOT MOTION-BASED DEVELOPMENT BOARD ### LED Patterns Using Arduino A LED chain with multiple patterns. Control Nine LED bulbs to form different patterns using Arduino UNO. Working Video at Google Drive Link. Supplies Arduino UnoBread BoardJumper WiresLED 5mm 5V (Any Color) 9pcsResistance 220 ΩA Working PC Step 1: Placing the LED Bulbs Place all the LED bulbs on the bread board such that their Cathode is all connected to the ground rail of the bread board. The positive terminals will be connected to the pins of Arduino. Place the LED's and then connect them to pin number 0 to 8 on the Arduino with help of jumper wires. Careful, the sequence Matters. Take a jumper wire and connect it to the ground port of the Arduino and after connecting it with a 220 Ω resistance, pass it on to the ground rail for the LED's. I have used a 200 Ω resistor. The resistance is important and should be paid attention as if they are missed out then the fast blinking may burn out the LEDs and I don't want to be held responsible for damaged property. Step 2: Connect Pins to the Arduino Connect the LED's with Pin Number 0 to 8 on the Arduino board using Jumper Wires and Remember to connect them sequentially. Step 3: Programming the Arduino Connect the Arduino Board to your PC using the USB cable. Open Arduino IDE If you have it installed. The Arduino IDE can be installed from here (official website of Arduino). Or you can get it from the Windows Store if you are on Windows 10 or 11. The program for the Arduino is attached below. The code goes here (The file is also provided) :- void setup() {   // put your setup code here, to run once:   for (int i = 0; i < 10; i++) {     pinMode(i, OUTPUT);   } } void loop() {   // put your main code here, to run repeatedly:   // 1   for (int c = 0; c < 3; c++) {     for (int i = -2; i < 7; i++) {       digitalWrite(i-1, LOW);       digitalWrite(i, HIGH);       digitalWrite(i+1, HIGH);       digitalWrite(i+2, HIGH);       delay(25);     }     for (int i = 8; i > -2; i--) {       digitalWrite(i+1, LOW);       digitalWrite(i, HIGH);       digitalWrite(i-1, HIGH);       digitalWrite(i-2, HIGH);       delay(25);     }     }   // 2   for (int c = 0; c < 3; c++) {     for (int i = 0; i < 5; i++) {       digitalWrite(i, HIGH);       digitalWrite(8-i, HIGH);       delay(100);     }     for (int i = 0; i < 5; i++) {       digitalWrite(i, LOW);       digitalWrite(8-i, LOW);       delay(100);     }   }   // 3   for (int c = 0; c < 3; c++) {     int t = floor(9/2);     for (int i = 0; i < 5; i++) {       digitalWrite(t+i, HIGH);       digitalWrite(t-i, HIGH);       delay(100);     }     for (int i = 0; i < 5; i++) {       digitalWrite(t+i, LOW);       digitalWrite(t-i, LOW);       delay(100);     }   }   // 4   for (int c = 0; c < 3; c++) {     int d = 50;     for (int a = 0; a <10; a++) {       for (int i = 0; i < 9-a; i++) {         digitalWrite(i, HIGH);         delay(40);         digitalWrite(i, LOW);       }       d = d-5;       digitalWrite(9-a, HIGH);       delay(d);     }   }   // 5   for (int c = 0; c < 3; c++) {     for (int i = 0; i < 5; i++) {       digitalWrite(i, HIGH);       delay(25);       digitalWrite(8-i, HIGH);       delay(25);     }     int t = floor(9/2);     for (int i = 0; i < 5; i++) {       digitalWrite(i, LOW);       delay(25);       digitalWrite(8-i, LOW);       delay(25);     }     for (int i = 0; i < 5; i++) {       digitalWrite(t+i, HIGH);       delay(25);       digitalWrite(t-i, HIGH);       delay(25);     }     for (int i = 0; i < 5; i++) {       digitalWrite(t+i, LOW);       delay(25);       digitalWrite(t-i, LOW);       delay(25);     }   }   // 6   for (int c = 0; c < 3; c++) {     for (int i = 0; i <10; i++) {       digitalWrite(i,HIGH);       delay(30);       digitalWrite(i, LOW);     }     for (int i = 0; i <10; i++) {       digitalWrite(9-i,HIGH);       delay(30);       digitalWrite(9-i, LOW);     }   }   // 7     for (int r = 0; r<3; r++) {     digitalWrite(0,LOW);     digitalWrite(2,LOW);     digitalWrite(4,LOW);     digitalWrite(6,LOW);     digitalWrite(8,LOW);     digitalWrite(1,HIGH);     digitalWrite(3,HIGH);     digitalWrite(5,HIGH);     digitalWrite(7,HIGH);     delay(100);     digitalWrite(1,LOW);     digitalWrite(3,LOW);     digitalWrite(5,LOW);     digitalWrite(7,LOW);     digitalWrite(0,HIGH);     digitalWrite(2,HIGH);     digitalWrite(4,HIGH);     digitalWrite(6,HIGH);     digitalWrite(8,HIGH);     delay(100);     digitalWrite(0,LOW);     digitalWrite(2,LOW);     digitalWrite(4,LOW);     digitalWrite(6,LOW);     digitalWrite(8,LOW);     digitalWrite(1,HIGH);     digitalWrite(3,HIGH);     digitalWrite(5,HIGH);     digitalWrite(7,HIGH);     delay(100);     digitalWrite(1,LOW);     digitalWrite(3,LOW);     digitalWrite(5,LOW);     digitalWrite(7,LOW);     digitalWrite(0,HIGH);     digitalWrite(2,HIGH);     digitalWrite(4,HIGH);     digitalWrite(6,HIGH);     digitalWrite(8,HIGH);     delay(100);     } } Upload the following code to the Arduino Boards. If its the first time follow the following steps : Click Tools on the topSelect Board - "Arduino UNO"Select Port - The port in which the board is connectedClick Check to Check and Verify the code for errorsClick Upload Button All the buttons are marked in the picture Step 4: The Code Explanation The code which is to be ran once at the beginning is placed inside the void setup() { for (int i = 0; i < 10; i++) {   pinMode(i, OUTPUT); } Here for loop is used to loop through the pins from number 0 to 8 and setting the pins to OUTPUT pins The codes which are to be ran forever are placed inside the void loop() { // put your main code here, to run repeatedly: } In different patterns for loop is used to loop through the pins and setting the OUTPUT low of HIGH. void loop() { // 1  for (int c = 0; c < 3; c++) {   for (int i = -2; i < 7; i++) {    digitalWrite(i-1, LOW);    digitalWrite(i, HIGH);    digitalWrite(i+1, HIGH);    digitalWrite(i+2, 255);    delay(25);   }   for (int i = 8; i > -2; i--) {    digitalWrite(i+1, LOW);    digitalWrite(i, HIGH);    digitalWrite(i-1, HIGH);    digitalWrite(i-2, HIGH);    delay(25);   }    } } In the first for loop, we set a variable to start from 0 and go till 2. This is just to run the pattern 3 time. In the second for loops integer i is set as the pin number, first when i is 0, the pins 0, 1, 2 are set to HIGH and the pin before i is set to LOW ( there aren't any pin before i when i = 0). Then a 25ms delay is given before the loop continues. The next for loop just to reverse the pattern. Similarly all other patterns are made using for loop using different logics. Step 5: Check for Errors If it is not working as expected, check all the wires for a wrong connection and see whether the wires are connected properly or not and check for short-circuits. Remember to test the LED's beforehand. Step 6: LED Patterns The LED chain should start working now if there isn't any mistakes. Step 7: Doing It Without Arduino If you are at the moment not equipped with a Arduino Board, then Simulators like Fritzing or Tinker cad can be used. Source: LED Patterns Using Arduino ### How to use a Stepper Motor Using Arduino Whether we care to admit it or not, motors can be found all over in our everyday lives; they just tend to be hidden. Motors are present in cars, printers, computers, washing machines, electric razors, and much more. However, there are a number of people (which until recently included myself) that would be uncertain of how to make a motor run if they were handed one. So, let's learn something today. Let's learn how to use a stepper motor! Step 1: Materials that I'm using In order to demonstrate how to use the stepper motor (a hybrid stepper motor), there are a few things that I will end up using. The stepper motor itself, a 24BYJ48A A Darlington Transistor Array, ULN2803A a microcontroller, Digilent's chipKIT uC32 and a breadboard and breadboard wires Both the stepper motor and the Darlington Transistor Array are available in the chipKIT Starter Kit. Step 2: Stepper motor theory Stepper motors are part of a class of motors known as brushless motors; these motors have a shaft but it does not physically touch anything in order to rotate. Rather, stepper motors work by utilizing electromagnets that are concentrically located around the shaft. The idea behind electromagnets is that when a voltage of any kind is applied to a coil surrounding the piece of "soft" metal, that metal becomes magnetized until the current stops flowing through the coil. The central shaft rotates as the coils surrounding the electromagnets are brought to various voltage states. These voltage states create a magnetic polarity between the shaft and the electromagnet, causing the teeth of the shaft to line up with the teeth of the electromagnet. The motor can then be induced to spin by having the electromagnets appropriately change their polarity in a sequential fashion. Step 3: Types of Stepper Motors There are three main types of stepper motors that exist: variable inductance motors, permanent magnet motors, and hybrid motors. Variable inductance motors only use the generated magnetic field to make the central shaft rotate and line up with the energized electromagnets. Permanent magnet motors are similar except that the central shaft is polarized to have magnetic north and south pole which will appropriately rotate to whichever electromagnets are turned on. The difference between this and the variable inductance motor is that the permanent magnet motor's central shaft does not have multiple "teeth"; just a north and south pole. The hybrid motor, as you likely expect, is a combination of the two. Its magnetized central shaft has two sets of teeth for the two magnetic poles which then line up with the teeth along the electromagnets. Because of the double set of teeth on the central shaft, the hybrid motor has the smallest available step size and so is one of the more popular types of stepper motors. It is also the same type of motor that we will be primarily focusing on. You can learn more about the different types of stepper motors and how they are constructed here. Step 4: Unipolar vs Bipolar stepper motors There are two types of stepper motors: unipolar and bipolar stepper motors. On a fundamental level, these two types work exactly the same way; electromagnets are turned on in a sequential fashion, inducing the central motor shaft to spin. The difference between the two types is the voltage levels. A unipolar stepper motor only operates with positive voltage, so the high and low voltages applied to the electromagnetic coils would be something like 5V and 0V. A bipolar stepper motor has two polarities, positive and negative, so its high and low voltages would be something like 2.5V and -2.5V. Taking these electrical differences into account, the physical difference between these two styles is that the unipolar configuration requires an extra wire in the middle of each coil to allow current to flow through either to one end of the coil or the other. These two opposite directions produce the two polarities of the magnetic field, effectively mimicking the positive and negative voltage capabilities of the bipolar stepper motor. Although both of these have a overall voltage range of 5V, the bipolar stepper motor will actually have more torque because current flows the entire coil, producing a stronger magnetic field to induce the shaft to rotate to the appropriate angle. On the other hand, unipolar stepper motors only utilize half of the coil length due to the extra wire in the middle of the coil, so less torque is available to magnetically hold the shaft in place. Step 5: Stepper motor wires Different stepper motors can have different amounts of wires, typically 4, 5, 6, or 8 wires. A 4-wire arrangement is only able to support bipolar stepper motors, since there is no central wire available. 5-wire and 6-wire arrangements can be used for both unipolar or bipolar stepper motors, depending if the center wire on each of the coils is used or not. The 5-wire configuration implies that the central wire on the two sets of coils are internally connected together. An 8-wire arrangement, although relatively unused, is the most flexible out of all of the wire configurations as it can be run in a unipolar 5 or 6-wire arrangement, or bipolar mode with a parallel or series configuration. This particular stepper motor that I am using has 5 wires, implying that it is to be run as a unipolar stepper motor. We learned that this 5th wire is to allow current on that particular coil to flow in two directions. But should we connect it to a 5V power line? Or to 0V ground line?   For more detail: How to use a Stepper Motor ### How to make your own Arduino board If your are like me which I am guessing you are, then ever since you got into doing stuff with arduino you have wanted to make your own arduino board. You may be surprised to find out that making the prototyping board is actually very easy, and can have several advantages over using the commercially sold board. For one thing, All the components together cost a little over 15 US dollars as opposed to the $30 that the Uno board sells for. second, you may not actually want a board, but may simply want the atmega chip as the heart of the project, like if you are making a synthesizer or even a robot. In that case, you can just attach the  hardware necessary to use the chip, and solder to the pins you need to use without needing the board. Another advantage is making shields. You have probably noticed that digital pins 7 and 8 are not the standard distance apart, which makes it difficult to make your own custom shields without paying the $15 dollars for a protoshield every time you make one. But if you make your own board on perfboard, the headers will be the standard distance apart and you can make your own shields with ease. Also, you may need to permanently add the board to your project, and for that you may not want to use the more expensive arduino boards. This board however is half the price, and easy to add to custom projects. The only down side is that some parts of the arduino are kind of hard to build on perfboard. Most notably the Serial to usb adapter chip, which allows the microcontroller to interface with the computer through usb. You could use a good old RS232 jack, but they are not on a lot of newer computers. So to program your homemade board you will either need a break out board which does have the chip (get one here: http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_2117341_-1), or an arduino Uno or clone board to program the chip ( I used the former.) Either way it is a fun and informative project. Step 1: Materials All of these materials can be purchased as a bundle here (except for the power jack and female headers: http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_2151259_-1  otherwise here is the parts list: -perfboard -two 10 uf electrolytic capacitors -two 10 uf tantalum capacitors -7805 voltage regulator (5v) -LM1117T-3.3 voltage regulator(3.3v) -green LED -red LED -two 150 ohm resistors -10k resistor -one 0.1 uf capacitor (ceramic disk) -two 22 pf capacitors (ceramic disk) -16 MHz crystal oscillator -momentary push button switch -jumper wires -female headers (I used three rows of eight) -row of 6 male headers -female wall wart power jack -ATmega328 with bootloader -28 pin DIP IC socket Step 2: Install the socket The first step is after finding a good sized perfboard is to find a good place for the chip, and place the IC socket where you want it paying attention to the notch witch will be matched with the notch on the chip. also find where you want your power jack. You should place it on the edge of the board probably in the corner. I widened the holes on the board with a 1/16 inch drill bit, but still had to fold the leads on the jack using needle nosed pliers to get it to fit through. On the jack, the pin on the back connecting to the post on the inside is positive, and the one on the bottom connected to the metal on the inside is ground (the pin on the side is not needed. You could solder it for extra support, but I just broke it off). Remember this when connecting the regulators. Step 3: Adding the 5v regulator Now it is time to add the five volt regulator. This is technically the only regulator you need to power the chip, but if you want a 3.3v pin (some breakout boards or sensors require 3.3v so the pin is nice to have), you will need to add the 3.3v regulator. These regulators require two decoupling capacitors each. Holding the 7805 printed side facing you, and the pins pointing down, the one furthest left is the input, the center is ground and the furthest right is the output. connect one 10 uf electrolytic capacitor to between the output and ground and the input and ground, being sure to connect the smaller leg to ground. connect the positive from the power jack to the furthest input pin, and ground from the power jack to the center pin. Major Components in Project-perfboard -two 10 uf electrolytic capacitors -two 10 uf tantalum capacitors -7805 voltage regulator (5v) -LM1117T-3.3 voltage regulator(3.3v) -green LED -red LED -two 150 ohm resistors -10k resistor -one 0.1 uf capacitor (ceramic disk) -two 22 pf capacitors (ceramic disk) -16 MHz crystal oscillator -momentary push button switch -jumper wires -female headers (I used three rows of eight) -row of 6 male headers -female wall wart power jack -ATmega328 with bootloader -28 pin DIP IC socket   For more detail: How to make your own Arduino board ### GARZ & FRICKE EXTENDS PRODUCT FAMILY OF SINGLE BOARD COMPUTERS Garz & Fricke, supplier of hardware and software solutions for industrial IoT from Hamburg, will present its versatile product portfolio at the embedded world 2020 in Nuremberg. One of the exhibition highlights at booth 240 in hall 2 is the new TANARO Single Board Computer – a consistent further development of the existing product families. Garz & Fricke has made a name for itself as a manufacturer of customized HMI and panel PC solutions for various industries. Many years of experience and creativity characterize the solutions of the Hanseatic company. Nearly all products are developed and manufactured at the Hamburg site itself. With the TANARO Single Board Computer (SBC) Garz & Fricke presents the latest member of its product family of Single Board Computers at the Nuremberg trade fair embedded world, which was designed for the area of industrial image processing. The SBC model is equipped with the current processor generation NXP i.MX8M Mini. The Quad Core Cortex-A53 processor system from NXP is manufactured using the latest 14LPC FinFET process. This guarantees optimum performance with low power consumption. At the same time, no wishes remain unfulfilled, even with extremely high requirements regarding operating temperature. Wide Range Of Applications Thanks To A Multitude Of Interfaces In addition to the classic interfaces such as RS485, CAN, RS232, USB and Ethernet, the TANARO Single Board Computer​​​​​​​​​​​​​​ also offers the option of retrofitting wireless modules. In addition, there is the option of retrofitting a MIPI CSI interface for connecting cameras as well as an extended audio interface, which can also be used to connect a microphone. “This AV interface, together with a corresponding software stack, makes the TANARO SBC fit for the latest applications, that are in demand in the prospering IoT environment,” says Managing Director Matthias Fricke, explaining the possible applications. “In combination with TensorFlow, for example, TANARO is thus also optimized for projects that require machine learning”. Like almost all solutions from Garz & Fricke, the TANARO SBC is a fully integrated single board computer “Made in Germany”, which is manufactured at the new production site in Hamburg. Due to the Garz & Fricke Family Concept and Lifecycle Policy, TANARO is available as Human Machine Interface (HMI) in different designs. The new SCB is currently offered as Flush Mount, Rear Mount and Panel Mount, starting with the seven inch budget version up to currently 32 inch. Read more: GARZ & FRICKE EXTENDS PRODUCT FAMILY OF SINGLE BOARD COMPUTERS ### HydroBuddy HydroBuddy is a hydration-promoting device, designed for people who spend most of their day in one place (such as behind a desktop) and tend to forget about hydrating themselves. Once set up, it passively tracks how much water you drink, gently reminding you to drink up when it notices you're hydrating yourself too little for the recommended 2 liters per day. A demonstration video can be found at the bottom of this page! Warning: Side effects of using this product may include more frequent bathroom visits, potentially hampering your productivity. Supplies Hardware: Arduino Uno R3 (or a compatible variant)USB-B cableHX711 weighing scaleSK6812 LED stripAbout a handful of (multi-coloured) wireOne 470Ω resistor Materials: Four 30x50cm sheets of 4mm MDFOne 30x28cm sheet of 4mm acrylAlternatively, a 30x15cm sheet of 5-6mm acryl will work, tooYou may also choose not to use acryl, though this will of course give a different resultAbout 30cm of 1mm-thin load wire Tools: A lasercutting machineA soldering kitA pair of stripping pliers (or a scissor)A pair of cutting pliersSome transparent glue that works for both wood and plastics (I used this one) Step 1: Setting Up the Arduino Project Libraries First off, download the HX711_ADC and SK6812 libraries as .ZIP files, and save them somewhere on your computer. These libraries will communicate with your weighing scale and LED strip, respectively. Open a new project in your Arduino IDE and import the libraries you just downloaded, by locating them through Sketch > Include Library > Add .ZIP library. This should automatically add the following lines to the top of your sketch: #include #include Code Next, copy and paste the following code into your project: #include #include // component variables HX711_ADC loadCell(4, 5); SK6812 LED(14); int ledStripPin = 6; // setup variables const long updateInterval = 500; const float calibrationFactor = 416.0; const float minBottleWeight = 15; const float accuracyMargin = 5; const int maxPermittedWeight = 2000; /* While the scale can hold up to 5000 grams, the frame probably can't... */ const float weightStabilizationFactor = 1.0f; const int amtOfLeds = 14; const int ledIntensity = 255; const long hydrationCheckInterval = 30000; const int targetHydrationPerHour = 200; /* With values of 30000/200, the device will measure your hydration every 30 seconds  * and help you drink 200ml per hour (2L per 10-hour day).  * For testing purposes, you may want to adjust the above two variables to  * artificially trigger the hydration reminders more quickly/frequently. */ // runtime variables enum State {   Calibrating = 'C',   WaitingForBottle = 'W',   DeterminingWeight = 'N',   BottleReturned = 'R',   Default = 'D',   TooMuchWeight = 'T',   HydrationCheck = 'M' }; State state = Calibrating; long time_LastUpdateCycle = -1; long time_LastStateChange = -1; long time_LastHydrationCheck = -1; long time_LastBottleReturn = -1; float currentWeight; float previousWeight; float lastMeasuredStableWeight; float lastMeasuredFilledWeight; // user statistics float hydrationBalance = 0; float totalWeightDrank; /* This variable is used for debugging in the Serial Monitor. */ void setup() {   LED.set_output(ledStripPin);   Serial.begin(9600);   calibrateScale(); } void calibrateScale() {   Serial.println("Calibrating - please keep the scale free of any weight...");   changeState(Calibrating);   showCalibrationLEDGlow();     loadCell.begin();   loadCell.start(2000);   loadCell.setCalFactor(calibrationFactor);   loadCell.tare();     Serial.println("Calibration complete! Please place your bottle on the scale.");   changeState(WaitingForBottle); } void loop() {   loadCell.update();   if (millis() >= time_LastUpdateCycle + updateInterval) {     updateScale();     if (millis() >= time_LastHydrationCheck + hydrationCheckInterval) {       checkHydration();     }     if (state != Default) {       if (state == WaitingForBottle) {         tryDetectBottleReturn();       } else if (state == DeterminingWeight) {         determineFilledBottleWeight();       } else if (state == BottleReturned && millis() - time_LastBottleReturn > updateInterval * 1.5f) {         /* When the scale successfully determines a recently placed/returned          * bottle's weight, it will blink green for 1 second, then switch back          * to the Default state.          */         changeState(Default);       } else if (state == HydrationCheck && millis() - time_LastHydrationCheck > updateInterval * 1.5f) {         /* When the scale successfully determines a recently placed/returned          * bottle's weight, it will blink green for 1 second, then switch back          * to the Default state.          */         Serial.print(millis());         Serial.print(" / ");         Serial.println(time_LastHydrationCheck);         changeState(Default);       } else if (state == TooMuchWeight && currentWeight < maxPermittedWeight) {         /* When there is too much weight on the scale, the LED strip flashes          * bright red until the weight drops to an acceptable level again.          */         changeState(DeterminingWeight);       }     }   }   updateLedStrip(); } void updateScale() {     previousWeight = currentWeight;   currentWeight = loadCell.getData();   float weightDiff = currentWeight - previousWeight;     Serial.println(currentWeight);   time_LastUpdateCycle = millis();   if (currentWeight < -accuracyMargin && state != Calibrating) {     /* If the weight on the scale is negative, it recalibrates.      */     calibrateScale();   }   else if (currentWeight > maxPermittedWeight) {     /* If the weight on the scale is too high, the user is warned.      */     changeState(TooMuchWeight);   }   else if (abs(weightDiff) > accuracyMargin && lastMeasuredStableWeight == -1) {     /* If the weight on the scale drops steeply, the device will know that      * the bottle was removed. Likewise, if the weight increases steeply,      * it means that additional weight was added, like the pressure of the      * user's hand.      */     changeState (weightDiff < -accuracyMargin ? WaitingForBottle : DeterminingWeight);     lastMeasuredStableWeight = previousWeight;     lastMeasuredFilledWeight = -1;     Serial.print("Bottle removed or extra weight added - last measured stable weight is ");     Serial.print(lastMeasuredStableWeight);     Serial.println(" grams.");   } } void checkHydration() {   time_LastHydrationCheck = millis();   hydrationBalance -= (targetHydrationPerHour * (hydrationCheckInterval / 3600000.0f));   Serial.print("Checking hydration... (balance: ");   Serial.print(hydrationBalance);   Serial.println(")");     if (state == Default && hydrationBalance > -50) {     /* When hydration is measured, briefly blink blue to      * show the user that the device is still on.      */     changeState(HydrationCheck);   } } void tryDetectBottleReturn() {   if (previousWeight > -accuracyMargin       && currentWeight - previousWeight > minBottleWeight + accuracyMargin) {     changeState(DeterminingWeight);   } } void determineFilledBottleWeight() {   if (currentWeight >= minBottleWeight + accuracyMargin + weightStabilizationFactor) {     /* If this if-statement is entered, the device has determined that      * there is indeed a bottle placed on its scale.      */     float temp = lastMeasuredFilledWeight;     lastMeasuredFilledWeight = currentWeight;     if (abs(lastMeasuredFilledWeight - temp) <= weightStabilizationFactor) {     /* If this if-statement is entered, it means that the past two consecutive      * weight measurements were close enough to each other to conclude that      * it is the bottle's final weight.      */       Serial.println("Bottle (or normal weight) returned!");       time_LastBottleReturn = millis();       changeState(BottleReturned);              determineWeightDiff();       lastMeasuredStableWeight = -1;     }   } } void determineWeightDiff() {   /* By determining the weight difference between the bottle before and    * after it was removed from the scale, the device can determine    * how much ml of water had been drank.    */   float weightDiff = lastMeasuredStableWeight - lastMeasuredFilledWeight;   if(weightDiff >= accuracyMargin) {     Serial.print("You drank ");     Serial.print(weightDiff);     Serial.print("ml - ");     hydrationBalance += weightDiff;     totalWeightDrank += weightDiff;     Serial.print(totalWeightDrank);     Serial.print("ml in total (balance: ");     Serial.print(hydrationBalance);     Serial.println(")");   }   else {     Serial.println("Bottle refill detected!");   } } void changeState(State newState) {   resetLedStrip();     state = newState;   Serial.print("Entered state [");   Serial.print((char) newState);   Serial.println("]");   time_LastStateChange = millis(); } void updateLedStrip() {   long ledTime = millis() - time_LastStateChange;   /* By setting ledTime to 0 after each state change, each cycle    * of the LED strip starts with a value of 0, which helps to    * make the display of the LEDs more fluid.    */     if (state == Default) {     /* If your hydration balance is too low, the LEDs glow blue in      * a rotating fashion with 1-4 waves. By default, the first      * hydration reminder occurs 15 minutes after startup.      */     if (hydrationBalance <= -50) {       float glowSpeed = 0.002f;       if (hydrationBalance <= -150) {         glowSpeed *= 2.0f;       } else if (hydrationBalance <= -100) {         glowSpeed *= 1.5f;       }              float str = ledIntensity * sin(-PI / 2 + ledTime * glowSpeed);       if (str < 0) {         str = 0;       }       float offStr = 0.15f * str;              for (int i = 0; i < amtOfLeds; i++) {         LED.set_rgbw(i, {offStr, offStr, str, 0});       }       LED.sync();     }   } else if (state == WaitingForBottle) {     /* If the bottle is missing from the scale, i.e. after being      * picked up, all LEDs glow pink simultaneously.      */     float str = ledIntensity * sin(-PI / 2 + ledTime * 0.002f);     if (str < 0) {       str = 0;     }     float offStr = 0.15f * str;          for (int i = 0; i < amtOfLeds; i++) {       LED.set_rgbw(i, {offStr, str, offStr, 0});     }     LED.sync();   } else if (state == DeterminingWeight) {     /* While the scale determines your bottle's weight, the      * LEDs glow pink in a rotating fashion with 4 waves.      */     for (int i = 0; i < amtOfLeds; i++) {       float str = -ledIntensity + (ledIntensity * 2) * sin(((ledTime * 0.002f) + (1000 / amtOfLeds) * i) * 4);       if (str < 0) {         str = 0;       }       float offStr = 0.15f * str;       LED.set_rgbw(i, {offStr, str, offStr, 0});     }     LED.sync();   } else if (state == HydrationCheck) {     /* When the device performs its periodic hydration check,      * a blue light cycles through the LEDs to show the user      * that the device is still working as intended.      */     float offStr = 0.15f * ledIntensity;     int targetIndex = abs(floor((amtOfLeds / 1000.0f) * ledTime) - 14);     for (int i = 0; i < amtOfLeds; i++) {       if (i == targetIndex) {         LED.set_rgbw((i + 5) % amtOfLeds, {offStr, offStr, ledIntensity, 0});       } else {         LED.set_rgbw((i + 5) % amtOfLeds, {0, 0, 0, 0});       }     }     LED.sync();   } else if (state == BottleReturned) {     /* Once the scale has successfully determined your bottle's      * weight, it briefly flashes green.      */     if (ledTime % 1000 < 500) {       float str = ledTime % 250 < 125 ? (ledIntensity * 0.25f) : 0;       float offStr = 0.15f * str;       for (int i = 0; i < amtOfLeds; i++) {         LED.set_rgbw(i, {str, offStr, offStr, 0});       }       LED.sync();     }   } else if (state == TooMuchWeight) {     /* If there is too much weight on the scale, the LEDs flash      * bright red, notifying the user that they should clear      * the scale of any excess weight.      */       float str = ledTime % 500 < 250 ? (ledIntensity * 2) : 0;             for (int i = 0; i < amtOfLeds; i++) {         LED.set_rgbw(i, {0, str, 0, 0});       }       LED.sync();   } } void showMeasuringLEDBlink() {   float str = ledIntensity * 0.25f;   float offStr = 0.15f * str; } void showCalibrationLEDGlow() {   float offStr = 0.15f * ledIntensity;   for (int i = 0; i < amtOfLeds; i++) {     LED.set_rgbw(i, {offStr, ledIntensity, offStr, 0});   }   LED.sync(); } void resetLedStrip() {   for (int i = 0; i < amtOfLeds; i++) {     LED.set_rgbw(i, {0, 0, 0, 0});   }   LED.sync(); } Step 2: Lasercutting If you're NOT using acryl Using a vector graphics editor (like Adobe Illustrator or Inkscape), convert all .svg files attached below to the .dxf format, excluding acryl-rings.svg. If you're using acryl Despite my recommendation for 4mm acryl, a thickness of 5-6mm will do just fine; I personally used 5mm. If you're also using 5-6mm acryl, remove the bottom ring of acryl-rings.svg using the vector graphics editor of your choice. Using that same vector graphics editor, convert all .svg files attached below to the .dxf format, excluding mdf-optional-tinylegs.svg. In either case, bring the five .dxf files to a lasercutting machine, and follow the instructions for cutting the shapes into your MDF and acryl sheets. Step 3: Building the Case The base part As accurately centered as you can, glue the bottom layer (1) to ring 2; be sure not to accidentally glue the three alignment holes shut. Place a weight on top of the two, then let the glue dry. Using your cutting pliers, cut your load wire into three segments of ~10cm length each. Pin them through the three alignment holes in ring 3. Using the load wire segments for exact alignment, slide rings 2 through 10 on top of each other, adding a thin, evenly spread layer of glue between each of them. After the glue has settled a little, take out the load wire, place something heavy on top of the rings, and let the glue dry. If you're using acryl, stack the acryl rings and glue them together. When the glue between them has dried, glue the stack of acryl rings on top of ring 10. If you're not using acryl, instead use the shapes of the mdf-optional-tinylegs.svg file to make three glued-together stacks of three tiny legs each. Glue these stacks on top of ring 10, once again using the load wire for alignment. The top part Similarly to how you glued the base part together, glue together layers 14 through 23, then layers R11 through R13. Once the glue between both stacks has dried up, glue layer R13 to layer 14. By now, you should be able to slide the top part neatly on top of the base part! Slide the load wire segments into the alignment holes from top to bottom, and cut any leftover load wire (should be ~1.5cm) off of each segment. Finally, glue layer 24 on top of layer 23. Integrating the LED strip Cut your LED strip by the bronze intersecting points to create a smaller strip of 14 LEDs long. Peel off the layer at the back of the strip to expose its sticky backside, then wrap it around the bottom of the top part (R11-R13), leaving the hole on the side of the ring free for cables. Step 4: Putting It All Together Now that the case is complete, you can start plugging and soldering everything together! Once you've followed the diagram and example photos above and everything is connected, lower the Arduino into the base part. Then, place the top part and the weighing scale on top, while making sure that the cables connecting the different hardware components are neatly guided through the designated holes. Finally, plug your USB-B cable into the designated hole at the base to power the Arduino, and upload your Arduino IDE sketch to the Arduino! Step 5: The Result https://youtu.be/YG3T07rYpfs As my first ever fully-fledged Arduino project, this project has been a challenge in many aspects. I've learned how to design (and write code for) a physical device with user experience as a priority, how to solder hardware components together, and how to use a vector graphics editor and lasercutting machine to make a compact, tight-fit case. Some iterations, of which some are shown in images above: Simplified the case's design from a turtle shell to a more ambiguous, futuristic shape (I was new to vector graphics, after all)Replaced a system with two separate LEDs (one for system warnings/confirmations, one for hydration reminders) with a multi-purpose LED stripRemoved the need for a circuit board entirely, by soldering all 5V and ground cables togetherMoved the LED strip from outside of the case to neatly integrated inside, behind an acryl windowAdded a signal to warn the user when there's too much weight on the scaleMade both signals where the device asks something from the user ("hey, drink some water" and "place your bottle") use the same fade-in, fade-out glowing patternBefore, the "hey drink some water" signal used to cycle through the LED strip, which could be interpreted as the device processing something instead (like the "calculating bottle weight" signal)Added a periodic, subtle glow while the device passively keeps track of your hydration, to show that the device is still working as intended Source: HydroBuddy ### Polydexter: Arduino Robotic Translation Arm Polydexter was the introductory project in the Creative Architecture Machines (CAM) advanced options architecture studio at the California College of the Arts (CCA), taught by Jason Kelly Johnson (co-founder of Future Cities Lab) and Michael Shiloh. Parts developed for this robot would go on to become integral in the second project of the studio, our walking 3D printer Geoweaver, which can also be found here on Instructables. Other projects from the studio, as well as their accompanying Instructables, can be found at our Youtube channel. Polydexter, designed and fabricated by Jia Wu and I, is a remote human-sensing Arduino-controlled robotic translation arm. Utilizing three axes of control, movements recorded by the input (analog) arm are augmented by the output (digital) arm, and produce a drawing. We enhanced the sense of remote control by hiding all of the electronics of the input arm and wrapped it in hand-glued chipboard while running all of the wiring beneath a 2x6 piece of lumber. It's hard to capture exactly how much fun Polydexter is to play with; appropriately, the robot required us humans to relearn how to write in order to get it's translations right (though Jia got very good at it and could write Chinese characters after enough practice!). When we began this project we had no knowledge of Arduino or robotics and this was a great introduction to simple coding, electronics wiring, and the art of mechanical design. This is a simple but addictive toy to play with and is a great introduction to robot making. We still have fun messing around with it and are looking forward to hooking it up to Firefly to see how bringing in different machine vision or data sets can affect drawings. We extrapolated a lot of possible future uses: teaching people to write in different languages, translating/editing/censoring written messages between countries, or scaled up, translating a stroke of your hand into built space using precision brick laying or material extrusion. Edit for Epilog Challenge: If we had access to a personal laser cutter we would prototype the begeezus out of this robot. We have many plans for new updates and tweaks that would incorporate much more refined, laser engraved parts out of acrylic and possibly Yupo. Anyway, let's get Instructablesing. Step 1: Materials and Equipment Cut Materials: 1/8" acrylic, ~110 square inches 1/16" chipboard, ~300 square inches 2x6 lumber, ~3'-0" long Zip ties, ~30 Screws for connecting servos to acrylic Electronics: 3 potentiometers 3 servo motors Arduino Uno breadboard (or prototyping board) jumper wire Equipment: soldering iron screwdrivers wirestripper For a list of used electronics, please refer to these custom made CAM kits from Oddwires. Step 2: Laser Cut Parts A laser cutter isn't required for the chipboard parts but it makes things much easier. Please rearrange the line work to fit your machine, and though we didn't want to mark the parts with numbering we color coded the parts to match to the assembly drawings. laser cut file for Digital Arm.dxf4 MB laserCut_analogArm.dxf270 KB Step 3: Build Analog (Chipboard) Arm The analog arm basically glues together along the edges. We used simple tacky glue and the connections were strong. The colors in the cut DXF file correspond to the drawing above. TIP: Piece it together from the inner layers out, adding the screws, washers and lock nuts next, and then gluing the outer layers on. Step 4: Build Digital (Acrylic) Arm The small holes in the acrylic are designed for use with zip ties. The major gear translates the 180 degree motion of the servo motor into 360 degrees. We used metal washers to smooth the friction between the acrylic pieces but you can also cut your own PETG washers. The colors in the cut DXF file correspond to the drawing above.   For more detail: Polydexter: Arduino Robotic Translation Arm ### Triquint launches GaN transistor with 6GHz bandwidth Description The TriQuint T1G6001528-Q3 is a 18 W (P3dB) discrete GaN on SiC HEMT which operates from DC to 6 GHz and typically provides greater than 10 dB gain at 6 GHz. The device is constructed with TriQuint's proven 0.25 um process, which features advanced field plate techniques to optimize power and efficiency at high drain bias operating conditions. This optimization can potentially lower system costs in terms of fewer amplifier line-ups and lower thermal management costs. This part is lead-free and RoHS compliant. Evaluation boards are available upon request. Key Features Frequency: DC to 6 GHz Output Power (P3dB): 18 W at 6 GHz Linear Gain: > 10 dB at 6 GHz Operating Voltage: 28 V Low thermal resistance package TriQuint Semiconductor has introduced a gallium nitride (GaN) packaged HEMT RF power transistor that has a bandwidth of DC to 6 GHz. The combination of high output power, efficiency and bandwidth has commercial wireless communications designs in mind as well as traditional military and avionics. “Nearly every application today requires RF power devices that are optimised for not just one, but all performance parameters,” said Richard Martin, TriQuint defense and aerospace transistor marketing manager. The T1G6001528-Q3 is fabricated using TriQuint’s proven 0.25?m GaN on SiC process. It incorporates advanced field plate techniques designed to enhance RF output power and efficiency at high drain bias operating conditions. The expectation is that fewer RF power transistors and amplifiers are required to deliver a specific power level. “Compared to even robust technologies like GaAs, GaN provides superior wideband power, efficiency and gain. Our new packaged transistor delivers its 18W output power with extremely high-efficiency, greater than 60% at 6 GHz, while providing the high gain and ruggedness today’s applications require,” said Martin. The T1G6001528-Q3 operates from a 28Vdc power supply, will deliver its rated output power into a 10:1 VSWR without damage, and is housed in a low-thermal resistance earless solder-down package. Typical linear gain is 10dB and drain efficiency greater than 60% at 6 GHz, maximum VSWR of 10:1, from 28Vdc supply.   For more read: Triquint launches GaN transistor with 6GHz bandwidth ### NEXCOM ELEVATES EDGE COMPUTING AGAIN WITH CUTTING-EDGE, ARM-BASED UCPE NEXCOM, the leading provider of network communication appliances and uCPE, introduces the NSA 6310, based on NXP® Semiconductors’ latest multi-core Layerscape® LX2160A platform. The NSA 6310 offers better performance and pricing than the market’s existing solutions and also fulfills telecom and IoT operators’ demand for multi-technology and edge computing white box solutions to address operational environment and business needs. Edge computing is key to pushing next-gen networks to deliver better user experiences with low latency and high performance. The NSA 6310 with ARM platform is low cost while providing high performance and additional PCIe I/Os to add FPGAs or GPUs for AI/ML services in the edge,” explains Jovanni Lee, V.P. of Network & Communication Solutions at NEXCOM. “We are proud to deliver ARM edge computing by working with NXP.” “With one of world’s most comprehensive edge computing portfolios today, NXP continues to play a leading role in developing the ARM-based hardware and software ecosystem. By leveraging our hardware-accelerated, Layerscape family of multicore processors, NEXCOM is expanding the availability of advanced uCPE solutions that can enable high-performance, low-power virtualized solutions,” Noy Kucuk, vice president product management, Digital Networking, NXP. “As a result of our collaboration, these differentiated uCPE offerings are designed to enable service providers to deploy efficient, edge compute systems that can support high-performance, multi-cloud frameworks. NEXCOM’s NSA 6310 is an open uCPE based on the Layerscape® LX2160A processor, with sixteen 64-bit ARM Cortex-A72 cores. The cores, in combination with integrated hardware acceleration for cryptographic processing, virtual forwarding, and traffic management, provide support for multi-gigabit routing and network services. The NSA 6310 white box also offers two SerDes slots, with a choice of four dedicated 25G, 10G, and 1G LAN modules, for customers who need multiple I/Os to satisfy different applications; FPGA/GPU support to extend computing applications, board manager control (BMC) module and IEEE 1588 PTP feature for server-grade network appliances; and optional PoE support for edge deployments. Read more: NEXCOM ELEVATES EDGE COMPUTING AGAIN WITH CUTTING-EDGE, ARM-BASED UCPE ### Boot Bot Arduino Bootload Shield The Boot Bot Shield lets you burn the arduino boootloader onto a blank Atmega 328 chip. The bootloader is that magic piece of software that turns a mundane chip into the open source programmable miracle known as the arduino. Blank chips cost a few dollars less per chip than bootloaded ones. With the Boot Bot you will have no need for all that pre-bootloaded extravagance. Once completed, this board will allow you to use your arduino as an ISP programmer that can burn the arduino bootloader onto your raw chips! Update: The Boot Bot has been entered into the Arduino Challenge. Please Vote! Check out this project and others at Revolt Lab I have entered this instructable in the Shopbot contest! If I win, I will use the Shopbot to make the armor and turret system for my power wheels mobile rocket launcher! Step 1: Materials To make a Boot Bot you will need: breadboard wires atmega 328 chip (2) 22pf Capacitors (1) 10k resistor (1) 16 MHz crystal perfboard male headers 28 pin IC socket or (4) 8 pin sockets Step 2: Breadboard The Circuit Breadboarding the circuit before you solder a final version could save you hours of frustration if you have a malfunctioning part! To test if our components all work we can follow the official arduino bootloading tutorial First, lay out your breadboard and arduino as shown in the image above. Note that the 10k resistor is connected to power and not to ground. The two capacitors are those 22pf capacitors you have ready. Remember that the notch on the end of the chip indicates the left side. See the second picture above for a closer look at the pin map of the atmega 328. Now before you follow the rest of the tutorial, finish the breadboard and go to the next step! Step 3: Program the Arduino This was the tricky step for me. The Arduino ISP sketch located in the examples section of the arduino drop down menu does not work! Instead you must use this version. This program works great with the duemilanove. If you have an UNO, some very minor changes to the code should get it working. Find this cluster... Code: int error=0; int pmode=0; Put this above the cluster... Code: int initSent=0; Find this cluster... Code:  switch (ch) {   case '0': // signon     empty_reply();     break; Change it to this... Code:  switch (ch) {   case '0': // signon     if(! initSent) empty_reply();     initSent = 1;     break;   Major Components in Projectbreadboard wires atmega 328 chip (2) 22pf Capacitors (1) 10k resistor   For more detail: Boot Bot Arduino Bootload Shield ### How to Build a Simple DIY Home Automation System Home automation is a term used to describe the process of automating certain tasks and devices around the home. This can include tasks such as turning on the lights when you enter a room, or setting the thermostat to a certain temperature. Home automation systems can be as simple or as complex as you like, and there are many different products on the market to suit different needs. In this tutorial, we will show you how to build a simple DIY home automation system using a NODEMCU and a few other components. you can monitor and control your home’s energy usage, security system, and much more. Thank You NextPCB:This project is successfully completed because of the help and support from NextPCB. Guys if you have a PCB project, please visit their website and get exciting discounts and coupons. Only 0$ for 5-10pcs PCB Prototypes:https://www.nextpcb.com Free shipping 0$ PCB Prototype:https://www.nextpcb.com/?code=Roker 4-layer PCB price reduction up to 40%: nextpcb.com/40%off The NodeMCU system is easy to install and use, and it’s compatible with a variety of home automation devices and appliances. Step 1: Introduction Nowadays, home automation is becoming increasingly popular as it can offer homeowners a lot of benefits. Home automation can be defined as a system that automates and controls various home appliances and devices automatically. For example, it can turn on the lights when you enter the room, or turn off the TV when you leave the room. It can also adjust the temperature of the room automatically based on the weather outside. Nodemcu is a very popular home automation system. It is very easy to use and it has many features. It can control the lights, windows, doors, and many other things in your house. It is very convenient and it can save a lot of time. https://youtu.be/DBqE7euPmM0 Step 2: What Is Nodemcu? NodeMCU is a development board based on the ESP8266 12-E chip. It has on-board WiFi and can be programmed using the Arduino IDE. NodeMCU is an open source project and has been developed by the community. A nodemcu board is a microcontroller board that uses the Lua programming language. It is based on the ESP8266 Wi-Fi chip and has built-in flash memory, making it ideal for use in IoT applications. The board can be programmed using the Arduino IDE Step 3: How Nodemcu Can Be Used for Home Automation Nodemcu can be used for home automation in a few different ways. One way is to use it as a central controller for all of your devices. You can program it to turn on and off lights, appliances, and other devices. You can also use it to monitor energy usage and control temperature and humidity levels. Another way to use nodemcu for home automation is to use it as a security system. You can program it to notify you if there is a break-in or if someone is trying to enter your home. You can also use it to monitor activity around your home and to record video footage. Finally, you can use nodemcu to create a home automation system that is completely customised to your needs. Nodemcu is a versatile platform that can be used for a variety of home automation applications. With a little creativity, you can use it to create a system that is perfect for your home and your family. Step 4: Circuit Diagram & Connection The circuit diagram for Blynk Controlled Home Automation using NodeMCU is given Above. Using this circuit diagram you can assemble the circuit on Breadboard using 4 channel Relay and NodeMCU Board. Step 5: Build Circuit 1. Now According to the Pin diagram mapping of Esp8266 board 2. The connection is pretty simple just connect the Led to D7 pin Step 6: Home Automation PCB & Gerber File If you don’t want to assemble the circuit on breadboard and you want PCB for the project, then here is the PCB for you. The PCB Board for the Home Automation Project is designed using EasyEDA online Schematics & PCB designing tool. The front side and back side of the PCB is given above You can simply download the Gerber File from here. Step 7: Setting Up Blynk Application Blynk is a platform with iOS and Android apps that allows you to control your Arduino, Raspberry Pi, or ESP8266 from your mobile phone. You can create a project in the Blynk app and add a variety of Widgets to it. Widgets can be buttons, sliders, graphs, or even a terminal. Each Widget has a unique function that can be configured. For example, you can configure a button to turn an LED on and off. Blynk makes it easy to control your hardware from your mobile phone. With Blynk, you can create complex projects with ease. The Blynk app is easy to use and is packed with features. With Blynk, you can control your hardware from anywhere in the world. To Install Blynk app in your smartphone Set up Blynk App:Step 1: Download Blynk from PlayStore. Step 2: Register with email ID where you will receive “Auth Token”. Step 3: Open New Project and name the project. Step 4: Choose device “ESP8266”. Click on create. Step 5: After creating project you will receive mail, which contain “Auth_Token”. Step 6: Copy this “Auth_Token” and paste in our Arduino Code. char auth[] = "YourAuthToken"; Make sure before uploading code, add your SSID and password. Step 8: Source Code Here is a Simple DIY Home Automation System Code, you can copy the code and paste it in your Arduino IDE. But before that, you need to add Blynk Library to Arduino IDE. Download Blynk Library from here: https://github.com/blynkkk/blynk-library or SKETCH -> INCLUDE LIBRARY -> MANAGE LIBRARIES -> SEARCH FOR "Blynk" -> INSTALL THE LIBRARY Then go to File->Eamples->Blynk-Boards_Wifi->Esp8266Standalone(Refer screen shot) Select the correct board (NodeMCU 1.0) and the com port from the Tools Menu Step 9: Arduino Code #define BLYNK_PRINT Serial #include #include /// You should get Auth Token in the Blynk App. // Go to the Project Settings (nut icon). char auth[] = "YourAuthToken"; // Your WiFi credentials. // Set password to "" for open networks. char ssid[] = "YourNetworkName"; char pass[] = "YourPassword"; void setup() { // Debug console Serial.begin(115200); Blynk.begin(auth, ssid, pass); } void loop() { Blynk.run(); } Step 10: Final Output 1. After uploading the code 2. Open the Blynk app in the Phone 3. Let it connect to the internet 4. Then you would see your dashboard with a button 5. Press Play button on the top most right corner of the app 6. Then Press the Button and you would see the LED Turn ON!!!:) Now that you have got the basics , you can try some cool stuffs with this awesome board !! I will really appreciate it if you share your valuable feedbacks. Also if you have any query please write in the comment section. Have fun exploring this board :) Happy Inventing!!, Next week with more interesting projects: Source: How to Build a Simple DIY Home Automation System ### Arduino Power outlet with exposed pins I found my self often trying to plug stuff at home with Arduino. So I thought it would be good to have a system that you can just plug your sensor, plug the appliance and code something to see how it goes. I never liked breaking apart an appliance to find the right spot on the electronics, or peel off the wire. What do you need? A common plug, for example think of a lamp, then you plug it on the wall wart, so how do we get Arduino into the pot? Cutting the wire has being always an option, but then if you want to re use the hardware for something else, the wire would be broken. However sometimes is not an option, the appliance wire can't be cut. So we interact with the plug. But this is dangerous, so... better not do it. Alternatives? Lets box it all up, the high power and electronics. Using a outlet big enough, lets you put the electronics inside the box and avoid exposing all the high power wires that usually are not coated or protected inside these boxes. This is plug system with an integrated power supply and an Arduino. Will let you test your coding skills and tests sensors on different scenarios on the go just losing some plugs from the outlet. The list: Parts Source Price Outlet 6 connectors Local store / Radio Shack? 10$ Arduino Leonardo with Xbee socket 20$ Extension shield 14$ Power supply for Arduino Local store 5$ 2 Relays 5$ Soldering tools and extra wire borrow it Scavenging time 54$ for a reusable smart Arduino plug. And this is how it looked like before, when it was broken. Step 1: Unscrew, open the lid and take a peek This is the time you want to decide the internal layout of the electronics. Main concerns are separating and covering High Power voltage from the rest of the electronics. And leaving enough space for the Arduino pins to keep them exposed. Another note, would be to keep The Arduino connector right next to the border of the outlet so a hole can leave access to programming without opening the hole thing Each outlet has slightly different setup, Mine was recovered after the fuse failed. However as you can see the fuse is not located in the outlet, but it in the plug. Step 2: Cleaning up, making room. The outlet has a button, that will become useless now. I was considering the option of leaving the button on to bypass the relays in case I need the outlet for something else. But if that turns out to be a common case, I can just leave the Relays to always on, and turn off the Arduino. Step 3: Internal power supply The power supply for the Arduino can be grabbed out of any common USB charger. Make sure it is powerful enough for whatever you are going to use it. Since I'm always trying to reuse the whole thing, I'm guessing I'll need quite a bit of power. I went for this one at first, 300mA. Don't make the same mistake. At first, I took it for granted that it was at the very least 500mA, but most likely 1A. Turned out it was not enough to even power the Relays. I found another one with 2A and switched it back. I forgot to grab a picture of the Power supply but is just a bit larger and a bit bigger. Had to cut some more plastic out of the outlet. WARNING, be really careful, when plugging and wiring and powering it. If you are not extremely sure if the polarity of the wires, make sure you are not “nearby” when you plug it! If it breaks, and you have something else powered from the wall wart, everything will go dark. So take all necessary precautions! Step 4: Layout Draft With the parts at hand and enough space, I started my first quick draft of the layout. By the time I did the layout I had already cut the plugs. Would be better to put the Arduino on the right side, and the plugs with the High power all together. Separated and covered. I've grabbed a bit of blue-tack sticky glue thing to hold the parts together. If you have gum and watched a lot of MacGyver then just go ahead. I've kept the high power wires from the relays outwards since I believe this is better, hope someone can correct me on this since I'm not entirely sure.   For more detail: Arduino Power outlet with exposed pins ### BOXBLOX’S OPEN SOURCE ETHERNET SWITCH OFFERS FIVE PORTS SwitchBlox is an open-source ethernet switch designed by Josh Elijah, who is the founder of BoxBlox. It was designed to make life easier for robot and drone developers or anyone who needs to use an ethernet switch. The switch is tiny, thereby making it easy to use in size constrained areas. According to Josh, there’s currently no option for robot and drone builders looking for small and robust ethernet switch that is also open source.” The SwitchBlox is a 10/100 ethernet switch that is complete and fully available with a Creative Committee License. SwitchBlox offers a way to “incorporate Ethernet into space, weight, and power-constrained applications easily. Despite having its dimensions as 44.5 mm by 44.5 mm (1.75 by 1.75 inches), the switch has five Ethernet ports and still has room to display the LED status readouts for each of the ports. Due to its small size, there are no RJ-45 ports on the SwitchBlox. 1.25 mm Molex Picoblade five-way connectors that break out to RJ-45 with bundled cables are provided as a replacement. Also, other cables are available with un-terminated ends. They can be used for power input, manual wiring, and or output. An extension cable kit which costs £29.00 is being sold. It is optional and provided just in case the user needs more cables. The SwitchBlox can be used straight out of the box as an unmanaged switch. Users should simply apply a 7 to 40 V DC supply and connect devices using cables provided. The switch will start forwarding packets almost immediately without any setup. Another option available is the use of an SPI (Serial Peripheral Interface) bus to access and implement full capabilities. This can be used when dealing with advanced applications. However, it is important to remember that the board comes fully assembled and can be used without firmware. Other features include the Auto MDI-X crossover and a 5V 2A power output connector to provide power to additional hardware. Read more: BOXBLOX’S OPEN SOURCE ETHERNET SWITCH OFFERS FIVE PORTS ### Arduino Orb Build Warden An Arduino based Ambient Orb designed explicitly for monitoring Source Code Autobuild systems. This orb can easy be repurposed for monitoring really anything that can have alerts from time to time. Step 1: Purpose Some time ago a co-worker passed me an article about "Extreme Feedback" devices that could be attached to your autobuild system with the express intent of making it very visible that the build is broken, and potentially being irritating enough to help motivate people towards fixing the broken build. Since reading this article I have been somewhat consumed with the concept of creating one of these devices for my team. Keeping builds clean is hard, and without a constant reminder, it can be very easy for people to let the build stay broken for long periods of time. This essentially defeats the purpose of doing autobuilds, and potentially even unit testing. I Looked into the Ambient Orb, but I have to admit, I wasn't particularly thrilled with the fact that it has a monthly subscription, and you can't talk directly to it with your computer. So I started to teach myself electronics in the hope that I would be able to build one of these devices on my own. After a month or so, I ran into the Arduino platform, which struck me as the perfect platform for building an orb from scratch. This is the end result of my project is this, The Arduino Orb Build Warden. Step 2: Parts The design of the Build Warden was heavily influenced by Tod E. Kurt's Arduino Ambient Orb from his Spooky Arduino class. I started with that as a base, and went from there. So first off, what parts do we need? Parts List Radio Shack: Multipurpose PC Board with 417 Holes: (276-150) $1.99 Hookup wire, Solid, Red, Black, Green, 22 Gauge, 90 ft, (278-1221) $5.99 Jameco: 3 x Blue LED, (183222) $2.95 ea 3 x Green LED, (334473) $1.45 ea 3 x Red LED, (33481) $0.27 ea 220 ohm, 1/8W resistors (100), (107941) $0.69 Sparkfun: Arduino NG, (Arduino-USB) $31.95 Home Depot: Lighting Fixture (Portfolio #74457 or similar), ~$10.00 Other Items: Red Sharpie (Optional) Blue Sharpie (Optional) Green Sharpie (Optional) Black Spray Paint (Optional) Heat Shrink tube (Optional) Solder Soldering Iron Round cut piece of 1/2 inch wood - cut to the size of the lighting fixture base) 2 x Standoffs Metal Hex (Sparkfun: COM-00126 if you don't have any, which is unlikely) 2 x motherboard mounting screws (that fit the standoffs) Alternatives: I added this section, due to the fact that some items appear to no longer be available, here are some alternatives: 3 x Red LED, (Jameco #333526), $0.22 ea 2x 220 ohm, 1/8W resistors (5), (Radio Shack #271-011) $0.99 ea -or- 500 assorted 1/8W resistors (Radio Shack #271-003) $12,99 (yes, it has 10 220 ohm ones) Step 3: Get computer talking to the Arduino, Install software I'm not going to take you through how to get Arduino working with your computer, and how to upload sketches to it. A full set of guides are available for getting the Arduino environment working with Linux, Windows or Mac OS X. Once you have this environment set up and working, download the software I've written for the build warden. Follow the instructions from the above guides for installing the sketch on the Arduino. Step 4: Circuit Diagram This project is really a very simple circuit. What we are going to be doing is running three wires from pins 9, 10 and 11. Each wire will branch to 3 220 ohm resistors, and then go on to 3 LEDs of the same color (9: Red, 10: Green, 11: Blue). These will all attach back to 1 wire that will go to ground. Strictly speaking, each color should actually use different resistors, but the end result is in my opinion Good Enough. If you want to try and get the colors perfectly balanced, you have two options. Either correct it in the software, which is easy enough, or use different resistors for each color. In talking to Tod E. Kurt about this, his suggestion was this: "For the color balancing you mentioned, the main thing you need to worry about is that because of the physics of LEDs, each color has a different voltage drop (Red is ~2.0V, Green is ~2.6V, Blue is ~3.3V), so really one should have different value resistors for each color. (i.e. if Red's resistor is 220 ohm, Blue's should be scaled down to about 130 ohm). I left this out of the notes because it can be confusing. You can deal with it in software by scaling the PWM values a corresponding amount. " You may want to put together a prototype board that has only 1 LED of each color. I did this to make working with the software easier. I included a photo of the prototype board here. Major Components in ProjectArduino NG Lighting Fixture 3 x Blue LED   For more detail: Arduino Orb Build Warden ### The Look-o-box Intro Dit is een Arduino project die ik heb gemaakt voor een schoolopdracht, in deze documentatie zal ik instructies geven over hoe je dit zelf ook kan maken en wat je ervoor nodig hebt. Ook leg ik hierin vast het concept, iteraties en een korte reflectie. https://youtu.be/kTSKzxw1aGM Concept Wat dit apparaat doet is het om zich heen kijken en als het wat detecteert voor de sensor draait het de masker daarna toe, hiermee geeft het de persoon die ervoor staat het gevoel dat ie word bekeken. waarom ik dit heb ontworpen is omdat het me een leuk interactieve idee leek om te maken en dat ik dit ook graag wilde implementeren in andere projecten. Iteraties Voor dit project heb ik een paar iteraties gemaakt op papier voor dat ik het echt in ging, ik heb voornamelijk iteraties gemaakt van positie van het masker en hoe de sensor werkt. Reflectie Dit was een zeer leuk en nuttig project in mijn ogen die zeer geslaagd is. Wat ik heb geleerd tijdens If This Then That is hoe Arduinos werken en hoe deze kan gebruiken, ook heb ik geleerd om servo motors en een afstandsensor te gebruiken wat handig is voor andere projecten in de toekomst. Dit vak was erg interessant en nuttig, de kennis die ik heb geleerd zak ik zeker kunnen toepassen voor toekomstige (persoonlijk) projecten. Supplies Onderdelen: 2 SG90 micro servo's1 Arduino uno,1 Afstand sensor 3-40 cm,Usb-B kabel, Materiaal: 3D filament PLA wit,3D filament PLA groen,seconden lijm,soldeer tin,breakout board,pinnen,3 draadjes,6 schroefjes, Gereedschap: 3D printer,soldeerbout,schroevendraaier, Step 1: Uitprinten Onderdelen Als eerste stap heb ik de behuizing, masker en alle kleine onderdelen ontworpen in Fusion 360. Vervolgens heb ik deze uitgeprint in groen PLA en het masker in wit. Hieronder heb ik de STL bestanden staan van elk onderdeel, print deze uit en ondertussen kun je beginnen met de elektronica te solderen. Step 2: Layout Maken & Solderen Voor deze stap heb ik eerst een layout gemaakt op Tinkercad, omdat dit een simpele circuit heb ik het gelijk al alles vast gesoldeerd. Ik heb geprobeerd om het zo compact mogelijk te maken door het gebruik van pinnen waar de conrectors van de servo's en sensor makkelijk op aangesloten kunnen worden. Soldeer de rij pinnen voor ground vast aan elkaar, doe het zelfde voor de voltage en voor de signaal soldeer een kabel aan elke pin (3x). twee van de onderste pinnen kunnen direct op de ground en 5v op de arduino gezet worden(zie foto), de andere drie kabels moeten naar de juiste nummer(zie layout). Step 3: In Elkaar Zetten Als alles gereed is kan je het nu in elkaar zetten. Als eerste zou ik de Arduino in de behuizing doen en de breakout board vast maken met alle kabels in geplugd en later die van de servo's en sensor, zet de servo hoorns erop en schroef deze vast. vervolgens zet de servo's in de deksel en monteer de sensor op het daarvoor bedoelde onderdeel(zie foto). Maak het masker op het grote onderdeel vast met seconden lijm, wanneer de lijm hard is kan je de servo hoorn vast schroeven aan de onderkant. Plug in de servo's en sensor op de pinnen van de breakout bord en doe de deksel op de behuizing. Als laatste doe de achterkant erop met de opening voor de usb-B kabel. Step 4: Programmeren //This is the code for my arduino project for If this then that, with intructions in the code. #include Servo servosensor; //telling arduino how many servo there are. Servo servomasker; #define sensor A3 int angle_servo = 90; //starting angle of the servo motors void setup() { servosensor.attach(2); //setting up the sensors servomasker.attach(3); Serial.begin(9600); // beginning of the sensor } void loop() { for (angle_servo = 0; angle_servo <= 180; angle_servo += 1) { servosensor.write(angle_servo); // Code for servo 1, with this I let the servo with the sensor turn 180 degrees. delay(30); float volts = analogRead(sensor)*0.0048828125; // Code for sensor, this detects if there is something there. int distance = 13*pow(volts, -1); delay(10); if (distance <= 10){ //code for servo 2, the sensor tells with this code the new position of the servo with the mask. Serial.println("I_See_You"); servomasker.write(angle_servo); } if (distance >= 20){ //this part is to check if the sensor works by telling the distance. Serial.println(distance); } } // This is the same code but in reverse. for (angle_servo = 180; angle_servo >= 0; angle_servo -= 1) { servosensor.write(angle_servo ); delay(30); float volts = analogRead(sensor)*0.0048828125; int distance = 13*pow(volts, -1); delay(10); if (distance <= 10){ Serial.println("Gezien"); servomasker.write(angle_servo); } if (distance >= 20){ Serial.println(distance); } } delay(2000); } Step 5: Testen & Klaar Als je nu bij deze stap bent dan ben je zo goed als klaar, maar de allerlaatste stap van dit project is het testen zoals: Zijn servo's goed gekalibreerd,Alles overal goed in zit,Code juist werkt, Source: The Look-o-box ### Plessey samples ECG medical sensors 25101 EPIC Sensor Single Channel Demo Electrode (PS25201 EPIC sensor) PS25101 is an ultra-high impedance solid state ECG (electrocardiograph) sensor probe assembly, complete with connecting lead and DIN plug termination, which operates with the PS25001A EPIC 60Hz Evaluation kit. It can be used as a dry contact ECG sensor without the need for potentially dangerous low impedance circuits across the heart. The resolution available is as good as or better than conventional wet electrodes. Because of the large coupling capacitance to the body (around 1nF) the EPIC sensor’s internal electrometer can be used in differential mode to recover true surface potential ECG signals from the surface of the skin. The device uses active feedback techniques to both lower the effective input capacitance of the sensing element (Cin) and boost the input resistance (Rin). These techniques are used to realize a sensor with a frequency response suitable for both diagnostic and monitoring ECG applications. The total voltage gain of the system is a function of both the input coupling capacitance (variable) and the internal sensor configuration. EPIC sensors are designed for ECG applications for health and patient monitoring, as well as fitness and wellness applications. EPIC sensors could be built into stretchers for immediate monitoring of patients heart rate and respiratory action or built into clothing to monitor stress levels in emergency response personnel such as firemen. As the sensors are very compact and the detection circuitry requires very low power, the EPIC sensor opens up the opportunity for ECG monitoring over a long period of time so that abnormalities can be picked up during normal activities without the stress of being in a hospital or doctor’s room. Plessey Semiconductors is sampling its Electric Potential Integrated Circuit (EPIC) sensors targetting ECG applictaions. “The first EPIC products are designed for ECG applications for health and patient monitoring as well as fitness and wellness applications,” said Derek Rye, Plessey’s marketing manager. The EPIC sensor measures changes in an electric field in a similar way to a magnetometer detecting changes in a magnetic field.  The technology works at normal room temperatures and functions as an ultra-high, input impedance sensor that acts as a highly stable, extremely sensitive, contactless digital voltmeter to measure tiny changes in the electric field down to milliVolts. “The next release products available later in this quarter will be optimised for movement sensing where applications range from security, to automotive, to safety through to gesture recognition applications,” said Rye. “We are working on end applications where the potential volumes are in millions per month.  This is all very exciting for the company,” said Rye. A feature of the EPIC sensors are that they are dry contact so that no gels or similar fluids are required to make contact.  The sensors can be cleaned between uses – unlike conventional ECG sensors that have to be disposed of after every use at a cost of $2 a set. For more read: Plessey samples ECG medical sensors ### MIROMICO’S FMLR-6X-X-MA62X, THE “WORLD’S SMALLEST” LORAWAN MODULE Miromico AG has developed a LoRaWAN module with integrated Arm Cortex-M4 microcontroller, which was unveiled at Embedded World 2020. They claim it is the world’s smallest LoRaWAN module with integrated Arm Cortex-M4 microcontroller. Also referred to as the FMLR-6x-x-MA62x Module, Miromico module’s latest design is built around the Maxim MAX23625/26 microcontroller, which enables an Arm Cortex-M4, clocking at up to 96MHz from the internal oscillator of as low as 4MHz from a low-power system clock. The LoRa® FMLR RF modules enable wireless connectivity to almost all devices, systems and sensors communicating at low data rate over a distance of more than 50km. It is equipped with the latest software “LoRa Basics™ MAC”. Power consumption of the underlying nodes can be optimized to run from a small-sized battery, while the integrated radio allows the system to operate in a duty-cycled manner. It also offers 512kB of flash memory, 160kB of static RAM, 9kB of instruction cache, and extremely low power operation, which goes as low as 49µA/MHz when executing from flash and 2.56µW in data-retaining sleep mode. The module features wireless connectivity, which is enabled via a Semtech SX1261 or SX1262 wireless transceiver, offering full support for the increasingly popular LoRaWAN low-power long-range wide area network protocol with up to 20dBm transmission and -137dBm receive sensitivity. In order to enable backward-compatible upgrade paths for grown products and systems, the FMLR family supports additional modulation schemes over LoRa. These modulation schemes include (G)FSK, (G)MSK, ASK, and OOK. Highly configurable OTA packet formats enable the communication with standards like Wireless Mbus and IEEE802.15.4g. The modules also allow the emulation of proprietary systems such as Nordic NRF905 or NRF9E5 with enhanced coverage range. For fast prototyping and development, the proprietary firmware including the wireless stack can be updated via SWD, UART-Bootloader, or OTA. Measuring 8.6mm by 9.3mm (around 0.34″ by 0.37″) in size, Miromico claims the module as “to the best of our knowledge the smallest LoRaWAN module ever produced.” For it to be easy to use during the prototyping stages, a daughterboard is available, which adds a Hirose U.FL antenna connector, additional external flash storage, and extra sensors. The LoRaWAN software stack is available as an open source solution which runs on the integrated microcontroller. Read more: MIROMICO’S FMLR-6X-X-MA62X, THE “WORLD’S SMALLEST” LORAWAN MODULE ### Spinning Tardis with blinking LED (Powered by littleBits) using Arduino Construct a Tardis that spins and blinks! Total Build Time: 30 mins · Coding: 5 mins · Construction of the Tardis: 20 mins · littleBits LED and motor assembly: 5 mins Tardis.wmv(320x240) 10 KB Step 1: Gather all needed parts. LittleBits: · (2) Wires · (2) Power supplies · (2) 9v Batteries and Connectors · (1) littleBits Arduino Board · (1) LED · (1) DC Motor with the Motormate Equipment: · Scissors · Tape · Glue · Tardis template · Construction Paper · Dome (to diffuse the light at the top) - designed and 3D printed specifically for this project (file attached). You can also use a clear push pin if you’re not able to print the dome. · Box Cutter bulb.stl Step 2: Print the Tardis template We recommend that you enlarge the template before printing; this will give more room for the component for fit together in the box. Glue the printed template to the construction paper. Use the box cutter to cut lines in the template where white lines occur over the black tabs; these are notches where the labeled tabs will enter. After the notches have been cut, cut out the outline of the template pieces. Step 3: Connect the littleBits Connect the littleBits parts as seen in the image. The motor and the LED should each have separate power supplies. Step 4: Program the Arduino board Program the Arduino board using the blink sketch. Code below for reference: int led = 1; // Define the pin the LED is plugged into void setup() // Initialize setup { pinMode(led, OUTPUT); // Define the LED as an output source } void loop() // Loops through the sketch { digitalWrite(led, LOW); // Turn off the LED delay(1000); // Delay for 1 seconds digitalWrite(led, HIGH); // Turn on the LED   For more detail: Spinning Tardis with blinking LED (Powered by littleBits) using Arduino ### Race Lights Reaction Timer This project is a small game you can play with another player. You can time your reaction speed and compete with your friend. The game is inspired by the start lights of a formula 1 race. Earlier Iterations: The images above are of earlier iterations of certain components and the casing. In the original idea, the powerbank was located inside the casing. But in the final product, I placed it outside so that the user can charge or swap it out easily. The starting lights used to be on top, but that prevented the lid from opening, so I moved the cables through the backside. The buttons used to be without casing which made them kind of difficult to press, so I made a casing for them. Supplies Hardware: 1x Arduino Uno.~20x jumper cables.1x Piezo buzzer.2x WS2812B LED strip 5 leds.1x OLED Display 128*32 pixels.2x 6x6x4.3mm TACT Switch Push Button for Arduino.1x USB-A to USB-B cable.1x USB Powerbank.2x PaperclipsA lasercutterA 3D printer Step 1: Cut Out the Casing Use the attached file called "Startlights Case Lasercutter.ai" to cut out the casing. The design was made for 4mm MDF. When all the pieces have been cut out, glue them together and place a paperclip through the hinges so that they will not seperate when turning the lid. Step 2: Print the Startlights and Buttoncasing Use the attached files to print out the startlights and the buttoncasing. You will need 5 startlights and 2 buttoncasings. Each startlight has a front and a back that will have to be glued together after printing. Step 3: The Circuit Use the image above to create the circuit and put it all inside the casing as follows: The Arduino and PCB go inside the box.Put the buzzer in the circular hole in the back.Pull the cables for the OLED display thorugh the rectangular hole in the front. (Under the text "Reaction time:")Pull the 2 cables for the buttons through the lower-front holes of each side respectively.Put the buttons in the 3D printed button casings like in the image above.Pull the cables for both LED strips through the rectangular hole in the back. You can now put the LED strips through the 5 starting lights like in the picture above. Step 4: Gluing Components There are a couple components that have to be glued to the casing. Glue the 5 starting lights to the top of the box.Glue the OLED display to the front of the box, under the text "Reaction time:" Source: Race Lights Reaction Timer ### Cyber Tail About 25 million years ago, our ancestors lost their tails during the evolution to better adapt to the the environment. Today, as we live in the digital age, our bodies are evolving along with the cyber world. What would a cybernetic tail bring to our daily life? With the easily accessible technologies, such as Arduino and 3D printing, you can make your own cyber tail! // This project was undertaken as part of the Computational Design and Digital Fabrication seminar in the ITECH masters program at the University of Stuttgart. Supplies Arduino UnoInfrared reflective sensor module TRCT5000Accelerometer MPU6050Servo motor SG90 (x4)Capacitor (x4)9v batteryEPE foam rods Step 1: Making the Base Frame The base frame can hold all the necessary electronic parts. You can either download the attached 3d model and print it on a 3d printer, or just be creative and make it using foam boards, cardboards, or wood boards. As long as it is strong enough to hold all the parts and a 1 kg tail shown in the exploded diagram. Step 2: Attaching Electronic Parts to the Frame Attached Arduino Uno, breadboard, 9v battery, and 4 mini servo motors to the frame as indicated in the assembly diagram in step 1. Step 3: Connecting the Circuit Follow the diagram and connect the circuit using jumping wires. Two longer wires (about 0.6 - 1m long) will be needed for extending the sensors. Step 4: Coding Connect Arduino Uno with computer using a USB cable and upload the cade below. In order to use the accelerometer to get the hand position, the MPU6050 library will need to be installed on the Arduino IDE. Go to this webpage https://www.arduino.cc/reference/en/libraries/mpu6050/ and download the latest version. Then open the Library Manager in the Arduino IDE and install it from there. int IRSensor = 10; // connect IR sensor module to Arduino pin D10 int LED = 13; // connect LED to Arduino pin 13 #include #include #include MPU6050 mpu; Servo servo1;  Servo servo2; Servo servo3; Servo servo4; int pos1 = 90; int pos2 = 90; int pos3 = 90; int pos4 = 90; void setup() { //Acceleration sensor   Serial.begin(115200);   Serial.println("Initialize MPU6050");   while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))   {     Serial.println("Could not find a valid MPU6050 sensor, check wiring!");     delay(500);   }   // If you want, you can set accelerometer offsets   // mpu.setAccelOffsetX();   // mpu.setAccelOffsetY();   // mpu.setAccelOffsetZ();      checkSettings();      Serial.println("Serial Working"); // Test to check if serial is working or not   pinMode(IRSensor, INPUT); // IR Sensor pin INPUT   servo1.attach(3); //servo1 signal connected to pin3   servo2.attach(5); //servo2 signal connected to pin5   servo3.attach(6); //servo3 signal connected to pin6   servo4.attach(9); //servo4 signal connected to pin9 } void checkSettings() {   Serial.println();   Serial.print(" * Sleep Mode:            ");   Serial.println(mpu.getSleepEnabled() ? "Enabled" : "Disabled");   Serial.print(" * Clock Source:          ");   switch(mpu.getClockSource())   {     case MPU6050_CLOCK_KEEP_RESET:     Serial.println("Stops the clock and keeps the timing generator in reset"); break;     case MPU6050_CLOCK_EXTERNAL_19MHZ: Serial.println("PLL with external 19.2MHz reference"); break;     case MPU6050_CLOCK_EXTERNAL_32KHZ: Serial.println("PLL with external 32.768kHz reference"); break;     case MPU6050_CLOCK_PLL_ZGYRO:      Serial.println("PLL with Z axis gyroscope reference"); break;     case MPU6050_CLOCK_PLL_YGYRO:      Serial.println("PLL with Y axis gyroscope reference"); break;     case MPU6050_CLOCK_PLL_XGYRO:      Serial.println("PLL with X axis gyroscope reference"); break;     case MPU6050_CLOCK_INTERNAL_8MHZ:  Serial.println("Internal 8MHz oscillator"); break;   }      Serial.print(" * Accelerometer:         ");   switch(mpu.getRange())   {     case MPU6050_RANGE_16G:            Serial.println("+/- 16 g"); break;     case MPU6050_RANGE_8G:             Serial.println("+/- 8 g"); break;     case MPU6050_RANGE_4G:             Serial.println("+/- 4 g"); break;     case MPU6050_RANGE_2G:             Serial.println("+/- 2 g"); break;   }     Serial.print(" * Accelerometer offsets: ");   Serial.print(mpu.getAccelOffsetX());   Serial.print(" / ");   Serial.print(mpu.getAccelOffsetY());   Serial.print(" / ");   Serial.println(mpu.getAccelOffsetZ());      Serial.println(); } void loop(){   //IR sensor read   int sensorStatus = digitalRead(IRSensor); // Set the GPIO as Input      //Accel Sensor read   Vector rawAccel = mpu.readRawAccel();   Vector normAccel = mpu.readNormalizeAccel();   Serial.print(" Xraw = ");   Serial.print(rawAccel.XAxis);   Serial.print(" Yraw = ");   Serial.print(rawAccel.YAxis);   Serial.print(" Zraw = ");   Serial.println(rawAccel.ZAxis);   Serial.print(" Xnorm = ");   Serial.print(normAccel.XAxis);   Serial.print(" Ynorm = ");   Serial.print(normAccel.YAxis);   Serial.print(" Znorm = ");   Serial.println(normAccel.ZAxis);      // IR sensor   if (sensorStatus == 1) // Check if the pin high or not   {     // if the pin is high turn off the onboard Led     digitalWrite(LED, LOW); // LED LOW     Serial.println("Motion Detected!"); // print Motion Detected! on the serial monitor window     servo1.write(180);     delay(20);               servo3.write(0);     delay(20);                }      if  (sensorStatus == 0)   {     //else turn on the onboard LED     digitalWrite(LED, HIGH); // LED High     Serial.println("Motion Ended!"); // print Motion Ended! on the serial monitor window   servo1.write(0);      delay(20);               servo3.write(180);     delay(20);       }   if (normAccel.YAxis >= 0)   {   pos2 = round(normAccel.YAxis * 18);   }   else {     pos4 = round(normAccel.YAxis * -18);   }   servo2.write(pos2);   delay(20);    servo4.write(pos4);   delay(100);      }    Step 5: Making the Eye Blinking Sensor Attached the IR reflective sensor module TRCT5000 to a pair of eye glasses or goggles. Adjust the tiny potentiometer on the sensor module until it can properly recognize your eye blinking. Step 6: Making the Tail Cut the EPE foam tubes into 10cm segments and glue them onto the 3d printed "tail bones". Run 4 strings through the tail bones and connect the strings to the arms of the 4 servo motors. Adjust the tightness of the strings until the tail is in desired shape. Step 7: Wear It! Now the Cyber Tail is ready for wearing! Put it on your belt and wear the blinking sensor. Tape the Accelerometer to you hand. The tail will dance along with you unconscious eye blinking and hand gestures. Source: Cyber Tail ### 4x4x4 RGB LED Cube using Arduino A while ago, when I first started using Arduino, my first project was a 4x4x4 LED cube, I built it from a Guide I found here in Instructables, I didn't know anything about programming, and little about electronics, yet I was able to build it and make it work, I didn't know how it worked but it did! That success made me like this page a lot and also made me want to make guides like that one, well documented and properly explained, enabling people to make cool things, at first without them knowing how they work, and from there, from a working piece, start learning and understanding how it works. Step 1: Materials For the most basic cube you will need; 1x Atmega328 (With arduino Optiboot bootloader) 3x TLC5940 4x P-Channel MOSFETs 3x 4K7 Resistors 3x 16 pin Male and Female headers 1x 4 pin Male and female header 1x 28pin IC socket 1x 1000uf 10v capacitor 1x 0.1 uf ceramic capacitor 2x 22pf capacitors 1x 16Mhz crystal oscillator 64x RGB common ANODE LEDs (it is very important that you check your LEDs are common ANODE, or else, the cube won't work!!) a LOT of Solder! for more advanced functions; 3x 8k2 resistors for optional, low power mode. 3x 3pin male headers for jumper selection of the power mode 3x jumpers for selecting the power usage/brightness setting 2+x 64KB EEPROMs for storing custom animations 1x DIP switch for selecting different modes (random, serial, music responsive, random2, custom animations, etc.) 2x MSGEQ7 chips for audio analyzing and music response. Black paint Tools; An Arduino to use as a USB to Serial converter for programming An USBTinyISP if your Atmega chip is not pre-Bootloaded A Multimeter for troubleshooting and checking connections Some way of cutting PCBs, I used a Circular Saw, but you can use whatever you have in hand. Diagonal cutters A Sharpie or any kind of marker A Drill/Drillpress A Cutter or Xacto knife Step 2: Planning First you'll need to decide the size of your cube, it can be any size you want to, but nothing bigger than what the leads on the LEDs allow, my LEDs had 28mm leads, so I decided my spacing was going to be 25mm between LEDs. THis is usually a good size. Step 3: Make a grid To be able to make all the layers with the same spacing and keed all the LEDs "Snapped to Grid" we need to actually make a grid, for this we will need; a piece of scrap wood bigger than the size of your cube a Bit of the right size for your LEDs, its better to measure it with a caliper, but if you don't have one, just trust your maths and the LED Manufacturer's specifications. my drill press has a table with 2 axis control, it has handles and moves 1mm per revolution, so I just counted 10 turns between each hole, make sure to make your holes at 0 on both Axis (x and Y). Also make sure to set the stopper for the Z axis or you will drill all the way thru your drill press. I made my grid bigger, 5x5 in case I, in the future want to build another bigger (or smaller) LED cube. Major Components in Project 1x Atmega328 (With arduino Optiboot bootloader) 3x TLC5940 4x P-Channel MOSFETs 3x 4K7 Resistors 3x 16 pin Male and Female headers 1x 4 pin Male and female header 1x 28pin IC socket 1x 1000uf 10v capacitor 1x 0.1 uf ceramic capacitor 2x 22pf capacitors 1x 16Mhz crystal oscillator 64x RGB common ANODE LEDs (it is very important that you check your LEDs are common ANODE, or else, the cube won’t work!!) a LOT of Solder!   For more detail: 4x4x4 RGB LED Cube using Arduino ### STO1000E 150MHZ BATTERY-POWERED PORTABLE OSCILLOSCOPES Micsig’s STO1000E 2/4-channel oscilloscopes include 70Mpts memory, 1GSa/s sampling, 130,000wfm/s refresh rate, and a 7.5Ah Li battery for extended field use.  Saelig Company, Inc. has introduced the Micsig STO1000E PLUS series of two- and four-channel battery-powered portable oscilloscopes, which offer bandwidths of up to 150MHz. The three models in the series are:  STO1102E PLUS 2-channel 100MHz, STO1152E PLUS 150MHz 2-channel, and STO1104E PLUS 4-channel 100MHz. Each oscilloscope includes 70Mpts memory, 1GSa/s sampling (single channel), 130,000wfm/s refresh rate, and a 7.5Ah Li battery for extended field use. These innovative portable instruments are a development of Micsig’s range of tablet oscilloscopes and combine an 8” touch screen (touch, drag, and swipe) with ‘button & knob’ operation.  An external USB mouse can also be connected for additional control choices, with an internal software pop-up keyboard provided for data entry. The built-in HDMI output adds educational and demonstration possibilities, and an auto-calibration function ensures measurement accuracy. Sophisticated waveform triggering techniques include: Edge, Pulse Width, Logic, Video, Runt, Time Out , Nth Edge, Slopetime, and Serial Decode. A screen capture button provides a quick way of saving waveform images for later review or report writing. Included as standard are two P130A 200MHz x10 passive probes and an external 12V power adapter.  STO1000E PLUS oscilloscopes can make 31 types of automatic measurements, and decode a selection of serial protocols, including UART, CAN, LIN, SPI, I2C, 1553B, and ARINC429. I/O provisions include Wi-Fi, LAN, HDMI, USB Host, USB Device, DC Power, and Aux out.  8GB of internal data storage is included for data files that can be transferred to a PC via a USB connection, LAN, or WiFi. The oscilloscope features a built-in prop stand for easy viewing.   When the oscilloscope is connected to a LAN or WiFi network, live screen images can be transmitted to an external projector.  The scope can also be remotely PC-controlled via WiFi, LAN, or USB, and also via an Android mobile device. Read more: STO1000E 150MHZ BATTERY-POWERED PORTABLE OSCILLOSCOPES ### Make Voice Call using Arduino This sketch connects a voice call from your GSM shield and Arduino to a remote phone number entered through the serial monitor. You'll need to attach a speaker and microphone to hear the connected phone and send your voice.   First, import the GSM library #include SIM cards may have a PIN number that unlocks their functionality. Define the PIN for your SIM. If your SIM has no PIN, you can leave it blank : #define PINNUMBER "" Initialize instances of the classes you're going to use. You're going to need both the GSM and GSMVoiceCall class.   GSM gsmAccess; GSMVoiceCall vcs; [Get Code] Create some variables to store the phone number you want to call :   String remoteNumber = ""; char charbuffer[20]; [Get Code] In setup, open a serial connection to the computer. You'll use this to send a phone number to the Arduino. After opening the connection, send a message to the Serial Monitor indicating the sketch has started.   void setup(){ Serial.begin(9600); Serial.println("Make Voice Call"); [Get Code] Create a local variable to track the connection status. You'll use this to keep the sketch from starting until the SIM is connected to the network :   boolean notConnected = true; [Get Code] Connect to the network by calling gsmAccess.begin(). It takes the SIM card's PIN as an argument. By placing this inside a while() loop, you can continually check the status of the connection. When the modem does connect, gsmAccess() will return GSM_READY. Use this as a flag to set the notConnected variable to true or false. Once connected, the remainder of setup will run.   Circuit a image of the Arduino GSM Shield on top of an Arduino Uno while(notConnected) { if(gsmAccess.begin(PINNUMBER)==GSM_READY) notConnected = false; else { Serial.println("Not connected"); delay(1000); } }   Major Components in Project Hardware Required Arduino board Arduino + Telefonica GSM/GPRS Shield Microphone and speaker attached to the GSM shield SIM card For more detail: Make Voice Call using Arduino ### SjoelSim! SjoelSim! Is a mixed-reality version of the popular and historic Dutch shuffleboard game "Sjoelen". The circuit makes use of two HC-SR04 ultrasonic distance sensors to measure the X and Z velocity of a playing disc. In combination with a program built in the Unity Engine, it makes for a pretty good alternative to the real deal. Supplies Components 1 x Arduino UNO (or similar) 1 x USB-B cable 2 x HC-SR04 Ultrasonic Sensors 1 x Standard 20mm 10kΩ Potentiometer (Optional) Potmeter Cap 1 x Standard 12x12mm Pushbutton (Optional) Button Cap 1 x Standard 16x2 LCD Display 1 x I2C interface 4 x LED (Green) 4 x LED (Red) Electical wire A couple Dupont wires 1 x 10kΩ Resistor 4 x 220Ω Resistor A laptop with USB jack! Equipment Soldering iron & tin Laser cutter Pair of stripping pliers (or scissors) Pair of cutting pliers (or scissors) Glue gun Sandpaper Materials 120x100cm 4mm MDF board White paint Wood glue Insulating tape Styrofoam A sheet of fabric (around 40x20cm) Step 1: Sjoelen...What's That!? The history of Sjoelen is actually quite mysterious. Some believe it originated in "Friesland"(Frysia) or "Zeeuws-Vlaanderen"(Dutch-Flanders), others believe it started overseas in Britain. One thing is clear however, our beloved party game did not come into being suddenly. It established itself through a long and iterative process! -just like my project- During the pandemic I've missed spending time with my grandma. Who happens to be an avid sjoeler herself. And because we couldn't play together physically, it seemed like an interesting idea to make a controller so we could play this game online. I figure not everyone on this website will be familiar with the game of sjoelen. So here's the rules: Sjoelen is played on a wooden 'sjoelbak' and 30 wooden shuffling board discs. At the end of this sjoelbak there are four slots for the discs to slide in. These slots have a value of 2, 3, 4 and 1. On the side of the player there's a wooden bar attached to the sjoelbak. The discs have to be slid from under this platform. The goal of the game is to score as many points possible by sliding discs into slots. The player gets three turns to do this, after the end of each turn, discs that didn't find its way into a slot get returned to the player. After three turns the points get distributed and the torch gets passed to another player. To get a high score its worthwhile to aim your discs evenly at each of the four slots. For every combination of four evenly distributed discs, the player is awarded 20 points. When all quartets are counted, remaining discs have the same value as their accompanying slot score. The highest possible score is 148. This happens when there are 7 discs in each slot, plus 2 extra discs in the 4-slot. (7 x 20 + 2 x 4) My SjoelSim works a bit differently though. It needs only 1 disc! I'll explain the workings below. Step 2: How It Works The program has a main menu which can be used to traverse the game. At this moment the "Crazy Mode" feature hasn't been developed yet. While playing, it's possible to quit to the main menu by holding the button for a second. "Normal Mode" is very similar to a regular game of Sjoelen. It is played with one playing disc that can be 'reloaded' by pressing on the button. After each round, the remaining virtual discs get retreived and the current status of the slots are visible. https://youtu.be/aeGiUjdFPv8 The program has a main menu which can be used to traverse the game. At this moment the "Crazy Mode" feature hasn't been developed yet. While playing, it's possible to quit to the main menu by holding the button for a second. "Normal Mode" is very similar to a regular game of Sjoelen. It is played with one playing disc that can be 'reloaded' by pressing on the button. After each round, the remaining virtual discs get retreived and the current status of the slots are visible. Step 3: Building the Sjoelbak First I tried to get a feeling for the design by modeling it in Maya. When it became clear what parts I needed, I constructed a .dxf file in Adobe Illustrator. The upper sliding deck needs to be polished with sandpaper before attaching it to the rest of the parts. My prototype is different from the plans because I made an error by leaving too big a hole for the potentiometer. I was able to readjust this by making an extra fitting. I was able to cut all parts out of a 120x100cm 4mm MDF board. I used the spare room to try out different disc designs. The discs consist of four circles glued together. Make sure to polish the disc as well. The back of the sjoelbak has a cushion. I made it with leftover styrofoam and a piece of cloth which I glued on the back panel. I painted most of the panels except for the sliding deck and the supports. When all parts are ready and dried, use wood glue to put everything together. Or if you're like me and want quick results, use a glue gun. (this will lead to less pretty results) Step 4: The Code Make sure to include the Wire, NewPing and LiquidCrystal_I2C libraries. The program uses the following pins. 10, 11, 12, 13 for the ultrasonic sensors, 2, 3, 4, 5 for the LED's, A4, A5 for the I2C lcd display, A3 for the potentiometer, and A2 for the button. A version of the game can be downloaded here. This is a zip folder with an .exe file. The default serial port is COM3. // lcd stuff #include #include LiquidCrystal_I2C lcd(0x27, 16, 2); bool backlight = false; String dT = "30"; String sT = "000"; //led stuff const int g1 = 2; const int g2 = 4; const int r1 = 3; const int r2 = 5; bool lightBool; int lightMode; long lightTimer; bool blinkBool; // potentiometer stuff const int potPin = A3; int potState; int lastPotState; // button stuff const int buttonPin = A2; int buttonState = 0; int lastButtonState = 0; bool toggleBool = false; long buttonTime; long timer; bool watchButton = false; //ultrasonic sensor stuff #include #define SONAR_NUM 2      // Number of sensors. #define MAX_DISTANCE 38 // Maximum distance (in cm) to ping. NewPing sonar[SONAR_NUM] = {   // Sensor object array.   NewPing(10, 11, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping.   NewPing(12, 13, MAX_DISTANCE), }; int dist1; int dist2; bool cd1 = false; bool cd2 = false; void setup() {   Serial.begin(115200);   pinMode(buttonPin, INPUT);   pinMode(potPin, INPUT);   digitalWrite(g1, HIGH);   pinMode(g1, OUTPUT);   pinMode(g2, OUTPUT);   pinMode(r1, OUTPUT);   pinMode(r2, OUTPUT);   lcd.init();   lastPotState = potState; } void loop() {   timer = millis();   button();   buttonHold();   sense();   track();   serialRead();   potMeter();   lights(); } void button() {   // this function checks if the button is pressed   buttonState = digitalRead(buttonPin);   if (buttonState != lastButtonState) {     if (buttonState == HIGH) {       buttonTime = timer;       watchButton = true;       Serial.println("500");       cd1 = false;       cd2 = false;     } else {       watchButton = false;     }     delay(50);   }   lastButtonState = buttonState; } // this function checks if the button is held void buttonHold() {   if (watchButton) {     if (timer > buttonTime + 1500) {       if (buttonState == HIGH) {         Serial.println("111");         watchButton = false;       }       if (buttonState == LOW) {         watchButton = false;       }     }   } } void potMeter() {   if ((analogRead(potPin)) < 343) {     potState = 0;   } else if ((analogRead(potPin)) > 342 && (analogRead(potPin)) < 686) {     potState = 1;   } else {     potState = 2;   }   if (potState != lastPotState) {     if (potState == 0) {       Serial.println("990");     } else if (potState == 1) {       Serial.println("991");     } else {       Serial.println("992");     }     delay(50);   }   lastPotState = potState; } void sense() {   delay(29);   dist1 = sonar[0].ping_cm();   delay(29);   dist2 = sonar[1].ping_cm(); } void track() {   if (dist1 > 0 && !cd1) {     Serial.println(dist1);     cd1 = true;   }   if (dist2 > 0 && !cd2 && cd1) {     Serial.println(dist2);     cd2 = true;   } } void serialRead() {   //this function handles incoming data from Unity   while (Serial.available() > 0)   {     int dataIn = Serial.parseInt();     String sub = String(dataIn).substring(0, 1);     switch (dataIn) {       case 777:         digitalWrite(g1, LOW);         digitalWrite(g2, LOW);         digitalWrite(r1, HIGH);         digitalWrite(r2, HIGH);         break;       case 888:         digitalWrite(g1, HIGH);         digitalWrite(g2, HIGH);         digitalWrite(r1, LOW);         digitalWrite(r2, LOW);         break;       case 111:         lcd.backlight();         screen("start");         lightMode = 0;         break;       case 222:         screen("normal");         lightsOff();         lightMode = 1;         break;     }     // read values from unity     if (sub == "4") {       dT = String(dataIn).substring(1);       screen("updateNormalScreen");     }     if (sub == "5") {       lightTimer = timer;       blinkBool = true;       digitalWrite(g1, HIGH);       sT = String(dataIn).substring(1);       screen("updateNormalScreen");     }   } } void screen(String cmd) { // lcd screen functionality   if (cmd == "start") {     lcd.clear();     lcd.setCursor(4, 0);     lcd.print("Welcome");     lcd.setCursor(2, 1);     lcd.print("to SjoelSim!");   }   if (cmd == "normal") {     dT = "30";     sT = "000";     screen("updateNormalScreen");   }   if (cmd == "toggleBacklight") {     if (!backlight) {       lcd.backlight();     } else {       lcd.noBacklight();     }     backlight = !backlight;   }   if (cmd == "updateNormalScreen") {     lcd.clear();     lcd.setCursor(1, 0);     lcd.print("DISCS");     lcd.setCursor(10, 0);     lcd.print("SCORE");     lcd.setCursor(2, 1);     lcd.print(dT);     lcd.setCursor(11, 1);     lcd.print(sT);   } } void lights() {   if (lightMode == 0) {     if (lightTimer < timer - 1000) {       if (lightBool) {         digitalWrite(g1, HIGH);         digitalWrite(g2, LOW);         digitalWrite(r1, LOW);         digitalWrite(r2, HIGH);         lightBool = !lightBool;       } else {         digitalWrite(g1, LOW);         digitalWrite(g2, HIGH);         digitalWrite(r1, HIGH);         digitalWrite(r2, LOW);         lightBool = !lightBool;       }       lightTimer = timer;     }   } else if (lightMode == 1) {     if (blinkBool) {       blink();     }   } } void blink() {   if (timer - lightTimer > 1000) {     lightsOff();     blinkBool = false;   } } void lightsOff() {   digitalWrite(g1, LOW);   digitalWrite(g2, LOW);   digitalWrite(r1, LOW);   digitalWrite(r2, LOW); } Step 5: The Circuit & Wiring It's a good thing you don't see any wiring normally because it's not very pretty. The button was soldered on a perfboard and glued in place. Most of the wiring is taped on the panel to keep things organized... more or less. Step 6: Progress Pics This is one of the first big Arduino projects that I've done and I'm pretty happy with the result. Soldering was new to me and I've gained a lot of prototyping skills. I wouldn't say this build is completely finished, as it doesn't have online multiplayer yet. (for that to work i'd need build another SjoelSim) Initially I had more ideas about different level designs, but I've chosen to prioritize getting the normal mode to work well. Thanks for taking the time to read my instructable. I'll include some progress pictures here, if you're interested. Source: SjoelSim! ### ADVANTECH LAUNCHES MEDICAL-GRADE AVAS-400 SERIES 4K UHD VIDEO RECORDER Advantech, a leading provider of medical computing platforms and solutions, is pleased to announce its AVAS-400 Series medical-grade 4K ultra high-definition (UHD) video recorder aimed at ensuring operating precision. Advantech’s AVAS-400 Series, including the model AVAS-401 and the model AVAS-402, is ideal for surgery centers, operating rooms, and training facilities that use 4K UHD cameras and display monitors for surgical operations and post-surgery reviews and research. To achieve the visual accuracy and precision required for medical applications, the AVAS-400 Series can be used to capture video at 4K UHD resolution. This video can then be streamed to connected displays for monitoring and reviewing surgical procedures. 4K UHD True-To-Life Surgical Video Recorder For Enhanced Imaging For surgical procedures, the ability to support 4K UHD video streaming is extremely important. This is because 4K UHD video streaming provides surgeons with an unprecedented level of detail that allows them to distinguish between tissue, blood vessels, and other anatomy. Thus, the use of AVAS-400 Series can give surgeons an extra level of confidence. Moreover, the enhanced visual information and clarity provided by 4K UHD technology can also assist post-surgery evaluations and lead to improvements in patient care. Furthermore, the provision of open APIs and SDKs ensures easy integration with existing infrastructure and management systems to enable intelligent operating rooms and achieve intelligent healthcare. Finally, compared to other recorders available on the market, the AVAS-400 Series offers an economical imaging solution that is easy to deploy and operate via the intuitive controls. Read more: ADVANTECH LAUNCHES MEDICAL-GRADE AVAS-400 SERIES 4K UHD VIDEO RECORDER ### Arduino Peak Power Tracker Solar Charger This project is an update of my original Peak Power Tracker Battery Charger Project. It is designed to control a 12V solar panel charging a 12V lead acid battery. The updated version of this project uses the Arduino Duemilanove development board (from www.sparkfun.com) as the basis for the project. Then I used the Arduino Protoshield Kit (also from www.sparkfun.com) to contruct the charging circuit and mate it to the processor board. PPT Charger schematic (EagleCAD): ArduinoSolar.pdf PPT Charger Hardware Description: ArduinoSolarHardware.txt ArduinoSolarHardware.rtf PPT Charger Parts List: ArduinoSolarPartsList.txt PPT Charger Software(Arduino Sketch): ppt.pde PPT Charger Photos: Duemilanove and Protoshield, Prototshield back, Protoshield front. To explain how Peak Power Tracking works I've printed part of my original article that I wrote for Home Power Magazine. (Link to full article - Peak Power Tracking article.pdf) To understand why the PPT can increase the efficiency of your solar power charging system a closer at the electrical characteristics of a solar panel is necessary. Solar panels convert photons from the sun striking their surfaces into electricity of a characteristic voltage and current. The solar panel’s electrical output can be plotted on a graph of voltage vs. current: an IV curve. I represents the current in amps and V represents the voltage in volts. The resulting line on the graph shows the current output of the panel for each voltage at a specific light level and temperature. (Fig. 2) The current is constant until reaching the higher voltages, when it falls off rapidly. This IV curve is applicable to the electrical output of all solar panels. However, in a solar power system we are more concerned with the power we can get out of the system, power we can use to do useful work. In an electrical system power is measured in watts, which is the product of the voltage and current (W = I x V) generated by the panel. Graphing the watts generated by the solar panel shows an interesting characteristic: the maximum watts are produced at a panel voltage of about 18v. This value is called the Maximum Power Point or MPP. Since the goal of the PPT to generate the maximum power from the solar panels, operating the solar panels at roughly this voltage is optimal. However, when a solar panel is used to charge a 12v battery directly, the battery pulls the operating voltage of the panel down to its own voltage of 12v. As shown on the graph, the solar panel is producing significantly less power (watts) at 12v than at 18v. So here is an opportunity to gain more power out of the solar panel charging system if the solar panel continues to operate at 18v while charging a 12v battery. To gain the efficiency of Peak Power Tracking, the 18v of the solar panel must be converted to the 12v of the battery. This can be accomplished by using an electronic circuit called a DC/DC converter. A DC/DC converter is a very common device found in most DC power supplies in some form. It is the basis of the PPT. The DC/DC converter changes the solar panel’s higher voltage and lower current to the lower voltage and higher current needed to charge the battery. Because the DC/DC converter is theoretically a loss-less device (less some small real world inefficiencies), it outputs the same amount of watts as are input, but at a different voltage and current. In a power supply, simple feedback is used to set the DC/DC converter to a fixed output voltage. This is done by controlling the ratio of the input voltage to the output voltage. In the solar panel example, the ratio would be 18v/12v or 3/2. However, for any solar panel, the Maximum Power Point is not fixed. Consider the IV curves for any solar panel; (E0004X.pdf) the graph will show that the curves change with the amount of light and the temperature of the panel. They also change for each individual solar panel. As the curves change, the MPP changes for the different temperatures and light levels. If the MPP changes, the conversion ratio of the input voltage to output voltage of DC/DC converter must also change to keep the solar panel voltage at the MPP. Major Components in ProjectArduino Duemilanove Development Board DEV-00666 Arduino ProtoShield Kit DEV-07914 SOIC to DIP Adapter 8-Pin For more detail: Arduino Peak Power Tracker Solar Charger ### SOS webinar: Internet of Things by one chip Who is the winner of new WIZ550S2E-232 module from Wiznet? In addition to getting to know the winner, you can also watch the video record from webinar… “Hardwired TCP/IP” instead of a software solution? The result is higher performance and reliability. You could find this out during webinar about Wiznet modules. From all of those who filled in our questionnaire after webinar we have drawn the winners of WIZ550S2E-232 module. The winners are:   For more detail: SOS webinar: Internet of Things by one chip ### Super Long (7') Lightsaber There are so many authentic looking lightsaber build guides but not many on building a super long lightsaber. Regarding Star Wars, I'm not sure why lightsabers are normal sword size anyway. Its not like the longer the lightsaber, the harder it would be to swing. I assume they are essentially weightless. Just make it 10' long and do the helicopter move. Near flawless victory every time even without the force! Anyway, this lightsaber IS hard to swing. And takes a lot of fore arm strength to hold it. And it makes your hard-core Star-Wars friends ask "why". But we did this specifically for the Go Big Challenge and it wasn't as easy as we thought. But still, fun. Supplies To make the handle and hilt, you will need a metal sink drain. These are relatively cheap and found at almost all hardware stores. The next item you will need is the LEDs. These are a 16' strand of addressable LEDs that are 5v powered. 300 LEDs in all. For the sword, you will need a 6' Polycarbonate Tubing, 3/4" ID x 1" OD x 1/8" Wall Finally, you will need a small microcontroller, a tube style battery, and a power converter (LM2596 DC to DC Buck Converter). Step 1: Light Up Test First thing we did was connect the LEDs to make sure they are working with our microcontroller. I used the very popular FastLED library to control the lights. This is a fun step just to see all the lights, light up; especially if you use their 'ColorPalette' example. Step 7 has the code. Step 2: Light Strand Not ever building a lightsaber before, we took other's examples and wrapped the LEDs around a clear acrylic pole. The results were not exactly what we wanted, you could easily see all the LEDs and them spiraling around. There is an example included here that shows that. So we undid that, and tried the second technique; just folding the LED strip in half. Surprisingly, this produced a much better result. I would have bet the wrap method would have been better, and I would have lost! So, for this step, we ran the lights the length of the 6' tube. Folded the end over on itself, and ran it all the way back to the start. There will be a bit of extra length that will need to be cut off. Step 3: Wrap the Lights To defuse the lights a little bit, we wrapped the LED strand in parchment paper. This was an inexpensive solution and gives a 'good' result. Not an awesome result, but good. We found that life is much easier if you glue the strip down to the parchment paper, then wrap. Otherwise, the lights and the paper become disconnected and it is hard to align them again. Step 4: Printed Parts We printed parts to make the sink drain look less like...a sink drain. First we added a collar to reduce the chance of getting cut on the lip of the metal. We also kept the large brass nut, that looks kinda cool. Next, we extended the handle a little bit then added a large ball at the end. Be as fancy or simple as you'd like. Step 5: Button and Switch Obviously we need a power switch. But at this time we decided to add a little button to cycle through different colors. We chose red, blue, and rainbow. But the choices are endless, we could also add a flame effect or a spark effect. Again, good opportunity to be creative. Step 6: Saber Power I used an 11.1V battery that would fit into the handle. This battery is 2000mah, meaning it the lightsaber will last about 2 hours because the light strip pulls almost a full amp of power. As you know, the lights and microcontroller only require 5V, so we need to attach this battery to a dc-dc converter to get the 11.1 down to 5v. I used a large converter because the constant 1amp current from the light makes this converter get hot! Like really hot, I measured the temperature to 200 degrees Fahrenheit! Not hot enough to melt the PBA+ plastic but certainly hot enough to re-melt any hot glue you might have used. Step 7: Microcontroller Next we connected all the wires to the Arduino Nano. We used a single button to change the colors; just cycle through them. The code is here and it is very very simple. Perfect if this is your first experience with programming Arduinos. Step 8: Lightsaber Assemble Now that we have all the parts, we just need to smoosh them all together. I used screws on the handle extension that turned out really nice. This allows me to easily remove the handle and reprogram or charge the battery. To do this, I just melted the nuts on the reverse side of the handle. Then I hot glued the ball to the end of the handle. Step 9: Size Matters Final step is to find a poor padawan with a normal length blade and show them why a longer blade is the way without the need for Force. Source: Super Long (7') Lightsaber ### Ping Organ using an Arduino I was trying to think of a quick toy I could build for my kids.  I came up with this idea of an ultrasonic range finder, an Arduino, and a speaker.  Basically the Arduino plays a tone out of the speaker based on the distance from the range finder.  The result works pretty well and can be built in minutes.  You can play this from anything from your entire body, to just your feet. http://www.youtube.com/watch?v=6F4xoe1rQMs Step 1: Parts 1. Arduino 2. Range Sensor (I used a Parallax Ping))) that I picked up a Defcon a couple of years ago, anything like this would work as well http://www.sparkfun.com/products/639) 3. A small speaker (I pulled mine out of an toy moose that sang Blue Christmas) Ultrasonic range finders basically work by sending out an ultrasonic signal and then they sense how long it takes to come back.  Think sonar for a submarine. Step 2: Schematic The Schematic is pretty simple.  Speaker to Arduino pin 11 and ground.  Ultrasonic range finder to power, ground, and Arduino pin 7 Step 3: The Code The code is pretty simple.  I just combined the Ping demo and the Tone demo that come with the Arduino UI.  I did it a couple of different ways.  You can either take the distance in inches or cm and multiply it by a number (i.e. inches * 10) to get a frequency that's playable.  Then as you move around you'll get different frequencies.  To make it more playable I got the frequencies of actual notes and told them to play that note when the distance was within a range (I used 20 cm for each note range).  Then you just have it play the note.  I've attached the sketch. PingMusic.pde3 KB Major Components in Project1. Arduino 2. Range Sensor 3. A small speaker For more detail: Ping Organ using an Arduino ### Wireless Robotics Platform with XBee Remote Control I built a remote-controlled robotics platform using a 4WD mobile platform, an Arduino (Seeeduino Mega), an Adafruit motor shield, and two XBee radios for communication. There are also some super-bright white LEDs on the front for headlights. The point of the project was to show how an XBee radio can be used to send joystick sensor data without using a microcontroller on the remote. The vehicle is very easy to control using a joystick and a couple of buttons to control the lights. First I’ll describe how the remote control unit works, then I’ll show how the vehicle was built. The Remote Here’s a picture of the remote control unit that I built on a breadboard. A Parallax joystick is used to control the vehicle, one button turns the headlights on/off, and another button puts the headlights in “scanner” mode, you know, like Kitt or like a cylon. The radio requires a 3.3V supply, but the analog pins cannot take more than 1.2V, so I used some precision resistors to form a voltage divider so that the analog input voltage was stepped down to less than 1.2V. Also note that the joystick is rotated 90 degrees so that it worked on a breadboard with this orientation.   For more detail: Wireless Robotics Platform with XBee Remote Control ### Hydrate Reminder An interactive coaster that reminds you to drink water. I myself find it hard to reach the daily water intake. I can go on without water for hours when sitting behind my desk. For this purpose alsone, I created a coaster that reminds me to take a drink after a certain amount of time. The coaster changes color depending on the last time you took a sip. From deep blue that represents the state of hydration to aggressive red that indicates desiccation. The color resets back to blue after a drink was taken. https://youtu.be/ioODRLxcPPs Supplies Hardware 1x Arduino Uno 1x USB cable A - B 1x Breadboard 4x LED FastLed RGB diffuus through-hole WS2811 8mm 1x FSR 402 sensor 1x Prototype PCB Solderable Breadboard 1x 10kΩ Resistor 15x female to female end jumper wires 12x male to male end jumper wires *Depending on your wiring planning and soldering approach you might need less/more or different types of wire ends. Acryl plate (13 cm x 13 cm x 0.5 cm minimum) FDM filament (5m minimum) Software Arduino App Blender or any other 3D modelling software like Maya Cura (for 3D prinring) Adobe Illustrator (or other illustration tool) Additional Resources A PC 3D printer Lasercutter Soldering iron Solder tin Paper Baking paper Scissors Pencil Circinus Super glue Painting tape Step 1: Test Your LEDs You should test your LEDs by attaching them to their corresponding outlets on the breadboard like in the example. After connecting the circuit to you PC, run the Arduino App. My LED's were sold under the name "Adafruit NeoPixel". After downloading the Adafruit library inside the Arduino App for test animation reels, nothing worked. Turns out the LED's weren't NeoPixels at all but FastLed! Let's download the FastLed library for the Arduino app Arduino App > Sketch > Include Library > Manage Libraries In the 'Manage Libraries" window, type in "FastLed". You should find a library called FastLED by Daniel Garcia. INSTALL IT! Then you go to File > Examples > FastLED There you can choose from multiple lightning reels. In the example above, I used "Color Palette" to see how my LEDs react to all kinds of lightning effects. Before running the code, you need to manually change the NUM_LEDS = your number of leds and the info LED_PIN = Output pin for the Arduino. In the video I tested with 6 LEDS but for the sake of the project you need just 4. Then you can upload the code into your Arduino and finally see some lights! Step 2: Combine LEDs With FSR The reason why we are using a FSR is that we will be using weight to determine of the water was drank or not. If the weight of the coaster won't change within a certain time, the arduino will interpret that we haven't drank and will change the colors of the LEDs. The FSR also causes the lights to turn on and off. This step is based on this tutorial: https://www.ardumotive.com/how-to-use-a-force-sensitive-resistor-en.html Connect your FSR to the other side of the breadboard like shown above. Step 3: The Code https://youtu.be/1Km_t1iMNNo Get the code for the coaster here: https://github.com/TsukiNuki/Hydrate-Reminder/blob/main/Code%20for%20the%20Coaster The code shown above is a combination of the FastLED "pride2015" library and the FSR tutorial from the step prior. FSR Row 66 of the code above represents the pressure value of the FSR. Mine is set to 150 with is the minimum value where my FSR doesn't register itself on it's own. Depending on the sensitivity of your FSR you might want to lower or increase that value so your light's won't get triggered by the sheer weight of FSR itself. Lights The code for the lights can be split in 6 parts: Rainbow - Colorful animation that indicates that the coaster had been turned on. The timer is reset to 0.Blue - Hydrated recentlyGreen - Good level of hydrationYellow - Low level of hydrationRed - DesiccationBlack - The coaster is turned off (Absence of weight) For testing purposes, I set the timer to change the colors every few seconds. When your lightning works as intended, feel free to increase the millisecond equation value of each color like shown in row 91. You can also very easily change the colors to your liking by simply replacing the name of your color with one from the #define COLOR_ORDER RGB Step 4: Designing the Coaster Now that you figured out the circuit and code, it's time for the design part. You will need a rough sketch of the entire construction. You'll have to pay mind when it comes to the measurements of all the assets such as the arduino inside, placement and thickness of the LED's, size of the acryl plate ect. I advise you to sketch on paper with a ruler so you get a good impression of how big your contraption will be. My coaster has the diameter of 13cm. Depending on the side of your water bottle you might want to make the coaster bigger or smaller. Step 5: The Acryl Plate The acryl plate is necessary to display the light. When lit with LEDs, the engraved parts in the acryl light up and alert us of our hydration status. The Design Create a round sketch on paper with a diameter that's big enough for your water bottle and engraved markings around it. You need to make space for the LEDs and to do that, you need to cut an opening for each LED that follows the curvature of the light. If you're using 8mm NeoPixels you can copy my led measurements for the design process. Next open up Illustrator or a simmilar program and create a canvas/round object with the exact same resolution of your design. (My acryl plate has the diameter of 13cm so I created a circle of 13cm inside the program). You might want to change your default measurement units to mm to help with accuracy. Aim to re-create the pencil drawing. Next you want to create a new layer for the engraved part. This part will light up! You can create any sort of linework. If you feel un-inspired like me, you can pick The Water Tribe logo like me. Make sure the design consists of only single color strokes. Every pixel seen in the area will be engraved, no matter the color, so keep transparency in mind. I advise to engrave the edges since most part of your design will be covered by your water bottle. Export After you're done with the deisgn, it's time to export it as a .DXF file. You can open your .DXF file inside CURA or a similar program used for a lasercutter. Inside CURA, you can point out which part of the deisgn to cut and with part to engrave. As for the lasercutter settings, each lasercutter is different. The thickness of your acryl plate plays a big factor in it. Check the instructions on your lasercutter for proper cut and engraving settings. After lasercutting, check your acryl piece for any burn marks. Burn marks can be caused when too much power is used. You might also notice some some sticky dust covering your plate. You can simply wash it off. You can use your acryl piece as a pattern for the baking paper that will cover the underside of your plate. Simply follow the shape of your acryl plate with a pencil on the baking paper and cut it out! The paper will help reflect the light upwards and will cover the wires & arduino underneath. Step 6: 3D Casing Now that you know how big your acryl plate is, you can choose the same diameter for the casing below. This is a model I created in Blender. I won't provide you with the file for it because I messed up the scale and was forced to saw in it. I don't want you to go through it so I encourage you to create your own model. Anyway, here are some tips that will help you create a better 3D model for the casing: Start by re-creating your acryl plate and the LED's in 3D with exacty same measurements. This will help you to balance the rest of the measurements like minimum height to fit the arduino, cables and other items inside.Measure the height of your arduino + your entire circuit. You want to create enough space inside to fit everything neatly inside.Create a hole for the usb cable that reaches the arduino.Create a hole in the bottom for the neck of FSR to go through.Think of an opening-closing mechanism where it's possible to easily take out the arduino if needed.Make all openings minimum of 2mm extra wide just to be sure everything falls into place when assembling.Create a thicker edge on the top of the coaster so the Acryl plate can sit ther ein place.DOUBLE CHECK THE MEASUREMENTS! Export You want to export your model as a .STL file. Step 7: 3D Printing Open cura > File > New File > *here you can find your .STF file* After you opened your 3D model in Cura, DOUBLE CHECK THE SCALE! In my case I had to re-size the entire scale of the file manually after opening my file. Inside the program, you want to assign your 3D printer. Next you can go to the middle tab called "Preview" where you can play around with the print settings. Depending on your printer, available time and the filament you're using, you might need to adjust it yourself. After you're done with the print, you'll need to remove the excess/protective layer of plastic. Step 8: Soldering Prototype PCB Solderable Breadboard allows you to mimic your work from breadboard. Soldering Make sure you're in a well ventilated space. We will be working with solder tin with lead and it's fumes are very harmful once inhaled/in contact with your eyes. Before you start soldering, you might want to strip some of your cables. If you're using female to female end wires or male to female, you might not need to solder both ends onto the led legs but simply plug them in. Same for the FSR. Heat up your solder iron around 400 degrees Celcius.Flip the Prototype breadboard overPoke the stripped end of the wire through a hole in the board (double check by flipping the board over to see if you're about to solder the wire into the correct place. (If it's your first time soldering, you should follow a tutorial on how to solder because it takes practice)After soldering every single piece, attach the board in the arduino and run the code to see if it works or if there are any possible short circuits. You might also want to manage your wires in some way. I taped together wires to each corresponding LED. Step 9: Assembly First check if your acryl plate fit's neatly in the casing. When it comes to assembling the components, you want to start with the pressure plate since it will be lodged on the very bottom. For now you can tape it down with double folded painter's tape. Then you want to place the breadboard and arduino contraption inside. Because my case was so small, I put the arduino on top of the empty space of breadboard. This is also a good time to shorten your wires if needed. Make sure to connect the USB cable to the arduino during this step. Each led needs to fit inside the holes in the acryl plate. It's possible to bend the legs of the LED in any way you want (Be aware that after too much wiggling they can break.) In my case I tucked them inside the case with the wiring and I taped them in place. Then you can lay the baking paper cutout and shut everything with the acryl plate. You can secure the construction by taping the edges unless you developed a closing/opening structure. Step 10: Test Your Coaster! https://youtu.be/ioODRLxcPPs Source: Hydrate Reminder ### Papercraft Automata Race Game littleBits Circuit using Arduino This instructable will show you how to create a game using littleBits. The game will start with a sound trigger. Each player will have to press a button repeatedly. The first person to press their button 25 times wins. A buzzer will sound to end the race while the winning machine will do a victory lap while the losing machine remains still. You will need the following littleBits modules: 1 Power (p1) 1 Arduino at Heart (w6) with micro USB cable 1 Fork (w7) 1 Buzzer (o6) 1 Sound Trigger (i20) 6 Wire (w1) 2 Button (i3) 2 DC Motor (o5) 2 motorMate (a10) Non littleBits Materials needed: 4 party crayon packs mounting tape adhesive tape foamboard Arduino code used in this instructable can be found at: Note: You will also need two paper rowing automata. We used the Shrimp Boat and the Surfing Bunny from the kit, Gizmos: Paper Machines that Really Work by Rob Ives. You can also find similar paper machines directly from robives.com for download to print on heavy weight paper. Instructions are included with your download. Step 1: Connecting Inputs to the Arduino Module (w4) Gather the following modules: 4 Wire (w1) 1 Fork (w7) 2 Button (i3) 1 Sound Trigger (i20) 1 Power (p1) 1 Arduino (w6) On the Fork module, connect the Wire Out end to the first branch and the Wire In to a Button (i3) module Do the same thing on the second branch and connect a second wire to the remaining button. On the last branch, connect the Sound Trigger (i20) module. Then, attach the other end of the Sound Trigger to the first input pin (D0) on the Arduino (w6) module. Take another Wire module and connect the button on the first fork branch and connect it to the the second input pin (A0) on the Arduino. Do the same with the remaining button and attach to the last input pin (A1). Then attach the Power module to the left of the Fork (w7) module so that it can provide power to all the input modules. Step 2: Connecting the Output Modules Gather the following littleBit modules: 2 Wire (w1) 2 DC Motor (o5) 2 motorMate (a10) 1 Buzzer (o6) Attach the motorMate (a10) to the DC Motor (o5). Repeat with the second DC Motor. Next, using the Wire module, connect the Wire Out end to Output Pin 1 and the Wire In end to the DC Motor plus motorMate. Connect the second DC Motor to Output Pin 5 with the wire module like the first motor. Lastly, connect the Buzzer (o6) module to Output Pin 9. Step 3: Assemble Paper Automata Platform Materials Needed for this step: 4 party crayon boxes (or anything sturdy at the right height to connect the mechanism to the motorMate) adhesive tap foamboard mounting tape Stack two party crayon boxes and tape them together with the adhesive tape. Repeat with the remaining two boxes. These will serve as platforms to hold up the DC Motor modules at the right height so that the motorMate attachments can connect to the cranking mechanism for each paper automata. Position your paper automata on the foamboard and use the mounting tape to secure the automata and the crayon platforms to the foamboard. Note: You may want to experiment with positioning before adhering to the foamboard. Be sure that the two machines have enough space between them so that their rowing action doesn't interfere with each other.   For more detail: Papercraft Automata Race Game littleBits Circuit using Arduino ### Panasonic's tiny new battery is destined for the wearables market While keeping batteries small and light is definitely a factor with electronic devices in general, it becomes particularly important when dealing with wearable electronics such as smart glasses. With that in mind, Panasonic has just announced its CG-320. Measuring 20 x 3.5 mm, it's being billed as "the industry's smallest cylindrical shaped rechargeable Lithium Ion battery." The CG-320 weighs 0.6 grams, has a nominal capacity of 13 mAh, a nominal voltage of 3.75 volts, and a maximum charging voltage of 4.2 volts. It also has a stainless steel exterior case, designed to prevent swelling.   For more detail: Panasonic's tiny new battery is destined for the wearables market ### WINMATE IP70 IS A MINI-ITX BOARD EQUIPPED WITH APOLLO LAKE PENTIUM Taiwan based company called Winmate recently released a new board. The new board is equipped with a quad0core 1.1GHz/2.5GHz Apollo Lake Pentium N420 processor. It is rated an industrial thin Mini ITX board with operating temperature support from -20 to 60°C and the storage temperature is -40 to 70⁰ C. The Winmate board is equipped with up to 8GB dual-socket, 1866MHz DDR3L and comes with 4 USB 3.0 ports, 2 GbE ports, and 2 SATA interfaces. The board is currently called the Winmate IP70 and it currently has no operating system information however, a similar board released by the company runs on Linux and Windows. So there is a high probability that this board will also support Linux and Windows. Winmate IP70 comes with different peripherals, some of which are: an audio jack,  a single DP 1.2 (4096 x 2160 @60Hz), 1x HDMI 1.4b (3840 x 2160 @ 30Hz), 1 Power jack, a 1 x 3-pin digital panel for controlling brightness and even a 1 x 7-pin inverter. Dimensions of the board are 170 mm by 170 mm are also available along with an On-Screen-Display (OSD) membrane control. Also, there is an M.2 slot for Wi-Fi and an optional PCIe 2.0 expansion slot on the Winmate IP70 board. One of the two SATA presents will not be available when the M.2 SATA is being used. This is because SATA 2 and M.2 SATA cannot be used concurrently. For graphics, there is an Intel HD Graphics 505 which supports DirectX 12 and OpenGL4.3. The audio controller is a Realtek HD codec and it accepts 12V Single Voltage Power input. Read more: WINMATE IP70 IS A MINI-ITX BOARD EQUIPPED WITH APOLLO LAKE PENTIUM ### Arduino and the LTC2440 24bit ADC Have you ever wondered how to improve the resolution of analog readings of your Arduino board? If yes, this is for you. John Beale, discussing on the Dangerous Prototypes’ forum, quickly describes how to connect a Linear’s LTC2440 ADC to an Arduino board, which will provide you with an amazing 24 bit resolution. The ADC, which is available in a SSOP package, can be connected to the Arduino via the SPI bus. Here John provides a brief sketch and some very useful comments to make it working properly. For more detail: Arduino and the LTC2440 24bit ADC ### Joystick Controlled Car I have created a joystick-controlled car, capable of moving left, right, forwards, and backwards. I created this as I thought it would be a challenging project with a fun and exciting purpose. Supplies Arduino Uno R3L293D Motor Control2x DC MotorServo Motor2x 9v Battery (or 1 battery and 1 portable USB power supply)2 Battery CapsMini BreadboardB103 Analog JoystickMany Jumper Cables and WiresSmall Screwdriver4x miniature tires Step 1: Research The first step when beginning any project is the research! When I began this project, I first researched code online to get input from the joystick, code to make the servo rotate, and code to make the dc motors spin. My final product is the result of all the knoledge I gained from my research. Luckily you guys can skip this step, or is this entire tutorial technically your research? Well whatever it is, you're ready to continue. Step 2: Setup! Attach your components to any frame of your choice. If you do not have a frame you can still create this project! Just not drive it like a real car. Make sure the 2 tires controlled by the DC Motors are at the back, and the 2 controlled by the Servo Motor are at the back. Step 3: Wiring the Breadboard On the 2 furthermost left or right rails of your breadboard, attach them to the GND and 5V pins of your Arduino. Since mini breadboards don't have individual power and ground rails, we will be using these 2 rails instead to supply the rest of the board with power and ground individually using wires. Don't forget to give your ARDUINO power using a 9V battery or portable power supply. Step 4: Wiring the L293D Motor Control and DC Motors Firstly, using a screwdriver, loosen all of the blue ports. From both of the motor ports, connect power and ground to your DC Motors. From 1 of the set of 3 ports, connect it to the power cable of a 9V battery. And connect a second port to both, a ground pin on your Arduino, and the ground cable of your battery cap (Yes, both cables are in the same port. This is done so that the L293D and the Arduino can communicate). Connect the IN1 and IN2 ports to pins 5 and 6 of the Arduino. Connect IN3 and IN4 to pins 9 and 10. Step 5: Wiring the Joystick Using jumper cables, connect the Y or VRY pin of your joystick to pin A0. Connect X or VRX to pin A1. The Bt pin is not going to be used in this project. You can keep it disconnected for now, and later connect it to an unused rail in the breadboard. Connect the VCC and GND pins to the breadboard and supply them with power and ground using wires from the power and ground rails we set up in step 2. Step 6: Wiring the Servo Motor The Servo Motor has 3 pins; power, ground, and a signal pin. Plus all 3 pins into the breadboard. Give power and ground the respective connection, and connect the signal pin to pin 3 of the ARDUINO using a wire. Step 7: Begin Your Code! Create a new .ino file and name it whatever you like. The first thing we must add is our headers. This Program only uses 1 header which is for the servo motor. The header is: " #include ". Make sure you add this at the top of your code, outside any loops. Also, create the variable for your servo motor. Do this on the next line in the format of " Servo servoName; ". Step 8: Defining the Pins Define the pins for the X and Y pins of the joystick, the signal pin of your servo motor, as well as the pins of each DC Motor. Defining a variable rather than declaring it as a variable tells the compiler that the value of these variables will never change. It's basically the same as a const int. It's common practice to define variables that you know you won't be changing. You can see how to define your variables in the image above. Step 9: Declaring Data Type Variables Declare a variable to store a value to control your DC motors, and a variable to hold the value and angle for the Y coordinate of your joystick. Declare these 3 variables as integers (int). Step 10: Void Setup Let's set up our pins! Well before we do that we need to set up the servo. We need to link our servo variable to the signal pin of the servo motor. We do this using the "attach" function which is programmed as: "servoName.attach (servoPin)". Now we have to set up our PWM pins for our DC motors. All 4 of these pins need to be set as output as we will be using these pins to give a power-based signal to the motors to make them move at our desired speed. Make sure all of this is done in the function " void setup() ". Step 11: Reading Your Joystick and Moving the Servo Before we start this step, let's create a function called "void rotate Servo()". This is the function we will put all our servo code in. Make sure you define this variable above void loop(). Then call this function in void loop by typing rotateServo();. We first need to set the value of the yValue variable. We want yValue to be the value of the y coordinate being provided from the joystick. We will do this using the analogRead() function. Next, we have to map the value of our yAngle variable. The map() function provided allows you to map a range of values to a new, different range. We will be mapping the variable from 0 to 179 since those are the angles our servo motor can move from. Lastly, we are going to rotate our servo by using the "write" function. The format is: " servoVariableName.write(angleVariable); ". View the image above to see how it's all done. Step 12: Reading the X Coordinate to Move Rotate the Dc Motors Similar to what we did before, we will be using analogRead() to get the X coordinate of the joystick and use this value to control the speed/RPM of our DC motors. After this we get the value for the motor variable, we need to read and text the binary value of this variable in order to output the right amount of POWER for our desired RPM. we will do this using "motorControl >>= 1". the code ">>=1" moves the binary content of this value and moves it all to the right by 1. The purpose of this is to test each individual bit within the data. It will then pull an output pin HIGH or LOW (respectively) to match. Step 13: Moving the Motor With the Joystick You've reached the end! Our last step is to make them motors move! We'll be using an If, Else If, and Else statement to make it happen. To make the tires spin forwards, create an if statement with the condition of motorControl > 255. This is to check if the joystick is being pushed forwards. We will digitalWrite the second pin of the left and right motor as 0. This is because the second pin needs to receive no power while the first does, for the motor to spin forwards. The first pin will be given power using analogWrite. The value we will write will be the motorControl variable minus 255. We are subtracting 255 because the joystick goes up to a value of 510. To make the motors spin backwards, in an if-else statement with the condition motorControl < 255 to make sure the joystick is being pushed backwards, we will digitalWrite the first pin for each motor as 0 so that the motors spin backwards. The second pins will be given power using analogWrite. The value we will write will be 255 minus motor control. 255 will be subtracted from motorControl because we want the car to go backwards. Lastly, in an else statement, we will digitalWrite all pins to 0 so that the motors don't spin when the joystick is at default. Source: Joystick Controlled Car ### Game Controllers using Arduino This instructable will teach you how to construct homemade game controllers for personal games, education aids, or anything you want. This system uses 4 controllers which send signals to a central hub which holds an Arduino. It was designed for use with a game called Fraction Smash that my group was developing for a class. Students would enter a fraction using the keypad to re-size their character and then hit the smash button to break through the door if they are the right size. More info here: http://pdi-studio5.wp.rpi.edu/fraction-smash/ Step 1: Cut out pieces The first step is to cut out all the pieces to be used. In my design I used a CNC waterjet cutter for all the parts. You could also use a laser cutter for precision parts. If you don't have access to either a waterjet cutter or laser cutter you can cut the parts out of wood by hand. If that is your choice, I would recommend skipping the tabs and just using nails or screws instead. The .DXF files are attached for automated processes. All of the CAD files and assemblies can be found here: http://pdi-studio5.wp.rpi.edu/files/2011/12/Fraction-Smash-CAD.zip Controller.DXF57 KB Hub.DXF58 KB   Step 2: Add wires to ethernet keystones This system uses Ethernet cables for the controllers to communicate with the hub. I used three wires on the Ethernet cable, power, ground, and data, although there is space for up to 8 wires if you need more room. Keystones are easy to use. Simply place one wire in each slot and then push the plastic cap down on top. It may be too hard to do by hand so I used a pair of pliers to push it down. It is not necessary to strip the wire as the keystone will cut through the insulation for you to make a connection. Major Components in ProjectParts: Keypad (3.95) http://www.sparkfun.com/products/8653 Buttons (1.49) http://compare.ebay.com/like/120554574811?var=lv Ethernet Keystones (1.24) http://www.monoprice.com/products/product.asp?c_id=105&cp_id=10513&cs_id=1051308&p_id=5371&seq=1&format=2 Arduino (29.99) http://arduino.cc/en/Main/Buy Breadboard (5.95) http://www.sparkfun.com/products/137 Wire Ethernet cables Super Glue For more detail: Game Controllers using Arduino ### Arduino decision box (Attiny85) So I was a bit bored this weekend (actually I wrote this some months ago) and since I had ordered a bunch of Attiny85 chips the week after I decided to make a quite random project with them. This is a decision box, it takes decisions for you by showing a green or a red light (it can also show orange if we programmed it to combine both colors). It's made from wood and it has an aluminum plate to cover it all, I painted black because small wood objects tend to get quite dirty. If you want to build one you'll need the following materials: Wood (my final box is (3x3x3) cm) Red/green led with common cathode (negative leg at the middle) A pushbutton (you might want to get one long enough) Aluminum plate. (3x3x~0.1) cm 4x small wood screws. Thermofusible glue Attiny85 3V button cell. 100, 500 and 10000Ω resistors. 8pin chip socket (if you plan to reuse the attiny) Tilt switch (optional but highly recommended) Thin wires (preferably non solid core) These tools are also recommended: Dremel (performs better in this kind of tasks than a simple drill) A saw (jewelers saw) is needed if you plan to cut the wood cube and aluminum lid by yourself. Sandpaper (when it comes to making a perfect square there's nothing like sandpaper) Step 1: Making the body Cut the wood cube, you can also use pre cut slats, this can save you a lot of time. As always make the marks with the ruler and start to cut, unless you have very precise saws like a bandsaw or a circular wood saw the chances are you make the cube a bit irregular, this is were the painful method of measuring and sanding comes to play, mark the places you want to sand with a pencil and sand them placing the sandpaper over a flat surface. If all goes well it should look like the picture. Step 2: Hollowing it Now you have make an empty space inside it, this operation is quite delicate and should be made with care. What I did was to place the cube at my table clamp using a rag, so it doesn't leaves marks on it, then with the Dremel I used a normal drill bit to make the initial holes, it's very useful to put a bit of tape on the bit to avoid drilling through all the piece. Once I have a bunch of small holes, I used the carving bit of the Dremel to carve a nice hole, finally with the sandpaper bit I smoothed the walls. A 0,4 - 0,3 mm wall thickness is recommended. IMPORTANT: leave more space on the corners where the screws will be placed, this grants you a bigger margin of error. Step 3: Accomodate the components Once you have a nice empty space where you can allocate your components you can make the holes for the push button and the LED , at this point you have two main options: a) Drill the holes in the wood. b) Drill the holes in the aluminum plate. If I had the chance do this again I might make the holes at the aluminum plate because the pushbutton becomes easier to install since the thickness of the wood makes you have to use a long button, also when you unscrew it the whole thing comes out, if you do it the other way the components have to be stick to the wood and this might be quite annoying. The problem of attaching the components to the aluminum plate is the thermofusible glue doesn't sticks to metals too well and it could end flimsy. As always mark the right spot and have a firm hand. Step 4: The lid The aluminum plate is easy to cut off, just grab the box and with a pencil mark the outlines of the bottom of it, then with care, cut it out with a jeweler's saw, you can later sand the corners and edges so they end smoother. TIP: because the bottom of the box is probably going to be a bit irregular is useful to make a mark at the same corners of the box and plate so you can later align them correctly. To make the holes get an appropriate bit and mark the points where you have to drill by making lines 3mm away from the sides of the plate. TIP: to make sure the bit doesn't moves and scrapes the metal you can punch a little hole with a pointy screw and a hammer, that will keep the bit in place, also clamp the plate tightly with a rag to prevent scratches, don't drill it holding the plate with your hands, you could cut yourself if it get's stuck, believe me, that happened to me once. Step 5: Placing the lid Once you have the holes in the plate you can drill the holes at the bottom of the box using it as a guide, now is when the markings you made to keep the pieces aligned are useful. Use a Dremel or drill bit slightly thinner than the diameter of the screw. You can sand the aluminum lid later as if you just wanted to sand one side, just make sure it's tightly screwed and that you go to the direction where the wood part points and that you don't pass over the same spot twice. Aluminum powder is very dirty and easily stains the wood.   For more detail: Arduino decision box (Attiny85) ### Making a DIY Soldering Fume Extractor With Lighting With an Arduino, a PC fan, and an LED strip, you can make a simple fume extractor that will keep you safe from the fumes from soldering. Step 1: Why Do We Need Solder Fume Extractor Soldering is awesome, right? It's fun to make our own PCB for our project, but there are a few things we need to watch out for as we solder the parts on. When we solder, we are around lead. Also, breathing in the fumes can cause long-term health problems, such as stomach problems, problems with memory and concentration, muscle and joint pain, and so on. Also, soldering parts onto the circuit board is hard on your eyes, and doing it in low light can eventually damage your eyesight permanently. So, when soldering, it is very important to have enough light and a fume extractor to get rid of the smoke. By using a fume extractor, you and those around you will be safe from fumes that could be dangerous. In this video, we'll make a soldering fume extractor out of an old PC fan and a 12V LED strip that can be used to change the light. Step 2: The Circuit So, the Arduino Nano is basically the brain of this project, but you can use any Arduino board. The input voltage is connected to a 7805 voltage regulator, which will turn the VIN into a steady 5V DC supply. There are two potentiometers here that are connected to the 5V and will act as voltage dividers. The outputs of the pots are connected to analog pins A0 and A1 respectively. Here are two MOSFETs that are set up to work as switches. You can turn them on by turning on pin 9 and pin 10 of Arduino. Here, I'd like to point out that pins 9 and 10 are PWM pins, which means we can send PWM signals to the MOSFETs. And here you can see an LM 741 comparator IC, which can be used to power any other devices you want. This is pretty much the whole circuit. Step 3: The PCB Layout Once the circuit was done and tested, I used Altium to design a small PCB where I could put all the parts in a neat way. Here, you can see that routing is done on both sides of the board, which means it is a dual-layer PCB. Step 4: Getting the PCB Done PCBWay is where I got PCB. PCBWay is a company that makes printed circuit boards (PCBs). They specialize in PCB prototyping, low-volume production, and clean PCB assembly. Check out the link below if you want to make your own PCBs for your project. You can save $5 when you sign up through the link below, and you can save another $5 when you check out by entering the coupon code PCBWayLab. To order a PCB from PCBWay, go to the PCBWay website and fill out the instant order form with the board's basic information. From there, you'll be taken to a form where you can give more information about your board. Change the information about your board on the PCB specification screen. You should be able to upload your Gerber file and send it for review on the next screen. Once the review is done, all you have to do is add the PCBs to your cart, pay for them, and wait for them to arrive. When you have all the parts and the PCB, you can solder them together. Put all the parts on the board by soldering them on, and make sure to check the polarity of the parts. This is how the PCB looks after the soldering is done. Step 5: Coding Let's get started coding right away. This is the code that will be uploaded to our Arduino when we complete the process. It seems to be fairly straightforward, doesn't it? To put it simply, it is easy! const int ledPin = 13; const int light = 9; const int fan = 10; int pot1 = 0; int pot2 = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(A0, INPUT); pinMode(A1, INPUT); Serial.begin(9600); } void loop() { pot1 = map(analogRead(A0),0,500,0,255); pot2 = map(analogRead(A1),0,500,0,255); analogWrite(light, pot1); analogWrite(fan, pot2); delay(50); Serial.println(pot1); Serial.println(pot2); Serial.println(""); } To begin, we will be declaring some variables and then assigning them to the pins that will be often used throughout the course of this project. In the setup function, we are going to declare the pin mode, which is essentially going to tell the Arduino whether the pins are input pins or output pins. We are taking the analog readings from the two pots, and within the loop function, we are mapping those readings to a value that falls somewhere in the range of 0 to 255. In the following line, we are going to turn on and off the MOSFETs that are connected to the Arduino Pins 9 and 10. To do this, we are going to output PWM signals with values that were generated from the lines that came before them. Simply turning the potentiometer allows us to control not only the level of brightness produced by the LED strip but also the rate at which the fan rotates. A pipe or an outlet, to which this fan can be attached, can be used to ensure that the vapors do not remain contained within the room. Source: Making a DIY Soldering Fume Extractor With Lighting ### Magnetic refrigeration: How does that work? https://www.youtube.com/watch?v=uJ_NpWnCXzM&feature=em-subs_digest   I describe how some materials can change temperature when a magnetic field is applied to them.   For more detail: Magnetic refrigeration: How does that work? ### ROHDE & SCHWARZ ENABLES SUB-THZ ULTRA WIDEBAND SIGNAL ANALYSIS Rohde & Schwarz is paving the way for research in the terahertz frequency range by demonstrating multi gigabit data transmission in the D-Band at 140 GHz. The setup features the R&S FSW high-end signal and spectrum analyzer equipped with an R&S FSW-B8001 option, supporting an unparalleled 8.3 GHz internal analysis bandwidth. This new hardware option will be available soon from Rohde & Schwarz. Developments in mobile technology are moving constantly towards increasing bandwidths, enabling increasingly high data throughput. The Rohde & Schwarz setup represents some of the first research exploring data transmission at sub-THz frequencies featuring ultra-wide bandwidths. In the setup, a wideband-baseband signal is upconverted to the selected 140 GHz frequency via a R&S TC RSE converter box. The world’s leading analog signal generator, the R&S SMA100B, provides the local oscillator frequency to the upconverter. The transmission is carried out over-the-air, with the converter connected to a horn antenna. The transmitted signal is received via another horn antenna and downconverted. The R&S FSW featuring the new, unique 8.3 GHz bandwidth option R&S FSW-B8001 analyzes the signal, carrying out signal quality measurements such as error vector magnitude (EVM) to assess the performance of the transmission. Various common modulation formats are demonstrated. The new four-channel power supply R&S NGP800 by Rohde & Schwarz plays a vital role powering various parts and components in this setup. Rohde & Schwarz supports starting research at THz frequencies As wireless communications and sensing technologies are advancing, the need for higher bandwidths is becoming apparent. These developments push the frequency boundaries into the sub-THz and THz frequency range and, continuing the process started with 5G, make testing over-the-air (OTA) mandatory. At these frequencies, RF frontends become even more integrated, and their characterization in terms of signal quality (EVM) and out-of-band emission (ACLR, SEM, spurious) requires a flexible OTA test setup, covering a wide frequency range, from microwave and mmWave to sub-THz. The proposed setup can easily be installed into the R&S ATS1000 antenna test system. This enables design engineers to characterize RF frontend prototypes and reference designs intended to be used in future devices that support cellular and non-cellular technologies and are using much wider bandwidths. For example, IEEE’s 802.11ay standard allows channel bonding that creates a signal with more than 8 GHz of bandwidth already today. The R&S FSW is currently the only signal and spectrum analyzer in the world supporting the needed bandwidth internally for such applications, significantly facilitating complex setups in R&D. Read more: ROHDE & SCHWARZ ENABLES SUB-THZ ULTRA WIDEBAND SIGNAL ANALYSIS ### RGB LED with Arduino 101 To Learn about the basic LED usage practice, read here. What is a RGB LED? With an RGB (Red Green Blue) LED you’ll be able to produce any colour that is flashing everyone’s eyes. At first glance, RGB LEDs look just like regular LEDs, however, inside the usual LED package, there are actually three LEDs, one red, one green and yes, one blue. By controlling the brightness of each of the individual LEDs you can mix pretty much any color you want. To Learn about the basic LED usage practice, read here. At first using an RGB LED with Arduino seems quite complex, but it quite quickly becomes clear that its no more difficult than controlling one of their single colour counter parts. We mix colors just like you would mix audio with a ‘mixing board’ or paint on a palette – by adjusting the brightness of each of the three LEDs. The hard way to do this would  be to use different value resistors (or variable resistors) as we played with in lesson 2. That’s a lot of work! Fortunately for us, the Arduino has an analogWrite function that you can use with pins marked with a ~ to output a variable amount of power to the appropriate LEDs. Required Parts for this Tutorial: RGB LED (common anode) A common anode RGB LED is nothing more complicated than three one colour LEDs (one red, one green, and one blue) housed in a single package. Rather than having 6 leads (a cathode and anode for each LED) it has only 4 one cathode for each colour, and one common anode. (see the schematic diagram below) A common anode RGB LED is the most popular type. It is most commonly found in either a 5mm bulb size or as a 5mm pirahna form factor. Current Limiting Resistors (270 ohm) (red-purple-brown) Most LEDs are designed to work with a voltage between 1.5v and 3v. As most microcontrollers (including the Arduino) operate on 5 volts a current limiting resistor is required. Consult your LEDs datasheet for maximum ratings but we like to use 270 ohm resistors. This limits the current to ~20mA, well within most LEDs and microcontroller ratings. Arduino Microcontroller & Breadboard A great open source microcontroller platform (for more details visit arduino.cc) How to Connect RGB LED with Arduino The common negative connection of the LED package is the second pin from the flat side of the LED package. It is also the longest of the four leads. This lead will be connected to ground. For testing purposes, check your LED datasheet for its pin-out or below are the two most common RGB LED form factors and pin-outs. The following is an example: Wire up the Test Schematic (below) Connect a current limiting resistor (270Ω) to each of the three cathodes Connect the common anode to 5V Test each color by connecting its current limiting resistor to ground Experiment with colour mixing a little by powering multiple elements at once Each LED inside the package requires its own resistor to prevent too much current flowing through it. The three positive leads of the LEDs (one red, one green and one blue) are connected to Arduino output pins using these resistors. Major Components in ProjectRGB LED Arduino For more detail: RGB LED with Arduino 101 ### How to Make a Garage Door (EASY!!!) This is a EASY arduino project that you could create to impress your teacher and friends. This project is an IR sensor-controlled garage door. It uses 2 Servo motor's to move the garage door into an opened and closed orentation. The inferred sensor (IR) is effective and long range with a range of 1-5 meters. This project is great When paired with an arduino car project. Supplies Electronics: 2 Servo Motor's1 Infarred Sensor (IR)1 Infarred Remote (IR) (any tv remote works)2 Resistors5-10 LED's (optional)1 Breadboard1 Arduino Uno Accessories: Frame (wood, 3D printed)Construction Paper (Garage door) Tools: 1 Wire Cutter1 Glue Gun1 Soldering Iron Power/Connections: Wires2 9v Batteries1 battery cap (buckle connector)1 battery cap (male DC plug) Step 1: Research There was a planning process before I started this project to figure out what to do. I wanted to create something unique that had never been done before, and I couldn't find anything on garage doors. So, right there, I confirmed my project idea. This section contains background information on the most important and intricate components. Arduino: Arduino is an open-source electronics platform that uses simple hardware and software to make it easy to use. Arduino boards can take inputs - such as light from a sensor, a finger on a button, or a Twitter message - and convert them to outputs - such as turning on an LED, triggering a motor, or publishing anything online. The arduino uses the format code of C++. Infarred Receiver (IR): IR(Infrared) Receiver Extender cable, which consists of an IR receiver and a plug connected by a wire, is used to conveniently receive and amplify the infrared remote controller signal. The epoxy package and shell of an infrared receiver can filter out visual interference. Servo Motor: A servomotor (or servo motor) is a rotary actuator or linear actuator that can control angular or linear position, velocity, and acceleration precisely. It consists of a suitable motor coupled to a position feedback sensor. Transistor (NPN): The NPN transistor is designed to pass electrons from the emitter to the collector (so conventional current flows from collector to emitter). The emitter "emits" electrons into the base, which controls the number of electrons the emitter emits. Step 2: Wiring Part 1 Before Starting the wiring let me tell you what each wire color represents: Black = Ground Red = Power Green = Arduino Output To BredBoard Blue = Arduino Output To Component Steps: Connect power and ground from the arduino to the bredboardConnect the first servo to pin 11 on the arduinoConnect the second servo to pin 3 on the arduino Note : connecting the servos to the arduino will allow it to send code straight to the servo Step 3: Wiring Part 2 In this wiring step, we will connect the IR receiver. The IR Reciver is the most important component in this project because it connects to a controller, which sends signals to the arduino and then to the servo to tell it to move up and down when pressed. Steps: Connect the IR Reciver to pin 7 on the arduinoconnect the IR Reciver to Power and Ground Note : For the IR Controller you will program that in the coding section. also make sure that the IR reciver in facing in the downwards direction of the bredboard Step 4: Wiring Part 3 (optional) This step is optional; it simply adds a spark to the project by turning on a light when the garage opens and off when the garage closes. Instead of just one led, I soldered eight together to make a chandalier. Looking at the diagram, the inner circle connects to ground, while the outer circle connects to power. Steps: Connect Arduino pin 4 to the transistor's base (make sure the connection is through a 1k OHM resistor)Connect the LED's negative side to the emitter and positive side to power from the bredboard (make sure poweris connected thorugh a 330 OHM resistor)Connect the transistor's collector side to ground directly. Step 5: Code Simply copy and paste the code into the Arduino editor and connect your computer to the Arduino to upload it. To program your remote controller with your IR just open up the serial monitor then click the button you want to be assigned to that command e.g. if your want 1 to be forward click 1 on your remote while pointing it at the IR then look for the Hexacode that pops up and copy that into "if (results.value == 0x000000)" keep the 0x but replace the other long string of numbers and letters with your Hexacode. #include #include int IRpin = 7; // pin for the IR sensor IRrecv irrecv(IRpin); decode_results results; Servo myservo, myservo2; int ledChan = 4; void setup() { pinMode(ledChan,OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver myservo.attach(11); // attaches the servo on pin 9 to the servo object myservo2.attach(3); // attaches other servo } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value } if (results.value == 0xC1AAFC03) // change according to your IR remote button number { myservo.write(190); myservo2.write(90); digitalWrite(ledChan, LOW); delay(15); } if (results.value == 0xC1AAC43B) // change according to your IR remote button number { myservo.write(90); myservo2.write(190); digitalWrite(ledChan, HIGH); delay(15); } } Step 6: Frame Assembly When all of the wiring and code is finished, it's time for the final assembly. I used a small immatation of a house that I had lying around for the frame. I cut a hole in one of the walls that I thought was big enough for the garage door. If you don't have the materials, don't worry; you can make a frame out of whatever you have lying around; just make sure it has a rectangular shape to which you can glue the servos. Steps : Glue the bredboard and arduino to the inner-top of the frameglue the servos to either side of the frame, facing eachothercut out a peice of construction paper that fits the dimensions of the frame and glue to the arms of the servo Note: if the servos are opening in the opposite directions, Flip one of them . also make sure the IR Reciver is visible and not behind something Step 7: Conclusion https://youtu.be/rwv1lIpZPGU If you followed the steps correctly, you should have a fully functional garage door. If not, go over the steps again to see where you went wrong. The video attached i what it should look like when working. Source: How to Make a Garage Door (EASY!!!) ### EEVblog #669 – FLIR TG165 Thermal Imager Teardown https://www.youtube.com/watch?v=xFFXUc4Bwjs&list=TLkHh1r-qvUrCnVaQn5FhtB7tzLotYFjeA What’s inside the new FLIR TG165 Visual IR Thermometer / Thermal Camera using the new Lepton sensor? How does it compare to the FLIR ONE & FLIR E4? Does it have a calibration shutter? Does it have any extra capability built in ready to be hacked? How easy is it to open? (SPOILER – it’s a BASTARD!)   For more detail: EEVblog #669 – FLIR TG165 Thermal Imager Teardown ### Cthulhu Party Lamp/Accessory Using NeoPixels and ESP32 But was I really? Something was missing... It'd been a while since I last went to a festival. Y'know, that whole pandemic thing? It had also been some time since my last "personal project" and I was feeling like I needed some "creative outlet". Several years ago there had been another Mozamboogy, and at that one, I'd had this Scuba diver night light (see image) that served a few purposes: Conversation topicLight when no other light is availableMakes you easy to find when friends are looking for you in a crowdFun accessory There were a few things that could be improved on the original though: The original was gone. No one knew where it was. For all intents and purposes, it had gone out for a quick dive and never come back.I had one person complain it was too bright... One person was enough to ensure that whatever I ended up making didn't receive any such negativity.Could be cooler than just having one color and zero effects.The theme this year for Mozamboogy was monsters.More than one was needed if I were to surprise everyone in my campsite with a gift. Seeing as they were so bloody popular, and I also want one... we shall make a new one together :) Supplies Components and Consumables (Click links to see what I used) Electronics: A strip of WS2812B individually addressable LEDs (Neopixels for example) I used a strip of 10A microcontroller such as:Arduino Nano (Code for this on Github repo)An ESP32S (this provides some interesting options by the way for sending and receiving signals to all the people in your crew - A feature I never got around to building) As it's all I have right now it's what I'll use in this Instructables.An ATTiny85 - I can't confirm this one... I thought it would be cost effective but I'm struggling to get it working - If you manage, please tell me and I'll update the instructable accordingly... and the github to include your code2*10k potentiometersA momentary switch/push buttonPerfboard/Veroboard (Okay, so it looks like the one I used isn't available anymore - but the dimentions are available via this link - you can cut yours to size and drill out the mounting holes)Stranded wire (I have a bunch in different colors and while it wasn't what I wanted, it became a popular feature actually) OR 3-5 core wireHeaders (so you can remove the microcontroller if needed)Wires for creating the control circuit board (I use solid core CAT5 or other ethernet cable usually as it has different colors and it's stiff enough to route however I want)USB Cable (to power your device from battery bank) Misc stuff A 5mm grommets for 8mm holesA somewhat transparent/translucent filament to print the Cthulhu body and any filament for the control box.Screws to secure the two halves of the Cthulhu together Equipment 3D printer, or access to oneSolder station, or access to one and the other soldering essential, like flux and solder.Multimeter (recommended but not essential)Breadboard and jumper wires (again, recommended but not essential) There are other ways to interface with this that you may find preferable. If I did a redesign, I'd probably use a single rotary encoder with momentary push switch functionality to change settings instead of the two pots and a button. Links to the files (some working files were too large to include in this Instructibles): Github for all working files, printables (STLs) and code: https://github.com/SirLucian/Cthulu-Lamps-Neopixel-Code-and-printables/tree/main Step 1: The Code You can just do what I did: I get it, you just want a cool lamp, you don't want to fiddle with the code. No problem - just use mine (attached to this step) - Also available via Github - where you'll also find the code I wrote for Arduino Nano if you need it. Stick the code in your Arduino IDE and upload to your device! Please do ensure your circuit is set up like mine, and that your pinout on your microcontroller is identical to mine, otherwise change the values for the DATA_PIN, buttonPin, brightIn and hueIN according to your needs. #define DATA_PIN 26 const int buttonPin = 14; const int brightIn = 32; const int hueIn = 34; Your microcontroller may also map values differently - Check what the values are in your serial monitor when your potentiometers are all the way to either side. The values should range between 15 and 255 - If not you'll want to adjust the value 4095 on these two lines (probably to 1024... but check what works with your microcontroller) brightnessVal = map(brightPotVal, 0, 4095, 15, 255); hueVal = map(huePotVal, 0, 4095, 0, 255); The Patterns: You might not like all these patterns, but you can remove the ones you don't like by removing them from the gPatterns array. SimplePatternList gPatterns = { rainbow, rainbowWithGlitter, confetti, sinelon, bpm, juggle, singleColor, whiteColor }; Alternatively you can alter them as you see fit, or include more of your own design - they are all the functions defined after: void loop () Step 2: The Electronics Part 1 - Breadboarding Let's breadboard this to ensure it all works first: Please see the Fritzing in this step. For the sake of clarity. I've put 3.3V connections in orange and the 5v ones in red. If you need some extra visual help, see the third image for what it looks like IRL. I've use the same color wires where possible, again for the sake of clarity if you are new to this kinda stuff. Step 3: The Electronics Part 2 - Make the Circuit Board Circuit on protoboard: We need to connect the two potentiometers and the button to the appropriate GPIOs. To use my code without having to modify it, you'll want yours setup like the provided images. Feel free to do a better job soldering ???? Anything that is dotted lines is on the other side of the board. The blue dots represent where soldering is required and things are connected. The blue square is where you'll be putting your button. This diagram is nice and neat - if only my board looked nearly as neat... There's a picture of what it looks like from the top - be aware it does get confusing flipping it over to keep track of what's gone where. Protips: When planning to make it easier for myself I mark my protoboard so I know which pins are going to get soldered and where etc. I Start with soldering on the potentiometers, so I can place my ESP in an appropriate location. Once I know where the components will go, I work out what route my wires will take. Try to keep wires that cross at right angles to each other. This makes it easier to see what's going where and as an added benefit you minimise electromagnetic interference Use the header sockets so you can take your microcontroller out if you need it for another project between parties (or for if you make a boo boo and destroy it - it happens ) Test that your connections all only connect with the correct bits using a multimeter set to the continuity checking mode. Do this before powering up your device so you reduce the risk of frying your microcontrollers. If something isn't working, you can test that voltage is ending up in the correct places using your multimeter set to the DC Voltage setting. Finally, I personally place the USB and power/data cables that go to the neopixels around and down the middle under the microcontroller to decrease the chances of them pulling off the board. You could glue them or something else if you wanna. You could design your own circuit: You might want to design a completely different way to control your light, so I can't tell you how. I can tell you what I did... Design a circuit that has 2x analogue inputs for your microcontroller of choice, 1x digital input and 1x PWM output for the LEDs. You will also need a 5v rail, and a 3.7v rail, if your device requires 3.7v logic. I power mine through the VIn and supply that to the LEDs while letting the device and it's inputs run off the 3.7v from the device it's self. Step 4: Body of Lamp Print my print: I've provided my Cthulhu lamp STLs in this step. It's also available on Thingiverse if you want to remix it or whatever, I'd be honored. Or design and print your own unique version: You will want a body in the appropriate dimensions as you want it. There are a couple things to add to whatever representation you wish your lamp to have: It should have a mechanism at the top to allow for securing the cable/(s) that run between the control box to the lamp. It should be sliced in half, you should have a way to join the two halves - I use screws at the bottom and a cap at the top. I recommend my design. It's pretty effective, but do whatever tickles your fancy. I have made notes on the important bits if you look in the images of the steps :) I'll briefly go over how I would go about it again: Found an STL of a monster I liked (Credit: drukdrukdruk_pl for their Cute Cthulhu Walker Closed) Pulled it into Fusion360 as an STL Eyeballed position so I could slice it in half later Designed the thing for the screws to secure the two halves together Designed the top cable trap Made the top cap with a hole for the grommet If you want to go over my fusion file it's on Github (sorry it's so messy - I really struggled with some parts doing this project). I woulda attached it here, but the file size is too big. Step 5: Control Circuit Housing My design: My files are attached here (and available on thingiverse). I've redesigned the snap fit - And the final design... exceeds all expectations. Just print in ABS and print with supports - it's not much support material and it'll be a very snappy snap fit. PRINT THE STLs called bottom_v5_LongSnapfit.stl and top_v5_LongSnapfit_LessTolerance.stl I'm quite proud. Finally managed a perfect snapfit... As a finishing touch, I also printed some knobs for my potentiometers curtosy of Idee_Design - To put these on the pots, I just heated them with a torch and then pushed them over the pot. I printed Pot4.STL of theirs. If you want to do it from scratch: If you need to (because your electronics are different), or want to, designing a box is relatively simple and there are plenty of decent tutorials out there on the topic. Or, if you want to just alter my designs some, all my working files are attached and you can edit them as required. You can use my files and edit the dimensions as you require to make your housing work for you. Upload your remixes as remixes on Thingiverse to help out others  Start off with defining dimensions that are essential - Board size and where the mounting holes go. I followed the schematic of my protoboard. I measured where with relation to the circuit board I needed my button hole to be, and how big my button was so I could place this hole. Then I measured using my calipers how far away my potentiometers were from the base and centre and how big the holes needed to be. Then make a box that will fit your circuit and components, with holes for the cables to go in and out of it from the power bank and to the Cthulhu and slice it to be two halves. Then you make your box, with whatever design choices you have, such as style, and how to join it (snap fit or using screws) etc. In the images, you'll find notes outlining some design choices I made I have pins to position the board and they go into tube like posts to secure them in place and hold the board in place vertically. The images in the step's image has notes on it I have a full perimeter snap fit profile as localized snap fits kept breaking (I was printing in PLA though. ABS holds up better) My button hole has a chamfered inset to allow easy access with your finger to press the button. All long skinny bits like the positioning pins get a chamfer at the bottom to relieve some stress and stop them snapping so easily. I definitely didn't get this all right the first time. It took a few iterations (and I'm printing this iteration right now just for you, in the hope this one is the winner - and it is the winner. Perfect snapfit design it is) I've also included v3 if you prefer - it's my old design: I'm including my original snap fit which worked just fine - but would wear down really quickly (I originally printed in PLA though). It is the circuit-housing-*bottom*/*top*_v3.stl files in this step. Step 6: Final Touches and Assembly Prep the lamp: Remove the support material from the Cthulhu and sand down the edges between front and rear so they align neatly. Drill out the skinny screw hole if it's too small for your screws. Removing support material from that hole was pretty hit/miss. Put your circuit in the box, button side through the button hole. (if button isn't perfectly aligned you can widen the button hole with a craft knife) Take a second to double check everything works by plugging it into a powerbank before snapping the housing shut. If you have 3 separate wires, like I do, braid them to keep them all as "one" all the way down to your Cthulhu. For some additional strain relief the wires going to the Cthulhu are to be tied in a loose knot on the inside of the box - this will prevent you from pulling the wires off the circuit board. It is a pretty primitive strain relief solution but hasn't failed yet. You can add extra heat-shrink wherever there might be wear on the wires, but coming out the box isn't nearly as hazardous as what happens on the Cthulhu end when everyone is pawing it. Put the grommet in the top cap piece and thread it onto your wires, with the cap orientated like it's a bottle lid and your Cthulhu is a bottle. Put a section of heat-shrink (large enough to cover the bit where you solder to the LED strip) and solder the wires to the strip. Heat the heat-shrink onto the LED strip. This is like the strain relief on this end. You could tie another loose knot if you like here, but the grommet and the cable maze should take care of a majority of the strain relief for us. Roll the strip of LEDs so it fits in your lamp (some of the patterns look really cool with the strip front facing and rolling to rear facing). Place the bit where the heat-shrink is, just below the cable maze and wind it up between the sections. Join the front and rear sections together using the two screws and pop the top cap on and... Step 7: In Loving Memory of All the Fallen Cthulhu's   After several versions that didn't pass quality control, I'm proud to state that this latest version has been stress tested by the most ADHD person I know, and survived so far. He broke the last two Cthulhu's in the name of product testing  This step is in memory of those Cthulhu's who sacrificed everything for us and the people who helped them make their great sacrifice. Special thanks to Richard for proof reading and Bugsy for helping me get the promo video done in time! Also thanks to everyone else for loving the Cthulhus so much  Without so much love for them, they wouldn't be as amazing, or well built as they are now. Source: Cthulhu Party Lamp/Accessory Using NeoPixels and ESP32   ### Atmel claims to have smallest chipRFID radio Description: ATA5577 RF proximity card is one of many cards in one, using ATMEL5577 chip packages. Because of its unique stability of the chip performance, and encryption performance (multi-level authorization), the smart key lock for induction, the channel system, time and attendance, identification, property identification, process control, parking, logistics, animal identification, identification, industrial automation, meeting attendance, RFID, supermarket, warehouse management, personnel management, security systems. -Dimensions: 85.6 × 54 × 0.86 (mm) -Weight: 6.0 ±0.5g -Material: With PVC -Color: White(>1000PCS, can be printed) -Chip type: ATA5577 -Operating Temperature: -10°C to +50°C -Storage Temperature: -10°C to +50°C ATA5577 Key Features: • Contactless Read/Write Data Transmission • Radio Frequency from 100KHz to 150KHz • e5550 Binary Compatible or T5577 Extended Mode • Small Size, Configurable for ISO/IEC 11784/785 Compatibility • 75 pF On-chip Resonant Capacitor(Mask Option) • 7×32-bit EEPROM Data Memory Including 32-bit Password • Separate 64-bit memory for Traceability Data • 32-bit Configuration Register in EEPROM to setup • Modulation: FSK, PSK, Manchester, Biphase, NRZ Atmel has introudced a 363-bit read/write transponder for RFID tags in a very small XDFN package . The transponder IDIC ATA5577M1 is a high-volume low-frequency (LF, 100-150kHz) RFID device designed for small tag applications including animal ID ear and bolus tags, standard key fobs or clamshell cards for access control solutions. “Measuring at 2mm x 1.5mm x 0.37mm, the XDFN package is the world’s smallest RFID package available,” claimed the company. The two coil wires can directly be soldered onto the two pads of the package and mounted or glued onto the antenna coil. The direct mounting and small packaging allows for extremely small end products since the resulting RFID tag size is determined by the size of the coil. The package can also be soldered on a standard printed circuit board (PCB), for example, in combination with a PCB-mounted antenna. Since the chip has a 330pF on-chip capacitor trimmed to +/- 3%, the antenna coil is the only external component required to form a trimmed LF-RFID tag. The incorporated ATA5577 chip provides a manufacturer-programmed and locked unique ID which enables the traceability of the product to prevent cloning or counterfeiting of the tag IC. The unique ID and the extended read/write distances have been optimised for next-generation access control applications. The device also operates according to ISO 11784 and ISO 11785 (FDX-B) standards, making it well-suited for animal identification and waste management applications. For more read: Atmel claims to have smallest chipRFID radio ### Arduino tutorial - organize your projects If you have succeeded in a few arduino projects, congratulations! You may be motivated to take on a larger project. But as you take on a larger project, your breadboard becomes messier and messier, like a bowl of spaghetti (jumper wires). You will even have a hard time keep your arduino flat on your table since the jumper wires are dragging it sideways. Plus, if you want to switch to a different project, you need to disconnect and reconnect dozens of wires every time you switch. See second picture. You have a couple dozen wires to disconnect to switch to a different project or connect back when you return your Arduino. See the third picture, here is a neat way I have created to keep your arduino away from all the crazy wires. Plus, as you work on more than one project, you can easily and quickly switch between your projects. This tutorial teaches you to use an Arduino shield, the phi-connect, to organize your projects. The picture is a phi-connect shield connecting an arduino to a bread board. It passes all Arduino pins to the bread board, and powers the bread board buses with 5V and GND. Please read more about the phi-connect on my blog: http:// http://liudr.wordpress.com/gadget/phi-connect/ Step 1: Obtain a phi-connect kit First, obtain a phi-connect kit from here: http://www.inmojo.com/store/liudr-arduino-and-physics-gadgets/ The kit includes the main board (left board on picture), the breakout board (right board), male pins, a push button, a ribbon cable (not pictured) and one extra breakout board (not pictured). Make sure you have a decent soldering iron. I use this basic iron from radioshack. It includes some solder a couple of tools, including a clip that is very useful. http://www.radioshack.com/product/index.jsp?productId=2062758 If you don't wear a pair of glasses, you are strongly encouraged to get a pair of goggles. Solder in a well-ventilated area is suggested. Make sure you wait at least 3 minutes for your iron to heat up before soldering. The solder should melt when touching the iron if the iron is hot enough. With tools in hand, we're ready to assemble the phi-connect kit. Step 2: Assemble the main board You can first solder on the button. It's easy. The button snaps on the board. Next, solder one row of male pins with the help of the clip. The row should face up and be the inside row, not the outside. The reason is that the inside row won't be easily clipped tight if there is an outside row. So start with the inside rows and solder two opposite pins to secure the pins. Then remove the clip and solder the rest of the pins. Then solder the 8-row pins to the outer row. Then solder the 6-row pins on the inner side followed by the 6-row pins on the outer side. Step 3: Finish the main board assembly Now solder the pins that face down to the outer holes on the top and bottom sides of the board. These are to be plugged into arduino below it. Again use the clip to help you secure the pins while soldering. If you have female stacking headers, you can replace the male headers with them to stack other shields above it. It nice to have those female headers but they cost more.   For more detail: Arduino tutorial - organize your projects ### Apollo 11 Arduino Clock Project and Instructable write-up done by Ian Lacy on behalf of the MIT Edgerton Center. In this project, I’ll show you how to build an Apollo 11 clock. The clock has each hour associated with a leg of the mission, and plays an associated audio clip at each hour. Every third hour, it also has a motion associated with that leg of the mission! Though my clock has a pretty specific theme, the idea can be broadly generalized, and adapted to almost any theme you want! I’ll be sure to point out the important parts of generalizing the idea, and how to make the most of the design. Supplies Materials for clock face (I used acrylic) 3.3V white LED Photoresistor (any) 1/8” dowel rods Cardstock or paper Sticker vinyl Clock movement Breadboard Arduino Uno R3 4 x small servo DFRobot DFPlayer Mini 2 x small switches Small button 2 x 4 x AA battery pack Tools: Basic craft tools Printer Miscellaneous jumper wires Recommended: Soldering Iron Laser cutter Vinyl cutter The Arduino code is attached here as well as in the code/troubleshooting step. Step 1: Design    The most important step in any project is the design and planning phase. To end up with a great end result, you first have to make a good plan. Sometimes the planning phase happens repeatedly, with prototyping in between, but a thorough design and plan is necessary before making the final product. Working off the idea of ‘clock that makes noise,’ the first thing you need to do is choose a theme. The theme I chose was Apollo 11.  The next thing you may want to do is find something about your theme that can be broken into 12 parts, but this isn’t entirely necessary. I assigned each hour to one leg of the Apollo 11 mission, which coincidentally worked out well. (i.e. 1 is launch, 6 is the landing, etc) You’ll then want to go through and pick a sound or audio clip for each of your 12 hours. You also will want to come up with four things the motions can do! I’ll describe mine as they come up. If you want to follow my steps, or just want some inspiration, here is the google doc I used to plan things. Step 2: Audio Setting up the audio is the part that’s almost entirely on the computer. Once you’ve chosen your 12 sounds/clips, you’ll want to get them at .mp3 files on your computer. To do this, you can download them from royalty-free sites, or use any other method. To get my clips, I got screen recording software, went to the Apollo in Real Time site, found audio clips I wanted to use for Apollo 11, and then recorded my computer playing them. I then extracted the audio using Audacity, trimmed it, and exported it. The last step is to name the files ‘XX.mp3’ where XX is the number you want the file to play at. The file for 1 o'clock will be ‘01.mp3’ for example.  You’ll then copy these files to a blank microSD card, making sure they appear in numerical order. Here is a compressed folder with the audio clips I used as well as the audacity project I exported them (one channel at a time) from Step 3: Clock Face   The first physical part of this project is making the clock face. For my clock, I laser-cut a 9" circle out of acrylic, but anything with enough clearance for the hands of your clock should work equally well. This could be plywood, acrylic, or even a plastic plate.  I also cut a small fire-shaped hole out and filled it with orange acrylic to be used as the fire for the booster. Your clock face will need a hole for the shaft of your clock movement (in my case, ⅜”) at the place you want your clock hands to be centered on. After you’ve made your center hole, lay your minute hand so its hole is centered over the hole in the clock face, and mark/drill two 1/16” holes about 1/4” from the end tip of the hand. The photoresistor will slot through this hole. You can then decorate your clock with numbers, stickers, or other decals, so long as they won’t impede the hands of the clock or the photoresistor. It helps to mark the clock at 30 degree intervals– the best way I have found to do this is to find your 12 o’clock spot, mark it, and then install just the movement (see step 8) and then start both the hour and minute hands on 12. Then manually advance the clock by an hour, so the minute hand lands back at 12, and use a ruler to mark where the hour hand lands. Repeat for each hour. Step 4: Sensor Standoff For the Arduino to know when the minutes hand passes 12, we need to make a sensor.  Make a ~1.5” x 2” piece of your material. Find a drill bit that is slightly wider than the thread on your bolts. Drill holes in the top corners of the small piece you made.Line it up so the long edge is a bit below the photoresistor, square it up (make the wide side perpendicular to the direction of the minute hand) and mark and drill two bolt-sized holes in the clock face.(Optional) If you have a soldering setup, you can solder wires to the legs of the LED like i did, which will let you use the bolts as pass-throughs. This means no wires going around the back! Be sure to note which leg is the positive leg.Bend the legs of your white LED so that the legs will lie against the piece and the light will point away from it, as shown.If you didn’t do step D, place the female end of an M/F jumper on each leg of the LED. I suggest color coding- put a black jumper on the negative shorter leg (the leg on the side that has a flat spot on the housing) and a red jumper on the positive longer leg.Line the piece up with the holes in the clock face, and note where the photoresistor falls under it. Use tape or glue to attach the LED to the underside of the piece, so that when it’s bolted on it lines up with the photoresistor and illuminates itPlace the bolts through the front of the piece, and tighten nuts onto the back of the piece. If you did step D, wrap each lead clockwise around the bolts. The nut should tighten down over the leads and make a good electrical connection. Afterwards, trim the wires. This LED standoff, combined with the photoresistor you installed in step 2, will serve as a way for us to sense when the minute hand passes 12. Step 5: Set Up Servos  In my project, I have two kinds of motion- linear, and rotational. For your project, you can add whatever motion you want, but I’ll be demonstrating how I did mine.    First type- rotational. The 3 and 6 servos will move dowel rods holding paper decals. They will be set up to meet stationary decals.    Print your decals on cardstock, and then using white glue, layer an additional sheet of cardstock onto the back. Use scissors or a hobby knife to cut out the decals. Paint thin dowel rods to hold each of the decals, and then glue the decals on.  Use small cable ties to strap the moving rod to the arm of the servo. To hold the other rod, I’ve made a small holder on tinker cad. (STL attached) You can make your own, depending on your project, or modify the one I’ve made. The other rod will rest on top, and cable ties will loop over it through the small holes.    After both rods are secured, position them where you want them, and stick them to your clock (Hot glue tends to work, in my experience). Make sure they’ll interact how you want- you can, of course, change the code to get the right speed and range of motion for your servos.    The second type of motion is linear. To achieve linear motion, I snagged a linear actuator adapter off of thingiverse and scaled it in the slicer so that it would fit the servos I’m using. The base decal (for 6 for example, the moon) will be attached directly to the clock, and the moving decal will be stuck to a rod, as with the rotational motion, which is then strapped to the pinion of the linear actuator with cable ties. Position the servo so that the rod lines up how you want, and then stick it down. You can move the pinion around to set the starting height, and modify the code to change the range of motion. Step 6: Wiring There’s unfortunately a LOT of wiring for this project, but if you happen to have Fritzer, I’ve uploaded the .fzz file for your use. If you don’t, no worries! I have several pictures. Largely, the wiring can be done however you want. I’ll be showing you my method, but as long as the connections end up right, it’s entirely your choice as to how to accomplish it. Additionally, the last step of this instructable explains some wiring hacks that I used to clean up/simplify the wiring on my build. These require solder and a bit of creative methodology, and thus are a bit more advanced than this instructable is meant to be, so they’re entirely optional. The first part of the wiring to be done is to load up the breadboard. Stick the DFPlayer on one end, making sure it goes across the slot so each pin has its own row on the breadboard. Then, place two switches and a button on the breadboard, as shown. Pick two rows for your LED and photoresistor, and for each of them bridge a 10 kΩ resistor to the negative rail. Next, bridge one side of your button, the common terminal of each switch, and the GND pin of the DFPlayer to the negative rail with a jumper wire. Next, use a jumper wire to bridge both negative rails together. Now that the breadboard is set up, you can mount it, the Arduino, and your speaker to the back of your clock face. You can also now mount the 2 x 4 x AA battery packs at any time, though I held off on them until the end.  Next, we need to hook the Arduino to the breadboard. The first set of hookups is as follows: Arduino -> breadboard Vin -> positive rail (the one that will have the batteries) 5V -> other positive rail (the one that will power the LED and photoresistor) 3.3V -> DFPlayer Vcc GND -> negative rail That’s the power hook-ups done! Now for the input hook-ups: A0 -> photoresistor pulldown resistor 6 -> button (the side that’s NOT bridged to negative rail) 7 -> switch you want to use for mute 8 -> switch you want to use for freeze That’s the logic/inputs done! For the DFPlayer: 10 -> DFPLayer TX 11 -> DFPlayer RX. You’ll then jump leads from your speaker to the SPK_1 and SPK_2 pins on the DFPlayer. To hook up the LED, run the negative leg of the LED to the current-limiting resistor you hooked up earlier, and run the positive leg of the LED to the positive rail you jumped the 5V from the Arduino to. To hook up the photoresistor, run one leg to positive and one leg to the slot that has the jumper to A0 and the pulldown resistor. The legs are interchangeable. Now, all that’s left is the servos. Run the power lead of each one (normally the red) to the positive rail that is hooked to the batteries. Run the ground lead of each (typically brown) to either negative rail. Finally, hook the control wires up to the arduino: 2 -> 3 o’clock servo 3 -> 6 o’clock servo 4 -> 9 o’clock servo 5 -> 12 o’clock servo If you haven’t hooked up the batteries yet, BOTH positive leads will go to the battery positive rail, and BOTH negative leads go to the negative rail. These battery packs are in parallel to make sure that the servos won’t brown out the board. It also allows for expansion with additional servos, LEDs, or other functions. You’re done with the wiring! Getting close to being done fully, too. Double check your wiring, and then you can upload the Arduino code, and test the clock. The switches should turn off the sound and motion respectively, and the button should advance the time when you push it. Step 7: Installing the Clock Movement  The last step is to put in the clock movement. The movement should come with instructions, but the basic process is usually the same. Make sure to remove the nut and top washer from the movement, then insert it from the back of the clock. Put the top washer over it, and then tighten down the nut. Install the hour hand, then the minute hand, then the seconds hand (I left mine off because it was a bit beat up). After this, you’ll want to run it a few times around with the time setting mechanism to make sure the hands all clear the sensor/LED. If they don’t, adjust the nuts on the standoff to get the height right. After it all fits, you should be good to go! Power on the clock and test it out. Step 8: Code/Troubleshooting To make sure everything is working, power on your clock and use the button on the breadboard to advance the clock through each of the hours. Make sure the  A few words on troubleshooting- the issue you’re most likely to run into is that the clock either doesn’t trigger when it should, or triggers when it shouldn’t. The first thing you should try in this case is the threshold definition in the code. Since the ambient lighting is different for everyone, the values the photoresistor outputs varies from person to person. To know where to set the threshold, connect the Arduino to your computer, and then open the serial monitor. Check the output value for ambient light conditions, and the output value when the minutes hand is covering the sensor, and set the threshold slightly above that value. If they're too close together, consider changing the standoff height, changing the clock movement, or finding a brighter LED (or slightly reducing the resistance of the LED resistor (from 10k to 8k, for example) Another issue would be the servos twitching or the board resetting. Make sure your batteries are fresh-- having the parallel packs should mean the servos have enough current capacity to draw from, but dead batteries would hinder that. If you’re having audio problems, make sure the files are named right and are .mp3 files. If it still won’t play, try downsampling it in audacity. Also, make sure the RX and TX wires are in the right spot- if the DFPlayer doesn’t activate, try swapping them. To skip or modify the servos, you’ll find their programming in the movement() function at the bottom. To change what time they activate at, change the case. To change how they move, modify the for loop. To prevent twitching, make sure to detach them after you’re done moving them. To fully remove them, you can either delete the code block, or change the case number to something higher than 12. Step 9: Wiring Hacks Since there’s so many wires, it can be handy to consolidate some of them. One thing I did that you can do too is bus the servos together. I used a 2x5 header piece, but you can use two 1x5 header pieces. Use a wire and some solder to make each row into a bus, and then you can rack the servos together- one bus will be negative, one positive, and the last pin on each bus is used to jump it to power. The other thing I did was use some headers and some ribbon cable to make a ribbon for the servo and for the switches/button. Solder the ribbon wires to the header pins, and then you can insert those into the Arduino. Do the same on the other end and those can end up in the breadboard or the servos, or anything else you need them in. After that, you’re all set! Source: Apollo 11 Arduino Clock ### LED Pattern Hat using an Arduino This is a (moderately) simple Arduino project that is a spectacular display from LEDs - that you can wear on your head! It also uses a program that is not intricate at all, so you can modify it for different patterns and cycles. It's also a great first or second project for people new to Arduino. And, of course, it looks great in the dark!(I know the video isn't ideally situated; I'll try to fix that soon) IMG_2749.MOV1 MB Step 1: Parts List You will need: A hat (of course) 16 paperclips 24 LEDs for the version pictured - Radioshack sells a bundle of red, yellow and green LEDs, which is what I used x2 Jumper wires Duct tape 9V battery 9V connector or plug Electrical Tape Fishing line or string Very small breadboard Arduino Uno, Leonardo, etc. Step 2: Parallel vs. Series It might be simpler, but building the circuit with the LEDs in series (with the positive leads connected to the negative ones of the next; 5th picture) requires more voltage than the Arduino can provide. Two LEDs work, but for this design with three LEDs I used a parallel circuit. When connected in this way, like the in first four pictures, the Arduino can power at least four LEDs at once, although they are slightly dimmer. Step 3: Construct the Ground Circuit Since the Arduino Uno has only 3 ground ports, you'll need a circuit that you can plug all 8 LED strips into. With a super-small breadboard (this one is 5x10), plug one wire into the ground pin on the Arduino and a row on the breadboard, and two more wires from that row into two other rows. Step 4: Assemble the LED Strip Straighten out 2 paperclips and bend the leads on the LEDs as shown in the first picture. Wrap the positive leads around the paperclip while leaving some of the it exposed on both ends, then do the same for the negative leads. The more times you wrap it around, the better it will stay connected. Also, it may be helpful to have one paperclip longer than the other at the green end so you know which one is positive and vice versa. If necessary, add electrical tape around the connections to keep them together some more; however, the residue from the tape can interfere with the contact between the leads and the paperclips. Finally, connect jumper wires to the green end of the paperclips. Repeat all that as many times as you want strips on the hat; for this Instructable I used 8 (this is also the amount you can make using two LED bundles from Radioshack). Major Components in ProjectFishing line or string Very small breadboard Arduino Uno   For more detail: LED Pattern Hat using an Arduino ### NRF24L01 Tutorial - Arduino Wireless Communication In my last tutorial I created a NodeMCU based Duino Coin Miner. It is an awesome little miner that sits on my desk and mines few cents a day.  However, adding these miners to my home network choked my WiFi router. Home Appliances and Smart Devices connected to the router constantly started dropping off. To my understanding, most of the wireless routers and access points can support upto 250 devices connected at once. So, what's happening here?  https://youtu.be/LhBIRMMAGGE To clarify my doubts I called my ISP. The answer they gave was absolutely shocking. "ONLY 30 devices can successfully connect and exchange data via their router at any given time". Bloody hell!!  So, to overcome this limitation I added another router to the network to scale up the load. But, I was not happy with this solution. So, I did a bit of research and found this "NRF24L01 RF Transceiver Module" which I can use to create a mesh of wirelessly connected microcontrollers.  In this tutorial, I am going to show you guys how to use this transceiver module to add wireless communication between two or more Arduino boards. I will be using this module for many of my upcoming home automation projects. Bang Problem solved.. Supplies Step 1: What Is a NRF24L01 RF Transceiver Module? So far, I have always used WiFi for wireless communication between microcontrollers. While this is easy enough to do, it is not exactly suitable for battery operated nodes. WiFi modules consume a lot of current when transmitting data plus they also have a slight delay when initiating the transmission as the module has to first connect to the WiFi network. After getting crippled by the abilities of my wireless router, I found this cheap, very popular and widely used "RF Transceiver Module" which you can hook up to any microcontroller (MCU). This module is called a RF transceiver because a single module can work both as a transmitter and a receiver. The module operates at a frequency of 2.4GHz, which is one of the ISM band which means it is open to use in most of the countries around the World.Data transfer rate is between 250kbps to 2Mbps baud.Power consumption? This module is designed for ultra low power wireless applications. It has 2 power saving modes operating at 22uA Standby-I mode and 900nA in power down mode - which makes these modules suitable for battery operated nodes. The high air data rate combined with two power saving modes makes the nRF24L01 module very suitable for ultra low power designs. The power consumption of this module is just around 12 milliamps during transmission (TX) which is even lower than a single led.   Operating voltage is between 1.9V to 3.6V. All other pins on this board are 5V tolerant making it easy to connect to an Arduino without using a logic level converter. It has an integrated (on chip) voltage regulator.The Range of this module as per its datasheet is 100m but it works up to 50 to 60 meters in real world conditions.The module has 125 independent RF channels giving the possibility to have a network of "125 independently working modems" in one place. Each channel can have up to "6 addresses or 6 data pipes" or in other words, each unit can communicate with up to 6 other units at the same time (1:6 star networks).The module is configured and operated through a Serial Peripheral Interface (SPI).It uses Enhanced ShockBurst™ for automatic packet assembly and timing, automatic acknowledgement and retransmission of packets. Enhanced ShockBurst™ enables the implementation of ultra low power, high performance communication with low cost host microcontrollers. The features enable significant improvements of power efficiency for bi-directional and uni-directional systems, without adding complexity on the host controller side. The module used in this video has an in-built PCB antenna making it compact. However, you can also buy a variant that supports an external antenna allowing much higher range of about 1000M in line of sight. Step 2: NRF24L01 Pinout Now, lets have a look at the pinouts and specifications of the NRF24L01 module: GND: is the Ground Pin. It is placed inside a square for easy identification.VCC: supplies power to the module. Voltage can range from 1.9v to 3.9v. So, you can connect it directly to the 3.3V pin of our Arduino. Remember connecting it to a 5V pin will likely destroy your nRF24L01+ module!CE: (Chip Enable) is an active-HIGH pin. When selected the module will either transmit or receive, depending upon which mode it is currently in.CSN: (Chip Select Not) is an active-LOW pin and is normally kept HIGH. When this pin goes low, the module begins listening on its SPI port for data and processes it accordingly.SCK: (Serial Clock) it accepts clock pulses provided by the SPI bus Master.MOSI: (Master Out Slave In) It is SPI input to the module. It is used to receive data from the microcontroller.MISO: (Master In Slave Out) It is SPI output from the module. It is used to send data to the microcontroller.IRQ: It is the interrupt pin that alerts the master when new data is available to process. Step 3: Setup and Schematic In order to get this working, we need two such NRF24L01 Modules and two Arduino Boards. For this tutorial I am going to use 2 Arduino Nanos. Just remember, we cannot use a breadboard with these modules because the pin spacing on these modules are not enough to place it in the middle and if you place it anywhere else, then you will end up shorting the pins. This means that you will either have to solder the wires directly to the modules or use some sort of jumper cables. The connection is exactly the same on both the transmitter and receiver end.  Connect the GND pin to -ve and VCC pin to 3.3v pin of Arduino. The signals generated by these modules are very sensitive to power supply noises. So, adding a decoupling capacitor (anything from 10uF to 100uF) across the power supply line is always a very good idea. Then connect the CSN pin to D8, CE to D9, MOSI to D11, MISO to D12, and SCK to D13 pin of the Arduino. Since the nRF24L01+ module requires a lot of data transfer, it will give the best performance when connected to the hardware SPI pins on the microcontroller. Note that each Arduino board has different SPI pins that must be connected accordingly. Have a look at the table onscreen for quick understanding. Step 4: Library Used For this tutorial I am going to use the "TMRh20/RF24" OSI Layer-2 driver for nRF24L01 on Arduino & Raspberry Pi/Linux Devices. You can download the library from the link provided in the description below: https://github.com/tmrh20/RF24/. Step 5: Code 1 - Sending Text In my first example, I am going to send a character array from one module to the other. Using a split screen I am going to demonstrate this example. On my left is the Transmitter Code and on my right is the Receiver Code. Lets start by including the "SPI library" followed by the "RF modules library" downloaded from github in the code. Then we are creating a RF24 object by passing the CSN and CE as the two arguments to the radio() function. Next, we are creating an array of the addresses that the modules will use to communicate amongst themselves. The address can literally be anything, however, it has to be the "same" on both the transmitter and the receiver modules. This is how the RF modules know who they have to communicate with. In the setup section we first initialize the radio object. Then, using the radio.openWritingPipe() function we set the address of the transmitter which we will use to send data to the receiver module. On the receiving end we use the radio.openReadingPipe() function with the same address to read the data from the data pipe. Next we set the power amplifier level. Since the modules in this demo are sitting next to each other, I am using the "Minimum Level".  Next, in the transmitter code we need to tell the module to stop listening using the radio.stopListening() function. This sets the module as a transmitter. On the receiver module we need to start listening using the radio.startListening() function. This sets the module as a receiver.  After that, in the loop() section of the transmitter, we send an array of characters using the radio.write() function and on the receiver end we read the array using the radio.read() function and display it on the serial monitor every second. Step 6: Code 2 - Lighting Up LEDs In the second example, I am going to light up two LEDs on the receiver-end based on whichever button is pressed on the transmitter-end. To achieve this I have added 2 LEDs on the receiver end and 2 Push Button switches on the transmitter end. When Button B1 is pressed the transmitter sends "B1" using the radio.write() function and when Button B2 is pressed the transmitter sends "B2" using the radio.write() function to the receiver module. The "switch statement" in the receiver code then lights up the corresponding LED based on whichever button was pressed on the transmitter end. Step 7: Code 3 - Same Node Acting As TX and RX [Bidirectional Communication) In my 3rd example I will show you guys how a single node can act as both transmitter and receiver. Just remember you "cannot" send and receive data at the same time. Using the "stopListening()" and "startListening()" functions we will toggle between sending and receiving of data on the data pipes. What's different here from the previous code is that we are creating two pipes or addresses for the bi-directional communication. const byte addresses[][10] = {"ADDRESS01", "ADDRESS02"}; In the setup section we need to define both pipes in a way that the sending address of the 1st module is the receiving address of the 2nd module and vice versa the receiving address of the 1st module needs to be the sending address of the 2nd module. Now in the loop section of the 1st Arduino, we use the radio.stopListening() function to turn the node into a transmitter and send the data using the radio.write() function.  On the receiver end we use the radio.startListening() function to read the incoming data. While there is incoming data (radio.available()) we read it using the radio.read() function. Then we add a bit of delay to the code. After that, we set the 1st Arduino to receiving mode using the radio.startListening() function and the 2nd Arduino to transmitting mode using the radio.stopListening() function. The data is then displayed on screen using the Serial Monitor. Step 8: Code 4 - Multiple Nodes [Mesh - Multiceiver Network] The nRF24L01+ has a feature called Multiceiver. It is an abbreviation for Multiple Transmitter Single Receiver. In my 4th example, I am going to show you guys how to connect multiple transmitters to a single receiver. In a Multiceiver network each RF channel is logically divided into 6 parallel data channels or the data pipes. Each data pipe has its own unique data pipe address. Only one data pipe can receive a packet at a time. So basically, the primary receiver in the middle is collecting data from 6 different transmitting nodes simultaneously. The primary receiver can stop listening any time and start acting like a transmitter.  This way you can create a mesh of network where each node can act as a repeater. There is a different library "RF24Mesh" you need to use to create this mesh network. Since I don't have that many modules handy at this moment, I am unable to show you guys the working bit of it. However, I will create a 2nd tutorial dedicated just to the mesh network, so stay tuned. Step 9: Using Sleep Mode There is a way to conserve battery by sending the module to sleep mode. Please read through the "pingpair_sleepy" example for more details, I have provided the link in the description below. Step 10: Factor Effecting the Transmission These modules work very well when the transmitter and receiver are close to each other. If the distance is too big you may lose the communication. The signals generated by these modules are very sensitive to power supply noises. Depending upon the amount of noise, the communication rate may vary. Setting the maximum output power can also improve the communication range.If there’s an obstacle in the line of sight you may see multiple dropouts.Reducing the data rate can significantly improve the performance. A speed of 250kbps is more than enough for most of our projects.Using an external antenna can also significantly improve the transmission rate.Another potential source of noise for RF circuits is WiFi. Especially when someone's network is set on the same channel. Since WiFi mostly uses the lower frequency channels, it is recommended to use the highest 25 channels for your nRF24L01+ modules. Step 11: Thanks https://youtu.be/LhBIRMMAGGE Thanks again for checking my post. I hope it helps you. If you want to support me subscribe to my YouTube Channel: https://www.youtube.com/user/tarantula3 Blog Posts: https://diyfactory007.blogspot.com/2022/06/NRF24L01-Tutorial.html Video references: https://youtu.be/LhBIRMMAGGE DataSheet https://drive.google.com/file/d/14Wi4DDhG1i5OAB7Sn-hKQhFbWdwkxufF/view?usp=sharing Schema Schema - Sending Text: https://drive.google.com/file/d/1bgZ_vP8lZvUyOU_WFzvVthM94oTR91TB/view?usp=sharing Schema - Lighting Up LEDs: https://drive.google.com/file/d/1bvgOq9IdSfqE5bjyXLU7suMYgC2rDJcn/view?usp=sharing Code Code 1 - Sending Text: https://drive.google.com/file/d/115yCQJQf_0v0qZ8TZHyMrcYMvTRNw5-S/view?usp=sharing Code 2 - Lighting Up LEDs: https://drive.google.com/file/d/14J_BLk9AgCjLmDTDMoOzYiDdQvrzddpx/view?usp=sharing Code 3 - Bidirectional Communication: https://drive.google.com/file/d/1pSlzdFBgvlCPzXbHxlj9DEb6WwEMrn4f/view?usp=sharing Libraries Used: TMRh20/RF24   : https://github.com/tmrh20/RF24/  TMRh20/RF24   : https://drive.google.com/file/d/1QI2ysVEmlbmg7iBVQATmC1_LcBTWnNBn/view?usp=sharing RF24Mesh    : https://nrf24.github.io/RF24Mesh/ pingpair_sleepy : https://maniacbug.github.io/RF24/pingpair_sleepy_8pde-example.html Support My Work: BTC: 1M1PdxVxSTPLoMK91XnvEPksVuAa4J4dDp LTC: MQFkVkWimYngMwp5SMuSbMP4ADStjysstm DOGE: DDe7Fws24zf7acZevoT8uERnmisiHwR5st ETH: 0x939aa4e13ecb4b46663c8017986abc0d204cde60 BAT: 0x939aa4e13ecb4b46663c8017986abc0d204cde60 LBC: bZ8ANEJFsd2MNFfpoxBhtFNPboh7PmD7M2 Source: NRF24L01 Tutorial - Arduino Wireless Communication ### LAIRD RELEASES NEW BLUETOOTH 5.1 MODULE Laird Connectivity released the new BL653 embedded Bluetooth 5.1 module series which enables industrial OEMs to implement longer range BLE applications in the harshest industrial operating environments. The BL653 is a complete multi-protocol embedded wireless offering with processing capability, Bluetooth 5.1 direction finding with angle of arrival (AoA) and angle of departure (AoD), and extended temperature range ideal for challenging RF environments and wireless industrial IoT applications. Powered by the Nordic nRF52833 silicon, the small form factor BL653 modules and development kits provide a BLE and Cortex-M4F CPU for any OEM’s product design. The BL653 provides programming options for the Nordic SDK or Zephyr RTOS, a AT command set, or Laird Connectivity’s own smartBASIC environment. The BL653 series utilizes the nRF52833 hardware features and capabilities including USB access, up to +8 dBm transmit power, and up to 5.5V supply range. In addition to the Bluetooth 5.1 features, the BL653 also has the potential to be Bluetooth 5.2 capable and has hardware support for NFC and 802.15.4 (Thread and Zigbee). According to the company, the BL653 enables industrial applications previously challenged in supporting wireless connectivity. With Bluetooth meshing capabilities, OEMs can create wireless mesh networks, which extend the reach of messages by relaying them from node to node in a large group of connected devices. Mesh networks are well suited for smart lighting and factory automation applications, which also benefit from the BL653’s operating temperature range (up to 105°C). Read more: LAIRD RELEASES NEW BLUETOOTH 5.1 MODULE ### Arduino Tutorial (Photocell) This tutorial shows how to use the Arduino Uno and a photo resistor (photocell) to control a LED light and a servo motor. Below you can find the links to the schematic and code, the photo resistor I used in the video and the servo motor I used in the video. If you have any questions, Arduino or other tech related questions, Please feel free to ask. I will do my best to see to it that you get the answer and that you understand that answer.   ### DIY Android Home Automation Box Here's a little show and tell of my Android controlled home automation box. It's a small extension box that's controlled by an Android smartphone. You can turn the individual outlets on by tapping a button from the app or use the speech recognition app, found from my previous tutorial. I've teamed up with my friends and built a custom app for out home automation prototype project. My former classmate/ fellow ible member "treyes4" built something similar. __________________ It's just a prototype so don't expect much from this version. I assure that next version would be explained more thoroughly. ________________ I'll be gone for a while: I'll be posting a video once I get back from the international trade and business competition hosted by FedEx (school related). I posted this guide early, since the home automation contest deadline is due today. There's a lot of unexplained areas in this guide, without the prior knowledge, this project would be difficult to execute. Just ask questions below, I'll answer them through my phone. Once I get back, I'll edit and update this guide. Sorry for the inconvenience. __________________ Step 1: Bill Of Materials If your having trouble in finding them, I'm sure RadioShack has all of them. If you want to buy online try searching on Amazon or DealExtreme. Thing that you'll need: - Android Phone & App - Arduino UNO (a clone works fine) - Low Power/ Switching Power Supply - Dot Matrix Solderless Breadboard - HC-05 Serial Bluetooth Module - 2N3904 NPN Transistor (5x) - 2.2k Ohm Resistor 1/4 (5x) - 6V Relays (5x) - Jumper Cables Step 2: Find A Good Enclosure I bought my enclosure from Alexan, a local electronics/ hobby store. This project is a prototype, the perfect enclosure would be an enclosure big enough to house an Arduino prototyping board and a small switching-PSU. Step 3: Glue The Sockets Together Align the outlets then use superglue to hold them temporarily. Hot glue can be used to strengthen the bond. After gluing, start to link a common rail. The linked rail work's like a common ground although this is AC ~ so it's not. Step 4: Align & Measure The Sockets Align the AC sockets together then acquire the dimensions of the array of sockets. Step 5: Transfer The Measurements Transfer your measurements by using a marker and ruler. Step 6: Grind And Drill The Enclosure Use your hacksaw or rotary tool to cut off the plastic that you've marked. Use a metal file to even out the edges. Step 7: Construct The Relay Circuit I constructed my DIY relay circuit. Obviously this is a complete prototype, I used a perfboard for mounting my components on. This is dangerous, exposed AC line can cause death through electrocution. Before attempting this project, be sure you're qualified to execute the task. My next version in the future would probably include solid state relays mounted on a custom PCB. Step 8: Wire The PSU The PSU will serve as your Relay and Arduino's power supply. I bought mine from ebay. Specs: 12v (1 Amp)   For more detail: DIY Android Home Automation Box ### Build a Car With Touch Sensitive Steering for Your Rat In 2019 Professor of Behavioral Neuroscience Kelly Lambert and her research colleagues published a journal article called "Enriched Environment Exposure Accelerates Rodent Driving Skills." This article explains "The research team built a tiny car for the rats out of a clear plastic food container on wheels, with an aluminum floor and three copper bars functioning as a steering wheel. A total of 17 rats were trained to drive in rectangular arenas. Rats who passed their driver’s education were rewarded with Froot Loops." Incredibly, the study actually found that rats enjoyed learning how to drive! Now I don't particularly like driving but who am I to deprive my pet rats of that experience? In my senior year of high school, I set out on a quest to recreate the rat car using only the limited information and photos in the scientific article, my nonexistent knowledge of electronics and coding, and a lot of help from my teacher. Now, this was over a year ago and I don't remember everything I did or how I did most of it. Hopefully the info I've compiled here is enough of a guideline for you to improve on my trial and error project and make your very own rat car. Supplies Arduino software (Download)Arduino Code (Download)1-gallon clear plastic Container (Amazon)Car Chassis Kit (Amazon) (or equivalent parts)Extra pivoting wheelHard plastic or board similar in size to the chassis baseAA batteries x 49 volt battery9 volt battery connectorElectrical wireSoldering ironHot knifeNeedlenose pliersBreadboard jumper wiresThin but sturdy copper wire Adafruit Motor Shield v2.3 (Link) (Amazon)Arduino Uno (Link)Capacitive Touch Sensor (Amazon) Step 1: Assemble Chassis If you're using the same kit I used follow the instructions to assemble to pieces. Add a fourth wheel to the back of the chassis. If you're making this from scratch (you're braver than me) make sure your wheels are attached to the gear motors, and your speed encoders are attached to the motors. Note: I used a basic kit from amazon for the chassis of my car. If I had the skills, making it from scratch would have probably been better as there were a few things about the kit that didn't work great for me; for instance, I would have preferred a base with 4 wheels as only having three wheels led to tipping when the rat got into the car later on which is why we have to supplement with a fourth small wheel. Step 2: Assemble Motor Shield and Arduino Uno If assembly is required for either board solder the pegs on now if you haven't already. Attach Arduino Uno to motor shield. You will use your 9-volt battery to power your boards, so use your battery connector and plug it in (you should see a green light on the board). Each gear motor should have a red and a black wire sticking out. Insert the red lead from one pair of wires into the outside receptor of M1 on your motor shield, and the black lead into the receptor immediately next to the first one. Do the same with the pair of wires from the other motor but into M2. No wires should be in the center (grnd) receptor. Once tightened, the order should be Red - Black - Empty - Black - Red. Refer to diagram. Step 3: Attach Switch to AA Batteries Insert a switch into the red wire between the AA battery pack and the board. In the video you can see an example of how the board should turn on and off (indicated by a green light) when you use the switch. Solder the wires to the switch pegs. This will allow you to disconnect power without popping the batteries out. Make the wires on either side of the switch long enough to put the switch in a convenient spot. Step 4: Attach Your Capacitive Touch Sensor Attach your boards to your capacitive touch sensor using breadboard jumper cables. Refer to the images and diagram for placement. Step 5: Upload Your Code Download the Arduino Software for your computer (it's free), then copy and paste my code into your Arduino window. Once you use a cable to upload this to your Uno you should be able to activate the wheels by touching certain pegs on the touch sensor. You can disconnect the cable once your code is uploaded. Attach breadboard jumper cables to the pegs shown in the image (color doesn't matter). You should now be able to activate the wheels by touching the ends of these new jumper cables. Step 6: Assemble Base of Car Once you've done any troubleshooting assemble all of your pieces. The base of the car should look approximately like the images (mine did not have a switch yet), or you can refer to the diagrams in this or previous steps. I used sticky velcro, double-sided tape, and zip ties to keep all of my components in place. Step 7: Prepare Plastic Container Now you will use a hot knife or whatever tool you prefer for cutting plastic to cut out three windows in your plastic container. The container will be the driver's seat and the car will steer in a direction corresponding to the window the rat touches (left, center, or right). Around the windows, you will cut holes or slits big enough for you to thread your wire through. I made two holes on each side of my window. Next, take your copper wire (if it's too thick, the electronics get kind of haunted but if it's too thin your rat will be able to bend it or chew it too easily) and thread it through the holes you've cut to make a grid. Mine was not cute, but it's alright as long as it's not dangerous to the rodent driving. Step 8: Connecting the Touch Sensor To connect the touch sensor to the windows you're going to want to solder the corresponding wire to the correct window. By this, I mean make sure your right window turns the car right, and your left turns it left, etc. To attach the jumper wires simply strip the end and solder the exposed wire to any point of the copper wire covering the window. Do this for all three windows. Step 9: The Platform You're going to need some sort of raised platform so that the container can sit above all of the electronics. I used a sheet of acrylic with a hole cut out for the battery switch but I think any sturdy foam core or similar material would do the trick. My container is attached to the platform with extra strong double-sided tape. To raise the platform I used long bolts attached to the base with nuts. This is not the most sturdy option but it works, especially since you need to be able to remove the top platform to mess with the electronics sometimes. Step 10: Testing and Training Your Drivers Positive reinforcement is key. Never harm or punish your animal for any reason! Allow your pet to acclimate to the car while it's off as the sound it makes can be frightening at first. If your pet seems uncomfortable in any way do not force them to interact with the car. Never shut your pet into the container unless they seem very comfortable (you know your animal best) and never leave them unattended (this is a homemade item and they could get stuck in the wires or chew on electronics). I trained my rats by holding treats in the direction I wanted them to go and luring them to grab the copper wire (this does not shock or hurt them don't worry!). They were always free to leave if they lost interest. After all, the study proved that rats enjoy driving so in the end we want this to be an enjoyable experience for them! Source: Build a Car With Touch Sensitive Steering for Your Rat ### CALTECH’S LOW-COST SWEAT SENSOR TRACKS STRESS THROUGH CORTISOL LEVELS From tracking diabetes to the detection of diseases like Cystic Fibrosis, a lot of ideas around monitoring/analyzing human sweat, as a non-invasive method of detecting or monitoring diseases has been around for a while. Leveraging on this idea, a team of researchers at Caltech, led by Wei Gao, assistant professor of medical engineering at Caltech, has created a wireless, non-invasive, sweat sensor that analyzes human sweat to determine stress levels. The sensor determines the stress level by accurately tracking, in near real-time, the levels of a natural compound called “cortisol” in sweat. Cortisol is believed to be the hormone that is released in the human body when stressed. According to Gao, the circadian pattern of cortisol in patients who for instance have PTSD or Depression is different from those in healthy individuals, as such, by identifying the cortisol patterns, the level of stress can be diagnosed and the speed at which the sensor does this means the 1+hours wait for blood tests and the associated stress-inducing blood sample draw can be avoided. Made from Graphene, a sheet-like form of carbon, the new sensor uses a detection approach similar to that of another sweat sensor developed by Gao which is used in detecting the level of uric acid in the bloodstream so as to monitor cardiovascular diseases and other conditions like diabetes, and kidney-related diseases. The new sensor features graphene combined with a plastic sheet that is etched with a laser to generate a 3D graphene structure, with tiny pores in which sweat can be analyzed. The pores, which create a large amount of surface area in the sensor, are coupled with antibodies that are immune to system molecules and sensitive to cortisol, aiding its detection. Read more: CALTECH’S LOW-COST SWEAT SENSOR TRACKS STRESS THROUGH CORTISOL LEVELS ### Arduino 12W Audio Amplifier Project is built around TDA2006 PENTAWATT package. TDA2006 provide high output current and has very low harmonic cross-over distortion. Further the device incorporate- rates an original (and patented) short circuit protection system comprising an arrangement for automatically limiting the dissipated power so as to keep the working point of the output transistors within their safe operating area. A conventional thermal shutdown system is also included. The TDA2006 is pin to pin equivalent to the TDA2030. Specifications: 18V 2amps Single Supply Power supply up to 18 VDC Output power 12 W @ 4 Ω, 8 W @ 8 Ω TDA2006 provides high output current Has very low harmonic and cross-over distortion Short circuit protection/Thermal shutdown system in IC Terminal pins for connecting audio signal input Header connector for connecting potentiometer (POT) for volume adjustment Screw terminal connector for easy power supply input and speaker connection Power-On LED indicator Heatsink for IC Four mounting holes of 3.2 mm each with nut and stud PCB dimensions 51 mm x 63 mm   For more detail: 12W Audio Amplifier ### Use foot switch to open Linux terminal using an Arduino So here is how i made my foot pedal used to start Linux terminal using an Arduino. It's made because I am board of pressing the terminal icon with my mouse. P.S. Sorry for my English. I am from Croatia. Tools needed: -Soldering iron and some solder -Wire clippers or any other cutting tool -Screwdriver Parts needed: -Arduino system -Foot switch (I found mine in my workshop) -Wire -10k pull-down resistor or you can use one integrated in arduino -Header connector Computer with Linux (I am using Debian stable (Sid) with XFCE), python with installed serial and OS module and, of course, the Arduino program. Step 1: The pedal switch OK, I found mine pedal in my workshop but you can order it on-line for pretty cheap. First you need to open it and find contacts for the switch. If you have NC(normally closed), NO(normally opened) and COM(common). Use the NO and COM. Strip the isolation form the wires off. Now connect the wires to the NO and COM connectors and close up the casing. Step 2: Connecting pedal to the Arduino First strip the insulation from the other end of the wire. And solder the stripped part of the wire on to the header connector. Snip the connector into half one connect to pin 8 and other to GND. If you are using external 10 k ohm resistor connect one pin to the pin 8 of the Arduino and second pin to the 5V pin of the Arduino. Major Components in Project-Arduino system -Foot switch -Wire   For more detail: Use foot switch to open Linux terminal using an Arduino ### Crius ROT8 MIDI Controller [ABLETON READY - Auto Mapping] Rev1.1 The last couple of years I started learning about electronics from nothing to be able to build my own MIDI controllers that would serve my needs , taste and be cheaper overall in comparison with the branded products.This is CRIUS ROT8 MIDI CONTROLLER that consists of 8 potentiometers and 3 buttons with which we can control the parameters of the VST-Plugin or the DAW that we play music ,8 LEDs whose brightness varies depending on the position of the corresponding potentiometer as well as an LCD screen that shows the percentage of 100 for each potentiometer so that we can know at a glance the value of the parameter we have assigned it. The Crius ROT8 comes with a Script which allows us to automatically match (Auto Mapping) each of the 8 penometers with the corresponding Volume of 8 Tracks and the 3 buttons with PLAY, STOP and REC respectively, selecting Crius Rot8 as Control Surface from Menu Options -> Preferences -> Midi -> Control Surface (details for installing Script can be found below). https://youtu.be/bH5THfGJ2gU If we do not use the Script we can do Mapping with anything we want in the DAW. Step 1: Supplies HARDWARE COMPONENTS : 1. Crius Rot8 PCB x1 2. Arduino Leonardo Pro Micro (clone) x1 3.Linear Rotary Potentiometers 10 KOhm Right Angle x8 4.Momentary Switches 7mm x3 5.1602A LCD Display x1 6.Multiplexer 4051 x1 7. PWM Led Controller / Servo Driver PCA9685 x1 8.LEDs 3mm x8 9.Resistors 220Ohm x8 10.Micro USB cable x1 11.Trimer Potentiometer 10K x1 13.Mini Breadboard x1 14.Jumper wires SOFTWARES USED : FUSION 360 (CAD) Fritzing (Schematic Designing) Arduino IDE Ultimaker CURA (3D-Printing Software) ABLETON Live (DAW) - OPTIONAL to use the auto mapping script Step 2: Step 1: Designing the PCB I used Fritzing to design the circuit for the potentiometers , leds , buttons and added some pins to connect a little shield for the LCD display separately so it can be mouted in an angle to the 3D printed case. Step 3: Assembling the PCB Start by soldering the resistors to the positions that write R and next to the number of each resistor. (Optionally you could solder first female headers to be able to replace components in the future) Next we will install the PCA9685 PWM Module , the Arduino Pro Micro and the 4051 Multiplexer. Step 4: Prepairing the Potentiometers , LEDs and Buttons to Be Mounted to the 3D Printed Case Now OPTIONALLY 1.Solder 3 female headers on each potentiometer 2. 2 female headers on each LED 3. 2 female headers on each button You can solder the jumper wires directly to the components if you want but I find it more helpful to add the female headers for easier assembly of the 3D printed case and maintenance of the device in the future. Step 5: LCD Display Shield So according to this circuit we need to make a Shield to connect the display to the Arduino which will look something like this Step 6: Upload the Code I used Arduino IDE to write and upload the code to the Arduino pro micro. I used the following Libraries for the code : 1.LiquidCrystal 2.Control Surface 3.Adafruit PWMServoDriver 4.Wire 5.Keyboard (A BIG THANKS to "Pieter P" the creator of the Control Surface library for his GREAT work!) You must manually download and install the Control Surface library to the Arduino IDE Step 7: Design and 3D Print the Case I used FUSION 360 to design the Case dor the MIDI Controller and Ultimaker Cura to slice it. The case consists of 2 parts : Body and Bottom base. For the printing settings I suggest to print it with supports. Step 8: Ableton Live Auto Mapping Script Optionally we can add a custom SCRIPT for Auto Mapping of potentiometers and buttons to ABLETON by copying this folder named CriusRot8 to the following folder on your computer: C: \ Users \ ”TO YOUR USER NAME” \ AppData \ Roaming \ Ableton \ Live 11.1.1 \ Preferences \ User Remote Scripts (Note that the file directory may be different for you depending on the version of the Ableton you have) ATTENTION : The AppData folder is hidden, so you have to click : View -> Show Hidden Files in the folder menu at the top of the window Now that you copied the script folder to the software directory on your drive , connect the MIDI controller to your PC , open Ableton Live and to select : CriusRot8 as Control Surface from Menu Options -> Preferences -> Midi -> Control Surface Step 9: Download Links for Softwares 1.Arduino IDE : https://www.arduino.cc/en/software 2.FUSION 360 : https://www.autodesk.com/products/fusion-360/personal 3.Fritzing : https://fritzing.org/download/ 4Ultimaker Cura : https://ultimaker.com/software/ultimaker-cura Step 10: END I hope you enjoyed the proccess and made one for your self! You can find everything you need for this project INCLUDING INSTRUCTIONS IN ENGLISH to my website : www.criusdigitalstudio.com You can find my projects and support me at the following social media and websites: 1.Crius Digital Studio Youtube Channel 2.Crius Digital Studio Thingiverse Profile 3.Crius Digital Studio Github Profile Source: Crius ROT8 MIDI Controller [ABLETON READY - Auto Mapping] Rev1.1 ### Musical Table using Arduino   The Musical Table is a toy table that allows kids to play musical phrases by moving toys around the surface. Each of seven switches can play different musical phrases in four bases, making 27 different musical phrases in total.  Some of the phrases are musically related and some of them are not. This toy table can help kids to develop musicality by playing phrases in logical order. The table also allows you to play two phrases at the same time. Depending on which phrases are played together, the sounds can be melodic or chaotic. Step 1: Product Details Supplies - Aluminum foil tape - Solid hookup wire - Ribbon wire - 2 Arduinos -12 10 K resistors - 2 speakers - 4 sheets of foam board (20 “x 30”) - 7 toy robots (or any other your favorite toy figure) - 2  8-ohms speakers - screws/ nuts (to secure the table on a stand. But optional.)   Tools   - Wire stripper - Utility knife - Soldering iron/solder - Solderless breadboard - Ruler Step 2: Wiring the Table Make four sets of three 1k pull down resistors that connects Arduino pins (pin 2 – pin 13) to ground. Use different colors of wires for each set to distinguish the groups easily. Base1connection:  Connects to digital pin 13, 12, and 11 to a breadboard. Add another wire next to pin 13 on the breadboard, and connect it to the power. Add pull down resistor (a resistor that connects to ground) between each pin and ground. Base2 connection: Leave some space on the board and connect digital pin 10, 9, and 8 to the circuit board and power in the same way as step 1 and step 2. Base3 connection: Take the second Arduino board and connect digital pin 7, 6, and 5 to the same breadboard. Add pull down resistor between  pins (digital pin 7, 6, and 5) and ground. Add another wire next to pin 7 that connects to power. Base 4 connection: Leave some space below base 3 connection on the board and connect digital pin 4, 3, and 2 to the circuit board and power in the same way as step 4, 5 and 6, except this time the power is connected to a wire next to pin 4. Step 3: Creating a melody (Arduino) An Arduino board makes only one tone at a time (I’m sure there’s away you can get around that, leave a comment if you know how). To have more than one notes played simultaneously, I am using two Arduino boards. Making a melody entails three variables: pitch, duration, and number of notes. The code is based on Arduino/Tutorial/Melody created by Tom Igoe. You can find the code here. A melody is called when if statement condition is met. The if statement searches for the combinations of three digital pins.   In pseudo code If (Pin 13 == HIGH && PIN 12==LOW && Pin 11== HIGH) {playtone 3; } In order to make 14 arrays of notes and durations, I created a class of combinations of notes and duration arrays. Major Components in Project – Aluminum foil tape – Solid hookup wire – Ribbon wire – 2 Arduinos -12 10 K resistors – 2 speakers   For more detail: Musical Table using Arduino ### ARDUINO WIRELESS HOME SECURITY SYSTEM In this project I will discuss how you can make a cheap wireless home security system.Though during starting of this project the main objective was only for security alarm but later I found this device can be used to solve several problems.These are the few practical problems which I have faced in the past : 1. Few years ago my friend's new bike was stolen from the parking premises of our apartment. 2. Mangoes are stolen from our garden. 3. One of my friend always worried for his new born baby when sleeping on a bed but no one is there to monitor him. By modifying few things in my device you can solve all these problems very easily. My device uses a PIR motion sensor to detect the human motion and this information is transmitted without wire by using a RF transmitter-receiver module to give some sort of alert.I choose a RF module for wire less communication because compared to the existing wireless systems like blue tooth,XBee or WiFi ,it is user friendly and very cheap.You can get it from eBay @ less than $ 2. You could use IR, but that has a limited range and can only work within a line of sight of the receiver.But using the cheap RF module we can communicate within the range of around 100m. At the end I will give you few tips to reduce the power consumption. I divide the entire project in to 3 major parts; 1.TRANSMITTER : To sense the human motion and transmit the data to receiver 2. RECEIVER : Receive the data from transmitter and activate alarm system and camera or sending a sms etc 3.SOFTWARE : That operates the entire hardware used in this project. Step 1: PARTS AND TOOLS REQUIRED 1. ARDUINO UNO/ARDUINO MINI/ARDUINO NANO or similar board (Tx) 2. ARDUINO UNO /ARDUINO MINI/ARDUINO NANO or similar board (Rx) 3. RF Transmitter and Receiver Module (433 MHZ) 4. PIR sensor 4. 9V battery ( 2 nos) and connectors 5. Buzzer 6. LED 7. Resistor (220 ohm) 8. Bread Board 9. Jumper Wires 10. perforated Board 11. Header connectors 12.Switches 13. Project Enclosure 14. Black Paper 15. Scotch Mounting Pad TOOLS REQUIRED : 1.Hobby Knife 2.Glue Gun 3.Soldering Iron 4.Wire cutter /Stripper 5.Tin Snips You can buy the items very cheaply from eBay .These are links from where I have bought my parts. Arduino Nano from eBay Arduino Pro Mini from eBay RF Transmitter and Receiver Module from eBay PIR Sensor from eBay Step 2: TRANSMITTER The transmitter is consists of 1. PIR sensor to detect the human motion 2.Arduino to process the data from PIR sensor 3. RF transmitter to transmit the data to the receiver Passive infrared sensors work by measuring incoming infrared from human or animal. They do not emit energy themselves, which is why they are called "passive". Humans and animals both release infrared energy. Passive infrared sensors(sometimes called pyro electric detectors) detect this energy and give a signal to the ARDUINO. For working of the PIR sensor you can click here For transmitter I used a Arduino Nano board to reduced the cost. Of course your Arduino Uno also works fine.You can also use a Arduino mini Pro which cheaper than nano.As now I do not have a FTDI module to program the mini board I choose the nano board. Before going to make the entire transmitter module check the PIR sensor and have a fun. Connect the PIR sensor PIR Pin Arduino Pin vcc -----> 5v GND . ......> GND Out ........> D2 You can also refer the fritzing schematic. Before uploading the code set the correct board and serial port in the Arduino IDE. Then upload the sketch given bellow. In the software part I attached the pics for setting the board and serial port .Just check it. When there is motion in front of the sensor the LED will glow.You can see the message also by opening your serial monitor. test code.txt550 bytes Step 3: Connect The RF Transmitter In the previous step you confirmed that your PIR sensor is working fine.Now lets add the RF transmitter to the board. The RF transmitter has 3 pins( VCC, GND, and Data). Connect the VCC pin to the 5V pin of the Arduino board that you are using (In my case it is Nano). Connect the GND to the GND of the Arduino board. Connect the data pin to the pin number 12 of the Arduino board. Step 4: RECEIVER The Receiver is consists of 1. RF Receiver module to receive data from transmitter 2. Arduino to process the data from RF Tx and give an out put (alarm,sms,email etc) 3. Out Put : buzzer Connect the VCC pin to the 5V pin of the Arduino board that you are using (In my case it is Uno). Connect the GND to the GND of the Arduino board. Connect the data pin to the pin number 12 of the Arduino board. Refer the above schematics for connection Step 5: SOFTWARE The software is wholly depends on a virtual wire library.So first download it. Click here to download. After downloading extract the folder and then place it in the Arduino library folder. Software for Transmitter: Before going to upload the sketch to the transmitter board, you have to set few things in the IDE 1.Board -> Arduino Nano (what board you have used) 2.Serial Port -> COM XX (check the com port in which your device is connected ) See the above picture for clear understanding. After setting the above things,down the code wireless_tx and upload it. Software for Receiver : Similar to the above set the following for receiver board 1.Board -> Arduino UNO (what board you have used) 2.Serial Port -> COM XX (check the com port in which your device is connected) See the above picture for clear understanding. After setting the above things,down the code wireless_rx and upload it. Note : The tone generation code is taken from MAKE PROJECTS wireless_tx_code.txt1 KB Wireless_rx_code.txt1 KB   Step 6: BREAD BOARD TEST After uploading the code to both transmitter and receiver board ,now it is time to check whether every thing works correctly or not. Remove the Usb cable from both the board Provide external power (battery ) to the both the board.( positive terminal goes to Vin ) Then shake your hand in front of the PIR sensor. If the buzzer in the receiver board starts to make noise then every thing works fine. Now it is time to make a portable device for practical use.In the next two steps I will show you how to make a beautiful gadget for your home security.   For more detail: ARDUINO WIRELESS HOME SECURITY SYSTEM ### SAELIG INTRODUCES ABEEWAY MULTIPLE TECHNOLOGY LOCATION TRACKING SENSORS Saelig Company, Inc. announces the availability of Abeeway Asset Trackers, which uniquely use multiple location technologies (GPS, Low-power GPS, Wi-Fi, and BLE) to allow accuracy, speed, and indoor/outdoor use. Proprietary Abeeway technology sends GPS calculations to the cloud, making location tracking faster and extremely energy-efficient. To optimize battery life, Abeeway devices use the most cost-effective connectivity and integrated sensors to enable smart multi-mode behavior, adaptable to individualized situations: Motion Tracking: real-time position when motion is detectedPermanent tracking: regular interval real-time positioningStart/End: positioning at motion start and end eventsFix on demand: get position only when neededActivity tracking: monitor activity rate with embedded sensors Two Abeeway tracker types are currently available: the Micro Tracker and the Industrial Tracker.  The Micro Tracker is a very low power location tracker which combines GPS, WiFi, LoRa, and BLE technologies to offer outdoor positioning (GPS) with 10m accuracy as well as indoor positioning (WiFi sniffing and triangulation) with 30m accuracy and automatic wireless detection. The Micro Tracker incorporates proprietary low power GPS technology (multi-patented Abeeway AGPS) to offer extended use in a tiny small device, with up to 3 year battery life before recharging. Recheargable via microUSB for intense daily use, this product is used worldwide by telecom companies, insurance companies, medical equipment users, food suppliers, as well as for personnel and small equipment tracking. The Micro Tracker can locate its position in 10sec versus 1min for conventional GPS.  It offers excellent sensitivity even in bad conditions, and up to 10 times the powered life of ordinary GPS products. The Industrial Tracker is a low power industrial tracker with the same performance as the Micro Tracker, but with an active “fit-and-forget” battery life of up to 10 years.  The use of three location technologies (GPS, assisted GPS, and Wi-Fi) guarantees seamless outdoor/indoor geolocation.  This makes it useful for transport, vehicles, trucks, public works, construction, logistics, supply chain management, security, and general equipment asset management.  The GPS mode is accurate up to 5 meters, with a location time of 15sec for a hot start and 1min for a cold start. The assisted GPS mode is accurate up to 10m with a location time of 10sec. The Wi-Fi mode is accurate up to 30m with a location time of 5sec. Additional parameters that can be logged include: temperature and pressure monitoring, and movement via the integrated 3-axis accelerometer. Read more: SAELIG INTRODUCES ABEEWAY MULTIPLE TECHNOLOGY LOCATION TRACKING SENSORS ### GaN: 100mm production amd 75W transistor RF Micro Devices has released a 75W GaN RF unmatched power transistor, claimed to deliver superior performance against competing GaAs and Si transistors. Dubbed RF3932, it follows the recent release of the 140W RF3934, and operates from dc to 3GHz with peak efficiency over 65%. “It incorporates simple matching networks external to the package, providing wideband gain and power performance advantages in a single amplifier,” claimed the firm. The device is built on North Carolina-based RFMD’s 48V GaN. “The unique combination of features enables the development of compact and efficient high power amplifiers for a broad range of applications, including private mobile radio and 3G/4G wireless infrastructure, as well as ISM [industrial scientific and medical], military and civilian radar and CATV transmission networks,” claimed RFMD. On the other side of the US in Oregon, TriQuint also had GaN news as it announced that it has won a $17.5m manufacturing development contract from the US Air Force Research Laboratory. The overall goal of the contract is to increase yield, lower costs and improve time-to-market cycles for GaN integrated circuits on 100mm wafers. Expected to conclude in 2013, TriQuint is the prime contractor and all the work is to be performed at its Richardson, Texas facility. TriQuint began offering commercial 0.25?m GaN-on-SiC foundry services in 2008. For more detail: GaN: 100mm production amd 75W transistor ### Sony PS-X75 Record Player Fixed With Embrio and Arduino Mega2560 Fixed a SONY PS-X75 Record Player (1980's) with a blown MB8841-209L microchip. Fixed it with a Arduino Mega2560 Board and the fabulous Embrio Software. https://youtu.be/31ILr8oTtt4 A long, long time ago in 1980’s Sony produced one of the best automatic record players the Sony PS-X75.  The only problem was the main Microprocessor (IC) was prone to breaking. Our Sony had a broken IC and no one manufactures these anymore and you can't buy secondhand chips either.  The Player was totally dead with only the 33 record speed light showing - no buttons or functionality - DEAD - we took it to a local repairer and he said it was the chip that's was gone and would only work with a direct replacement chip - same make and model We searched the galaxy for a replacement and couldn't find one.  I reversed engineered the chip using Sony PS-X75 Service Manual and programmed a £30 Arduino Mega board to replace all the functions of the main IC chip. The linked video below for some could be a bit boring but the heart surgery to replace the main chip with an Arduino Mega board WORKED ! All functions thanks to Embrio are now FULLY Restored using an Arduino Mega Board. All the following works: Auto Play Record Size Detection Auto drop Auto Stop Button start / stop Button up/down Buttons forward and backwards Repeat  Speed selection  No record detection  Home arm detection Stylus force and bias  All lights and buttons  Auto arm up and home on startup, auto play and stop.  New External USB fitted to upload config changed to Arduino.  New light sensor board made for record size detection as main board one was randomly working.  New LED light fitted.  Added a 9v transformer to power the Arduino when the Sony is turned on.  Full Youtube video can be followed in the Youtube video Enjoy :) Disclaimer - this does need some technical knowledge and know how to attempt - and does remove the heart of the Sony Record player - the IC MB8841-209l chip - Removing this chip does make the Player totally dead unless you replace with a new chip of same make and model or try the following - However, the following has been done on my own player and if you attempt this on yours, you do so at your own risk as this post is for guidance only on what I did to fix my own player. Supplies Vinyl Engine - much support and help: Embrio Software Arduino Mega Board: Arduino Bread/ProtoType Board: Cable used for Loom: USB External Extension Cable: 9v Angle power cable: 9v Power Block: All Pin configuration for Chip to Arduino: Link to Sony PS-X75 Service Manual Link to all the hard work and software code/configuration using Embrio - You use this pack at your own risk - I do not support or update this code - this is for your own use/research and will require an Embrio Licence to upload to the Arduino Mega Board: Please note I'm using an external light detection Agent/Hardware to ascertain record size - the code would need tweaking / changing to pickup the digital default pins 30 / 31 Sony Light sensor board, but if you have got this far - this shouldn't be a problem for you :) Step 1: Remove Old Sony Microprocessor Remove old IC Chip first with some desoldering and cleanup contacts. Step 2: Install New Arduino Mega2560 Install Arduino Mega2560 Board and prototype board Step 3: Wire the Loom From Sony IC Socket to Arduino. Wire The Loom To From IC Socket To Arduino following the pin to pin guide in the image. Added an earth from the Arduino GRND pin to the Sony Chassis - you can see this in the top left of the pic, fixing point just under Sony Foot. Step 4: Light Sensor Board I did have to replace the onboard Light Sensor board which detects the Size of record being played - As I'm using an external light detection i've added Embrio Agent/Hardware to ascertain record size - the code would need tweaking / changing to pickup the digital default pins 30 / 31 From Sony Light sensor board, but if you have got this far - this shouldn't be a problem for you :) to tweak the code back to Pin 30/31. The homemade light sensor board is connected to analog pins on the Arduino - Pin 10 for 30cm and Pin 11 for 17cm If you are using the Sony Standard light detection and it still all works - these get connected to Pin 30/31 on the Arduino and you'd need to change the Embrio software Agent : Size-17cm-IC-31 - change the analog flow / input to a digital input configured to pin 31 Agent : Size-30cm-IC-30 - change the analog flow / input to a digital input configured to pin 30 Both will be standard 1 = high and 0 = low triggers. Step 5: Install External USB Port Install an external USB extension port for uploading software and configuration to the Arduino from outside the record player. Step 6: Install 9v Block - Step-down Transformer Glue in a 9v step down transformer powered from the Sony switch and connect an external DC Arduino cable to the block and plug into the Arduino. Step 7: All Main Functions Reversed Engineered From Sony Service Manual All the Original Sony MD8841-209l chip functions have been clearly documented in the service manual which has been reversed engineered into Arduino functions using the Embrio software - the next section describes how to get the Arduino uploaded with the software functions. Step 8: Upload the Embrio Software to the Arduino https://youtu.be/Vc_KSoDaGlg All software can be obtained from the links above or from the Youtube Video - you will need a license for the Embrio software. Open the Embrio software Open up the Sony Project in Embrio Connect the Computer to the USB of the Sony/Arduino Link to all the hard work and software code/configuration using Embrio - You use this pack at your own risk - I do not support or update this code - this is for your own use/research and will require an Embrio Licence to upload to the Arduino Mega Board: Please note I'm using an external light detection Agent/Hardware to ascertain record size - the code would need tweaking / changing to pickup the digital default pins 30 / 31 Sony Light sensor board, but if you have got this far - this shouldn't be a problem for you :) https://www.dropbox.com/s/yvrjkvebnwty4tc/New-SONY-PSX75-Turntable.zip?dl=0 Upload the software to Arduino Step 9: Screw Base Back Onto the Record Player Screw Base Back Onto The Record Player - I did have to trim a bit of plastic off the top right foot entry hole as this was just catching on the Arduino - used a Drimmel to grind about 5mm off the plastic inner cone. Step 10: Try Playing a Record The final step will be to try and play a record - The Stop button will always stop the record from playing and lifts the ARM and returns it back to the home rest. I did have to change some settings to adjust the software we know the start positions of each size of record and end points - these are all within the config of Embrio and can be tweaked and uploaded to suit. Enjoy - it worked for us :) Step 11: This sounds absolutely amazing with the Goldring 1042 cartridge fitted - its OMG working/sounding so beautiful. Source: Sony PS-X75 Record Player Fixed With Embrio and Arduino Mega2560 ### The Batteryless UPS for the Raspberry Pi The Juice4Halt module is a supercapacitor based energy storage. It contains two independent DC/DC converters. The first one is a bidirectional step-up/step-down converter working as the interface between the stable 5V supply rail and the supercapacitor. During charging the converter works in step-down mode and transports energy from the external power supply to the supercapacitor. In case of a power failure the load device (Raspberry Pi or another SBC) is supplied from the supercapacitor via DC/DC converter working in step-up mode. The second DC/DC converter is a Front-end step-down converter. The only function is converting a high input voltage down to 5.1V for the 5V rail. It is necessary to use the Front-end converter in case of an external power supply. Modes of operation Charge mode charging the supercapacitor using the step-down DC/DC converter when external power supply voltage is available at the input the load device at the output (Raspberry Pi or another SBC) stays disconnected from 5V power rail until supercapacitor charging is completed Normal operation the Raspberry Pi (or another SBC) is powered from the external power supply the supercapacitor is directly connected to the 5V output to ensure reliable operation without short-term power failures or brown-outs Brownout (or short-term power failure) starts when voltage falls below 4.9V external power supply will be disconnected Raspberry Pi or another SBC is powered from supercapacitor ends when voltage falls below 4.75V, at this point the external power supply voltage is being checked: when external power supply voltage is present reconnect to power supply and charge the supercapacitor back otherwise enter the Shutdown mode   For more detail: The Batteryless UPS for the Raspberry Pi ### Assembling the ZIFduino USB 1.2 The ZIFduino, for all intents and purposes, is an Arduino with a ZIF socket. It's geared toward those that want to do prototyping on the platform, but then move the ATMega chip to a stand-alone environment. The pin layouts are exactly the same, so it should be compatible with most shields designed for the Arduino. The PDF of this instructable can be downloaded at bittyware.com/instructions/Assembling-the-ZIFduino-1.2.pdf Step 1: Get the kit The kit comes in two flavors. The board itself, and the full kit. There is also an option to have the FT232RL chip pre-soldered if you're not comfortable working with SMT parts. The kit can be purchased at http://www.bittyware.com. Parts included: (1) ZIFduino board (1) FT232RL chip (2) 47 uF radial capacitors (9) 0.1 uF ceramic capacitors (2) 22 pF ceramic capacitors (6) 1 K ohm resistors (1) 10 K ohm resistors (4) 3mm T1 LEDs (1) 16 MHz crystal (1) 1N4004 diode (1) Resettable fuse (1) 7805 voltage regulator (1) Pushbutton (1) USB B connector (1) Power jack (1) 3 pin single row male header (1) Shorting block (1) 6 pin dual row male header (2) 6 pin female headers (2) 8 pin female headers (1) 28 pin ZIF socket (1) ATMEGA168-20PU chip The crystal and the 22 pF capacitors are in their own separate bag to prevent mixing up the capacitors. Step 2: FT232RL If you chose to have it pre-mounted, you can skip this step and the next. Solder the FT232RL in place. There are a number of great tutorials for soldering surface mount parts all over the web. SparkFun has some good ones on their tutorials page, starting about half way down. Step 3: Test your work I always like to test the chip before moving too much further. At this point it'll be much easier to correct any problems. Solder the C4 capacitor, followed by the F1 fuse, then the 3 pin male header. Slide the shorting block onto the header, shorting the center pin with the one labeled USB. Now solder the USB B jack in place. Solder all six pins, making sure you have a good pool of solder on the two larger pins. These are to ensure a strong mechanical connection, so be sure to fill the holes completely. Take the board to your computer and go to http://www.ftdichip.com/Drivers/VCP.htm. There you will find the drivers needed for your platform. Extract them to the location of your choice and make a note of where they are. If you already have the drivers installed, you can skip this part. I'm assuming a Windows environment here, but there are installation guides for others at the FTDI site. Plug the board into your computer, and you should be greeted with the New Hardware Wizard. Point the wizard to the driver location noted above. After they're installed, you will see a new COM port in Device manager. You've just successfully installed the FT232RL. If you don't get the New Hardware Wizard and you don't see a new COM port in Device Manager, you'll need to check your work. Take a look at all the pins under magnification and make sure they're all soldered in place and you don't have any lifted pins. Also check for solder bridges. NOTE: There are two sets of pins that are intentionally bridged. Don't try to remove those or you'll have problems. Major Components in Project(1) ZIFduino board (1) FT232RL chip (2) 47 uF radial capacitors (9) 0.1 uF ceramic capacitors (1) ATMEGA168-20PU chip   For more detail: Assembling the ZIFduino USB 1.2 ### COMPACT FINGERPRINT BIOMETRIC MODULE Fingerprint Cards AB’s low-power, all-in-one module features market-leading biometric performance Fingerprints’ FPC BM-LITE is a standalone, compact biometric fingerprint solution with a robust FPC fingerprint sensor, biometric process, and on-board template storage. It comes preloaded with software and ready to use at delivery. Integrating the FPC BM-LITE into a product as a biometric sub-system can greatly reduce time-to-market with an easy-to-integrate serial command interface and optional host CPU. A complete biometric fingerprint solution, FPC BM-LITE is ready to use out of the box at delivery. Simple serial commands are used to enroll and verify. The FPC BM-Lite brings together superior biometric performance and a high standard of quality components to offer an all-round embedded solution for increased security and enhanced user convenience. The FPC BM-Lite sensor has a protective coating that protects against ESD well above ±15 kV as well as against scratches and impacts from daily wear and tear. The FPC BM-Lite sensor is available as an IP class (waterproof) configuration making it suitable for demanding industrial conditions and all-weather applications. Verification mode: one-to-one / one-to-manyFalse rejection rate (FRR*) 1.4% at false acceptance rate (FAR**) 1/500,000Number of users (template storage): 50Verification time: 0.4 secondsInterface: SPI/UARTDimensions (full module): 15 mm x 15 mm x 2.8 mmPower consumption active mode (capture): 12 mAPower consumption idle mode (sleep): 13 μAIPx7 classedUnique end-user features for excellent everyday use Read more: COMPACT FINGERPRINT BIOMETRIC MODULE ### Space Invaders Mini Arcade With CRT I have built this Mini Cardboard Arcade using a B&W small CRT (Cathodic Ray Tube) recovered from an old video intercom. It is based on an Arduino Nano emulating the classical Space Invaders. The switch on the rear turns ON the Arduino and starts the game. Alternatively, one can use the two Audio/Video sockets on the back to connect another source. https://youtu.be/18uQas8b6kk The reason to use this old, miniaturized CRT, is to give a proper vintage look to this small replica of one of the very first arcade games. Quoting Wikipedia “Space Invaders is considered one of the most influential video games of all time”. I plan to test and add more games in the future. Supplies The majority of the components I used for this project, come from recovered material. The only new parts are an Arduino Nano and few resistors. For this reason, if you want to reproduce it, you may not be able to get the exact components of the following list. Just take it as a reference. a small CRT recovered from an old video intercom, model Umet Domus Scout 1204/D001Dan Arduino Nanoresistors: 1 x 1 kOhm, 1 x 470 Ohm, 1 x 100 Ohma piezo speaker2 x A/V socket (RCA)5 x game buttonsPS (for my CRT I need 19V DC, coming from an old laptop PS) with its socket.A little switch.connecting wireshard cardboard or Masonite (about 4 mm thick) to build the arcade cabinetcutting tools, hot glue, tin and iron soldering Step 1: Find the Video Input of the CRT The first step, once you get your own CRT, is to find the value of the supply (in my case it is 19V DC) as well as the video input. This is not too difficult for a video intercom, since the video is normally fed through a coaxial cable, as shown in these pictures. You can test the CRT with an external video signal. Step 2: Build the Cabinet for the CRT The correct size of the mini arcade cabinet depends on the CRT size and orientation. In my case the CRT in the intercom has been mount vertically, and it has a 45 degree mirror to see the image from the front. This choice is perfect for this project, since many arcades where built in this way to avoid having a too deep cabinet. You can find the quotes (in cm) I used in my project in the hand drawing reported in this chapter. I cut the cardboard with a cutter and fix all the parts with hot glue. You can see the result in the pictures here. The hot glue is perfect since it fixes the cardboard in few seconds and the final result is sturdy and robust. I made an internal structure with hot glue and small piece of cardboard, and fixed the electronic board and CRT with screws, exploiting the pre-existing holes that where used to fix them in the original plastic case. In this way all the parts can be easily disassembled for repairs and modification. Step 3: Arduino TVout and Speaker To reproduce Space Invaders you need first to download the code, available at the bottom of this page, and the bitmaps.h file. Copy both of them in the folder SpaceInvaders. Then you need to download the TVout libraries, that has to be saved in the standard Arduino libraries folder. You can immediatly upload the game on the Arduino Nano. If you don't get any other error message, you can start to build your hardware. In the link above you can see how to connect the Video Output. In brief: Arduino D9 pin (sync) to 1 kOhm tp RCA videoArduino D7 pin (video) to 470 Ohm to RCA videoArduino GND to RCA GND For the sound, connect Arduino D11 pin to a piezo speaker directly, or to a normal speaker (low impedance) via 100 Ohm resistor. The other speaker pin to must be connected to GND. Now you can connect the RCA video signal to the CRT. If you can see the image, you can start the next step. Step 4: Connecting the Five Buttons For this and other games, you need five buttons: Left, Right, Up, Down and Fire. The connections are the following: Left D3Right D2Up D4Down D5Fire D10 and all the other pins to GND. You can place the buttons as shown in the picture on this step. Fire, of course is the button alone in the right side. Step 5: Putting Things Together At this point you can put all the things together. Fix the CRT, the Arduino and the speaker in the cabinet. For the Arduino PS, you can fed the 19 V, through a switch, directly in the VIN port (pin 30). But in my CRT there is also a stabilized 12V (done with a 7812 Voltage Regulator) ad I preferred to use this supply. I also recommend to connect audio and video to the RCU plugs, and then to the CRT video input and speaker, as shown in this picture. In this way, when the switch is ON the Arduino starts and send the signal to the CRT. But when the switch is OFF, you can send to the Arcade cabinet an external video signal, and you can use it to play other games. Furthermore, you can fix the Arduino in the box in a way that allows to access it via its female mini-USB, so that you can upload other games in the future. Step 6: Conclusion I know the question is: ”why struggling to use a CRT, when you can find more modern and better video screens?” Well, because I think the retro-ism and vintage look of this game is just cool! Nowadays CRTs, that where ubiquitous just a couple of decades ago, are almost disappeared, and I want a reason to preserve a miniaturized CRT from the 80s-90s (which, in itself, is a bit of an engineering marvel). There are many improvement you could do: ·       Use masonite instead of cardboard for the cabinet ·       Add more games (this is my plan for the future). ·       Paint the cabinet. ·       Using a mini-joystick instead of the four buttons for the directions.  If you decide to build your own version, please do not hesitate to show some picture in the section “I Made It!” Step 7: Acknowledgments My acknowledgments go to Nootropic Design for Space Invader code for Arduino. You can find many other games at the same link. I plan to test some others in the future as well. Source: ### Robot Arm Set using Arduino I made use of Smart Tank Chassis in the past 4 projects and I wanna do something very different. After searching in google and consider different stuffs for a couple of days, I found the Robot Arm Set. It looks awesome! It provides servos, servo wheels and extension wires so that I can save more time to focus on my project. I can connect it to Arduino and make use of different stuffs together for many combinations! Step 1: Parts Robot Arm Set (This set includes six servos, servo wheels and extension wires) 16-Channel Servo Controller 7.4V Li-Po Battery Charger JST female connector Standoff Arduino MEGA 2560 R3 AMS1117 Linear Regulator Breadboard Set Switch * I just make use of the battery and charger in my remote-controlled car for this project. : ) Step 2: Assembly I guessed it should be very complicated and difficult to finish, but in fact it is not. It is easy to assemble. Just following a few steps in the manual and that's it! Step 3: Wiring I wanna do a test with my PC first before connecting to Arduino. The brown color of the wire in servos represents GND, red is + and orange is for signal. To make it simple I connect the servos from the base to the claw to the servo controller with a sequence from S1 to S6 respectively. Use extension wires if the servo cable is not long enough. Make sure all the cables are in correct direction. I've also bundled the wires with plastic cable ties. The servo controller is fixed at the side of the base with standoff. The servos are powered with VS and GND of the blue terminal block on the servo controller, so red wire of 7.4 Li-Po battery is connected to VS and black wire to GND. For the chip we can either power it up with the pins 5V and GND next to S1, or via USB, or VSS and GND of the blue terminal block. Here I choose USB first. The left green LED is the chip power indicator and the right green LED is the servo power indicator. It is ready if both green LEDs are on. The left red LED indicates data transfer. Step 4: Test with PC Next, I install both the driver and the software of this controller to my PC, and connect the controller to PC via USB. Open Device Manager in Control Panel and you can check the COM port of the controller. Then open the software, choose the COM port and click "Connect". Now I can test the servos by sliding the bars slowly. As the servos react to the bar I slided instantly, if sliding the bars quickly, the servos will move quickly and you may get hurt. Also, don't slide the bar further if the servo gets stuck already. It is dangerous and the servo may burn out. During the test I've jotted down the maximum and minimum PWM, and the movement of the servos as follow: Servo Lowest PWM Movement Highest PWM Movement S1 500 right 2500 left S2 500 up 2500 down S3 500 down 2500 up S4 500 down 2500 up S5 500 anticlockwise 2500 clockwise S6 900 open claw 1700 close claw The PWM of servos are ranged from 500 to 2500, or from 0 degree to 180 degree, at which 1500 represents 90 degree. However, as the degree needed to control the claw is far less than others, to avoid the servo gets stuck, the range of PWM is narrower compare with other servos, from 900 to 1700. The data is for reference only and there may be difference. You are highly recommended doing a test and create this table yourselves. Step 5: Further testing Another function of this software is that we can add a series of movements among servos and run it in cycle. After choosing one set of movement, select "Add", and a set of code appears below "Order", for example: #1P1389#2P2P1522#3P922#4P1544#5P1500#6P1567T1000 We can interpret it as follow: #PP ...........T