The ForceTronics blog provides tutorials on creating fun and unique electronic projects. The goal of each project will be to create a foundation or jumping off point for amateur, hobbyist, and professional engineers to build on and innovate. Please use the comments section for questions and go to forcetronics.com for information on forcetronics consulting services.
In this video we look at how to make a simple DC electronic load with Arduino and some simple components.
//****************Arduino code from video************ /* * This code was used for a tutorial on how to build a simple eload with Arduino * The Tutorial can be found on the ForceTronics YouTube Channel * This code is public domain and free for anybody to use at their own risk */ void setup() { pinMode(A0, OUTPUT); //A0 DAC pin to output analogWriteResolution(10); //default DAC resolution is 8 bit, swith it to 10 bit (max) } void loop() { //create pulsed current profile analogWrite(A0, 16); //Set DAC to approximately 10mV --> current 10mV / 5ohm = 2 mA delay(500); analogWrite(A0,310); //Set DAC to 1V --> current 1V / 5ohm = 200 mA delay(50);
When you are prototyping, repairing, or hacking PCB boards you will most definitely find yourself in situations where you need to solder surface mount components / devices (SMD) by hand. In this video we look at two easy methods to solder SMD by hand with a basic solder station.
In this tutorial we look at how easy it is to integrate the popular Neo-7m GNSS / GPS module into your design without having to be an RF / microwave expert. In part 2 we build up our board and take it for a test drive.
In this tutorial we look at how easy it is to integrate the popular Neo-7m GNSS / GPS module into your design without having to be an RF / microwave expert.
In this video we look at how to use Arduino with the ThingSpeak IoT, cloud, and analytics platform. In the video we look at two use cases of ThingSpeak. For the first use case we log wireless sensor data to the cloud and perform post processing on the data using MATLAB. In the second use case we monitor a room with a wireless motion detector setup and have ThingSpeak send out a Tweet if any movement is detected in the room.
//*****************Arduino code from video********************************** /* This sketch was created for a video tutorial on the ForceTronics YouTube that shows how to use Arduino with the ThingSpeak cloud This code is public domain and free for anybody to use or modify at their own risk Note this code was leveraged from: Arduino --> ThingSpeak Channel via MKR1000 Wi-Fi Created: May 7, 2016 by Hans Scharler (http://www.nothans.com) */ #include <SPI.h> #include <WiFi101.h> //This sketch should work with any Arduino or shield that can use the WiFi101 library
char ssid[] = "YourNetwork"; // your network SSID (name) char pass[] = "YourPassword"; // your network password int status = WL_IDLE_STATUS; // Initialize the Wifi clients WiFiClient tClient; //this one is used to post temperature data WiFiClient mClient; //this one is used to post motion detection data // ThingSpeak Settings char server[] = "api.thingspeak.com"; String writeAPIKey = "YourWriteKey"; //Timing variables for tracking temperature posting unsigned long tempLastConnectionTime = 0; // track the last connection time const unsigned long tempPostingInterval = 295000L; // post temp ADC value just under every 5 min //Timing and logic variables for tracking temperature posting unsigned long mLastConnectionTime = 0; // track the last connection time const unsigned long mPostingInterval = 30000L; //checks to see if motion was detected every 30 sec bool mReset = true; //tracks if motion detection has been reset void setup() { pinMode(2,INPUT); //digital pin used to read output of motion detector pinMode(6,OUTPUT); //LED pin used to know when data is sent to cloud // attempt to connect to Wifi network while ( status != WL_CONNECTED) { // Connect to WPA/WPA2 Wi-Fi network status = WiFi.begin(ssid, pass); // wait 10 seconds for connection delay(10000); } } void loop() { //timer to know when it is time to post temp data to cloud if (millis() - tempLastConnectionTime > tempPostingInterval) { digitalWrite(6,HIGH); //Use the LED to see if Arduino gets heldup posting data to the cloud tempHttpRequest(); //function that formats data strings and posts data to ThingSpeak cloud digitalWrite(6,LOW); } if (millis() - mLastConnectionTime > mPostingInterval) { digitalWrite(6,HIGH); //Use the LED to see if Arduino gets heldup posting data to the cloud if(digitalRead(2) && mReset) { //if motion was detected post it mReset = false; //motion detected so reset variable mHttpRequest(); //if true motion was detected so post to cloud } else mReset = true; //reset logic tracker digitalWrite(6,LOW); } } //Posts temp data to thingspeak cloud void tempHttpRequest() { // read analog pin 0 with temp sensor connected int sensorValue = analogRead(0);
// create data string to send to ThingSpeak String data = String("field1=" + String(sensorValue, DEC));
// POST data to ThingSpeak if (tClient.connect(server, 80)) { tClient.println("POST /update HTTP/1.1"); tClient.println("Host: api.thingspeak.com"); tClient.println("Connection: close"); tClient.println("User-Agent: ArduinoWiFi/1.1"); tClient.println("X-THINGSPEAKAPIKEY: "+writeAPIKey); tClient.println("Content-Type: application/x-www-form-urlencoded"); tClient.print("Content-Length: "); tClient.print(data.length()); tClient.print("\n\n"); tClient.print(data); // close any connection before sending a new request tClient.stop(); // note the last connection time tempLastConnectionTime = millis(); } } //posts motion detection data to thingspeak cloud void mHttpRequest() {
// create data string to send to ThingSpeak, we always send a one here to indicate motion detected String data = String("field2=" + String(1,DEC));
// POST data to ThingSpeak if (mClient.connect(server, 80)) { mClient.println("POST /update HTTP/1.1"); mClient.println("Host: api.thingspeak.com"); mClient.println("Connection: close"); mClient.println("User-Agent: ArduinoWiFi/1.1"); mClient.println("X-THINGSPEAKAPIKEY: "+writeAPIKey); mClient.println("Content-Type: application/x-www-form-urlencoded"); mClient.print("Content-Length: "); mClient.print(data.length()); mClient.print("\n\n"); mClient.print(data); // close any connection before sending a new request mClient.stop(); // note the last connection time mLastConnectionTime = millis(); } }
%*************************MATLAB code from video***************************
In this video we look at what are compiler directives and how they can come in handy.
//***********************Arduino code from the video*********** /* * This code was made for a video tutorial on ForceTronics YouTube Channel called "Using Compiler Directives with Arduino" * This code free to be used or modified by anybody at your own risk * */ //#define SERIAL_PRINT 1 #define ADC_PIN (uint8_t)A0 #ifdef SERIAL_PRINT #define _SERIAL_BEGIN(x) Serial.begin(x); #define _SERIAL_PRINT(x) Serial.print(x); #define _SERIAL_PRINTLN(x) Serial.println(x); #else #define _SERIAL_BEGIN(x) #define _SERIAL_PRINT(x) #define _SERIAL_PRINTLN(x) #endif void setup() { _SERIAL_BEGIN(57600); //start serial comm if enabled //This will only print if SERIAL_PRINT is 1 _SERIAL_PRINTLN("We are going to take an ADC reading every 2 sec..."); } void loop() { _SERIAL_PRINT("The latest ADC measurement is "); _SERIAL_PRINTLN(analogRead(ADC_PIN)); delay(2000); }
In the final conclusion of this four part series on using the Amazon Echo and Arduino for home automation we look at the Arduino hardware setup for monitoring the current consumption of a washer machine and reports its state to the cloud.